From 4491c03014008046746b569108b7ea629d963e71 Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Thu, 20 Jan 2022 15:06:05 -0500 Subject: [PATCH] bash-5.2-alpha release --- CHANGES | 323 + COMPAT | 38 +- CWRU/changelog | 11056 ++++------------- CWRU/misc/bison | 0 INSTALL | 116 +- MANIFEST | 56 +- Makefile.in | 77 +- NEWS | 139 + POSIX | 12 +- RBASH | 11 +- README | 6 +- aclocal.m4 | 888 +- alias.c | 2 +- array.c | 75 +- array.h | 67 +- array2.c | 1374 +++ arrayfunc.c | 373 +- arrayfunc.h | 54 +- assoc.c | 26 +- assoc.h | 3 +- bashansi.h | 5 +- bashhist.c | 15 +- bashjmp.h | 3 +- bashline.c | 330 +- builtins.h | 3 +- builtins/Makefile.in | 20 +- builtins/bashgetopt.c | 17 +- builtins/bashgetopt.h | 3 +- builtins/bind.def | 4 +- builtins/command.def | 4 +- builtins/common.c | 94 +- builtins/common.h | 43 +- builtins/complete.def | 12 +- builtins/declare.def | 946 +- builtins/enable.def | 54 +- builtins/evalstring.c | 99 +- builtins/exec.def | 11 +- builtins/exit.def | 4 +- builtins/fc.def | 7 +- builtins/gen-helpfiles.c | 3 +- builtins/hash.def | 4 +- builtins/help.def | 5 +- builtins/history.def | 46 +- builtins/mapfile.def | 23 +- builtins/mkbuiltins.c | 30 +- builtins/printf.def | 58 +- builtins/read.def | 172 +- builtins/reserved.def | 12 +- builtins/set.def | 34 +- builtins/setattr.def | 7 +- builtins/shopt.def | 36 +- builtins/trap.def | 7 +- builtins/ulimit.def | 13 +- builtins/wait.def | 16 +- command.h | 14 +- config-bot.h | 4 +- config-top.h | 10 +- config.h.in | 55 +- configure | 13627 +++++++++++---------- configure.ac | 236 +- configure.in | 1161 -- doc/FAQ | 4 +- doc/Makefile.in | 30 +- doc/bash.0 | 3269 ++--- doc/bash.1 | 587 +- doc/bash.html | 652 +- doc/bash.info | 1922 +-- doc/bash.pdf | Bin 381560 -> 396970 bytes doc/bash.ps | 14261 +++++++++++----------- doc/bashref.dvi | Bin 789640 -> 816392 bytes doc/bashref.html | 5398 ++++----- doc/bashref.info | 1921 +-- doc/bashref.pdf | Bin 769844 -> 790709 bytes doc/bashref.ps | 16349 +++++++++++++------------- doc/bashref.texi | 1234 +- doc/builtins.0 | 1114 +- doc/builtins.1 | 10 +- doc/builtins.ps | 4647 ++++---- doc/rbash.0 | 7 +- doc/rbash.1 | 2 +- doc/rbash.ps | 10 +- doc/version.texi | 12 +- error.c | 28 +- error.h | 9 + eval.c | 5 +- examples/loadables/Makefile.in | 11 +- examples/loadables/README | 14 +- examples/loadables/accept.c | 41 +- examples/loadables/cat.c | 22 +- examples/loadables/cut.c | 4 + examples/loadables/getconf.c | 1163 ++ examples/loadables/getconf.h | 136 + examples/loadables/head.c | 3 + examples/loadables/realpath.c | 99 +- examples/loadables/rm.c | 6 +- examples/loadables/sleep.c | 98 +- examples/loadables/stat.c | 56 +- examples/loadables/tee.c | 7 +- examples/loadables/tty.c | 3 +- examples/misc/aliasconv.bash | 0 examples/misc/aliasconv.sh | 0 examples/misc/cshtobash | 0 examples/scripts/inpath | 0 examples/scripts/shprompt | 0 examples/scripts/xterm_title | 0 examples/scripts/zprintf | 0 examples/shellmath/LICENSE | 677 ++ examples/shellmath/README.md | 166 + examples/shellmath/assert.sh | 85 + examples/shellmath/faster_e_demo.sh | 68 + examples/shellmath/image.png | Bin 0 -> 48779 bytes examples/shellmath/runTests.sh | 124 + examples/shellmath/shellmath.sh | 1068 ++ examples/shellmath/slower_e_demo.sh | 55 + examples/shellmath/testCases.in | 142 + examples/shellmath/timingData.txt | 42 + execute_cmd.c | 286 +- expr.c | 17 +- externs.h | 11 +- findcmd.c | 16 +- flags.c | 2 +- general.c | 11 +- general.h | 3 +- hashcmd.c | 2 +- include/chartypes.h | 24 +- include/posixdir.h | 2 +- include/posixtime.h | 41 +- include/shmbchar.h | 2 +- include/stdc.h | 2 +- include/timer.h | 64 + include/typemax.h | 20 +- input.c | 2 +- jobs.c | 98 +- jobs.h | 4 + lib/glob/Makefile.in | 3 +- lib/glob/glob.c | 135 +- lib/glob/glob.h | 3 +- lib/glob/sm_loop.c | 55 +- lib/glob/smatch.c | 23 +- lib/glob/strmatch.h | 3 +- lib/intl/VERSION | 2 + lib/intl/ref-add.sin | 0 lib/intl/ref-del.sin | 0 lib/malloc/Makefile.in | 5 +- lib/malloc/malloc.c | 207 +- lib/malloc/mstats.h | 4 +- lib/readline/Makefile.in | 3 +- lib/readline/bind.c | 153 +- lib/readline/callback.c | 11 +- lib/readline/chardefs.h | 31 +- lib/readline/colors.c | 23 +- lib/readline/compat.c | 22 +- lib/readline/complete.c | 94 +- lib/readline/display.c | 118 +- lib/readline/doc/Makefile | 26 +- lib/readline/doc/hsuser.texi | 10 +- lib/readline/doc/rltech.texi | 53 +- lib/readline/doc/rluser.texi | 34 +- lib/readline/doc/version.texi | 8 +- lib/readline/funmap.c | 6 +- lib/readline/histexpand.c | 45 +- lib/readline/histfile.c | 12 +- lib/readline/histlib.h | 10 +- lib/readline/history.c | 4 +- lib/readline/history.h | 79 +- lib/readline/histsearch.c | 4 +- lib/readline/input.c | 319 +- lib/readline/isearch.c | 18 +- lib/readline/keymaps.h | 18 +- lib/readline/kill.c | 34 +- lib/readline/macro.c | 2 + lib/readline/mbutil.c | 36 +- lib/readline/misc.c | 64 +- lib/readline/nls.c | 10 +- lib/readline/parens.c | 8 +- lib/readline/posixdir.h | 2 +- lib/readline/posixtime.h | 84 + lib/readline/readline.c | 88 +- lib/readline/readline.h | 596 +- lib/readline/rldefs.h | 8 +- lib/readline/rlmbutil.h | 38 +- lib/readline/rlprivate.h | 318 +- lib/readline/rlshell.h | 12 +- lib/readline/rltty.c | 38 +- lib/readline/rltypedefs.h | 56 +- lib/readline/search.c | 48 +- lib/readline/shell.c | 4 +- lib/readline/signals.c | 73 +- lib/readline/terminal.c | 25 +- lib/readline/text.c | 38 +- lib/readline/tilde.h | 22 +- lib/readline/undo.c | 6 +- lib/readline/util.c | 7 +- lib/readline/vi_mode.c | 123 +- lib/readline/xmalloc.h | 8 +- lib/sh/Makefile.in | 17 +- lib/sh/casemod.c | 10 +- lib/sh/fmtullong.c | 2 +- lib/sh/input_avail.c | 2 +- lib/sh/setlinebuf.c | 5 - lib/sh/shquote.c | 2 +- lib/sh/snprintf.c | 20 +- lib/sh/strftime.c | 9 +- lib/sh/strtoimax.c | 10 +- lib/sh/strtol.c | 2 +- lib/sh/strtoll.c | 4 +- lib/sh/strtoull.c | 4 +- lib/sh/strtoumax.c | 10 +- lib/sh/timers.c | 262 + lib/sh/unicode.c | 2 +- lib/sh/winsize.c | 10 +- lib/sh/zread.c | 6 +- lib/termcap/termcap.c | 7 +- lib/tilde/Makefile.in | 5 +- lib/tilde/tilde.h | 22 +- locale.c | 18 +- m4/gettext.m4 | 10 +- m4/threadlib.m4 | 6 +- make_cmd.c | 31 +- nojobs.c | 2 +- parse.y | 1038 +- parser-built | 19 +- parser.h | 4 +- patchlevel.h | 4 +- pcomplete.c | 4 +- pcomplib.c | 4 +- po/bash.pot | 813 +- po/de.gmo | Bin 94744 -> 133915 bytes po/de.po | 966 +- po/el.gmo | Bin 74685 -> 84727 bytes po/el.po | 853 +- po/id.gmo | Bin 87778 -> 100273 bytes po/id.po | 2751 +++-- po/pt_BR.gmo | Bin 182906 -> 182909 bytes po/pt_BR.po | 6 +- po/ro.gmo | Bin 13361 -> 13353 bytes po/ro.po | 1700 +-- po/zh_CN.gmo | Bin 149832 -> 169521 bytes po/zh_CN.po | 2376 ++-- po/zh_TW.gmo | Bin 152061 -> 152761 bytes po/zh_TW.po | 17 +- print_cmd.c | 13 +- quit.h | 8 +- redir.c | 49 +- redir.h | 5 +- shell.c | 30 +- shell.h | 19 +- sig.c | 2 +- sig.h | 12 +- siglist.c | 3 +- stringlib.c | 15 +- subst.c | 879 +- subst.h | 12 +- support/Makefile.in | 10 +- support/bashbug.sh | 2 +- support/bashbug.sh.in | 2 +- support/bashversion.c | 2 +- support/config.guess | 1272 +- support/config.sub | 111 +- support/shobj-conf | 12 +- support/signames.c | 2 +- test.c | 41 +- test.h | 5 +- tests/alias.right | 1 + tests/alias.tests | 8 + tests/arith.right | 4 +- tests/arith.tests | 4 +- tests/array-at-star | 0 tests/array.right | 60 +- tests/array.tests | 2 + tests/array15.sub | 15 + tests/array27.sub | 8 +- tests/array29.sub | 86 + tests/array30.sub | 46 + tests/assoc.right | 184 +- tests/assoc.tests | 24 +- tests/assoc11.sub | 2 +- tests/assoc12.sub | 74 + tests/assoc13.sub | 44 + tests/assoc14.sub | 35 + tests/assoc15.sub | 92 + tests/assoc16.sub | 56 + tests/assoc17.sub | 58 + tests/assoc18.sub | 59 + tests/assoc9.sub | 29 + tests/builtins.right | 13 +- tests/builtins.tests | 4 +- tests/builtins5.sub | 11 +- tests/case.right | 1 + tests/case.tests | 4 + tests/complete.right | 44 +- tests/comsub-eof.right | 18 +- tests/comsub-eof0.sub | 2 + tests/comsub-eof5.sub | 6 + tests/comsub-posix.right | 20 +- tests/comsub-posix.tests | 26 + tests/comsub-posix5.sub | 70 + tests/comsub.right | 9 + tests/comsub.tests | 1 + tests/comsub5.sub | 43 + tests/cond.right | 8 +- tests/cond.tests | 18 + tests/cprint.right | 2 +- tests/dollar-at-star | 0 tests/dynvar.tests | 13 +- tests/errors.right | 164 +- tests/errors.tests | 5 + tests/errors7.sub | 2 + tests/exec.right | 13 +- tests/exec3.sub | 33 +- tests/exp.right | 15 +- tests/exp.tests | 1 + tests/exp13.sub | 34 + tests/exp8.sub | 3 +- tests/exportfunc.right | 2 +- tests/exportfunc.tests | 10 +- tests/extglob.right | 76 +- tests/extglob.tests | 6 +- tests/extglob2.sub | 26 +- tests/extglob6.sub | 43 + tests/extglob7.sub | 97 + tests/func.tests | 6 + tests/getopts10.sub | 4 +- tests/glob.right | 6 +- tests/glob.tests | 1 + tests/glob10.sub | 32 + tests/glob5.sub | 2 + tests/glob6.sub | 1 + tests/heredoc.right | 36 +- tests/heredoc.tests | 7 + tests/heredoc6.sub | 50 + tests/heredoc7.sub | 29 + tests/herestr.tests | 6 + tests/history.right | 37 +- tests/history.tests | 1 + tests/history6.sub | 55 + tests/jobs.right | 1 + tests/jobs4.sub | 2 + tests/jobs5.sub | 5 + tests/jobs7.sub | 2 + tests/lastpipe.right | 2 + tests/lastpipe.tests | 1 + tests/lastpipe3.sub | 11 + tests/mapfile.right | 1 + tests/mapfile.tests | 7 +- tests/misc/run-r2.sh | 0 tests/misc/sigint-1.sh | 0 tests/misc/sigint-2.sh | 0 tests/misc/sigint-3.sh | 0 tests/misc/sigint-4.sh | 0 tests/nameref.right | 75 + tests/nameref15.sub | 10 + tests/nameref18.sub | 16 + tests/nameref19.sub | 9 + tests/nameref22.sub | 97 + tests/nameref23.sub | 82 + tests/new-exp.right | 44 +- tests/new-exp.tests | 4 + tests/new-exp10.sub | 4 +- tests/new-exp14.sub | 19 +- tests/new-exp16.sub | 63 + tests/nquote.right | 6 + tests/nquote.tests | 8 + tests/nquote4.sub | 6 + tests/posix2.right | 6 +- tests/posix2.tests | 8 +- tests/posixexp.right | 6 +- tests/precedence.tests | 0 tests/printf2.sub | 8 +- tests/quotearray.right | 152 + tests/quotearray.tests | 164 + tests/quotearray1.sub | 131 + tests/quotearray2.sub | 107 + tests/quotearray3.sub | 117 + tests/quotearray4.sub | 116 + tests/quotearray5.sub | 124 + tests/read.right | 24 +- tests/read.tests | 6 + tests/read1.sub | 1 + tests/read2.sub | 39 +- tests/read3.sub | 1 + tests/read7.sub | 61 + tests/read8.sub | 15 + tests/rsh.right | 2 +- tests/run-all | 4 +- tests/run-execscript | 17 + tests/run-minimal | 4 +- tests/run-quotearray | 2 + tests/shopt.right | 14 + tests/tilde.tests | 4 +- tests/tilde2.right | 4 + tests/tilde2.tests | 2 + tests/tilde3.sub | 26 + tests/type.right | 4 +- tests/varenv.right | 13 +- tests/varenv.tests | 1 + tests/varenv13.sub | 1 + tests/varenv22.sub | 17 + tests/vredir.right | 1 + tests/vredir.tests | 1 + tests/vredir8.sub | 13 + trap.c | 92 +- trap.h | 3 +- unwind_prot.c | 9 +- variables.c | 227 +- variables.h | 4 +- version.c | 4 +- y.tab.c | 2933 +++-- y.tab.h | 19 +- 409 files changed, 60284 insertions(+), 51644 deletions(-) mode change 100755 => 100644 CWRU/misc/bison create mode 100644 array2.c delete mode 100644 configure.in create mode 100644 examples/loadables/getconf.c create mode 100644 examples/loadables/getconf.h mode change 100755 => 100644 examples/misc/aliasconv.bash mode change 100755 => 100644 examples/misc/aliasconv.sh mode change 100755 => 100644 examples/misc/cshtobash mode change 100755 => 100644 examples/scripts/inpath mode change 100755 => 100644 examples/scripts/shprompt mode change 100755 => 100644 examples/scripts/xterm_title mode change 100755 => 100644 examples/scripts/zprintf create mode 100644 examples/shellmath/LICENSE create mode 100644 examples/shellmath/README.md create mode 100644 examples/shellmath/assert.sh create mode 100644 examples/shellmath/faster_e_demo.sh create mode 100644 examples/shellmath/image.png create mode 100644 examples/shellmath/runTests.sh create mode 100644 examples/shellmath/shellmath.sh create mode 100644 examples/shellmath/slower_e_demo.sh create mode 100644 examples/shellmath/testCases.in create mode 100644 examples/shellmath/timingData.txt create mode 100644 include/timer.h mode change 100755 => 100644 lib/intl/ref-add.sin mode change 100755 => 100644 lib/intl/ref-del.sin create mode 100644 lib/readline/posixtime.h create mode 100644 lib/sh/timers.c mode change 100755 => 100644 support/config.guess mode change 100755 => 100644 support/config.sub mode change 100755 => 100644 tests/array-at-star create mode 100644 tests/array29.sub create mode 100644 tests/array30.sub create mode 100644 tests/assoc12.sub create mode 100644 tests/assoc13.sub create mode 100644 tests/assoc14.sub create mode 100644 tests/assoc15.sub create mode 100644 tests/assoc16.sub create mode 100644 tests/assoc17.sub create mode 100644 tests/assoc18.sub create mode 100644 tests/comsub-posix5.sub create mode 100644 tests/comsub5.sub mode change 100755 => 100644 tests/dollar-at-star create mode 100644 tests/exp13.sub create mode 100644 tests/extglob6.sub create mode 100644 tests/extglob7.sub create mode 100644 tests/glob10.sub create mode 100644 tests/heredoc6.sub create mode 100644 tests/heredoc7.sub create mode 100644 tests/history6.sub create mode 100644 tests/lastpipe3.sub mode change 100755 => 100644 tests/misc/run-r2.sh mode change 100755 => 100644 tests/misc/sigint-1.sh mode change 100755 => 100644 tests/misc/sigint-2.sh mode change 100755 => 100644 tests/misc/sigint-3.sh mode change 100755 => 100644 tests/misc/sigint-4.sh create mode 100644 tests/nameref22.sub create mode 100644 tests/nameref23.sub create mode 100644 tests/new-exp16.sub create mode 100644 tests/nquote4.sub mode change 100755 => 100644 tests/precedence.tests create mode 100644 tests/quotearray.right create mode 100644 tests/quotearray.tests create mode 100644 tests/quotearray1.sub create mode 100644 tests/quotearray2.sub create mode 100644 tests/quotearray3.sub create mode 100644 tests/quotearray4.sub create mode 100644 tests/quotearray5.sub create mode 100644 tests/read7.sub create mode 100644 tests/read8.sub create mode 100644 tests/run-quotearray create mode 100644 tests/tilde3.sub create mode 100644 tests/varenv22.sub create mode 100644 tests/vredir8.sub diff --git a/CHANGES b/CHANGES index 7a47c7c57..682d1e37f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,326 @@ +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 $( 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. + +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}&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. + +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. The non-incremental history searches now leave the current history offset + at the position of the last matching history entry, like incremental search. + +j. 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. diff --git a/COMPAT b/COMPAT index 5cfb83600..aa25f19d8 100644 --- 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 ========================= @@ -543,6 +551,28 @@ compat50 (set using BASH_COMPAT) output in a format that can be reused as input (-l). Bash-5.1 suppresses that message if -l 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 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 ------------------------------------------------------------------------------- diff --git a/CWRU/changelog b/CWRU/changelog index 27f62c026..596830c2a 100644 --- a/CWRU/changelog +++ b/CWRU/changelog @@ -1,9182 +1,2916 @@ - 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 +[bash-5.1 released] - 9/18 + 12/7 ---- -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 - - print_deferred_heredocs: don't print heredoc headers, since they're - now printed in print_redirection_list - - print_deferred_heredocs: use print_heredoc_bodies +Makefile.in + - bashline.o: add dependency on ${DEFDIR}/builtext.h. Report from + Fazal Majid - 9/20 - ---- -builtins/mapfile.def - - readarray: update usage synopsis to include -d delim. Report and - fix from jhankins@homewood.k12.al.us + 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 -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 +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 -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 - - 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 +arrayfunc.h + - kvpair_assignment_p, expand_and_quote_kvpair_word: extern declarations - 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 - +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 - 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 + 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 - 9/23 - ---- + 12/18 + ----- 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 - - -builtins/declare.def - - local_builtin: allow `local --help' to work even when not executing - a function. Suggestion from Norm Abramovitz + - 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 - 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 + 12/21 + ----- +doc/bashref.texi + - PROMPT_COMMANDS: clean up a couple of remaining instances of this + name. Report from Eli Schwartz + 12/26 + ----- 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 + - 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 -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 and followup from - Christian Franke - -variables.c - - all_array_variables: include associative arrays, not just indexed - arrays. Reported by Grisha Levit + 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 -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 - + 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 -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 - +examples/loadables/Makefile.in + - stat: now built and installed by default -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 - - -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 + 12/31 + ----- +command.h + - SUBSHELL_IGNTRAP: new flag value 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 - + - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the + child process, meaning that we should not execute trap handlers for + trapped signals - 9/26 - ---- -subst.c - - read_comsub: only warn once for null bytes in command substitution - output, instead of once for every null byte +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 -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 +subst.c + - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after + the child process has reset the trapped signal dispositions -arrayfunc.h - - array_variable_{name,part}: added new argument to prototypes +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 + (or at least makes the race window much smaller) - 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 and - Valentin Bajrami - -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 - -trap.h - - check_signals: new extern declaration - - trapped_signal_received: new extern declaration +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 -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 + 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 -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 + 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 - 9/30 + 1/12 ---- +locale.c + - local_shiftstates -> locale_shiftsates in the non-multibyte code + branch. Reported by Henry Bent + 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 + - 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 + - 10/3 + 1/13 ---- -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 +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 - 10/5 + 1/14 ---- -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 - +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 - 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 +lib/sh/winsize.c + - get_new_window_size: set *rp and *cp even if READLINE is not defined + + 1/15 ---- -array.c - - array_remove: short-circuit if asked to remove index after max - index or before first index +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 - 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 +support/Makefile.in + - man2html: add LDFLAGS_FOR_BUILD to the recipe. Report from + Jeffrey Walton -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 + 1/17 + ---- +lib/readline/misc.c + - rl_operate_and_get_next: fix old K&R function declaration. Report + from Tom Tromey - 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 +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 -subst.c - - process_substitute: if make_child fails, make sure we call - restore_pipeline to undo the previous save_pipeline() +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 - 10/15 - ----- + 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 + + 1/21 + ---- 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 + - 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 -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 + 1/22 + ---- +builtins/declare.def + - Rewrote to reduce complexity. Still needs some work. -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 +lib/readline/*.h, lib/tilde/tilde.h + - PARAMS: remove, rely on compilers understanding function prototypes - 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 +lib/readline/{undo.c,histlib.h} + - _hs_replace_history_data: move extern declaration to histlib.h - 10/19 - ----- -variables.c - - get_bashpid: BASHPID is no longer readonly; assignments to it are - just ignored. +lib/readline/readline.c + - _rl_parse_colors: instead of an extern declaration for this, include + "parse-colors.h" for it -doc/{bash.1,bashref.texi} - - BASHPID: note that assignments are ignored and unsetting BASHPID - causes it to lose its special properties +lib/readline/{histfile.c,histlib.h} + - _hs_append_history_line: move extern declaration to histlib.h - 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 +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/readline/histfile.c - - chown: protect calls with HAVE_CHOWN. Fixes for MinGW{64,32} from - J. Peter Mugaas +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/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 +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 -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 + 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 -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 + 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 , pointer + to root cause from Koichi Murase - 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 +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 -doc/{bash.1,bashref.texi} - - EPOCHSECONDS documentation - - EPOCHREALTIME documentation + 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 - - 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 + - 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 - 10/31 - ----- -lib/malloc/malloc.c - - posix_memalign: add new posix-mandated interface +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 -examples/loadables/rm.c - - rm: minimal loadable builtin, removes files and directories, only - handles -r and -f options. Original from Tim Ruehsen - , heavily rewritten for inclusion as loadable + 2/2 + --- +lib/glob/glob.c + - dequote_pathname: fix function definition for non-multibyte systems. + Report and fix from Marc Aurèle La France -examples/loadables/Makefile.in - - rm: add rules to build rm as one of the `other' targets +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 -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) +examples/loadables/accept.c + - include limits.h before typemax.h + Report and fix from Marc Aurèle La France - 11/1 - ---- -variables.c - - BASH_ARGV0: new dynamic variable, returns $0 on reference and sets - $0 on assignment. From a suggestion from Rocky Bernstein - a few years ago +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 -doc/{bash.1,bashref.texi} - - BASH_ARGV0: document +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 - 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 - - 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 +configure.ac + - HELPDIR: now ${datadir}/bash/helpfiles -jobs.c - - discard_last_procsub_child: new function, safely discards - last_procsub_child and sets it to NULL + 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 -subst.c - - process_substitute: call discard_last_procsub_child instead of - calling discard_pipeline directly. Fixes bug reported by - Christian Weisgerber + 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 - 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 +array.h + - array_pop: instead of calling array_dispose_element from this macro, + just call array_shift with the AS_DISPOSE flag -examples/loadables/rm.c - - if we see the -i option, return EX_DISKFALLBACK + 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 -execute_cmd.c - - execute_simple_command: if executing a builtin returns EX_DISKFALLBACK, - try running execute_disk_command instead +array.h,variables.c + - ARRAY_ELEMENT_REPLACE: convenience define for modifying an array + element's value -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 based on an old bug-bash - discussion +variables.c + - pop_args: a couple of code simplifications -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 + 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 - 11/4 + 2/10 ---- -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 +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/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 +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 . Not used yet - 11/5 + 2/11 ---- -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 +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 , but + there may be a different fix coming -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 +Makefile.in,builtins/Makefile.in + - fix up dependencies, especially on builtins.h and builtext.h -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 - - 11/6 + + 2/12 ---- -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 +lib/readline/input.c + - rl_read_key: if we set rl_done == 1, set RL_STATE_DONE as well + Reported by Koichi Murase -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 +lib/readline/isearch.c + - _rl_search_getchar: only call _rl_read_mbstring if rl_read_key returns + >= 0, avoid some work -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 +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 -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 +lib/readline/text.c + - _rl_overwrite_char: return 1 if _rl_read_mbstring returns < 0 so + we don't try to insert garbage -test.c - - unary_test: make sure if we test -v array[@] or array[*] that we - free the return value from array_value +bashline.c + - posix_edit_macros: handle rl_read_key() returning <= 0 - 11/8 + 2/15 ---- -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 +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 + - 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 -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 - - - optimize_subshell_command: ditto + 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 - 11/9 + 2/17 ---- -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 +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 -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 - - 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 - - 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 + 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 -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) + 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 - 11/12 - ----- -configure.ac - - changes to make --enable-profiling work on Linux (-pg, no static link, - no -static in LDFLAGS) + 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 -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) +doc/{bash.1,bashref.texi} + - clarify some aspects of the coproc description, especially the + use of NAME and when it's optional -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 + 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 in + https://savannah.gnu.org/patch/?10035 -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 + 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 . Available + at https://github.com/clarity20/shellmath -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) + 3/4 + --- +support/shobj-conf + - darwin: take out the -arch-only option in SHOBJ_XLDFLAGS and + SHOBJ_ARCHFLAGS; no longer needed -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 +doc/{bash.1,bashref.texi} + - coprocesses: suggested changes from rms@gnu.org; recommend the + `coproc NAME { commands; }' form as the simplest and most flexible - 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 - - 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 - - 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 <\> and - skip to the end of string processing. Fixes oob-read error - reported by Jerzy Kramarz - -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 - - - ANDOR: check s[1] before checking s[2] in case s[1] == end of string. - Fixes oob-read error reported by Jerzy Kramarz - -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 - - -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 - - 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 - - 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 - - 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 - -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 - - -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 - - -tests/execscript - - use $PWD/exec8.sub to protect against someone who has a cd command - in his bashrc. Report from Vladimir Marek - - - 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 - - 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 - -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 - -Makefile.in - - bashbug: use `^' as the sed delimiter instead of `%'; some compilers - use `%' in CFLAGS. Report from Vladimir Marek - - - 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 - - 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 - - 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 character class - -builtins/printf.def - - printf_builtin: when processing the `%q' format, make sure to - backslash quote all 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 - - -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 - -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) - -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 - -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 - - 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 - - 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 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - - 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 - -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 - - 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 - - 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 - - - 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 - -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 - - - 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 - - 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 - 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 , patch was originally - contributed by Geir Hauge - - 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 - - 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 - - -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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - -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 - - 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 - - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore - the nameref attribute. Report from Grisha Levit - - -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 , 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 - -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 - - 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 - - - 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 - - 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 - - - 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 - -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 - -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 - - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - - - 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 - - -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 - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - -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 - - - 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 - -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 - - -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 - - - 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 - -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 - . 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 , - fix from Eduardo Bustamante - - 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 - - 4/25 - ---- -doc/{bash.1,bashref.texi} - - cmdhist: clarify that this option only has an effect if history is - enabled. Suggested by Matthew Braun - - 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 - - -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 - - 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 - - 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 - - - 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 - -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 - - - 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 - , 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 - - -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 - - - 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 before . Fix from Eli Zaretskii - - -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 - - 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 - - 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 - - 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 - - - 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 - -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 - -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 - - 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 - - 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 - -lib/readline/histfile.c - - read_history_range: if the file isn't a regular file, return an - error. Bug report from Eduardo Bustamante , - 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 - - - 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 , 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 - -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 - - 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 . Report from Chi-Hsuan Yen - - 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 - -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 - - 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 - - -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 - - -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 - -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 - - 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 - - -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 - -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 - -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 - - - 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 - 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 - - 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 - - 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 . 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 - - 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 - - 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 - - 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 - - - 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 - -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 - - - 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 - - - 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 - - -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 - - 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 - - - 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 - - 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 - - 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 - -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 , the result of a fuzzing test. Pointer - to place for the fix from Eduardo Bustamante - - 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 - -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 - - 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 - - - 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 - 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 ; fix - from Eduardo Bustamante - - 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 , 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 - - 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 - - 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 - - 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 - -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 - -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 - - 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 - - - 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 - - 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 - -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 - -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 - - 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 - -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 - - 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 - - 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 - - -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 - - -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 - - 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 - - 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 ; 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - - 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 - -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 - - 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 - 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 - -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 - - 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 - - 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 - - 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 - - - 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 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 - -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 - - 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 - -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 - - 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 - - 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 - - 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 - - -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 - - 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 - - -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 ÐиÑиллов Ðима - - 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 - - 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 - - - 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 - - - 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 - - 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 - - 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 - - -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 - - - 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 - - -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 - - 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 - -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 - - 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 - - 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 - -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 - - 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 - -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 - -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 - - -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 - - - 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 - - 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 - - - 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 - - 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 - -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 - - 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 - -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 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 - - 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 - -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 - - 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 - - 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 - -lib/sh/getenv.c - - getenv: check that environ is non-NULL before looking through it. - Report and fix from Keeley Hoek - - 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 - 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 - -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 - - - 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 - - - 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 - -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 - - -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 - - - 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 - - - 7/29 - ---- -subst.c - - get_var_and_type: if VALUE is NULL, check before calling dequote_string. - Report and fix from Grisha Levit - - 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 - - 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 - - - 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 - - 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 - - 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 - - {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 - - 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 - - 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 - - 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 - - -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 - - - 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 - - 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 - - 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 - -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 - -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 - -builtins/fc.def,execute_cmd.c - - fixed some missing free()s uncovered by coverity. Report from - Siteshwar Vashisht - -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 - - 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 - -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 - - - 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 - - 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 - -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 , originally from Eli Zaretskii - - - 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 - - - 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 - -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 - - 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 - - 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 - - - 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 - - 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 - - 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 - - - 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 - ; fix inspired by Martijn Dekker - - - 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 - - - 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 - - - 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 - - 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 - -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 - - -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 - - - 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 - -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 - - -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 - - -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 - - - 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 - -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 - - 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 - - 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 - - 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 - - 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 - -[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 - -expr.c - - expr_skipsubscript: fix return type. Report and fix from - Andreas Schwab - - 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 - - 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 - - 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 - -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 - - 12/6 - ---- -redir.c - - add missing cases to switch statements to shut up gcc - - 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 - - - 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 - - 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 - - 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 - - 12/17 - ----- -expr.c - - exp2 -> expmuldiv - -lib/sh/smatch.c - - fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being - used - -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 - -variables.c - - rseed: make it explicitly 32 bits; that's all we're interested in - anyway - - 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] - - 12/21 - ----- -doc/bash.1 - - }1: remove macro definition; it's outlived its bugfix purpose. - Report from Derek Schrock - - 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 - - expand_word_internal: take out Q_ARRAYSUB check for tilde expansion - - 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 - - -examples/loadables/{basename,dirname}.c - - dirname_builtin: skip over any `--' ending the options. Report from - Peng Yu - - 12/27 - ----- -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 - - 12/28 - ----- -parser.h - - PST_COMMENT: new state, set when the shell is reading characters - until newline as part of comment processing - -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 - - - 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 - -[bash-5.0 frozen] - -[bash-5.0 released] - - 1/6/2019 - -------- - -examples/loadables/basename.c - - make sure to include bashgetopt.h. Reported by Angel - - -lib/malloc/malloc.c - - stdlib.h: include if botch isn't defined to provide a declaration - for abort() - -hashlib.c,Makefile.in - - fixes to make hash library testing work for others from - Eduardo Bustamante - -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 - - 1/8 - --- - -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 - -builtins/declare.def - - declare_internal: don't let `declare -f +f' turn off the function - attribute. Fix from Grisha Levit - - declare_internal: reject attempts to add the -A or -a attributes - to functions. Report from Grisha Levit - - 1/9 - --- -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 - -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 - - 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. - -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 - - 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 - - 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 - - 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 - - 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 - - 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 - -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 - - 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()) - - 1/29 - ---- -builtins/evalstring.c - - can_optimize_connection,optimize_fork: add the last command in lists - separated by `;' to the list of candidates for fork optimization - - 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 - - 1/31 - ---- -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 - -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 - -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 - -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 - -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 - - 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 - - - 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 - - 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 - - 2/11 - ---- -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 - -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 - -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 - - 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 - - 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 - - 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 - -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 - - rl_bind_key: make sure the KEY argument is not larger than the - largest unsigned character. - Report and fix from Koichi Murase - - 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 - - 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 - -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 - - - 2/19 - ---- - -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 - - 2/20 - ---- -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 - - 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 - - 2/21 - ---- -builtins/cd.def - - bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always - failing - -command.h - - W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword} - -subst.c - - expand_string_for_rhs: set W_EXPANDRHS in word to be expanded - -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 - - 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 - - - 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 - -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 - - - 2/25 - ---- -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 - - 2/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 - -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 - - - 2/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 - - 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 - - 3/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 - -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 - - 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 - - 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 - - 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 - - 3/7 - --- -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 - - - 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 - -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 - - 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 - - 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 - -{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 - - 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 - -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) - -array.[ch] - - array_subrange: now takes additional PFLAGS argument to pass to - string_list_pos_params - -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 - -subst.c - - parameter_brace_substring: add PFLAGS argument to array_subrange - -arrayfunc.c - - array_keys: use string_list_pos_params instead of calling - string_list_dollar_{star,at} directly. - -arrayfunc.[ch] - - array_keys: now takes a PFLAGS argument, passes to string_list_pos_params - -subst.c - - parameter_brace_expand: add PFLAGS argument to call to array_keys - -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 - - 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 - - 3/18 - ---- -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 - - 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 - - 3/21 - ---- -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 - -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 - -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 - ---- -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 - - 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 - -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 - - 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 - -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 - - 3/28 - ---- -variable.c - - seedrand: add a couple more variables to the random seed - -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 - -config-{top,bot}.h - - set up to use mkdtemp if available - -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 - -examples/loadables/mktemp.c - - mktemp: new loadable builtin, with BSD options and basic semantics - - 3/29 - ---- -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 - -builtins/read.def - - bind_read_variable: now uses builtin_bind_variable - - 4/4 - --- -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 - - 4/8 - --- -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 -- - '. From an austin-group - interpretation (1212) initiated by Robert Elz . - Tagged for bash-5.1 - - 4/9 - --- -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" - - 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 - -lib/sh/zmapfd.c - - zmapfd: increased the default allocation sizes - -lib/sh/zcatfd.c - - zcatfd: increased the default allocation sizes - -input.c - - localbuf: increased the default buffer size for reads - - 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 - - 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 - - - 4/14 - ---- -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 - - -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 - - - 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 - - - 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 - -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 back in 4/2018 and - addresses the issue raised by Eli Schwartz - - 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ä - -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 - - 4/24 - ---- -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 - - 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 - -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 - -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 - - 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 - - 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 - -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 - - -support/shobj-conf - - hpux11: change stanza to create shared libraries on later versions of - HPUX 11. Contributed by Michael Osipov - -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 - - -configure.ac - - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS - -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 - - 5/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 - - 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) - -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 - - should_suppress_fork: make sure that we don't try to optimize out a - fork if the parser is still expanding an alias - - 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 - -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 - - 5/17 - ---- -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 - - - 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 - - 5/19 - ---- -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 - - 5/20 - ---- -doc/{bash.1,bashref.texi} - - SRANDOM: document new special variable - - 5/22 - ---- -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 - -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 - - 5/23 - ---- -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 - - 5/24 - ---- -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 - - - 5/30 - ---- -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 - -{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 - -jobs.h - - wait_for_job, wait_for_background_pids: add additional argument to - declaration - -builtins/wait.def - - wait_builtin: set pstat.{pid,status} each time through the pid-or-job - loop and for wait without arguments - - 6/4 - --- -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 - -config-top.h - - CASEMOD_CAPCASE: no longer defined by default - - 6/5 - --- -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 - - 6/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 - -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 - - 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 - - 6/12 - ---- -jobs.c - - wait_for_background_pids: wait for the last procsub only if it's the - same as last_asynchronous_pid - -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 - - 6/13 - ---- -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 - - "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 - -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 - -variables.c - - set_argv0: function to assign argv0 if it's found in the initial - shell environment. Suggested by Cuong Manh Le - - - initialize_shell_variables: call set_argv0() as part of shell - initialization - - 6/14 - ---- -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 - - - execute_select_command: do the same thing for the selection variable - after calling bind_variable - - 6/15 - ---- -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 and Robert Elz - - -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 - back in 4/2018 - - 6/19 - ---- -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. - - 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 - -pathexp.h - - posix_glob_backslash: new extern declaration - -builtins/shopt.def - - posixglob: new option, reflects the value of posix_glob_backslash - -general.c - - posix_vars: add posix_glob_backslash to the table - - posix_initialize: set posix_glob_backslash to 1 when turning on - posix mode - - 6/21 - ---- -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 - - 6/27 - ---- -{config.h.in,configure.ac} - - setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as - appropriate - -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 - - 6/28 - ---- -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 - -bashline.c - - completion_glob_pattern: just call glob_pattern_p and make sure it - returns 1 (non-backslash globbing characters) - -builtins/help.def - - help_builtin: don't try pattern matching the help topic argument - unless glob_pattern_p returns 1 - -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 - - 7/1 - --- -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 - -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 - - 7/3 - --- -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 - - 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 - - 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 - - - 7/9 - --- -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 - - 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) - - 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 - -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 - - 7/14 - ---- -variables.c - - sv_tz: remake the export env if TZ is being unset. Fixes bug - reported by Travis Everett - -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 - - 7/16 - ---- -Makefile.in - - added a number of dependencies from Vemake Vemake - as reported in - http://savannah.gnu.org/patch/download.php?file_id=47219 - - 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 - -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 - - - 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 - -shell.c - - set_exit_status: set last_command_exit_value to the argument and make - sure to set PIPESTATUS from that exit value - -shell.h - - set_exit_status: 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 - -sig.c - - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set - last_command_exit_value - -variables.c - - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value - -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/evalstring.c - - parse_and_execute: set PIPESTATUS when we set last_command_exit_value - -braces.c - - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value - -eval.c - - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value - -make_cmd.c - - set PIPESTATUS when setting $? due to syntax errors or constructs - not being available - -expr.c - - expr_streval: set PIPESTATUS when setting $? due to syntax errors - -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 - -redir.c - - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value - on error conditions - -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 - - 7/22 - ---- -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 - - 7/29 - ---- -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 - - -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 - - 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 - - 7/31 - ---- -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 - -lib/readline/misc.c - - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key - -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 - - 8/13 - ---- -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 - - 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 - - 8/26 - ---- -shell.c,bashhist.c - - __P -> PARAMS - -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 - - 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 - -bashhist.c - - enable_history_list: initialize to -1 to note when it gets changed - by -o history or +o history at invocation - - 8/28 - ---- -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 - - 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 - - 8/30 - ---- -tests - - add copyright notices to all scripts longer than 15 lines at the - request of the FSF - - 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. - - 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 - - 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 - - 9/10 - ---- -aclocal.m4,m4/intdiv0.m4 - - make sure `exit' is used consistently with included - - make sure `main' isn't declared to implicitly return int - - include before using ulimit - - include before testing string functions - - fixes from Florian Weimer - -configure.ac - - setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL, - which always fails - -shell.c - - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of - the HAVE_DECL variants, which always fail configure tests - -m4/intl.m4 - - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in - newer gettext releases - - 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 - -builtins/{reserved,complete,exec,getopts}.def - - minor typographical fixes from Roland Illig - -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/getopts.def,doc/{bash.1,bashref.texi} - - getopts: minor changes to the description of the effect of supplying - additional arguments. Report from Roland Illig - - 9/17 - ---- -jobs.[ch] - - save_proc_status: external interface to bgp_add, takes care of - blocking and unblocking SIGCHLD - - __P -> PARAMS - - 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 - -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 - -sig.c - - termsig_handler: replace discard_last_procsub_child with call to - procsub_clear - -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 - - 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 + 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 + via https://savannah.gnu.org/patch/?10039 - 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 - - some changes to the text describing regular expression matching for - the =~ operator + 3/8 + --- +include/timer.h + - SHTIMER_ALRMSET: new flag, indicates that there is an active alarm + associated with this timer (falarm() was called) - 9/25 - ---- -general.c,builtins/shopt.def - - posix_glob_backslash: remove references to this variable and the - `posixglob' shell option +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 -doc/{bash.1,bashref.texi} - - remove references to the `posixglob' shell option + 3/9 + --- +include/posixtime.h + - added some BSD convenience defines if they are not present - 9/26 - ---- -{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 +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 - 9/30 + 3/10 ---- -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.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 - -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 +builtins/common.h + - extern declarations for moving to timers (sh_timer) for read builtin + timeouts - 10/1 - ---- -builtins/shopt.def - - reset_shopt_options: add in resets for some missing shopt options. - Report and fix from Grisha Levit +quit.h + - CHECK_ALRM: remove, no longer used -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 - - 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 - - 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 +trap.c + - check_signals: call check_read_timeout instead of CHECK_ALRM -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 +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/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 +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 + + - 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) - 10/4 + 3/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 - -pathexp.[ch],{bashline,subst}.c - - shell_glob_filename: now takes an additional flags argument to pass - to quote_string_for_globbing +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 + - 10/6 - ---- -subst.c - - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC - because quote removal hasn't been performed yet +lib/readline/readline.h + - extern declarations for new timeout functions and hook + - rl_clear_timeout: new define - 10/7 - ---- -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 (austin-group issue 1234), though - it's still inherently ambiguous +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() - 10/8 - ---- -include/shmbutil.h - - xwcsrtombs: extern declaration, to match other functions in that file +lib/readline/util.c + - _rl_abort_internal: if we time out, don't ring the bell; let the + caller handle it -lib/glob/glob.c - - wcdequote_pathname: new function, actual backslash quote removal code - from wdequote_pathname; wdequote_pathname calls 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/glob/glob.c - - {udequote,wcdequote}_pathname: now public void functions +lib/readline/rlprivate.h + - extern declarations for readline-library-private timeout functions -lib/glob/smatch.c - - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or - wcdequote_pathname +lib/readline/rltty.c + - rl_deprep_terminal: don't print a newline after the bracketed paste + disable sequence if we timed out -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 and - Robert Elz +lib/readline/signals.c + - _rl_handle_signal: if sig is SIGALRM, call _rl_timeout_handle_sigalrm() - 10/10 - ----- -execute_cmd.[ch] - - async_redirect_stdin: now a global function +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 -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 +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 - 10/11 - ----- + 3/12 + ---- 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 + - expand_string_dollar_quote: new function, expands $'...' and $"..." + in a string for those code paths that don't expand it themselves -lib/sh/shmatch.c - - sh_regmatch: implement a suggestion from Grisha Levit - and don't allow nocaseglob to enable case- - insensitive regexp matching. It hasn't been documented that way - in years - - 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 +subst.h + - expand_string_dollar_quote: extern declaration -lib/sh/shmatch.c - - BASH_REMATCH: no longer set to readonly. From a suggestion from - Rocky Bernstein +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 -doc/{bash.1,bashref.texi} - - BASH_REMATCH: document that it's no longer set to readonly +make_cmd.c + - make_here_document: account for read_secondary_line returning newly + allocated memory, free `full_line' appropriately -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 - +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 - 11/4 + 3/15 ---- -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 - -examples/loadables/finfo.c - - include and as appropriate for - definitions of major/minor +subst.c + - expand_string_dollar_quote: fix out-of-order initialization - 11/6 - ---- -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 +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 + - 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 - - 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 - - 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 - - note that the `q' and `x' modifiers are mutually exclusive; last - one wins. Reported by Jim Monte - - note that the `G' modifier can work with `&' as well as `s'. - Reported by Jim Monte - - note that a word designator of `-' is equivalent to `0-'. - Reported by Jim Monte - - note that a missing `new' in a substitution modifier causes - instances of `old' to be deleted - -lib/readline/histexpand.c - - history_expand_internal: make multiple :p modifiers work to suppress - execution. Reported by Jim Monte - - get_history_word_specifier: fix so a `^' word designator works as - the second part of a range. - Reported by Jim Monte - - 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 - - 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 - - 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 + - xparse_dolparen: don't longjmp if FLAGS includes SX_NOLONGJMP. From + a report by Xu Lu + 3/16 + ---- 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 - + - process_substitute: set startup_state and parse_and_execute_level + to see if we can avoid a fork() - 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 - -builtins/wait.def - - interrupt_immediately: remove any uses, no longer used anywheren - -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) - -builtins/common.[ch] - - builtin_unbind_variable: identical to check_unbind_variable but calls - builtin_error; for use by builtin commands - -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 - after a similar feature in netbsd sh (not - completely compatible yet) - -doc/{bash.1,bashref.texi} - - wait: document new -p option +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 + - bash_spell_correct_word: bound to "C-x s" by default in emacs mode - 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 - - -lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 - - horizontal-scroll-mode: document auto-setting behavior + - 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 -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 +doc/bash.1,lib/readline/doc/rluser.texi + - spell-correct-word: document new function and its default binding - 11/26 - ----- + 3/17 + ---- doc/{bash.1,bashref.texi} - - functions: clarify that when in default mode, function names are not - limited to shell identifiers. - Suggested by Reuti + - 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 - 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 - ÐлекÑей Шилин - -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 + 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 - 12/2 + 3/22 ---- -builtins/wait.def - - wait_builtin: allow argument to -p to be a valid array subscript +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 - 12/3 +config-bot.h + - HAVE_MKDTEMP: fix typo + + 3/25 ---- -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 - ÐлекÑей Шилин +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 + -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 + 3/30 ---- -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 +doc/bashref.texi + - expand the node describing $"..." string translation with additional + details and examples + + 3/31 ---- -lib/readline/display.c - - ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos - is changed +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 - 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 +vi_mode.c + - rl_vi_fetch_history: call rl_fetch_history - 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 - +readline.h + - rl_fetch_history: new extern declaration -bashline.[ch] - - bash_execute_unix_command: no longer static, available for other - parts of the shell to use +doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} + - rl_fetch_history: add description -bashline.c - - unbind_unix_command: take a key sequence as an argument, and unbind - it in the appropriate unix command keymap +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 + -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 and recently by - Å imon Let - - 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 + 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. - 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 +parse.y: + - select_command: use compound_list instead of list, like for_command. + Report by Greywolf + - list: move this into compound_list (replacing the instance of `list' + in the compound_list production), remove from the grammar -lib/readline/signals.c - - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code, - like _rl_handle_signal does + 4/6 + --- +arrayfunc.c + - unbind_array_element: use VA_NOEXPAND instead of literal 1 - 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 + 4/7 + --- +lib/readline/funmap.c + - default_funmap: add missing `vi-undo' to the list of vi-mode bindable + functions. Reported by Xirui Zhao -pathexp.c - - shell_glob_filename: call strvec_sort with the flag value to be - posix conformant + 4/8 + --- -lib/sh/stringlist.c - - strvec_sort: change callers +config-top.h + - DEFAULT_LOADABLE_BUILTINS_PATH: default value for BASH_LOADABLES_PATH - 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 +doc/{bash.1,bashref.texi} + - enable: note that it uses $BASH_LOADABLES_PATH, and that the default + is system-dependent - 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 +variables.c + - initialize_shell_variables: initialize BASH_LOADABLES_PATH to the + default given in DEFAULT_LOADABLE_BUILTINS_PATH - 1/15 + 4/12 ---- -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 - -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 - -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 - -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 - - 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 - - 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 +doc/{bash.1,bashref.texi} + - add link to git master tar file as a place to get the current version -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 - - 1/16 + 4/14 ---- -general.c - - posix_initialize: if turning posix mode off, restore settings from - any saved set, if one exists, instead of setting a default environment +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 - 1/17 + 4/16 ---- -parse.y,subst.c - - process_substitution: now available in POSIX mode. Most recently - requested by Martijn Dekker ; requested several - times in the past - -doc/bashref.texi - - posix mode: remove restriction that posix mode is not available - -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 - - vi_yank_dispatch: after we do an undo, make sure to fix point to be - less than the (new) rl_end - -lib/readline/text.c - - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on - invalid multibyte sequences +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 - 1/18 - ---- -test.c - - for the `-v' operator, use a clever trick from Martijn Dekker and - just test whether N is between 0 and $#. +lib/readline/doc/rltech.texi + - RL_PROMPT_{START,END}_IGNORE: document current values of \001 and + \002. Report from Mingye Wang - 1/21 + 4/19 ---- -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/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 +arrayfunc.c + - assign_assoc_from_kvlist: fix memory leak reported by konsolebox + - 1/22 + 4/20 ---- -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 - -lib/readline/text.c - - rl_delete_text: if deleting text leaves the mark past rl_end, adjust - it to rl_end - -lib/readline/vi_mode.c - - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting - rl_point to rl_mark +command.h,subst.c + - W_ITILDE: remove, replace with a variable since it's only used inside + a single call to expand_word_internal - 1/23 + 4/21 ---- -lib/readline/kill.c - - rl_kill_region,region_kill_internal: call _rl_fix_point - -lib/readline/text.c,lib/readline/rlprivate.h - - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end +{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) - 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 - - rl_invoking_keyseqs_in_map: make sure to consistently output - backslash as `\\' instead of producing `\C-\' - Fixes from Koichi Murase - - 1/29 + 4/24 ---- 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 + - 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 -doc/{bash.1,bashref.texi} - - READLINE_MARK: document new variable set by the shell - - 1/31 + 4/26 ---- -examples/loadables/accept.c - - accept: new loadable builtin that will accept a TCP connection on a - specified port. Inspired by Stan Marsh - - 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 +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 - 2/3 - --- -lib/sh/ufuncs.c - - fsleep: if pselect/select is interrupted by a signal, return -1 and - let the caller deal with it +subst.h + - ASS_ALLOWALLSUB: new assignment flag value, means to allow @ and * as + valid array subscripts when assigning to existing associative arrays -lib/sh/timeval.c - - multimeval: new function, multiply a timeval by a constant integer - - divtimeval: new function, divide a timeval by a constant integer +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 -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 +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 - 2/4 - --- -examples/loadables/mkfifo.c - - mkfifo: new loadable builtin +subst.c + - do_assignment_internal: allow a[@]=value to an existing associative + array by passing ASS_ALLOWALLSUB to assign_array_element - 2/6 - --- -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 back in 12/2018 + 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 - 2/7 - --- -sig.[ch] - - restore_sigmask: function to restore top-level signal mask using - sigprocmask +builtins/wait.def + - builtin_bind_var_to_int: use instead of bind_var_to_int -{sig,eval,jobs,nojobs}.c - - replace calls to sigprocmask with restore_sigmask(); remove extern - declarations of top_level_mask +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 -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 +builtins/variables.[ch] + - bind_var_to_int: add third `flags' argument to pass to bind_variable + instead of always passing 0 -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 following up to a report - by Martijn Dekker +redir.c,builtins/common.c,builtins/printf.def + - bind_var_to_int: change callers, add third flags argument - 2/10 +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 ---- -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) +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 -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 +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. - 2/11 - ---- -expr.c - - strlong: require `base#' to be followed by an integer constant; - otherwise throw an error. From a report from Jeremy Townshend - back in June, 2019 +doc/bash.1,lib/readline/doc/{readline.3,rltech.texi} + - enable-active-region: document new bindable readline variable and + its effects -test.c - - unary_test: allow -v N to test whether or not positional parameter - N is set. Most recently suggested by Peng Yu - and Martijn Dekker + 4/30 + ---- +command.h + - W_ARRAYREF: new flag, meaning the word is a valid array reference + with subscript, replaces W_DOLLARSTAR, which was unused -builtins/getopts.def - - dogetopts: use number_of_args() to compute the number of positional - parameters +subst.c + - expand_subscript_string,expand_array_subscript: new functions to + parse and expand-and-quote array subscripts. For future use -{findcmd,variables,subst,trap,sig}.h,builtins/common.h - - __P --> PARAMS + 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 -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 +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 -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 + 5/4 + --- - 2/12 - ---- -subst.c - - number_of_args: just return posparam_count +builtins/mapfile.def + - mapfile: call zsyncfd before calling the callback. Suggested by + Koichi Murase ; we'll see how it goes -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 + 5/5 + --- +subst.h + - expand_subscript_string: extern declaration -subst.[ch],builtins/common.[ch] - - number_of_args: moved to builtins/common.c +{arrayfunc,subst}.c + - expand_subscript_string: replace expand_assignment_string_to_string + with calls to this when expanding array subscripts - 2/14 - ---- subst.c - - clear_fifo_list: when using named pipes, clear out the FIFO list - without unlinking anything and set NFIFO to 0 + - 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 -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 + 5/6 + --- -parse.y - - special_case_tokens: allow `time -- command' +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 - 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 ; - 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 - - 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 - ---- + - 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 - - 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 + - execute_cond_node: if -v is the operator, and the operand is a valid + array reference, pass TEST_ARRAYEXP flag to unary_test -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 - + 5/7 + --- +builtins/common.[ch] + - set_expand_once: set array_expand_once to the value passed as the + first argument, returning the original value - 2/23 - ---- -trap.c - - first_pending_trap: generalize into first_pending_trap and - next_pending_trap +builtins.h + - ARRAYREF_BUILTIN: new flag for shell builtins, means that the builtin + can take array references, with subscripts, as arguments -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 +builtins/mkbuiltins.c + - set ARRAYREF_BUILTIN flag on builtins given in the arrayvar_builtins + array -trap.c - - trap_handler: longjmp to wait_intr_buf unconditionally if - wait_intr_flag is set; don't bother with interrupt_immediately any - more +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) -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 +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 -variables.h - - all_local_variables: change extern function declaration + 5/9 + --- -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 +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 - - show_local_var_attributes, show_localname_attributes: new extern - declarations - -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 + - expand_once_flag: extern declaration -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 - - 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 - - 2/24 + 5/10 ---- -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" +doc/{bash.1,bashref.texi} + - note that case patterns undergo quote removal. Reported by + AlvinSeville7cf - 2/25 + 5/11 ---- -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 +builtins/bashgetopt.c + - list_optflags: flags associated with the word corresponding to + list_optarg, assuming list_optarg is a separate argument -trap.c - - clear_pending_traps: new function, just clears the pending traps flag - for all signals +builtins/bashgetopt.h + - list_optflags: extern declaration - 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) +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 - 3/10 +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 - - 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 - + - 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 - 3/17 - ---- -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 +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 -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 +arrayfunc.h + - AV_ATSTARKEYS: new flag value, means to accept a[@] and a[*] but + treat them as keys/expressions and not special values -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 +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 -builtins/declare.def - - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK - - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK +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 -variables.c - - make_local_{array,assoc}_variable: understand new flags, pass - MKLOC_INHERIT to make_local_variable if it appears in the flags - argument + 5/13 + ---- -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 +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 + 5/14 + ---- 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 , - https://savannah.gnu.org/support/index.php?109669 + - 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] ]]' - 3/18 + 5/16 ---- -examples/loadables/basename.c - - basename_builtin: handle -- option without crashing. Report by Peng Yu - -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 back in 12/18 +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 - 3/19 - ---- -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 +jobs.c + - wait_sigint_cleanup: restore the old sigint handler before we longjmp + out by calling restore_sigint_handler() - 3/20 + 5/17 ---- -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, - - cat < back in 1/2019. +builtins/printf.def + - printf_builtin: if LIST_OPTFLAGS includes W_ARRAYREF, set VA_NOEXPAND + in VFLAGS - 3/23 + 5/17 ---- -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 - back in May, 2019 - - parameter_brace_transform: make sure `u', `U', and `L' are valid - transform operators -doc/{bash.1,bashref.texi} - - parameter transformation: document new `U', `u', and `L' operators +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 -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 back in 1/2018 - - execute_array_command: function for array_walk to use when executing - commands in PROMPT_COMMANDS +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. -doc/{bash.1,bashref.texi} - - PROMPT_COMMANDS: new array variable +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 - 3/24 + 5/18 ---- -builtins/ulimit.def - - new -R option, for RLIMIT_RTTIME (max time a real-time process can - run without blocking). Patch from Maciej Wolny - back in 7/2017 + +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} - - ulimit: document new -R option + - READLINE_ARGUMENT: documented new variable available for commands + defined using `bind -x' keybindings -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/doc/rltech.texi + - rl_trim_arg_from_keyseq: documented new function -lib/readline/{text.c,readline.h} - - rl_clear_display: new bindable command that clears the screen and - scrollback buffer + 5/19 + ---- -lib/readline/funmap.c - - clear-display: new bindable command name +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 -lib/readline/emacs_keymap.c - - emacs mode M-C-l now bound to clear-display +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 -doc/bash.1,lib/readline/doc/{readline.3,rluser.texi} - - clear-display: document new function and default emacs mode binding + 5/22 + ---- +parse.y + - CHECK_FOR_RESERVED_WORD: if we are returning an ESAC and unsetting + PST_CASESTMT, decrement esacs_needed_count -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 back in 7/2019 +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 -doc/{bash.1,bashref.texi} - - documented new associative array assignment syntax +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 -assoc.[ch] - - assoc_to_kvpair: new function that returns a string with quoted - key/value pairs from given associative array + 5/24 + ---- -array.[ch] - - array_to_kvpair: new function that returns a string with quoted - key/value pairs from given indexed array (for completeness) +lib/sh/input_avail.c + - nchars_avail: make sure SET and OSET are declared on systems with + select(2). Reported by Larkin Nickle -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 +parse.y + - cond_term: if we read a `!' toggle CMD_INVERT_RETURN instead of + setting it unconditionally. Report and patch from + Vincent Menegaux via + https://savannah.gnu.org/patch/?10070 + 5/25 + ---- doc/{bash.1,bashref.texi} - - document new 'K' parameter transformation operator + - test: add the ( $2 $3 ) case to the description of the four-argument + behavior. Inspired by a discussion with Christoph Anton Mitterer + - 3/25 + 5/27 ---- -doc/bash.1,lib/readline/doc/{history.3,readline.3} - - some text and formatting cleanups from Bjarni Ingi Gislason - - -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 - back in 7/2018 - -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 - 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/bashref.texi + - replace most of the GNU parallel section with a reference to the + tutorial on gnu.org -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 +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/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/glob/glob.c + - extglob_skipname,wextglob_skipname: pass GX_NEGATE to the skipname + functions if the pattern is being negated. Not checked yet -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 + 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/readline/util.c - - _rl_abort_internal: make sure we deactivate the region +lib/glob/glob.c + - skipname,wskipname: perform the special checks for `.' only if the + pattern is not being negated -lib/readline/{terminal.c,rlprivate.h} - - _rl_cr: new function to just output the term_cr (or '\r'). Part of - the active region patch + 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 - - _rl_cr: use where appropriate to replace MSDOS-dependent code and - calls to tputs + - 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 in + https://savannah.gnu.org/patch/?10076 -lib/readline/terminal.c - - get and store the terminal sequences to enter and exit standout - (usually some background color) mode +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 - 3/26 + 6/11 ---- -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 - - 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 +doc/{bash.1,bashref.texi} + - cd: additional arguments are not ignored; they raise an error. + Report from Douglas McIlroy + +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 + - skipname,wskipname: remove special checks for `.' and (disabled) + checks for `..' -execute_cmd.c - - execute_command_internal: don't call reap_procsubs after executing - the command. Rest of fix for bug reported by Valentin Lab - - - execute_command_internal,execute_builtin_or_function: ofifo_list is - now a void * instead of a char * +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 - 3/30 +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 ---- -lib/readline/{terminal.c,rlprivate.h} - - _rl_standout_{on,off}: new functions, to enter and exit terminal - standout mode -lib/readline/rlprivate.h - - _rl_refresh_line: new extern declaration +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 , suggested + language from G. Branden Robinson , + Lawrence Velázquez , + and Andrew Church -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 +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 -lib/readline/text.c - - rl_refresh_line: now just calls _rl_refresh_line and marks the display - as fixed +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 - 3/31 +builtins/set.def + - unset_builtin: call builtin_arrayref_flags to set vflags + + 6/19 ---- -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 - - 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 +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 . 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 - 4/2 - --- -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 +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 - 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 +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/zread.c - - zread: preserve value of errno (always EINTR) around calls to - check_signals or check_signals_and_traps + 6/22 + ---- -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) +redir.c + - do_redirection_internal: if VARASSIGN_REDIR_AUTOCLOSE is non-zero, + add a redirect to automatically close {var}; originally raised by Boruch Baum - back in 10/2017 +builtins/shopt.def + - varredir_close: new shell option, mirrors the value of + varassign_redir_autoclose. Suggested multiple times by multiple + people - 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 +doc/{bash.1,bashref.texi} + - varredir_close: document new shell option (the name is tentative) -lib/readline/readline.c - - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on - by default) + 6/24 + ---- -trap.c - - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0 - since run_pending_trap usually does these things +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 -sig.c - - throw_to_top_level: only call the SIGINT trap if there is a SIGINT - trap pending (shouldn't matter, just a check) +parser.h + - PST_NOERROR: don't print error messages in yyerror(), just reset + the parser and return -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 +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 - 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 ] - -{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 - (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 +subst.c + - skip_matched_pair: make sure to pass the SX_COMPLETE flag to + extract_delimited_string -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 + 6/28 + ---- -lib/readline/readline.c - - _rl_enable_bracketed_paste: enabled by default for the time being +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 + - 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 - 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 +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 -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 +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 -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 back in 3/2019 - (originally in 10/2017) - - 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 +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 - 4/12 + 6/30 ---- -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 - 4/13 - ---- +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= -lib/readline/text.c - - rl_newline: if the region is active, call rl_redisplay to clear - standout mode before returning +support/Makefile.in + - man2html: remove CCFLAGS_FOR_BUILD from the recipe, leaving only + LDFLAGS_FOR_BUILD. Report from Jay K + - 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 -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}/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 - 4/14 + 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 + + 7/12 ---- -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/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/mbutil.c - - _rl_utf8_mblen: changes to handle invalid multibyte sequences better, - even when N means that the sequence would be too short anyway -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 +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 - 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) +builtins/{enable,hash,help}.def + - enable_builtin: use sh_chkwrite after output to check for write errors - 4/17 + 7/16 ---- -jobs.h - - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second - argument to make_child +arrayfunc.c + - quote_compound_array_word: free SUB and VALUE after assigning from + sh_single_quote(). From a coverity report from + Siteshwar Vashisht -jobs.c - - make_child: now takes a set of flags as the second argument +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 - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument + - 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 - - make_child: change callers to pass FORK_ASYNC instead of a non-zero - value as the second argument + - parameter_brace_transform: if vtype == VT_VARIABLE, we need to free + a non-null VAL -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 +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 - 4/18 + 7/22 ---- -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 +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 back in 2/2021 (in a + different form) and most recently by Tapani Tarvainen + -jobs.c - - make_child: if FORK_NOTERM is set in the flags argument, don't call - give_terminal_to + 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 -{jobs,nojobs}.c,jobs.h - - wait_for: now takes a second argument, a flags word + 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 -{execute_cmd,subst}.c - - wait_for: change all callers to add second argument to wait_for +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 -jobs.c - - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call - give_terminal_to +doc/{bash.1,bashref.texi} + - enable: document new behavior of `enable NAME' when NAME is not a + current shell builtin - 4/19 - ---- + 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 - - 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 + - {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 -hashcmd.h - - FILENAME_HASH_BUCKETS: increase to 256 +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 -assoc.h - - ASSOC_HASH_BUCKETS: new define, set to 1024 +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 in 6/2021. -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) + 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/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 +builtins/shopt.def + - noexpand_translation: new option to expose the value of + SINGLEQUOTE_TRANSLATIONS - 4/20 + 8/10 ---- -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 - - - 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 - -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 +doc/{bash.1,bashref.texi} + - noexpand_translation: add description of new option - 4/21 + 8/16 ---- -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 - - operate_and_get_next: just calculate the logical offset of where we - should be in the history instead of an absolute offset +builtins/printf.def + - printf_builtin: initialize retval after parsing arguments, since we + use it for the `v' option. Bug report from Keith Thompson + -lib/readline/input.c - - _rl_nchars_available: new function, returns the number of characters - available to be read if FIONREAD is available +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 + - 4/22 + 8/17 ---- -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 - -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) +siglist.c + - include command.h before general.h for PARAMS and prototypes. Report + from Osipov, Michael (LDA IT PLM) -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 - - 4/23 + 8/18 ---- -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 +lib/readline/colors.c + - S_ISBLK: make sure it's defined before we use it, like in complete.c -parse.y - - parse_comsub: posix-mode shells don't allow a closing right paren to - delimit a pending here-document -- it requires the newline +lib/readline/complete.c,{bashline,variables}.c + - minor changes to prep for making rl_completer_word_break_characters + `const' -doc/bashref.texi - - POSIX mode: updated posix mode description with the new here-document - delimiter requirement +subst.[ch],pcomplete.c + - split_at_delims: the DELIMS argument is now `const'; change callers -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 +lib/readline/rlmbutil.h + - _rl_wcwidth: add function prototype for inline function declaration -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 +lib/readline/bind.c + - _rl_get_keyname: print keys greater than 160 (which are valid UTF-8) + as octal escape sequences - 4/24 +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 ---- -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 +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 - 4/27 +bashline.c + - orig_rl_completer_word_break_characters: now const char * like + rl_completer_word_break_characters + + 8/20 ---- -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 +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 -variables.h - - localvar_inherit: add extern declaration here +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 -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 +assoc.[ch] + - assoc_to_kvpair_list: new function, returns a WORD_LIST containing + key-value pairs as separate words - 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 +array.[ch] + - array_to_kvpair_list: new function, returns a WORD_LIST containing + index-value pairs as separate words - 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 - , - https://savannah.gnu.org/support/index.php?109669 + - 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 -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 +doc/{bash.1,bashref.texi} + - document new '@k' parameter transformation operator -arrayfunc.h - - expand_and_quote_assoc_word,quote_compound_array_list: new extern - declarations + 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 - 4/30 + 8/31 ---- -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 - +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/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 +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 -shell.c - - maybe_make_restricted: add HISTFILE to the list of readonly variables +redir.h + - open_redir_file: extern declaration here for now -doc/{bashref.texi,bash.1} - - document new restricted shell restrictions +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 - 5/1 + 9/1 --- -jobs.c - - wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM - is set in the flags argument +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 -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 +externs.h + - parse_string_to_command: extern declaration - 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 +builtins/evalstring.c + - can_optimize_cat_file: new function, takes a COMMAND * argument and + returns true if the command can be optimized like $(&", see if we can optimize the command and call + optimize_cat_file to do it if we can. -lib/readline/rlprivate.h - - _rl_internal_startup_hook: new extern declaration + 9/2 + --- +configure.ac,config.h.in,lib/sh/setlinebuf.c + - SETVBUF_REVERSED: remove all references -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 +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 -lib/readline/funmap.c - - "operate-and-get-next": now a bindable readline command +unwind_prot.c + - stddef.h: include if HAVE_STDDEF_H is defined, not STDC_HEADERS -lib/readline/emacs_keymap.c - - rl_operate_and_get_next: bound to ^O in emacs mode by default +bashansi.h + - memory.h: don't include any more; assume has all the + necessary defines -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 +aclocal.m4 + - AC_HEADER_STDC: remove AC_REQUIRE calls to this; change tests to use + appropriate checks instead of STDC_HEADERS - 5/5 + 9/3 --- -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 +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 if + we have it and include 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 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 -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 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 + 9/8 + --- -shell.c - - run_one_command: call parse_and_execute with SEVAL_RESETLINE so the - line number gets set to 1. Reported by Rob Landley +lib/sh/strftime.c + - include after reworking above; include + unconditionally in case it defines time_t. From a report by + Ori Sky Farrell - 5/8 + 9/9 --- -support/config.{guess,sub} - - update to latest versions +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 + + + 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 - - add support for `genode' from Emery Hemingway + - 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 - 5/14 - ---- -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 +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 - 5/19 + 9/11 ---- -configure.ac,config.h.in - - getrandom: add test, define HAVE_GETRANDOM - - getentropy: add test, define HAVE_GETENTROPY +[prayers for the victims of 9/11/2001] -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 +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 - 5/20 - ---- configure.ac - - updated version to 5.1-alpha + - BASH_CHECK_DECL -> AC_CHECK_DECLS + - quad_t: use AC_CHECK_TYPE (new style) instead of BASH_CHECK_TYPE -lib/readline/readline.h - - updated defines to readline version 8.1 + + 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 + - time_command: restore command->flags even if we longjmp back -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 +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 - 5/21 + 9/16 ---- -COMPAT - - overhauled and updated the descriptions of the various shopt compatNN - options +bashjmp.h + - EXITBLTIN: new longjmp `code' value: used by the exit builtin -doc/bashref.texi - - Shell Compatibility Mode: new section, describes compatibility levels, - BASH_COMPAT, and the various compatNN shopt options +{execute_cmd,shell,subst,trap}.c,builtins/evalstring.c + - treat EXITBLTIN exactly the same as EXITPROG (for now) - 5/23 - ---- -doc/bash.1 - - added Shell Compatibility mode section +builtins/exit.def + - exit_builtin: jump_to_top_level with value EXITBLTIN -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/evalstring.c + - parse_and_execute: EXITBLTIN has its own case, with the same contents + as EXITPROG - 5/27 + 9/17 ---- -variables.c,/lib/sh/random.c - - moved functions that manage 16-bit and 32-bit random values to - lib/sh/random.c - -alias.c - - add_alias: don't bother checking null alias values for ending in - space or tab +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.) -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 + 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 - 5/28 + 9/19 ---- -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 +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 -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 - - _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement + 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 - 5/29 + 9/21 ---- -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 - --- -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 +array.[ch] + - array_from_argv: new convenience function - 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. +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 -redir.[ch],builtins/evalstring.c - - redirection_error: changed extern declaration and callers + 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: 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 - - 6/4 - --- -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" + - 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 -general.h,parse.y - - __P -> PARAMS + 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 -shell.c - - shellstart: struct timeval used to initialize shell starting time; - shell_start_time now initialized from shellstart.tv_sec + 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 -variables.c - - assign_seconds: reset shellstart to set shell starting time + 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 in + https://lists.gnu.org/archive/html/bug-bash/2020-10/msg00026.html -pcomplete.c - - include posixtime.h instead of +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 10/11/2020 + against GNU make -lib/sh/{ufuncs,uconvert}.c - - include posixtime.h instead of the inline conditional includes +evalstring.c + - should_suppress_fork: remove #if 1 for code that tries to suppress + the fork in a process substitution subshell -aclocal.m4 - - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the - deprecated AC_HEADER_EGREP + 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 -posixtime.h - - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement - definition + 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 -lib/sh/gettimeofday.c - - gettimeofday: replacement function, so we don't have to use - HAVE_GETTIMEOFDAY in the rest of the code +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 - 6/5 - --- -{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 +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} - - SECONDS: clarify that the number of seconds is always determined by - querying the system clock - - 6/8 - --- -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 reported to work, with caveats + - 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 -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 + 10/4 + ---- +shell.c + - include if we're debugging malloc (MALLOC_DEBUG) + so we can get an extern declaration of trace_malloc_stats - 6/11 + 10/5 ---- -redir.c - - limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can - handle atomic writes without hanging. Tested on FreeBSD 13 +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 + +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 , fix from + Dominique Martinet -[bash-5.1-alpha frozen] +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 - 6/15 + 10/6 ---- + 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 + - 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 - 6/16 - ---- -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 +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 + - 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 - 6/17 + 10/8 ---- -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 - +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. - 6/18 - ---- -po/Makefile.in.in - - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have - to create the variable manually +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 , using the + approach suggested by Robert Elz + +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 -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/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 + + 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 + + 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 + +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 - - valid_parameter_transform: new function, reject transformations - longer than a single character or invalid transformation operators - - parameter_brace_transform: call valid_parameter_transform + - pat_subst: call strcreplace with 2 as the flags value - 6/22 - ---- -lib/sh/zread.c - - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by - Jason A. Donenfeld - -lib/sh/zcatfd.c - - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096) + 10/15 + ----- +doc/bashref.texi + - updates to Installation section -lib/sh/zmapfd.c - - zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096) +doc/{mkposix,mkinst,mkrbash},doc/Makefile.in + - changes to allow scripts to be run outside the source directory - 6/29 - ---- -aclocal.m4 - - BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants, - from Jessica Clarke + 10/18 + ----- +subst.c + - patsub_replacement: controls whether pattern substitution expands `&' + in the replacement string. Initialized to 1 by default -xmalloc.c - - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think - it works + 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 -examples/loadables/finfo.c - - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke - + 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. -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 - +doc/{bash.1,bashref.texi} + - patsub_replacement: document new shopt option - 7/1 - --- -eval.c - - alrm_catcher: use write(2) instead of fprintf to print the - auto-logout message to the terminal + 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. -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 +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 - 7/2 - --- -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 - with input from Eli Schwartz - +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 - 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 +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 - 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 - - _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 - - 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 - --- 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 - -builtins/evalstring.c - - optimize_shell_function: try to optimize away the fork in the last - command in a shell function body, under certain conditions + - 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 -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 + 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 + - 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 - 7/8 - --- -{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c - - interrupt_immediately: remove, no longer used +arrayfunc.h + - tokenize_array_reference: extern declaration -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 +builtins/set.def + - unset_builtin: use tokenize_array_reference to figure out T and pass + that to unbind_array_element. Fix from + Koichi Murase + - 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 - 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 +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 - 7/14 + 11/1 ---- -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 - +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 - 7/17 - ---- -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 +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 - 7/18 + 11/2 ---- 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 + - 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 + - 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 - 7/27 + 11/3 ---- -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 - -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 +aclocal.m4 + - BASH_FUNC_POSIX_SETJMP: if cross-compiling, default to `present' if + we've determined we have posix signal functions - 7/28 + 11/4 ---- -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 +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 + +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 - 7/30 + 11/8 ---- -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 +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 -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 - - 8/2 - --- -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() + 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 - 8/3 - --- -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 - +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 + - _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 -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 - +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 -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 + 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 - 8/4 - --- -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 +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 -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" - +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) -shell.c - - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list() +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 -sig.c - - termsig_handler: call unlink_all_fifos() instead of - unlink_fifo_list() + 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 + - read: note that read -t0 may return 0 if a subsequent read will + return EOF. From a suggestion by Dale R. Worley + - 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 +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 - 8/10 - ---- -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 +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 - 8/11 - ---- -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 - - - 8/12 - ---- -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 + 11/29 + ----- +examples/loadables/getconf.[ch] + - getconf: new implementation of loadable builtin, based on glibc + getconf - 8/14 - ---- -flags.c - - no_invisible_vars: removed undocumented `-I' flag +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 -{flags,variables}.c,flags.h,builtins/{declare,setattr.def} - - no_invisible_vars: remove all references + 11/30 + ----- -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' +builtins/wait.def + - wait_builtin: refer to unset_waitlist only if JOB_CONTROL is enabled. + Report from Joel Ebel -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 +parse.y,builtins/set.def + - changes for minimal config restrictions - 8/17 - ---- -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 +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 - 8/24 - ---- -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 - - 8/25 - ---- -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 +shell.c + - main: don't include any of the dump-strings options if + TRANSLATABLE_STRINGS is not defined - 8/26 - ---- -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 +lib/sh/shquote.c + - sh_backslash_quote_for_double_quotes: needed for translatable strings - 8/31 - ---- 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 + - support for translating $"..." strings now conditional on + TRANSLATABLE_STRINGS -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 +locale.c + - locale_expand: now conditional on TRANSLATABLE_STRINGS -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 +subst.c + - expand_string_dollar_quote: support for $"..." now conditional on + TRANSLATABLE_STRINGS -pcomplete.c - - gen_shell_function_matches: change call to array_to_argv +doc/bashref.texi + - --enable-translatable-strings: document new configuration option -array.h - - execute_array_command: now takes the entire ARRAY * as the first - parameter + 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) -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 +test.c + - test_unop: if the shell compatibility level is > 51, using [@] with + an existing associative array will report on a key of `@' - 9/7 - --- -[bash-5.1-beta frozen] +arrayfunc.c + - array_expand_index: if the compatibility level is > 51, Q_ARITH is + used and we don't pass EXP_EXPANDED to evalexp() - 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 +COMPAT,doc/bashref.texi + - shell compatibility mode: document effects of setting the + compatibility mode to 51 -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 + 12/3 + ---- +lib/malloc/malloc.c + - mremap: only use if MREMAP_MAYMOVE is defined, since we use the Linux + version of the function signature - 9/14 + 12/6 ---- -aclocal.m4 - - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported - by Andreas K. Hüttel +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 -syntax.h - - slashify_in_here_document: restore previous value that doesn't - include double quote, since it's only special in certain cases + 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 -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 + 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 - 9/15 - ---- -support/signames.c - - added a number of more esoteric signal names from AIX and Solaris + 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 -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 +arrayfunc.h + - assign_array_element: new extern function declaration -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 +{subst,variables}.c,builtins/{common.c,declare.def} + - assign_array_element: change callers - 9/21 - ---- 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 + - 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 - 9/23 - ---- -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 + 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 -examples/loadables/asort.c - - asort: loadable builtin to sort an array. Contributed by - Geir Hauge +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 - 10/1 - ---- + 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 -[bash-5.1-rc1 frozen] +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) - 10/7 - ---- -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 + 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/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 +arrayfunc.h + - array_value: changed function signature - 10/8 - ---- -lib/readline/terminal.c - - _rl_init_terminal_io: if the terminal name is "dumb", disable - bracketed paste mode. Suggested by - Andreas Schwab +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 - 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(). +variables.c + - assign_lineno: call set_int_value to store the value, like with + RANDOM and SECONDS (from 12/10) -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) + 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 -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 with a hint - from felix +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 - 10/26 + 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 -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 + 12/22 + ----- +{trap,variables}.c + - internal_warning: calls changed to use translatable strings + consistently -lib/readline/bind.c - - hack_special_boolean_var: make sure that _rl_enable_active_region - is set appropriately when "enable-bracketed-paste" is modified +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 -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 +{jobs,trap}.c + - changed some internal_warning and internal_inform calls to use + internal_debug, since they were active only when DEBUG is defined -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 +parse.y + - parse_comsub: add internal_debug call when a command substitution + ends with unterminated here-documents -lib/readline/kill.c - - rl_bracketed_paste_begin: make sure we activate the mark only if - _rl_enable_active_region is enabled +builtins/common.c + - number_of_args: unconditionally return posparam_count -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 +{jobs,execute_cmd,subst}.c,parse.y,builtins/{command.def,evalstring.c} + - INTERNAL_DEBUG: use instead of calls to itrace protected by #ifdef + DEBUG - 10/29 + 12/26 ----- +lib/glob/glob.c + - glob_always_skip_dot_and_dotdot: initialize to 1 (enabled) -doc/bash.1,lib/readline/rluser.texi - - enable-bracketed-paste: change to note the the current default is `On' +builtins/shopt.def + - globskipdots: new shell option, exposes glob_always_skip_dot_and_dotdot - 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 +doc/{bash.1,bashref.texi} + - globskipdots: document new shell option - 11/1 - ---- -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 +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 -[bash-5.1-rc2 frozen] +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 - 11/10 + 12/29 ----- -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 +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) -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 +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 -[bash-5.1-rc3 frozen] +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 - 11/18 + 12/30 ----- -doc/{bash.1,bashref.texi} - - small tweaks to the ulimit description to make it more consistent with - the Posix standard's terminology +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 amd fix from konsolebox - 12/4 - ---- + 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 + + 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 -[bash-5.1-release frozen] + 1/10 + ---- +configure.ac + - bumped version to 5.2-alpha. diff --git a/CWRU/misc/bison b/CWRU/misc/bison old mode 100755 new mode 100644 diff --git a/INSTALL b/INSTALL index 91f1dd9a7..75b4acebc 100644 --- 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 @@ -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,6 +144,30 @@ 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 ========================== @@ -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 ofthe 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'. diff --git a/MANIFEST b/MANIFEST index 54f327cf4..b0c86ccd2 100644 --- 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 @@ -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 @@ -230,6 +232,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 +369,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 +453,7 @@ lib/sh/strtoul.c f lib/sh/strtoull.c f lib/sh/strtoumax.c f lib/sh/strtrans.c f +lib/sh/timers.c f lib/sh/times.c f lib/sh/timeval.c f lib/sh/tmpfile.c f @@ -631,7 +636,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 # @@ -721,8 +725,8 @@ 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 @@ -862,6 +866,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 @@ -918,6 +932,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 +949,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 +994,7 @@ tests/comsub1.sub f tests/comsub2.sub f tests/comsub3.sub f tests/comsub4.sub f +tests/comsub5.sub f tests/comsub-eof.tests f tests/comsub-eof0.sub f tests/comsub-eof1.sub f @@ -985,6 +1009,7 @@ 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/cond.tests f tests/cond.right f tests/cond-regexp1.sub f @@ -1074,6 +1099,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 +1117,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 +1147,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 +1161,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 +1183,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 +1215,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 +1245,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 +1264,14 @@ 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/nquote1.tests f tests/nquote1.right f tests/nquote2.tests f @@ -1285,6 +1322,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 +1337,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 +1431,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 +1468,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 +1511,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 +1523,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 diff --git a/Makefile.in b/Makefile.in index 3e3a5d483..818a51b75 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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) @@ -232,7 +238,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 SHLIB_LIB = -lsh SHLIB_LIBNAME = libsh.a @@ -420,11 +427,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) @@ -475,12 +483,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) @@ -578,13 +588,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 " * *" @@ -609,6 +619,9 @@ lint: 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 @@ -649,6 +662,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 +747,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 +760,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 +821,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 +1000,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 +1219,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 +1264,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 +1303,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 +1378,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 +1389,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 +1469,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 +1520,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 +1545,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 +1604,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 a6170be85..ae96d8588 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,142 @@ +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. + +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}&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. + +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. + +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. The non-incremental history searches now leave the current history offset + at the position of the last matching history entry, like incremental search. + +j. 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 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. diff --git a/POSIX b/POSIX index 24114af14..fb513e534 100644 --- a/POSIX +++ b/POSIX @@ -101,7 +101,11 @@ The following list is what's changed when 'POSIX mode' is in effect: 25. 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 iteration variable in a 'for' statement or the selection variable @@ -185,14 +189,14 @@ The following list is what's changed when 'POSIX mode' is in effect: 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 + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + 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. diff --git a/RBASH b/RBASH index 9732c769c..7d0a5e8d1 100644 --- 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 70b7a8517..84549fd4a 100644 --- 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 diff --git a/aclocal.m4 b/aclocal.m4 index 6899e8202..15d914338 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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 -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 -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 . 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 -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #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 -#endif -#if HAVE_INTTYPES_H -# include -#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 ) AC_CACHE_VAL(bash_cv_printf_declared, -[AC_TRY_RUN([ +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #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 #include #ifdef HAVE_UNISTD_H #include -#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 #include #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 +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +# include +#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 #include #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 ], -[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 +]],[[ +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 #include #include @@ -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 +[AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include #include -#include ], -[char *s = (char *)strsignal(2);], - bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)]) +#include ]], +[[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 #include #include @@ -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 -#include -#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 +#endif +#include +#include +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 +#include +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#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 -#include ], -[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[ -AC_TRY_RUN([ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include -#include -#include -#include -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 ]], +[[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 -],[ 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 ]], + [[ 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 ], 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 . AC_CACHE_CHECK([for lstat], bash_cv_func_lstat, -[AC_TRY_LINK([ -#include -#include -],[ lstat(".",(struct stat *)0); ], -bash_cv_func_lstat=yes, bash_cv_func_lstat=no)]) +[AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[ + #include + #include + ]], + [[ 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 #include #include -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 #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 +#endif +#if HAVE_STDDEF_H #include #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 +#endif +#if HAVE_STDDEF_H #include #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 #ifdef HAVE_ULIMIT_H #include @@ -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 #ifdef HAVE_UNISTD_H #include @@ -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 ], -[ struct hostent *hp; - hp = gethostbyname("localhost"); -], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)] -) +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ +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 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 #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 #if defined (HAVE_LOCALE_H) #include @@ -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 #include #include @@ -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 #include -], -[ +]], [[ 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 @@ -1077,11 +1045,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 #include #ifdef HAVE_UNISTD_H @@ -1101,11 +1070,15 @@ AC_CACHE_VAL(bash_cv_dirent_has_dino, # include # 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 +1086,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 -#include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_DIRENT_H) -# include -#else -# define dirent direct -# ifdef HAVE_SYS_NDIR_H -# include -# endif /* SYSNDIR */ -# ifdef HAVE_SYS_DIR_H -# include -# endif /* SYSDIR */ -# ifdef HAVE_NDIR_H -# include -# 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 +1096,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 -#include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_DIRENT_H) -# include -#else -# define dirent direct -# ifdef HAVE_SYS_NDIR_H -# include -# endif /* SYSNDIR */ -# ifdef HAVE_SYS_DIR_H -# include -# endif /* SYSDIR */ -# ifdef HAVE_NDIR_H -# include -# 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 +1140,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 +#include +]], +[[ +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 +#include +]], +[[ +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 -#include ], [struct winsize x;], - bash_cv_struct_winsize_header=ioctl_h, - [AC_TRY_COMPILE([#include -#include ], [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 +1192,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 ],[ +AC_DEFUN(BASH_HAVE_POSIX_SIGNALS, +[AC_CACHE_VAL(bash_cv_posix_signals, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ 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 ], [ - int mask = sigmask(SIGINT); - sigsetmask(mask); sigblock(mask); sigpause(mask); - ], bash_cv_signal_vintage=4.2bsd, - [ - AC_TRY_LINK([ - #include - 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 +]], [[ +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 +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 +1270,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 #endif @@ -1332,10 +1323,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 +1334,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 #ifdef HAVE_UNISTD_H #include #endif #include -typedef RETSIGTYPE sigfunc(); +typedef void sigfunc(); volatile int nsigint; @@ -1376,7 +1366,7 @@ set_signal_handler(sig, handler) #define set_signal_handler(s, h) signal(s, h) #endif -RETSIGTYPE +void sigint(s) int s; { @@ -1392,7 +1382,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 +1397,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 #ifdef HAVE_SYS_WAIT_H #include @@ -1448,7 +1438,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 +1452,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 #include #ifdef HAVE_UNISTD_H @@ -1501,7 +1492,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 +1525,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 -#include ], [int x = TIOCGWINSZ;], - bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[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 +1539,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 -#include ], [int x = TIOCSTAT;], - bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[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 +1553,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 -#include ], [int x = FIONREAD;], - bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)]) +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#include ]], [[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 +1573,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 ], [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 ]], + [[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 +1647,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 +#include +]], +[[ + 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 -#include -], -[ - 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 #define _KERNEL #include #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 +1696,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 #endif #include -],[ +]],[[ 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 +1712,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 #include #include @@ -1720,7 +1732,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 +1780,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 ], -[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 AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t, -[AC_TRY_COMPILE( -[#include -], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ 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 AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t, -[AC_TRY_COMPILE( -[#include ], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ 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 AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t, -[AC_TRY_COMPILE( -[#include ], -[ +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ +[#include ]], +[[ 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 +1824,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 #include #include @@ -1835,8 +1843,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 +1895,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 #include #include @@ -1907,10 +1916,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 +1983,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 -#endif -#include -#include -#include - -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 #include #include @@ -2044,7 +2008,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 +2024,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 +2061,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 #include @@ -2108,7 +2072,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 +2091,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 #else @@ -2165,7 +2129,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 +2146,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 #include @@ -2216,7 +2180,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 +2196,15 @@ AC_DEFUN([BASH_FUNC_SBRK], [ AC_MSG_CHECKING([for sbrk]) AC_CACHE_VAL(ac_cv_func_sbrk, - [AC_TRY_LINK([#include ], - [ void *x = sbrk (4096); ], - ac_cv_func_sbrk=yes, ac_cv_func_sbrk=no)]) + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[ 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 #include @@ -2250,10 +2216,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 +2232,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 #include #include @@ -2287,8 +2252,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 cd5e99b7e..23f967fa8 100644 --- 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 6d3554bf4..910bbaad8 100644 --- 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 189d646f2..4214e8b41 100644 --- 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. @@ -27,33 +27,55 @@ 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 index 000000000..fa8be00d6 --- /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 . +*/ + +#include "config.h" + +#if defined (ARRAY_VARS) + +#if defined (HAVE_UNISTD_H) +# ifdef _MINIX +# include +# endif +# include +#endif + +#include +#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 */ diff --git a/arrayfunc.c b/arrayfunc.c index 9338dfc71..80d3cea7f 100644 --- a/arrayfunc.c +++ b/arrayfunc.c @@ -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,28 @@ 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); 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 +392,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 +414,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 +436,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); @@ -523,8 +573,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 +632,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 +640,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 +665,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 +771,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 +796,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 +832,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 +947,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 +991,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 +1020,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 +1044,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 +1052,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 +1097,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 +1132,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 +1145,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 +1182,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 +1244,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 +1275,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 +1296,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 +1333,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 +1344,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 +1379,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 +1391,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 +1465,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 +1489,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_ASSOC; 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 +1549,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 +1564,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 +1590,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 +1626,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 +1642,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 * diff --git a/arrayfunc.h b/arrayfunc.h index 838e76d2d..69112b579 100644 --- a/arrayfunc.h +++ b/arrayfunc.h @@ -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. @@ -23,6 +23,29 @@ /* 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 5782e8567..cbb5c7e4f 100644 --- 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 78ec07386..664d13740 100644 --- 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_ */ diff --git a/bashansi.h b/bashansi.h index 2c33937d0..dd2a544cd 100644 --- a/bashansi.h +++ b/bashansi.h @@ -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 -# endif # include #endif /* !HAVE_STRING_H */ diff --git a/bashhist.c b/bashhist.c index 2a05a53fa..90cd8c34f 100644 --- a/bashhist.c +++ b/bashhist.c @@ -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"; diff --git a/bashjmp.h b/bashjmp.h index 8ed1ac472..1a4721bc8 100644 --- 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_ */ diff --git a/bashline.c b/bashline.c index c69c0c5ee..1edff1e1f 100644 --- a/bashline.c +++ b/bashline.c @@ -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 /* 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 @@ -666,6 +676,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 +1040,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 +1334,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 +1579,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 +1624,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 +1633,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 +1641,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 +1651,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 +1660,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 +1782,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 +1936,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 +1998,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 +2185,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 +2307,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,13 +2841,17 @@ 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) 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) { @@ -2798,7 +2883,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 +2892,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 +3280,8 @@ bash_directory_expansion (dirname) free (d); *dirname = nd; } + else + free (d); } /* If necessary, rewrite directory entry */ @@ -3372,38 +3463,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 +3482,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 +3538,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 +3782,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 +4152,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 . 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 +4269,7 @@ bash_quote_filename (s, rtype, qcp) { char *rtext, *mtext, *ret; int rlen, cs; + int expchar, nextch, closer; rtext = (char *)NULL; @@ -4144,7 +4287,17 @@ 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))) + { + /* Usually this will have been set by bash_directory_completion_hook, but + there are rare 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; @@ -4294,12 +4447,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 +4505,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 +4535,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 +4803,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 (); diff --git a/builtins.h b/builtins.h index dac95fdba..015659356 100644 --- a/builtins.h +++ b/builtins.h @@ -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 diff --git a/builtins/Makefile.in b/builtins/Makefile.in index b349e93ce..313ea54f6 100644 --- a/builtins/Makefile.in +++ b/builtins/Makefile.in @@ -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-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 @@ -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,7 +183,7 @@ 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 @@ -203,7 +204,7 @@ builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC) 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 +708,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 diff --git a/builtins/bashgetopt.c b/builtins/bashgetopt.c index 405ced437..d40ffa23a 100644 --- a/builtins/bashgetopt.c +++ b/builtins/bashgetopt.c @@ -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); diff --git a/builtins/bashgetopt.h b/builtins/bashgetopt.h index dcdaa48aa..79be34315 100644 --- a/builtins/bashgetopt.h +++ b/builtins/bashgetopt.h @@ -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; diff --git a/builtins/bind.def b/builtins/bind.def index ccfc08dcd..53a65ac7c 100644 --- a/builtins/bind.def +++ b/builtins/bind.def @@ -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--; diff --git a/builtins/command.def b/builtins/command.def index acd46cc1b..3efdbe6bc 100644 --- a/builtins/command.def +++ b/builtins/command.def @@ -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. */ diff --git a/builtins/common.c b/builtins/common.c index 3c9ac49de..7b80a3c76 100644 --- a/builtins/common.c +++ b/builtins/common.c @@ -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,18 @@ 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; +} + /* Like check_unbind_variable, but for use by builtins (only matters for error messages). */ int @@ -1015,3 +1045,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 diff --git a/builtins/common.h b/builtins/common.h index a4f9275d8..38326b99e 100644 --- a/builtins/common.h +++ b/builtins/common.h @@ -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-2021 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,9 +213,10 @@ 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 int can_optimize_cat_file PARAMS((COMMAND *)); extern void optimize_fork PARAMS((COMMAND *)); extern void optimize_subshell_command PARAMS((COMMAND *)); extern void optimize_shell_function PARAMS((COMMAND *)); @@ -223,8 +232,11 @@ 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 int builtin_arrayref_flags PARAMS((WORD_DESC *, int)); + /* variables from evalfile.c */ extern int sourcelevel; @@ -236,12 +248,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 +263,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 */ diff --git a/builtins/complete.def b/builtins/complete.def index 28a9ec2f9..6d600efb5 100644 --- a/builtins/complete.def +++ b/builtins/complete.def @@ -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"); diff --git a/builtins/declare.def b/builtins/declare.def index 21e4516d1..54db59c55 100644 --- a/builtins/declare.def +++ b/builtins/declare.def @@ -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 diff --git a/builtins/enable.def b/builtins/enable.def index 9d9010b78..27d341a6f 100644 --- a/builtins/enable.def +++ b/builtins/enable.def @@ -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); diff --git a/builtins/evalstring.c b/builtins/evalstring.c index 18928a17e..3801a7a07 100644 --- a/builtins/evalstring.c +++ b/builtins/evalstring.c @@ -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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -88,24 +88,18 @@ 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 && + running_trap == 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)); } @@ -175,6 +169,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) @@ -364,6 +371,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"); @@ -473,13 +499,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); @@ -543,10 +563,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; @@ -575,9 +596,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 +614,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 +642,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 +661,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 +691,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 +720,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); diff --git a/builtins/exec.def b/builtins/exec.def index cbcb641a6..16a81daee 100644 --- a/builtins/exec.def +++ b/builtins/exec.def @@ -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. @@ -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) diff --git a/builtins/exit.def b/builtins/exit.def index dc6f3d5b6..9c85bc582 100644 --- a/builtins/exit.def +++ b/builtins/exit.def @@ -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*/ } diff --git a/builtins/fc.def b/builtins/fc.def index 467dbcbcc..9b8a997de 100644 --- a/builtins/fc.def +++ b/builtins/fc.def @@ -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) diff --git a/builtins/gen-helpfiles.c b/builtins/gen-helpfiles.c index 6bed44745..d27d306b1 100644 --- a/builtins/gen-helpfiles.c +++ b/builtins/gen-helpfiles.c @@ -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 diff --git a/builtins/hash.def b/builtins/hash.def index c58e91c4f..b65f42ee4 100644 --- a/builtins/hash.def +++ b/builtins/hash.def @@ -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) diff --git a/builtins/help.def b/builtins/help.def index f33b2b935..346d93fe8 100644 --- a/builtins/help.def +++ b/builtins/help.def @@ -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 diff --git a/builtins/history.def b/builtins/history.def index 5db44c2c2..6918d8a42 100644 --- a/builtins/history.def +++ b/builtins/history.def @@ -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; diff --git a/builtins/mapfile.def b/builtins/mapfile.def index 65c3cb4f3..c17fc5c56 100644 --- a/builtins/mapfile.def +++ b/builtins/mapfile.def @@ -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 #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; @@ -180,19 +182,22 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n } else if (invisible_p (entry)) VUNSETATTR (entry, att_invisible); /* no longer invisible */ - + if (flags & MAPF_CLEARARRAY) array_flush (array_cell (entry)); #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 +220,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., diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c index e243021ff..f21b76b98 100644 --- a/builtins/mkbuiltins.c +++ b/builtins/mkbuiltins.c @@ -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-2021 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 @@ -173,11 +174,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 (); @@ -831,6 +843,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 +1125,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-2021 Free Software Foundation, Inc.", "", " This file is part of GNU Bash, the Bourne Again SHell.", "", @@ -1250,12 +1264,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 +1660,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) diff --git a/builtins/printf.def b/builtins/printf.def index 0a5f4897f..251454480 100644 --- a/builtins/printf.def +++ b/builtins/printf.def @@ -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 @@ -226,6 +232,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; @@ -241,7 +248,7 @@ printf_builtin (list) { int ch, fieldwidth, precision; int have_fieldwidth, have_precision; - char convch, thisch, nextch, *format, *modstart, *fmt, *start; + 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 +258,6 @@ printf_builtin (list) #endif conversion_error = 0; - retval = EXECUTION_SUCCESS; - vflag = 0; reset_internal_getopt (); @@ -262,12 +267,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 +317,7 @@ printf_builtin (list) format = list->word->word; tw = 0; + retval = EXECUTION_SUCCESS; garglist = orig_arglist = list->next; @@ -331,6 +339,7 @@ printf_builtin (list) { precision = fieldwidth = 0; have_fieldwidth = have_precision = 0; + precstart = 0; if (*fmt == '\\') { @@ -404,6 +413,8 @@ printf_builtin (list) if (*fmt == '-') #endif fmt++; + if (DIGIT (*fmt)) + precstart = fmt; while (DIGIT (*fmt)) fmt++; } @@ -449,7 +460,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 +542,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 +584,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 +613,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) @@ -760,7 +792,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 +808,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" */ diff --git a/builtins/read.def b/builtins/read.def index 39e16e844..645652686 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -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 ? 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') { @@ -883,6 +955,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 +979,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 +1004,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 +1041,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 +1062,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 +1206,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 +1222,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; diff --git a/builtins/reserved.def b/builtins/reserved.def index 33184b029..420042dcf 100644 --- a/builtins/reserved.def +++ b/builtins/reserved.def @@ -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. diff --git a/builtins/set.def b/builtins/set.def index 8ee016579..44f176919 100644 --- a/builtins/set.def +++ b/builtins/set.def @@ -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 diff --git a/builtins/setattr.def b/builtins/setattr.def index a193462da..c2ea7d568 100644 --- a/builtins/setattr.def +++ b/builtins/setattr.def @@ -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. @@ -514,7 +514,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); } diff --git a/builtins/shopt.def b/builtins/shopt.def index 6dca22421..52204c7bf 100644 --- a/builtins/shopt.def +++ b/builtins/shopt.def @@ -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) @@ -897,3 +913,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 diff --git a/builtins/trap.def b/builtins/trap.def index daeec9eaf..94229433c 100644 --- a/builtins/trap.def +++ b/builtins/trap.def @@ -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); } diff --git a/builtins/ulimit.def b/builtins/ulimit.def index a895c5e26..fd9f7a3df 100644 --- a/builtins/ulimit.def +++ b/builtins/ulimit.def @@ -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); diff --git a/builtins/wait.def b/builtins/wait.def index e70a4d942..290fb26f5 100644 --- a/builtins/wait.def +++ b/builtins/wait.def @@ -1,7 +1,7 @@ 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; @@ -233,7 +237,7 @@ wait_builtin (list) { wait_for_background_pids (&pstat); if (vname) - bind_var_to_int (vname, pstat.pid); + builtin_bind_var_to_int (vname, pstat.pid, bindflags); WAIT_RETURN (EXECUTION_SUCCESS); } diff --git a/command.h b/command.h index b84775280..e0dc2f955 100644 --- 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 */ diff --git a/config-bot.h b/config-bot.h index b075c7783..a687e4029 100644 --- a/config-bot.h +++ b/config-bot.h @@ -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. */ diff --git a/config-top.h b/config-top.h index 735f75e31..db4ab6ee3 100644 --- a/config-top.h +++ b/config-top.h @@ -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. @@ -77,6 +77,12 @@ "/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 "> " @@ -108,7 +114,7 @@ /* 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 diff --git a/config.h.in b/config.h.in index ab316d468..d6d52930b 100644 --- a/config.h.in +++ b/config.h.in @@ -23,15 +23,6 @@ /* 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 @@ -219,10 +210,10 @@ #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 @@ -233,6 +224,9 @@ /* 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 @@ -252,6 +246,8 @@ /* 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 @@ -259,11 +255,18 @@ /* 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. */ @@ -513,11 +516,6 @@ #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 @@ -530,8 +528,6 @@ #undef HAVE_PRINTF_A_FORMAT -#undef CTYPE_NON_ASCII - /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET @@ -554,12 +550,6 @@ /* 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 @@ -1092,8 +1082,6 @@ /* Define if you have */ #undef HAVE_SYS_TIME_H -#undef TIME_WITH_SYS_TIME - /* Define if you have */ #undef HAVE_SYS_TIMES_H @@ -1169,6 +1157,13 @@ #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 header file. */ diff --git a/configure b/configure index 0f1d3ed17..e9200378a 100755 --- 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.039. # 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-alpha. # # Report bugs to . # # -# 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 @@ -17,14 +18,16 @@ # 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&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-alpha' +PACKAGE_STRING='bash 5.2-alpha' PACKAGE_BUGREPORT='bug-bash@gnu.org' PACKAGE_URL='' ac_unique_file="shell.h" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #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-alpha 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-alpha:";; 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-alpha +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 @@ -1828,169 +1864,52 @@ fi } # 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 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #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 #include 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 &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-alpha, 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 +#include +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 +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,66 +3171,42 @@ 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 -RELSTATUS=release +BASHVERS=5.2 +RELSTATUS=alpha case "$RELSTATUS" in 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 @@ -3260,134 +3704,143 @@ 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 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 -#include -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 + 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 to if __STDC__ is defined, since - # 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 -#else -# include -#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 -_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 to if __STDC__ is defined, since - # 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 -#else -# include -#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 -_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 -#include -#include -#include + #define _XOPEN_SOURCE 500 + #include + 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 - -_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 - -_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 -#include -#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 + printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h -# 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 _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h -fi + printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h -done + printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h + printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 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_BFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h - if test "$MINIX" = yes; then + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h + printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h -$as_echo "#define _MINIX 1" >>confdefs.h + if test $ac_cv_header_minix_config_h = yes +then : + MINIX=yes + printf "%s\n" "#define _MINIX 1" >>confdefs.h - fi + printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h + printf "%s\n" "#define _POSIX_1_SOURCE 2" >>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. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ - - ; - 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 @@ -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*) ;; @@ -5019,49 +5339,331 @@ if test "$opt_static_link" = yes; then fi fi -# set the appropriate make variables for building the "build tools" -# modify defaults based on whether or not we are cross compiling, since the -# options for the target host may not be appropriate for the build host -if test "X$cross_compiling" = "Xno"; then - CC_FOR_BUILD=${CC_FOR_BUILD-'$(CC)'} - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"$CPPFLAGS"} # XXX - should it be '$(CPPFLAGS)' - if test X"$opt_profiling" = Xyes; then - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(BASE_LDFLAGS)'} - else - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(LDFLAGS)'} - 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}" - else - CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'} - fi - LIBS_FOR_BUILD=${LIBS_FOR_BUILD-'$(LIBS)'} -else - CC_FOR_BUILD=${CC_FOR_BUILD-"gcc"} - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""} - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} - CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD="-g"} - LIBS_FOR_BUILD=${LIBS_FOR_BUILD-""} -fi +# set the appropriate make variables for building the "build tools" +# modify defaults based on whether or not we are cross compiling, since the +# options for the target host may not be appropriate for the build host +if test "X$cross_compiling" = "Xno"; then + CC_FOR_BUILD=${CC_FOR_BUILD-'$(CC)'} + CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"$CPPFLAGS"} # XXX - should it be '$(CPPFLAGS)' + if test X"$opt_profiling" = Xyes; then + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(BASE_LDFLAGS)'} + else + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(LDFLAGS)'} + fi + # CFLAGS set above to default value if not passed in environment + if test -n "$want_auto_cflags" ; then + 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 + CC_FOR_BUILD=${CC_FOR_BUILD-"gcc"} + 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 + 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 +_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 + 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 +_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" @@ -5361,8 +5967,8 @@ 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 +5992,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 +6026,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 +6073,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 +6103,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 +6112,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 +6158,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 +6204,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 +6219,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 +6247,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 +6261,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 +6282,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 +6292,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 +6306,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 +6319,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 +6338,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 +6351,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 +6364,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 +6383,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 +6395,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 +6409,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 +6422,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 +6441,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 +6454,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 +6467,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 +6486,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 +6498,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 +6512,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 +6525,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 +6544,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 +6556,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 +6579,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 @@ -6326,19 +6962,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 +6985,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 +7013,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 +7029,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 +7089,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 +7105,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 +7130,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 +7139,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -6512,7 +7151,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 +7160,7 @@ if ac_fn_c_try_compile "$LINENO"; then : #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -6530,14 +7170,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 defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -6546,7 +7187,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -6556,14 +7197,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 int -main () +main (void) { #ifndef _BIG_ENDIAN not big endian @@ -6573,31 +7215,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 +7249,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 +7270,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 +7292,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 +7304,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 +7322,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 +7335,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 - 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 +7379,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 +7425,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 +7460,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 +7562,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 +7572,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 +7594,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 +7611,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 +7645,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 +7701,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 +7734,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 +7758,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 +7779,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 +7829,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 +7862,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 +7907,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 +7939,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 +7954,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 +7972,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 +7994,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 +8045,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 +8072,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 #include 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 int -main () +main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; @@ -7482,52 +8140,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 +#include +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _MSC_VER # include # define alloca _alloca # else -# ifdef HAVE_ALLOCA_H -# include -# 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 +8193,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 +8218,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 +8251,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 +8262,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 +8331,6 @@ $ac_includes_default #include #include -#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 +8364,7 @@ char *malloc (); #endif /* no HAVE_GETPAGESIZE */ int -main () +main (void) { char *data, *data2, *data3; const char *cdata2; @@ -7828,12 +8432,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 +8448,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 +8479,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 +8490,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 +8527,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 +8540,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 +8564,41 @@ else #include 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 +8616,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 +8630,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 +8657,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 +8690,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 +8725,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 +8763,7 @@ fi # need special flags to disable these optimizations. For example, the # definition of 'errno' in . 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 +8790,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 +8811,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 +8899,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 +8909,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 +8921,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 +8933,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 +8942,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 &1 &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 +8988,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 +9000,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 +9049,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 +9074,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 +9095,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 +9116,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 +9137,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 +9162,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 +9187,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 +9208,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 +9229,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 +9245,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 +9256,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 +9271,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 +9336,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 +9350,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 +9386,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 +9406,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 +9422,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 . 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 +9457,7 @@ fi pthread_mutexattr_t ma; int -main () +main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); @@ -8832,12 +9465,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 +9482,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 +9496,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 +9529,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 +9537,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 +9551,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 +9581,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 +9595,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 +9628,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 +9654,18 @@ $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h #include 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 +9675,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 +9694,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 +9722,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 +10167,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 +10210,18 @@ $as_echo "$ac_cv_libpth_libs" >&6; } /* end confdefs.h. */ #include 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 +10231,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 +10256,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 +10284,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 " -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 +10422,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 \ @@ -9793,12 +10435,12 @@ fi 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 +10452,7 @@ $as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h #include int -main () +main (void) { #if __FreeBSD__ == 4 @@ -9827,15 +10469,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 +#include +#include +#include +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 +10584,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 @@ -10330,11 +11054,12 @@ fi 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 +11070,7 @@ else #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -10354,10 +11079,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 +11095,7 @@ rm -f core conftest.err conftest.$ac_objext \ #include int -main () +main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); @@ -10378,24 +11104,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 +11131,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 +11149,7 @@ else #endif int -main () +main (void) { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful @@ -10532,7 +11261,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 +11274,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 +11285,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 +11302,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 +11325,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 +11362,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 -" -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 +" "$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 -" -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 +" "$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 +11541,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 +11554,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 @@ -10744,11 +11573,11 @@ fi 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 +11587,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 +11596,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 +11605,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 - #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 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 +11723,34 @@ else #include 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 +11767,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 +11797,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 +11816,7 @@ else #endif int -main () +main (void) { intmax_t x = -1; return !x; @@ -10983,30 +11824,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 +11861,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 +11886,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 \ @@ -11052,22 +11898,23 @@ fi 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 +11930,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 +11976,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 -#include "; then : +#include " +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 "; then : + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include " +then : -else +else $as_nop fits_in_uint= fi @@ -11160,17 +12007,18 @@ 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 +12031,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 +12056,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 @@ -11269,7 +12096,7 @@ else }; int -main () +main (void) { int result = !constants; @@ -11339,9 +12166,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)';; #( @@ -11355,17 +12183,15 @@ fi 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 +12199,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 +12216,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 +12245,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 \ @@ -11432,15 +12257,15 @@ fi 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 +12274,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 +12305,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 \ @@ -11489,26 +12317,27 @@ fi 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 +12348,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 @@ -11568,111 +12394,117 @@ done 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 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 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 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 +12521,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 @@ -11701,32 +12534,33 @@ else #include 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 +12574,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 +12587,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 @@ -11767,11 +12606,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 @@ -11780,11 +12619,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 +12632,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 @@ -11807,11 +12651,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 @@ -11819,8 +12663,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 @@ -11844,77 +12688,150 @@ fi 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 -" -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 +" "$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 -" -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 +" "$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 -" -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 +" "$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 +12865,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 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 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 +12964,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 +12977,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 @@ -12070,11 +12996,11 @@ fi 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 +13009,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 +13022,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 @@ -12110,11 +13041,11 @@ fi 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 +13053,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 @@ -12158,107 +13089,112 @@ 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 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 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 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 +13227,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 +13261,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 +13281,7 @@ extern int *_nl_domain_bindings; $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12353,17 +13291,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 +13327,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 @@ -12826,11 +13766,12 @@ fi - { $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 +13794,7 @@ const char *_nl_expand_alias (const char *); $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12863,12 +13804,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 +13832,7 @@ const char *_nl_expand_alias (const char *); $gt_revision_test_code int -main () +main (void) { bindtextdomain ("", ""); @@ -12900,21 +13842,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 +13903,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 +13926,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 +13964,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 +14015,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 #include <$ac_hdr> int -main () +main (void) { if ((DIR *) 0) return 0; @@ -13092,19 +14036,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 @@ -13113,11 +14059,12 @@ fi 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 +14072,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 +14132,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 -#include -#include -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 -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 +14449,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 #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 int -main () +main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; @@ -13418,52 +14488,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 +#include +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _MSC_VER # include # define alloca _alloca # else -# ifdef HAVE_ALLOCA_H -# include -# 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 +14541,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 +14566,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 +14599,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 +14610,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 _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 -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 int -main () +main (void) { char *f = "conftest.chown"; struct stat before, after; @@ -13660,9 +14689,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 \ @@ -13672,86 +14702,82 @@ fi 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 +14786,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 +14797,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 +14818,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 _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,175 +14849,482 @@ 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 -#include +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 -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" "wait3" "ac_cv_func_wait3" +if test "x$ac_cv_func_wait3" = xyes +then : + printf "%s\n" "#define HAVE_WAIT3 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" "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 -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 + +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" "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" "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 +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 -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" "getgroups" "ac_cv_func_getgroups" +if test "x$ac_cv_func_getgroups" = xyes +then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h -else - $as_echo "#define MKFIFO_MISSING 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 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 +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 -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" "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 + +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 + +ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" +if test "x$ac_cv_func_rename" = xyes +then : + printf "%s\n" "#define HAVE_RENAME 1" >>confdefs.h + +else $as_nop + case " $LIBOBJS " in + *" rename.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS rename.$ac_objext" + ;; +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 + +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 -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_func "$LINENO" "rename" "ac_cv_func_rename" -if test "x$ac_cv_func_rename" = xyes; then : - $as_echo "#define HAVE_RENAME 1" >>confdefs.h +fi -else - case " $LIBOBJS " in - *" rename.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS rename.$ac_objext" - ;; -esac +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 -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" "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 +15332,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 +15346,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 +15359,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 +15372,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 +15385,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 +15398,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 +15411,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 +15424,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 +15438,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 +15451,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 +15464,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 +15477,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 +15490,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,12 +15503,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 +if test "x$ac_cv_func_strtoimax" = xyes +then : + printf "%s\n" "#define HAVE_STRTOIMAX 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strtoimax.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext" @@ -14181,12 +15516,12 @@ else 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 +15530,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 +15544,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 +15558,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" @@ -14238,481 +15573,218 @@ esac 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 -" -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 +" "$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 -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 -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 -#endif -#if HAVE_INTTYPES_H -# include -#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 -#endif -#if HAVE_INTTYPES_H -# include -#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 -#endif -#if HAVE_INTTYPES_H -# include -#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 -#endif -#if HAVE_INTTYPES_H -# include -#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 +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 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 -#endif -#if HAVE_INTTYPES_H -# include -#endif - +#include 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 -#endif -#if HAVE_INTTYPES_H -# include -#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 +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 -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +printf "%s\n" "#define HAVE_DECL_STRTOIMAX $ac_have_decl" >>confdefs.h + +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 +#ifdef HAVE_SYS_TIME_H # include -# include -#else -# ifdef HAVE_SYS_TIME_H -# include -# else -# include -# endif #endif #include @@ -14851,7 +15923,7 @@ year_2050_test () } int -main () +main (void) { time_t t, delta; int i, j; @@ -14895,9 +15967,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 +15978,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 "* ) ;; @@ -14918,40 +15991,55 @@ fi -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 +16071,6 @@ $ac_includes_default #include #include -#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 +16104,7 @@ char *malloc (); #endif /* no HAVE_GETPAGESIZE */ int -main () +main (void) { char *data, *data2, *data3; const char *cdata2; @@ -15088,12 +16172,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 +16188,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= @@ -15136,92 +16265,78 @@ fi -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 +16346,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" @@ -15278,17 +16398,17 @@ fi - - { $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 int -main () +main (void) { wchar_t wc; char const s[] = ""; @@ -15299,82 +16419,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 -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 +#include int -main () +main (void) { wchar_t foo; @@ -15384,31 +16496,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 int -main () +main (void) { wctype_t foo; @@ -15418,31 +16534,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 int -main () +main (void) { wint_t foo; @@ -15452,29 +16572,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 +16623,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 +16634,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 @@ -15537,17 +16659,19 @@ 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 +16680,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 +16706,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 -/* NetBSD declares sys_siglist in unistd.h. */ -#ifdef HAVE_UNISTD_H -# include -#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 +16772,26 @@ else #include 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 @@ -15695,11 +16805,12 @@ fi 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 +16819,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 +16855,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 +16877,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 +16917,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 +16939,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 +16979,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 +16990,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 + 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 +17057,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 +17074,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 +17091,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 _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 +17230,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 @@ -16103,172 +17245,225 @@ 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 + #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 -#include + /* 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 - + #include 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 +#if HAVE_STDLIB_H +#include +#endif +#if HAVE_STDDEF_H +#include +#endif +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#endif +#include + _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 @@ -16279,17 +17474,19 @@ 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 +17495,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 +17528,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 +17561,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 +17594,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 +17627,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 +17693,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 +17726,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 @@ -16533,37 +17759,34 @@ 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 @@ -16572,37 +17795,34 @@ 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 @@ -16611,37 +17831,34 @@ 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 @@ -16650,37 +17867,34 @@ 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 @@ -16689,61 +17903,56 @@ 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 @@ -16753,60 +17962,57 @@ 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 @@ -16829,27 +18035,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 @@ -16860,130 +18068,69 @@ if test $? -ne 69; then else ac_cv_sys_interpreter=no 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; } -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 -#include - -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 +rm -f conftest 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 +{ 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 -fi +if test $ac_cv_sys_interpreter = yes; then +printf "%s\n" "#define HAVE_HASH_BANG_EXEC 1" >>confdefs.h fi - -{ $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 - -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 -#endif -#include -#include -#include + #include + #include 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 +18153,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 +18243,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 + int -main () +main (void) { sigset_t ss; @@ -17136,205 +18292,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 + 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 - RETSIGTYPE foo() { } +#include +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 + 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 - -{ $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;} - bash_cv_sys_siglist=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include +ac_fn_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include +/* NetBSD declares sys_siglist in unistd.h. */ #ifdef HAVE_UNISTD_H -#include -#endif -#include -#if !HAVE_DECL_SYS_SIGLIST -extern char *sys_siglist[]; +# include #endif -int -main() -{ -char *msg = sys_siglist[2]; -exit(msg == 0); -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - bash_cv_sys_siglist=yes -else - bash_cv_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_sys_siglist" >&5 -$as_echo "$bash_cv_sys_siglist" >&6; } -if test $bash_cv_sys_siglist = yes; then -$as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h +" "$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 -{ $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 -#include -#ifdef HAVE_UNISTD_H -#include -#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 +{ 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 -{ $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 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17344,260 +18480,142 @@ else #include #endif #include -#ifndef UNDER_SYS_SIGLIST_DECLARED -extern char *_sys_siglist[]; +#if !HAVE_DECL_SYS_SIGLIST +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 -#include -#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 -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif -#include - -_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 -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif -#include - -_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; } +char *msg = sys_siglist[2]; +exit(msg == 0); +} -if test $bash_cv_type_sigset_t = no; then - cat >>confdefs.h <<_ACEOF -#define sigset_t int _ACEOF +if ac_fn_c_try_run "$LINENO" +then : + bash_cv_sys_siglist=yes +else $as_nop + bash_cv_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 +{ 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 +printf "%s\n" "#define HAVE_SYS_SIGLIST 1" >>confdefs.h +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 +{ 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. */ + #include -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include -#endif -#if HAVE_STDINT_H -#include -#endif #include - +#ifdef HAVE_UNISTD_H +#include +#endif +int +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 -#if STDC_HEADERS -#include -#include -#endif -#if HAVE_INTTYPES_H -#include +#include +#ifdef HAVE_UNISTD_H +#include #endif -#if HAVE_STDINT_H -#include +#include +#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 -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17606,41 +18624,43 @@ else #if HAVE_STDINT_H #include #endif - +#include _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 -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17649,42 +18669,44 @@ else #if HAVE_STDINT_H #include #endif - +#include _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 -#if STDC_HEADERS +#if HAVE_STDLIB_H #include +#endif +#if HAVE_STDDEF_H #include #endif #if HAVE_INTTYPES_H @@ -17697,113 +18719,232 @@ else _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 #include 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 +#ifdef HAVE_SYS_TIME_H #include +#endif +#include #include +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 #include -int +#if HAVE_INTTYPES_H +#include +#endif +#if HAVE_STDINT_H +#include +#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 +18953,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 +18968,9 @@ ac_fn_c_check_member "$LINENO" "struct termios" "c_line" "ac_cv_member_struct_te #include " -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 +18981,23 @@ ac_fn_c_check_member "$LINENO" "struct termio" "c_line" "ac_cv_member_struct_ter #include " -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 #include #ifdef HAVE_UNISTD_H @@ -17876,40 +19018,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 #include #ifdef HAVE_UNISTD_H @@ -17930,40 +19069,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 #include #ifdef HAVE_UNISTD_H @@ -17984,94 +19120,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 #include + 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 -#include +#include + 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 +19252,7 @@ else #include int -main () +main (void) { static struct timeval x; x.tv_sec = x.tv_usec; @@ -18088,44 +19260,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 #include int -main () +main (void) { struct tm tm; int *p = &tm.tm_sec; @@ -18134,18 +19307,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 +19327,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 -" -if test "x$ac_cv_have_decl_tzname" = xyes; then : + ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include +" "$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 @@ -18192,35 +19364,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 +19402,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 _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 +19485,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 \ @@ -18319,123 +19498,127 @@ fi 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 " >&5 -$as_echo_n "checking for struct timespec in ... " >&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 " >&5 +printf %s "checking for struct timespec in ... " >&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 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 " >&5 -$as_echo_n "checking for struct timespec in ... " >&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 " >&5 +printf %s "checking for struct timespec in ... " >&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 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 " >&5 -$as_echo_n "checking for struct timespec in ... " >&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 " >&5 +printf %s "checking for struct timespec in ... " >&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 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 +19635,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 #include " -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 +19659,7 @@ else struct stat st; int -main () +main (void) { st.st_atim = ts; @@ -18485,51 +19668,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 #include " -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 #include " -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 #include " -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 @@ -18543,45 +19724,49 @@ 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 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 +19783,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 #include #include 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 +19902,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 \ @@ -18724,24 +19916,26 @@ fi 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 +19951,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 \ @@ -18768,10 +19963,10 @@ fi 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 @@ -18780,32 +19975,30 @@ fi - - - ac_fn_c_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include -" -if test "x$ac_cv_have_decl_fpurge" = xyes; then : + ac_fn_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include +" "$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 +20036,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 \ @@ -18854,25 +20048,27 @@ fi 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 +20087,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 \ @@ -18902,10 +20099,10 @@ fi 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 "* ) ;; @@ -18917,17 +20114,23 @@ fi 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 +20150,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 +20182,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 \ @@ -18982,25 +20196,26 @@ fi 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 +20258,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 \ @@ -19054,29 +20270,30 @@ fi 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 +20309,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 +20320,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 +20391,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,15 +20402,15 @@ 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 @@ -19199,17 +20419,19 @@ $as_echo "#define HAVE_VSNPRINTF 0" >>confdefs.h if test "$ac_cv_func_putenv" = "yes"; then - -{ $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 +{ 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 +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -19224,47 +20446,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 +#endif +#if HAVE_STDDEF_H #include #endif #ifndef __STDC__ @@ -19279,45 +20504,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 +20564,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 \ @@ -19347,25 +20576,27 @@ fi 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 +20620,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 \ @@ -19402,33 +20633,32 @@ fi 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 +20668,7 @@ else #endif #include -typedef RETSIGTYPE sigfunc(); +typedef void sigfunc(); volatile int nsigint; @@ -19460,7 +20690,7 @@ set_signal_handler(sig, handler) #define set_signal_handler(s, h) signal(s, h) #endif -RETSIGTYPE +void sigint(s) int s; { @@ -19478,9 +20708,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 \ @@ -19489,19 +20720,20 @@ fi 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 +20779,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 +20859,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 \ @@ -19636,19 +20873,20 @@ fi 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 @@ -19659,23 +20897,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 @@ -19686,101 +20926,112 @@ 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_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 #include 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 #include 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 +21057,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 \ @@ -19817,50 +21069,53 @@ fi 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 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 +21127,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 +21180,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 \ @@ -19934,10 +21194,10 @@ fi 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 @@ -19954,11 +21214,16 @@ 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 +21231,7 @@ else #include int -main () +main (void) { int f; @@ -19976,10 +21241,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 @@ -19988,31 +21262,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 +21300,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 +21327,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 +21366,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 +21405,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 +21444,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 +21483,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 @@ -20248,11 +21524,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" @@ -20278,11 +21554,12 @@ 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] @@ -20302,25 +21579,26 @@ fi 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 +21607,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 +21634,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 +21645,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 +21659,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 +21686,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 +21714,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 +21731,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 +21739,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 +21749,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 @@ -20548,7 +21826,9 @@ fi 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_commands="$ac_config_commands default" + +ac_config_commands="$ac_config_commands stamp-h" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -20577,8 +21857,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 +21888,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 +21910,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 +21928,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 +21945,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 +21969,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 +21988,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&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 +22036,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 +22044,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 +22061,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 +22077,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 +22111,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 +22136,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 +22173,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 +22195,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 +22212,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 +22259,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 +22268,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 +22330,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-alpha, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -21120,14 +22393,16 @@ $config_commands Report bugs to ." _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-alpha +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." @@ -21166,15 +22441,15 @@ do -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 +22457,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 +22466,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 +22494,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 +22508,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 @@ -21275,7 +22550,7 @@ do "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 +22562,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 +22900,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 @@ -21633,17 +22908,17 @@ do # 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 +22935,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 +22959,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 +23023,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 +23068,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 +23086,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 +23223,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 +23258,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 + diff --git a/configure.ac b/configure.ac index 2fe3e7d9a..ee44f4462 100644 --- a/configure.ac +++ b/configure.ac @@ -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 . -AC_REVISION([for Bash 5.1, version 5.022])dnl +AC_REVISION([for Bash 5.2, version 5.039])dnl -define(bashvers, 5.1) -define(relstatus, release) +define(bashvers, 5.2) +define(relstatus, alpha) 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 @@ -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) @@ -729,26 +751,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 +800,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 +830,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 \ @@ -857,8 +871,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 +880,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 ], - [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 ]], + [[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 +894,18 @@ 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(strtoimax) +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 +937,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 +969,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 +979,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 +1009,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 +1019,18 @@ BASH_SYS_SIGLIST BASH_UNDER_SYS_SIGLIST dnl various system types -BASH_TYPE_SIGHANDLER BASH_CHECK_TYPE(clock_t, [#include ], long) BASH_CHECK_TYPE(sigset_t, [#include ], int) -BASH_CHECK_TYPE(sig_atomic_t, [#include ], 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 ], [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 @@ -1164,7 +1173,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 +1199,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 +1216,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 +1307,16 @@ 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/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/configure.in b/configure.in deleted file mode 100644 index d7e09983c..000000000 --- a/configure.in +++ /dev/null @@ -1,1161 +0,0 @@ -dnl -dnl Configure script for bash-4.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-2011 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 . - -AC_REVISION([for Bash 4.2, version 4.037])dnl - -define(bashvers, 4.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.50) - -AC_CONFIG_SRCDIR(shell.h) -dnl where to find install.sh, config.sub, and config.guess -AC_CONFIG_AUX_DIR(./support) -AC_CONFIG_HEADERS(config.h) - -dnl checks for version info -BASHVERS=bashvers -RELSTATUS=relstatus - -dnl defaults for debug settings -case "$RELSTATUS" in -alp*|bet*|dev*|rc*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;; -*) DEBUG= MALLOC_DEBUG= ;; -esac - -dnl canonicalize the host and os so we can do some tricky things before -dnl parsing options -AC_CANONICAL_HOST - -dnl configure defaults -opt_bash_malloc=yes -opt_purify=no -opt_purecov=no -opt_afs=no -opt_curses=no -opt_with_installed_readline=no - -#htmldir= - -dnl some systems should be configured without the bash malloc by default -dnl and some need a special compiler or loader -dnl look in the NOTES file for more -case "${host_cpu}-${host_os}" in -alpha*-*) opt_bash_malloc=no ;; # alpha running osf/1 or linux -*[[Cc]]ray*-*) opt_bash_malloc=no ;; # Crays -*-osf1*) opt_bash_malloc=no ;; # other osf/1 machines -sparc-svr4*) opt_bash_malloc=no ;; # sparc SVR4, SVR4.2 -sparc-netbsd*) opt_bash_malloc=no ;; # needs 8-byte alignment -mips-irix6*) opt_bash_malloc=no ;; # needs 8-byte alignment -m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir -sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF -#*-freebsd*-gnu) opt_bash_malloc=no ;; # there's some undetermined problem here -#*-freebsd*) opt_bash_malloc=no ;; # they claim it's better; I disagree -*-openbsd*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment -*-aix*) opt_bash_malloc=no ;; # AIX machines -*-nextstep*) opt_bash_malloc=no ;; # NeXT machines running NeXTstep -*-macos*) opt_bash_malloc=no ;; # Apple MacOS X -*-rhapsody*) opt_bash_malloc=no ;; # Apple Rhapsody (MacOS X) -*-darwin*) opt_bash_malloc=no ;; # Apple Darwin (MacOS X) -*-dgux*) opt_bash_malloc=no ;; # DG/UX machines -*-qnx*) opt_bash_malloc=no ;; # QNX 4.2, QNX 6.x -*-machten4) opt_bash_malloc=no ;; # MachTen 4.x -*-bsdi2.1|*-bsdi3.?) opt_bash_malloc=no ; : ${CC:=shlicc2} ;; # for loadable builtins -*-beos*) opt_bash_malloc=no ;; # they say it's suitable -*-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment -*-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft -esac - -# memory scrambling on free() -case "${host_os}" in -sco3.2v5*|sco3.2v4*) opt_memscramble=no ;; -*) opt_memscramble=yes ;; -esac - -dnl -dnl macros for the bash debugger -dnl -dnl AM_PATH_LISPDIR -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(purecov, AC_HELP_STRING([--with-purecov], [configure to postprocess with pure coverage]), opt_purecov=$withval) -AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval) - -if test "$opt_bash_malloc" = yes; then - MALLOC_TARGET=malloc - MALLOC_SRC=malloc.c - - MALLOC_LIB='-lmalloc' - MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a' - MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)' - MALLOC_DEP='$(MALLOC_LIBRARY)' - - AC_DEFINE(USING_BASH_MALLOC) -else - MALLOC_LIB= - MALLOC_LIBRARY= - MALLOC_LDFLAGS= - MALLOC_DEP= -fi - -if test "$opt_purify" = yes; then - PURIFY="purify " - AC_DEFINE(DISABLE_MALLOC_WRAPPERS) -else - PURIFY= -fi - -if test "$opt_purecov" = yes; then - PURIFY="${PURIFY}purecov" -fi - -if test "$opt_afs" = yes; then - AC_DEFINE(AFS) -fi - -if test "$opt_curses" = yes; then - prefer_curses=yes -fi - -if test -z "${DEBUGGER_START_FILE}"; then - DEBUGGER_START_FILE='${datadir}/bashdb/bashdb-main.inc' -fi - -dnl optional shell features in config.h.in -opt_minimal_config=no - -opt_job_control=yes -opt_alias=yes -opt_readline=yes -opt_history=yes -opt_bang_history=yes -opt_dirstack=yes -opt_restricted=yes -opt_process_subst=yes -opt_prompt_decoding=yes -opt_select=yes -opt_help=yes -opt_array_variables=yes -opt_dparen_arith=yes -opt_extended_glob=yes -opt_brace_expansion=yes -opt_disabled_builtins=no -opt_command_timing=yes -opt_xpg_echo=no -opt_strict_posix=no -opt_cond_command=yes -opt_cond_regexp=yes -opt_coproc=yes -opt_arith_for_command=yes -opt_net_redirs=yes -opt_progcomp=yes -opt_separate_help=no -opt_multibyte=yes -opt_debugger=yes -opt_single_longdoc_strings=yes -opt_casemod_attrs=yes -opt_casemod_expansions=yes -opt_extglob_default=no - -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) - -dnl a minimal configuration turns everything off, but features can be -dnl added individually -if test $opt_minimal_config = yes; then - opt_job_control=no opt_alias=no opt_readline=no - opt_history=no opt_bang_history=no opt_dirstack=no - opt_restricted=no opt_process_subst=no opt_prompt_decoding=no - opt_select=no opt_help=no opt_array_variables=no opt_dparen_arith=no - opt_brace_expansion=no opt_disabled_builtins=no opt_command_timing=no - opt_extended_glob=no opt_cond_command=no opt_arith_for_command=no - 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 -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(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(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) - -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) - -dnl opt_job_control is handled later, after BASH_JOB_CONTROL_MISSING runs - -dnl opt_readline and opt_history are handled later, because AC_PROG_CC needs -dnl to be run before we can check the version of an already-installed readline -dnl library - -if test $opt_alias = yes; then -AC_DEFINE(ALIAS) -fi -if test $opt_dirstack = yes; then -AC_DEFINE(PUSHD_AND_POPD) -fi -if test $opt_restricted = yes; then -AC_DEFINE(RESTRICTED_SHELL) -fi -if test $opt_process_subst = yes; then -AC_DEFINE(PROCESS_SUBSTITUTION) -fi -if test $opt_prompt_decoding = yes; then -AC_DEFINE(PROMPT_STRING_DECODE) -fi -if test $opt_select = yes; then -AC_DEFINE(SELECT_COMMAND) -fi -if test $opt_help = yes; then -AC_DEFINE(HELP_BUILTIN) -fi -if test $opt_array_variables = yes; then -AC_DEFINE(ARRAY_VARS) -fi -if test $opt_dparen_arith = yes; then -AC_DEFINE(DPAREN_ARITHMETIC) -fi -if test $opt_brace_expansion = yes; then -AC_DEFINE(BRACE_EXPANSION) -fi -if test $opt_disabled_builtins = yes; then -AC_DEFINE(DISABLED_BUILTINS) -fi -if test $opt_command_timing = yes; then -AC_DEFINE(COMMAND_TIMING) -fi -if test $opt_xpg_echo = yes ; then -AC_DEFINE(DEFAULT_ECHO_TO_XPG) -fi -if test $opt_strict_posix = yes; then -AC_DEFINE(STRICT_POSIX) -fi -if test $opt_extended_glob = yes ; then -AC_DEFINE(EXTENDED_GLOB) -fi -if test $opt_extglob_default = yes; then -AC_DEFINE(EXTGLOB_DEFAULT, 1) -else -AC_DEFINE(EXTGLOB_DEFAULT, 0) -fi -if test $opt_cond_command = yes ; then -AC_DEFINE(COND_COMMAND) -fi -if test $opt_cond_regexp = yes ; then -AC_DEFINE(COND_REGEXP) -fi -if test $opt_coproc = yes; then -AC_DEFINE(COPROCESS_SUPPORT) -fi -if test $opt_arith_for_command = yes; then -AC_DEFINE(ARITH_FOR_COMMAND) -fi -if test $opt_net_redirs = yes; then -AC_DEFINE(NETWORK_REDIRECTIONS) -fi -if test $opt_progcomp = yes; then -AC_DEFINE(PROGRAMMABLE_COMPLETION) -fi -if test $opt_multibyte = no; then -AC_DEFINE(NO_MULTIBYTE_SUPPORT) -fi -if test $opt_debugger = yes; then -AC_DEFINE(DEBUGGER) -fi -if test $opt_casemod_attrs = yes; then -AC_DEFINE(CASEMOD_ATTRS) -fi -if test $opt_casemod_expansions = yes; then -AC_DEFINE(CASEMOD_EXPANSIONS) -fi - -if test $opt_memscramble = yes; then -AC_DEFINE(MEMSCRAMBLE) -fi - -if test "$opt_minimal_config" = yes; then - TESTSCRIPT=run-minimal -else - TESTSCRIPT=run-all -fi - -HELPDIR= HELPDIRDEFINE= HELPINSTALL= -if test "$opt_separate_help" != no; then - if test "$opt_separate_help" = "yes" ; then - HELPDIR='${datadir}/bash' - else - HELPDIR=$opt_separate_help - fi - HELPDIRDEFINE='-H ${HELPDIR}' - HELPINSTALL='install-help' -fi -HELPSTRINGS= -if test "$opt_single_longdoc_strings" != "yes"; then - HELPSTRINGS='-S' -fi - -dnl now substitute in the values generated by arguments -AC_SUBST(TESTSCRIPT) -AC_SUBST(PURIFY) -AC_SUBST(MALLOC_TARGET) -AC_SUBST(MALLOC_SRC) - -AC_SUBST(MALLOC_LIB) -AC_SUBST(MALLOC_LIBRARY) -AC_SUBST(MALLOC_LDFLAGS) -AC_SUBST(MALLOC_DEP) - -AC_SUBST(htmldir) - -AC_SUBST(HELPDIR) -AC_SUBST(HELPDIRDEFINE) -AC_SUBST(HELPINSTALL) -AC_SUBST(HELPSTRINGS) - -echo "" -echo "Beginning configuration for bash-$BASHVERS-$RELSTATUS for ${host_cpu}-${host_vendor}-${host_os}" -echo "" - -dnl compilation checks -dnl AC_PROG_CC sets $cross_compiling to `yes' if cross-compiling for a -dnl different environment -AC_PROG_CC - -dnl test for Unix variants -AC_ISC_POSIX -AC_MINIX - -AC_SYS_LARGEFILE - -dnl BEGIN changes for cross-building (currently cygwin, minGW, and -dnl (obsolete) BeOS) - -SIGNAMES_O= -SIGNAMES_H=lsignames.h - -dnl load up the cross-building cache file -- add more cases and cache -dnl files as necessary - -dnl Note that host and target machine are the same, and different than the -dnl build machine. -dnl Set SIGNAMES_H based on whether or not we're cross-compiling. - -CROSS_COMPILE= -if test "x$cross_compiling" = "xyes"; then - case "${host}" in - *-cygwin*) - cross_cache=${srcdir}/cross-build/cygwin32.cache - ;; - *-mingw*) - cross_cache=${srcdir}/cross-build/cygwin32.cache - ;; - i[[3456]]86-*-beos*) - cross_cache=${srcdir}/cross-build/x86-beos.cache - ;; - *) echo "configure: cross-compiling for $host is not supported" >&2 - ;; - esac - if test -n "${cross_cache}" && test -r "${cross_cache}"; then - echo "loading cross-build cache file ${cross_cache}" - . ${cross_cache} - fi - unset cross_cache - SIGNAMES_O='signames.o' - CROSS_COMPILE='-DCROSS_COMPILING' - AC_SUBST(CROSS_COMPILE) -fi -AC_SUBST(SIGNAMES_H) -AC_SUBST(SIGNAMES_O) - -if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - CC_FOR_BUILD=gcc - fi -fi -AC_SUBST(CC_FOR_BUILD) - -dnl END changes for cross-building - -dnl We want these before the checks, so the checks can modify their values. -test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 - -dnl If we're using gcc and the user hasn't specified CFLAGS, add -O2 to CFLAGS. -test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2" - -dnl handle options that alter how bash is compiled and linked -dnl these must come after the test for cc/gcc -if test "$opt_profiling" = "yes"; then - PROFILE_FLAGS=-pg - case "$host_os" in - solaris2*) ;; - *) opt_static_link=yes ;; - esac - DEBUG= MALLOC_DEBUG= -fi - -if test "$opt_static_link" = yes; then - # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2 - if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then - STATIC_LD="-static" - case "$host_os" in - solaris2*) ;; - *) LDFLAGS="$LDFLAGS -static" ;; # XXX experimental - esac - fi -fi - -if test "X$cross_compiling" = "Xno"; then - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"$CPPFLAGS"} - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-'$(LDFLAGS)'} -else - CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""} - LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""} -fi - -test -z "$CFLAGS_FOR_BUILD" && CFLAGS_FOR_BUILD="-g" - -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(LDFLAGS) -AC_SUBST(STATIC_LD) - -AC_SUBST(CFLAGS_FOR_BUILD) -AC_SUBST(CPPFLAGS_FOR_BUILD) -AC_SUBST(LDFLAGS_FOR_BUILD) - -AC_PROG_GCC_TRADITIONAL - -dnl BEGIN READLINE and HISTORY LIBRARY SECTION -dnl prepare to allow bash to be linked against an already-installed readline - -dnl first test that the readline version is new enough to link bash against -if test "$opt_readline" = yes && test "$opt_with_installed_readline" != "no" -then - # If the user specified --with-installed-readline=PREFIX and PREFIX - # is not `yes', set ac_cv_rl_prefix to PREFIX - test $opt_with_installed_readline != "yes" && ac_cv_rl_prefix=$opt_with_installed_readline - - RL_LIB_READLINE_VERSION - - case "$ac_cv_rl_version" in - 5*|6*|7*|8*|9*) ;; - *) opt_with_installed_readline=no - AC_MSG_WARN([installed readline library is too old to be linked with bash]) - AC_MSG_WARN([using private bash version]) - ;; - esac -fi - -TILDE_LIB=-ltilde -if test $opt_readline = yes; then - AC_DEFINE(READLINE) - if test "$opt_with_installed_readline" != "no" ; then - case "$opt_with_installed_readline" in - yes) RL_INCLUDE= ;; - *) case "$RL_INCLUDEDIR" in - /usr/include) ;; - *) RL_INCLUDE='-I${RL_INCLUDEDIR}' ;; - esac - ;; - esac - READLINE_DEP= - READLINE_LIB=-lreadline - # section for OS versions that don't allow unresolved symbols - # to be compiled into dynamic libraries. - case "$host_os" in - cygwin*) TILDE_LIB= ;; - esac - else - RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - READLINE_DEP='$(READLINE_LIBRARY)' - # section for OS versions that ship an older/broken version of - # readline as a standard dynamic library and don't allow a - # static version specified as -llibname to override the - # dynamic version - case "${host_os}" in - darwin[[89]]*|darwin10*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac - fi -else - RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - READLINE_LIB= READLINE_DEP= -fi -if test $opt_history = yes || test $opt_bang_history = yes; then - if test $opt_history = yes; then - AC_DEFINE(HISTORY) - fi - if test $opt_bang_history = yes; then - AC_DEFINE(BANG_HISTORY) - fi - if test "$opt_with_installed_readline" != "no"; then - HIST_LIBDIR=$RL_LIBDIR - HISTORY_DEP= - HISTORY_LIB=-lhistory - case "$opt_with_installed_readline" in - yes) RL_INCLUDE= ;; - *) case "$RL_INCLUDEDIR" in - /usr/include) ;; - *) RL_INCLUDE='-I${RL_INCLUDEDIR}' ;; - esac - ;; - esac - else - HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - HISTORY_DEP='$(HISTORY_LIBRARY)' - # section for OS versions that ship an older version of - # readline as a standard dynamic library and don't allow a - # static version specified as -llibname to override the - # dynamic version - case "${host_os}" in - darwin[[89]]*|darwin10*) HISTORY_LIB='${HISTORY_LIBRARY}' ;; - *) HISTORY_LIB=-lhistory ;; - esac - fi -else - HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline' - HISTORY_LIB= HISTORY_DEP= -fi -AC_SUBST(READLINE_LIB) -AC_SUBST(READLINE_DEP) -AC_SUBST(RL_LIBDIR) -AC_SUBST(RL_INCLUDEDIR) -AC_SUBST(RL_INCLUDE) -AC_SUBST(HISTORY_LIB) -AC_SUBST(HISTORY_DEP) -AC_SUBST(HIST_LIBDIR) -AC_SUBST(TILDE_LIB) - -dnl END READLINE and HISTORY LIBRARY SECTION - -dnl programs needed by the build and install process -AC_PROG_INSTALL -AC_CHECK_PROG(AR, ar, , ar) -dnl Set default for ARFLAGS, since autoconf does not have a macro for it. -dnl This allows people to set it when running configure or make -test -n "$ARFLAGS" || ARFLAGS="cr" -AC_PROG_RANLIB -AC_PROG_YACC -AC_PROG_MAKE_SET - -case "$host_os" in -opennt*|interix*) MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;; -*) MAKE_SHELL=/bin/sh ;; -esac -AC_SUBST(MAKE_SHELL) - -dnl this is similar to the expanded AC_PROG_RANLIB -if test x$SIZE = x; then - if test x$ac_tool_prefix = x; then - SIZE=size - else - SIZE=${ac_tool_prefix}size - save_IFS=$IFS ; IFS=: - size_found=0 - for dir in $PATH; do - if test -x $dir/$SIZE ; then - size_found=1 - break - fi - done - if test $size_found -eq 0; then - SIZE=: - fi - IFS=$save_IFS - fi -fi -AC_SUBST(SIZE) - -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_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]) - -dnl header files -AC_HEADER_DIRENT -AC_HEADER_TIME - -BASH_HEADER_INTTYPES - -AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \ - memory.h locale.h termcap.h termio.h termios.h dlfcn.h \ - stddef.h stdint.h netdb.h pwd.h grp.h strings.h regex.h \ - syslog.h ulimit.h) -AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h \ - sys/resource.h sys/param.h sys/socket.h sys/stat.h \ - sys/time.h sys/times.h sys/types.h sys/wait.h) -AC_CHECK_HEADERS(netinet/in.h arpa/inet.h) - -dnl sys/ptem.h requires definitions from sys/stream.h on systems where it -dnl exists -AC_CHECK_HEADER(sys/ptem.h, , ,[[ -#if HAVE_SYS_STREAM_H -# include -#endif -]]) - -dnl special checks for libc functions -AC_FUNC_ALLOCA -AC_FUNC_GETPGRP -AC_FUNC_SETVBUF_REVERSED -AC_FUNC_VPRINTF -AC_FUNC_STRCOLL - -dnl if we're not using the bash malloc but require the C alloca, set things -dnl up to build a libmalloc.a containing only alloca.o - -if test "$ac_cv_func_alloca_works" = "no" && test "$opt_bash_malloc" = "no"; then - MALLOC_TARGET=alloca - MALLOC_SRC=alloca.c - - MALLOC_LIB='-lmalloc' - MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a' - MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)' - MALLOC_DEP='$(MALLOC_LIBRARY)' -fi - -dnl if vprintf is not in libc, see if it's defined in stdio.h -if test "$ac_cv_func_vprintf" = no; then - AC_MSG_CHECKING(for declaration of vprintf in stdio.h) - AC_EGREP_HEADER([[int[ ]*vprintf[^a-zA-Z0-9]]],stdio.h,ac_cv_func_vprintf=yes) - AC_MSG_RESULT($ac_cv_func_vprintf) - if test $ac_cv_func_vprintf = yes; then - AC_DEFINE(HAVE_VPRINTF) - fi -fi - -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)) -AC_CHECK_FUNC(isinf, AC_DEFINE(HAVE_ISINF_IN_LIBC)) -AC_CHECK_FUNC(isnan, AC_DEFINE(HAVE_ISNAN_IN_LIBC)) - -dnl checks for missing libc functions -AC_CHECK_FUNC(mkfifo,AC_DEFINE(HAVE_MKFIFO),AC_DEFINE(MKFIFO_MISSING)) - -dnl checks for system calls -AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getgroups gethostname \ - getpagesize getpeername getrlimit getrusage gettimeofday \ - kill killpg lstat readlink sbrk select setdtablesize \ - setitimer tcgetpgrp uname ulimit waitpid) -AC_REPLACE_FUNCS(rename) - -dnl checks for c library functions -AC_CHECK_FUNCS(bcopy bzero confstr faccessat fnmatch \ - getaddrinfo gethostbyname getservbyname getservent inet_aton \ - memmove pathconf putenv raise regcomp regexec \ - setenv setlinebuf setlocale setvbuf siginterrupt strchr \ - sysconf syslog tcgetattr times ttyname tzset unsetenv) - -AC_CHECK_FUNCS(vasprintf asprintf) -AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit) -AC_CHECK_FUNCS(getpwent getpwnam getpwuid) -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(dprintf) -AC_REPLACE_FUNCS(strchrnul) - -AC_CHECK_DECLS([confstr]) -AC_CHECK_DECLS([printf]) -AC_CHECK_DECLS([sbrk]) -AC_CHECK_DECLS([setregid]) -AC_CHECK_DECLS([strcpy]) -AC_CHECK_DECLS([strsignal]) - -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 ], - [int main() { 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_MSG_RESULT($bash_cv_strtold_broken) - if test "$bash_cv_strtold_broken" = "yes" ; then - AC_DEFINE(STRTOLD_BROKEN) - 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_FUNC_MKTIME - -dnl -dnl Checks for lib/intl and related code (uses some of the output from -dnl AM_GNU_GETTEXT) -dnl - -AC_CHECK_HEADERS([argz.h errno.h fcntl.h malloc.h stdio_ext.h]) - -dnl AC_FUNC_MALLOC -AC_FUNC_MMAP -AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext mempcpy \ - munmap stpcpy strcspn strdup]) - -INTL_DEP= INTL_INC= LIBINTL_H= -if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then - INTL_DEP='${INTL_LIBDIR}/libintl.a' - INTL_INC='-I${INTL_LIBSRC} -I${INTL_BUILDDIR}' - LIBINTL_H='${INTL_BUILDDIR}/libintl.h' -fi -AC_SUBST(INTL_DEP) -AC_SUBST(INTL_INC) -AC_SUBST(LIBINTL_H) - -dnl -dnl End of checks needed by files in lib/intl -dnl - -BASH_CHECK_MULTIBYTE - -dnl checks for the dynamic loading library functions in libc and libdl -if test "$opt_static_link" != yes; then -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 -fi - -dnl libraries -dnl this is reportedly no longer necessary for irix[56].? -case "$host_os" in -irix4*) AC_CHECK_LIB(sun, getpwent) ;; -esac - -dnl check for getpeername in the socket library only if it's not in libc -if test "$ac_cv_func_getpeername" = no; then - BASH_CHECK_LIB_SOCKET -fi -dnl check for gethostbyname in socket libraries if it's not in libc -if test "$ac_cv_func_gethostbyname" = no; then - BASH_FUNC_GETHOSTBYNAME -fi - -dnl system types -AC_TYPE_GETGROUPS -AC_TYPE_OFF_T -AC_TYPE_MODE_T -AC_TYPE_UID_T -AC_TYPE_PID_T -AC_TYPE_SIZE_T -AC_CHECK_TYPE(ssize_t, int) -AC_CHECK_TYPE(time_t, long) - -BASH_TYPE_LONG_LONG -BASH_TYPE_UNSIGNED_LONG_LONG - -AC_TYPE_SIGNAL -BASH_TYPE_SIG_ATOMIC_T - -AC_CHECK_SIZEOF(char, 1) -AC_CHECK_SIZEOF(short, 2) -AC_CHECK_SIZEOF(int, 4) -AC_CHECK_SIZEOF(long, 4) -AC_CHECK_SIZEOF(char *, 4) -AC_CHECK_SIZEOF(double, 8) -AC_CHECK_SIZEOF([long long], 8) - -AC_CHECK_TYPE(u_int, [unsigned int]) -AC_CHECK_TYPE(u_long, [unsigned long]) - -BASH_TYPE_BITS16_T -BASH_TYPE_U_BITS16_T -BASH_TYPE_BITS32_T -BASH_TYPE_U_BITS32_T -BASH_TYPE_BITS64_T - -BASH_TYPE_PTRDIFF_T - -dnl structures -AC_HEADER_STAT - -dnl system services -AC_SYS_INTERPRETER -if test $ac_cv_sys_interpreter = yes; then -AC_DEFINE(HAVE_HASH_BANG_EXEC) -fi - -dnl Miscellaneous Bash tests -if test "$ac_cv_func_lstat" = "no"; then -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 - -dnl checking for the presence of certain library symbols -BASH_SYS_ERRLIST -BASH_SYS_SIGLIST -BASH_UNDER_SYS_SIGLIST - -dnl various system types -BASH_TYPE_SIGHANDLER -BASH_CHECK_TYPE(clock_t, [#include ], long) -BASH_CHECK_TYPE(sigset_t, [#include ], 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 ], int, HAVE_SOCKLEN_T) -fi -BASH_TYPE_RLIMIT - -AC_CHECK_SIZEOF(intmax_t, 8) - -dnl presence and contents of structures used by system calls -BASH_STRUCT_TERMIOS_LDISC -BASH_STRUCT_TERMIO_LDISC -BASH_STRUCT_DIRENT_D_INO -BASH_STRUCT_DIRENT_D_FILENO -BASH_STRUCT_DIRENT_D_NAMLEN -BASH_STRUCT_WINSIZE -BASH_STRUCT_TIMEVAL -AC_CHECK_MEMBERS([struct stat.st_blocks]) -AC_STRUCT_TM -AC_STRUCT_TIMEZONE -BASH_STRUCT_TIMEZONE - -BASH_STRUCT_WEXITSTATUS_OFFSET - -dnl presence and behavior of C library functions -BASH_FUNC_STRSIGNAL -BASH_FUNC_OPENDIR_CHECK -BASH_FUNC_ULIMIT_MAXFDS -BASH_FUNC_FPURGE -BASH_FUNC_GETENV -if test "$ac_cv_func_getcwd" = "yes"; then -BASH_FUNC_GETCWD -fi -BASH_FUNC_POSIX_SETJMP -BASH_FUNC_STRCOLL -BASH_FUNC_SNPRINTF -BASH_FUNC_VSNPRINTF - -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 - -if test "$ac_cv_func_putenv" = "yes"; then -BASH_FUNC_STD_PUTENV -else -AC_DEFINE(HAVE_STD_PUTENV) -fi -if test "$ac_cv_func_unsetenv" = "yes"; then -BASH_FUNC_STD_UNSETENV -else -AC_DEFINE(HAVE_STD_UNSETENV) -fi - -BASH_FUNC_PRINTF_A_FORMAT - -dnl presence and behavior of OS functions -BASH_SYS_REINSTALL_SIGHANDLERS -BASH_SYS_JOB_CONTROL_MISSING -BASH_SYS_NAMED_PIPES - -dnl presence of certain CPP defines -AC_HEADER_TIOCGWINSZ -BASH_HAVE_TIOCSTAT -BASH_HAVE_FIONREAD - -BASH_CHECK_WCONTINUED - -dnl miscellaneous -BASH_CHECK_SPEED_T -BASH_CHECK_GETPW_FUNCS -BASH_CHECK_RTSIGS -BASH_CHECK_SYS_SIGLIST - -dnl special checks -case "$host_os" in -hpux*) BASH_CHECK_KERNEL_RLIMIT ;; -esac - -if test "$opt_readline" = yes; then -dnl yuck -case "$host_os" in -aix*) prefer_curses=yes ;; -esac -BASH_CHECK_LIB_TERMCAP -fi -AC_SUBST(TERMCAP_LIB) -AC_SUBST(TERMCAP_DEP) - -BASH_CHECK_DEV_FD -BASH_CHECK_DEV_STDIN -BASH_SYS_DEFAULT_MAIL_DIR - -if test "$bash_cv_job_control_missing" = missing; then - opt_job_control=no -fi - -if test "$opt_job_control" = yes; then -AC_DEFINE(JOB_CONTROL) -JOBS_O=jobs.o -else -JOBS_O=nojobs.o -fi - -AC_SUBST(JOBS_O) - -dnl Defines that we want to propagate to the Makefiles in subdirectories, -dnl like glob and readline - -LOCAL_DEFS=-DSHELL - -dnl use this section to possibly define more cpp variables, specify local -dnl libraries, and specify any additional local cc or ld flags -dnl -dnl this should really go away someday - -case "${host_os}" in -sysv4.2*) AC_DEFINE(SVR4_2) - AC_DEFINE(SVR4) ;; -sysv4*) AC_DEFINE(SVR4) ;; -sysv5*) AC_DEFINE(SVR5) ;; -hpux9*) LOCAL_CFLAGS="-DHPUX9 -DHPUX" ;; -hpux*) LOCAL_CFLAGS=-DHPUX ;; -dgux*) LOCAL_CFLAGS=-D_DGUX_SOURCE; LOCAL_LIBS=-ldgc ;; -isc*) LOCAL_CFLAGS=-Disc386 ;; -rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;; -darwin*) LOCAL_CFLAGS=-DMACOSX ;; -sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DPATH_MAX=1024" ;; -sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DPATH_MAX=1024" ;; -sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; -sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -solaris2.8*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2.9*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2.10*) LOCAL_CFLAGS=-DSOLARIS ;; -solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; -lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; -linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading - case "`uname -r`" in - 2.[[456789]]*|3*) AC_DEFINE(PGRP_PIPE) ;; - esac ;; -*qnx6*) LOCAL_CFLAGS="-Dqnx -Dqnx6" LOCAL_LIBS="-lncurses" ;; -*qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;; -powerux*) LOCAL_LIBS="-lgen" ;; -cygwin*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; -opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE -D_ALL_SOURCE" ;; -esac - -dnl Stanza for OS/compiler pair-specific flags -case "${host_os}-${CC}" in -aix4.2*-*gcc*) LOCAL_LDFLAGS="-Xlinker -bexpall -Xlinker -brtl" ;; -aix4.2*) LOCAL_LDFLAGS="-bexpall -brtl" ;; -bsdi4*-*gcc*) LOCAL_LDFLAGS="-rdynamic" ;; # allow dynamic loading, like Linux -esac - -dnl FreeBSD-3.x can have either a.out or ELF -case "${host_os}" in -freebsd[[3-9]]*) - if test -x /usr/bin/objformat && test "`/usr/bin/objformat`" = "elf" ; then - LOCAL_LDFLAGS=-rdynamic # allow dynamic loading - fi ;; -freebsdelf*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading -dragonfly*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading -esac - -case "$host_cpu" in -*cray*) LOCAL_CFLAGS="-DCRAY" ;; # shell var so config.h can use it -esac - -case "$host_cpu-$host_os" in -ibmrt-*bsd4*) LOCAL_CFLAGS="-ma -U__STDC__" ;; -esac - -case "$host_cpu-$host_vendor-$host_os" in -m88k-motorola-sysv3) LOCAL_CFLAGS=-DWAITPID_BROKEN ;; -mips-pyramid-sysv4) LOCAL_CFLAGS=-Xa ;; -esac - -# -# Shared object configuration section. These values are generated by -# ${srcdir}/support/shobj-conf -# -if test "$ac_cv_func_dlopen" = "yes" && test -f ${srcdir}/support/shobj-conf -then - AC_MSG_CHECKING(shared object configuration for loadable builtins) - eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"` - AC_SUBST(SHOBJ_CC) - AC_SUBST(SHOBJ_CFLAGS) - AC_SUBST(SHOBJ_LD) - AC_SUBST(SHOBJ_LDFLAGS) - AC_SUBST(SHOBJ_XLDFLAGS) - AC_SUBST(SHOBJ_LIBS) - AC_SUBST(SHOBJ_STATUS) - AC_MSG_RESULT($SHOBJ_STATUS) -fi - -# try to create a directory tree if the source is elsewhere -# this should be packaged into a script accessible via ${srcdir}/support -case "$srcdir" in -.) ;; -*) for d in doc tests support lib examples; do # dirs - test -d $d || mkdir $d - done - for ld in readline glob tilde malloc sh termcap; do # libdirs - test -d lib/$ld || mkdir lib/$ld - done - test -d examples/loadables || mkdir examples/loadables # loadable builtins - test -d examples/loadables/perl || mkdir examples/loadables/perl - ;; -esac - -BUILD_DIR=`pwd` -case "$BUILD_DIR" in -*\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; -*) ;; -esac - -if test -z "$localedir"; then - localedir='${datarootdir}/locale' -fi -if test -z "$datarootdir"; then - datarootdir='${prefix}/share' -fi - -AC_SUBST(PROFILE_FLAGS) - -AC_SUBST(incdir) -AC_SUBST(BUILD_DIR) - -# Some versions of autoconf don't substitute these automatically -AC_SUBST(datarootdir) -AC_SUBST(localedir) - -AC_SUBST(YACC) -AC_SUBST(AR) -AC_SUBST(ARFLAGS) - -AC_SUBST(BASHVERS) -AC_SUBST(RELSTATUS) -AC_SUBST(DEBUG) -AC_SUBST(MALLOC_DEBUG) - -AC_SUBST(host_cpu) -AC_SUBST(host_vendor) -AC_SUBST(host_os) - -AC_SUBST(LOCAL_LIBS) -AC_SUBST(LOCAL_CFLAGS) -AC_SUBST(LOCAL_LDFLAGS) -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/perl/Makefile], -[ -# Makefile uses this timestamp file to record whether config.h is up to date. -echo timestamp > stamp-h -]) diff --git a/doc/FAQ b/doc/FAQ index 104d0bc1c..06c6fffd9 100644 --- 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 diff --git a/doc/Makefile.in b/doc/Makefile.in index 12068fb58..8bf775e14 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -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 diff --git a/doc/bash.0 b/doc/bash.0 index 9160b097b..38829fcd0 100644 --- a/doc/bash.0 +++ b/doc/bash.0 @@ -9,7 +9,7 @@ SSYYNNOOPPSSIISS bbaasshh [options] [command_string | file] CCOOPPYYRRIIGGHHTT - Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc. + Bash is Copyright (C) 1989-2021 by the Free Software Foundation, Inc. DDEESSCCRRIIPPTTIIOONN BBaasshh is an sshh-compatible command language interpreter that executes @@ -131,7 +131,7 @@ IINNVVOOCCAATTIIOONN one started with the ----llooggiinn option. An _i_n_t_e_r_a_c_t_i_v_e shell is one started without non-option arguments (un- - less --ss is specified) and without the --cc option whose standard input + less --ss is specified) and without the --cc option, whose standard input and error are both connected to terminals (as determined by _i_s_a_t_t_y(3)), or one started with the --ii option. PPSS11 is set and $$-- includes ii if bbaasshh is interactive, allowing a shell script or a startup file to test @@ -237,59 +237,63 @@ RREESSEERRVVEEDD WWOORRDDSS tthheenn uunnttiill wwhhiillee {{ }} ttiimmee [[[[ ]]]] SSHHEELLLL GGRRAAMMMMAARR + This section describes the syntax of the various forms of shell com- + mands. + SSiimmppllee CCoommmmaannddss - A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- - lowed by bbllaannkk-separated words and redirections, and terminated by a + A _s_i_m_p_l_e _c_o_m_m_a_n_d is a sequence of optional variable assignments fol- + lowed by bbllaannkk-separated words and redirections, and terminated by a _c_o_n_t_r_o_l _o_p_e_r_a_t_o_r. The first word specifies the command to be executed, - and is passed as argument zero. The remaining words are passed as ar- + and is passed as argument zero. The remaining words are passed as ar- guments to the invoked command. - The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if + The return value of a _s_i_m_p_l_e _c_o_m_m_a_n_d is its exit status, or 128+_n if the command is terminated by signal _n. PPiippeelliinneess - A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of + A _p_i_p_e_l_i_n_e is a sequence of one or more commands separated by one of the control operators || or ||&&. The format for a pipeline is: - [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] + [ttiimmee [--pp]] [ ! ] _c_o_m_m_a_n_d_1 [ [|||||&&] _c_o_m_m_a_n_d_2 ... ] - The standard output of _c_o_m_m_a_n_d is connected via a pipe to the standard - input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- - tions specified by the command (see RREEDDIIRREECCTTIIOONN below). If ||&& is used, - _c_o_m_m_a_n_d's standard error, in addition to its standard output, is con- - nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand - for 22>>&&11 ||. This implicit redirection of the standard error to the - standard output is performed after any redirections specified by the - command. + The standard output of _c_o_m_m_a_n_d_1 is connected via a pipe to the standard + input of _c_o_m_m_a_n_d_2. This connection is performed before any redirec- + tions specified by the _c_o_m_m_a_n_d_1(see RREEDDIIRREECCTTIIOONN below). If ||&& is used, + _c_o_m_m_a_n_d_1's standard error, in addition to its standard output, is con- + nected to _c_o_m_m_a_n_d_2's standard input through the pipe; it is shorthand + for 22>>&&11 ||. This implicit redirection of the standard error to the + standard output is performed after any redirections specified by _c_o_m_- + _m_a_n_d_1. The return status of a pipeline is the exit status of the last command, - unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the - pipeline's return status is the value of the last (rightmost) command - to exit with a non-zero status, or zero if all commands exit success- + unless the ppiippeeffaaiill option is enabled. If ppiippeeffaaiill is enabled, the + pipeline's return status is the value of the last (rightmost) command + to exit with a non-zero status, or zero if all commands exit success- fully. If the reserved word !! precedes a pipeline, the exit status of - that pipeline is the logical negation of the exit status as described - above. The shell waits for all commands in the pipeline to terminate + that pipeline is the logical negation of the exit status as described + above. The shell waits for all commands in the pipeline to terminate before returning a value. - If the ttiimmee reserved word precedes a pipeline, the elapsed as well as - user and system time consumed by its execution are reported when the - pipeline terminates. The --pp option changes the output format to that - specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- - ognize ttiimmee as a reserved word if the next token begins with a `-'. - The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies - how the timing information should be displayed; see the description of + If the ttiimmee reserved word precedes a pipeline, the elapsed as well as + user and system time consumed by its execution are reported when the + pipeline terminates. The --pp option changes the output format to that + specified by POSIX. When the shell is in _p_o_s_i_x _m_o_d_e, it does not rec- + ognize ttiimmee as a reserved word if the next token begins with a `-'. + The TTIIMMEEFFOORRMMAATT variable may be set to a format string that specifies + how the timing information should be displayed; see the description of TTIIMMEEFFOORRMMAATT under SShheellll VVaarriiaabblleess below. When the shell is in _p_o_s_i_x _m_o_d_e, ttiimmee may be followed by a newline. In - this case, the shell displays the total user and system time consumed - by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to + this case, the shell displays the total user and system time consumed + by the shell and its children. The TTIIMMEEFFOORRMMAATT variable may be used to specify the format of the time information. - Each command in a pipeline is executed as a separate process (i.e., in - a subshell). See CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of a - subshell environment. If the llaassttppiippee option is enabled using the - sshhoopptt builtin (see the description of sshhoopptt below), the last element of - a pipeline may be run by the shell process. + Each command in a pipeline is executed in a _s_u_b_s_h_e_l_l, which is a sepa- + rate process. See CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENNTT for a description of + subshells and a subshell environment. If the llaassttppiippee option is en- + abled using the sshhoopptt builtin (see the description of sshhoopptt below), the + last element of a pipeline may be run by the shell process when job + control is not active. LLiissttss A _l_i_s_t is a sequence of one or more pipelines separated by one of the @@ -333,11 +337,11 @@ SSHHEELLLL GGRRAAMMMMAARR one or more newlines, and may be followed by a newline in place of a semicolon. - (_l_i_s_t) _l_i_s_t is executed in a subshell environment (see CCOOMMMMAANNDD EEXXEECCUU-- - TTIIOONN EENNVVIIRROONNMMEENNTT below). Variable assignments and builtin com- - mands that affect the shell's environment do not remain in ef- - fect after the command completes. The return status is the exit - status of _l_i_s_t. + (_l_i_s_t) _l_i_s_t is executed in a subshell (see CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONN-- + MMEENNTT below for a description of a subshell environment). Vari- + able assignments and builtin commands that affect the shell's + environment do not remain in effect after the command completes. + The return status is the exit status of _l_i_s_t. { _l_i_s_t; } _l_i_s_t is simply executed in the current shell environment. _l_i_s_t @@ -353,66 +357,71 @@ SSHHEELLLL GGRRAAMMMMAARR The _e_x_p_r_e_s_s_i_o_n is evaluated according to the rules described be- low under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If the value of the expression is non-zero, the return status is 0; otherwise the return status - is 1. This is exactly equivalent to lleett ""_e_x_p_r_e_s_s_i_o_n"". + is 1. The _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it + were within double quotes, but double quote characters in _e_x_- + _p_r_e_s_s_i_o_n are not treated specially and are removed. [[[[ _e_x_p_r_e_s_s_i_o_n ]]]] Return a status of 0 or 1 depending on the evaluation of the conditional expression _e_x_p_r_e_s_s_i_o_n. Expressions are composed of the primaries described below under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. - Word splitting and pathname expansion are not performed on the - words between the [[[[ and ]]]]; tilde expansion, parameter and - variable expansion, arithmetic expansion, command substitution, - process substitution, and quote removal are performed. Condi- - tional operators such as --ff must be unquoted to be recognized as - primaries. - - When used with [[[[, the << and >> operators sort lexicographically + The words between the [[[[ and ]]]] do not undergo word splitting + and pathname expansion. The shell performs tilde expansion, pa- + rameter and variable expansion, arithmetic expansion, command + substitution, process substitution, and quote removal on those + words (the expansions that would occur if the words were en- + closed in double quotes). Conditional operators such as --ff must + be unquoted to be recognized as primaries. + + When used with [[[[, the << and >> operators sort lexicographically using the current locale. - When the ==== and !!== operators are used, the string to the right + When the ==== and !!== operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below under PPaatttteerrnn MMaattcchhiinngg, as if the eexxtt-- gglloobb shell option were enabled. The == operator is equivalent to - ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is - performed without regard to the case of alphabetic characters. - The return value is 0 if the string matches (====) or does not - match (!!==) the pattern, and 1 otherwise. Any part of the pat- - tern may be quoted to force the quoted portion to be matched as + ====. If the nnooccaasseemmaattcchh shell option is enabled, the match is + performed without regard to the case of alphabetic characters. + The return value is 0 if the string matches (====) or does not + match (!!==) the pattern, and 1 otherwise. Any part of the pat- + tern may be quoted to force the quoted portion to be matched as a string. - An additional binary operator, ==~~, is available, with the same - precedence as ==== and !!==. When it is used, the string to the + An additional binary operator, ==~~, is available, with the same + precedence as ==== and !!==. When it is used, the string to the right of the operator is considered a POSIX extended regular ex- - pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and - _r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return - value is 0 if the string matches the pattern, and 1 otherwise. + pression and matched accordingly (using the POSIX _r_e_g_c_o_m_p and + _r_e_g_e_x_e_c interfaces usually described in _r_e_g_e_x(3)). The return + value is 0 if the string matches the pattern, and 1 otherwise. If the regular expression is syntactically incorrect, the condi- tional expression's return value is 2. If the nnooccaasseemmaattcchh shell - option is enabled, the match is performed without regard to the - case of alphabetic characters. 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 ^^ and $$ 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 ^^ and $$ regular expression opera- tors to force it to match the entire string. The array variable - BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- - tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the - portion of the string matching the entire regular expression. - Substrings matched by parenthesized subexpressions within the - regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- - dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion + BBAASSHH__RREEMMAATTCCHH records which parts of the string matched the pat- + tern. The element of BBAASSHH__RREEMMAATTCCHH with index 0 contains the + portion of the string matching the entire regular expression. + Substrings matched by parenthesized subexpressions within the + regular expression are saved in the remaining BBAASSHH__RREEMMAATTCCHH in- + dices. The element of BBAASSHH__RREEMMAATTCCHH with index _n is the portion of the string matching the _nth parenthesized subexpression. - Expressions may be combined using the following operators, + Expressions may be combined using the following operators, listed in decreasing order of precedence: (( _e_x_p_r_e_s_s_i_o_n )) - Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to + Returns the value of _e_x_p_r_e_s_s_i_o_n. This may be used to override the normal precedence of operators. !! _e_x_p_r_e_s_s_i_o_n True if _e_x_p_r_e_s_s_i_o_n is false. @@ -422,26 +431,26 @@ SSHHEELLLL GGRRAAMMMMAARR True if either _e_x_p_r_e_s_s_i_o_n_1 or _e_x_p_r_e_s_s_i_o_n_2 is true. The &&&& and |||| operators do not evaluate _e_x_p_r_e_s_s_i_o_n_2 if the value - of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of + of _e_x_p_r_e_s_s_i_o_n_1 is sufficient to determine the return value of the entire conditional expression. ffoorr _n_a_m_e [ [ iinn [ _w_o_r_d _._._. ] ] ; ] ddoo _l_i_s_t ; ddoonnee The list of words following iinn is expanded, generating a list of items. The variable _n_a_m_e is set to each element of this list in - turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit- - ted, the ffoorr command executes _l_i_s_t once for each positional pa- - rameter that is set (see PPAARRAAMMEETTEERRSS below). The return status - is the exit status of the last command that executes. If the + turn, and _l_i_s_t is executed each time. If the iinn _w_o_r_d is omit- + ted, the ffoorr command executes _l_i_s_t once for each positional pa- + rameter that is set (see PPAARRAAMMEETTEERRSS below). The return status + is the exit status of the last command that executes. If the expansion of the items following iinn results in an empty list, no commands are executed, and the return status is 0. ffoorr (( _e_x_p_r_1 ; _e_x_p_r_2 ; _e_x_p_r_3 )) ; ddoo _l_i_s_t ; ddoonnee First, the arithmetic expression _e_x_p_r_1 is evaluated according to - the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The - arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until - it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero - value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 is - evaluated. If any expression is omitted, it behaves as if it + the rules described below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. The + arithmetic expression _e_x_p_r_2 is then evaluated repeatedly until + it evaluates to zero. Each time _e_x_p_r_2 evaluates to a non-zero + value, _l_i_s_t is executed and the arithmetic expression _e_x_p_r_3 is + evaluated. If any expression is omitted, it behaves as if it evaluates to 1. The return value is the exit status of the last command in _l_i_s_t that is executed, or false if any of the expres- sions is invalid. @@ -449,55 +458,55 @@ SSHHEELLLL GGRRAAMMMMAARR sseelleecctt _n_a_m_e [ iinn _w_o_r_d ] ; ddoo _l_i_s_t ; ddoonnee The list of words following iinn is expanded, generating a list of items. The set of expanded words is printed on the standard er- - ror, each preceded by a number. If the iinn _w_o_r_d is omitted, the - positional parameters are printed (see PPAARRAAMMEETTEERRSS below). The - PPSS33 prompt is then displayed and a line read from the standard + ror, each preceded by a number. If the iinn _w_o_r_d is omitted, the + positional parameters are printed (see PPAARRAAMMEETTEERRSS below). The + PPSS33 prompt is then displayed and a line read from the standard input. If the line consists of a number corresponding to one of the displayed words, then the value of _n_a_m_e is set to that word. - If the line is empty, the words and prompt are displayed again. - If EOF is read, the command completes. Any other value read - causes _n_a_m_e to be set to null. The line read is saved in the + If the line is empty, the words and prompt are displayed again. + If EOF is read, the command completes. Any other value read + causes _n_a_m_e to be set to null. The line read is saved in the variable RREEPPLLYY. The _l_i_s_t is executed after each selection until - a bbrreeaakk command is executed. The exit status of sseelleecctt is the - exit status of the last command executed in _l_i_s_t, or zero if no + a bbrreeaakk command is executed. The exit status of sseelleecctt is the + exit status of the last command executed in _l_i_s_t, or zero if no commands were executed. ccaassee _w_o_r_d iinn [ [(] _p_a_t_t_e_r_n [ || _p_a_t_t_e_r_n ] ... ) _l_i_s_t ;; ] ... eessaacc A ccaassee command first expands _w_o_r_d, and tries to match it against - each _p_a_t_t_e_r_n in turn, using the matching rules described under + each _p_a_t_t_e_r_n in turn, using the matching rules described under PPaatttteerrnn MMaattcchhiinngg below. The _w_o_r_d is expanded using tilde expan- - sion, parameter and variable expansion, arithmetic expansion, - command substitution, process substitution and quote removal. + sion, parameter and variable expansion, arithmetic expansion, + command substitution, process substitution and quote removal. Each _p_a_t_t_e_r_n examined is expanded using tilde expansion, parame- - ter and variable expansion, arithmetic expansion, command sub- - stitution, and process substitution. If the nnooccaasseemmaattcchh shell - option is enabled, the match is performed without regard to the - case of alphabetic characters. When a match is found, the cor- - responding _l_i_s_t is executed. If the ;;;; operator is used, no - subsequent matches are attempted after the first pattern match. - Using ;;&& in place of ;;;; causes execution to continue with the - _l_i_s_t associated with the next set of patterns. Using ;;;;&& in - place of ;;;; causes the shell to test the next pattern list in - the statement, if any, and execute any associated _l_i_s_t on a suc- - cessful match, 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 _l_i_s_t. + ter and variable expansion, arithmetic expansion, command sub- + stitution, process substitution, and quote removal. If the nnoo-- + ccaasseemmaattcchh shell option is enabled, the match is performed with- + out regard to the case of alphabetic characters. When a match + is found, the corresponding _l_i_s_t is executed. If the ;;;; opera- + tor is used, no subsequent matches are attempted after the first + pattern match. Using ;;&& in place of ;;;; causes execution to con- + tinue with the _l_i_s_t associated with the next set of patterns. + Using ;;;;&& in place of ;;;; causes the shell to test the next pat- + tern list in the statement, if any, and execute any associated + _l_i_s_t on a successful match, continuing the case statement execu- + tion as if the pattern list had not matched. The exit status is + zero if no pattern matches. Otherwise, it is the exit status of + the last command executed in _l_i_s_t. iiff _l_i_s_t; tthheenn _l_i_s_t; [ eelliiff _l_i_s_t; tthheenn _l_i_s_t; ] ... [ eellssee _l_i_s_t; ] ffii - The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn - _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in - turn, and if its exit status is zero, the corresponding tthheenn + The iiff _l_i_s_t is executed. If its exit status is zero, the tthheenn + _l_i_s_t is executed. Otherwise, each eelliiff _l_i_s_t is executed in + turn, and if its exit status is zero, the corresponding tthheenn _l_i_s_t is executed and the command completes. Otherwise, the eellssee - _l_i_s_t is executed, if present. The exit status is the exit sta- + _l_i_s_t is executed, if present. The exit status is the exit sta- tus of the last command executed, or zero if no condition tested true. wwhhiillee _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee uunnttiill _l_i_s_t_-_1; ddoo _l_i_s_t_-_2; ddoonnee - The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long + The wwhhiillee command continuously executes the list _l_i_s_t_-_2 as long as the last command in the list _l_i_s_t_-_1 returns an exit status of - zero. The uunnttiill command is identical to the wwhhiillee command, ex- + zero. The uunnttiill command is identical to the wwhhiillee command, ex- cept that the test is negated: _l_i_s_t_-_2 is executed as long as the last command in _l_i_s_t_-_1 returns a non-zero exit status. The exit status of the wwhhiillee and uunnttiill commands is the exit status of the @@ -505,32 +514,49 @@ SSHHEELLLL GGRRAAMMMMAARR CCoopprroocceesssseess A _c_o_p_r_o_c_e_s_s is a shell command preceded by the ccoopprroocc reserved word. A - coprocess is executed asynchronously in a subshell, as if the command - had been terminated with the && control operator, with a two-way pipe + 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: ccoopprroocc [_N_A_M_E] _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s] - This creates a coprocess named _N_A_M_E. If _N_A_M_E is not supplied, the de- - fault name is CCOOPPRROOCC. _N_A_M_E must not be supplied if _c_o_m_m_a_n_d is a _s_i_m_p_l_e - _c_o_m_m_a_n_d (see above); otherwise, it is interpreted as the first word of - the simple command. When the coprocess is executed, the shell creates - an array variable (see AArrrraayyss below) named _N_A_M_E in the context of the - executing shell. The standard output of _c_o_m_m_a_n_d is connected via a - pipe to a file descriptor in the executing shell, and that file de- - scriptor is assigned to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is con- - nected via a pipe to a file descriptor in the executing shell, and that - file descriptor is assigned to _N_A_M_E[1]. This pipe is established be- - fore any redirections specified by the command (see RREEDDIIRREECCTTIIOONN below). - The file descriptors can be utilized as arguments to shell commands and - redirections using standard word expansions. Other than those created - to execute command and process substitutions, the file descriptors are - not available in subshells. The process ID of the shell spawned to ex- - ecute the coprocess is available as the value of the variable _N_A_M_E_PID. - The wwaaiitt builtin command may be used to wait for the coprocess to ter- - minate. + This creates a coprocess named _N_A_M_E. _c_o_m_m_a_n_d may be either a simple + command or a compound command (see above). _N_A_M_E is a shell variable + name. If _N_A_M_E is not supplied, the default name is CCOOPPRROOCC. + + The recommended form to use for a coprocess is + + ccoopprroocc _N_A_M_E { _c_o_m_m_a_n_d [_r_e_d_i_r_e_c_t_i_o_n_s]; } + + This form is recommended because simple commands result in the copro- + cess always being named CCOOPPRROOCC, and it is simpler to use and more com- + plete than the other compound commands. + + If _c_o_m_m_a_n_d is a compound command, _N_A_M_E is optional. The word following + ccoopprroocc determines whether that word is interpreted as a variable name: + it is interpreted as _N_A_M_E if it is not a reserved word that introduces + a compound command. If _c_o_m_m_a_n_d is a simple command, _N_A_M_E is not al- + lowed; this is to avoid confusion between _N_A_M_E and the first word of + the simple command. + + When the coprocess is executed, the shell creates an array variable + (see AArrrraayyss below) named _N_A_M_E in the context of the executing shell. + The standard output of _c_o_m_m_a_n_d is connected via a pipe to a file de- + scriptor in the executing shell, and that file descriptor is assigned + to _N_A_M_E[0]. The standard input of _c_o_m_m_a_n_d is connected via a pipe to a + file descriptor in the executing shell, and that file descriptor is as- + signed to _N_A_M_E[1]. This pipe is established before any redirections + specified by the command (see RREEDDIIRREECCTTIIOONN below). The file descriptors + can be utilized as arguments to shell commands and redirections using + standard word expansions. Other than those created to execute command + and process substitutions, the file descriptors are not available in + subshells. + + The process ID of the shell spawned to execute the coprocess is avail- + able as the value of the variable _N_A_M_E_PID. The wwaaiitt builtin command + may be used to wait for the coprocess to terminate. Since the coprocess is created as an asynchronous command, the ccoopprroocc command always returns success. The return status of a coprocess is @@ -548,20 +574,20 @@ SSHHEELLLL GGRRAAMMMMAARR parentheses are optional. The _b_o_d_y of the function is the com- pound command _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d (see CCoommppoouunndd CCoommmmaannddss above). That command is usually a _l_i_s_t of commands between { and }, but - may be any command listed under CCoommppoouunndd CCoommmmaannddss above, with - one exception: If the ffuunnccttiioonn reserved word is used, but the - parentheses are not supplied, the braces are required. _c_o_m_- - _p_o_u_n_d_-_c_o_m_m_a_n_d is executed whenever _f_n_a_m_e is specified as the - name of a simple command. When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a - valid shell _n_a_m_e and may not be the name of one of the POSIX - _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default mode, a function name can be any - unquoted shell word that does not contain $$. Any redirections - (see RREEDDIIRREECCTTIIOONN below) specified when a function is defined are - performed when the function is executed. The exit status of a - function definition is zero unless a syntax error occurs or a - readonly function with the same name already exists. When exe- - cuted, the exit status of a function is the exit status of the - last command executed in the body. (See FFUUNNCCTTIIOONNSS below.) + may be any command listed under CCoommppoouunndd CCoommmmaannddss above. If the + ffuunnccttiioonn reserved word is used, but the parentheses are not sup- + plied, the braces are recommended. _c_o_m_p_o_u_n_d_-_c_o_m_m_a_n_d is executed + whenever _f_n_a_m_e is specified as the name of a simple command. + When in _p_o_s_i_x _m_o_d_e, _f_n_a_m_e must be a valid shell _n_a_m_e and may not + be the name of one of the POSIX _s_p_e_c_i_a_l _b_u_i_l_t_i_n_s. In default + mode, a function name can be any unquoted shell word that does + not contain $$. Any redirections (see RREEDDIIRREECCTTIIOONN below) speci- + fied when a function is defined are performed when the function + is executed. The exit status of a function definition is zero + unless a syntax error occurs or a readonly function with the + same name already exists. When executed, the exit status of a + function is the exit status of the last command executed in the + body. (See FFUUNNCCTTIIOONNSS below.) CCOOMMMMEENNTTSS In a non-interactive shell, or an interactive shell in which the iinntteerr-- @@ -613,10 +639,11 @@ QQUUOOTTIINNGG The special parameters ** and @@ have special meaning when in double quotes (see PPAARRAAMMEETTEERRSS below). - Words of the form $$'_s_t_r_i_n_g' are treated specially. The word expands to - _s_t_r_i_n_g, with backslash-escaped characters replaced as specified by the - ANSI C standard. Backslash escape sequences, if present, are decoded - as follows: + Character sequences of the form $$'_s_t_r_i_n_g' are treated as a special + variant of single quotes. The sequence expands to _s_t_r_i_n_g, with back- + slash-escaped characters in _s_t_r_i_n_g replaced as specified by the ANSI C + standard. Backslash escape sequences, if present, are decoded as fol- + lows: \\aa alert (bell) \\bb backspace \\ee @@ -630,146 +657,147 @@ QQUUOOTTIINNGG \\'' single quote \\"" double quote \\?? question mark - \\_n_n_n the eight-bit character whose value is the octal value + \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) \\cc_x a control-_x character - The expanded result is single-quoted, as if the dollar sign had not + The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($$"_s_t_r_i_n_g") will cause - the string to be translated according to the current locale. The _g_e_t_- - _t_e_x_t infrastructure performs the message catalog lookup and transla- - tion, using the LLCC__MMEESSSSAAGGEESS and TTEEXXTTDDOOMMAAIINN shell variables. If the - current locale is CC or PPOOSSIIXX, 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 _g_e_t_- + _t_e_x_t infrastructure performs the lookup and translation, using the + LLCC__MMEESSSSAAGGEESS, TTEEXXTTDDOOMMAAIINNDDIIRR, and TTEEXXTTDDOOMMAAIINN shell variables. If the + current locale is CC or PPOOSSIIXX, if there are no translations available, + or if the string is not translated, the dollar sign is ignored. This + is a form of double quoting, so the string remains double-quoted by de- + fault, whether or not it is translated and replaced. If the nnooeexx-- + ppaanndd__ttrraannssllaattiioonn option is enabled using the sshhoopptt builtin, translated + strings are single-quoted instead of double-quoted. See the descrip- + tion of sshhoopptt below under SSHHEELLLLBUILTINCCOOMMMMAANNDDSS. PPAARRAAMMEETTEERRSS - A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- + A _p_a_r_a_m_e_t_e_r is an entity that stores values. It can be a _n_a_m_e, a num- ber, or one of the special characters listed below under SSppeecciiaall PPaarraamm-- - eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a - _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the + eetteerrss. A _v_a_r_i_a_b_l_e is a parameter denoted by a _n_a_m_e. A variable has a + _v_a_l_u_e and zero or more _a_t_t_r_i_b_u_t_e_s. Attributes are assigned using the ddeeccllaarree builtin command (see ddeeccllaarree below in SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS). A parameter is set if it has been assigned a value. The null string is - a valid value. Once a variable is set, it may be unset only by using + a valid value. Once a variable is set, it may be unset only by using the uunnsseett builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A _v_a_r_i_a_b_l_e may be assigned to by a statement of the form _n_a_m_e=[_v_a_l_u_e] - If _v_a_l_u_e is not given, the variable is assigned the null string. All - _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- - mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- + If _v_a_l_u_e is not given, the variable is assigned the null string. All + _v_a_l_u_e_s undergo tilde expansion, parameter and variable expansion, com- + mand substitution, arithmetic expansion, and quote removal (see EEXXPPAANN-- SSIIOONN below). If the variable has its iinntteeggeerr attribute set, then _v_a_l_u_e is evaluated as an arithmetic expression even if the $((...)) expansion - is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting is not - performed, with the exception of ""$$@@"" as explained below under SSppeecciiaall - PPaarraammeetteerrss. Pathname expansion is not performed. Assignment state- - ments may also appear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexx-- - ppoorrtt, rreeaaddoonnllyy, and llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). - When in _p_o_s_i_x _m_o_d_e, these builtins may appear in a command after one or - more instances of the ccoommmmaanndd builtin and retain these assignment - statement properties. - - In the context where an assignment statement is assigning a value to a + is not used (see AArriitthhmmeettiicc EExxppaannssiioonn below). Word splitting and path- + name expansion are not performed. Assignment statements may also ap- + pear as arguments to the aalliiaass, ddeeccllaarree, ttyyppeesseett, eexxppoorrtt, rreeaaddoonnllyy, and + llooccaall builtin commands (_d_e_c_l_a_r_a_t_i_o_n commands). When in _p_o_s_i_x _m_o_d_e, + these builtins may appear in a command after one or more instances of + the ccoommmmaanndd builtin and retain these assignment statement properties. + + In the context where an assignment statement is assigning a value to a shell variable or array index, the += operator can be used to append to - or add to the variable's previous value. This includes arguments to - builtin commands such as ddeeccllaarree that accept assignment statements + or add to the variable's previous value. This includes arguments to + builtin commands such as ddeeccllaarree that accept assignment statements (_d_e_c_l_a_r_a_t_i_o_n commands). When += is applied to a variable for which the _i_n_t_e_g_e_r attribute has been set, _v_a_l_u_e is evaluated as an arithmetic ex- pression and added to the variable's current value, which is also eval- - uated. When += is applied to an array variable using compound assign- - ment (see AArrrraayyss below), the variable's value is not unset (as it is - when using =), and new values are appended to the array beginning at - one greater than the array's maximum index (for indexed arrays) or - added as additional key-value pairs in an associative array. When ap- - plied to a string-valued variable, _v_a_l_u_e is expanded and appended to + uated. When += is applied to an array variable using compound assign- + ment (see AArrrraayyss below), the variable's value is not unset (as it is + when using =), and new values are appended to the array beginning at + one greater than the array's maximum index (for indexed arrays) or + added as additional key-value pairs in an associative array. When ap- + plied to a string-valued variable, _v_a_l_u_e is expanded and appended to the variable's value. A variable can be assigned the _n_a_m_e_r_e_f attribute using the --nn option to - the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree - and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari- - able. This allows variables to be manipulated indirectly. Whenever - the nameref variable is referenced, assigned to, unset, or has its at- - tributes modified (other than using or changing the _n_a_m_e_r_e_f attribute - itself), the operation is actually performed on the variable specified - by the nameref variable's value. A nameref is commonly used within + the ddeeccllaarree or llooccaall builtin commands (see the descriptions of ddeeccllaarree + and llooccaall below) to create a _n_a_m_e_r_e_f, or a reference to another vari- + able. This allows variables to be manipulated indirectly. Whenever + the nameref variable is referenced, assigned to, unset, or has its at- + tributes modified (other than using or changing the _n_a_m_e_r_e_f attribute + itself), the operation is actually performed on the variable specified + by the nameref variable's value. A nameref is commonly used within shell functions to refer to a variable whose name is passed as an argu- - ment to the function. For instance, if a variable name is passed to a + ment to the function. For instance, if a variable name is passed to a shell function as its first argument, running declare -n ref=$1 - inside the function creates a nameref variable rreeff whose value is the + inside the function creates a nameref variable rreeff whose value is the variable name passed as the first argument. References and assignments - to rreeff, and changes to its attributes, are treated as references, as- - signments, and attribute modifications to the variable whose name was - passed as $$11. If the control variable in a ffoorr loop has the nameref - attribute, the list of words can be a list of shell variables, and a - name reference will be established for each word in the list, in turn, + to rreeff, and changes to its attributes, are treated as references, as- + signments, and attribute modifications to the variable whose name was + passed as $$11. If the control variable in a ffoorr loop has the nameref + attribute, the list of words can be a list of shell variables, and a + name reference will be established for each word in the list, in turn, when the loop is executed. Array variables cannot be given the nnaammeerreeff - attribute. However, nameref variables can reference array variables - and subscripted array variables. Namerefs can be unset using the --nn - option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the - name of a nameref variable as an argument, the variable referenced by + attribute. However, nameref variables can reference array variables + and subscripted array variables. Namerefs can be unset using the --nn + option to the uunnsseett builtin. Otherwise, if uunnsseett is executed with the + name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset. PPoossiittiioonnaall PPaarraammeetteerrss - A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, + A _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r is a parameter denoted by one or more digits, other than the single digit 0. Positional parameters are assigned from - the shell's arguments when it is invoked, and may be reassigned using - the sseett builtin command. Positional parameters may not be assigned to - with assignment statements. The positional parameters are temporarily + the shell's arguments when it is invoked, and may be reassigned using + the sseett builtin command. Positional parameters may not be assigned to + with assignment statements. The positional parameters are temporarily replaced when a shell function is executed (see FFUUNNCCTTIIOONNSS below). - When a positional parameter consisting of more than a single digit is + When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces (see EEXXPPAANNSSIIOONN below). SSppeecciiaall PPaarraammeetteerrss - The shell treats several parameters specially. These parameters may + The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed. - ** Expands to the positional parameters, starting from one. When - the expansion is not within double quotes, each positional pa- - rameter expands to a separate word. In contexts where it is + ** Expands to the positional parameters, starting from one. When + the expansion is not within double quotes, each positional pa- + rameter expands to a separate word. In contexts where it is performed, those words are subject to further word splitting and - pathname expansion. When the expansion occurs within double - quotes, it expands to a single word with the value of each pa- - rameter separated by the first character of the IIFFSS special - variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c + pathname expansion. When the expansion occurs within double + quotes, it expands to a single word with the value of each pa- + rameter separated by the first character of the IIFFSS special + variable. That is, "$$**" is equivalent to "$$11_c$$22_c......", where _c is the first character of the value of the IIFFSS variable. If IIFFSS - is unset, the parameters are separated by spaces. If IIFFSS is + is unset, the parameters are separated by spaces. If IIFFSS is null, the parameters are joined without intervening separators. - @@ Expands to the positional parameters, starting from one. In - contexts where word splitting is performed, this expands each - positional parameter to a separate word; if not within double - quotes, these words are subject to word splitting. In contexts - where word splitting is not performed, this expands to a single - word with each positional parameter separated by a space. When - the expansion occurs within double quotes, each parameter ex- - pands to a separate word. That is, "$$@@" is equivalent to "$$11" - "$$22" ... If the double-quoted expansion occurs within a word, - the expansion of the first parameter is joined with the begin- - ning part of the original word, and the expansion of the last - parameter is joined with the last part of the original word. - When there are no positional parameters, "$$@@" and $$@@ expand to + @@ Expands to the positional parameters, starting from one. In + contexts where word splitting is performed, this expands each + positional parameter to a separate word; if not within double + quotes, these words are subject to word splitting. In contexts + where word splitting is not performed, this expands to a single + word with each positional parameter separated by a space. When + the expansion occurs within double quotes, each parameter ex- + pands to a separate word. That is, "$$@@" is equivalent to "$$11" + "$$22" ... If the double-quoted expansion occurs within a word, + the expansion of the first parameter is joined with the begin- + ning part of the original word, and the expansion of the last + parameter is joined with the last part of the original word. + When there are no positional parameters, "$$@@" and $$@@ expand to nothing (i.e., they are removed). ## Expands to the number of positional parameters in decimal. - ?? Expands to the exit status of the most recently executed fore- + ?? Expands to the exit status of the most recently executed fore- ground pipeline. - -- Expands to the current option flags as specified upon invoca- - tion, by the sseett builtin command, or those set by the shell it- + -- Expands to the current option flags as specified upon invoca- + tion, by the sseett builtin command, or those set by the shell it- self (such as the --ii option). - $$ Expands to the process ID of the shell. In a () subshell, it - expands to the process ID of the current shell, not the sub- - shell. + $$ Expands to the process ID of the shell. In a subshell, it ex- + pands to the process ID of the current shell, not the subshell. !! Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bbgg builtin (see JJOOBB CCOONNTTRROOLL below). @@ -1032,6 +1060,10 @@ PPAARRAAMMEETTEERRSS tializes (seeds) the sequence of random numbers. If RRAANNDDOOMM is unset, it loses its special properties, even if it is subse- quently reset. + RREEAADDLLIINNEE__AARRGGUUMMEENNTT + Any numeric argument given to a Readline command that was de- + fined using "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) when it + was invoked. RREEAADDLLIINNEE__LLIINNEE The contents of the rreeaaddlliinnee line buffer, for use with "bind -x" (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). @@ -1046,12 +1078,12 @@ PPAARRAAMMEETTEERRSS RREEPPLLYY Set to the line of input read by the rreeaadd builtin command when no arguments are supplied. SSEECCOONNDDSS - Each time this parameter is referenced, the number of seconds - since shell invocation is returned. If a value is assigned to + Each time this parameter is referenced, it expands to the number + of seconds since shell invocation. If a value is assigned to SSEECCOONNDDSS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned. The number of seconds at shell invocation and the current time - is always determined by querying the system clock. If SSEECCOONNDDSS + are always determined by querying the system clock. If SSEECCOONNDDSS is unset, it loses its special properties, even if it is subse- quently reset. SSHHEELLLLOOPPTTSS @@ -1500,85 +1532,88 @@ PPAARRAAMMEETTEERRSS stroys the array element at index _s_u_b_s_c_r_i_p_t, for both indexed and asso- ciative arrays. Negative subscripts to indexed arrays are interpreted as described above. Unsetting the last element of an array variable - does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, or - uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or @@, removes the entire - array. - - When using a variable name with a subscript as an argument to a com- - mand, such as with uunnsseett, without using the word expansion syntax de- + does not unset the variable. uunnsseett _n_a_m_e, where _n_a_m_e is an array, re- + moves the entire array. uunnsseett _n_a_m_e[_s_u_b_s_c_r_i_p_t], where _s_u_b_s_c_r_i_p_t is ** or + @@, behaves differently depending on whether _n_a_m_e is an indexed or asso- + ciative array. If _n_a_m_e is an associative array, this unsets the ele- + ment with subscript ** or @@. If _n_a_m_e is an indexed array, unset removes + all of the elements but does not remove the array itself. + + When using a variable name with a subscript as an argument to a com- + mand, such as with uunnsseett, without using the word expansion syntax de- scribed above, the argument is subject to pathname expansion. If path- name expansion is not desired, the argument should be quoted. - The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to - specify an indexed array and a --AA option to specify an associative ar- - ray. If both options are supplied, --AA takes precedence. The rreeaadd - builtin accepts a --aa option to assign a list of words read from the + The ddeeccllaarree, llooccaall, and rreeaaddoonnllyy builtins each accept a --aa option to + specify an indexed array and a --AA option to specify an associative ar- + ray. If both options are supplied, --AA takes precedence. The rreeaadd + builtin accepts a --aa option to assign a list of words read from the standard input to an array. The sseett and ddeeccllaarree builtins display array values in a way that allows them to be reused as assignments. EEXXPPAANNSSIIOONN Expansion is performed on the command line after it has been split into - words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, - _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- + words. There are seven kinds of expansion performed: _b_r_a_c_e _e_x_p_a_n_s_i_o_n, + _t_i_l_d_e _e_x_p_a_n_s_i_o_n, _p_a_r_a_m_e_t_e_r _a_n_d _v_a_r_i_a_b_l_e _e_x_p_a_n_s_i_o_n, _c_o_m_m_a_n_d _s_u_b_s_t_i_t_u_- _t_i_o_n, _a_r_i_t_h_m_e_t_i_c _e_x_p_a_n_s_i_o_n, _w_o_r_d _s_p_l_i_t_t_i_n_g, and _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n. The order of expansions is: brace expansion; tilde expansion, parameter - and variable expansion, arithmetic expansion, and command substitution - (done in a left-to-right fashion); word splitting; and pathname expan- + and variable expansion, arithmetic expansion, and command substitution + (done in a left-to-right fashion); word splitting; and pathname expan- sion. On systems that can support it, there is an additional expansion avail- - able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as - tilde, parameter, variable, and arithmetic expansion and command sub- + able: _p_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n. This is performed at the same time as + tilde, parameter, variable, and arithmetic expansion and command sub- stitution. - After these expansions are performed, quote characters present in the - original word are removed unless they have been quoted themselves + After these expansions are performed, quote characters present in the + original word are removed unless they have been quoted themselves (_q_u_o_t_e _r_e_m_o_v_a_l). - Only brace expansion, word splitting, and pathname expansion can in- - crease the number of words of the expansion; other expansions expand a - single word to a single word. The only exceptions to this are the ex- + Only brace expansion, word splitting, and pathname expansion can in- + crease the number of words of the expansion; other expansions expand a + single word to a single word. The only exceptions to this are the ex- pansions of "$$@@" and "$${{_n_a_m_e[[@@]]}}", and, in most cases, $$** and $${{_n_a_m_e[[**]]}} as explained above (see PPAARRAAMMEETTEERRSS). BBrraaccee EExxppaannssiioonn _B_r_a_c_e _e_x_p_a_n_s_i_o_n is a mechanism by which arbitrary strings may be gener- - ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file- + ated. This mechanism is similar to _p_a_t_h_n_a_m_e _e_x_p_a_n_s_i_o_n, but the file- names generated need not exist. Patterns to be brace expanded take the form of an optional _p_r_e_a_m_b_l_e, followed by either a series of comma-sep- - arated strings or a sequence expression between a pair of braces, fol- - lowed by an optional _p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each + arated strings or a sequence expression between a pair of braces, fol- + lowed by an optional _p_o_s_t_s_c_r_i_p_t. The preamble is prefixed to each string contained within the braces, and the postscript is then appended to each resulting string, expanding left to right. - Brace expansions may be nested. The results of each expanded string - are not sorted; left to right order is preserved. For example, + Brace expansions may be nested. The results of each expanded string + are not sorted; left to right order is preserved. For example, a{{d,c,b}}e expands into `ade ace abe'. - A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are - either integers or single characters, and _i_n_c_r, an optional increment, - is an integer. When integers are supplied, the expression expands to - each number between _x and _y, inclusive. Supplied integers may be pre- - fixed with _0 to force each term to have the same width. When either _x - or _y begins with a zero, the shell attempts to force all generated - terms to contain the same number of digits, zero-padding where neces- - sary. When characters are supplied, the expression expands to each - character lexicographically between _x and _y, inclusive, using the de- - fault 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. + A sequence expression takes the form {{_x...._y[[...._i_n_c_r]]}}, where _x and _y are + either integers or single letters, and _i_n_c_r, an optional increment, is + an integer. When integers are supplied, the expression expands to each + number between _x and _y, inclusive. Supplied integers may be prefixed + with _0 to force each term to have the same width. When either _x or _y + begins with a zero, the shell attempts to force all generated terms to + contain the same number of digits, zero-padding where necessary. When + letters are supplied, the expression expands to each character lexico- + graphically between _x and _y, inclusive, using the default C locale. + Note that both _x and _y must be of the same type (integer or letter). + When the increment is supplied, it is used as the difference between + each term. The default increment is 1 or -1 as appropriate. Brace expansion is performed before any other expansions, and any char- - acters special to other expansions are preserved in the result. It is - strictly textual. BBaasshh does not apply any syntactic interpretation to + acters special to other expansions are preserved in the result. It is + strictly textual. BBaasshh does not apply any syntactic interpretation to the context of the expansion or the text between the braces. - A correctly-formed brace expansion must contain unquoted opening and + A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence ex- pression. Any incorrectly formed brace expansion is left unchanged. A - {{ or ,, may be quoted with a backslash to prevent its being considered - part of a brace expression. To avoid conflicts with parameter expan- + {{ or ,, may be quoted with a backslash to prevent its being considered + part of a brace expression. To avoid conflicts with parameter expan- sion, the string $${{ is not considered eligible for brace expansion, and inhibits brace expansion until the closing }}. @@ -1589,36 +1624,36 @@ EEXXPPAANNSSIIOONN or chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} - Brace expansion introduces a slight incompatibility with historical - versions of sshh. sshh does not treat opening or closing braces specially - when they appear as part of a word, and preserves them in the output. - BBaasshh removes braces from words as a consequence of brace expansion. - For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in - the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by - bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the + Brace expansion introduces a slight incompatibility with historical + versions of sshh. sshh does not treat opening or closing braces specially + when they appear as part of a word, and preserves them in the output. + BBaasshh removes braces from words as a consequence of brace expansion. + For example, a word entered to sshh as _f_i_l_e_{_1_,_2_} appears identically in + the output. The same word is output as _f_i_l_e_1 _f_i_l_e_2 after expansion by + bbaasshh. If strict compatibility with sshh is desired, start bbaasshh with the ++BB option or disable brace expansion with the ++BB option to the sseett com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). TTiillddee EExxppaannssiioonn - If a word begins with an unquoted tilde character (`~~'), all of the - characters preceding the first unquoted slash (or all characters, if - there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of - the characters in the tilde-prefix are quoted, the characters in the - tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e. - If this login name is the null string, the tilde is replaced with the - value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- - tory of the user executing the shell is substituted instead. Other- - wise, the tilde-prefix is replaced with the home directory associated + If a word begins with an unquoted tilde character (`~~'), all of the + characters preceding the first unquoted slash (or all characters, if + there is no unquoted slash) are considered a _t_i_l_d_e_-_p_r_e_f_i_x. If none of + the characters in the tilde-prefix are quoted, the characters in the + tilde-prefix following the tilde are treated as a possible _l_o_g_i_n _n_a_m_e. + If this login name is the null string, the tilde is replaced with the + value of the shell parameter HHOOMMEE. If HHOOMMEE is unset, the home direc- + tory of the user executing the shell is substituted instead. Other- + wise, the tilde-prefix is replaced with the home directory associated with the specified login name. - If the tilde-prefix is a `~+', the value of the shell variable PPWWDD re- - places the tilde-prefix. If the tilde-prefix is a `~-', the value of - the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- - acters following the tilde in the tilde-prefix consist of a number _N, - optionally prefixed by a `+' or a `-', the tilde-prefix is replaced + If the tilde-prefix is a `~+', the value of the shell variable PPWWDD re- + places the tilde-prefix. If the tilde-prefix is a `~-', the value of + the shell variable OOLLDDPPWWDD, if it is set, is substituted. If the char- + acters following the tilde in the tilde-prefix consist of a number _N, + optionally prefixed by a `+' or a `-', the tilde-prefix is replaced with the corresponding element from the directory stack, as it would be displayed by the ddiirrss builtin invoked with the tilde-prefix as an argu- - ment. If the characters following the tilde in the tilde-prefix con- + ment. If the characters following the tilde in the tilde-prefix con- sist of a number without a leading `+' or `-', `+' is assumed. If the login name is invalid, or the tilde expansion fails, the word is @@ -1627,139 +1662,139 @@ EEXXPPAANNSSIIOONN Each variable assignment is checked for unquoted tilde-prefixes immedi- ately following a :: or the first ==. In these cases, tilde expansion is also performed. Consequently, one may use filenames with tildes in as- - signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- + signments to PPAATTHH, MMAAIILLPPAATTHH, and CCDDPPAATTHH, and the shell assigns the ex- panded value. - Bash also performs tilde expansion on words satisfying the conditions + Bash also performs tilde expansion on words satisfying the conditions of variable assignments (as described above under PPAARRAAMMEETTEERRSS) when they - appear as arguments to simple commands. Bash does not do this, except + appear as arguments to simple commands. Bash does not do this, except for the _d_e_c_l_a_r_a_t_i_o_n commands listed above, when in _p_o_s_i_x _m_o_d_e. PPaarraammeetteerr EExxppaannssiioonn The `$$' character introduces parameter expansion, command substitution, - or arithmetic expansion. The parameter name or symbol to be expanded - may be enclosed in braces, which are optional but serve to protect the - variable to be expanded from characters immediately following it which + or arithmetic expansion. The parameter name or symbol to be expanded + may be enclosed in braces, which are optional but serve to protect the + variable to be expanded from characters immediately following it which could be interpreted as part of the name. - When braces are used, the matching ending brace is the first `}}' not + When braces are used, the matching ending brace is the first `}}' not escaped by a backslash or within a quoted string, and not within an em- - bedded arithmetic expansion, command substitution, or parameter expan- + bedded arithmetic expansion, command substitution, or parameter expan- sion. ${_p_a_r_a_m_e_t_e_r} - The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required - when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one + The value of _p_a_r_a_m_e_t_e_r is substituted. The braces are required + when _p_a_r_a_m_e_t_e_r is a positional parameter with more than one digit, or when _p_a_r_a_m_e_t_e_r is followed by a character which is not to be interpreted as part of its name. The _p_a_r_a_m_e_t_e_r is a shell - parameter as described above PPAARRAAMMEETTEERRSS) or an array reference + parameter as described above PPAARRAAMMEETTEERRSS) or an array reference (AArrrraayyss). - If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and + If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and _p_a_r_a_m_e_t_e_r is not a _n_a_m_e_r_e_f, it introduces a level of indirection. BBaasshh uses the value formed by expanding the rest of _p_a_r_a_m_e_t_e_r as the new _p_a_- - _r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of - the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r. + _r_a_m_e_t_e_r; this is then expanded and that value is used in the rest of + the expansion, rather than the expansion of the original _p_a_r_a_m_e_t_e_r. This is known as _i_n_d_i_r_e_c_t _e_x_p_a_n_s_i_o_n. The value is subject to tilde ex- - pansion, parameter expansion, command substitution, and arithmetic ex- - pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the - parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete - indirect expansion. The exceptions to this are the expansions of - ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point - must immediately follow the left brace in order to introduce indirec- + pansion, parameter expansion, command substitution, and arithmetic ex- + pansion. If _p_a_r_a_m_e_t_e_r is a nameref, this expands to the name of the + parameter referenced by _p_a_r_a_m_e_t_e_r instead of performing the complete + indirect expansion. The exceptions to this are the expansions of + ${!!_p_r_e_f_i_x**} and ${!!_n_a_m_e[_@]} described below. The exclamation point + must immediately follow the left brace in order to introduce indirec- tion. In each of the cases below, _w_o_r_d is subject to tilde expansion, parame- ter expansion, command substitution, and arithmetic expansion. When not performing substring expansion, using the forms documented be- - low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. - Omitting the colon results in a test only for a parameter that is un- + low (e.g., ::--), bbaasshh tests for a parameter that is unset or null. + Omitting the colon results in a test only for a parameter that is un- set. ${_p_a_r_a_m_e_t_e_r::--_w_o_r_d} - UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- - sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r + UUssee DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the expan- + sion of _w_o_r_d is substituted. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::==_w_o_r_d} - AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- - pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- - _t_e_r is then substituted. Positional parameters and special pa- + AAssssiiggnn DDeeffaauulltt VVaalluueess. If _p_a_r_a_m_e_t_e_r is unset or null, the ex- + pansion of _w_o_r_d is assigned to _p_a_r_a_m_e_t_e_r. The value of _p_a_r_a_m_e_- + _t_e_r is then substituted. Positional parameters and special pa- rameters may not be assigned to in this way. ${_p_a_r_a_m_e_t_e_r::??_w_o_r_d} - DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, - the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is - not present) is written to the standard error and the shell, if + DDiissppllaayy EErrrroorr iiff NNuullll oorr UUnnsseett. If _p_a_r_a_m_e_t_e_r is null or unset, + the expansion of _w_o_r_d (or a message to that effect if _w_o_r_d is + not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of _p_a_r_a_m_e_t_e_r is substituted. ${_p_a_r_a_m_e_t_e_r::++_w_o_r_d} - UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is + UUssee AAlltteerrnnaattee VVaalluuee. If _p_a_r_a_m_e_t_e_r is null or unset, nothing is substituted, otherwise the expansion of _w_o_r_d is substituted. ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t} ${_p_a_r_a_m_e_t_e_r::_o_f_f_s_e_t::_l_e_n_g_t_h} - SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the - value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_- + SSuubbssttrriinngg EExxppaannssiioonn. Expands to up to _l_e_n_g_t_h characters of the + value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_- _s_e_t. If _p_a_r_a_m_e_t_e_r is @@, an indexed array subscripted by @@ or **, - or an associative array name, the results differ as described - below. If _l_e_n_g_t_h is omitted, expands to the substring of the + or an associative array name, the results differ as described + below. If _l_e_n_g_t_h is omitted, expands to the substring of the value of _p_a_r_a_m_e_t_e_r starting at the character specified by _o_f_f_s_e_t - and extending to the end of the value. _l_e_n_g_t_h and _o_f_f_s_e_t are + and extending to the end of the value. _l_e_n_g_t_h and _o_f_f_s_e_t are arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN below). - If _o_f_f_s_e_t evaluates to a number less than zero, the value is + If _o_f_f_s_e_t evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of _p_a_- - _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is + _r_a_m_e_t_e_r. If _l_e_n_g_t_h evaluates to a number less than zero, it is interpreted as an offset in characters from the end of the value - of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan- - sion is the characters between _o_f_f_s_e_t and that result. Note - that a negative offset must be separated from the colon by at + of _p_a_r_a_m_e_t_e_r rather than a number of characters, and the expan- + sion is the characters between _o_f_f_s_e_t and that result. Note + that a negative offset must be separated from the colon by at least one space to avoid being confused with the ::-- expansion. - If _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters + If _p_a_r_a_m_e_t_e_r is @@, the result is _l_e_n_g_t_h positional parameters beginning at _o_f_f_s_e_t. A negative _o_f_f_s_e_t is taken relative to one - greater than the greatest positional parameter, so an offset of - -1 evaluates to the last positional parameter. It is an expan- + greater than the greatest positional parameter, so an offset of + -1 evaluates to the last positional parameter. It is an expan- sion error if _l_e_n_g_t_h evaluates to a number less than zero. If _p_a_r_a_m_e_t_e_r is an indexed array name subscripted by @ or *, the - result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_- - _r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one + result is the _l_e_n_g_t_h members of the array beginning with ${_p_a_- + _r_a_m_e_t_e_r[_o_f_f_s_e_t]}. A negative _o_f_f_s_e_t is taken relative to one greater than the maximum index of the specified array. It is an expansion error if _l_e_n_g_t_h evaluates to a number less than zero. Substring expansion applied to an associative array produces un- defined results. - Substring indexing is zero-based unless the positional parame- - ters are used, in which case the indexing starts at 1 by de- - fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, + Substring indexing is zero-based unless the positional parame- + ters are used, in which case the indexing starts at 1 by de- + fault. If _o_f_f_s_e_t is 0, and the positional parameters are used, $$00 is prefixed to the list. ${!!_p_r_e_f_i_x**} ${!!_p_r_e_f_i_x@@} - NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose + NNaammeess mmaattcchhiinngg pprreeffiixx. Expands to the names of variables whose names begin with _p_r_e_f_i_x, separated by the first character of the - IIFFSS special variable. When _@ is used and the expansion appears - within double quotes, each variable name expands to a separate + IIFFSS special variable. When _@ is used and the expansion appears + within double quotes, each variable name expands to a separate word. ${!!_n_a_m_e[_@]} ${!!_n_a_m_e[_*]} - LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to - the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is - not an array, expands to 0 if _n_a_m_e is set and null otherwise. - When _@ is used and the expansion appears within double quotes, + LLiisstt ooff aarrrraayy kkeeyyss. If _n_a_m_e is an array variable, expands to + the list of array indices (keys) assigned in _n_a_m_e. If _n_a_m_e is + not an array, expands to 0 if _n_a_m_e is set and null otherwise. + When _@ is used and the expansion appears within double quotes, each key expands to a separate word. ${##_p_a_r_a_m_e_t_e_r} - PPaarraammeetteerr lleennggtthh. The length in characters of the value of _p_a_- - _r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value sub- - stituted is the number of positional parameters. If _p_a_r_a_m_e_t_e_r + PPaarraammeetteerr lleennggtthh. The length in characters of the value of _p_a_- + _r_a_m_e_t_e_r is substituted. If _p_a_r_a_m_e_t_e_r is ** or @@, the value sub- + stituted is the number of positional parameters. If _p_a_r_a_m_e_t_e_r is an array name subscripted by ** or @@, the value substituted is the number of elements in the array. If _p_a_r_a_m_e_t_e_r is an indexed - array name subscripted by a negative number, that number is in- - terpreted as relative to one greater than the maximum index of - _p_a_r_a_m_e_t_e_r, so negative indices count back from the end of the + array name subscripted by a negative number, that number is in- + terpreted as relative to one greater than the maximum index of + _p_a_r_a_m_e_t_e_r, so negative indices count back from the end of the array, and an index of -1 references the last element. ${_p_a_r_a_m_e_t_e_r##_w_o_r_d} @@ -1767,15 +1802,15 @@ EEXXPPAANNSSIIOONN RReemmoovvee mmaattcchhiinngg pprreeffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt-- - tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of - the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the - expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern - (the ``##'' case) or the longest matching pattern (the ``####'' - case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal op- + tteerrnn MMaattcchhiinngg below. If the pattern matches the beginning of + the value of _p_a_r_a_m_e_t_e_r, then the result of the expansion is the + expanded value of _p_a_r_a_m_e_t_e_r with the shortest matching pattern + (the ``##'' case) or the longest matching pattern (the ``####'' + case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the pattern removal op- eration is applied to each positional parameter in turn, and the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array vari- - able subscripted with @@ or **, the pattern removal operation is - applied to each member of the array in turn, and the expansion + able subscripted with @@ or **, the pattern removal operation is + applied to each member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r%%_w_o_r_d} @@ -1783,100 +1818,122 @@ EEXXPPAANNSSIIOONN RReemmoovvee mmaattcchhiinngg ssuuffffiixx ppaatttteerrnn. The _w_o_r_d is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of _p_a_r_a_m_e_t_e_r using the rules described under PPaatt-- - tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion - of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex- - pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest - matching pattern (the ``%%'' case) or the longest matching pat- - tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the - pattern removal operation is applied to each positional parame- + tteerrnn MMaattcchhiinngg below. If the pattern matches a trailing portion + of the expanded value of _p_a_r_a_m_e_t_e_r, then the result of the ex- + pansion is the expanded value of _p_a_r_a_m_e_t_e_r with the shortest + matching pattern (the ``%%'' case) or the longest matching pat- + tern (the ``%%%%'' case) deleted. If _p_a_r_a_m_e_t_e_r is @@ or **, the + pattern removal operation is applied to each positional parame- ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- - _e_t_e_r is an array variable subscripted with @@ or **, the pattern - removal operation is applied to each member of the array in + _e_t_e_r is an array variable subscripted with @@ or **, the pattern + removal operation is applied to each member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r//_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r////_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r//##_p_a_t_t_e_r_n//_s_t_r_i_n_g} + ${_p_a_r_a_m_e_t_e_r//%%_p_a_t_t_e_r_n//_s_t_r_i_n_g} PPaatttteerrnn ssuubbssttiittuuttiioonn. The _p_a_t_t_e_r_n is expanded to produce a pat- - tern just as in pathname expansion, _P_a_r_a_m_e_t_e_r is expanded and - the longest match of _p_a_t_t_e_r_n against its value is replaced with - _s_t_r_i_n_g. The match is performed using the rules described under - PPaatttteerrnn MMaattcchhiinngg below. If _p_a_t_t_e_r_n begins with //, all matches - of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. Normally only the first - match is replaced. If _p_a_t_t_e_r_n begins with ##, it must match at - the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n - begins with %%, it must match at the end of the expanded value of - _p_a_r_a_m_e_t_e_r. If _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted - and the // following _p_a_t_t_e_r_n may be omitted. If the nnooccaasseemmaattcchh - shell option is enabled, the match is performed without regard - to the case of alphabetic characters. If _p_a_r_a_m_e_t_e_r is @@ or **, - the substitution operation is applied to each positional parame- - ter in turn, and the expansion is the resultant list. If _p_a_r_a_m_- - _e_t_e_r is an array variable subscripted with @@ or **, the substitu- - tion operation is applied to each member of the array in turn, - and the expansion is the resultant list. + tern just as in pathname expansion. _P_a_r_a_m_e_t_e_r is expanded and + the longest match of _p_a_t_t_e_r_n against its value is replaced with + _s_t_r_i_n_g. _s_t_r_i_n_g undergoes tilde expansion, parameter and vari- + able expansion, arithmetic expansion, command and process sub- + stitution, and quote removal. The match is performed using the + rules described under PPaatttteerrnn MMaattcchhiinngg below. In the first form + above, only the first match is replaced. If there are two + slashes separating _p_a_r_a_m_e_t_e_r and _p_a_t_t_e_r_n (the second form + above), all matches of _p_a_t_t_e_r_n are replaced with _s_t_r_i_n_g. If + _p_a_t_t_e_r_n is preceded by ## (the third form above), it must match + at the beginning of the expanded value of _p_a_r_a_m_e_t_e_r. If _p_a_t_t_e_r_n + is preceded by %% (the fourth form above), it must match at the + end of the expanded value of _p_a_r_a_m_e_t_e_r. If the expansion of + _s_t_r_i_n_g is null, matches of _p_a_t_t_e_r_n are deleted. If _s_t_r_i_n_g is + null, matches of _p_a_t_t_e_r_n are deleted and the // following _p_a_t_t_e_r_n + may be omitted. If the ppaattssuubb__rreeppllaacceemmeenntt shell option is en- + abled using sshhoopptt, any unquoted instances of && in _s_t_r_i_n_g are re- + placed with the matching portion of _p_a_t_t_e_r_n. Backslash is used + to quote && in _s_t_r_i_n_g; the backslash is removed in order to per- + mit a literal && in the replacement string. Users should take + care if _s_t_r_i_n_g is double-quoted to avoid unwanted interactions + between the backslash and double-quoting. Pattern substitution + performs the check for && after expanding _s_t_r_i_n_g; shell program- + mers should quote backslashes intended to escape the && and in- + hibit replacement so they survive any quote removal performed by + the expansion of _s_t_r_i_n_g. If the nnooccaasseemmaattcchh shell option is en- + abled, the match is performed without regard to the case of al- + phabetic characters. If _p_a_r_a_m_e_t_e_r is @@ or **, the substitution + operation is applied to each positional parameter in turn, and + the expansion is the resultant list. If _p_a_r_a_m_e_t_e_r is an array + variable subscripted with @@ or **, the substitution operation is + applied to each member of the array in turn, and the expansion + is the resultant list. ${_p_a_r_a_m_e_t_e_r^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r^^^^_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,_p_a_t_t_e_r_n} ${_p_a_r_a_m_e_t_e_r,,,,_p_a_t_t_e_r_n} - CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- - betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- + CCaassee mmooddiiffiiccaattiioonn. This expansion modifies the case of alpha- + betic characters in _p_a_r_a_m_e_t_e_r. The _p_a_t_t_e_r_n is expanded to pro- duce a pattern just as in pathname expansion. Each character in - the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and, - if it matches the pattern, its case is converted. The pattern - should not attempt to match more than one character. The ^^ op- + the expanded value of _p_a_r_a_m_e_t_e_r is tested against _p_a_t_t_e_r_n, and, + if it matches the pattern, its case is converted. The pattern + should not attempt to match more than one character. The ^^ op- erator converts lowercase letters matching _p_a_t_t_e_r_n to uppercase; the ,, operator converts matching uppercase letters to lowercase. - The ^^^^ and ,,,, expansions convert each matched character in the - expanded value; the ^^ and ,, expansions match and convert only - the first character in the expanded value. If _p_a_t_t_e_r_n is omit- - ted, it is treated like a ??, which matches every character. If - _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is applied - to each positional parameter in turn, and the expansion is the - resultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted - with @@ or **, the case modification operation is applied to each - member of the array in turn, and the expansion is the resultant + The ^^^^ and ,,,, expansions convert each matched character in the + expanded value; the ^^ and ,, expansions match and convert only + the first character in the expanded value. If _p_a_t_t_e_r_n is omit- + ted, it is treated like a ??, which matches every character. If + _p_a_r_a_m_e_t_e_r is @@ or **, the case modification operation is applied + to each positional parameter in turn, and the expansion is the + resultant list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted + with @@ or **, the case modification operation is applied to each + member of the array in turn, and the expansion is the resultant list. ${_p_a_r_a_m_e_t_e_r@@_o_p_e_r_a_t_o_r} PPaarraammeetteerr ttrraannssffoorrmmaattiioonn. The expansion is either a transforma- - tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r - itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a + tion of the value of _p_a_r_a_m_e_t_e_r or information about _p_a_r_a_m_e_t_e_r + itself, depending on the value of _o_p_e_r_a_t_o_r. Each _o_p_e_r_a_t_o_r is a single letter: - UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with lowercase alphabetic characters converted to upper- + UU The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with lowercase alphabetic characters converted to upper- case. - uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + uu The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r with the first character converted to uppercase, if it is alphabetic. - LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with uppercase alphabetic characters converted to lower- + LL The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with uppercase alphabetic characters converted to lower- case. - QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + QQ The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r quoted in a format that can be reused as input. - EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r - with backslash escape sequences expanded as with the + EE The expansion is a string that is the value of _p_a_r_a_m_e_t_e_r + with backslash escape sequences expanded as with the $$''......'' quoting mechanism. PP The expansion is a string that is the result of expanding the value of _p_a_r_a_m_e_t_e_r as if it were a prompt string (see PPRROOMMPPTTIINNGG below). - AA The expansion is a string in the form of an assignment - statement or ddeeccllaarree command that, if evaluated, will + AA The expansion is a string in the form of an assignment + statement or ddeeccllaarree command that, if evaluated, will recreate _p_a_r_a_m_e_t_e_r with its attributes and value. KK Produces a possibly-quoted version of the value of _p_a_r_a_m_- _e_t_e_r, except that it prints the values of indexed and as- - sociative arrays as a sequence of quoted key-value pairs + sociative arrays as a sequence of quoted key-value pairs (see AArrrraayyss above). - aa The expansion is a string consisting of flag values rep- + aa The expansion is a string consisting of flag values rep- resenting _p_a_r_a_m_e_t_e_r's attributes. + kk Like the K transformation, but expands the keys and val- + ues of indexed and associative arrays to separate words + after word splitting. - If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi- - tional parameter in turn, and the expansion is the resultant - list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or + If _p_a_r_a_m_e_t_e_r is @@ or **, the operation is applied to each posi- + tional parameter in turn, and the expansion is the resultant + list. If _p_a_r_a_m_e_t_e_r is an array variable subscripted with @@ or **, the operation is applied to each member of the array in turn, and the expansion is the resultant list. - The result of the expansion is subject to word splitting and + The result of the expansion is subject to word splitting and pathname expansion as described below. CCoommmmaanndd SSuubbssttiittuuttiioonn @@ -1890,108 +1947,111 @@ EEXXPPAANNSSIIOONN BBaasshh performs the expansion by executing _c_o_m_m_a_n_d in a subshell environ- ment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are - not deleted, but they may be removed during word splitting. The com- - mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but + not deleted, but they may be removed during word splitting. The com- + mand substitution $$((ccaatt _f_i_l_e)) can be replaced by the equivalent but faster $$((<< _f_i_l_e)). - When the old-style backquote form of substitution is used, backslash - retains its literal meaning except when followed by $$, ``, or \\. The + When the old-style backquote form of substitution is used, backslash + retains its literal meaning except when followed by $$, ``, or \\. The first backquote not preceded by a backslash terminates the command sub- - stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the + stitution. When using the $(_c_o_m_m_a_n_d) form, all characters between the parentheses make up the command; none are treated specially. Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes. - If the substitution appears within double quotes, word splitting and + If the substitution appears within double quotes, word splitting and pathname expansion are not performed on the results. AArriitthhmmeettiicc EExxppaannssiioonn - Arithmetic expansion allows the evaluation of an arithmetic expression - and the substitution of the result. The format for arithmetic expan- + Arithmetic expansion allows the evaluation of an arithmetic expression + and the substitution of the result. The format for arithmetic expan- sion is: $$((((_e_x_p_r_e_s_s_i_o_n)))) - The _e_x_p_r_e_s_s_i_o_n is treated as if it were within double quotes, but a - double quote inside the parentheses is not treated specially. All 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 _e_x_p_r_e_s_s_i_o_n undergoes the same expansions as if it were within dou- + ble quotes, but double quote characters in _e_x_p_r_e_s_s_i_o_n are not treated + specially and are removed. All tokens in the expression undergo param- + eter and variable expansion, command substitution, and quote removal. + The result is treated as the arithmetic expression to be evaluated. + Arithmetic expansions may be nested. - The evaluation is performed according to the rules listed below under + The evaluation is performed according to the rules listed below under AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN. If _e_x_p_r_e_s_s_i_o_n is invalid, bbaasshh prints a message indicating failure and no substitution occurs. PPrroocceessss SSuubbssttiittuuttiioonn - _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred - to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The - process _l_i_s_t is run asynchronously, and its input or output appears as + _P_r_o_c_e_s_s _s_u_b_s_t_i_t_u_t_i_o_n allows a process's input or output to be referred + to using a filename. It takes the form of <<((_l_i_s_t)) or >>((_l_i_s_t)). The + process _l_i_s_t is run asynchronously, and its input or output appears as a filename. This filename is passed as an argument to the current com- - mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, - writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form - is used, the file passed as an argument should be read to obtain the + mand as the result of the expansion. If the >>((_l_i_s_t)) form is used, + writing to the file will provide input for _l_i_s_t. If the <<((_l_i_s_t)) form + is used, the file passed as an argument should be read to obtain the output of _l_i_s_t. Process substitution is supported on systems that sup- port named pipes (_F_I_F_O_s) or the //ddeevv//ffdd method of naming open files. - When available, process substitution is performed simultaneously with - parameter and variable expansion, command substitution, and arithmetic + When available, process substitution is performed simultaneously with + parameter and variable expansion, command substitution, and arithmetic expansion. WWoorrdd SSpplliittttiinngg - The shell scans the results of parameter expansion, command substitu- - tion, and arithmetic expansion that did not occur within double quotes + The shell scans the results of parameter expansion, command substitu- + tion, and arithmetic expansion that did not occur within double quotes for _w_o_r_d _s_p_l_i_t_t_i_n_g. - The shell treats each character of IIFFSS as a delimiter, and splits the - results of the other expansions into words using these characters as - field terminators. If IIFFSS is unset, or its value is exactly - <><><>, the default, then sequences of <>, <>, - and <> at the beginning and end of the results of the previous - expansions are ignored, and any sequence of IIFFSS characters not at the - beginning or end serves to delimit words. If IIFFSS has a value other - than the default, then sequences of the whitespace characters ssppaaccee, - ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as - long as the whitespace character is in the value of IIFFSS (an IIFFSS white- - space character). Any character in IIFFSS that is not IIFFSS whitespace, + The shell treats each character of IIFFSS as a delimiter, and splits the + results of the other expansions into words using these characters as + field terminators. If IIFFSS is unset, or its value is exactly + <><><>, the default, then sequences of <>, <>, + and <> at the beginning and end of the results of the previous + expansions are ignored, and any sequence of IIFFSS characters not at the + beginning or end serves to delimit words. If IIFFSS has a value other + than the default, then sequences of the whitespace characters ssppaaccee, + ttaabb, and nneewwlliinnee are ignored at the beginning and end of the word, as + long as the whitespace character is in the value of IIFFSS (an IIFFSS white- + space character). Any character in IIFFSS that is not IIFFSS whitespace, along with any adjacent IIFFSS whitespace characters, delimits a field. A - sequence of IIFFSS whitespace characters is also treated as a delimiter. + sequence of IIFFSS whitespace characters is also treated as a delimiter. If the value of IIFFSS is null, no word splitting occurs. - Explicit null arguments ("""" or '''') are retained and passed to commands + Explicit null arguments ("""" or '''') are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parame- ter with no value is expanded within double quotes, a null argument re- sults and is retained and passed to a command as an empty string. When - a quoted null argument appears as part of a word whose expansion is + a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -d'' becomes -d after word splitting and null argument removal. Note that if no expansion occurs, no splitting is performed. PPaatthhnnaammee EExxppaannssiioonn - After word splitting, unless the --ff option has been set, bbaasshh scans - each word for the characters **, ??, and [[. If one of these characters + After word splitting, unless the --ff option has been set, bbaasshh scans + each word for the characters **, ??, and [[. If one of these characters appears, and is not quoted, then the word is regarded as a _p_a_t_t_e_r_n, and - replaced with an alphabetically sorted list of filenames matching the - pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are - found, and the shell option nnuullllgglloobb is not enabled, the word is left - unchanged. If the nnuullllgglloobb option is set, and no matches are found, - the word is removed. If the ffaaiillgglloobb shell option is set, and no - matches are found, an error message is printed and the command is not + replaced with an alphabetically sorted list of filenames matching the + pattern (see PPaatttteerrnn MMaattcchhiinngg below). If no matching filenames are + found, and the shell option nnuullllgglloobb is not enabled, the word is left + unchanged. If the nnuullllgglloobb option is set, and no matches are found, + the word is removed. If the ffaaiillgglloobb shell option is set, and no + matches are found, an error message is printed and the command is not executed. If the shell option nnooccaasseegglloobb is enabled, the match is per- - formed without regard to the case of alphabetic characters. When a - pattern is used for pathname expansion, the character ````..'''' at the - start of a name or immediately following a slash must be matched ex- - plicitly, unless the shell option ddoottgglloobb is set. The filenames ````..'''' - and ````....'''' must always be matched explicitly, even if ddoottgglloobb is set. - In other cases, the ````..'''' character is not treated specially. When - matching a 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 PPaatt-- - tteerrnn MMaattcchhiinngg. See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN - CCOOMMMMAANNDDSS for a description of the nnooccaasseegglloobb, nnuullllgglloobb, ffaaiillgglloobb, and + formed without regard to the case of alphabetic characters. When a + pattern is used for pathname expansion, the character ````..'''' at the + start of a name or immediately following a slash must be matched ex- + plicitly, unless the shell option ddoottgglloobb is set. In order to match + the filenames ````..'''' and ````....'''', the pattern must begin with ``.'' (for + example, ``.?''), even if ddoottgglloobb is set. If the gglloobbsskkiippddoottss shell + option is enabled, the filenames ````..'''' and ````....'''' are never matched, + even if the pattern begins with a ````..''''. When not matching pathnames, + the ````..'''' character is not treated specially. When matching a path- + name, the slash character must always be matched explicitly by a slash + in the pattern, but in other matching contexts it can be matched by a + special pattern character as described below under PPaatttteerrnn MMaattcchhiinngg. + See the description of sshhoopptt below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS for a + description of the nnooccaasseegglloobb, nnuullllgglloobb, gglloobbsskkiippddoottss, ffaaiillgglloobb, and ddoottgglloobb shell options. The GGLLOOBBIIGGNNOORREE shell variable may be used to restrict the set of file @@ -2060,11 +2120,11 @@ EEXXPPAANNSSIIOONN Within [[ and ]], the syntax [[.._s_y_m_b_o_l..]] matches the collat- ing symbol _s_y_m_b_o_l. - If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, several - extended pattern matching operators are recognized. In the following - description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns separated - by a ||. Composite patterns may be formed using one or more of the fol- - lowing sub-patterns: + If the eexxttgglloobb shell option is enabled using the sshhoopptt builtin, the + shell recognizes several extended pattern matching operators. In the + following description, a _p_a_t_t_e_r_n_-_l_i_s_t is a list of one or more patterns + separated by a ||. Composite patterns may be formed using one or more + of the following sub-patterns: ??((_p_a_t_t_e_r_n_-_l_i_s_t)) Matches zero or one occurrence of the given patterns @@ -2077,6 +2137,14 @@ EEXXPPAANNSSIIOONN !!((_p_a_t_t_e_r_n_-_l_i_s_t)) Matches anything except one of the given patterns + When matching filenames, the ddoottgglloobb shell option determines the set of + filenames that are tested: when ddoottgglloobb is enabled, the set of file- + names includes all files beginning with ``.'', but ``.'' and ``..'' + must be matched by a pattern or sub-pattern that begins with a dot; + when it is disabled, the set does not include any filenames beginning + with ``.'' unless the pattern or sub-pattern begins with a ``.''. As + above, ``.'' only has a special meaning when matching filenames. + Complicated extended pattern matching against long strings is slow, es- pecially when the patterns contain alternations and the strings contain multiple matches. Using separate matches against shorter strings, or @@ -2089,7 +2157,7 @@ EEXXPPAANNSSIIOONN RREEDDIIRREECCTTIIOONN Before a command is executed, its input and output may be _r_e_d_i_r_e_c_t_e_d - using a special notation interpreted by the shell. Redirection allows + using a special notation interpreted by the shell. _R_e_d_i_r_e_c_t_i_o_n allows commands' file handles to be duplicated, opened, closed, made to refer to different files, and can change the files the command reads from and writes to. Redirection may also be used to modify file handles in the @@ -2105,42 +2173,43 @@ RREEDDIIRREECCTTIIOONN If >&- or <&- is preceded by {_v_a_r_n_a_m_e}, the value of _v_a_r_n_a_m_e defines the file descriptor to close. If {_v_a_r_n_a_m_e} is supplied, the redirect- ion persists beyond the scope of the command, allowing the shell pro- - grammer to manage the file descriptor himself. + grammer to manage the file descriptor's lifetime manually. The + vvaarrrreeddiirr__cclloossee shell option manages this behavior. - In the following descriptions, if the file descriptor number is omit- - ted, and the first character of the redirection operator is <<, the re- - direction refers to the standard input (file descriptor 0). If the - first character of the redirection operator is >>, the redirection + In the following descriptions, if the file descriptor number is omit- + ted, and the first character of the redirection operator is <<, the re- + direction refers to the standard input (file descriptor 0). If the + first character of the redirection operator is >>, the redirection refers to the standard output (file descriptor 1). - The word following the redirection operator in the following descrip- - tions, unless otherwise noted, is subjected to brace expansion, tilde - expansion, parameter and variable expansion, command substitution, - arithmetic expansion, quote removal, pathname expansion, and word + The word following the redirection operator in the following descrip- + tions, unless otherwise noted, is subjected to brace expansion, tilde + expansion, parameter and variable expansion, command substitution, + arithmetic expansion, quote removal, pathname expansion, and word splitting. If it expands to more than one word, bbaasshh reports an error. - Note that the order of redirections is significant. For example, the + Note that the order of redirections is significant. For example, the command ls >> dirlist 2>>&&1 - directs both standard output and standard error to the file _d_i_r_l_i_s_t, + directs both standard output and standard error to the file _d_i_r_l_i_s_t, while the command ls 2>>&&1 >> dirlist - directs only the standard output to file _d_i_r_l_i_s_t, because the standard - error was duplicated from the standard output before the standard out- + directs only the standard output to file _d_i_r_l_i_s_t, because the standard + error was duplicated from the standard output before the standard out- put was redirected to _d_i_r_l_i_s_t. BBaasshh handles several filenames specially when they are used in redirec- tions, as described in the following table. If the operating system on which bbaasshh is running provides these special files, bash will use them; - otherwise it will emulate them internally with the behavior described + otherwise it will emulate them internally with the behavior described below. //ddeevv//ffdd//_f_d - If _f_d is a valid integer, file descriptor _f_d is dupli- + If _f_d is a valid integer, file descriptor _f_d is dupli- cated. //ddeevv//ssttddiinn File descriptor 0 is duplicated. @@ -2150,22 +2219,22 @@ RREEDDIIRREECCTTIIOONN File descriptor 2 is duplicated. //ddeevv//ttccpp//_h_o_s_t//_p_o_r_t If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t - is an integer port number or service name, bbaasshh attempts + is an integer port number or service name, bbaasshh attempts to open the corresponding TCP socket. //ddeevv//uuddpp//_h_o_s_t//_p_o_r_t If _h_o_s_t is a valid hostname or Internet address, and _p_o_r_t - is an integer port number or service name, bbaasshh attempts + is an integer port number or service name, bbaasshh attempts to open the corresponding UDP socket. A failure to open or create a file causes the redirection to fail. - Redirections using file descriptors greater than 9 should be used with - care, as they may conflict with file descriptors the shell uses inter- + Redirections using file descriptors greater than 9 should be used with + care, as they may conflict with file descriptors the shell uses inter- nally. RReeddiirreeccttiinngg IInnppuutt Redirection of input causes the file whose name results from the expan- - sion of _w_o_r_d to be opened for reading on file descriptor _n, or the + sion of _w_o_r_d to be opened for reading on file descriptor _n, or the standard input (file descriptor 0) if _n is not specified. The general format for redirecting input is: @@ -2173,27 +2242,27 @@ RREEDDIIRREECCTTIIOONN [_n]<<_w_o_r_d RReeddiirreeccttiinngg OOuuttppuutt - Redirection of output causes the file whose name results from the ex- - pansion of _w_o_r_d to be opened for writing on file descriptor _n, or the + Redirection of output causes the file whose name results from the ex- + pansion of _w_o_r_d to be opened for writing on file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file - does not exist it is created; if it does exist it is truncated to zero + does not exist it is created; if it does exist it is truncated to zero size. The general format for redirecting output is: [_n]>>_w_o_r_d - If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett - builtin has been enabled, the redirection will fail if the file whose - name results from the expansion of _w_o_r_d exists and is a regular file. + If the redirection operator is >>, and the nnoocclloobbbbeerr option to the sseett + builtin has been enabled, the redirection will fail if the file whose + name results from the expansion of _w_o_r_d exists and is a regular file. If the redirection operator is >>||, or the redirection operator is >> and the nnoocclloobbbbeerr option to the sseett builtin command is not enabled, the re- direction is attempted even if the file named by _w_o_r_d exists. AAppppeennddiinngg RReeddiirreecctteedd OOuuttppuutt - Redirection of output in this fashion causes the file whose name re- + Redirection of output in this fashion causes the file whose name re- sults from the expansion of _w_o_r_d to be opened for appending on file de- - scriptor _n, or the standard output (file descriptor 1) if _n is not + scriptor _n, or the standard output (file descriptor 1) if _n is not specified. If the file does not exist it is created. The general format for appending output is: @@ -2201,11 +2270,11 @@ RREEDDIIRREECCTTIIOONN [_n]>>>>_w_o_r_d RReeddiirreeccttiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr - This construct allows both the standard output (file descriptor 1) and - the standard error output (file descriptor 2) to be redirected to the + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be redirected to the file whose name is the expansion of _w_o_r_d. - There are two formats for redirecting standard output and standard er- + There are two formats for redirecting standard output and standard er- ror: &&>>_w_o_r_d @@ -2217,13 +2286,13 @@ RREEDDIIRREECCTTIIOONN >>_w_o_r_d 2>>&&1 - When using the second form, _w_o_r_d may not expand to a number or --. If - it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee DDee-- + When using the second form, _w_o_r_d may not expand to a number or --. If + it does, other redirection operators apply (see DDuupplliiccaattiinngg FFiillee DDee-- ssccrriippttoorrss below) for compatibility reasons. AAppppeennddiinngg SSttaannddaarrdd OOuuttppuutt aanndd SSttaannddaarrdd EErrrroorr - This construct allows both the standard output (file descriptor 1) and - the standard error output (file descriptor 2) to be appended to the + This construct allows both the standard output (file descriptor 1) and + the standard error output (file descriptor 2) to be appended to the file whose name is the expansion of _w_o_r_d. The format for appending standard output and standard error is: @@ -2237,10 +2306,10 @@ RREEDDIIRREECCTTIIOONN (see DDuupplliiccaattiinngg FFiillee DDeessccrriippttoorrss below). HHeerree DDooccuummeennttss - This type of redirection instructs the shell to read input from the + This type of redirection instructs the shell to read input from the current source until a line containing only _d_e_l_i_m_i_t_e_r (with no trailing - blanks) is seen. All of the lines read up to that point are then used - as the standard input (or file descriptor _n if _n is specified) for a + blanks) is seen. All of the lines read up to that point are then used + as the standard input (or file descriptor _n if _n is specified) for a command. The format of here-documents is: @@ -2249,18 +2318,18 @@ RREEDDIIRREECCTTIIOONN _h_e_r_e_-_d_o_c_u_m_e_n_t _d_e_l_i_m_i_t_e_r - No parameter and variable expansion, command substitution, arithmetic - expansion, or pathname expansion is performed on _w_o_r_d. If any part of - _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, - and the lines in the here-document are not expanded. If _w_o_r_d is un- - quoted, all lines of the here-document are subjected to parameter ex- - pansion, command substitution, and arithmetic expansion, the character + No parameter and variable expansion, command substitution, arithmetic + expansion, or pathname expansion is performed on _w_o_r_d. If any part of + _w_o_r_d is quoted, the _d_e_l_i_m_i_t_e_r is the result of quote removal on _w_o_r_d, + and the lines in the here-document are not expanded. If _w_o_r_d is un- + quoted, all lines of the here-document are subjected to parameter ex- + pansion, command substitution, and arithmetic expansion, the character sequence \\<> is ignored, and \\ must be used to quote the charac- ters \\, $$, and ``. If the redirection operator is <<<<--, then all leading tab characters are - stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- - lows here-documents within shell scripts to be indented in a natural + stripped from input lines and the line containing _d_e_l_i_m_i_t_e_r. This al- + lows here-documents within shell scripts to be indented in a natural fashion. HHeerree SSttrriinnggss @@ -2268,9 +2337,9 @@ RREEDDIIRREECCTTIIOONN [_n]<<<<<<_w_o_r_d - The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, - command substitution, arithmetic expansion, and quote removal. Path- - name expansion and word splitting are not performed. The result is + The _w_o_r_d undergoes tilde expansion, parameter and variable expansion, + command substitution, arithmetic expansion, and quote removal. Path- + name expansion and word splitting are not performed. The result is supplied as a single string, with a newline appended, to the command on its standard input (or file descriptor _n if _n is specified). @@ -2280,8 +2349,8 @@ RREEDDIIRREECCTTIIOONN [_n]<<&&_w_o_r_d is used to duplicate input file descriptors. If _w_o_r_d expands to one or - more digits, the file descriptor denoted by _n is made to be a copy of - that file descriptor. If the digits in _w_o_r_d do not specify a file de- + more digits, the file descriptor denoted by _n is made to be a copy of + that file descriptor. If the digits in _w_o_r_d do not specify a file de- scriptor open for input, a redirection error occurs. If _w_o_r_d evaluates to --, file descriptor _n is closed. If _n is not specified, the standard input (file descriptor 0) is used. @@ -2290,12 +2359,12 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_w_o_r_d - is used similarly to duplicate output file descriptors. If _n is not - specified, the standard output (file descriptor 1) is used. If the - digits in _w_o_r_d do not specify a file descriptor open for output, a re- - direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is - closed. As a special case, if _n is omitted, and _w_o_r_d does not expand - to one or more digits or --, the standard output and standard error are + is used similarly to duplicate output file descriptors. If _n is not + specified, the standard output (file descriptor 1) is used. If the + digits in _w_o_r_d do not specify a file descriptor open for output, a re- + direction error occurs. If _w_o_r_d evaluates to --, file descriptor _n is + closed. As a special case, if _n is omitted, and _w_o_r_d does not expand + to one or more digits or --, the standard output and standard error are redirected as described previously. MMoovviinngg FFiillee DDeessccrriippttoorrss @@ -2303,7 +2372,7 @@ RREEDDIIRREECCTTIIOONN [_n]<<&&_d_i_g_i_t-- - moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard input (file descriptor 0) if _n is not specified. _d_i_g_i_t is closed after being duplicated to _n. @@ -2311,7 +2380,7 @@ RREEDDIIRREECCTTIIOONN [_n]>>&&_d_i_g_i_t-- - moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard + moves the file descriptor _d_i_g_i_t to file descriptor _n, or the standard output (file descriptor 1) if _n is not specified. OOppeenniinngg FFiillee DDeessccrriippttoorrss ffoorr RReeaaddiinngg aanndd WWrriittiinngg @@ -2319,33 +2388,32 @@ RREEDDIIRREECCTTIIOONN [_n]<<>>_w_o_r_d - causes the file whose name is the expansion of _w_o_r_d to be opened for - both reading and writing on file descriptor _n, or on file descriptor 0 + causes the file whose name is the expansion of _w_o_r_d to be opened for + both reading and writing on file descriptor _n, or on file descriptor 0 if _n is not specified. If the file does not exist, it is created. AALLIIAASSEESS - _A_l_i_a_s_e_s allow a string to be substituted for a word when it is used as - the first word of a simple command. The shell maintains a list of - aliases that may be set and unset with the aalliiaass and uunnaalliiaass builtin - commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each - simple command, if unquoted, is checked to see if it has an alias. If - so, that word is replaced by the text of the alias. The characters //, - $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters + _A_l_i_a_s_e_s allow a string to be substituted for a word when it is used as + the first word of a simple command. The shell maintains a list of + aliases that may be set and unset with the aalliiaass and uunnaalliiaass builtin + commands (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). The first word of each + simple command, if unquoted, is checked to see if it has an alias. If + so, that word is replaced by the text of the alias. The characters //, + $$, ``, and == and any of the shell _m_e_t_a_c_h_a_r_a_c_t_e_r_s or quoting characters listed above may not appear in an alias name. The replacement text may - contain any valid shell input, including shell metacharacters. The - first word of the replacement text is tested for aliases, but a word - that is identical to an alias being expanded is not expanded a second - time. This means that one may alias llss to llss --FF, for instance, and - bbaasshh does not try to recursively expand the replacement text. If the - last character of the alias value is a _b_l_a_n_k, then the next command + contain any valid shell input, including shell metacharacters. The + first word of the replacement text is tested for aliases, but a word + that is identical to an alias being expanded is not expanded a second + time. This means that one may alias llss to llss --FF, for instance, and + bbaasshh does not try to recursively expand the replacement text. If the + last character of the alias value is a _b_l_a_n_k, then the next command word following the alias is also checked for alias expansion. Aliases are created and listed with the aalliiaass command, and removed with the uunnaalliiaass command. - There is no mechanism for using arguments in the replacement text. If - arguments are needed, a shell function should be used (see FFUUNNCCTTIIOONNSS - below). + There is no mechanism for using arguments in the replacement text. If + arguments are needed, use a shell function (see FFUUNNCCTTIIOONNSS below). Aliases are not expanded when the shell is not interactive, unless the eexxppaanndd__aalliiaasseess shell option is set using sshhoopptt (see the description of @@ -2441,22 +2509,23 @@ FFUUNNCCTTIIOONNSS ddeeccllaarree or ttyyppeesseett builtin commands. The --FF option to ddeeccllaarree or ttyyppee-- sseett will list the function names only (and optionally the source file and line number, if the eexxttddeebbuugg shell option is enabled). Functions - may be exported so that subshells automatically have them defined with - the --ff option to the eexxppoorrtt builtin. A function definition may be + may be exported so that child shell processes (those created when exe- + cuting a separate shell invocation) automatically have them defined + with the --ff option to the eexxppoorrtt builtin. A function definition may be deleted using the --ff option to the uunnsseett builtin. Functions may be recursive. The FFUUNNCCNNEESSTT variable may be used to limit - the depth of the function call stack and restrict the number of func- + the depth of the function call stack and restrict the number of func- tion invocations. By default, no limit is imposed on the number of re- cursive calls. AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN - The shell allows arithmetic expressions to be evaluated, under certain - circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com- + The shell allows arithmetic expressions to be evaluated, under certain + circumstances (see the lleett and ddeeccllaarree builtin commands, the (((( com- pound command, and AArriitthhmmeettiicc EExxppaannssiioonn). Evaluation is done in fixed- - width integers with no check for overflow, though division by 0 is - trapped and flagged as an error. The operators and their precedence, - associativity, and values are the same as in the C language. The fol- + 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 +2554,55 @@ AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN _e_x_p_r_1 ,, _e_x_p_r_2 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 _i_n_t_e_g_e_r + The value of a variable is evaluated as an arithmetic expression when + it is referenced, or when a variable which has been given the _i_n_t_e_g_e_r attribute using ddeeccllaarree --ii is assigned a value. A null value evaluates - to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on + to 0. A shell variable need not have its _i_n_t_e_g_e_r attribute turned on to be used in an expression. Integer constants follow the C language definition, without suffixes or character constants. Constants with a leading 0 are interpreted as oc- - tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- - bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- - ber between 2 and 64 representing the arithmetic base, and _n is a num- - ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When + tal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, num- + bers take the form [_b_a_s_e_#]n, where the optional _b_a_s_e is a decimal num- + ber between 2 and 64 representing the arithmetic base, and _n is a num- + ber in that base. If _b_a_s_e_# is omitted, then base 10 is used. When specifying _n, if a non-digit is required, the digits greater than 9 are - represented by the lowercase letters, the uppercase letters, @, and _, - in that order. If _b_a_s_e is less than or equal to 36, lowercase and up- - percase letters may be used interchangeably to represent numbers be- + represented by the lowercase letters, the uppercase letters, @, and _, + in that order. If _b_a_s_e is less than or equal to 36, lowercase and up- + percase letters may be used interchangeably to represent numbers be- tween 10 and 35. - Operators are evaluated in order of precedence. Sub-expressions in - parentheses are evaluated first and may override the precedence rules + Operators are evaluated in order of precedence. Sub-expressions in + parentheses are evaluated first and may override the precedence rules above. CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS - Conditional expressions are used by the [[[[ compound command and the - tteesstt and [[ builtin commands to test file attributes and perform string - and arithmetic comparisons. The tteesstt and [[ commands determine their - behavior based on the number of arguments; see the descriptions of + Conditional expressions are used by the [[[[ compound command and the + tteesstt and [[ builtin commands to test file attributes and perform string + and arithmetic comparisons. The tteesstt and [[ commands determine their + behavior based on the number of arguments; see the descriptions of those commands for any other command-specific actions. - Expressions are formed from the following unary or binary primaries. - BBaasshh handles several filenames specially when they are used in expres- + Expressions are formed from the following unary or binary primaries. + BBaasshh handles several filenames specially when they are used in expres- sions. If the operating system on which bbaasshh is running provides these - special files, bash will use them; otherwise it will emulate them in- - ternally with this behavior: If any _f_i_l_e argument to one of the pri- + special files, bash will use them; otherwise it will emulate them in- + ternally with this behavior: If any _f_i_l_e argument to one of the pri- maries is of the form _/_d_e_v_/_f_d_/_n, then file descriptor _n is checked. If - the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, - _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, + the _f_i_l_e argument to one of the primaries is one of _/_d_e_v_/_s_t_d_i_n, + _/_d_e_v_/_s_t_d_o_u_t, or _/_d_e_v_/_s_t_d_e_r_r, file descriptor 0, 1, or 2, respectively, is checked. Unless otherwise specified, primaries that operate on files follow sym- bolic links and operate on the target of the link, rather than the link itself. - When used with [[[[, the << and >> operators sort lexicographically using + When used with [[[[, the << and >> operators sort lexicographically using the current locale. The tteesstt command sorts using ASCII ordering. --aa _f_i_l_e @@ -2572,30 +2641,30 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS --LL _f_i_l_e True if _f_i_l_e exists and is a symbolic link. --NN _f_i_l_e - True if _f_i_l_e exists and has been modified since it was last + True if _f_i_l_e exists and has been modified since it was last read. --OO _f_i_l_e True if _f_i_l_e exists and is owned by the effective user id. --SS _f_i_l_e True if _f_i_l_e exists and is a socket. _f_i_l_e_1 --eeff _f_i_l_e_2 - True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num- + True if _f_i_l_e_1 and _f_i_l_e_2 refer to the same device and inode num- bers. _f_i_l_e_1 -nntt _f_i_l_e_2 - True if _f_i_l_e_1 is newer (according to modification date) than + True if _f_i_l_e_1 is newer (according to modification date) than _f_i_l_e_2, or if _f_i_l_e_1 exists and _f_i_l_e_2 does not. _f_i_l_e_1 -oott _f_i_l_e_2 - True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1 + True if _f_i_l_e_1 is older than _f_i_l_e_2, or if _f_i_l_e_2 exists and _f_i_l_e_1 does not. --oo _o_p_t_n_a_m_e - True if the shell option _o_p_t_n_a_m_e is enabled. See the list of - options under the description of the --oo option to the sseett + True if the shell option _o_p_t_n_a_m_e is enabled. See the list of + options under the description of the --oo option to the sseett builtin below. --vv _v_a_r_n_a_m_e - True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a + True if the shell variable _v_a_r_n_a_m_e is set (has been assigned a value). --RR _v_a_r_n_a_m_e - True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- + True if the shell variable _v_a_r_n_a_m_e is set and is a name refer- ence. --zz _s_t_r_i_n_g True if the length of _s_t_r_i_n_g is zero. @@ -2605,8 +2674,8 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS _s_t_r_i_n_g_1 ==== _s_t_r_i_n_g_2 _s_t_r_i_n_g_1 == _s_t_r_i_n_g_2 - True if the strings are equal. == should be used with the tteesstt - command for POSIX conformance. When used with the [[[[ command, + True if the strings are equal. == should be used with the tteesstt + command for POSIX conformance. When used with the [[[[ command, this performs pattern matching as described above (CCoommppoouunndd CCoomm-- mmaannddss). @@ -2620,90 +2689,93 @@ CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS True if _s_t_r_i_n_g_1 sorts after _s_t_r_i_n_g_2 lexicographically. _a_r_g_1 OOPP _a_r_g_2 - OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic - binary operators return true if _a_r_g_1 is equal to, not equal to, - less than, less than or equal to, greater than, or greater than - or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive - or negative integers. When used with the [[[[ command, _A_r_g_1 and - _A_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC + OOPP is one of --eeqq, --nnee, --lltt, --llee, --ggtt, or --ggee. These arithmetic + binary operators return true if _a_r_g_1 is equal to, not equal to, + less than, less than or equal to, greater than, or greater than + or equal to _a_r_g_2, respectively. _A_r_g_1 and _a_r_g_2 may be positive + or negative integers. When used with the [[[[ command, _A_r_g_1 and + _A_r_g_2 are evaluated as arithmetic expressions (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above). SSIIMMPPLLEE CCOOMMMMAANNDD EEXXPPAANNSSIIOONN When a simple command is executed, the shell performs the following ex- - pansions, assignments, and redirections, from left to right, in the + 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 RREEDDIIRREECCTTIIOONN. 4. The text after the == in each variable assignment undergoes tilde expansion, parameter expansion, command substitution, arithmetic - expansion, and quote removal before being assigned to the vari- + 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. CCOOMMMMAANNDD EEXXEECCUUTTIIOONN - After a command has been split into words, if it results in a simple - command and an optional list of arguments, the following actions are + After a command has been split into words, if it results in a simple + command and an optional list of arguments, the following actions are taken. - If the command name contains no slashes, the shell attempts to locate - it. If there exists a shell function by that name, that function is - invoked as described above in FFUUNNCCTTIIOONNSS. If the name does not match a - function, the shell searches for it in the list of shell builtins. If + If the command name contains no slashes, the shell attempts to locate + it. If there exists a shell function by that name, that function is + invoked as described above in FFUUNNCCTTIIOONNSS. If the name does not match a + function, the shell searches for it in the list of shell builtins. If a match is found, that builtin is invoked. - If the name is neither a shell function nor a builtin, and contains no - slashes, bbaasshh searches each element of the PPAATTHH for a directory con- + If the name is neither a shell function nor a builtin, and contains no + slashes, bbaasshh searches each element of the PPAATTHH for a directory con- taining an executable file by that name. BBaasshh uses a hash table to re- - member the full pathnames of executable files (see hhaasshh under SSHHEELLLL - BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is - performed only if the command is not found in the hash table. If the + member the full pathnames of executable files (see hhaasshh under SSHHEELLLL + BBUUIILLTTIINN CCOOMMMMAANNDDSS below). A full search of the directories in PPAATTHH is + performed only if the command is not found in the hash table. If the search is unsuccessful, the shell searches for a defined shell function named ccoommmmaanndd__nnoott__ffoouunndd__hhaannddllee. If that function exists, it is invoked - in a separate execution environment with the original command and the - original command's arguments as its arguments, and the function's exit - status becomes the exit status of that subshell. If that function is + 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 _s_h_e_l_l _s_c_r_i_p_t, a - file containing shell commands. A subshell is spawned to execute it. - This subshell reinitializes itself, so that the effect is as if a new - shell had been invoked to handle the script, with the exception that - the locations of commands remembered by the parent (see hhaasshh below un- - der SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) 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 _s_h_e_l_l _s_c_r_i_p_t, a + file containing shell commands, and the shell creates a new instance of + itself to execute it. This subshell reinitializes itself, so that the + effect is as if a new shell had been invoked to handle the script, with + the exception that the locations of commands remembered by the parent + (see hhaasshh below under SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS) are retained by the + child. If the program is a file beginning with ##!!, the remainder of the first line specifies an interpreter for the program. The shell executes the @@ -2766,6 +2838,8 @@ CCOOMMMMAANNDD EEXXEECCUUTTIIOONN EENNVVIIRROONNMMEENN A command invoked in this separate environment cannot affect the shell's execution environment. + A _s_u_b_s_h_e_l_l is a copy of the shell process. + Command substitution, commands grouped with parentheses, and asynchro- nous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the shell are re- @@ -2838,42 +2912,70 @@ EEXXIITT SSTTAATTUUSS return an exit status of 2 to indicate incorrect usage, generally in- valid options or missing arguments. - BBaasshh itself returns the exit status of the last command executed, un- - less a syntax error occurs, in which case it exits with a non-zero + The exit status of the last command is available in the special parame- + ter $?. + + BBaasshh itself returns the exit status of the last command executed, un- + less a syntax error occurs, in which case it exits with a non-zero value. See also the eexxiitt builtin command below. SSIIGGNNAALLSS - When bbaasshh is interactive, in the absence of any traps, it ignores + When bbaasshh is interactive, in the absence of any traps, it ignores SSIIGGTTEERRMM (so that kkiillll 00 does not kill an interactive shell), and SSIIGGIINNTT - is caught and handled (so that the wwaaiitt builtin is interruptible). In + is caught and handled (so that the wwaaiitt builtin is interruptible). In all cases, bbaasshh ignores SSIIGGQQUUIITT. If job control is in effect, bbaasshh ig- nores SSIIGGTTTTIINN, SSIIGGTTTTOOUU, and SSIIGGTTSSTTPP. Non-builtin commands run by bbaasshh have signal handlers set to the values inherited by the shell from its parent. When job control is not in ef- - fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to - these inherited handlers. Commands run as a result of command substi- + fect, asynchronous commands ignore SSIIGGIINNTT and SSIIGGQQUUIITT in addition to + these inherited handlers. Commands run as a result of command substi- tution ignore the keyboard-generated job control signals SSIIGGTTTTIINN, SSIIGGTT-- TTOOUU, and SSIIGGTTSSTTPP. - The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, - an interactive shell resends the SSIIGGHHUUPP to all jobs, running or + The shell exits by default upon receipt of a SSIIGGHHUUPP. Before exiting, + an interactive shell resends the SSIIGGHHUUPP to all jobs, running or stopped. Stopped jobs are sent SSIIGGCCOONNTT to ensure that they receive the - SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular - job, it should be removed from the jobs table with the ddiissoowwnn builtin - (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- + SSIIGGHHUUPP. To prevent the shell from sending the signal to a particular + job, it should be removed from the jobs table with the ddiissoowwnn builtin + (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below) or marked to not receive SSIIGGHHUUPP us- ing ddiissoowwnn --hh. - If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a + If the hhuuppoonneexxiitt shell option has been set with sshhoopptt, bbaasshh sends a SSIIGGHHUUPP to all jobs when an interactive login shell exits. - If bbaasshh is waiting for a command to complete and receives a signal for + If bbaasshh is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the com- - mand completes. When bbaasshh is waiting for an asynchronous command via - the wwaaiitt builtin, the reception of a signal for which a trap has been + mand completes. When bbaasshh is waiting for an asynchronous command via + the wwaaiitt builtin, the reception of a signal for which a trap has been set will cause the wwaaiitt builtin to return immediately with an exit sta- tus greater than 128, immediately after which the trap is executed. + When job control is not enabled, and bbaasshh is waiting for a foreground + command to complete, the shell receives keyboard-generated signals such + as SSIIGGIINNTT (usually generated by ^^CC) that users commonly intend to send + to that command. This happens because the shell and the command are in + the same process group as the terminal, and ^^CC sends SSIIGGIINNTT to all pro- + cesses in that process group. + + When bbaasshh is running without job control enabled and receives SSIIGGIINNTT + while waiting for a foreground command, it waits until that foreground + command terminates and then decides what to do about the SSIIGGIINNTT: + + 1. If the command terminates due to the SSIIGGIINNTT, bbaasshh concludes that + the user meant to end the entire script, and acts on the SSIIGGIINNTT + (e.g., by running a SSIIGGIINNTT trap or exiting itself); + + 2. If the command does not terminate due to SSIIGGIINNTT, the program + handled the SSIIGGIINNTT itself and did not treat it as a fatal sig- + nal. In that case, bbaasshh does not treat SSIIGGIINNTT as a fatal sig- + nal, either, instead assuming that the SSIIGGIINNTT was used as part + of the program's normal operation (e.g., emacs uses it to abort + editing commands) or deliberately discarded. However, bbaasshh will + run any trap set on SSIIGGIINNTT, as it does with any other trapped + signal it receives while it is waiting for the foreground com- + mand to complete, for compatibility. + JJOOBB CCOONNTTRROOLL _J_o_b _c_o_n_t_r_o_l refers to the ability to selectively stop (_s_u_s_p_e_n_d) the ex- ecution of processes and continue (_r_e_s_u_m_e) their execution at a later @@ -2994,80 +3096,79 @@ PPRROOMMPPTTIINNGG \\uu the username of the current user \\vv the version of bbaasshh (e.g., 2.00) \\VV the release of bbaasshh, version + patch level (e.g., 2.00.0) - \\ww the current working directory, with $$HHOOMMEE abbreviated - with a tilde (uses the value of the PPRROOMMPPTT__DDIIRRTTRRIIMM vari- - able) - \\WW the basename of the current working directory, with $$HHOOMMEE - abbreviated with a tilde + \\ww the value of the PPWWDD shell variable ($$PPWWDD), with $$HHOOMMEE + abbreviated with a tilde (uses the value of the + PPRROOMMPPTT__DDIIRRTTRRIIMM variable) + \\WW the basename of $$PPWWDD, with $$HHOOMMEE abbreviated with a tilde \\!! the history number of this command \\## the command number of this command \\$$ if the effective UID is 0, a ##, otherwise a $$ \\_n_n_n the character corresponding to the octal number _n_n_n \\\\ a backslash - \\[[ begin a sequence of non-printing characters, which could - be used to embed a terminal control sequence into the + \\[[ begin a sequence of non-printing characters, which could + be used to embed a terminal control sequence into the prompt \\]] end a sequence of non-printing characters - The command number and the history number are usually different: the - history number of a command is its position in the history list, which - may include commands restored from the history file (see HHIISSTTOORRYY be- - low), while the command number is the position in the sequence of com- - mands executed during the current shell session. After the string is - decoded, it is expanded via parameter expansion, command substitution, - arithmetic expansion, and quote removal, subject to the value of the + The command number and the history number are usually different: the + history number of a command is its position in the history list, which + may include commands restored from the history file (see HHIISSTTOORRYY be- + low), while the command number is the position in the sequence of com- + mands executed during the current shell session. After the string is + decoded, it is expanded via parameter expansion, command substitution, + arithmetic expansion, and quote removal, subject to the value of the pprroommppttvvaarrss shell option (see the description of the sshhoopptt command under - SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if - escaped portions of the string appear within command substitution or + SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). This can have unwanted side effects if + escaped portions of the string appear within command substitution or contain characters special to word expansion. RREEAADDLLIINNEE - This is the library that handles reading input when using an interac- + This is the library that handles reading input when using an interac- tive shell, unless the ----nnooeeddiittiinngg option is given at shell invocation. Line editing is also used when using the --ee option to the rreeaadd builtin. By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be - enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett - builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing - after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the + enabled at any time using the --oo eemmaaccss or --oo vvii options to the sseett + builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). To turn off line editing + after the shell is running, use the ++oo eemmaaccss or ++oo vvii options to the sseett builtin. RReeaaddlliinnee NNoottaattiioonn In this section, the Emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- - larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- - boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key + Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Simi- + larly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On key- + boards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x - means ESC-Control-_x, or press the Escape key then hold the Control key + means ESC-Control-_x, or press the Escape key then hold the Control key while pressing the _x key.) Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as - a repeat count. Sometimes, however, it is the sign of the argument - that is significant. Passing a negative argument to a command that - acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to - act in a backward direction. Commands whose behavior with arguments + a repeat count. Sometimes, however, it is the sign of the argument + that is significant. Passing a negative argument to a command that + acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to + act in a backward direction. Commands whose behavior with arguments deviates from this are noted below. - When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved + When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text separate the chunks of text on the kill ring. RReeaaddlliinnee IInniittiiaalliizzaattiioonn - Readline is customized by putting commands in an initialization file - (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of + Readline is customized by putting commands in an initialization file + (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of the IINNPPUUTTRRCC variable. If that variable is unset, the default is _~_/_._i_n_- - _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate - default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- - brary starts up, the initialization file is read, and the key bindings - and variables are set. There are only a few basic constructs allowed - in the readline initialization file. Blank lines are ignored. Lines - beginning with a ## are comments. Lines beginning with a $$ indicate - conditional constructs. Other lines denote key bindings and variable + _p_u_t_r_c. If that file does not exist or cannot be read, the ultimate + default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline li- + brary starts up, the initialization file is read, and the key bindings + and variables are set. There are only a few basic constructs allowed + in the readline initialization file. Blank lines are ignored. Lines + beginning with a ## are comments. Lines beginning with a $$ indicate + conditional constructs. Other lines denote key bindings and variable settings. - The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other + The default key-bindings may be changed with an _i_n_p_u_t_r_c file. Other programs that use this library may add their own commands and bindings. For example, placing @@ -3075,18 +3176,18 @@ RREEAADDLLIINNEE M-Control-u: universal-argument or C-Meta-u: universal-argument - into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- + into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- _s_a_l_-_a_r_g_u_m_e_n_t. - The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, + The following symbolic character names are recognized: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. - In addition to command names, readline allows keys to be bound to a + In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a _m_a_c_r_o). RReeaaddlliinnee KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. - All that is required is the name of the command or the text of a macro + The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. + All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be speci- fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or _C_o_n_t_r_o_l_- prefixes, or as a key sequence. @@ -3098,15 +3199,15 @@ RREEAADDLLIINNEE Meta-Rubout: backward-kill-word Control-o: "> output" - In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, - _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to - run the macro expressed on the right hand side (that is, to insert the + In the above example, _C_-_u is bound to the function uunniivveerrssaall--aarrgguummeenntt, + _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to + run the macro expressed on the right hand side (that is, to insert the text ``> output'' into the line). - In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs - from kkeeyynnaammee above in that strings denoting an entire key sequence may - be specified by placing the sequence within double quotes. Some GNU - Emacs style key escapes can be used, as in the following example, but + In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs + from kkeeyynnaammee above in that strings denoting an entire key sequence may + be specified by placing the sequence within double quotes. Some GNU + Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. "\C-u": universal-argument @@ -3114,7 +3215,7 @@ RREEAADDLLIINNEE "\e[11~": "Function Key 1" In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. - _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is + _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the text ``Function Key 1''. The full set of GNU Emacs style escape sequences is @@ -3125,7 +3226,7 @@ RREEAADDLLIINNEE \\"" literal " \\'' 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: \\aa alert (bell) \\bb backspace @@ -3135,20 +3236,20 @@ RREEAADDLLIINNEE \\rr carriage return \\tt horizontal tab \\vv vertical tab - \\_n_n_n the eight-bit character whose value is the octal value + \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a func- - tion name. In the macro body, the backslash escapes described above - are expanded. Backslash will quote any other character in the macro + tion name. In the macro body, the backslash escapes described above + are expanded. Backslash will quote any other character in the macro text, including " and '. - BBaasshh allows the current readline key bindings to be displayed or modi- - fied with the bbiinndd builtin command. The editing mode may be switched - during interactive use by using the --oo option to the sseett builtin com- + BBaasshh allows the current readline key bindings to be displayed or modi- + fied with the bbiinndd builtin command. The editing mode may be switched + during interactive use by using the --oo option to the sseett builtin com- mand (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). RReeaaddlliinnee VVaarriiaabblleess @@ -3159,29 +3260,32 @@ RREEAADDLLIINNEE sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below). - Except where noted, readline variables can take the values OOnn or OOffff - (without regard to case). Unrecognized variable names are ignored. - When a variable value is read, empty or null values, "on" (case-insen- + Except where noted, readline variables can take the values OOnn or OOffff + (without regard to case). Unrecognized variable names are ignored. + When a variable value is read, empty or null values, "on" (case-insen- sitive), and "1" are equivalent to OOnn. All other values are equivalent to OOffff. The variables and their default values are: bbeellll--ssttyyllee ((aauuddiibbllee)) - Controls what happens when readline wants to ring the terminal + Controls what happens when readline wants to ring the terminal bell. If set to nnoonnee, readline never rings the bell. If set to - vviissiibbllee, readline uses a visible bell if one is available. If + vviissiibbllee, readline uses a visible bell if one is available. If set to aauuddiibbllee, readline attempts to ring the terminal's bell. bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) - If set to OOnn, readline attempts to bind the control characters + If set to OOnn, readline attempts to bind the control characters treated specially by the kernel's terminal driver to their read- line equivalents. bblliinnkk--mmaattcchhiinngg--ppaarreenn ((OOffff)) If set to OOnn, readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. ccoolloorreedd--ccoommpplleettiioonn--pprreeffiixx ((OOffff)) - If set to OOnn, when listing completions, readline displays the + If set to OOnn, when listing completions, readline displays the common prefix of the set of possible completions using a differ- - ent color. The color definitions are taken from the value of - the LLSS__CCOOLLOORRSS environment variable. + ent color. The color definitions are taken from the value of + the LLSS__CCOOLLOORRSS environment variable. If there is a color defini- + tion in $$LLSS__CCOOLLOORRSS for the custom suffix "readline-colored-com- + pletion-prefix", readline uses this color for the common prefix + instead of its default. ccoolloorreedd--ssttaattss ((OOffff)) If set to OOnn, readline displays possible completions using dif- ferent colors to indicate their file type. The color defini- @@ -3217,19 +3321,20 @@ RREEAADDLLIINNEE 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. + they are simply listed on the terminal. A zero value means + readline should never ask; negative values are treated as zero. ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with the eighth + If set to OOnn, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and - prefixing an escape character (in effect, using escape as the - _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to + prefixing an escape character (in effect, using escape as the + _m_e_t_a _p_r_e_f_i_x). The default is _O_n, but readline will set it to _O_f_f if the locale contains eight-bit characters. ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) If set to OOnn, readline will inhibit word completion. Completion - characters will be inserted into the line as if they had been + characters will be inserted into the line as if they had been mapped to sseellff--iinnsseerrtt. eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) - When set to OOnn, on operating systems that indicate they support + When set to OOnn, on operating systems that indicate they support it, readline echoes a character corresponding to a signal gener- ated from the keyboard. eeddiittiinngg--mmooddee ((eemmaaccss)) @@ -3237,209 +3342,219 @@ RREEAADDLLIINNEE ilar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or vvii. eemmaaccss--mmooddee--ssttrriinngg ((@@)) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a - key binding, so the standard set of meta- and control prefixes - and backslash escape sequences is available. Use the \1 and \2 - escapes to begin and end sequences of non-printing characters, - which can be used to embed a terminal control sequence into the + key binding, so the standard set of meta- and control prefixes + and backslash escape sequences is available. Use the \1 and \2 + escapes to begin and end sequences of non-printing characters, + which can be used to embed a terminal control sequence into the mode string. + eennaabbllee--aaccttiivvee--rreeggiioonn ((OOnn)) + The _p_o_i_n_t is the current cursor position, and _m_a_r_k refers to a + saved cursor position. The text between the point and mark is + referred to as the _r_e_g_i_o_n. When this variable is set to _O_n, + readline allows certain commands to designate the region as _a_c_- + _t_i_v_e. When the region is active, readline highlights the text + in the region using the terminal's standout mode. The active + region shows the text inserted by bracketed-paste and any match- + ing text found by incremental and non-incremental history + searches. eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOnn)) - When set to OOnn, readline will configure the terminal in a way + When set to OOnn, readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each char- - acter as if it had been read from the keyboard. This can pre- - vent pasted characters from being interpreted as editing com- + acter as if it had been read from the keyboard. This can pre- + vent pasted characters from being interpreted as editing com- mands. eennaabbllee--kkeeyyppaadd ((OOffff)) When set to OOnn, readline will try to enable the application key- pad when it is called. Some systems need this to enable the ar- row keys. eennaabbllee--mmeettaa--kkeeyy ((OOnn)) - When set to OOnn, readline will try to enable any meta modifier - key the terminal claims to support when it is called. On many + When set to OOnn, readline will try to enable any meta modifier + key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. eexxppaanndd--ttiillddee ((OOffff)) - If set to OOnn, tilde expansion is performed when readline at- + If set to OOnn, tilde expansion is performed when readline at- tempts word completion. hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) - If set to OOnn, the history code attempts to place point at the - same location on each history line retrieved with pprreevviioouuss--hhiiss-- + If set to OOnn, the history code attempts to place point at the + same location on each history line retrieved with pprreevviioouuss--hhiiss-- ttoorryy or nneexxtt--hhiissttoorryy. hhiissttoorryy--ssiizzee ((uunnsseett)) - Set the maximum number of history entries saved in the history - list. If set to zero, any existing history entries are deleted + Set the maximum number of history entries saved in the history + list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, - the number of history entries is not limited. By default, the - number of history entries is set to the value of the HHIISSTTSSIIZZEE - shell variable. If an attempt is made to set _h_i_s_t_o_r_y_-_s_i_z_e to a + the number of history entries is not limited. By default, the + number of history entries is set to the value of the HHIISSTTSSIIZZEE + shell variable. If an attempt is made to set _h_i_s_t_o_r_y_-_s_i_z_e to a non-numeric value, the maximum number of history entries will be set to 500. hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line for display, + When set to OOnn, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it - becomes longer than the screen width rather than wrapping to a - new line. This setting is automatically enabled for terminals + becomes longer than the screen width rather than wrapping to a + new line. This setting is automatically enabled for terminals of height 1. iinnppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will enable eight-bit input (that is, it + If set to OOnn, readline will enable eight-bit input (that is, it will not strip the eighth bit from the characters it reads), re- - gardless of what the terminal claims it can support. The name - mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, - but readline will set it to _O_n if the locale contains eight-bit + gardless of what the terminal claims it can support. The name + mmeettaa--ffllaagg is a synonym for this variable. The default is _O_f_f, + but readline will set it to _O_n if the locale contains eight-bit characters. iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) - The string of characters that should terminate an incremental - search without subsequently executing the character as a com- - mand. If this variable has not been given a value, the charac- + The string of characters that should terminate an incremental + search without subsequently executing the character as a com- + mand. If this variable has not been given a value, the charac- ters _E_S_C and _C_-_J will terminate an incremental search. kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of valid keymap names - is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- - _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is - equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the + Set the current readline keymap. The set of valid keymap names + is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_- + _m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is + equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the value of eeddiittiinngg--mmooddee also affects the default keymap. kkeeyysseeqq--ttiimmeeoouutt ((550000)) - Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when - reading an ambiguous key sequence (one that can form a complete + Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when + reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional - input to complete a longer key sequence). If no input is re- - ceived within the timeout, _r_e_a_d_l_i_n_e will use the shorter but - complete key sequence. The value is specified in milliseconds, - so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for - additional input. If this variable is set to a value less than - or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait - until another key is pressed to decide which key sequence to + input to complete a longer key sequence). If no input is re- + ceived within the timeout, _r_e_a_d_l_i_n_e will use the shorter but + complete key sequence. The value is specified in milliseconds, + so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for + additional input. If this variable is set to a value less than + or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait + until another key is pressed to decide which key sequence to complete. mmaarrkk--ddiirreeccttoorriieess ((OOnn)) If set to OOnn, completed directory names have a slash appended. mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified are dis- + If set to OOnn, history lines that have been modified are dis- played with a preceding asterisk (**). mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) If set to OOnn, completed names which are symbolic links to direc- - tories have a slash appended (subject to the value of mmaarrkk--ddii-- + tories have a slash appended (subject to the value of mmaarrkk--ddii-- rreeccttoorriieess). mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) - This variable, when set to OOnn, causes readline to match files - whose names begin with a `.' (hidden files) when performing - filename completion. If set to OOffff, the leading `.' must be + This variable, when set to OOnn, causes readline to match files + whose names begin with a `.' (hidden files) when performing + filename completion. If set to OOffff, the leading `.' must be supplied by the user in the filename to be completed. mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) - If set to OOnn, menu completion displays the common prefix of the + If set to OOnn, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with the eighth + If set to OOnn, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is _O_f_f, but readline will set it to _O_n if the locale contains eight-bit characters. ppaaggee--ccoommpplleettiioonnss ((OOnn)) - If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- + If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- play a screenful of possible completions at a time. pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) - If set to OOnn, readline will display completions with matches - sorted horizontally in alphabetical order, rather than down the + If set to OOnn, readline will display completions with matches + sorted horizontally in alphabetical order, rather than down the screen. rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) - If set to OOnn, readline will undo all changes to history lines + If set to OOnn, readline will undo all changes to history lines before returning when aacccceepptt--lliinnee is executed. By default, his- - tory lines may be modified and retain individual undo lists + tory lines may be modified and retain individual undo lists across calls to rreeaaddlliinnee. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion functions. + This alters the default behavior of the completion functions. If set to OOnn, words which have more than one possible completion - cause the matches to be listed immediately instead of ringing + cause the matches to be listed immediately instead of ringing the bell. sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) - This alters the default behavior of the completion functions in + This alters the default behavior of the completion functions in a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words - which have more than one possible completion without any possi- - ble partial completion (the possible completions don't share a - common prefix) cause the matches to be listed immediately in- + which have more than one possible completion without any possi- + ble partial completion (the possible completions don't share a + common prefix) cause the matches to be listed immediately in- stead of ringing the bell. sshhooww--mmooddee--iinn--pprroommpptt ((OOffff)) - If set to OOnn, add a string to the beginning of the prompt indi- - cating the editing mode: emacs, vi command, or vi insertion. + If set to OOnn, add a string to the beginning of the prompt indi- + cating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., _e_m_a_c_s_-_m_o_d_e_-_s_t_r_i_n_g). sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) - If set to OOnn, this alters the default completion behavior when - inserting a single match into the line. It's only active when - performing completion in the middle of a word. If enabled, - readline does not insert characters from the completion that - match characters after point in the word being completed, so + If set to OOnn, this alters the default completion behavior when + inserting a single match into the line. It's only active when + performing completion in the middle of a word. If enabled, + readline does not insert characters from the completion that + match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd)))) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt - when vi editing mode is active and in command mode. The value + 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. vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss)))) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and - control prefixes and backslash escape sequences is available. - Use the \1 and \2 escapes to begin and end sequences of non- - printing characters, which can be used to embed a terminal con- + control prefixes and backslash escape sequences is available. + Use the \1 and \2 escapes to begin and end sequences of non- + printing characters, which can be used to embed a terminal con- trol sequence into the mode string. vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as reported by - _s_t_a_t(2) is appended to the filename when listing possible com- + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible com- pletions. RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the conditional - compilation features of the C preprocessor which allows key bindings - and variable settings to be performed as the result of tests. There + Readline implements a facility similar in spirit to the conditional + compilation features of the C preprocessor which allows key bindings + and variable settings to be performed as the result of tests. There are four parser directives used. - $$iiff The $$iiff construct allows bindings to be made based on the edit- - ing mode, the terminal being used, or the application using + $$iiff The $$iiff construct allows bindings to be made based on the edit- + ing mode, the terminal being used, or the application using readline. The text of the test, after any comparison operator, - extends to the end of the line; unless otherwise noted, no + extends to the end of the line; unless otherwise noted, no characters are required to isolate it. - mmooddee The mmooddee== form of the $$iiff directive is used to test - whether readline is in emacs or vi mode. This may be - used in conjunction with the sseett kkeeyymmaapp command, for in- - stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and - _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in + mmooddee The mmooddee== form of the $$iiff directive is used to test + whether readline is in emacs or vi mode. This may be + used in conjunction with the sseett kkeeyymmaapp command, for in- + stance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and + _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in emacs mode. - tteerrmm The tteerrmm== form may be used to include terminal-specific + tteerrmm The tteerrmm== form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the == is tested against both the full name of the ter- - minal and the portion of the terminal name before the - first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, + minal and the portion of the terminal name before the + first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, for instance. vveerrssiioonn - The vveerrssiioonn test may be used to perform comparisons - against specific readline versions. The vveerrssiioonn expands - to the current readline version. The set of comparison - operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>. - The version number supplied on the right side of the op- - erator consists of a major version number, an optional + The vveerrssiioonn test may be used to perform comparisons + against specific readline versions. The vveerrssiioonn expands + to the current readline version. The set of comparison + operators includes ==, (and ====), !!==, <<==, >>==, <<, and >>. + The version number supplied on the right side of the op- + erator consists of a major version number, an optional decimal point, and an optional minor version (e.g., 77..11). - If the minor version is omitted, it is assumed to be 00. + If the minor version is omitted, it is assumed to be 00. The operator may be separated from the string vveerrssiioonn and from the version number argument by whitespace. aapppplliiccaattiioonn The aapppplliiccaattiioonn construct is used to include application- - specific settings. Each program using the readline li- - brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization + specific settings. Each program using the readline li- + brary sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization file can test for a particular value. This could be used - to bind key sequences to functions useful for a specific - program. For instance, the following command adds a key - sequence that quotes the current or previous word in + to bind key sequences to functions useful for a specific + program. For instance, the following command adds a key + sequence that quotes the current or previous word in bbaasshh: $$iiff Bash @@ -3449,12 +3564,12 @@ RREEAADDLLIINNEE _v_a_r_i_a_b_l_e The _v_a_r_i_a_b_l_e construct provides simple equality tests for - readline variables and values. The permitted comparison - operators are _=, _=_=, and _!_=. The variable name must be + readline variables and values. The permitted comparison + operators are _=, _=_=, and _!_=. The variable name must be separated from the comparison operator by whitespace; the - operator may be separated from the value on the right - hand side by whitespace. Both string and boolean vari- - ables may be tested. Boolean variables must be tested + operator may be separated from the value on the right + hand side by whitespace. Both string and boolean vari- + ables may be tested. Boolean variables must be tested against the values _o_n and _o_f_f. $$eennddiiff This command, as seen in the previous example, terminates an $$iiff @@ -3464,51 +3579,51 @@ RREEAADDLLIINNEE test fails. $$iinncclluuddee - 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 _/_e_t_c_/_i_n_p_u_t_r_c: $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c SSeeaarrcchhiinngg - Readline provides commands for searching through the command history + Readline provides commands for searching through the command history (see HHIISSTTOORRYY below) for lines containing a specified string. There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. - Incremental searches begin before the user has finished typing the - search string. As each character of the search string is typed, read- + Incremental searches begin before the user has finished typing the + search string. As each character of the search string is typed, read- line displays the next entry from the history matching the string typed - so far. An incremental search requires only as many characters as - needed to find the desired history entry. The characters present in - the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an + so far. An incremental search requires only as many characters as + needed to find the desired history entry. The characters present in + the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental search. If that variable has not been assigned a value the - Escape and Control-J characters will terminate an incremental search. - Control-G will abort an incremental search and restore the original - line. When the search is terminated, the history entry containing the + Escape and Control-J characters will terminate an incremental search. + Control-G will abort an incremental search and restore the original + line. When the search is terminated, the history entry containing the search string becomes the current line. - To find other matching entries in the history list, type Control-S or - Control-R as appropriate. This will search backward or forward in the - history for the next entry matching the search string typed so far. - Any other key sequence bound to a readline command will terminate the - search and execute that command. For instance, a _n_e_w_l_i_n_e will termi- + To find other matching entries in the history list, type Control-S or + Control-R as appropriate. This will search backward or forward in the + history for the next entry matching the search string typed so far. + Any other key sequence bound to a readline command will terminate the + search and execute that command. For instance, a _n_e_w_l_i_n_e will termi- nate the search and accept the line, thereby executing the command from the history list. Readline remembers the last incremental search string. If two Control- - Rs are typed without any intervening characters defining a new search + 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. RReeaaddlliinnee CCoommmmaanndd NNaammeess - 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, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to - a cursor position saved by the sseett--mmaarrkk command. The text between the + tions, _p_o_i_n_t refers to the current cursor position, and _m_a_r_k refers to + a cursor position saved by the sseett--mmaarrkk command. The text between the point and mark is referred to as the _r_e_g_i_o_n. CCoommmmaannddss ffoorr MMoovviinngg @@ -3524,33 +3639,33 @@ RREEAADDLLIINNEE Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of the current or previous word. Words + Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). sshheellll--ffoorrwwaarrdd--wwoorrdd - Move forward to the end of the next word. Words are delimited + Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. sshheellll--bbaacckkwwaarrdd--wwoorrdd - Move back to the start of the current or previous word. Words + Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. pprreevviioouuss--ssccrreeeenn--lliinnee - Attempt to move point to the same physical screen column on the - previous physical screen line. This will not have the desired - effect if the current Readline line does not take up more than - one physical line or if point is not greater than the length of + Attempt to move point to the same physical screen column on the + previous physical screen line. This will not have the desired + effect if the current Readline line does not take up more than + one physical line or if point is not greater than the length of the prompt plus the screen width. nneexxtt--ssccrreeeenn--lliinnee - Attempt to move point to the same physical screen column on the + 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. cclleeaarr--ddiissppllaayy ((MM--CC--ll)) - Clear the screen and, if possible, the terminal's scrollback - buffer, then redraw the current line, leaving the current line + Clear the screen and, if possible, the terminal's scrollback + buffer, then redraw the current line, leaving the current line at the top of the screen. cclleeaarr--ssccrreeeenn ((CC--ll)) Clear the screen, then redraw the current line, leaving the cur- - rent line at the top of the screen. With an argument, refresh + rent line at the top of the screen. With an argument, refresh the current line without clearing the screen. rreeddrraaww--ccuurrrreenntt--lliinnee Refresh the current line. @@ -3558,20 +3673,29 @@ RREEAADDLLIINNEE CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) Accept the line regardless of where the cursor is. If this line - is non-empty, add it to the history list according to the state - of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history + is non-empty, add it to the history list according to the state + of the HHIISSTTCCOONNTTRROOLL variable. If the line is a modified history line, then restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) Fetch the previous command from the history list, moving back in the list. nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, moving forward in + Fetch the next command from the history list, moving forward in the list. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. eenndd--ooff--hhiissttoorryy ((MM-->>)) - Move to the end of the input history, i.e., the line currently + Move to the end of the input history, i.e., the line currently being entered. + ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) + Accept the current line for execution and fetch the next line + relative to the current line from the history for editing. A + numeric argument, if supplied, specifies the history entry to + use instead of the current line. + ffeettcchh--hhiissttoorryy + With a numeric argument, fetch that entry from the history list + and make it the current line. Without an argument, move back to + the first entry in the history list. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental @@ -3643,67 +3767,62 @@ RREEAADDLLIINNEE Perform history and alias expansion on the current line. iinnsseerrtt--llaasstt--aarrgguummeenntt ((MM--..,, MM--__)) A synonym for yyaannkk--llaasstt--aarrgg. - ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) - Accept the current line for execution and fetch the next line - relative to the current line from the history for editing. A - numeric argument, if supplied, specifies the history entry to - use instead of the current line. eeddiitt--aanndd--eexxeeccuuttee--ccoommmmaanndd ((CC--xx CC--ee)) - Invoke an editor on the current command line, and execute the + Invoke an editor on the current command line, and execute the result as shell commands. BBaasshh attempts to invoke $$VVIISSUUAALL, $$EEDD-- IITTOORR, and _e_m_a_c_s as the editor, in that order. CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt _e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd)) - The character indicating end-of-file as set, for example, by - ``stty''. If this character is read when there are no charac- - ters on the line, and point is at the beginning of the line, + The character indicating end-of-file as set, for example, by + ``stty''. If this character is read when there are no charac- + ters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EEOOFF. ddeelleettee--cchhaarr ((CC--dd)) Delete the character at point. If this function is bound to the same character as the tty EEOOFF character, as CC--dd commonly is, see above for the effects. bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given a numeric + Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr - Delete the character under the cursor, unless the cursor is at + Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cur- sor is deleted. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character typed to the line verbatim. This is how + Add the next character typed to the line verbatim. This is how to insert characters like CC--qq, for example. ttaabb--iinnsseerrtt ((CC--vv TTAABB)) Insert a tab character. sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) Insert the character typed. ttrraannssppoossee--cchhaarrss ((CC--tt)) - Drag the character before point forward over the character at - point, moving point forward as well. If point is at the end of - the line, then this transposes the two characters before point. + Drag the character before point forward over the character at + point, moving point forward as well. If point is at the end of + the line, then this transposes the two characters before point. Negative arguments have no effect. ttrraannssppoossee--wwoorrddss ((MM--tt)) - Drag the word before point past the word after point, moving - point over that word as well. If point is at the end of the + Drag the word before point past the word after point, moving + point over that word as well. If point is at the end of the line, this transposes the last two words on the line. uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a negative ar- + Uppercase the current (or following) word. With a negative ar- gument, uppercase the previous word, but do not move point. ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a negative ar- + Lowercase the current (or following) word. With a negative ar- gument, lowercase the previous word, but do not move point. ccaappiittaalliizzee--wwoorrdd ((MM--cc)) Capitalize the current (or following) word. With a negative ar- gument, capitalize the previous word, but do not move point. oovveerrwwrriittee--mmooddee - Toggle overwrite mode. With an explicit positive numeric argu- + Toggle overwrite mode. With an explicit positive numeric argu- ment, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects - only eemmaaccss mode; vvii mode does overwrite differently. Each call + only eemmaaccss mode; vvii mode does overwrite differently. Each call to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- - ters bound to sseellff--iinnsseerrtt replace the text at point rather than - pushing the text to the right. Characters bound to bbaacckk-- - wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a + ters bound to sseellff--iinnsseerrtt replace the text at point rather than + pushing the text to the right. Characters bound to bbaacckk-- + wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a space. By default, this command is unbound. KKiilllliinngg aanndd YYaannkkiinngg @@ -3712,31 +3831,31 @@ RREEAADDLLIINNEE bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) Kill backward to the beginning of the line. uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the line. The + Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter where point + Kill all characters on the current line, no matter where point is. kkiillll--wwoorrdd ((MM--dd)) - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same as those used by ffoorrwwaarrdd--wwoorrdd. bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind point. Word boundaries are the same as + Kill the word behind point. Word boundaries are the same as those used by bbaacckkwwaarrdd--wwoorrdd. sshheellll--kkiillll--wwoorrdd - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the + Kill from point to the end of the current word, or if between + words, to the end of the next word. Word boundaries are the same as those used by sshheellll--ffoorrwwaarrdd--wwoorrdd. sshheellll--bbaacckkwwaarrdd--kkiillll--wwoorrdd - Kill the word behind point. Word boundaries are the same as + Kill the word behind point. Word boundaries are the same as those used by sshheellll--bbaacckkwwaarrdd--wwoorrdd. uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind point, using white space as a word bound- + Kill the word behind point, using white space as a word bound- ary. The killed text is saved on the kill-ring. uunniixx--ffiilleennaammee--rruubboouutt - Kill the word behind point, using white space and the slash - character as the word boundaries. The killed text is saved on + Kill the word behind point, using white space and the slash + character as the word boundaries. The killed text is saved on the kill-ring. ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) Delete all spaces and tabs around point. @@ -3745,64 +3864,64 @@ RREEAADDLLIINNEE ccooppyy--rreeggiioonn--aass--kkiillll Copy the text in the region to the kill buffer. ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. The word bound- + Copy the word before point to the kill buffer. The word bound- aries are the same as bbaacckkwwaarrdd--wwoorrdd. ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. The word + Copy the word following point to the kill buffer. The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. yyaannkk ((CC--yy)) Yank the top of the kill ring into the buffer at point. yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only works follow- + Rotate the kill ring, and yank the new top. Only works follow- ing yyaannkk or yyaannkk--ppoopp. NNuummeerriicc AArrgguummeennttss ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulating, or start a + Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument. uunniivveerrssaall--aarrgguummeenntt - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is fol- + This is another way to specify an argument. If this command is + followed by one or more digits, optionally with a leading minus + sign, those digits define the argument. If the command is fol- lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the nu- meric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is nei- - ther a digit nor minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argu- + ther a digit nor minus sign, the argument count for the next + command is multiplied by four. The argument count is initially + one, so executing this function the first time makes the argu- ment count four, a second time makes the argument count sixteen, and so on. CCoommpplleettiinngg ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before point. BBaasshh + Attempt to perform completion on the text before point. BBaasshh attempts completion treating the text as a variable (if the text - begins with $$), username (if the text begins with ~~), hostname - (if the text begins with @@), or command (including aliases and + begins with $$), username (if the text begins with ~~), hostname + (if the text begins with @@), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) List the possible completions of the text before point. iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point that would have + Insert all completions of the text before point that would have been generated by ppoossssiibbllee--ccoommpplleettiioonnss. mmeennuu--ccoommpplleettee - Similar to ccoommpplleettee, but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of mmeennuu--ccoommpplleettee steps through the list of possible - completions, inserting each match in turn. At the end of the + Similar to ccoommpplleettee, but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of mmeennuu--ccoommpplleettee steps through the list of possible + completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bbeellll--ssttyyllee) and the original text is restored. An argument of _n moves _n positions forward in the list of matches; a negative ar- gument may be used to move backward through the list. This com- mand is intended to be bound to TTAABB, but is unbound by default. mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd - Identical to mmeennuu--ccoommpplleettee, but moves backward through the list - of possible completions, as if mmeennuu--ccoommpplleettee had been given a + Identical to mmeennuu--ccoommpplleettee, but moves backward through the list + of possible completions, as if mmeennuu--ccoommpplleettee had been given a negative argument. This command is unbound by default. ddeelleettee--cchhaarr--oorr--lliisstt - Deletes the character under the cursor if not at the beginning - or end of the line (like ddeelleettee--cchhaarr). If at the end of the + Deletes the character under the cursor if not at the beginning + or end of the line (like ddeelleettee--cchhaarr). If at the end of the line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. This command is unbound by default. ccoommpplleettee--ffiilleennaammee ((MM--//)) @@ -3811,67 +3930,67 @@ RREEAADDLLIINNEE List the possible completions of the text before point, treating it as a filename. ccoommpplleettee--uusseerrnnaammee ((MM--~~)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a username. ppoossssiibbllee--uusseerrnnaammee--ccoommpplleettiioonnss ((CC--xx ~~)) List the possible completions of the text before point, treating it as a username. ccoommpplleettee--vvaarriiaabbllee ((MM--$$)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a shell variable. ppoossssiibbllee--vvaarriiaabbllee--ccoommpplleettiioonnss ((CC--xx $$)) List the possible completions of the text before point, treating it as a shell variable. ccoommpplleettee--hhoossttnnaammee ((MM--@@)) - Attempt completion on the text before point, treating it as a + Attempt completion on the text before point, treating it as a hostname. ppoossssiibbllee--hhoossttnnaammee--ccoommpplleettiioonnss ((CC--xx @@)) List the possible completions of the text before point, treating it as a hostname. ccoommpplleettee--ccoommmmaanndd ((MM--!!)) - Attempt completion on the text before point, treating it as a - command name. Command completion attempts to match the text - against aliases, reserved words, shell functions, shell + Attempt completion on the text before point, treating it as a + command name. Command completion attempts to match the text + against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order. ppoossssiibbllee--ccoommmmaanndd--ccoommpplleettiioonnss ((CC--xx !!)) List the possible completions of the text before point, treating it as a command name. ddyynnaammiicc--ccoommpplleettee--hhiissttoorryy ((MM--TTAABB)) - Attempt completion on the text before point, comparing the text - against lines from the history list for possible completion + Attempt completion on the text before point, comparing the text + against lines from the history list for possible completion matches. ddaabbbbrreevv--eexxppaanndd - Attempt menu completion on the text before point, comparing the + Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. ccoommpplleettee--iinnttoo--bbrraacceess ((MM--{{)) Perform filename completion and insert the list of possible com- - pletions enclosed within braces so the list is available to the + pletions enclosed within braces so the list is available to the shell (see BBrraaccee EExxppaannssiioonn above). KKeeyybbooaarrdd MMaaccrrooss ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current keyboard + Begin saving the characters typed into the current keyboard macro. eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) Stop saving the characters typed into the current keyboard macro and store the definition. ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by making the char- + Re-execute the last keyboard macro defined, by making the char- acters in the macro appear as if typed at the keyboard. pprriinntt--llaasstt--kkbbdd--mmaaccrroo (()) - Print the last keyboard macro defined in a format suitable for + Print the last keyboard macro defined in a format suitable for the _i_n_p_u_t_r_c file. MMiisscceellllaanneeoouuss rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) - Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any + Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any bindings or variable assignments found there. aabboorrtt ((CC--gg)) - Abort the current editing command and ring the terminal's bell + Abort the current editing command and ring the terminal's bell (subject to the setting of bbeellll--ssttyyllee). ddoo--lloowweerrccaassee--vveerrssiioonn ((MM--AA,, MM--BB,, MM--_x,, ......)) - If the metafied character _x is uppercase, run the command that + If the metafied character _x is uppercase, run the command that is bound to the corresponding metafied lowercase character. The behavior is undefined if _x is already lowercase. pprreeffiixx--mmeettaa ((EESSCC)) @@ -3879,46 +3998,51 @@ RREEAADDLLIINNEE uunnddoo ((CC--__,, CC--xx CC--uu)) Incremental undo, separately remembered for each line. rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like executing the - uunnddoo command enough times to return the line to its initial + Undo all changes made to this line. This is like executing the + uunnddoo command enough times to return the line to its initial state. ttiillddee--eexxppaanndd ((MM--&&)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) - 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. eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor position is - set to the saved position, and the old cursor position is saved + Swap the point with the mark. The current cursor position is + set to the saved position, and the old cursor position is saved as the mark. cchhaarraacctteerr--sseeaarrcchh ((CC--]])) A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous occur- + that character. A negative count searches for previous occur- rences. cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) - A character is read and point is moved to the previous occur- - rence of that character. A negative count searches for subse- + A character is read and point is moved to the previous occur- + rence of that character. A negative count searches for subse- quent occurrences. sskkiipp--ccssii--sseeqquueennccee - Read enough characters to consume a multi-key sequence such as - those defined for keys like Home and End. Such sequences begin + 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-[. iinnsseerrtt--ccoommmmeenntt ((MM--##)) - Without a numeric argument, the value of the readline ccoomm-- - mmeenntt--bbeeggiinn variable is inserted at the beginning of the current + Without a numeric argument, the value of the readline ccoomm-- + mmeenntt--bbeeggiinn variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a - toggle: if the characters at the beginning of the line do not - match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- + toggle: if the characters at the beginning of the line do not + match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- - ning of the line. In either case, the line is accepted as if a - newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn - causes this command to make the current line a shell comment. - If a numeric argument causes the comment character to be re- + ning of the line. In either case, the line is accepted as if a + newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn + causes this command to make the current line a shell comment. + If a numeric argument causes the comment character to be re- moved, the line will be executed by the shell. + ssppeellll--ccoorrrreecctt--wwoorrdd ((CC--xx ss)) + Perform spelling correction on the current word, treating it as + a directory or filename, in the same way as the ccddssppeellll shell + option. Word boundaries are the same as those used by + sshheellll--ffoorrwwaarrdd--wwoorrdd. gglloobb--ccoommpplleettee--wwoorrdd ((MM--gg)) The word before point is treated as a pattern for pathname ex- pansion, with an asterisk implicitly appended. This pattern is @@ -4295,21 +4419,21 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS vironment and return the exit status of the last command exe- cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, filenames in PPAATTHH are used to find the directory containing - _f_i_l_e_n_a_m_e. The file searched for in PPAATTHH need not be executable. - When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is - searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option - to the sshhoopptt builtin command is turned off, the PPAATTHH is not - searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi- - tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the po- - sitional parameters are unchanged. If the --TT option is enabled, - ssoouurrccee inherits any trap on DDEEBBUUGG; if it is not, any DDEEBBUUGG trap - string is saved and restored around the call to ssoouurrccee, and - ssoouurrccee unsets the DDEEBBUUGG trap while it executes. If --TT is not - set, and the sourced file changes the DDEEBBUUGG trap, the new value - is retained when ssoouurrccee completes. The return status is the - status of the last command exited within the script (0 if no - commands are executed), and false if _f_i_l_e_n_a_m_e is not found or - cannot be read. + _f_i_l_e_n_a_m_e, but _f_i_l_e_n_a_m_e does not need to be executable. The file + searched for in PPAATTHH need not be executable. When bbaasshh is not + in _p_o_s_i_x _m_o_d_e, the current directory is searched if no file is + found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin + command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- + _m_e_n_t_s are supplied, they become the positional parameters when + _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are + unchanged. If the --TT option is enabled, .. inherits any trap on + DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored + around the call to .., and .. unsets the DDEEBBUUGG trap while it exe- + cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG + trap, the new value is retained when .. completes. The return + status is the status of the last command exited within the + script (0 if no commands are executed), and false if _f_i_l_e_n_a_m_e is + not found or cannot be read. aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] AAlliiaass with no arguments or with the --pp option prints the list of @@ -4336,29 +4460,31 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d + bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e Display current rreeaaddlliinnee key and function bindings, bind a key sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee variable. Each non-option argument is a command as it would ap- - pear in _._i_n_p_u_t_r_c, but each binding or command must be passed as - a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. Op- - tions, if supplied, have the following meanings: + pear in a rreeaaddlliinnee initialization file such as _._i_n_p_u_t_r_c, but + each binding or command must be passed as a separate argument; + e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, + have the following meanings: --mm _k_e_y_m_a_p Use _k_e_y_m_a_p as the keymap to be affected by the subsequent bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- - _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, - and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e - is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e + is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- _d_a_r_d. --ll List the names of all rreeaaddlliinnee functions. - --pp Display rreeaaddlliinnee function names and bindings in such a + --pp Display rreeaaddlliinnee function names and bindings in such a way that they can be re-read. --PP List current rreeaaddlliinnee function names and bindings. - --ss Display rreeaaddlliinnee key sequences bound to macros and the - strings they output in such a way that they can be re- + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- read. - --SS Display rreeaaddlliinnee key sequences bound to macros and the + --SS Display rreeaaddlliinnee key sequences bound to macros and the strings they output. - --vv Display rreeaaddlliinnee variable names and values in such a way + --vv Display rreeaaddlliinnee variable names and values in such a way that they can be re-read. --VV List current rreeaaddlliinnee variable names and values. --ff _f_i_l_e_n_a_m_e @@ -4371,14 +4497,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Remove any current binding for _k_e_y_s_e_q. --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en- - tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets - the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- + tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets + the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK - variables to the current location of the insertion point - and the saved insertion point (the mark), respectively. - If the executed command changes the value of any of RREEAADD-- - LLIINNEE__LLIINNEE, RREEAADDLLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, 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 RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu- + ment, that variable is not set. If the executed command + changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD-- + LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be + reflected in the editing state. --XX List all key sequences bound to shell commands and the associated commands in a format that can be reused as in- put. @@ -4416,137 +4545,140 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r] Change the current directory to _d_i_r. if _d_i_r is not supplied, - the value of the HHOOMMEE shell variable is the default. Any addi- - tional arguments following _d_i_r are ignored. The variable CCDDPPAATTHH - defines the search path for the directory containing _d_i_r: each - directory name in CCDDPPAATTHH is searched for _d_i_r. Alternative di- - rectory names in CCDDPPAATTHH are separated by a colon (:). A null - directory name in CCDDPPAATTHH is the same as the current directory, - i.e., ``..''. If _d_i_r begins with a slash (/), then CCDDPPAATTHH is not - used. The --PP option causes ccdd to use the physical directory - structure by resolving symbolic links while traversing _d_i_r and - before processing instances of _._. in _d_i_r (see also the --PP option - to the sseett builtin command); the --LL option forces symbolic links - to be followed by resolving the link after processing instances - of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing - the immediately previous pathname component from _d_i_r, back to a - slash or the beginning of _d_i_r. If the --ee option is supplied - with --PP, and the current working directory cannot be success- - fully determined after a successful directory change, ccdd will - return an unsuccessful status. On systems that support it, the - --@@ option presents the extended attributes associated with a - file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD - before the directory change is attempted. If a non-empty direc- - tory name from CCDDPPAATTHH is used, or if -- is the first argument, - and the directory change is successful, the absolute pathname of - the new working directory is written to the standard output. - The return value is true if the directory was successfully - changed; false otherwise. + the value of the HHOOMMEE shell variable is the default. The vari- + able CCDDPPAATTHH defines the search path for the directory containing + _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter- + native directory names in CCDDPPAATTHH are separated by a colon (:). + A null directory name in CCDDPPAATTHH is the same as the current di- + rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD-- + PPAATTHH is not used. The --PP option causes ccdd to use the physical + directory structure by resolving symbolic links while traversing + _d_i_r and before processing instances of _._. in _d_i_r (see also the + --PP option to the sseett builtin command); the --LL option forces sym- + bolic links to be followed by resolving the link after process- + ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro- + cessed by removing the immediately previous pathname component + from _d_i_r, back to a slash or the beginning of _d_i_r. If the --ee + option is supplied with --PP, and the current working directory + cannot be successfully determined after a successful directory + change, ccdd will return an unsuccessful status. On systems that + support it, the --@@ option presents the extended attributes asso- + ciated with a file as a directory. An argument of -- is con- + verted to $$OOLLDDPPWWDD before the directory change is attempted. If + a non-empty directory name from CCDDPPAATTHH is used, or if -- is the + first argument, and the directory change is successful, the ab- + solute pathname of the new working directory is written to the + standard output. If the directory change is successful, ccdd sets + the value of the PPWWDD environment variable to the new directory + name, and sets the OOLLDDPPWWDD environment variable to the value of + the current working directory before the change. The return + value is true if the directory was successfully changed; false + otherwise. ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] - Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function + Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function lookup. Only builtin commands or commands found in the PPAATTHH are - executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is - performed using a default value for PPAATTHH that is guaranteed to - find all of the standard utilities. If either the --VV or --vv op- - tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv - option causes a single word indicating the command or filename + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv op- + tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or filename used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a - more verbose description. If the --VV or --vv option is supplied, - the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If + more verbose description. If the --VV or --vv option is supplied, + the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- - not be found, the exit status is 127. Otherwise, the exit sta- + not be found, the exit status is 127. Otherwise, the exit sta- tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] - Generate possible completion matches for _w_o_r_d according to the - _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee - builtin with the exception of --pp and --rr, and write the matches - to the standard output. When using the --FF or --CC options, the - various shell variables set by the programmable completion fa- + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exception of --pp and --rr, and write the matches + to the standard output. When using the --FF or --CC options, the + various shell variables set by the programmable completion fa- cilities, while available, will not have useful values. The matches will be generated in the same way as if the program- mable completion code had generated them directly from a comple- - tion specification with the same flags. If _w_o_r_d is specified, + tion specification with the same flags. If _w_o_r_d is specified, only those completions matching _w_o_r_d will be displayed. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, or no matches were generated. - ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- _p_a_t] [--WW _w_o_r_d_l_i_s_t] - [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- + [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- _f_i_x] _n_a_m_e [_n_a_m_e _._._.] ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...] - Specify how arguments to each _n_a_m_e should be completed. If the - --pp option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them + Specify how arguments to each _n_a_m_e should be completed. If the + --pp option is supplied, or if no options are supplied, existing + completion specifications are printed in a way that allows them to be reused as input. The --rr option removes a completion spec- - ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- + ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- pletion specifications. The --DD option indicates that other sup- - plied options and actions should apply to the ``default'' com- - mand completion; that is, completion attempted on a command for - which no completion has previously been defined. The --EE option - indicates that other supplied options and actions should apply - to ``empty'' command completion; that is, completion attempted - on a blank line. The --II option indicates that other supplied - options and actions should apply to completion on the initial - non-assignment word on the line, or after a command delimiter - such as ;; or ||, which is usually command name completion. If - multiple options are supplied, the --DD option takes precedence + plied options and actions should apply to the ``default'' com- + mand completion; that is, completion attempted on a command for + which no completion has previously been defined. The --EE option + indicates that other supplied options and actions should apply + to ``empty'' command completion; that is, completion attempted + on a blank line. The --II option indicates that other supplied + options and actions should apply to completion on the initial + non-assignment word on the line, or after a command delimiter + such as ;; or ||, which is usually command name completion. If + multiple options are supplied, the --DD option takes precedence over --EE, and both take precedence over --II. If any of --DD, --EE, or - --II are supplied, any other _n_a_m_e arguments are ignored; these + --II are supplied, any other _n_a_m_e arguments are ignored; these completions only apply to the case specified by the option. - The process of applying these completion specifications when - word completion is attempted is described above under PPrrooggrraamm-- + The process of applying these completion specifications when + word completion is attempted is described above under PPrrooggrraamm-- mmaabbllee CCoommpplleettiioonn. - Other options, if specified, have the following meanings. The - arguments to the --GG, --WW, and --XX options (and, if necessary, the - --PP and --SS options) should be quoted to protect them from expan- + Other options, if specified, have the following meanings. The + arguments to the --GG, --WW, and --XX options (and, if necessary, the + --PP and --SS options) should be quoted to protect them from expan- sion before the ccoommpplleettee builtin is invoked. --oo _c_o_m_p_-_o_p_t_i_o_n - The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- - spec's behavior beyond the simple generation of comple- + The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- + spec's behavior beyond the simple generation of comple- tions. _c_o_m_p_-_o_p_t_i_o_n may be one of: bbaasshhddeeffaauulltt Perform the rest of the default bbaasshh completions if the compspec generates no matches. - ddeeffaauulltt Use readline's default filename completion if + ddeeffaauulltt Use readline's default filename completion if the compspec generates no matches. ddiirrnnaammeess - Perform directory name completion if the comp- + Perform directory name completion if the comp- spec generates no matches. ffiilleennaammeess - Tell readline that the compspec generates file- - names, so it can perform any filename-specific - processing (like adding a slash to directory - names, quoting special characters, or suppress- - ing trailing spaces). Intended to be used with + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with shell functions. - nnooqquuoottee Tell readline not to quote the completed words - if they are filenames (quoting filenames is the + nnooqquuoottee Tell readline not to quote the completed words + if they are filenames (quoting filenames is the default). - nnoossoorrtt Tell readline not to sort the list of possible + nnoossoorrtt Tell readline not to sort the list of possible completions alphabetically. - nnoossppaaccee Tell readline not to append a space (the de- - fault) to words completed at the end of the + nnoossppaaccee Tell readline not to append a space (the de- + fault) to words completed at the end of the line. pplluussddiirrss - After any matches defined by the compspec are + After any matches defined by the compspec are generated, directory name completion is at- tempted and any matches are added to the results of the other actions. --AA _a_c_t_i_o_n - The _a_c_t_i_o_n may be one of the following to generate a + The _a_c_t_i_o_n may be one of the following to generate a list of possible completions: aalliiaass Alias names. May also be specified as --aa. aarrrraayyvvaarr Array variable names. bbiinnddiinngg RReeaaddlliinnee key binding names. - bbuuiillttiinn Names of shell builtin commands. May also be + bbuuiillttiinn Names of shell builtin commands. May also be specified as --bb. ccoommmmaanndd Command names. May also be specified as --cc. ddiirreeccttoorryy @@ -4554,7 +4686,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ddiissaabblleedd Names of disabled shell builtins. eennaabblleedd Names of enabled shell builtins. - eexxppoorrtt Names of exported shell variables. May also be + eexxppoorrtt Names of exported shell variables. May also be specified as --ee. ffiillee File names. May also be specified as --ff. ffuunnccttiioonn @@ -4563,17 +4695,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hheellppttooppiicc Help topics as accepted by the hheellpp builtin. hhoossttnnaammee - Hostnames, as taken from the file specified by + Hostnames, as taken from the file specified by the HHOOSSTTFFIILLEE shell variable. - jjoobb Job names, if job control is active. May also + jjoobb Job names, if job control is active. May also be specified as --jj. - kkeeyywwoorrdd Shell reserved words. May also be specified as + kkeeyywwoorrdd Shell reserved words. May also be specified as --kk. rruunnnniinngg Names of running jobs, if job control is active. sseerrvviiccee Service names. May also be specified as --ss. - sseettoopptt Valid arguments for the --oo option to the sseett + sseettoopptt Valid arguments for the --oo option to the sseett builtin. - sshhoopptt Shell option names as accepted by the sshhoopptt + sshhoopptt Shell option names as accepted by the sshhoopptt builtin. ssiiggnnaall Signal names. ssttooppppeedd Names of stopped jobs, if job control is active. @@ -4582,197 +4714,197 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Names of all shell variables. May also be spec- ified as --vv. --CC _c_o_m_m_a_n_d - _c_o_m_m_a_n_d is executed in a subshell environment, and its + _c_o_m_m_a_n_d is executed in a subshell environment, and its output is used as the possible completions. --FF _f_u_n_c_t_i_o_n - The shell function _f_u_n_c_t_i_o_n is executed in the current - shell environment. When the function is executed, the + The shell function _f_u_n_c_t_i_o_n is executed in the current + shell environment. When the function is executed, the first argument ($$11) is the name of the command whose ar- guments are being completed, the second argument ($$22) is the word being completed, and the third argument ($$33) is - the word preceding the word being completed on the cur- - rent command line. When it finishes, the possible com- - pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + the word preceding the word being completed on the cur- + rent command line. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY array variable. --GG _g_l_o_b_p_a_t - The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to generate the possible completions. --PP _p_r_e_f_i_x - _p_r_e_f_i_x is added at the beginning of each possible com- + _p_r_e_f_i_x is added at the beginning of each possible com- pletion after all other options have been applied. --SS _s_u_f_f_i_x _s_u_f_f_i_x is appended to each possible completion after all other options have been applied. --WW _w_o_r_d_l_i_s_t - The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS - special variable as delimiters, and each resultant word - is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, + The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS + special variable as delimiters, and each resultant word + is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, in order to provide a mechanism for the words to contain - shell metacharacters or characters in the value of IIFFSS. - The possible completions are the members of the resul- + shell metacharacters or characters in the value of IIFFSS. + The possible completions are the members of the resul- tant list which match the word being completed. --XX _f_i_l_t_e_r_p_a_t - _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. It is applied to the list of possible completions gener- - ated by the preceding options and arguments, and each - completion matching _f_i_l_t_e_r_p_a_t is removed from the list. - A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this + ated by the preceding options and arguments, and each + completion matching _f_i_l_t_e_r_p_a_t is removed from the list. + A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. - The return value is true unless an invalid option is supplied, - an option other than --pp or --rr is supplied without a _n_a_m_e argu- - ment, an attempt is made to remove a completion specification + The return value is true unless an invalid option is supplied, + an option other than --pp or --rr is supplied without a _n_a_m_e argu- + ment, an attempt is made to remove a completion specification for a _n_a_m_e for which no specification exists, or an error occurs adding a completion specification. ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e] - Modify completion options for each _n_a_m_e according to the _o_p_- + Modify completion options for each _n_a_m_e according to the _o_p_- _t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are - supplied. If no _o_p_t_i_o_ns are given, display the completion op- - tions for each _n_a_m_e or the current completion. The possible - values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- - scribed above. The --DD option indicates that other supplied op- - tions should apply to the ``default'' command completion; that - is, completion attempted on a command for which no completion + supplied. If no _o_p_t_i_o_ns are given, display the completion op- + tions for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- + scribed above. The --DD option indicates that other supplied op- + tions should apply to the ``default'' command completion; that + is, completion attempted on a command for which no completion has previously been defined. The --EE option indicates that other - supplied options should apply to ``empty'' command completion; - that is, completion attempted on a blank line. The --II option + supplied options should apply to ``empty'' command completion; + that is, completion attempted on a blank line. The --II option indicates that other supplied options should apply to completion - on the initial non-assignment word on the line, or after a com- - mand delimiter such as ;; or ||, which is usually command name + on the initial non-assignment word on the line, or after a com- + mand delimiter such as ;; or ||, which is usually command name completion. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a _n_a_m_e for which no completion specification exists, or an output error occurs. ccoonnttiinnuuee [_n] Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or - sseelleecctt loop. If _n is specified, resume at the _nth enclosing - loop. _n must be >= 1. If _n is greater than the number of en- - closing loops, the last enclosing loop (the ``top-level'' loop) - is resumed. The return value is 0 unless _n is not greater than + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of en- + closing loops, the last enclosing loop (the ``top-level'' loop) + is resumed. The return value is 0 unless _n is not greater than or equal to 1. ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] - Declare variables and/or give them attributes. If no _n_a_m_es are - given then display the values of variables. The --pp option will + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will display the attributes and values of each _n_a_m_e. When --pp is used - with _n_a_m_e arguments, additional options, other than --ff and --FF, - are ignored. When --pp is supplied without _n_a_m_e arguments, it - will display the attributes and values of all variables having + with _n_a_m_e arguments, additional options, other than --ff and --FF, + are ignored. When --pp is supplied without _n_a_m_e arguments, it + will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with --pp, ddeeccllaarree will display the at- - tributes and values of all shell variables. The --ff option will + options are supplied with --pp, ddeeccllaarree will display the at- + tributes and values of all shell variables. The --ff option will restrict the display to shell functions. The --FF option inhibits - the display of function definitions; only the function name and + the display of function definitions; only the function name and attributes are printed. If the eexxttddeebbuugg shell option is enabled - using sshhoopptt, the source file name and line number where each - _n_a_m_e is defined are displayed as well. The --FF option implies + using sshhoopptt, the source file name and line number where each + _n_a_m_e is defined are displayed as well. The --FF option implies --ff. The --gg option forces variables to be created or modified at the global scope, even when ddeeccllaarree is executed in a shell func- - tion. It is ignored in all other cases. The --II option causes - local variables to inherit the attributes (except the _n_a_m_e_r_e_f + tion. It is ignored in all other cases. The --II option causes + local variables to inherit the attributes (except the _n_a_m_e_r_e_f attribute) and value of any existing variable with the same _n_a_m_e - at a surrounding scope. If there is no existing variable, the + 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: - --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss + --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss above). - --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss + --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss above). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when the variable is assigned a value. - --ll When the variable is assigned a value, all upper-case - characters are converted to lower-case. The upper-case + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case attribute is disabled. - --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name - reference to another variable. That other variable is - defined by the value of _n_a_m_e. All references, assign- - ments, and attribute modifications to _n_a_m_e, except those - using or changing the --nn attribute itself, are performed - on the variable referenced by _n_a_m_e's value. The nameref + --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name + reference to another variable. That other variable is + defined by the value of _n_a_m_e. All references, assign- + ments, and attribute modifications to _n_a_m_e, except those + using or changing the --nn attribute itself, are performed + on the variable referenced by _n_a_m_e's value. The nameref attribute cannot be applied to array variables. --rr Make _n_a_m_es readonly. These names cannot then be assigned values by subsequent assignment statements or unset. --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions in- - herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. + herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. The trace attribute has no special meaning for variables. - --uu When the variable is assigned a value, all lower-case - characters are converted to upper-case. The lower-case + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case attribute is disabled. - --xx Mark _n_a_m_es for export to subsequent commands via the en- + --xx Mark _n_a_m_es for export to subsequent commands via the en- vironment. - Using `+' instead of `-' turns off the attribute instead, with - the exceptions that ++aa and ++AA may not be used to destroy array - variables and ++rr will not remove the readonly attribute. When + Using `+' instead of `-' turns off the attribute instead, with + the exceptions that ++aa and ++AA may not be used to destroy array + variables and ++rr will not remove the readonly attribute. When used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as - with the llooccaall command, unless the --gg option is supplied. If a - variable name is followed by =_v_a_l_u_e, the value of the variable - is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- - ment syntax to create array variables, additional attributes do - not take effect until subsequent assignments. The return value + with the llooccaall command, unless the --gg option is supplied. If a + variable name is followed by =_v_a_l_u_e, the value of the variable + is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- + ment syntax to create array variables, additional attributes do + not take effect until subsequent assignments. The return value is 0 unless an invalid option is encountered, an attempt is made to define a function using ``-f foo=bar'', an attempt is made to assign a value to a readonly variable, an attempt is made to as- sign a value to an array variable without using the compound as- - signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a - valid shell variable name, an attempt is made to turn off read- - only status for a readonly variable, an attempt is made to turn + signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a + valid shell variable name, an attempt is made to turn off read- + only status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with --ff. ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]] - Without options, displays the list of currently remembered di- - rectories. The default display is on a single line with direc- - tory names separated by spaces. Directories are added to the - list with the ppuusshhdd command; the ppooppdd command removes entries + Without options, displays the list of currently remembered di- + rectories. The default display is on a single line with direc- + tory names separated by spaces. Directories are added to the + list with the ppuusshhdd command; the ppooppdd command removes entries from the list. The current directory is always the first direc- tory in the stack. - --cc Clears the directory stack by deleting all of the en- + --cc Clears the directory stack by deleting all of the en- tries. - --ll Produces a listing using full pathnames; the default + --ll Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. --pp Print the directory stack with one entry per line. - --vv Print the directory stack with one entry per line, pre- + --vv Print the directory stack with one entry per line, pre- fixing each entry with its index in the stack. ++_n Displays the _nth entry counting from the left of the list shown by ddiirrss when invoked without options, starting with zero. - --_n Displays the _nth entry counting from the right of the + --_n Displays the _nth entry counting from the right of the list shown by ddiirrss when invoked without options, starting with zero. - The return value is 0 unless an invalid option is supplied or _n + The return value is 0 unless an invalid option is supplied or _n indexes beyond the end of the directory stack. ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ... | _p_i_d ... ] - Without options, remove each _j_o_b_s_p_e_c from the table of active - jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr - option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option - is given, each _j_o_b_s_p_e_c is not removed from the table, but is - marked so that SSIIGGHHUUPP is not sent to the job if the shell re- + Without options, remove each _j_o_b_s_p_e_c from the table of active + jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr + option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option + is given, each _j_o_b_s_p_e_c is not removed from the table, but is + marked so that SSIIGGHHUUPP is not sent to the job if the shell re- ceives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is supplied, the --aa option means - to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- + to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- gument restricts operation to running jobs. The return value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job. eecchhoo [--nneeEE] [_a_r_g ...] - Output the _a_r_gs, separated by spaces, followed by a newline. - The return status is 0 unless a write error occurs. If --nn is + Output the _a_r_gs, separated by spaces, followed by a newline. + The return status is 0 unless a write error occurs. If --nn is specified, the trailing newline is suppressed. If the --ee option - is given, interpretation of the following backslash-escaped - characters is enabled. The --EE option disables the interpreta- - tion of these escape characters, even on systems where they are - interpreted by default. The xxppgg__eecchhoo shell option may be used - to dynamically determine whether or not eecchhoo expands these es- - cape characters by default. eecchhoo does not interpret ---- to mean - the end of options. eecchhoo interprets the following escape se- + is given, interpretation of the following backslash-escaped + characters is enabled. The --EE option disables the interpreta- + tion of these escape characters, even on systems where they are + interpreted by default. The xxppgg__eecchhoo shell option may be used + to dynamically determine whether or not eecchhoo expands these es- + cape characters by default. eecchhoo does not interpret ---- to mean + the end of options. eecchhoo interprets the following escape se- quences: \\aa alert (bell) \\bb backspace @@ -4785,194 +4917,200 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS \\tt horizontal tab \\vv vertical tab \\\\ backslash - \\00_n_n_n the eight-bit character whose value is the octal value + \\00_n_n_n the eight-bit character whose value is the octal value _n_n_n (zero to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] - Enable and disable builtin shell commands. Disabling a builtin + Enable and disable builtin shell commands. Disabling a builtin allows a disk command which has the same name as a shell builtin - to be executed without specifying a full pathname, even though - the shell normally searches for builtins before disk commands. - If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- - abled. For example, to use the tteesstt binary found via the PPAATTHH - instead of the shell builtin version, run ``enable -n test''. - The --ff option means to load the new builtin command _n_a_m_e from + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- + abled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - The --dd option will delete a builtin previously loaded with --ff. - If no _n_a_m_e arguments are given, or if the --pp option is supplied, - a list of shell builtins is printed. With no other option argu- - ments, the list consists of all enabled shell builtins. If --nn - is supplied, only disabled builtins are printed. If --aa is sup- - plied, the list printed includes all builtins, with an indica- - tion of whether or not each is enabled. If --ss is supplied, the - output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return - value is 0 unless a _n_a_m_e is not a shell builtin or there is an - error loading a new builtin from a shared object. + Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a + colon-separated list of directories in which to search for _f_i_l_e_- + _n_a_m_e. The default is system-dependent. The --dd option will + delete a builtin previously loaded with --ff. If no _n_a_m_e argu- + ments are given, or if the --pp option is supplied, a list of + shell builtins is printed. With no other option arguments, the + list consists of all enabled shell builtins. If --nn is supplied, + only disabled builtins are printed. If --aa is supplied, the list + printed includes all builtins, with an indication of whether or + not each is enabled. If --ss is supplied, the output is re- + stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup- + plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to + load _n_a_m_e from a shared object named _n_a_m_e, as if the command + were ``enable -f _n_a_m_e _n_a_m_e . The return value is 0 unless a + _n_a_m_e is not a shell builtin or there is an error loading a new + builtin from a shared object. eevvaall [_a_r_g ...] - The _a_r_gs are read and concatenated together into a single com- - mand. This command is then read and executed by the shell, and - its exit status is returned as the value of eevvaall. If there are + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are no _a_r_g_s, or only null arguments, eevvaall returns 0. eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] - If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process - is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If the --ll option is supplied, the shell places a dash at the begin- ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what _l_o_- - _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with - an empty environment. If --aa is supplied, the shell passes _n_a_m_e + _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with + an empty environment. If --aa is supplied, the shell passes _n_a_m_e as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can- - not be executed for some reason, a non-interactive shell exits, - unless the eexxeeccffaaiill shell option is enabled. In that case, it - returns failure. An interactive shell returns failure if the - file cannot be executed. A subshell exits unconditionally if - eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take - effect in the current shell, and the return status is 0. If + not be executed for some reason, a non-interactive shell exits, + unless the eexxeeccffaaiill shell option is enabled. In that case, it + returns failure. An interactive shell returns failure if the + file cannot be executed. A subshell exits unconditionally if + eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take + effect in the current shell, and the return status is 0. If there is a redirection error, the return status is 1. eexxiitt [_n] - Cause the shell to exit with a status of _n. If _n is omitted, + Cause the shell to exit with a status of _n. If _n is omitted, the exit status is that of the last command executed. A trap on EEXXIITT is executed before the shell terminates. eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... eexxppoorrtt --pp - The supplied _n_a_m_e_s are marked for automatic export to the envi- - ronment of subsequently executed commands. If the --ff option is - given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or - if the --pp option is supplied, a list of names of all exported - variables is printed. The --nn option causes the export property + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of names of all exported + variables is printed. The --nn option causes the export property to be removed from each _n_a_m_e. If a variable name is followed by =_w_o_r_d, the value of the variable is set to _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid option is encountered, one - of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- + of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- plied with a _n_a_m_e that is not a function. ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] - The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t - from the history list and displays or edits and re-executes - them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate - the last command beginning with that string) or as a number (an - index into the history list, where a negative number is used as - an offset from the current command number). When listing, a - _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to - the current command (usually the ffcc command); otherwise 0 is - equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, - it is set to the current command for listing (so that ``fc -l - -10'' prints the last 10 commands) and to _f_i_r_s_t otherwise. If - _f_i_r_s_t is not specified, it is set to the previous command for + The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t + from the history list and displays or edits and re-executes + them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate + the last command beginning with that string) or as a number (an + index into the history list, where a negative number is used as + an offset from the current command number). When listing, a + _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to + the current command (usually the ffcc command); otherwise 0 is + equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, + it is set to the current command for listing (so that ``fc -l + -10'' prints the last 10 commands) and to _f_i_r_s_t otherwise. If + _f_i_r_s_t is not specified, it is set to the previous command for editing and -16 for listing. - The --nn option suppresses the command numbers when listing. The - --rr option reverses the order of the commands. If the --ll option - is given, the commands are listed on standard output. Other- - wise, the editor given by _e_n_a_m_e is invoked on a file containing - those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT - variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. - If neither variable is set, _v_i is used. When editing is com- + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, _v_i is used. When editing is com- plete, the edited commands are echoed and executed. - In the second form, _c_o_m_m_a_n_d is re-executed after each instance - of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as - _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', - so that typing ``r cc'' runs the last command beginning with + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as + _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', + so that typing ``r cc'' runs the last command beginning with ``cc'' and typing ``r'' re-executes the last command. - If the first form is used, the return value is 0 unless an in- - valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history - lines out of range. If the --ee option is supplied, the return + If the first form is used, the return value is 0 unless an in- + valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee option is supplied, the return value is the value of the last command executed or failure if an error occurs with the temporary file of commands. If the second - form is used, the return status is that of the command re-exe- - cuted, unless _c_m_d does not specify a valid history line, in + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in which case ffcc returns failure. ffgg [_j_o_b_s_p_e_c] - Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b - is used. The return value is that of the command placed into - the foreground, or failure if run when job control is disabled + is used. The return value is that of the command placed into + the foreground, or failure if run when job control is disabled or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec- - ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started without job control. ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g _._._.] - ggeettooppttss is used by shell procedures to parse positional parame- - ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- - nized; if a character is followed by a colon, the option is ex- + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is ex- pected to have an argument, which should be separated from it by - white space. The colon and question mark characters may not be - used as option characters. Each time it is invoked, ggeettooppttss - places the next option in the shell variable _n_a_m_e, initializing + white space. The colon and question mark characters may not be + used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing _n_a_m_e if it does not exist, and the index of the next argument to be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to 1 each time the shell or a shell script is invoked. When an op- tion requires an argument, ggeettooppttss places that argument into the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically; - it must be manually reset between multiple calls to ggeettooppttss - within the same shell invocation if a new set of parameters is + it must be manually reset between multiple calls to ggeettooppttss + within the same shell invocation if a new set of parameters is to be used. When the end of options is encountered, ggeettooppttss exits with a re- turn value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and _n_a_m_e is set to ?. - ggeettooppttss normally parses the positional parameters, but if more - arguments are supplied as _a_r_g values, ggeettooppttss parses those in- + ggeettooppttss normally parses the positional parameters, but if more + arguments are supplied as _a_r_g values, ggeettooppttss parses those in- stead. - ggeettooppttss can report errors in two ways. If the first character - of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In - normal operation, diagnostic messages are printed when invalid - options or missing option arguments are encountered. If the - variable OOPPTTEERRRR is set to 0, no error messages will be dis- + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation, diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if - not silent, prints an error message and unsets OOPPTTAARRGG. If - ggeettooppttss is silent, the option character found is placed in OOPP-- + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in OOPP-- TTAARRGG and no diagnostic message is printed. - If a required argument is not found, and ggeettooppttss is not silent, - a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a - diagnostic message is printed. If ggeettooppttss is silent, then a - colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option character found. - ggeettooppttss returns true if an option, specified or unspecified, is + ggeettooppttss returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs. hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e - is determined by searching the directories in $$PPAATTHH and remem- + is determined by searching the directories in $$PPAATTHH and remem- bered. Any previously-remembered pathname is discarded. If the --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e - is used as the full filename of the command. The --rr option + is used as the full filename of the command. The --rr option causes the shell to forget all remembered locations. The --dd op- - tion causes the shell to forget the remembered location of each - _n_a_m_e. If the --tt option is supplied, the full pathname to which - each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments + tion causes the shell to forget the remembered location of each + _n_a_m_e. If the --tt option is supplied, the full pathname to which + each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are supplied with --tt, the _n_a_m_e is printed before the hashed full pathname. The --ll option causes output to be displayed in a for- - mat that may be reused as input. If no arguments are given, or + mat that may be reused as input. If no arguments are given, or if only --ll is supplied, information about remembered commands is - printed. The return status is true unless a _n_a_m_e is not found + printed. The return status is true unless a _n_a_m_e is not found or an invalid option is supplied. hheellpp [--ddmmss] [_p_a_t_t_e_r_n] - Display helpful information about builtin commands. If _p_a_t_t_e_r_n - is specified, hheellpp gives detailed help on all commands matching - _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control structures is printed. --dd Display a short description of each _p_a_t_t_e_r_n --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like @@ -4990,70 +5128,70 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] With no options, display the command history list with line num- bers. Lines listed with a ** have been modified. An argument of - _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- - FFOORRMMAATT is set and not null, it is used as a format string for - _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- - played history entry. No intervening blank is printed between - the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is - supplied, it is used as the name of the history file; if not, - the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the following meanings: --cc Clear the history list by deleting all the entries. --dd _o_f_f_s_e_t - Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t + Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t is negative, it is interpreted as relative to one greater than the last history position, so negative indices count - back from the end of the history, and an index of -1 + back from the end of the history, and an index of -1 refers to the current hhiissttoorryy --dd command. --dd _s_t_a_r_t-_e_n_d - Delete the history entries between positions _s_t_a_r_t and - _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t - and _e_n_d are interpreted as described above. - --aa Append the ``new'' history lines to the history file. - These are history lines entered since the beginning of + Delete the range of history entries between positions + _s_t_a_r_t and _e_n_d, inclusive. Positive and negative values + for _s_t_a_r_t and _e_n_d are interpreted as described above. + --aa Append the ``new'' history lines to the history file. + These are history lines entered since the beginning of the current bbaasshh session, but not already appended to the history file. - --nn Read the history lines not already read from the history - file into the current history list. These are lines ap- - pended to the history file since the beginning of the + --nn Read the history lines not already read from the history + file into the current history list. These are lines ap- + pended to the history file since the beginning of the current bbaasshh session. - --rr Read the contents of the history file and append them to + --rr Read the contents of the history file and append them to the current history list. --ww Write the current history list to the history file, over- writing the history file's contents. - --pp Perform history substitution on the following _a_r_g_s and - display the result on the standard output. Does not - store the results in the history list. Each _a_r_g must be + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be quoted to disable normal history expansion. - --ss Store the _a_r_g_s in the history list as a single entry. - The last command in the history list is removed before + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before the _a_r_g_s are added. - If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- - tion associated with each history entry is written to the his- - tory file, marked with the history comment character. When the - history file is read, lines beginning with the history comment - character followed immediately by a digit are interpreted as + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as timestamps for the following history entry. The return value is 0 unless an invalid option is encountered, an error occurs while - reading or writing the history file, an invalid _o_f_f_s_e_t is sup- - plied as an argument to --dd, or the history expansion supplied as - an argument to --pp fails. + reading or writing the history file, an invalid _o_f_f_s_e_t or range + is supplied as an argument to --dd, or the history expansion sup- + plied as an argument to --pp fails. jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ] The first form lists the active jobs. The options have the fol- lowing meanings: --ll List process IDs in addition to the normal information. - --nn Display information only about jobs that have changed + --nn Display information only about jobs that have changed status since the user was last notified of their status. - --pp List only the process ID of the job's process group + --pp List only the process ID of the job's process group leader. --rr Display only running jobs. --ss Display only stopped jobs. - If _j_o_b_s_p_e_c is given, output is restricted to information about - that job. The return status is 0 unless an invalid option is + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is encountered or an invalid _j_o_b_s_p_e_c is supplied. If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in @@ -5062,104 +5200,113 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] - Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes - named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive - signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or - a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not - present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the - signal names. If any arguments are supplied when --ll is given, - the names of the signals corresponding to the arguments are + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to - --ll is a number specifying either a signal number or the exit - status of a process terminated by a signal. The --LL option is - equivalent to --ll. kkiillll returns true if at least one signal was + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. The --LL option is + equivalent to --ll. kkiillll returns true if at least one signal was successfully sent, or false if an error occurs or an invalid op- tion is encountered. lleett _a_r_g [_a_r_g ...] Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- - MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett + MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett returns 1; 0 is returned otherwise. llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ] - For each argument, a local variable named _n_a_m_e is created, and - assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted by ddeeccllaarree. When llooccaall is used within a function, it causes the - variable _n_a_m_e to have a visible scope restricted to that func- - tion and its children. If _n_a_m_e is -, the set of shell options - is made local to the function in which llooccaall is invoked: shell - options changed using the sseett builtin inside the function are - restored to their original values when the function returns. + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. If _n_a_m_e is -, the set of shell options + is made local to the function in which llooccaall is invoked: shell + options changed using the sseett builtin inside the function are + restored to their original values when the function returns. The restore is effected as if a series of sseett commands were exe- - cuted to restore the values that were in place before the func- - tion. With no operands, llooccaall writes a list of local variables - to the standard output. It is an error to use llooccaall when not - within a function. The return status is 0 unless llooccaall is used - outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a + cuted to restore the values that were in place before the func- + tion. With no operands, llooccaall writes a list of local variables + to the standard output. It is an error to use llooccaall when not + within a function. The return status is 0 unless llooccaall is used + outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. - mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC + mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] - Read lines from the standard input into the indexed array vari- - able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- - plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if supplied, have the following meanings: - --dd The first character of _d_e_l_i_m is used to terminate each - input line, rather than newline. If _d_e_l_i_m is the empty + --dd The first character of _d_e_l_i_m is used to terminate each + input line, rather than newline. If _d_e_l_i_m is the empty string, mmaappffiillee will terminate a line when it reads a NUL character. - --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are copied. - --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default index is 0. --ss Discard the first _c_o_u_n_t lines read. - --tt Remove a trailing _d_e_l_i_m (default newline) from each line + --tt Remove a trailing _d_e_l_i_m (default newline) from each line read. - --uu Read lines from file descriptor _f_d instead of the stan- + --uu Read lines from file descriptor _f_d instead of the stan- dard input. - --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The --cc option specifies _q_u_a_n_t_u_m. - --cc Specify the number of lines read between each call to + --cc Specify the number of lines read between each call to _c_a_l_l_b_a_c_k. - If --CC is specified without --cc, the default quantum is 5000. + If --CC is specified without --cc, the default quantum is 5000. When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that - element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after + element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- + If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- _r_a_y before assigning to it. - mmaappffiillee returns successfully unless an invalid option or option - argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if _a_r_r_a_y is not an indexed array. ppooppdd [-nn] [+_n] [-_n] - Removes entries from the directory stack. With no arguments, - removes the top directory from the stack, and performs a ccdd to - the new top directory. Arguments, if supplied, have the follow- - ing meanings: + Removes entries from the directory stack. The elements are num- + bered from 0 starting at the first directory listed by ddiirrss. + With no arguments, ppooppdd removes the top directory from the + stack, and changes to the new top directory. Arguments, if sup- + plied, have the following meanings: --nn Suppresses the normal change of directory when removing directories from the stack, so that only the stack is ma- nipulated. ++_n Removes the _nth entry counting from the left of the list - shown by ddiirrss, starting with zero. For example: ``popd - +0'' removes the first directory, ``popd +1'' the second. + shown by ddiirrss, starting with zero, from the stack. For + example: ``popd +0'' removes the first directory, ``popd + +1'' the second. --_n Removes the _nth entry counting from the right of the list - shown by ddiirrss, starting with zero. For example: ``popd - -0'' removes the last directory, ``popd -1'' the next to + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to last. - If the ppooppdd command is successful, a ddiirrss is performed as well, - and the return status is 0. ppooppdd returns false if an invalid - option is encountered, the directory stack is empty, a non-exis- - tent directory stack entry is specified, or the directory change - fails. + If the top element of the directory stack is modified, and the + _-_n option was not supplied, ppooppdd uses the ccdd builtin to change + to the directory at the top of the stack. If the ccdd fails, ppooppdd + returns a non-zero value. + + Otherwise, ppooppdd returns false if an invalid option is encoun- + tered, the directory stack is empty, or a non-existent directory + stack entry is specified. + + If the ppooppdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack, and the return status is + 0. pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the @@ -5178,15 +5325,17 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee. %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can be reused as shell input. + %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- + _m_e_n_t before quoting it. %%((_d_a_t_e_f_m_t))TT - causes pprriinnttff to output the date-time string resulting - from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). + causes pprriinnttff to output the date-time string resulting + from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). The corresponding _a_r_g_u_m_e_n_t is an integer representing the - number of seconds since the epoch. Two special argument - values may be used: -1 represents the current time, and - -2 represents the time the shell was invoked. If no ar- + number of seconds since the epoch. Two special argument + values may be used: -1 represents the current time, and + -2 represents the time the shell was invoked. If no ar- gument is specified, conversion behaves as if -1 had been - given. This is an exception to the usual pprriinnttff behav- + given. This is an exception to the usual pprriinnttff behav- ior. The %b, %q, and %T directives all use the field width and preci- @@ -5194,100 +5343,104 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, - the extra format specifications behave as if a zero value or - null string, as appropriate, had been supplied. The return + the extra format specifications behave as if a zero value or + null string, as appropriate, had been supplied. The return value is zero on success, non-zero on failure. ppuusshhdd [--nn] [+_n] [-_n] ppuusshhdd [--nn] [_d_i_r] - Adds a directory to the top of the directory stack, or rotates - the stack, making the new top of the stack the current working - directory. With no arguments, ppuusshhdd exchanges the top two di- - rectories and returns 0, unless the directory stack is empty. - Arguments, if supplied, have the following meanings: - --nn Suppresses the normal change of directory when rotating - or adding directories to the stack, so that only the + Adds a directory to the top of the directory stack, or rotates + the stack, making the new top of the stack the current working + directory. With no arguments, ppuusshhdd exchanges the top two ele- + ments of the directory stack. Arguments, if supplied, have the + following meanings: + --nn Suppresses the normal change of directory when rotating + or adding directories to the stack, so that only the stack is manipulated. - ++_n Rotates the stack so that the _nth directory (counting - from the left of the list shown by ddiirrss, starting with + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with zero) is at the top. - --_n Rotates the stack so that the _nth directory (counting - from the right of the list shown by ddiirrss, starting with + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with zero) is at the top. - _d_i_r Adds _d_i_r to the directory stack at the top, making it the - new current working directory as if it had been supplied - as the argument to the ccdd builtin. + _d_i_r Adds _d_i_r to the directory stack at the top + + After the stack has been modified, if the --nn option was not sup- + plied, ppuusshhdd uses the ccdd builtin to change to the directory at + the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero + value. + + Otherwise, if no arguments are supplied, ppuusshhdd returns 0 unless + the directory stack is empty. When rotating the directory + stack, ppuusshhdd returns 0 unless the directory stack is empty or a + non-existent directory stack element is specified. - If the ppuusshhdd command is successful, a ddiirrss is performed as well. - If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r - fails. With the second form, ppuusshhdd returns 0 unless the direc- - tory stack is empty, a non-existent directory stack element is - specified, or the directory change to the specified new current - directory fails. + If the ppuusshhdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack. ppwwdd [--LLPP] - Print the absolute pathname of the current working directory. + Print the absolute pathname of the current working directory. The pathname printed contains no symbolic links if the --PP option is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command - is enabled. If the --LL option is used, the pathname printed may - contain symbolic links. The return status is 0 unless an error + is enabled. If the --LL option is used, the pathname printed may + contain symbolic links. The return status is 0 unless an error occurs while reading the name of the current directory or an in- valid option is supplied. rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] - One line is read from the standard input, or from the file de- + One line is read from the standard input, or from the file de- scriptor _f_d supplied as an argument to the --uu option, split into - words as described above under WWoorrdd SSpplliittttiinngg, and the first - word is assigned to the first _n_a_m_e, the second word to the sec- - ond _n_a_m_e, and so on. If there are more words than names, the + words as described above under WWoorrdd SSpplliittttiinngg, and the first + word is assigned to the first _n_a_m_e, the second word to the sec- + ond _n_a_m_e, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to - the last _n_a_m_e. If there are fewer words read from the input - stream than names, the remaining names are assigned empty val- - ues. The characters in IIFFSS are used to split the line into - words using the same rules the shell uses for expansion (de- - scribed above under WWoorrdd SSpplliittttiinngg). The backslash character + the last _n_a_m_e. If there are fewer words read from the input + stream than names, the remaining names are assigned empty val- + ues. The characters in IIFFSS are used to split the line into + words using the same rules the shell uses for expansion (de- + scribed above under WWoorrdd SSpplliittttiinngg). The backslash character (\\) may be used to remove any special meaning for the next char- - acter read and for line continuation. Options, if supplied, + acter read and for line continuation. Options, if supplied, have the following meanings: --aa _a_n_a_m_e The words are assigned to sequential indices of the array variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any - new values are assigned. Other _n_a_m_e arguments are ig- + new values are assigned. Other _n_a_m_e arguments are ig- nored. --dd _d_e_l_i_m The first character of _d_e_l_i_m is used to terminate the in- - put line, rather than newline. If _d_e_l_i_m is the empty - string, rreeaadd will terminate a line when it reads a NUL + put line, rather than newline. If _d_e_l_i_m is the empty + string, rreeaadd will terminate a line when it reads a NUL character. --ee If the standard input is coming from a terminal, rreeaaddlliinnee - (see RREEAADDLLIINNEE above) is used to obtain the line. Read- - line uses the current (or default, if line editing was - not previously active) editing settings, but uses Read- + (see RREEAADDLLIINNEE above) is used to obtain the line. Read- + line uses the current (or default, if line editing was + not previously active) editing settings, but uses Read- line's default filename completion. --ii _t_e_x_t - If rreeaaddlliinnee is being used to read the line, _t_e_x_t is + If rreeaaddlliinnee is being used to read the line, _t_e_x_t is placed into the editing buffer before editing begins. --nn _n_c_h_a_r_s - rreeaadd returns after reading _n_c_h_a_r_s characters rather than + rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input, but honors a delim- - iter if fewer than _n_c_h_a_r_s characters are read before the + iter if fewer than _n_c_h_a_r_s characters are read before the delimiter. --NN _n_c_h_a_r_s - rreeaadd returns after reading exactly _n_c_h_a_r_s characters - rather than waiting for a complete line of input, unless - EOF is encountered or rreeaadd times out. Delimiter charac- - ters encountered in the input are not treated specially - and do not cause rreeaadd to return until _n_c_h_a_r_s characters - are read. The result is not split on the characters in - IIFFSS; the intent is that the variable is assigned exactly + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. The result is not split on the characters in + IIFFSS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the --rr option below). --pp _p_r_o_m_p_t @@ -5295,25 +5448,26 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS line, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. --rr Backslash does not act as an escape character. The back- - slash is considered to be part of the line. In particu- - lar, a backslash-newline pair may not then be used as a + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not then be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. --tt _t_i_m_e_o_u_t - Cause rreeaadd to time out and return failure if a complete - line of input (or a specified number of characters) is - not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- - mal number with a fractional portion following the deci- - mal point. This option is only effective if rreeaadd is - reading input from a terminal, pipe, or other special - file; it has no effect when reading from regular files. + Cause rreeaadd to time out and return failure if a complete + line of input (or a specified number of characters) is + not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- + mal number with a fractional portion following the deci- + mal point. This option is only effective if rreeaadd is + reading input from a terminal, pipe, or other special + file; it has no effect when reading from regular files. If rreeaadd times out, rreeaadd saves any partial input read into - the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- - turns immediately, without trying to read any data. The - exit status is 0 if input is available on the specified - file descriptor, non-zero otherwise. The exit status is - greater than 128 if the timeout is exceeded. + the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- + turns immediately, without trying to read any data. The + exit status is 0 if input is available on the specified + file descriptor, or the read will return EOF, non-zero + otherwise. The exit status is greater than 128 if the + timeout is exceeded. --uu _f_d Read input from file descriptor _f_d. If no _n_a_m_e_s are supplied, the line read, without the ending de- @@ -5361,18 +5515,18 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS associated with the RREETTUURRNN trap is executed before execution re- sumes after the function or script. - sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - Without options, the name and value of each shell variable are - displayed in a format that can be reused as input for setting or - resetting the currently-set variables. Read-only variables can- - not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. - The output is sorted according to the current locale. When 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 - $$11, $$22, ...... $$_n. Options, if specified, have the following - meanings: + sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + Without options, display the name and value of each shell vari- + able in a format that can be reused as input for setting or re- + setting the currently-set variables. Read-only variables cannot + be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. The + output is sorted according to the current locale. When options + are specified, they set or unset shell attributes. Any argu- + ments remaining after option processing are treated as values + for the positional parameters and are assigned, in order, to $$11, + $$22, ...... $$_n. Options, if specified, have the following mean- + ings: --aa Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. @@ -5495,9 +5649,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS plied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids. + --rr Enable restricted shell mode. This option cannot be un- + set once it has been set. --tt Exit after reading and executing one command. --uu Treat unset variables and parameters other than the spe- - cial parameters "@" and "*" 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 @@ -5635,6 +5792,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS ccoommppaatt4422 ccoommppaatt4433 ccoommppaatt4444 + ccoommppaatt5500 These control aspects of the shell's compatibility mode (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below). @@ -5742,6 +5900,11 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS between AA and BB, and upper-case and lower-case ASCII characters will collate together. + gglloobbsskkiippddoottss + If set, pathname expansion will never match the file- + names ````..'''' and ````....'''', even if the pattern begins with + a ````..''''. This option is enabled by default. + gglloobbssttaarr If set, the pattern **** used in a pathname expansion con- text will match all files and zero or more directories @@ -5840,46 +6003,63 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS tution word expansions, or when filtering possible com- pletions as part of programmable completion. + nnooeexxppaanndd__ttrraannssllaattiioonn + If set, bbaasshh encloses the translated results of $"..." + quoting in single quotes instead of double quotes. If + the string is not translated, this has no effect. + nnuullllgglloobb If set, bbaasshh allows patterns which match no files (see PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, rather than themselves. + ppaattssuubb__rreeppllaacceemmeenntt + If set, bbaasshh expands occurrences of && in the replacement + string of pattern substitution to the text matched by + the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn + above. This option is enabled by default. + pprrooggccoommpp If set, the programmable completion facilities (see PPrroo-- ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is enabled by default. pprrooggccoommpp__aalliiaass - If set, and programmable completion is enabled, bbaasshh - treats a command name that doesn't have any completions - as a possible alias and attempts alias expansion. If it - has an alias, bbaasshh attempts programmable completion us- + If set, and programmable completion is enabled, bbaasshh + treats a command name that doesn't have any completions + as a possible alias and attempts alias expansion. If it + has an alias, bbaasshh attempts programmable completion us- ing the command word resulting from the expanded alias. pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- - mand substitution, arithmetic expansion, and quote re- - moval after being expanded as described in PPRROOMMPPTTIINNGG + mand substitution, arithmetic expansion, and quote re- + moval after being expanded as described in PPRROOMMPPTTIINNGG above. This option is enabled by default. rreessttrriicctteedd__sshheellll - The shell sets this option if it is started in re- - stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value - may not be changed. This is not reset when the startup - files are executed, allowing the startup files to dis- + The shell sets this option if it is started in re- + stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- cover whether or not a shell is restricted. sshhiifftt__vveerrbboossee - If set, the sshhiifftt builtin prints an error message when + If set, the sshhiifftt builtin prints an error message when the shift count exceeds the number of positional parame- ters. ssoouurrcceeppaatthh - If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to - find the directory containing the file supplied as an + If set, the .. (ssoouurrccee) builtin uses the value of PPAATTHH to + find the directory containing the file supplied as an argument. This option is enabled by default. + vvaarrrreeddiirr__cclloossee + If set, the shell automatically closes file descriptors + assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE-- + DDIIRREECCTTIIOONN above) instead of leaving them open when the + command completes. + xxppgg__eecchhoo If set, the eecchhoo builtin expands backslash-escape se- quences by default. @@ -5943,11 +6123,15 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS is the one-argument test of the second argument. Other- wise, the expression is false. 4 arguments + The following conditions are applied in the order listed. If the first argument is !!, the result is the negation of - the three-argument expression composed of the remaining - arguments. 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 (( and + the fourth argument is exactly )), the result is the two- + argument test of the second and third arguments. Other- + wise, the expression is parsed and evaluated according to + precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence using the rules listed above. @@ -6115,7 +6299,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS NNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECCOONNDDSS, or SSRRAANNDDOOMM are unset, they lose their special properties, even if they are sub- sequently reset. The exit status is true unless a _n_a_m_e is read- - only. + only or may not be unset. wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d _._._.] Wait for each specified child process and return its termination @@ -6268,33 +6452,39 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE input. Bash-5.1 suppresses that message when the --ll op- tion is supplied. + ccoommppaatt5511 + +o The uunnsseett builtin treats attempts to unset array sub- + scripts @@ and ** differently depending on whether the ar- + ray is indexed or associative, and differently than in + previous versions. + RREESSTTRRIICCTTEEDD SSHHEELLLL If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at - invocation, the shell becomes restricted. A restricted shell is used - to set up an environment more controlled than the standard shell. It - behaves identically to bbaasshh with the exception that the following are + invocation, the shell becomes restricted. A restricted shell is used + to set up an environment more controlled than the standard shell. It + behaves identically to bbaasshh with the exception that the following are disallowed or not performed: +o changing directories with ccdd - +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, + +o setting or unsetting the values of SSHHEELLLL, PPAATTHH, HHIISSTTFFIILLEE, EENNVV, or BBAASSHH__EENNVV +o specifying command names containing // - +o specifying a filename containing a // as an argument to the .. + +o specifying a filename containing a // as an argument to the .. builtin command - +o specifying a filename containing a slash as an argument to the + +o specifying a filename containing a slash as an argument to the hhiissttoorryy builtin command - +o specifying a filename containing a slash as an argument to the + +o specifying a filename containing a slash as an argument to the --pp option to the hhaasshh builtin command - +o importing function definitions from the shell environment at + +o importing function definitions from the shell environment at startup - +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at + +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at startup +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- @@ -6303,15 +6493,16 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o using the eexxeecc builtin command to replace the shell with another command - +o adding or deleting builtin commands with the --ff and --dd options + +o adding or deleting builtin commands with the --ff and --dd options to the eennaabbllee builtin command - +o using the eennaabbllee builtin command to enable disabled shell + +o using the eennaabbllee builtin command to enable disabled shell builtins +o specifying the --pp option to the ccoommmmaanndd builtin command - +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd. + +o turning off restricted mode with sseett ++rr or sshhoopptt --uu rree-- + ssttrriicctteedd__sshheellll. These restrictions are enforced after any startup files are read. @@ -6343,6 +6534,9 @@ FFIILLEESS _~_/_._b_a_s_h___l_o_g_o_u_t The individual login shell cleanup file, executed when a login shell exits + _~_/_._b_a_s_h___h_i_s_t_o_r_y + The default value of HHIISSTTFFIILLEE, the file in which bash saves the + command history _~_/_._i_n_p_u_t_r_c Individual _r_e_a_d_l_i_n_e initialization file @@ -6355,9 +6549,10 @@ AAUUTTHHOORRSS BBUUGG RREEPPOORRTTSS If you find a bug in bbaasshh,, you should report it. But first, you should - make sure that it really is a bug, and that it appears in the latest - version of bbaasshh. The latest version is always available from - _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/. + make sure that it really is a bug, and that it appears in the latest + version of bbaasshh. The latest version is always available from + _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_g_n_u_/_b_a_s_h_/ and _h_t_t_p_:_/_/_g_i_t_._s_a_v_a_n_- + _n_a_h_._g_n_u_._o_r_g_/_c_g_i_t_/_b_a_s_h_._g_i_t_/_s_n_a_p_s_h_o_t_/_b_a_s_h_-_m_a_s_t_e_r_._t_a_r_._g_z. Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g command to submit a bug report. If you have a fix, you are encouraged @@ -6402,4 +6597,4 @@ BBUUGGSS -GNU Bash 5.1 2020 October 29 BASH(1) +GNU Bash 5.2 2021 December 26 BASH(1) diff --git a/doc/bash.1 b/doc/bash.1 index 5af7d4280..d35468da6 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -5,12 +5,12 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Wed Sep 23 09:28:31 EDT 2020 +.\" Last Change: Sun Dec 26 16:02:07 EST 2021 .\" .\" 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 "2021 December 26" "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-2021 by the Free Software Foundation, Inc. +.if t Bash is Copyright \(co 1989-2021 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)), @@ -511,6 +511,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 +530,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 +589,16 @@ 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 pipeline 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 +673,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 +700,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 +713,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 +756,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. @@ -888,7 +897,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 +953,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 +1003,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 +1029,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 +1145,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 +1217,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 +1289,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 , @@ -1407,7 +1443,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 +1962,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 +2014,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 @@ -2782,9 +2828,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 +2927,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 +2936,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 @@ -3289,22 +3342,49 @@ 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. +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. +Backslash is used to quote \fB&\fP in \fIstring\fP; the backslash is removed +in order to permit a literal \fB&\fP in the replacement string. +Users should take care +if \fIstring\fP is double-quoted to avoid unwanted interactions between +the backslash and double-quoting. +Pattern substitution performs the check for \fB&\fP after expanding +\fIstring\fP; shell programmers should quote backslashes intended to escape +the \fB&\fP and inhibit replacement so they survive any quote removal +performed by the expansion of \fIstring\fP. If the .B nocasematch shell option is enabled, the match is performed without regard to the case @@ -3414,6 +3494,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 +3567,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 +3734,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 +3767,7 @@ below under for a description of the .BR nocaseglob , .BR nullglob , +.BR globskipdots , .BR failglob , and .B dotglob @@ -3833,7 +3929,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 +3955,16 @@ Matches anything except one of the given patterns .RE .PD .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 +3982,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 +4006,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 +4394,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). @@ -4453,7 +4560,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 +4885,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 +4954,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 +5013,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 +5033,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 +5136,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 +5230,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 +5551,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 +5562,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 @@ -5751,6 +5929,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 +5981,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 @@ -5838,6 +6021,17 @@ 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 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 @@ -6256,6 +6450,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 +6561,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. @@ -6735,6 +6935,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,7 +7631,8 @@ 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 @@ -7446,12 +7652,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 +7702,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 +7712,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 +7787,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 +7858,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 +7916,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 @@ -8335,7 +8553,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 +8571,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 +9007,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 +9057,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 @@ -9057,10 +9285,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 +9303,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 +9325,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 +9370,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 +9409,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 +9436,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] @@ -9331,8 +9577,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 +9674,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. @@ -9705,12 +9953,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. @@ -9961,6 +10215,8 @@ 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 @@ -10114,6 +10370,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. @@ -10236,6 +10501,13 @@ 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 @@ -10245,6 +10517,13 @@ files (see 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 above. +This option is enabled by default. +.TP 8 .B progcomp If set, the programmable completion facilities (see \fBProgrammable Completion\fP above) are enabled. @@ -10265,7 +10544,8 @@ expansion, and quote removal after being expanded as described in 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). @@ -10281,12 +10561,19 @@ 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 +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. @@ -10392,8 +10679,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 @@ -10843,7 +11135,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. @@ -11076,6 +11368,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 +11462,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 +11516,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 +11539,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 diff --git a/doc/bash.html b/doc/bash.html index adb9e7607..87259ee47 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -3,7 +3,7 @@ -
BASH(1)2020 October 29BASH(1) +BASH(1)2021 December 26BASH(1)

Index @@ -54,7 +54,7 @@ bash - GNU Bourne-Again SHell

COPYRIGHT

-Bash is Copyright © 1989-2020 by the Free Software Foundation, Inc. +Bash is Copyright © 1989-2021 by the Free Software Foundation, Inc.  

DESCRIPTION

@@ -368,7 +368,7 @@ An interactive shell is one started without non-option arguments and without the -c -option +option, whose standard input and error are both connected to terminals (as determined by isatty(3)), @@ -685,6 +685,7 @@ command (only in and do are valid):  

SHELL GRAMMAR

+This section describes the syntax of the various forms of shell commands.  

Simple Commands

@@ -711,29 +712,30 @@ The format for a pipeline is:

-[time [-p]] [ ! ] command [ [|||&] command2 ... ] +[time [-p]] [ ! ] command1 [ [|||&] command2 ... ]

The standard output of -command +command1 is connected via a pipe to the standard input of command2. This connection is performed before any redirections specified by the -command (see +command1(see + REDIRECTION below). -If |& is used, command's standard error, in addition to its +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. +performed after any redirections specified by command1.

The return status of a pipeline is the exit status of the last @@ -785,14 +787,15 @@ 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). +Each command in a pipeline is executed in a subshell, which is a +separate process. See COMMAND EXECUTION ENVIRONMENT -for a description of a subshell environment. +for a description of subshells and a subshell environment. If the lastpipe option is enabled using the shopt builtin (see the description of shopt 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.  

Lists

@@ -899,9 +902,9 @@ the rest of the command by one or more newlines, and may be followed by a newline in place of a semicolon.
(list)
-list is executed in a subshell environment (see +list is executed in a subshell (see COMMAND EXECUTION ENVIRONMENT -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 +927,12 @@ below under 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". +otherwise the return status is 1. +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.
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression. @@ -933,11 +940,12 @@ Expressions are composed of the primaries described below under CONDITIONAL EXPRESSIONS. -Word splitting and pathname expansion are not performed on the words -between the [[ and ]]; tilde expansion, -parameter and variable expansion, -arithmetic expansion, command substitution, process -substitution, and quote removal are performed. +The words between the [[ and ]] 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 -f must be unquoted to be recognized as primaries.

@@ -980,12 +988,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.

@@ -1143,7 +1153,7 @@ expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution and quote removal. Each pattern 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 nocasematch @@ -1203,7 +1213,7 @@ 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:

@@ -1213,10 +1223,35 @@ The format for a coprocess is:

This creates a coprocess named NAME. +command may be either a simple command or a compound +command (see above). +NAME is a shell variable name. If NAME is not supplied, the default name is COPROC. -NAME must not be supplied if command is a simple -command (see above); otherwise, it is interpreted as the first word -of the simple command. +

+ +The recommended form to use for a coprocess is +

+

+ +coproc NAME { command [redirections]; } +

+ +

+ +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. +

+ +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 (see Arrays @@ -1241,6 +1276,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. +

+ The process ID of the shell spawned to execute the coprocess is available as the value of the variable NAME_PID. The wait @@ -1269,9 +1306,9 @@ The body of the function is the compound command (see Compound Commands above). That command is usually a list of commands between { and }, but -may be any command listed under Compound Commands above, -with one exception: If the function reserved word is used, but the -parentheses are not supplied, the braces are required. +may be any command listed under Compound Commands above. +If the function reserved word is used, but the +parentheses are not supplied, the braces are recommended. compound-command is executed whenever fname is specified as the name of a simple command. When in posix mode, fname must be a valid shell name @@ -1425,10 +1462,11 @@ quotes (see below).

-Words of the form $aqstringaq 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 $aqstringaq are treated +as a special variant 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:

@@ -1518,14 +1556,25 @@ not been present. A double-quoted string preceded by a dollar sign ($dqstringdq) 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. +The gettext infrastructure performs the lookup and +translation, using the LC_MESSAGES, TEXTDOMAINDIR, +and TEXTDOMAIN shell variables. If the current locale is C or POSIX, -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 noexpand_translation option is enabled +using the shopt builtin, +translated strings are single-quoted instead of double-quoted. +See the description of +shopt + +below under +SHELLBUILTINCOMMANDS. + +  

PARAMETERS

@@ -1605,11 +1654,7 @@ not used (see Arithmetic Expansion below). -Word splitting is not performed, with the exception -of "$@" as explained below under -Special Parameters. - -Pathname expansion is not performed. +Word splitting and pathname expansion are not performed. Assignment statements may also appear as arguments to the alias, @@ -1797,7 +1842,7 @@ option).
$
-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.
! @@ -2445,6 +2490,18 @@ If 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 + +(see +SHELL BUILTIN COMMANDS + + +below) +when it was invoked.
READLINE_LINE
@@ -2500,15 +2557,15 @@ builtin command when no arguments are supplied.
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 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 SECONDS @@ -3509,9 +3566,15 @@ destroys the array element at index subscript, 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. -unset name, where name is an array, or +unset name, where name is an array, +removes the entire array. unset name[subscript], where -subscript is * or @, removes the entire array. +subscript is * or @, behaves differently depending on +whether name is an indexed or associative array. +If name is an associative array, this unsets the element with +subscript * 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, @@ -3635,7 +3698,7 @@ For example, a{d,c,b}e expands into `ade ace abe'. A sequence expression takes the form {x..y[..incr]}, -where x and y are either integers or single characters, +where x and y are either integers or single letters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x and y, inclusive. @@ -3644,10 +3707,11 @@ 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 +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. +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.

@@ -4122,23 +4186,47 @@ or the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

${parameter/pattern/string}
+ +
${parameter//pattern/string}
+
${parameter/#pattern/string}
+
${parameter/%pattern/string}
+ Pattern substitution. The pattern is expanded to produce a pattern just as in -pathname expansion, +pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. +string undergoes tilde expansion, parameter and variable expansion, +arithmetic expansion, command and process substitution, and quote removal. The match is performed using the rules described under Pattern Matching below. -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 +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. +Backslash is used to quote & 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. +Pattern substitution performs the check for & after expanding +string; shell programmers should quote backslashes intended to escape +the & and inhibit replacement so they survive any quote removal +performed by the expansion of string. If the nocasematch @@ -4266,6 +4354,11 @@ indexed and associative arrays as a sequence of quoted key-value pairs
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.

@@ -4364,8 +4457,10 @@ and the substitution of the result. The format for arithmetic expansion is: The 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 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. @@ -4575,17 +4670,30 @@ must be matched explicitly, unless the shell option dotglob is set. -The filenames +In order to match the filenames ``.'' and -``..'' +``..'', -must always be matched explicitly, even if +the pattern must begin with ``.'' (for example, ``.?''), +even if dotglob is set. -In other cases, the +If the +globskipdots + +shell option is enabled, the filenames +``.'' + +and +``..'' + +are never matched, even if the pattern begins with a +``.''. + +When not matching pathnames, the ``.'' character is not treated specially. @@ -4608,6 +4716,8 @@ for a description of the nullglob, +globskipdots, + failglob, and @@ -4827,7 +4937,7 @@ the syntax [.symbol.] matches the collating symbol

If the extglob shell option is enabled using the shopt -builtin, several extended pattern matching operators are recognized. +builtin, the shell recognizes several extended pattern matching operators. In the following description, a pattern-list is a list of one or more patterns separated by a |. Composite patterns may be formed using one or more of the following @@ -4851,6 +4961,17 @@ Matches anything except one of the given patterns

+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 ``.'' 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. @@ -4875,7 +4996,7 @@ may be redirected using a special notation interpreted by the shell. -Redirection allows commands' file handles to be +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. @@ -4902,7 +5023,8 @@ by {varname}, the value of varname defines the file descriptor to close. If {varname} is supplied, the redirection persists beyond the scope of the command, allowing the shell programmer to manage -the file descriptor himself. +the file descriptor's lifetime manually. +The varredir_close shell option manages this behavior.

In the following descriptions, if the file descriptor number is @@ -5448,7 +5570,7 @@ command.

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 FUNCTIONS @@ -5650,7 +5772,8 @@ or 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 +Functions may be exported so that child shell processes +(those created when executing a separate shell invocation) automatically have them defined with the -f @@ -6054,7 +6177,11 @@ 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 +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 +6261,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 shell script, 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 +6328,8 @@ of $$, 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.

*
@@ -6223,6 +6352,9 @@ 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, @@ -6354,6 +6486,10 @@ 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 $?. +

+ Bash 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 exit builtin @@ -6475,6 +6611,79 @@ When bash is waiting for an asynchronous command via the wait builtin, the reception of a signal for which a trap has been set will cause the wait builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed. +

+ +When job control is not enabled, and bash is waiting for a foreground +command to complete, the shell receives keyboard-generated signals +such as +SIGINT + + +(usually generated by ^C) that users commonly intend to send +to that command. +This happens because the shell and the command are in the +same process group as the terminal, and ^C sends +SIGINT + + +to all processes in that process group. +

+ +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 command 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. +
 

JOB CONTROL

@@ -6832,7 +7041,8 @@ the release of bash, version + patch level (e.g., 2.00.0)
\w
-the current working directory, with +the value of the PWD shell variable ($PWD), +with $HOME @@ -6845,7 +7055,8 @@ variable)
\W
-the basename of the current working directory, with +the basename of $PWD, +with $HOME @@ -7341,6 +7552,9 @@ If set to On, when listing completions, readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. +If there is a color definition in $LS_COLORS for the custom suffix +"readline-colored-completion-prefix", readline uses this color for +the common prefix instead of its default.
colored-stats (Off)
@@ -7400,6 +7614,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.
convert-meta (On)
@@ -7445,6 +7661,18 @@ 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. +
enable-active-region (On) + +
+The point is the current cursor position, and mark refers +to a saved cursor position. +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 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.
enable-bracketed-paste (On)
@@ -7956,6 +8184,19 @@ Move to the first line in the history.
Move to the end of the input history, i.e., the line currently being entered. +
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. +
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.
reverse-search-history (C-r)
@@ -8075,13 +8316,6 @@ Perform history and alias expansion on the current line.
A synonym for yank-last-arg. -
operate-and-get-next (C-o) - -
-Accept the current line for execution and fetch the next line -relative to the current line from the history for editing. -A numeric argument, if supplied, specifies the history entry to use instead -of the current line.
edit-and-execute-command (C-x C-e)
@@ -8563,6 +8797,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. +
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)
@@ -9445,8 +9685,9 @@ does not contain a slash, filenames in are used to find the directory containing -filename. +filename, +but filename does not need to be executable. The file searched for in PATH @@ -9471,12 +9712,12 @@ is not searched. 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 +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 source, and source unsets the +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 source completes. +the DEBUG trap, the new value is retained when . completes. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename @@ -9519,6 +9760,7 @@ or was started without job control.
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 @@ -9530,7 +9772,10 @@ function or macro, or set a 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 +readline + +initialization file such as .inputrc, but each binding or command must be passed as a separate argument; @@ -9624,6 +9869,12 @@ and variables to the current location of the insertion point and the saved insertion point (the mark), respectively. +The shell assigns any numeric argument the user supplied to the +READLINE_ARGUMENT + + +variable. +If there was no argument, that variable is not set. If the executed command changes the value of any of READLINE_LINE, @@ -9702,7 +9953,6 @@ if dir is not supplied, the value of the shell variable is the default. -Any additional arguments following dir are ignored. The variable CDPATH @@ -9777,6 +10027,10 @@ is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output. +If the directory change is successful, cd sets the value of the +PWD environment variable to the new directory name, and sets the +OLDPWD environment variable to the value of the current working +directory before the change. The return value is true if the directory was successfully changed; false otherwise.
command [-pVv] command [arg ...]
@@ -10538,7 +10792,11 @@ option means to load the new builtin command from shared object filename, -on systems that support dynamic loading. The +on systems that support dynamic loading. +Bash will use the value of the BASH_LOADABLES_PATH variable as a +colon-separated list of directories in which to search for filename. +The default is system-dependent. +The -d option will delete a builtin previously loaded with @@ -10555,6 +10813,11 @@ If -a is supplied, the list printed includes all builtins, with an indication of whether or not each is enabled. If -s is supplied, the output is restricted to the POSIX 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 value is 0 unless a name @@ -11080,8 +11343,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 history -d command.
-d start-end
-Delete the history entries between positions start and end, -inclusive. Positive and negative values for start and end +Delete the range of history entries between positions start and +end, inclusive. +Positive and negative values for start and end are interpreted as described above.
-a @@ -11140,7 +11404,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 -offset is supplied as an argument to -d, or the +offset or range is supplied as an argument to -d, or the history expansion supplied as an argument to -p fails.
@@ -11433,11 +11697,12 @@ argument is supplied, array is invalid or unassignable, or if
popd [-n] [+n] [-n]
-Removes entries from the directory stack. With no arguments, -removes the top directory from the stack, and performs a -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 dirs. +With no arguments, popd +removes the top directory from the stack, and +changes to the new top directory. Arguments, if supplied, have the following meanings:
@@ -11452,7 +11717,8 @@ Removes the nth entry counting from the left of the list shown by dirs, -starting with zero. For example: +starting with zero, from the stack. +For example: popd +0 removes the first directory, @@ -11475,18 +11741,28 @@ the next to last.

-If the +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 -command is successful, a -dirs +returns false if an invalid option is encountered, the directory stack +is empty, or a non-existent directory stack entry is specified. +

-is performed as well, and the return status is 0. +If the 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. +command is successful, +bash runs +dirs + +to show the final contents of the directory stack, +and the return status is 0.

printf [-v var] format [arguments]
@@ -11517,6 +11793,11 @@ in the same way as echo -e.
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
@@ -11557,8 +11838,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, pushd exchanges the top two directories -and returns 0, unless the directory stack is empty. +directory. +With no arguments, pushd exchanges the top two elements of +the directory stack. Arguments, if supplied, have the following meanings:
@@ -11587,33 +11869,36 @@ starting with zero) is at the top. Adds 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 cd builtin. +to the directory stack at the top

-If the -pushd +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. +

-command is successful, a -dirs +Otherwise, if no arguments are supplied, +pushd -is performed as well. -If the first form is used, +returns 0 unless the directory stack is empty. +When rotating the directory stack, pushd -returns 0 unless the cd to -dir +returns 0 unless the directory stack is empty or +a non-existent directory stack element is specified. +

-fails. With the second form, +If the 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 +dirs + +to show the final contents of the directory stack.

pwd [-LP]
@@ -11756,8 +12041,10 @@ from regular files. If read times out, read saves any partial input read into the specified variable name. If timeout is 0, read returns immediately, without trying to -read any data. The exit status is 0 if input is available on -the specified file descriptor, 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.
-u fd @@ -11871,11 +12158,11 @@ is used outside a function and not during execution of a script by . or source. Any command associated with the RETURN trap is executed before execution resumes after the function or script. -
set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
+
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
-
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
+
set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [arg ...]
-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. @@ -12238,6 +12525,11 @@ If the -p option is supplied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids. +
-r + +
+Enable restricted shell mode. +This option cannot be unset once it has been set.
-t
@@ -12246,7 +12538,9 @@ Exit after reading and executing one command.
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. @@ -12572,6 +12866,9 @@ history is enabled, as described above under
compat44 +
+
compat50 +
These control aspects of the shell's compatibility mode @@ -12765,6 +13062,19 @@ and B, and upper-case and lower-case ASCII characters will collate together. +
globskipdots + +
+If set, pathname expansion will never match the filenames +``.'' + +and +``..'', + +even if the pattern begins with a +``.''. + +This option is enabled by default.
globstar
@@ -12922,6 +13232,15 @@ 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. +
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
@@ -12934,6 +13253,14 @@ files (see above) 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 +under Parameter Expansion above. +This option is enabled by default.
progcomp
@@ -12960,7 +13287,8 @@ above. This option is enabled by default.
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 RESTRICTED SHELL @@ -12980,12 +13308,21 @@ number of positional parameters.
If set, the -source (.) builtin uses the value of +. (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 (see +REDIRECTION + + +above) instead of leaving them open when the command completes.
xpg_echo
@@ -13104,8 +13441,13 @@ exactly ), the result is the one-argument test of the second argument. Otherwise, the expression is false.
4 arguments
+The following conditions are applied in the order listed. If the first argument is !, the result is the negation of the three-argument expression composed of the remaining arguments. +the two-argument test using the second and third arguments. +If the first argument is exactly ( and the fourth argument is +exactly ), the result is the two-argument test of the second +and third arguments. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above.
5 or more arguments
@@ -13696,7 +14038,7 @@ are unset, they lose their special properties, even if they are subsequently reset. The exit status is true unless a name -is readonly. +is readonly or may not be unset.
wait [-fn] [-p varname] [id ...]
Wait for each specified child process and return its termination status. Each @@ -13963,6 +14305,17 @@ when the -l option is supplied. +
compat51
+ +
+
+
*
+The unset builtin treats attempts to unset array subscripts @ +and * differently depending on whether the array is indexed or +associative, and differently than in previous versions. +
+ + @@ -14074,7 +14427,7 @@ option to the builtin command
*
turning off restricted mode with -set +r or set +o restricted. +set +r or shopt -u restricted_shell.

@@ -14143,6 +14496,12 @@ The individual per-interactive-shell startup file

The individual login shell cleanup file, executed when a login shell exits
+~/.bash_history + +
+The default value of HISTFILE, the file in which bash saves the +command history +
~/.inputrc
@@ -14174,7 +14533,8 @@ version of bash. The latest version is always available from -ftp://ftp.gnu.org/pub/gnu/bash/. +ftp://ftp.gnu.org/pub/gnu/bash/ and +http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

Once you have determined that a bug actually exists, use the @@ -14257,7 +14617,7 @@ There may be only one active coprocess at a time.


-
GNU Bash 5.12020 October 29BASH(1) +GNU Bash 5.22021 December 26BASH(1)

@@ -14363,7 +14723,7 @@ There may be only one active coprocess at a time.
BUGS

-This document was created by man2html from bash.1.
-Time: 18 November 2020 15:13:09 EST +This document was created by man2html from /usr/local/src/bash/bash-20220105/doc/bash.1.
+Time: 11 January 2022 15:02:14 EST diff --git a/doc/bash.info b/doc/bash.info index 2fd137a92..a090315c7 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -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, 26 December 2021). - 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 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 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, 26 December 2021). The Bash home page is . - 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 26 December 2021, 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.  @@ -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. + + +File: bash.info, Node: Creating Internationalized Scripts, Up: Locale Translation + +Once you've marked the strings in your script that you want to translate +using $"...", you create a gettext "template" file using the command + + bash --dump-po-strings SCRIPTNAME > DOMAIN.pot + +The DOMAIN is your "message domain". It's just an arbitrary string +that's used to identify the files gettext needs, like a package or +script name. It needs to be unique among all the message domains on +systems where you install the translations, so gettext knows which +translations correspond to your script. You'll use the template file to +create translations for each target language. The template file +conventionally has the suffix '.pot'. + + You copy this template file to a separate file for each target +language you want to support (called "PO" files, which use the suffix +'.po'). PO files use various naming conventions, but when you are +working to translate a template file into a particular language, you +first copy the template file to a file whose name is the language you +want to target, with the '.po' suffix. For instance, the Spanish +translations of your strings would be in a file named 'es.po', and to +get started using a message domain named "example," you would run + + cp example.pot es.po + +Ultimately, PO files are often named DOMAIN.po and installed in +directories that contain multiple translation files for a particular +language. + + Whichever naming convention you choose, you will need to translate +the strings in the PO files into the appropriate languages. This has to +be done manually. + + When you have the translations and PO files complete, you'll use the +gettext tools to produce what are called "MO" files, which are compiled +versions of the PO files the gettext tools use to look up translations +efficiently. MO files are also called "message catalog" files. You use +the 'msgfmt' program to do this. For instance, if you had a file with +Spanish translations, you could run + + msgfmt -o es.mo es.po + +to produce the corresponding MO file. + + Once you have the MO files, you decide where to install them and use +the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +are. Make sure to use the same message domain to name the MO files as +you did for the PO files when you install them. + + Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to +select the desired language. + + You set the 'TEXTDOMAIN' variable to the script's message domain. As +above, you use the message domain to name your translation files. + + You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the +name of a directory where the message catalog files are stored. If you +install the message files into the system's standard message catalog +directory, you don't need to worry about this variable. + + The directory where the message catalog files are stored varies +between systems. Some use the message catalog selected by the +'LC_MESSAGES' shell variable. Others create the name of the message +catalog from the value of the 'TEXTDOMAIN' shell variable, possibly +adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may +need to set the 'TEXTDOMAINDIR' variable to the location of the message +catalog files, as above. It's common to use both variables in this +fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. + + If you used that last convention, and you wanted to store the message +catalog files with Spanish (es) and Esperanto (eo) translations into a +local directory you use for custom translation files, you could run + + TEXTDOMAIN=example + TEXTDOMAINDIR=/usr/local/share/locale + + cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo + cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo + + When all of this is done, and the message catalog files containing +the compiled translations are installed in the correct location, your +users will be able to see translated strings in any of the supported +languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +before running your script.  File: bash.info, Node: Comments, Prev: Quoting, Up: Shell Syntax @@ -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,11 @@ 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 + 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. +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 +737,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 +906,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 @@ -883,11 +976,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 +988,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 +1007,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 +1103,46 @@ 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. + Expressions may be combined using the following operators, listed in decreasing order of precedence: @@ -1024,9 +1177,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 +1192,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 +1211,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 +1280,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 +.  File: bash.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features @@ -1210,15 +1306,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 @@ -1281,7 +1377,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 +1386,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 @@ -1328,7 +1424,8 @@ been shadowed will become visible. 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 +1445,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 +1460,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 +1486,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 +1498,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 +1520,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 +1585,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 +1640,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 +1664,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 +1679,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 +1719,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 +1777,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.  File: bash.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions @@ -1708,7 +1804,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,22 +1830,39 @@ 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 @@ -1940,26 +2053,72 @@ 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. Backslash is used to quote '&' in STRING; the + backslash is removed in order to permit a literal '&' in the + replacement string. Pattern substitution performs the check for + '&' after expanding STRING, so users should take care to quote + backslashes intended to escape the '&' and inhibit replacement so + they survive any quote removal performed by the expansion of + STRING. For instance, + + var=abcdef + echo ${var/abc/& } + echo "${var/abc/& }" + echo ${var/abc/"& "} + + will display three lines of "abc def", while + + var=abcdef + echo ${var/abc/\& } + echo "${var/abc/\& }" + echo ${var/abc/"\& "} + + will display two lines of "abc def" and a third line of "& def". + The first two are replaced because the backslash is removed by + quote removal performed during the expansion of STRING (the + expansion is performed in a context that doesn't take any enclosing + double quotes into account, as with other word expansions). In the + third case, the double quotes affect the expansion of '\&', and, + because '&' is not one of the characters for which backslash is + special in double quotes, the backslash survives the expansion, + inhibits the replacement, but is removed because it is treated + specially. One could use '\\&', unquoted, as the replacement + string to achive the same effect. 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 +2129,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 +2184,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 +2242,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 +2342,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 +2355,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 @@ -2245,7 +2415,7 @@ characters must be quoted if they are to be matched literally. 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 +2424,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 +2433,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 +2455,14 @@ of the following sub-patterns: '!(PATTERN-LIST)' Matches anything except one of the given patterns. + 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 +2485,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 +2502,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 +2765,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 +2825,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 +2837,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 +2889,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 +2915,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 +2951,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 +2981,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::). +  File: bash.info, Node: Signals, Prev: Exit Status, Up: Executing Commands @@ -2835,6 +3024,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. +  File: bash.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features @@ -2857,8 +3073,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 +3178,19 @@ 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, 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, '.' 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 +3204,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 +3237,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 +3293,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 +3497,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 +3595,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 +3603,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.  File: bash.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands @@ -3406,6 +3633,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 +3698,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 +3787,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 +3814,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 +3857,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 +3930,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 +4064,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 +4175,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 +4233,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 +4377,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 +4559,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 +4668,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 +4682,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 +4695,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. @@ -4616,6 +4863,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 +4927,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 +4958,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 +5009,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 +5250,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 +5287,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 +5299,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 +5352,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: , + 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' @@ -5141,16 +5411,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 +5487,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 +5565,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 +5719,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 +5735,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 +5761,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. @@ -5882,8 +6156,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 arguments, unless -'-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 +6215,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 +6267,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 +6283,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 +6505,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 +6531,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 +6546,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 @@ -6402,7 +6679,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 +6758,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 +6773,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 +6813,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.  File: bash.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features @@ -6523,9 +6834,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 +6882,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 +6949,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 +6961,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'. @@ -6764,7 +7076,11 @@ startup files. 25. 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 iteration variable in a 'for' statement or the selection variable @@ -6848,14 +7164,14 @@ startup files. 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 + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + 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. @@ -7040,6 +7356,30 @@ 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. +  File: bash.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7093,19 +7433,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 +7574,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, @@ -7582,7 +7922,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 @@ -7662,7 +8002,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 +8051,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 @@ -7745,6 +8089,18 @@ 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 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 @@ -8438,6 +8794,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. +  File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands @@ -8849,6 +9210,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 @@ -9578,9 +9945,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 @@ -9613,6 +9980,11 @@ history file. FILENAME is given, then it is used as the history file. If not, then the value of the 'HISTFILE' variable is used. + The return value is 0 unless an invalid option is encountered, an + error occurs while reading or writing the history file, an invalid + OFFSET or range is supplied as an argument to '-d', or the history + expansion supplied as an argument to '-p' fails. +  File: bash.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -9897,20 +10269,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 +10321,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 @@ -10009,10 +10389,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 +10403,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. +  File: bash.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash @@ -10135,16 +10542,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 ofthe 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 +10568,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 +10580,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 +10614,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 +10673,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 +10682,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 +10736,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 +10745,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 +10775,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 -. + and from +. 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 +10902,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 +10936,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 +11054,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' @@ -11252,18 +11675,18 @@ D.1 Index of Shell Builtin Commands * :: Bourne Shell Builtins. (line 11) * [: Bourne Shell Builtins. - (line 270) + (line 274) * 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) +* builtin: Bash Builtins. (line 108) +* caller: Bash Builtins. (line 117) * cd: Bourne Shell Builtins. (line 44) -* command: Bash Builtins. (line 130) +* command: Bash Builtins. (line 134) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. @@ -11271,75 +11694,75 @@ D.1 Index of Shell Builtin Commands * compopt: Programmable Completion Builtins. (line 237) * continue: Bourne Shell Builtins. - (line 85) -* declare: Bash Builtins. (line 150) + (line 89) +* 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) +* echo: Bash Builtins. (line 257) +* enable: Bash Builtins. (line 306) * eval: Bourne Shell Builtins. - (line 94) + (line 98) * exec: Bourne Shell Builtins. - (line 102) + (line 106) * exit: Bourne Shell Builtins. - (line 120) + (line 124) * export: Bourne Shell Builtins. - (line 127) + (line 131) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 143) + (line 147) * hash: Bourne Shell Builtins. - (line 187) -* help: Bash Builtins. (line 331) + (line 191) +* 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 211) +* read: Bash Builtins. (line 488) +* readarray: Bash Builtins. (line 585) * readonly: Bourne Shell Builtins. - (line 217) + (line 221) * return: Bourne Shell Builtins. - (line 236) + (line 240) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 257) + (line 261) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 579) +* source: Bash Builtins. (line 594) * suspend: Job Control Builtins. (line 113) * test: Bourne Shell Builtins. - (line 270) + (line 274) * times: Bourne Shell Builtins. - (line 349) + (line 359) * trap: Bourne Shell Builtins. - (line 355) -* type: Bash Builtins. (line 584) -* typeset: Bash Builtins. (line 616) -* ulimit: Bash Builtins. (line 622) + (line 365) +* 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 414) +* unalias: Bash Builtins. (line 743) * unset: Bourne Shell Builtins. - (line 422) + (line 432) * wait: Job Control Builtins. (line 76) @@ -11354,9 +11777,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 +11801,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,21 +11817,21 @@ D.3 Parameter and Variable Index [index] * 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) @@ -11446,20 +11869,20 @@ D.3 Parameter and Variable Index * colored-completion-prefix: Readline Init File Syntax. (line 55) * colored-stats: Readline Init File Syntax. - (line 62) + (line 65) * COLUMNS: Bash Variables. (line 202) * comment-begin: Readline Init File Syntax. - (line 68) + (line 71) * completion-display-width: Readline Init File Syntax. - (line 73) + (line 76) * completion-ignore-case: Readline Init File Syntax. - (line 80) + (line 83) * completion-map-case: Readline Init File Syntax. - (line 85) + (line 88) * completion-prefix-display-length: Readline Init File Syntax. - (line 91) + (line 94) * completion-query-items: Readline Init File Syntax. - (line 98) + (line 101) * COMPREPLY: Bash Variables. (line 254) * COMP_CWORD: Bash Variables. (line 208) * COMP_KEY: Bash Variables. (line 237) @@ -11469,29 +11892,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 112) * COPROC: Bash Variables. (line 260) * DIRSTACK: Bash Variables. (line 264) * disable-completion: Readline Init File Syntax. - (line 116) + (line 120) * echo-control-characters: Readline Init File Syntax. - (line 121) + (line 125) * editing-mode: Readline Init File Syntax. - (line 126) + (line 130) * EMACS: Bash Variables. (line 274) * emacs-mode-string: Readline Init File Syntax. - (line 132) + (line 136) +* enable-active-region: Readline Init File Syntax. + (line 146) * enable-bracketed-paste: Readline Init File Syntax. - (line 142) + (line 158) * enable-keypad: Readline Init File Syntax. - (line 150) + (line 166) * 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 177) * FCEDIT: Bash Variables. (line 316) * FIGNORE: Bash Variables. (line 320) * FUNCNAME: Bash Variables. (line 326) @@ -11505,15 +11930,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 181) * history-size: Readline Init File Syntax. - (line 171) + (line 187) * 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 196) * HOSTFILE: Bash Variables. (line 448) * HOSTNAME: Bash Variables. (line 459) * HOSTTYPE: Bash Variables. (line 462) @@ -11521,18 +11946,21 @@ D.3 Parameter and Variable Index (line 18) * IGNOREEOF: Bash Variables. (line 465) * input-meta: Readline Init File Syntax. - (line 189) + (line 205) * INPUTRC: Bash Variables. (line 475) * INSIDE_EMACS: Bash Variables. (line 479) * isearch-terminators: Readline Init File Syntax. - (line 197) + (line 213) * keymap: Readline Init File Syntax. - (line 204) -* LANG: Bash Variables. (line 485) + (line 220) +* 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 +11974,15 @@ D.3 Parameter and Variable Index (line 27) * MAPFILE: Bash Variables. (line 540) * mark-modified-lines: Readline Init File Syntax. - (line 234) + (line 250) * mark-symlinked-directories: Readline Init File Syntax. - (line 239) + (line 255) * match-hidden-files: Readline Init File Syntax. - (line 244) + (line 260) * menu-complete-display-prefix: Readline Init File Syntax. - (line 251) + (line 267) * meta-flag: Readline Init File Syntax. - (line 189) + (line 205) * OLDPWD: Bash Variables. (line 544) * OPTARG: Bourne Shell Variables. (line 34) @@ -11563,9 +11991,9 @@ D.3 Parameter and Variable Index (line 38) * OSTYPE: Bash Variables. (line 551) * output-meta: Readline Init File Syntax. - (line 256) + (line 272) * page-completions: Readline Init File Syntax. - (line 262) + (line 278) * PATH: Bourne Shell Variables. (line 42) * PIPESTATUS: Bash Variables. (line 554) @@ -11582,37 +12010,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 288) +* 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 294) * show-all-if-unmodified: Readline Init File Syntax. - (line 284) + (line 300) * show-mode-in-prompt: Readline Init File Syntax. - (line 293) + (line 309) * 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 315) +* 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 328) * vi-ins-mode-string: Readline Init File Syntax. - (line 323) + (line 339) * visible-stats: Readline Init File Syntax. - (line 334) + (line 350)  File: bash.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -11628,7 +12059,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 +12108,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 +12121,7 @@ D.4 Function Index * dynamic-complete-history (M-): 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 +12129,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 +12159,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 +12169,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 +12217,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 +12225,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 +12348,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 +12405,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 +12422,138 @@ D.5 Concept Index  Tag Table: -Node: Top895 -Node: Introduction2813 -Node: What is Bash?3029 -Node: What is a shell?4143 -Node: Definitions6681 -Node: Basic Shell Features9632 -Node: Shell Syntax10851 -Node: Shell Operation11877 -Node: Quoting13170 -Node: Escape Character14470 -Node: Single Quotes14955 -Node: Double Quotes15303 -Node: ANSI-C Quoting16581 -Node: Locale Translation17840 -Node: Comments18993 -Node: Shell Commands19611 -Node: Reserved Words20549 -Node: Simple Commands21305 -Node: Pipelines21959 -Node: Lists24891 -Node: Compound Commands26682 -Node: Looping Constructs27694 -Node: Conditional Constructs30189 -Node: Command Grouping41760 -Node: Coprocesses43239 -Node: GNU Parallel45142 -Node: Shell Functions49443 -Node: Shell Parameters56650 -Node: Positional Parameters61063 -Node: Special Parameters61963 -Node: Shell Expansions65187 -Node: Brace Expansion67310 -Node: Tilde Expansion70033 -Node: Shell Parameter Expansion72650 -Node: Command Substitution87779 -Node: Arithmetic Expansion89134 -Node: Process Substitution90066 -Node: Word Splitting91186 -Node: Filename Expansion93130 -Node: Pattern Matching95679 -Node: Quote Removal99665 -Node: Redirections99960 -Node: Executing Commands109530 -Node: Simple Command Expansion110200 -Node: Command Search and Execution112154 -Node: Command Execution Environment114530 -Node: Environment117514 -Node: Exit Status119173 -Node: Signals120843 -Node: Shell Scripts122810 -Node: Shell Builtin Commands125822 -Node: Bourne Shell Builtins127860 -Node: Bash Builtins148789 -Node: Modifying Shell Behavior178898 -Node: The Set Builtin179243 -Node: The Shopt Builtin189656 -Node: Special Builtins204566 -Node: Shell Variables205545 -Node: Bourne Shell Variables205982 -Node: Bash Variables208086 -Node: Bash Features240720 -Node: Invoking Bash241733 -Node: Bash Startup Files247746 -Node: Interactive Shells252849 -Node: What is an Interactive Shell?253259 -Node: Is this Shell Interactive?253908 -Node: Interactive Shell Behavior254723 -Node: Bash Conditional Expressions258237 -Node: Shell Arithmetic262814 -Node: Aliases265754 -Node: Arrays268374 -Node: The Directory Stack274383 -Node: Directory Stack Builtins275167 -Node: Controlling the Prompt278135 -Node: The Restricted Shell281085 -Node: Bash POSIX Mode283679 -Node: Shell Compatibility Mode294715 -Node: Job Control301371 -Node: Job Control Basics301831 -Node: Job Control Builtins306827 -Node: Job Control Variables312227 -Node: Command Line Editing313383 -Node: Introduction and Notation315054 -Node: Readline Interaction316677 -Node: Readline Bare Essentials317868 -Node: Readline Movement Commands319651 -Node: Readline Killing Commands320611 -Node: Readline Arguments322529 -Node: Searching323573 -Node: Readline Init File325759 -Node: Readline Init File Syntax327018 -Node: Conditional Init Constructs347556 -Node: Sample Init File351752 -Node: Bindable Readline Commands354876 -Node: Commands For Moving356080 -Node: Commands For History358131 -Node: Commands For Text362924 -Node: Commands For Killing366573 -Node: Numeric Arguments369606 -Node: Commands For Completion370745 -Node: Keyboard Macros374936 -Node: Miscellaneous Commands375623 -Node: Readline vi Mode381307 -Node: Programmable Completion382214 -Node: Programmable Completion Builtins389994 -Node: A Programmable Completion Example400689 -Node: Using History Interactively405936 -Node: Bash History Facilities406620 -Node: Bash History Builtins409625 -Node: History Interaction414354 -Node: Event Designators417974 -Node: Word Designators419328 -Node: Modifiers421088 -Node: Installing Bash422899 -Node: Basic Installation424036 -Node: Compilers and Options427294 -Node: Compiling For Multiple Architectures428035 -Node: Installation Names429728 -Node: Specifying the System Type430546 -Node: Sharing Defaults431262 -Node: Operation Controls431935 -Node: Optional Features432893 -Node: Reporting Bugs443411 -Node: Major Differences From The Bourne Shell444605 -Node: GNU Free Documentation License461457 -Node: Indexes486634 -Node: Builtin Index487088 -Node: Reserved Word Index493915 -Node: Variable Index496363 -Node: Function Index512260 -Node: Concept Index525770 +Node: Top894 +Node: Introduction2811 +Node: What is Bash?3024 +Node: What is a shell?4135 +Node: Definitions6670 +Node: Basic Shell Features9618 +Node: Shell Syntax10834 +Node: Shell Operation11857 +Node: Quoting13147 +Node: Escape Character14448 +Node: Single Quotes14930 +Node: Double Quotes15275 +Node: ANSI-C Quoting16550 +Node: Locale Translation17857 +Node: Creating Internationalized Scripts19165 +Node: Comments23279 +Node: Shell Commands23894 +Node: Reserved Words24829 +Node: Simple Commands25582 +Node: Pipelines26233 +Node: Lists29189 +Node: Compound Commands30981 +Node: Looping Constructs31990 +Node: Conditional Constructs34482 +Node: Command Grouping48823 +Node: Coprocesses50298 +Node: GNU Parallel52958 +Node: Shell Functions53872 +Node: Shell Parameters61160 +Node: Positional Parameters65545 +Node: Special Parameters66444 +Node: Shell Expansions69655 +Node: Brace Expansion71779 +Node: Tilde Expansion74510 +Node: Shell Parameter Expansion77128 +Node: Command Substitution94991 +Node: Arithmetic Expansion96343 +Node: Process Substitution97308 +Node: Word Splitting98425 +Node: Filename Expansion100366 +Node: Pattern Matching103112 +Node: Quote Removal107717 +Node: Redirections108009 +Node: Executing Commands117666 +Node: Simple Command Expansion118333 +Node: Command Search and Execution120440 +Node: Command Execution Environment122815 +Node: Environment125847 +Node: Exit Status127507 +Node: Signals129288 +Node: Shell Scripts132734 +Node: Shell Builtin Commands135758 +Node: Bourne Shell Builtins137793 +Node: Bash Builtins159251 +Node: Modifying Shell Behavior190104 +Node: The Set Builtin190446 +Node: The Shopt Builtin201044 +Node: Special Builtins216953 +Node: Shell Variables217929 +Node: Bourne Shell Variables218363 +Node: Bash Variables220464 +Node: Bash Features253277 +Node: Invoking Bash254287 +Node: Bash Startup Files260297 +Node: Interactive Shells265397 +Node: What is an Interactive Shell?265804 +Node: Is this Shell Interactive?266450 +Node: Interactive Shell Behavior267262 +Node: Bash Conditional Expressions270888 +Node: Shell Arithmetic275527 +Node: Aliases278468 +Node: Arrays281078 +Node: The Directory Stack287322 +Node: Directory Stack Builtins288103 +Node: Controlling the Prompt292360 +Node: The Restricted Shell295322 +Node: Bash POSIX Mode297929 +Node: Shell Compatibility Mode309199 +Node: Job Control317225 +Node: Job Control Basics317682 +Node: Job Control Builtins322681 +Node: Job Control Variables328078 +Node: Command Line Editing329231 +Node: Introduction and Notation330899 +Node: Readline Interaction332519 +Node: Readline Bare Essentials333707 +Node: Readline Movement Commands335487 +Node: Readline Killing Commands336444 +Node: Readline Arguments338359 +Node: Searching339400 +Node: Readline Init File341583 +Node: Readline Init File Syntax342841 +Node: Conditional Init Constructs364326 +Node: Sample Init File368519 +Node: Bindable Readline Commands371640 +Node: Commands For Moving372841 +Node: Commands For History374889 +Node: Commands For Text379880 +Node: Commands For Killing383526 +Node: Numeric Arguments386556 +Node: Commands For Completion387692 +Node: Keyboard Macros391880 +Node: Miscellaneous Commands392564 +Node: Readline vi Mode398500 +Node: Programmable Completion399404 +Node: Programmable Completion Builtins407181 +Node: A Programmable Completion Example417873 +Node: Using History Interactively423117 +Node: Bash History Facilities423798 +Node: Bash History Builtins426800 +Node: History Interaction431805 +Node: Event Designators435422 +Node: Word Designators436773 +Node: Modifiers438530 +Node: Installing Bash440338 +Node: Basic Installation441472 +Node: Compilers and Options445191 +Node: Compiling For Multiple Architectures445929 +Node: Installation Names447619 +Node: Specifying the System Type449725 +Node: Sharing Defaults450438 +Node: Operation Controls451108 +Node: Optional Features452063 +Node: Reporting Bugs463278 +Node: Major Differences From The Bourne Shell464550 +Node: GNU Free Documentation License481397 +Node: Indexes506571 +Node: Builtin Index507022 +Node: Reserved Word Index513846 +Node: Variable Index516291 +Node: Function Index532780 +Node: Concept Index546561  End Tag Table diff --git a/doc/bash.pdf b/doc/bash.pdf index d8d784ee712f1818200ffe00b1f2ad6ad5694d27..59003607e3c6f0672668c04d3ee17469eb9e6000 100644 GIT binary patch delta 337040 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 z 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 U^YPpFYjG7d@9UeJhfn+KznJSpcmMzZ delta 322502 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%0AAw#82wQ1hp;od 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

FH3mVdYc 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%0Du$9U+5`+YU3XUwiy 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

p|N$1F* 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 B?-T$4 diff --git a/doc/bash.ps b/doc/bash.ps index bd38ef3be..2715369ea 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,13 +1,13 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.22.4 -%%CreationDate: Wed Nov 18 15:13:06 2020 +%%CreationDate: Tue Jan 11 15:02:05 2022 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%+ font Symbol %%DocumentSuppliedResources: procset grops 1.22 4 -%%Pages: 83 +%%Pages: 86 %%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-2021 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 +(2021 December 26)136.795 E(1)190.955 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 F12.734 E F0 .233 -(is speci\214ed\) and without the)2.734 F F12.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 F12.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 F13.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(2021 December 26)136.795 E(2) +190.955 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP @@ -591,3359 +591,3486 @@ 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 +(2021 December 26)136.795 E(3)190.955 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 F2A F0(]] [ ! ])A F1 -(command)2.5 E F0 2.5([[)2.5 G F2(|)-2.5 E/F3 10/Symbol SFA 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 F1A F0(]] [ ! ])A F2(command1)2.5 E +F0 2.5([[)2.5 G F1(|)-2.5 E/F3 10/Symbol SFA 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 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()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 .426 +(Each command in a pipeline is e)108 458.4 R -.15(xe)-.15 G .426 +(cuted in a).15 F F2(subshell)2.926 E F0 2.926(,w)C .426 +(hich is a separate process.)-2.926 F(See)5.426 E F4 .426(COMMAND EXE-) +2.926 F .153(CUTION ENVIR)108 470.4 R(ONMENT)-.27 E F0 .153 +(for a description of subshells and a subshell en)2.403 F 2.653 +(vironment. If)-.4 F(the)2.653 E F1(lastpipe)2.653 E F0(option)2.653 E +.648(is enabled using the)108 482.4 R F1(shopt)3.148 E F0 -.2(bu)3.147 G +.647(iltin \(see the description of).2 F F1(shopt)3.147 E F0(belo)3.147 +E .647(w\), the last element of a pipeline may)-.25 F +(be run by the shell process when job control is not acti)108 494.4 Q +-.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 sequence 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()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(2021 December 26)136.795 E(4)190.955 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 F13.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 F22.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 +(2021 December 26)136.795 E(5)190.955 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(string matching the)144 108 Q F2 +(n)2.5 E F0(th parenthesized sube)A(xpression.)-.15 E .785 +(Expressions may be combined using the follo)144 126 R .786 +(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144 +138 Q/F3 10/Times-Bold@0 SF(\()144 156 Q F2 -.2(ex)2.5 G(pr).2 E(ession) +-.37 E F3(\))2.5 E F0 .523(Returns the v)180 168 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 180 Q F3(!)144 192 +Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 204 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 216 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 228 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 240 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 252 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) +F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0(is true.)2.52 E(The)144 268.8 +Q F3(&&)2.675 E F0(and)2.675 E F3(||)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 +-.25 F(termine the return v)144 280.8 Q +(alue of the entire conditional e)-.25 E(xpression.)-.15 E F3 -.25(fo) +108 297.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 .424(The list of w)144 309.6 R .424 +(ords follo)-.1 F(wing)-.25 E F3(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 +(each element of this list in turn, and)144 321.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 +(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 .649(command e) +144 333.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 F1 -.666 +(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).)-.25 E .153 +(The return status is the e)144 345.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 +(follo)144 357.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 374.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) +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.236(First, the arithmetic e) +144 386.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) +(nder)-3.735 E F1 .561(ARITHMETIC EV)144 398.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 +410.4 R -.25(va)-.25 G .592(luates to zero.).25 F .592(Each time)5.592 F F2 -.2(ex)3.092 G(pr2).2 E F0 -.25(eva)3.092 G .592 (luates to a non-zero v).25 F(alue,)-.25 E F2(list)3.092 E F0 .591(is e) 3.092 F -.15(xe)-.15 G .591(cuted and the arith-).15 F .228(metic e)144 -350.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F +422.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F -.25(va)-.25 G 2.729(luated. If).25 F(an)2.729 E 2.729(ye)-.15 G .229 (xpression is omitted, it beha)-2.879 F -.15(ve)-.2 G 2.729(sa).15 G 2.729(si)-2.729 G 2.729(fi)-2.729 G 2.729(te)-2.729 G -.25(va)-2.979 G -.229(luates to 1.).25 F .228(The return v)144 362.4 R .228 +.229(luates to 1.).25 F .228(The return v)144 434.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) +E -.15(ex)144 446.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F3 +(select)108 463.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 +.432(The list of w)144 475.2 R .432(ords follo)-.1 F(wing)-.25 E F3(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 +(is printed on the standard error)144 487.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 +-3.342 E F3(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 +144 499.2 R F1 -.666(PA)2.701 G(RAMETERS).666 E F0(belo)2.451 E 2.701 +(w\). The)-.25 F F1(PS3)2.701 E F0 .201(prompt is then displayed and a) +2.451 F .214(line read from the standard input.)144 511.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) +F 1.537(played w)144 523.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 +F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 535.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 +F F2(name)144.36 547.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 +-3.454 G .954(he v)-3.454 F(ariable)-.25 E F1(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) +.954(cuted after).15 F .072(each selection until a)144 559.2 R F3(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) +(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F3(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 +(last command e)144 571.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 +-.15 G(cuted.).15 E F3(case)108 588 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 F1(esac)2.5 E F0(A)144 528 Q F1(case)3.264 E F0 .764 +2.5 E F3(esac)2.5 E F0(A)144 600 Q F3(case)3.264 E F0 .764 (command \214rst e)3.264 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0 3.264(,a)C .764(nd tries to match it ag)-3.264 F .764(ainst each)-.05 F F2(pattern)3.264 E F0 .765(in turn, using the)3.264 F .884 -(matching rules described under)144 540 R F1 -.1(Pa)3.384 G(tter).1 E +(matching rules described under)144 612 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 (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 +624 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 +(substitution and quote remo)144 636 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 +(eter and v)144 648 R .103(ariable e)-.25 F .103(xpansion, arithmetic e) +-.15 F .103(xpansion, command substitution, process substitution, and) +-.15 F .139(quote remo)144 660 R -.25(va)-.15 G 2.639(l. If).25 F(the) +2.639 E F3(nocasematch)2.639 E F0 .138 +(shell option is enabled, the match is performed without re)2.639 F -.05 +(ga)-.15 G(rd).05 E .208(to the case of alphabetic characters.)144 672 R +.209(When a match is found, the corresponding)5.209 F F2(list)2.709 E F0 +.209(is e)2.709 F -.15(xe)-.15 G 2.709(cuted. If).15 F(the)144 684 Q F3 +(;;)3.35 E F0 .849(operator is used, no subsequent matches are attempte\ +d after the \214rst pattern match.)3.35 F(Using)5.849 E F3(;&)144 696 Q +F0 .253(in place of)2.753 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 .254(xt set of patterns.)-.15 F +(Using)144 708 Q F3(;;&)2.617 E F0 .117(in place of)2.617 F F3(;;)2.616 +E F0 .116(causes the shell to test the ne)2.616 F .116 +(xt pattern list in the statement, if an)-.15 F 1.416 -.65(y, a)-.15 H +.116(nd e).65 F(x-)-.15 E .768(ecute an)144 720 R 3.268(ya)-.15 G +(ssociated)-3.268 E F2(list)3.268 E F0 .768 +(on a successful match, continuing the case statement e)3.268 F -.15(xe) +-.15 G .768(cution as if the).15 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(6)190.955 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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .183 +(pattern list had not matched.)144 84 R .183(The e)5.183 F .183 +(xit status is zero if no pattern matches.)-.15 F .182 +(Otherwise, it is the e)5.183 F(xit)-.15 E(status of the last command e) +144 96 Q -.15(xe)-.15 G(cuted in).15 E/F1 10/Times-Italic@0 SF(list)2.5 +E F0(.)A/F2 10/Times-Bold@0 SF(if)108 112.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 124.8 Q F2(if)2.977 E F1 +(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 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.978 E F1(list)2.978 E F0 +1.088(is e)144 136.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 F2(then)3.587 E +F1(list)3.587 E F0 1.087(is e)3.587 F -.15(xe)-.15 G 1.087 +(cuted and the).15 F .103(command completes.)144 148.8 R .103 +(Otherwise, the)5.103 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 .104(xit sta-)-.15 F +(tus of the last command e)144 160.8 Q -.15(xe)-.15 G +(cuted, or zero if no condition tested true.).15 E F2(while)108 177.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 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 F0(The)144 201.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 213.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 .6(that the test is ne)144 225.6 R -.05 +(ga)-.15 G(ted:).05 E F1(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 F1(list-1)3.189 E F0 +.599(returns a non-zero)3.099 F -.15(ex)144 237.6 S .204(it status.).15 +F .204(The e)5.204 F .204(xit status of the)-.15 F F2(while)2.704 E F0 +(and)2.704 E F2(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 249.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 266.4 Q(ocesses)-.18 E F0 +(A)108 278.4 Q F1(copr)3.713 E(ocess)-.45 E F0 1.213 +(is a shell command preceded by the)3.713 F F2(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\ 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 290.4 R F2(&)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 302.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 319.2 Q F2(copr)144 336 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 .599(This creates a coprocess named)108 352.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 364.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 376.8 Q(OC)-.3 E F0(.)A +(The recommended form to use for a coprocess is)108 393.6 Q F2(copr)144 +410.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 427.2 R -.1(wa)-.1 G 1.313(ys being named).1 F F2(CO-)3.812 E(PR)108 +439.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 456 Q F1(command)3.061 E +F0 .561(is a compound command,)3.061 F F1 -.27(NA)3.061 G(ME).27 E F0 +.562(is optional. The w)3.061 F .562(ord follo)-.1 F(wing)-.25 E F2 +(copr)3.062 E(oc)-.18 E F0 .562(determines whether)3.062 F .339(that w) +108 468 R .339(ord is interpreted as a v)-.1 F .339 +(ariable name: it is interpreted as)-.25 F F1 -.27(NA)2.839 G(ME).27 E +F0 .338(if it is not a reserv)2.838 F .338(ed w)-.15 F .338 +(ord that intro-)-.1 F 1.121(duces a compound command.)108 480 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.122 +(wed; this is to a)-.25 F -.2(vo)-.2 G(id).2 E(confusion between)108 492 +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 508.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 520.8 Q .302 +(xt of the e)-.15 F -.15(xe)-.15 G .302(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 .588(in the e) +108 532.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.857 E 2.029 +(connected via a pipe to a \214le descriptor in the e)108 544.8 R -.15 +(xe)-.15 G 2.029 +(cuting shell, and that \214le descriptor is assigned to).15 F F1 -.27 +(NA)108 556.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 568.8 Q 3.425(w\). The)-.25 F .925 +(\214le descriptors can be utilized as ar)3.425 F .926 +(guments to shell commands and redirections using stan-)-.18 F .286 +(dard w)108 580.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 592.8 Q -.25(va)-.2 G(ilable in subshells.).25 +E 1.676(The process ID of the shell spa)108 609.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.677(alue of the v)-.25 F(ariable)-.25 E F1 -.27 +(NA)108 621.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 -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 -(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) +638.4 R F2(copr)2.836 E(oc)-.18 E F0 .335(command al)2.835 F -.1(wa)-.1 +G .335(ys returns success.).1 F +(The return status of a coprocess is the e)108 650.4 Q(xit status of) +-.15 E F1(command)2.5 E F0(.)A F2(Shell Function De\214nitions)87 667.2 +Q F0 2.697(As)108 679.2 S .198 +(hell function is an object that is called lik)-2.697 F 2.698(eas)-.1 G +.198(imple command and e)-2.698 F -.15(xe)-.15 G .198 +(cutes a compound command with).15 F 2.5(an)108 691.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 -(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 -.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 -.952(iltin is enabled \(see).2 F F3 .952(SHELL B)3.452 F(UIL)-.09 E .952 -(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) --.1 F .952(ginning with)-.15 F F1(#)3.451 E F0 .951(causes that w)3.451 -F(ord)-.1 E .604 -(and all remaining characters on that line to be ignored.)108 715.2 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 +(Shell functions are declared as follo)5 E(ws:)-.25 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(7)190.955 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 +(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 .217(This de\214nes a function named)144 108 R F1(fname)2.717 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 .216(is optional.)2.717 F .216(If the)5.216 F F2 +(function)2.716 E F0(re-)2.716 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.532(.I).15 G 3.032(ft)-5.532 G +(he)-3.032 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.253 E F0 1.253(is e)3.753 F -.15(xe) +-.15 G 1.253(cuted whene).15 F -.15(ve)-.25 G(r).15 E F1(fname)3.753 E +F0 1.254(is speci\214ed as the name of a)3.753 F 1.253(simple command.) +144 180 R 1.253(When in)6.253 F F1 1.253(posix mode)3.753 F F0(,)A F1 +(fname)3.753 E F0 1.252(must be a v)3.752 F 1.252(alid shell)-.25 F F1 +(name)3.752 E F0 1.252(and may not be the)3.752 F .088 +(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.589(yu)-.15 G(nquoted) +-2.589 E .165(shell w)144 204 R .165(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 .164 +(w\) speci\214ed when a)-.25 F .06 +(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.561 G .061 +(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.592(ists. When)144 240 R -.15(exe)2.592 G .092 +(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 .093(cuted in) +.15 F(the body)144 252 Q 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F0 +(belo)2.25 E -.65(w.)-.25 G(\)).65 E/F4 10.95/Times-Bold@0 SF(COMMENTS) +72 268.8 Q F0 .982(In a non-interacti)108 280.8 R 1.282 -.15(ve s)-.25 H +.982(hell, or an interacti).15 F 1.282 -.15(ve s)-.25 H .982 +(hell in which the).15 F F2(interacti)3.482 E -.1(ve)-.1 G(_comments).1 +E F0 .982(option to the)3.482 F F2(shopt)3.482 E F0 -.2(bu)108 292.8 S +.951(iltin is enabled \(see).2 F F3 .952(SHELL B)3.451 F(UIL)-.09 E .952 +(TIN COMMANDS)-.828 F F0(belo)3.202 E .952(w\), a w)-.25 F .952(ord be) +-.1 F .952(ginning with)-.15 F F2(#)3.452 E F0 .952(causes that w)3.452 +F(ord)-.1 E .605 +(and all remaining characters on that line to be ignored.)108 304.8 R +.604(An interacti)5.605 F .904 -.15(ve s)-.25 H .604(hell without the) +.15 F F2(interacti)3.104 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 .478(is used to remo)2.978 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 .477(Quoting can be)5.477 F .184 (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 -(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 +369.6 R -.15(ve)-.25 G .185(nt reserv).15 F .185(ed w)-.15 F .185 +(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 .289(Each of the)108 +398.4 R F1(metac)2.789 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288 +(listed abo)2.789 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.344 +(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 +(YE)-.315 G(XP)-3.594 E(ANSION)-.666 E F0(belo)3.595 E 1.345(w\), the) +-.25 F F1(history e)108 439.2 Q(xpansion)-.2 E F0(character)2.5 E 2.5 +(,u)-.4 G(sually)-2.5 E F2(!)2.5 E F0 2.5(,m)C(ust be quoted to pre)-2.5 +E -.15(ve)-.25 G(nt history e).15 E(xpansion.)-.15 E +(There are three quoting mechanisms: the)108 456 Q F1(escape c)2.69 E +(har)-.15 E(acter)-.15 E F0 2.5(,s).73 G +(ingle quotes, and double quotes.)-2.5 E 2.963(An)108 472.8 S .463 +(on-quoted backslash \()-2.963 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 . If)-.25 F(a)4.053 E F4(\\)4.053 E F0( pair appears, and the backslash is not itself)-.25 F .347 -(quoted, the)108 252 R F4(\\)2.847 E F0(. If)-.25 F(a)4.053 E F2(\\)4.053 E F0( pair appears, and the backslash is not itself)-.25 F .348 +(quoted, the)108 496.8 R F2(\\)2.848 E F0( 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 +-.15(ve)-.15 G 2.847(df).15 G .347(rom the input stream and ef-)-2.847 F +(fecti)108 508.8 Q -.15(ve)-.25 G(ly ignored\).).15 E .295 +(Enclosing characters in single quotes preserv)108 525.6 R .295 (es the literal v)-.15 F .295(alue of each character within the quotes.) -.25 F 2.795(As)5.295 G(in-)-2.795 E -(gle quote may not occur between single quotes, e)108 292.8 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 +(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 .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 .107(ception of).15 F F2($)2.607 E F0(,)A F2<92>2.607 E F0(,)A +F2(\\)2.607 E F0 2.607(,a)C .107(nd, when history e)-2.607 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 .108(posix mode)2.608 F F0 2.608(,t)C +(he)-2.608 E F2(!)2.608 E F0 .108(has no)2.608 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 -.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() -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 -(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 +(The characters)5.46 F F2($)2.96 E F0(and)2.96 E F2<92>2.96 E F0(re-) +2.96 E .562(tain their special meaning within double quotes.)108 590.4 R +.563(The backslash retains its special meaning only when fol-)5.563 F +(lo)108 602.4 Q .602(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() +3.102 E F0 5.602(.A)C .601(double quote may be quoted within)-2.5 F .13 +(double quotes by preceding it with a backslash.)108 614.4 R .131 +(If enabled, history e)5.131 F .131 +(xpansion will be performed unless an)-.15 F F2(!)2.631 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 .149 +(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 .148(The sequence e)5.148 F(x-)-.15 E +.527(pands to)108 672 R F1(string)3.027 E F0 3.027(,w)C .527 +(ith backslash-escaped characters in)-3.027 F F1(string)3.027 E F0 .528 +(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(2021 December 26)136.795 +E(8)190.955 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 +(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.507(the Unicode \(ISO/IEC 10646\) character whose v)180 252 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 264 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 +(\\U)144 276 Q F2(HHHHHHHH)A F0 .547 +(the Unicode \(ISO/IEC 10646\) character whose v)180 288 R .547 +(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-) +3.048 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 .784 +(to the current locale.)108 357.6 R(The)5.784 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.285 E(SA)108 369.6 Q(GES)-.55 E F0(,)A F1(TEXTDOMAINDIR) +2.761 E F0 2.761(,a)C(nd)-2.761 E F1(TEXTDOMAIN)2.761 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.76 E F0(or)2.76 E F1(POSIX)2.76 E F0(,)A .791 +(if there are no translations a)108 381.6 R -.25(va)-.2 G .792(ilable, \ +or if the string is not translated, the dollar sign is ignored.).25 F +.792(This is a)5.792 F .535 +(form of double quoting, so the string remains double-quoted by def)108 +393.6 R .534(ault, whether or not it is translated and)-.1 F 2.797 +(replaced. If)108 405.6 R(the)2.797 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.045 +(gle-quoted instead of double-quoted.)108 417.6 R 2.044 +(See the description of)7.045 F F1(shopt)4.544 E F0(belo)4.544 E 4.544 +(wu)-.25 G(nder)-4.544 E/F3 9/Times-Bold@0 SF(SHELL)4.544 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.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 +-3.325 F .802(listed belo)108 470.4 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 +.18 G -.25(va)-2.5 G .801(riable has a).25 F F2(value)108 482.4 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 +2.869 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.755(Ap)108 511.2 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 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.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 +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 -(x, the +=)-.15 F 1.631 -(operator can be used to append to or add to the v)108 400.8 R(ariable') --.25 E 4.13(sp)-.55 G(re)-4.13 E 1.63(vious v)-.25 F 4.13(alue. This) --.25 F 1.63(includes ar)4.13 F 1.63(guments to)-.18 F -.2(bu)108 412.8 S -.163(iltin commands such as).2 F F1(declar)2.664 E(e)-.18 E F0 .164 -(that accept assignment statements \()2.664 F 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) +-3.015 E F3(EXP)3.015 E(ANSION)-.666 E F0(belo)108 597.6 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 .746(if the $\(\(...\)\) e)108 609.6 R .746 +(xpansion is not used \(see)-.15 F F1 .745(Arithmetic Expansion)3.245 F +F0(belo)3.245 E 3.245(w\). W)-.25 F .745(ord splitting and pathname e) +-.8 F(x-)-.15 E 1.363(pansion are not performed.)108 621.6 R 1.364 +(Assignment statements may also appear as ar)6.363 F 1.364 +(guments to the)-.18 F F1(alias)3.864 E F0(,)A F1(declar)3.864 E(e)-.18 +E F0(,)A F1(typeset)108 633.6 Q F0(,)A F1(export)3.965 E F0(,)A F1 -.18 +(re)3.965 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.464(posix mode)3.964 F F0 +(,)A 1.141(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.642 E F0 -.2(bu)3.642 G 1.142(iltin and retain).2 F +(these assignment statement properties.)108 657.6 Q .377(In the conte) +108 674.4 R .377(xt where an assignment statement is assigning a v)-.15 +F .376(alue to a shell v)-.25 F .376(ariable or array inde)-.25 F .376 +(x, the +=)-.15 F 1.63 +(operator can be used to append to or add to the v)108 686.4 R(ariable') +-.25 E 4.131(sp)-.55 G(re)-4.131 E 1.631(vious v)-.25 F 4.131 +(alue. This)-.25 F 1.631(includes ar)4.131 F 1.631(guments to)-.18 F -.2 +(bu)108 698.4 S .164(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 .163(+= is)2.663 F .251 +(applied to a v)108 710.4 R .251(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.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 F13.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 +F F2(value)2.752 E F0 .252(is e)2.752 F -.25(va)-.25 G .252 +(luated as an arithmetic e).25 F(xpres-)-.15 E 1.227 +(sion and added to the v)108 722.4 R(ariable')-.25 E 3.727(sc)-.55 G +1.227(urrent v)-3.727 F 1.227(alue, which is also e)-.25 F -.25(va)-.25 +G 3.727(luated. When).25 F 1.226(+= is applied to an array)3.726 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(9)190.955 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 +.114(riable using compound assignment \(see).25 F/F1 10/Times-Bold@0 SF +(Arrays)2.614 E F0(belo)2.615 E .115(w\), the v)-.25 F(ariable')-.25 E +2.615(sv)-.55 G .115(alue is not unset \(as it is when us-)-2.865 F .388 +(ing =\), and ne)108 96 R 2.888(wv)-.25 G .388 +(alues are appended to the array be)-3.138 F .388 +(ginning at one greater than the array')-.15 F 2.887(sm)-.55 G .387 +(aximum inde)-2.887 F(x)-.15 E 1.596(\(for inde)108 108 R -.15(xe)-.15 G +4.096(da).15 G 1.596(rrays\) or added as additional k)-4.096 F -.15(ey) +-.1 G.15 E 1.596(alue pairs in an associati)-.25 F 1.896 -.15 +(ve a)-.25 H(rray).15 E 6.597(.W)-.65 G 1.597(hen applied to a)-6.597 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.383(Av)108 136.8 S .883 +(ariable can be assigned the)-3.633 F F2(namer)3.382 E(ef)-.37 E F0 +(attrib)3.382 E .882(ute using the)-.2 F F13.382 E F0 .882 +(option to the)3.382 F F1(declar)3.382 E(e)-.18 E F0(or)3.382 E F1 +(local)3.382 E F0 -.2(bu)3.382 G .882(iltin com-).2 F .315 +(mands \(see the descriptions of)108 148.8 R F1(declar)2.815 E(e)-.18 E +F0(and)2.815 E F1(local)2.815 E F0(belo)2.815 E .316(w\) to create a) +-.25 F F2(namer)2.816 E(ef)-.37 E F0 2.816(,o)C 2.816(rar)-2.816 G .316 +(eference to another v)-2.816 F(ari-)-.25 E 2.919(able. This)108 160.8 R +(allo)2.919 E .419(ws v)-.25 F .419 (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 -(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 -(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 -(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 +-5.419 E -.15(ve)-.25 G 2.918(rt).15 G .418(he nameref v)-2.918 F .418 +(ariable is referenced, as-)-.25 F .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.633 +E(ef)-.37 E F0(attrib)2.633 E .133(ute itself\), the)-.2 F 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.856(sv) +-.55 G 3.856(alue. A)-4.106 F 1.356(nameref is)3.856 F .971 +(commonly used within shell functions to refer to a v)108 196.8 R .972 +(ariable whose name is passed as an ar)-.25 F .972(gument to the)-.18 F +2.5(function. F)108 208.8 R(or instance, if a v)-.15 E (ariable name is passed to a shell function as its \214rst ar)-.25 E -(gument, running)-.18 E/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 .303(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 +-.25 F .302(ariable name passed as the \214rst ar)-.25 F(gu-)-.18 E +3.592(ment. References)108 256.8 R 1.092(and assignments to)3.592 F F1 -.18(re)3.592 G(f).18 E F0 3.592(,a)C 1.092(nd changes to its attrib) --3.592 F 1.092(utes, are treated as references, assign-)-.2 F .143 -(ments, and attrib)108 633.6 R .144(ute modi\214cations to the v)-.2 F +-3.592 F 1.092(utes, are treated as references, assign-)-.2 F .144 +(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 -(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 +F0 5.144(.I)C 2.644(ft)-5.144 G .144(he control v)-2.644 F .143 +(ariable in a)-.25 F F1 -.25(fo)108 280.8 S(r).25 E F0 .867 +(loop has the nameref attrib)3.367 F .867(ute, the list of w)-.2 F .868 +(ords can be a list of shell v)-.1 F .868 (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) --.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 -.533(can be unset using the)3.033 F F13.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 -R .442(ariable as an ar)-.25 F .442(gument, the v)-.18 F .442 +304.8 Q -.15(ve)-.25 G 3.031(nt).15 G(he)-3.031 E F1(namer)3.031 E(ef) +-.18 E F0(attrib)3.031 E 3.031(ute. Ho)-.2 F(we)-.25 E -.15(ve)-.25 G +1.331 -.4(r, n).15 H .531(ameref v).4 F .532 +(ariables can reference array v)-.25 F .532(ariables and subscripted ar) +-.25 F(-)-.2 E .534(ray v)108 316.8 R 3.034(ariables. Namerefs)-.25 F +.534(can be unset using the)3.034 F F13.033 E F0 .533 +(option to the)3.033 F F1(unset)3.033 E F0 -.2(bu)3.033 G 3.033 +(iltin. Otherwise,).2 F(if)3.033 E F1(unset)3.033 E F0 .533(is e)3.033 F +-.15(xe)-.15 G(-).15 E .442(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 .443 (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 .706(positional par)4.456 F(ameter) +-.15 E F0 .706(is a parameter denoted by one or more digits, other than\ + the single digit 0.)3.936 F(Posi-)5.705 E .444 +(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 .445(d, and may be reassigned using).1 F(the)108 393.6 Q F1 +(set)3.334 E F0 -.2(bu)3.334 G .834(iltin command.).2 F .833(Positional\ + parameters may not be assigned to with assignment statements.)5.834 F +(The)5.833 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.403(When \ +a positional parameter consisting of more than a single digit is e)108 +422.4 R 1.404(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.675(The shell treats se)108 +463.2 R -.15(ve)-.25 G 1.675(ral parameters specially).15 F 6.675(.T) +-.65 G 1.674(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 +.223(Expands to the positional parameters, starting from one.)144 487.2 +R .224(When the e)5.224 F .224(xpansion is not within double)-.15 F .663 +(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 -(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 -(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 -(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) -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 +(xts where it is performed,)-.15 F 1.081(those w)144 511.2 R 1.081 +(ords are subject to further w)-.1 F 1.082(ord splitting and pathname e) +-.1 F 3.582(xpansion. When)-.15 F 1.082(the e)3.582 F(xpansion)-.15 E +.915(occurs within double quotes, it e)144 523.2 R .914 +(xpands to a single w)-.15 F .914(ord with the v)-.1 F .914 +(alue of each parameter sepa-)-.25 F .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 .891(is, ")3.391 F F1($*)A +F0 3.391("i)C 3.391(se)-3.391 G(qui)-3.391 E -.25(va)-.25 G .891 +(lent to ").25 F F1($1)A F2(c)A F1($2)A F2(c)A F1(...)A F0(",)A(where) +144 547.2 Q F2(c)3.533 E F0 .832(is the \214rst character of the v)3.643 +F .832(alue of the)-.25 F F4(IFS)3.332 E F0 -.25(va)3.082 G 3.332 +(riable. If).25 F F4(IFS)3.332 E F0 .832(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 -.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 +(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 .723(ord splitting is per) +-.1 F(-)-.2 E 1.165(formed, this e)144 583.2 R 1.165 (xpands each positional parameter to a separate w)-.15 F 1.165 -(ord; if not within double quotes,)-.1 F .655(these w)144 321.6 R .655 +(ord; if not within double quotes,)-.1 F .654(these w)144 595.2 R .654 (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 +5.655 F .655(xts where w)-.15 F .655 +(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 -(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 -(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) --.1 F .379(xpansion of the)-.15 F .771 -(last parameter is joined with the last part of the original w)144 381.6 -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 +(When the e)5.748 F(xpan-)-.15 E 1.09 +(sion occurs within double quotes, each parameter e)144 619.2 R 1.091 +(xpands to a separate w)-.15 F 3.591(ord. That)-.1 F 1.091(is, ")3.591 F +F1($@)A F0 3.591("i)C(s)-3.591 E(equi)144 631.2 Q -.25(va)-.25 G .413 +(lent to ").25 F F1($1)A F0 2.913("")C F1($2)-2.913 E F0 2.913(".)C +2.913(.. If)-2.913 F .413(the double-quoted e)2.913 F .413 +(xpansion occurs within a w)-.15 F .412(ord, the e)-.1 F .412 +(xpansion of)-.15 F .379(the \214rst parameter is joined with the be)144 +643.2 R .379(ginning part of the original w)-.15 F .38(ord, and the e) +-.1 F .38(xpansion of the)-.15 F .771 +(last parameter is joined with the last part of the original w)144 655.2 +R 3.271(ord. When)-.1 F .771(there are no positional pa-)3.271 F +(rameters, ")144 667.2 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)2.5 E F0 -.15(ex)2.5 G(pand to nothing \(i.e., the).15 E 2.5(ya)-.15 G(re remo) --2.5 E -.15(ve)-.15 G(d\).).15 E F1(#)108 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 F1108 429.6 Q F0 .882 -(Expands to the current option \215ags as speci\214ed upon in)144 429.6 -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 F12.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 -(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 -(ith a \214le of commands,)-2.668 F F1($0)2.668 E F0 .167 +E(ground pipeline.)-.15 E F1108 703.2 Q F0 .881 +(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.382 E F0 -.2(bu)3.382 G +.882(iltin command, or).2 F(those set by the shell itself \(such as the) +144 715.2 Q F12.5 E F0(option\).)2.5 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(10)185.955 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 .887 +(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.886 E F1(bash)3.386 E +F0 .886(is in-)3.386 F -.2(vo)144 144 S -.1(ke).2 G 2.667(dw).1 G .167 +(ith a \214le of commands,)-2.667 F F1($0)2.667 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 F12.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) -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 -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 +F0 .168(is started with the)2.668 F F12.668 E F0(op-)2.668 E .896 +(tion, then)144 156 R F1($0)3.396 E F0 .895(is set to the \214rst ar) +3.396 F .895(gument after the string to be e)-.18 F -.15(xe)-.15 G .895 +(cuted, if one is present.).15 F(Other)5.895 E(-)-.2 E +(wise, it is set to the \214lename used to in)144 168 Q -.2(vo)-.4 G -.1 +(ke).2 G F1(bash)2.6 E F0 2.5(,a)C 2.5(sg)-2.5 G -2.15 -.25(iv e)-2.5 H +2.5(nb).25 G 2.5(ya)-2.5 G -.18(rg)-2.5 G(ument zero.).18 E F1(Shell V) +87 184.8 Q(ariables)-.92 E F0(The follo)108 196.8 Q(wing v)-.25 E +(ariables are set by the shell:)-.25 E F1(_)108 213.6 Q F0 1.525 +(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.526(he shell or shell script being e).1 F -.15 +(xe)-.15 G 1.526(cuted as).15 F .174(passed in the en)144 225.6 R .174 (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 -(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 +2.673(,e)-.65 G .173(xpands to the last ar)-2.823 F .173 +(gument to the pre-)-.18 F .336(vious simple command e)144 237.6 R -.15 +(xe)-.15 G .336(cuted in the fore).15 F .336(ground, after e)-.15 F +2.837(xpansion. Also)-.15 F .337(set to the full pathname)2.837 F .366 +(used to in)144 249.6 R -.2(vo)-.4 G .566 -.1(ke e).2 H .366 (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\ +.365(vironment e)-.4 F .365(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 -(olon-separated list of enabled shell options.)-2.549 F .049(Each w) +285.6 S(SHOPTS).3 E F0 2.548(Ac)144 297.6 S .049 +(olon-separated list of enabled shell options.)-2.548 F .049(Each w) 5.049 F .049(ord in the list is a v)-.1 F .049(alid ar)-.25 F .049 -(gument for the)-.18 F F12.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 F12.549 E F0 .116(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 +2.616(w\). The)-.25 F .115(options ap-)2.615 F 1.066(pearing in)144 +321.6 R F2 -.27(BA)3.566 G(SHOPTS).27 E F0 1.066(are those reported as) +3.316 F/F3 10/Times-Italic@0 SF(on)3.796 E F0(by)3.807 E F1(shopt)3.567 +E F0 6.067(.I)C 3.567(ft)-6.067 G 1.067(his v)-3.567 F 1.067 +(ariable is in the en)-.25 F(vironment)-.4 E(when)144 333.6 Q F1(bash) +3.142 E F0 .642(starts up, each shell option in the list will be enable\ +d before reading an)3.142 F 3.141(ys)-.15 G .641(tartup \214les.)-3.141 +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 .187(Expands to the process ID of the current)144 +369.6 R F1(bash)2.687 E F0 2.688(process. This)2.688 F(dif)2.688 E .188 +(fers from)-.25 F F1($$)2.688 E F0 .188(under certain circum-)2.688 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 .548(Assignments to)5.548 +F F2 -.27(BA)3.048 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.503 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 -.934(ariable whose v)-.25 F .934 +-2.5 E F1 -.3(BA)108 465.6 S(SH_ARGC).3 E F0 .935(An array v)144 477.6 R +.935(ariable whose v)-.25 F .934 (alues are the number of parameters in each frame of the current)-.25 F -F1(bash)3.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 -(When a subroutine is e)5.142 F -.15(xe)-.15 G .142 +F1(bash)3.434 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 .142(cuted with).15 F F1(.) +2.642 E F0(or)2.642 E F1(sour)2.642 E(ce)-.18 E F0 2.642(\)i)C 2.642(sa) +-2.642 G 2.642(tt)-2.642 G .142(he top of the stack.)-2.642 F .141 +(When a subroutine is e)5.141 F -.15(xe)-.15 G .141 (cuted, the number of).15 F 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 .948(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) +E F0 .947(option to the)3.447 F F1(shopt)3.447 E F0 -.2(bu)3.447 G .947 +(iltin belo).2 F(w\).)-.25 E(Setting)144 537.6 Q F1(extdeb)3.362 E(ug) +-.2 E F0 .862(after the shell has started to e)3.362 F -.15(xe)-.15 G +.863(cute a script, or referencing this v).15 F .863(ariable when)-.25 F +F1(extdeb)144 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 .207(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 .206(cution call stack.).15 F .206 +(The \214-)5.206 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 .853(The shell sets)5.353 F F2 -.27(BA) +3.353 G(SH_ARGV).27 E F0 .853(only when in e)3.103 F .854(xtended deb) +-.15 F .854(ugging mode \(see the de-)-.2 F .476(scription of the)144 +621.6 R F1(extdeb)2.976 E(ug)-.2 E F0 .476(option to the)2.976 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.975 E(ug)-.2 E F0 .475 +(after the shell has)2.975 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 .251(When referenced, this v)144 669.6 R .251(ariable e)-.25 F +.251(xpands to the name of the shell or shell script \(identical to)-.15 +F F1($0)2.75 E F0 2.75(;s)C(ee)-2.75 E .04 +(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 +.041(causes the v)2.541 F .041(alue as-)-.25 F .216 +(signed to also be assigned to)144 693.6 R F1($0)2.716 E F0 5.216(.I)C +(f)-5.216 E F1 -.3(BA)2.716 G(SH_ARGV0).3 E F0 .216 (is unset, it loses its special properties, e)2.716 F -.15(ve)-.25 G -2.716(ni).15 G(f)-2.716 E(it is subsequently reset.)144 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.715(ni).15 G(f)-2.715 E(it is subsequently reset.)144 705.6 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(11)185.955 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 .667(An associati)144 96 R .967 -.15 +(ve a)-.25 H .667(rray v).15 F .668(ariable whose members correspond to\ + the internal hash table of commands)-.25 F .196(as maintained by the) +144 108 R F1(hash)2.696 E F0 -.2(bu)2.696 G 2.696(iltin. Elements).2 F +.195(added to this array appear in the hash table; ho)2.696 F(we)-.25 E +-.15(ve)-.25 G -.4(r,).15 G .852(unsetting array elements currently doe\ +s not cause command names to be remo)144 120 R -.15(ve)-.15 G 3.352(df) +.15 G .853(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 -(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 +(ubsequently reset.)-2.5 E F1 -.3(BA)108 144 S(SH_COMMAND).3 E F0 1.243 +(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.242 +(cuted, unless the shell is e).15 F -.15(xe)-.15 G 1.242(cuting a).15 F +.262(command as the result of a trap, in which case it is the command e) +144 168 R -.15(xe)-.15 G .263(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 F12.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 F12.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 .693 +(An array v)144 228 R .692(ariable whose members are the line numbers i\ +n source \214les where each corresponding)-.25 F .969(member of)144 240 +R/F2 9/Times-Bold@0 SF(FUNCN)3.469 E(AME)-.18 E F0 -.1(wa)3.219 G 3.469 +(si).1 G -1.9 -.4(nv o)-3.469 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 .97 +(is the line number in the source)3.469 F 14.672(\214le \()144 252 R F1 +(${B)A(ASH_SOURCE[)-.3 E F3($i+1)A F1(]})A F0 17.172(\)w)C(here)-17.172 +E F1(${FUNCN)17.172 E(AME[)-.2 E F3($i)A F1(]})A F0 -.1(wa)17.172 G +17.171(sc).1 G 14.671(alled \(or)-17.171 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 -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 -(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 -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 +(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 .005(An array v)144 +336 R .005(ariable whose members are assigned by the)-.25 F F1(=~)2.506 +E F0 .006(binary operator to the)2.506 F F1([[)2.506 E F0 .006 +(conditional com-)2.506 F 2.507(mand. The)144 348 R .007 +(element with inde)2.507 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 .006(gular e) +-.15 F(xpression.)-.15 E .997(The element with inde)144 360 R(x)-.15 E +F3(n)3.497 E F0 .997(is the portion of the string matching the)3.497 F +F3(n)3.498 E F0 .998(th parenthesized sube)B(xpres-)-.15 E(sion.)144 372 +Q F1 -.3(BA)108 384 S(SH_SOURCE).3 E F0 .126(An array v)144 396 R .125(\ +ariable whose members are the source \214lenames where the correspondin\ +g shell function)-.25 F .78(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.281 E(AME[)-.2 E F3($i)A F1(]})A +F0(is)3.281 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 .296(gins e)-.15 F -.15(xe)-.15 G +(cuting).15 E 1.276(in that en)144 456 R 3.776(vironment. The)-.4 F +1.276(initial v)3.776 F 1.277(alue is 0.)-.25 F(If)6.277 E F1 -.3(BA) +3.777 G(SH_SUBSHELL).3 E F0 1.277(is unset, it loses its special)3.777 F +(properties, e)144 468 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5 +(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1 -.3(BA)108 480 S +(SH_VERSINFO).3 E F0 2.645(Ar)144 492 S .145(eadonly array v)-2.645 F .144(ariable whose members hold v)-.25 F .144 -(ersion information for this instance of)-.15 F F1(bash)2.645 E F0 5.145 -(.T)C(he)-5.145 E -.25(va)144 216 S +(ersion information for this instance of)-.15 F F1(bash)2.644 E F0 5.144 +(.T)C(he)-5.144 E -.25(va)144 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 .396(An inde)144 630 R 2.896(xi)-.15 G(nto)-2.896 E F1(${COMP_W)2.896 E(ORDS})-.1 E F0 .396(of the w)2.896 F .396 -(ord containing the current cursor position.)-.1 F .396(This v)5.396 F -(ari-)-.25 E 1.18(able is a)144 354 R -.25(va)-.2 G 1.181 +(ord containing the current cursor position.)-.1 F .397(This v)5.397 F +(ari-)-.25 E 1.181(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 +(db).1 G 3.681(yt)-3.681 G 1.18(he programmable completion f)-3.681 F +1.18(acilities \(see)-.1 F F1(Pr)144 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.207 +(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 +(ilable only in shell functions and e).25 F 1.208(xternal com-)-.15 F +1.037(mands in)144 714 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537 (yt)-3.537 G 1.037(he programmable completion f)-3.537 F 1.037 (acilities \(see)-.1 F F1(Pr)3.537 E 1.037(ogrammable Completion)-.18 F -F0(be-)3.537 E(lo)144 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 +(2021 December 26)136.795 E(12)185.955 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 .666(The inde)144 96 R 3.166(xo)-.15 G 3.166 +(ft)-3.166 G .666(he current cursor position relati)-3.166 F .966 -.15 +(ve t)-.25 H 3.166(ot).15 G .666(he be)-3.166 F .666 +(ginning of the current command.)-.15 F .667(If the)5.667 F .535 (current cursor position is at the end of the current command, the v)144 -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 .534(alue of this v)-.25 F .534(ariable is equal to)-.25 F F1 +(${#COMP_LINE})144 120 Q F0 5.704(.T)C .704(his v)-5.704 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 +(ilable only in shell functions and e).25 F .705(xternal commands in-) +-.15 F -.2(vo)144 132 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G (he programmable completion f)-2.5 E(acilities \(see)-.1 E F1(Pr)2.5 E (ogrammable Completion)-.18 E F0(belo)2.5 E(w\).)-.25 E F1(COMP_TYPE)108 -510 Q F0 .041(Set to an inte)144 522 R .041(ger v)-.15 F .041(alue corr\ +144 Q F0 .042(Set to an inte)144 156 R .042(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 .337(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 .638 -.15(ve t)-.25 H(abs,).15 E F2(!)144 180 Q F0 3.068(,f)C +.567(or listing alternati)-3.068 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 .417(modi\214ed, or)144 192 R F2(%) +2.917 E F0 2.917(,f)C .417(or menu completion.)-2.917 F .417(This v) +5.417 F .417(ariable is a)-.25 F -.25(va)-.2 G .418 (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 -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 -(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 -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 +(tion)144 216 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 228 Q(ORDBREAKS) +-.1 E F0 1.335(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.336 +(ord separators when performing w)-.1 F(ord)-.1 E 3.126(completion. If) +144 252 R/F3 9/Times-Bold@0 SF(COMP_W)3.126 E(ORDBREAKS)-.09 E F0 .626 +(is unset, it loses its special properties, e)2.876 F -.15(ve)-.25 G +3.125(ni).15 G 3.125(fi)-3.125 G 3.125(ti)-3.125 G 3.125(ss)-3.125 G +(ubse-)-3.125 E(quently reset.)144 264 Q F1(COMP_W)108 276 Q(ORDS)-.1 E +F0 .653(An array v)144 288 R .653(ariable \(see)-.25 F F1(Arrays)3.153 E +F0(belo)3.153 E .654(w\) consisting of the indi)-.25 F .654(vidual w) +-.25 F .654(ords in the current command)-.1 F 3.192(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) -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 +(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 .691(as de-)2.942 F 1.557(scribed abo)144 +312 R -.15(ve)-.15 G 6.557(.T).15 G 1.557(his v)-6.557 F 1.557 (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 +(ilable only in shell functions in).25 F -.2(vo)-.4 G -.1(ke).2 G 4.058 +(db).1 G 4.058(yt)-4.058 G 1.558(he programmable)-4.058 F(completion f) +144 324 Q(acilities \(see)-.1 E F1(Pr)2.5 E(ogrammable Completion)-.18 E +F0(belo)2.5 E(w\).)-.25 E F1(COPR)108 336 Q(OC)-.3 E F0 .169(An array v) +144 348 R .169(ariable \(see)-.25 F F1(Arrays)2.669 E F0(belo)2.669 E .169 (w\) created to hold the \214le descriptors for output from and input) --.25 F(to an unnamed coprocess \(see)144 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 .789(An array v)144 384 R .789(ariable \(see)-.25 F F1 +(Arrays)3.289 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.79 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 +(bu)2.599 G 2.598(iltin. Assigning).2 F .098(to mem-)2.598 F .84 +(bers of this array v)144 408 R .84 (ariable may be used to modify directories already in the stack, b)-.25 -F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 132 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 -(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 -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 +F .84(ut the)-.2 F F1(pushd)3.34 E F0(and)144 420 Q F1(popd)3.451 E F0 +-.2(bu)3.451 G .951(iltins must be used to add and remo).2 F 1.251 -.15 +(ve d)-.15 H 3.45(irectories. Assignment).15 F .95(to this v)3.45 F .95 +(ariable will)-.25 F .378(not change the current directory)144 432 R +5.378(.I)-.65 G(f)-5.378 E F3(DIRST)2.878 E -.495(AC)-.81 G(K).495 E F0 +.379(is unset, it loses its special properties, e)2.628 F -.15(ve)-.25 G +2.879(ni).15 G 2.879(fi)-2.879 G 2.879(ti)-2.879 G(s)-2.879 E +(subsequently reset.)144 444 Q F1(EPOCHREAL)108 456 Q(TIME)-.92 E F0 +.338(Each time this parameter is referenced, it e)144 468 R .337 +(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)144 +480 Q F2(time)2.916 E F0 .416(\(3\)\) as a \215oating point v)B .417 +(alue with micro-second granularity)-.25 F 5.417(.A)-.65 G .417 +(ssignments to)-5.417 F F3(EPOCHRE-)2.917 E(AL)144 492 Q(TIME)-.828 E F0 +1.091(are ignored.)3.341 F(If)6.091 E F3(EPOCHREAL)3.59 E(TIME)-.828 E +F0 1.09(is unset, it loses its special properties, e)3.34 F -.15(ve)-.25 +G 3.59(ni).15 G 3.59(fi)-3.59 G 3.59(ti)-3.59 G(s)-3.59 E +(subsequently reset.)144 504 Q F1(EPOCHSECONDS)108 516 Q F0 .337 +(Each time this parameter is referenced, it e)144 528 R .338 (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 -(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 +540 Q F2(time)4.042 E F0 4.042(\(3\)\). Assignments)B(to)4.042 E F3 +(EPOCHSECONDS)4.042 E F0 1.542(are ignored.)3.792 F(If)6.542 E F3 +(EPOCHSECONDS)4.041 E F0 1.541(is unset, it)3.791 F +(loses its special properties, e)144 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.103(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 +1.103(nitialized at shell startup.)-3.603 F 1.104(This v)6.103 F 1.104 +(ariable is)-.25 F(readonly)144 576 Q(.)-.65 E F1(FUNCN)108 588 Q(AME) +-.2 E F0 .479(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 -(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 -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 -(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 -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) +-.25 F -.15(xe)-.15 G .478(cution call stack.).15 F .276 +(The element with inde)144 612 R 2.776(x0i)-.15 G 2.776(st)-2.776 G .276 +(he name of an)-2.776 F 2.777(yc)-.15 G(urrently-e)-2.777 E -.15(xe)-.15 +G .277(cuting shell function.).15 F .277(The bottom-most)5.277 F .385 +(element \(the one with the highest inde)144 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 .384 +(ariable e)-.25 F .384(xists only when a shell func-)-.15 F .075 +(tion is e)144 636 R -.15(xe)-.15 G 2.575(cuting. Assignments).15 F(to) +2.575 E F3(FUNCN)2.575 E(AME)-.18 E F0(ha)2.325 E .376 -.15(ve n)-.2 H +2.576(oe).15 G -.25(ff)-2.576 G 2.576(ect. If).25 F F3(FUNCN)2.576 E +(AME)-.18 E F0 .076(is unset, it loses its)2.326 F +(special properties, e)144 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 .111(This v)144 +666 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO) .3 E F0(and)2.611 E F1 -.3(BA)2.611 G(SH_SOURCE).3 E F0 5.111(.E)C .111 -(ach element of)-5.111 F F1(FUNC-)2.611 E -.2(NA)144 390 S(ME).2 E F0 +(ach element of)-5.111 F F1(FUNC-)2.61 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 -(]})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 -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 -(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) -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 -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 -(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 -(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 -(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 +-2.512 F F1(${B)2.512 E(ASH_SOURCE[)-.3 E F2($i+1)A F1(]})A F0 1.183 +(at line number)144 702 R F1(${B)3.683 E(ASH_LINENO[)-.3 E F2($i)A F1 +(]})A F0 6.183(.T)C(he)-6.183 E F1(caller)3.683 E F0 -.2(bu)3.683 G +1.184(iltin displays the current call stack using).2 F +(this information.)144 714 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(13)185.955 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 +SF(GR)108 84 Q(OUPS)-.3 E F0 1.229(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.228(.A)-.55 G(ssign-)-6.228 E .571(ments to)144 108 R/F2 9 +/Times-Bold@0 SF(GR)3.071 E(OUPS)-.27 E F0(ha)2.822 E .872 -.15(ve n)-.2 +H 3.072(oe).15 G -.25(ff)-3.072 G 3.072(ect. If).25 F 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.072(fi)-3.072 G 3.072(ti)-3.072 G(s) +-3.072 E(subsequently reset.)144 120 Q F1(HISTCMD)108 132 Q F0 2.811 +(The history number)144 144 R 5.311(,o)-.4 G 5.311(ri)-5.311 G(nde) +-5.311 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.81(Assignments to) +7.81 F F2(HISTCMD)144 156 Q F0 1.134(are ignored.)3.384 F(If)6.134 E F2 +(HISTCMD)3.634 E F0 1.135(is unset, it loses its special properties, e) +3.385 F -.15(ve)-.25 G 3.635(ni).15 G 3.635(fi)-3.635 G 3.635(ti)-3.635 +G 3.635(ss)-3.635 G(ubse-)-3.635 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 .223(Automatically set to a string t\ +hat uniquely describes the type of machine on which)144 216 R F1(bash) +2.722 E F0 .222(is e)2.722 F -.15(xe)-.15 G(cut-).15 E 2.5(ing. The)144 +228 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 240 Q F0 +1.408(Each time this parameter is referenced, the shell substitutes a d\ +ecimal number representing the)144 252 R .078(current sequential line n\ +umber \(starting with 1\) within a script or function.)144 264 R .078 +(When not in a script or)5.078 F .306(function, the v)144 276 R .306 +(alue substituted is not guaranteed to be meaningful.)-.25 F(If)5.307 E +F2(LINENO)2.807 E F0 .307(is unset, it loses its)2.557 F +(special properties, e)144 288 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 +G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 300 Q +(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully describ\ +es the system type on which)144 312 R F1(bash)3.398 E F0 .898(is e)3.398 +F -.15(xe)-.15 G .898(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 .293 +(An array v)144 348 R .293(ariable \(see)-.25 F F1(Arrays)2.793 E F0 +(belo)2.793 E .293(w\) created to hold the te)-.25 F .294 +(xt read by the)-.15 F F1(map\214le)2.794 E F0 -.2(bu)2.794 G .294 +(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.627(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 +F1(getopts)4.127 E F0 -.2(bu)4.127 G 1.626(iltin command \(see).2 F F2 +(SHELL)4.126 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.651(The inde)144 444 R 4.151 +(xo)-.15 G 4.151(ft)-4.151 G 1.651(he ne)-4.151 F 1.651(xt ar)-.15 F +1.652(gument to be processed by the)-.18 F F1(getopts)4.152 E F0 -.2(bu) +4.152 G 1.652(iltin command \(see).2 F F2(SHELL)4.152 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.829 E F0 .329(is e)2.829 F -.15 +(xe)-.15 G 2.829(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 240 Q -.15(xe)-.15 G(cuted fore).15 E +(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 -.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 +(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.416 E .55(signing a v)144 588 R +.55(alue to)-.25 F F2(RANDOM)3.05 E F0 .551 +(initializes \(seeds\) the sequence of random numbers.)2.801 F(If)5.551 +E F2(RANDOM)3.051 E F0(is)2.801 E +(unset, it loses its special properties, e)144 600 Q -.15(ve)-.25 G 2.5 +(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.) +-2.5 E F1(READLINE_ARGUMENT)108 612 Q F0(An)144 624 Q 4.456(yn)-.15 G +1.956(umeric ar)-4.456 F 1.956(gument gi)-.18 F -.15(ve)-.25 G 4.456(nt) +.15 G 4.456(oaR)-4.456 G 1.956(eadline command that w)-4.456 F 1.956 +(as de\214ned using)-.1 F/F4 10/Courier@0 SF 1.955(bind -x)4.455 F F0 +(\(see)4.455 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.546(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.547(SHELL B)4.047 F(UIL)-.09 E 1.547(TIN COM-) +-.828 F(MANDS)144 672 Q F0(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 +684 Q F0 .107(The position of the mark \(sa)144 696 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 F4 .106(bind -x)2.606 F F0(\(see)144 708 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 720 Q F3 -.37(re)2.5 G(gion)-.03 E F0(.)A +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(14)185.955 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 .314 +(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 +.313(or use with)-2.813 F/F2 10/Courier@0 SF .313(bind -x)2.813 F F0 +(\(see)2.813 E/F3 9/Times-Bold@0 SF(SHELL)2.813 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 .177 +(Each time this parameter is referenced, it e)144 156 R .178 +(xpands to the number of seconds since shell in)-.15 F -.2(vo)-.4 G +(cation.).2 E .713(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 .627 -(of seconds since the assignment plus the v)144 504 R .627 +(of seconds since the assignment plus the v)144 180 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 +-.2(vo)-.4 G(ca-).2 E .112(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.111 E F3(SECONDS)2.611 E F0 .111(is un-)2.361 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 +-2.5 E F1(SHELLOPTS)108 216 Q F0 3.262(Ac)144 228 S .763 (olon-separated list of enabled shell options.)-3.262 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 F1144 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 +(gument for the)-.18 F F1144 240 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 F3 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 +3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 252 R F3 +(SHELLOPTS)2.519 E F0 .019(are those reported as)2.269 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 .02 +(ariable is in the en)-.25 F(vironment)-.4 E(when)144 264 Q F1(bash) +3.142 E F0 .642(starts up, each shell option in the list will be enable\ +d before reading an)3.142 F 3.141(ys)-.15 G .641(tartup \214les.)-3.141 +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 .76(This v)144 +324 R .76(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random number\ + each time it is referenced. The random)-.15 F .565 +(number generator is not linear on systems that support)144 336 R F2 +(/dev/urandom)3.064 E F0(or)3.064 E F5(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 (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) +348 R .788(The random number generator)5.788 F .088 +(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.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 +(ect. If).25 F F3(SRANDOM)2.587 E F0 .087(is unset, it loses its)2.337 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 .993(The follo)108 400.8 R .993(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 +(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 +.503(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 .502(SHELL COMP)3.002 F -.855(AT)-.666 G .502(IBILITY MODE).855 F +F0(be-)2.752 E(lo)144 453.6 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 +(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 +-.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 .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 +(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 .277 -(bility le)144 172.8 R -.15(ve)-.25 G .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) +.278(ault for the)-.1 F 1.401(current v)144 513.6 R 3.901(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.9(wu)-.25 G(nder)-3.9 E F3(BSHELL)144 525.6 Q +F4(COMP)A -.999(AT)-.828 G(IBILITY).999 E F3(MODE)A F4(.)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 537.6 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 549.6 S(lue.).25 E F1 -.3(BA)108 561.6 S(SH_ENV).3 E F0 +.505(If this parameter is set when)144 573.6 R F1(bash)3.005 E F0 .505 +(is e)3.005 F -.15(xe)-.15 G .506(cuting a shell script, its v).15 F +.506(alue is interpreted as a \214lename)-.25 F .391 +(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 .39(alue of) +-.25 F F3 -.27(BA)2.89 G(SH_ENV).27 E F0 .39(is subjected)2.64 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 +108 621.6 S(SH_XTRA).3 E(CEFD)-.55 E F0 .481(If set to an inte)144 633.6 R .481(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25 F(,)-.4 E F1(bash)2.98 E F0 .48(will write the trace output gener)2.98 F -(-)-.2 E 3.114(ated when)144 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 +(-)-.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.531(.N)-.55 G 2.531(ote that setting)-7.531 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.991 F +(standard error being closed.)144 693.6 Q F1(CDP)108 705.6 Q -.95(AT) +-.74 G(H).95 E F0 1.247(The search path for the)144 717.6 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 +(shell looks for destination directories speci\214ed by the)144 729.6 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 +(alue is)-.25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(15) +185.955 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.498(wt)-.25 G(his)-3.498 E -.25(va)144 120 +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 +(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 .828(Used by the)144 156 R F2(select)3.328 E F0 +.829(compound command to determine the terminal width when printing sel\ +ection)3.328 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 .847(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 +228 Q F2(EMA)108 240 Q(CS)-.55 E F0(If)144 252 Q F2(bash)2.535 E F0 .035 +(\214nds this v)2.535 F .035(ariable in the en)-.25 F .036 +(vironment when the shell starts with v)-.4 F(alue)-.25 E F1(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 +(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 .671 +(Expanded and e)144 276 R -.15(xe)-.15 G .671(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.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 +(hen an interacti)-3.17 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.716(Ac)144 312 S +.216(olon-separated list of shell patterns \(see)-2.716 F F2 -.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 +(ignored by command search using)144 324 R F2 -.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 +(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 +(xe)-.15 G 1.433(cution via).15 F F2 -.74(PA)144 348 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 +-.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.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 -R 1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37 +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.598(Ac)144 432 S .098(olon-separated list of suf)-2.598 F<8c78>-.25 E +.098(es to ignore when performing \214lename completion \(see)-.15 F F3 +(READLINE)2.599 E F0(belo)144 444 Q 2.705(w\). A)-.25 F .205 +(\214lename whose suf)2.705 F .205(\214x matches one of the entries in) +-.25 F F3(FIGNORE)2.705 E F0 .205(is e)2.455 F .204 +(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 .23(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\ +(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.924(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 +e)-2.924 F(xpan-)-.15 E 2.947(sion. If)144 528 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 +(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.654(Ac)144 564 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 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 +.49(he his-)-2.99 F .558(tory list.)144 588 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 +(Av)144 600 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 +(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 +(sa)144 624 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) +(ist is ignored.).15 F(If)5.263 E F3(HISTCONTR)2.763 E(OL)-.27 E F0 .264 +(is unset, or does not include)2.513 F 2.942(av)144 636 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\ +(he history list, subject to the v)-2.941 F .441(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.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) +(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.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 +-.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 +(dw).15 G(hen a shell e)-2.5 E(xits.)-.15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(16)185.955 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.622 +(The maximum number of lines contained in the history \214le.)144 96 R +1.623(When this v)6.623 F 1.623(ariable is assigned a)-.25 F -.25(va)144 +108 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 120 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 +132 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 +(Non-numeric v)5.427 F .427(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 \ +156 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 168 Q F0 +2.658(Ac)144 180 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 +2.657(nt)-2.657 G .157(he his-)-2.657 F .707(tory list.)144 192 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 +(\(no implicit `)144 204 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 +(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.769 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.888 E -.25(va)144 300 S .413(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) +(ery command being sa)144 312 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 +(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 .952(If this v)144 348 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 +(alue is used as a format string for)-.25 F/F4 10/Times-Italic@0 SF +(strftime)3.451 E F0 .951(\(3\) to print the)B .672 +(time stamp associated with each history entry displayed by the)144 360 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 +(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) + 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 +.55(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 +1.059(the shell is running; the ne)144 468 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 +(alue is changed,)-.25 F F1(bash)144 480 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(`')-.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 +-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 .139(ut has no v)-.2 F .139(alue, or)-.25 F .518 +(does not name a readable \214le,)144 492 R F1(bash)3.018 E F0 .518 +(attempts to read)3.018 F F4(/etc/hosts)4.683 E F0 .517 +(to obtain the list of possible host-)4.683 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 .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 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 +(`')-.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 .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 +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 +(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 .302(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) +F2(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1 +(INPUTRC)108 600 Q F0 .26(The \214lename for the)144 612 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 +(rriding the def).15 F .261(ault of)-.1 F F4(~/.inputr)4.427 E(c)-.37 E +F0(\(see)4.427 E F2(READLINE)2.761 E F0(be-)2.511 E(lo)144 624 Q(w\).) +-.25 E F1(INSIDE_EMA)108 636 Q(CS)-.55 E F0 .034(If this v)144 648 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 +(assumes that it is running in-)2.533 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 +(alue of)-.25 E F1(TERM)2.5 E F0(.)A F1(LANG)108 672 Q F0 1.239 +(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.24 (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 .974 +(This v)144 708 R .974(ariable o)-.25 F -.15(ve)-.15 G .974 +(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\ +.973(riable specifying a locale cate-).25 F(gory)144 720 Q(.)-.65 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(17)185.955 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 .411(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 +-.25 F(xpansion,)-.15 E 1.465(and determines the beha)144 108 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 +120 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 132 Q F0 +1.935(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.936(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\ +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 +.055(Used by the)144 240 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 +(Automatically set if the)144 252 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 +(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 .422 +(If this parameter is set to a \214le or directory name and the)144 276 +R F2(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 +(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\)) +(-format directory)-.2 E(.)-.65 E F1(MAILCHECK)108 300 Q F0 .098 +(Speci\214es ho)144 312 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 (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 .223(If this v)5.223 F .223(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 +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 .39 +(If set to the v)144 444 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 +-.2(bu)2.889 G .389(iltin command \(see).2 F F2 .359(SHELL B)144 456 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 468 Q +-.15(xe)-.15 G(cuted.).15 E F1 -.74(PA)108 480 S(TH)-.21 E F0 .588 +(The search path for commands.)144 480 R .587 (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) +5.588 F .471(for commands \(see)144 492 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 +(zero-length \(null\) directory name in the)2.972 F -.25(va)144 504 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 +-3.035 E .867(colons, or as an initial or trailing colon.)144 516 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 +-.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 +144 540 Q F0(.)A F1(POSIXL)108 552 Q(Y_CORRECT)-.92 E F0 .471(If this v) +144 564 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/F5 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 +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 +.011(If it is set while the shell is)5.011 F(running,)144 588 Q F1(bash) +4.497 E F0(enables)4.497 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.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 +.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 +(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(2021 December 26) +136.795 E(18)185.955 E 0 Cg EP +%%Page: 19 19 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(PS1)108 84 Q F0 .064(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 .118(The v)144 108 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 +120 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G(.).74 E F1(PS3) +108 132 Q F0 1.115(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.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 +144 144 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 156 Q F0 +.101(The v)144 156 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 +(alue is printed before each command)-.25 F F1(bash)144 168 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 +(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 528 Q F0 .543(This v)144 540 R .543(ariable e)-.25 F .543 +(SHELL)108 192 Q F0 .543(This v)144 204 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 +(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 .826(The v) +144 240 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 +(pipelines pre\214x)144 252 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 +(an escape sequence that is e)144 264 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 +(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.525(point. A) -144 706.8 R -.25(va)2.525 G .025 +144 370.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 +(decimal point may be speci\214ed; v)144 382.8 R .538(alues of)-.25 F F3 (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 -%%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 +F3(p)3.037 E F0 .537(is not speci\214ed,)3.037 F(the v)144 394.8 Q +(alue 3 is used.)-.25 E .667(The optional)144 411.6 R F1(l)3.167 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.168(s. The)B -.25(va) +3.168 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.365 -(If this v)144 112.8 R 13.365(ariable is not set,)-.25 F F1(bash)15.865 +(If this v)144 440.4 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 +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 +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.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 +(fter).15 E F2(TMOUT)2.811 E F0 .311(seconds when input is com-)2.561 F +.886(ing from a terminal.)144 512.4 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 +(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 +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 .391(If set,)144 560.4 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 +(creates temporary \214les for the)2.89 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 .53(This v)144 596.4 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 +(If this v)5.531 F .531(ariable is set,)-.25 F .539(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) + for resumption of an)-.1 F -.15(ex)144 620.4 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 +632.4 R(The)6.125 E F3(name)3.985 E F0 1.124(of a stopped job, in this) +3.805 F(conte)144 644.4 Q 1.132 (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 +6.133 F(alue)-.25 E F3 -.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 +(match the name of a stopped job e)144 656.4 R .606(xactly; if set to) +-.15 F F3(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 +(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 .885(lue pro).25 F .885 +(vides functionality analogous to)-.15 F(the)144 680.4 Q F1(%?)3.334 E +F0 .834(job identi\214er \(see)5.834 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 +(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 .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 +F1(%)2.816 E F3(string)A F0(job)2.816 E(identi\214er)144 704.4 Q(.)-.55 +E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(19)185.955 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 .546(The tw)144 96 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/F2 9/Times-Bold@0 SF +(HIST)3.045 E(OR)-.162 E 2.795(YE)-.315 G(X-)-2.795 E -.666(PA)144 108 S +(NSION).666 E F0(belo)2.987 E 3.237(w\). The)-.25 F .737 +(\214rst character is the)3.237 F/F3 10/Times-Italic@0 SF .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 120 R .761(xpansion, normally `)-.15 +F F1(!)A F0 3.261('. The)B .76(second character is the)3.261 F F3(quic) +3.26 E 3.26(ks)-.2 G(ubstitution)-3.26 E F0(character)144 132 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 144 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 +\214rst character)144 156 R .46(of a w)144 168 R .46(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 +2.959 F .466(for the remaining w)144 180 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 192 Q F1(Arrays)87 208.8 Q(Bash) +108 220.8 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 +(ariable may be used as an)-3.641 F(inde)108 232.8 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) +.329(an array)108 244.8 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 +(rrays are refer)-2.828 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) +(ve i)-.25 H(nte).15 E(gers.)-.15 E 2.463(An inde)108 285.6 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 +F3(name)4.962 E F0([)A F3(sub-)A(script)108 297.6 Q F0(]=)A F3(value)A +F0 5.506(.T)C(he)-5.506 E F3(subscript)3.346 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) +-6.307 G(x-)-3.157 E 1.193(plicitly declare an inde)108 309.6 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 +(declar)3.693 E 3.693<65ad>-.18 G(a)-3.693 E F3(name)3.693 E F0(\(see) +3.692 E F2 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 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 .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 +(attrib)3.441 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 +(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.147(,w)C 1.647(here each) +-4.147 F F3(value)108 396 Q F0 .211(may be of the form [)2.711 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 .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 +(ything b)-.15 F(ut)-.2 E F3(string)2.712 E F0(.)A(Each)108 408 Q F3 (value)2.53 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 +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.529 E .995(assigning to inde)108 420 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 +3.496(sa)-3.496 G .996(ssigned to;)-3.496 F .417(otherwise the inde)108 +432 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) +(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 +472.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2 +E 1.956(nating k)108 484.8 R -.15(ey)-.1 G 4.456(sa).15 G 1.956(nd v) +-4.456 F(alues:)-.25 E F3(name)4.456 E F0(=)A F1(\()A F3 -.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 F1(\))A F0 6.957(.T)C 1.957 +(hese are treated identically to)-6.957 F F3(name)4.457 E F0(=)A F1(\()A +F0([)108 496.8 Q F3 -.1(ke)C(y1)-.2 E F0(]=)A F3(value1)A F0([)3.133 E +F3 -.1(ke)C(y2)-.2 E F0(]=)A F3(value2)A F0(...)3.133 E F1(\))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 508.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) +(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 .24 -(This syntax is also accepted by the)108 189.6 R F2(declar)2.74 E(e)-.18 +(This syntax is also accepted by the)108 537.6 R F1(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 +(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.416 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 +-4.417 E 4.417(,i)-.65 G(f)-4.417 E F3(name)4.777 E F0 1.917(is sub-) +4.597 F .116(scripted by a ne)108 561.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 +(of)108 573.6 Q F3(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 (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 +G .177(eferences the last el-)-2.677 F(ement.)108 585.6 Q(An)108 602.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 +-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 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 +(con\215icts with pathname e)108 614.4 R 4.041(xpansion. If)-.15 F F3 +(subscript)4.041 E F0(is)4.041 E F1(@)4.041 E F0(or)4.041 E F1(*)4.041 E F0 4.041(,t)C 1.541(he w)-4.041 F 1.541(ord e)-.1 F 1.541 -(xpands to all members of)-.15 F 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 +(xpands to all members of)-.15 F F3(name)4.042 E F0(.)A 1.057 +(These subscripts dif)108 626.4 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 638.4 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 650.4 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 +662.4 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 674.4 R .759(ord, the e)-.1 F .759 (xpansion of the \214rst parameter is joined with the be)-.15 F .759 (ginning part of the original w)-.15 F(ord,)-.1 E .515(and the e)108 -338.4 R .516(xpansion of the last parameter is joined with the last par\ +686.4 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 698.4 R .228(xpansion of the special parameters)-.15 +F F1(*)2.728 E F0(and)2.728 E F1(@)2.728 E F0(\(see)2.728 E F1 .228 (Special P)2.728 F(arameters)-.1 E F0(abo)2.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 +(\). ${#).15 F F3(name)A F0([)A F3(subscript)A F0(]})A -.15(ex)108 710.4 +S .886(pands to the length of ${).15 F F3(name)A F0([)A F3(subscript)A +F0 3.386(]}. If)B F3(subscript)3.386 E F0(is)3.386 E F1(*)3.386 E F0(or) +3.386 E F1(@)3.386 E F0 3.386(,t)C .886(he e)-3.386 F .886 +(xpansion is the number of ele-)-.15 F .295(ments in the array)108 722.4 +R 5.295(.I)-.65 G 2.795(ft)-5.295 G(he)-2.795 E F3(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) +(luates to a number).25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 +E(20)185.955 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 .628 +(less than zero, it is interpreted as relati)108 84 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 96 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 +112.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 -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 +108 124.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/F1 10 +/Times-Bold@0 SF(bash)2.5 E F0(will create an array if necessary)2.5 E +(.)-.65 E(An array v)108 141.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 158.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 -(pand to the indices assigned in array v).15 F(ariable)-.25 E F1(name) -3.249 E F0 5.749(.T)C .749 +(alues. ${)-.25 F F1(!)A/F2 10/Times-Italic@0 SF(name)A F0([)A F2(@)A F0 +.418(]} and ${)B F1(!)A F2(name)A F0([)A F2(*)A F0(]})A -.15(ex)108 +170.4 S .75(pand to the indices assigned in array v).15 F(ariable)-.25 E +F2(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) +182.4 Q(xpansion of the special parameters)-.15 E F2(@)2.5 E F0(and)2.5 +E F2(*)2.5 E F0(within double quotes.)2.5 E(The)108 199.2 Q F1(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 +G(rrays.)-2.767 E F1(unset)5.267 E F2(name)2.767 E F0([)A F2(subscript)A F0 2.767(]d)C(estro)-2.767 E .267(ys the array element at inde)-.1 F(x) --.15 E F1(sub-)2.767 E(script)108 513.6 Q F0 2.858(,f)C .358 +-.15 E F2(sub-)2.767 E(script)108 211.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 223.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 +(ariable does not unset the v)-.25 F(ariable.)-.25 E F1(unset)6.205 E F2 +(name)3.705 E F0(,)A(where)108 235.2 Q F2(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 F1(unset)5.912 E F2 +(name)3.412 E F0([)A F2(subscript)A F0 .912(], where)B F2(subscript) +3.412 E F0(is)3.412 E F1(*)3.412 E F0(or)3.412 E F1(@)3.412 E F0 3.412 +(,b)C(e-)-3.412 E(ha)108 247.2 Q -.15(ve)-.2 G 3.125(sd).15 G(if)-3.125 +E .625(ferently depending on whether)-.25 F F2(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 F2(name)3.126 E F0 .626(is an associati)3.126 F -.15(ve)-.25 G +(array)108 259.2 Q 3.067(,t)-.65 G .567 +(his unsets the element with subscript)-3.067 F F1(*)3.067 E F0(or)3.067 +E F1(@)3.067 E F0 5.567(.I)C(f)-5.567 E F2(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 271.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 288 R +.028(ariable name with a subscript as an ar)-.25 F .029 +(gument to a command, such as with)-.18 F F1(unset)2.529 E F0 2.529(,w)C +.029(ithout us-)-2.529 F .938(ing the w)108 300 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 312 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 -.184(iltins each accept a).2 F F22.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 F22.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 +(The)108 328.8 Q F1(declar)2.683 E(e)-.18 E F0(,)A F1(local)2.683 E F0 +2.683(,a)C(nd)-2.683 E F1 -.18(re)2.683 G(adonly).18 E F0 -.2(bu)2.683 G +.184(iltins each accept a).2 F F12.684 E F0 .184 +(option to specify an inde)2.684 F -.15(xe)-.15 G 2.684(da).15 G .184 +(rray and a)-2.684 F F12.684 E F0(op-)2.684 E .042 +(tion to specify an associati)108 340.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 F22.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 F23.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 +-2.541 F F12.541 E F0(tak)2.541 E .041(es precedence.)-.1 F(The) +5.041 E F1 -.18(re)2.541 G(ad).18 E F0 -.2(bu)2.541 G .041(iltin ac-).2 +F .863(cepts a)108 352.8 R F13.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 F1(set)3.364 E F0(and)3.364 E F1(declar)3.364 E(e)-.18 E F0 -.2 +(bu)108 364.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 381.6 Q(ANSION)-.81 E F0 .76(Expansion is perfo\ +rmed on the command line after it has been split into w)108 393.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) -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) -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 +(inds of)-3.26 F -.15(ex)108 405.6 S .2(pansion performed:).15 F F2(br) +2.971 E .201(ace e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .201(tilde e) +2.831 F(xpansion)-.2 E F0(,).24 E F2(par)3.951 E .201 +(ameter and variable e)-.15 F(xpansion)-.2 E F0(,).24 E F2 .201 +(command sub-)2.901 F(stitution)108 417.6 Q F0(,).24 E F2(arithmetic e) +2.83 E(xpansion)-.2 E F0(,).24 E F2(wor)2.84 E 2.5(ds)-.37 G(plitting) +-2.5 E F0 2.5(,a).22 G(nd)-2.5 E F2(pathname e)3.75 E(xpansion)-.2 E F0 +(.).24 E .419(The order of e)108 434.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 446.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 458.4 Q .257 +(On systems that can support it, there is an additional e)108 475.2 R +.257(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E F2(pr)2.757 E .257 +(ocess substitution)-.45 F F0 5.257(.T)C .256(his is per)-5.257 F(-)-.2 +E(formed at the same time as tilde, parameter)108 487.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 504 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 -(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 +-.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 516 Q .3 -.15(ve b)-.2 H +(een quoted themselv).15 E(es \()-.15 E F2(quote r)A(emo)-.37 E(val)-.1 +E F0(\).)A .172(Only brace e)108 532.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 544.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 556.8 R F1($@)A F0 3.196("a)C +.696(nd ")-3.196 F F1(${)A F2(name)A F1([@]})A F0 .696 +(", and, in most cases,)B F1($*)3.196 E F0(and)3.196 E F1(${)3.196 E F2 +(name)A F1([*]})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 568.8 Q/F5 9/Times-Roman@0 SF(\).)A F1(Brace Expansion)87 +585.6 Q F2(Br)108.58 597.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 609.6 Q F2 .415 (pathname e)2.915 F(xpansion)-.2 E F0 2.915(,b)C .415 (ut the \214lenames generated need not e)-3.115 F 2.915(xist. P)-.15 F .415(atterns to be brace e)-.15 F .415(xpanded tak)-.15 F 2.915(et)-.1 G -(he)-2.915 E .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 621.6 R F2(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 633.6 R +.489(wed by an optional)-.25 F F2(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 645.6 R .659(xpanding left to)-.15 F(right.) +108 657.6 Q .719(Brace e)108 674.4 R .719(xpansions may be nested.)-.15 +F .719(The results of each e)5.719 F .719 (xpanded string are not sorted; left to right order is)-.15 F(preserv) -108 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 686.4 Q 2.5(ed. F)-.15 F(or e)-.15 E(xample, a)-.15 E F1({)A F0 +(d,c,b)A F1(})A F0 2.5(ee)C(xpands into `ade ace abe'.)-2.65 E 3.148(As) +108 703.2 S .648(equence e)-3.148 F .648(xpression tak)-.15 F .649 +(es the form)-.1 F F1({)3.149 E F2(x)A F1(..)A F2(y)A F1([..)A F2(incr)A +F1(]})A F0 3.149(,w)C(here)-3.149 E F2(x)3.149 E F0(and)3.149 E F2(y) +3.149 E F0 .649(are either inte)3.149 F .649 +(gers or single letters, and)-.15 F F2(incr)108 715.2 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 727.2 R F2(x)3.513 E F0(and)3.513 E F2(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 F2(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(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(21)185.955 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 .015(same width.) +108 84 R .015(When either)5.015 F/F1 10/Times-Italic@0 SF(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 96 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 108 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 120 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 +132 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 +148.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 160.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 172.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 189.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 201.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 213.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 225.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 237.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 254.4 R(longer than in the abo)108 266.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 +283.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 295.2 Q(cho)144 +307.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 324 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 336 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 348 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 360 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 372 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 384 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 400.8 S +(lde Expansion).18 E F0 1.087(If a w)108 412.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 424.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 436.8 R .725 +(wing the tilde are treated as a possible)-.25 F F1(lo)108 448.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 460.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 472.8 Q .092 +(If the tilde-pre\214x is a `~+', the v)108 489.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 501.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 513.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 +525.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 537.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 549.6 +Q(If the login name is in)108 566.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 583.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 595.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 607.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 624 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 636 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 648 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 664.8 S(rameter Expansion).1 E F0 +.2(The `)108 676.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 688.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 700.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(the name.)108 +712.8 Q 1.189 +(When braces are used, the matching ending brace is the \214rst `)108 +729.6 R F2(})A F0 3.69('n)C 1.19(ot escaped by a backslash or within a) +-3.69 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(22)185.955 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 .822 +(quoted string, and not within an embedded arithmetic e)108 84 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 96 Q(${)108 112.8 Q/F1 10/Times-Italic@0 SF(par)A(ameter) +-.15 E F0(})A .106(The v)144 124.8 R .106(alue of)-.25 F F1(par)2.606 E +(ameter)-.15 E F0 .106(is substituted.)2.606 F .106 +(The braces are required when)5.106 F F1(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 136.8 R F1(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 148.8 R(The)5.208 E F1(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 -(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 -(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) +-.15(ve)-.15 G/F2 10/Times-Bold@0 SF -.74(PA)2.858 G(RAME-).74 E(TERS) +144 160.8 Q F0 2.5(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \() +-2.5 E F2(Arrays)A F0(\).)A .347(If the \214rst character of)108 177.6 R +F1(par)2.846 E(ameter)-.15 E F0 .346(is an e)2.846 F .346 +(xclamation point \()-.15 F F2(!)A F0 .346(\), and)B F1(par)2.846 E +(ameter)-.15 E F0 .346(is not a)2.846 F F1(namer)2.846 E(ef)-.37 E F0 +2.846(,i)C 2.846(ti)-2.846 G(ntroduces)-2.846 E 2.906(al)108 189.6 S +-2.15 -.25(ev e)-2.906 H 2.906(lo).25 G 2.906(fi)-2.906 G(ndirection.) +-2.906 E F2(Bash)5.406 E F0 .406(uses the v)2.906 F .406 +(alue formed by e)-.25 F .406(xpanding the rest of)-.15 F F1(par)2.906 E +(ameter)-.15 E F0 .406(as the ne)2.906 F(w)-.25 E F1(par)2.907 E(ame-) +-.15 E(ter)108 201.6 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 213.6 Q F1(par)2.542 E(ameter)-.15 E F0 5.042(.T)C .042 +(his is kno)-5.042 F .042(wn as)-.25 F F1(indir)2.543 E .043(ect e)-.37 +F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .043 +(alue is subject to tilde e)-.25 F .043(xpansion, parameter)-.15 F -.15 +(ex)108 225.6 S .249(pansion, command substitution, and arithmetic e).15 +F 2.749(xpansion. If)-.15 F F1(par)2.749 E(ameter)-.15 E F0 .248 +(is a nameref, this e)2.749 F .248(xpands to the)-.15 F 1.51 +(name of the parameter referenced by)108 237.6 R F1(par)4.01 E(ameter) -.15 E F0 1.51(instead of performing the complete indirect e)4.01 F -(xpansion.)-.15 E .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 249.6 R .387 +(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F2(!)A +F1(pr)A(e\214x)-.37 E F2(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F2(!)A F1 +(name)A F0([)A F1(@)A F0 .387(]} described belo)B 4.187 -.65(w. T)-.25 H +.387(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108 +261.6 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 278.4 R -.65(w,)-.25 G F1(wor) 3.484 E(d)-.37 E F0 .334(is subject to tilde e)2.834 F .334 (xpansion, parameter e)-.15 F .334(xpansion, command substitution,)-.15 -F(and arithmetic e)108 559.2 Q(xpansion.)-.15 E .066 -(When not performing substring e)108 576 R .067 +F(and arithmetic e)108 290.4 Q(xpansion.)-.15 E .067 +(When not performing substring e)108 307.2 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\ -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 +(e.g.,)-2.567 E F2(:-)2.567 E F0(\),)A F2(bash)2.567 E F0 .066 +(tests for a pa-)2.567 F(rameter that is unset or null.)108 319.2 Q(Omi\ +tting the colon results in a test only for a parameter that is unset.)5 +E(${)108 336 Q F1(par)A(ameter)-.15 E F2<3aad>A F1(wor)A(d)-.37 E F0(})A +F2 .722(Use Default V)144 348 R(alues)-.92 E F0 5.722(.I)C(f)-5.722 E F1 +(par)4.472 E(ameter)-.15 E F0 .723(is unset or null, the e)3.952 F .723 +(xpansion of)-.15 F F1(wor)3.563 E(d)-.37 E F0 .723(is substituted.) +3.993 F(Other)5.723 E(-)-.2 E(wise, the v)144 360 Q(alue of)-.25 E F1 +(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 372 Q F1(par) +A(ameter)-.15 E F2(:=)A F1(wor)A(d)-.37 E F0(})A F2 .812 +(Assign Default V)144 384 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F1 (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 F1(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082 +F F1(pa-)4.561 E -.15(ra)144 396 S(meter).15 E F0 5.741(.T).73 G .741 +(he v)-5.741 F .741(alue of)-.25 F F1(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 +(ters may not be assigned to in this w)144 408 Q(ay)-.1 E(.)-.65 E(${) +108 420 Q F1(par)A(ameter)-.15 E F2(:?)A F1(wor)A(d)-.37 E F0(})A F2 +.535(Display Err)144 432 R .535(or if Null or Unset)-.18 F F0 5.535(.I)C +(f)-5.535 E F1(par)4.285 E(ameter)-.15 E F0 .535 +(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F1(wor)3.035 E +(d)-.37 E F0 .535(\(or a mes-)3.035 F .012(sage to that ef)144 444 R +.012(fect if)-.25 F F1(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 456 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,) +-2.65 F(the v)2.5 E(alue of)-.25 E F1(par)2.5 E(ameter)-.15 E F0 +(is substituted.)2.5 E(${)108 468 Q F1(par)A(ameter)-.15 E F2(:+)A F1 +(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 480 R .745(nate V)-.15 F (alue)-.92 E F0 5.745(.I)C(f)-5.745 E F1(par)4.495 E(ameter)-.15 E F0 .745(is null or unset, nothing is substituted, otherwise the e)3.975 F -(xpan-)-.15 E(sion of)144 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 +(xpan-)-.15 E(sion of)144 492 Q F1(wor)2.84 E(d)-.37 E F0 +(is substituted.)3.27 E(${)108 504 Q F1(par)A(ameter)-.15 E F2(:)A F1 +(of)A(fset)-.18 E F0(})A(${)108 516 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 +144 528 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 +(character speci\214ed by)144 540 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 +(sociati)144 552 Q 1.577 -.15(ve a)-.25 H 1.277 (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 +5.077 -.65(w. I)-.25 H(f).65 E F1(length)3.777 E F0 1.278(is omitted, e) +3.778 F 1.278(xpands to the)-.15 F .043(substring of the v)144 564 R +.043(alue of)-.25 F F1(par)2.543 E(ameter)-.15 E F0 .042 +(starting at the character speci\214ed by)2.543 F F1(of)2.542 E(fset) +-.18 E F0 .042(and e)2.542 F .042(xtending to the)-.15 F .846 +(end of the v)144 576 R(alue.)-.25 E F1(length)5.846 E F0(and)3.346 E F1 +(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F .847 +(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .847(ARITHMETIC EV)3.347 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 588 Q(w\).)-.25 E +(If)144 612 Q F1(of)3.029 E(fset)-.18 E F0 -.25(eva)3.029 G .529 (luates to a number less than zero, the v).25 F .529 (alue is used as an of)-.25 F .529(fset in characters from the)-.25 F -.046(end of the v)144 240 R .046(alue of)-.25 F F1(par)2.546 E(ameter) +.045(end of the v)144 624 R .045(alue of)-.25 F F1(par)2.546 E(ameter) -.15 E F0 5.046(.I)C(f)-5.046 E F1(length)2.546 E F0 -.25(eva)2.546 G .046(luates to a number less than zero, it is interpreted as an).25 F -(of)144 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) +(of)144 636 Q .203(fset in characters from the end of the v)-.25 F .202 +(alue of)-.25 F F1(par)2.702 E(ameter)-.15 E F0 .202 +(rather than a number of characters, and)2.702 F .557(the e)144 648 R +.557(xpansion is the characters between)-.15 F F1(of)3.057 E(fset)-.18 E +F0 .557(and that result.)3.057 F .558(Note that a ne)5.558 F -.05(ga) +-.15 G(ti).05 E .858 -.15(ve o)-.25 H -.25(ff).15 G .558(set must be).25 +F(separated from the colon by at least one space to a)144 660 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 +(pansion.).15 E(If)144 684 Q F1(par)2.959 E(ameter)-.15 E F0(is)2.959 E +F2(@)2.959 E F0 2.959(,t)C .459(he result is)-2.959 F F1(length)2.959 E +F0 .459(positional parameters be)2.959 F .458(ginning at)-.15 F F1(of) +2.958 E(fset)-.18 E F0 5.458(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15 +(ve)-.25 G F1(of)3.108 E(fset)-.18 E F0 .6(is tak)144 696 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 -(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 -(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 -.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 -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 -(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 -(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 +(va)-.25 G(luates).25 E .64(to the last positional parameter)144 708 R +5.64(.I)-.55 G 3.14(ti)-5.64 G 3.14(sa)-3.14 G 3.139(ne)-3.14 G .639 +(xpansion error if)-3.289 F F1(length)3.139 E F0 -.25(eva)3.139 G .639 +(luates to a number less than).25 F(zero.)144 720 Q(GNU Bash 5.2)72 768 +Q(2021 December 26)136.795 E(23)185.955 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(${)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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(If)144 84 Q/F1 10 +/Times-Italic@0 SF(par)3.013 E(ameter)-.15 E F0 .514(is an inde)3.013 F +-.15(xe)-.15 G 3.014(da).15 G .514 +(rray name subscripted by @ or *, the result is the)-3.014 F F1(length) +3.014 E F0 .514(members of)3.014 F 1.082(the array be)144 96 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 108 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 120 Q(Substring e)144 144 Q(xpansion applied to an associati)-.15 E +.3 -.15(ve a)-.25 H(rray produces unde\214ned results.).15 E .821 +(Substring inde)144 168 R .821(xing is zero-based unless the positional\ + parameters are used, in which case the in-)-.15 F(de)144 180 Q .159 +(xing starts at 1 by def)-.15 F 2.659(ault. If)-.1 F F1(of)2.659 E(fset) +-.18 E F0 .159(is 0, and the positional parameters are used,)2.659 F/F2 +10/Times-Bold@0 SF($0)2.659 E F0 .159(is pre\214x)2.659 F .159(ed to) +-.15 F(the list.)144 192 Q(${)108 208.8 Q F2(!)A F1(pr)A(e\214x)-.37 E +F2(*)A F0(})A(${)108 220.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A +F2 .085(Names matching pr)144 232.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 244.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 256.8 Q +(ariable name e)-.25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 +273.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 285.6 Q F2(!)A F1 +(name)A F0([)A F1(*)A F0(]})A F2 1.137(List of array k)144 297.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 309.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 321.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 338.4 Q F2(#)A F1(par)A +(ameter)-.15 E F0(})A F2 -.1(Pa)144 350.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 362.4 Q F0(is)3.626 E F2(*) +2.896 E F0(or)2.896 E F2(@)2.896 E F0 2.896(,t)C .396(he v)-2.896 F .397 +(alue substituted is the number of positional parameters.)-.25 F(If) +5.397 E F1(par)4.147 E(ameter)-.15 E F0 .397(is an ar)3.627 F(-)-.2 E +.781(ray name subscripted by)144 374.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 386.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 398.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 410.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 427.2 Q F1 +(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(${)108 439.2 Q F1 +(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 451.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 463.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 475.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 487.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 +499.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.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 +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 511.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 .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 +-3.018 F(xpan-)-.15 E .303(sion is the resultant list.)144 523.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 535.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 547.2 Q(${)108 +564 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108 576 +Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)144 +588 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 600 +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 612 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 624 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 636 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 +648 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 660 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 672 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.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 +-2.923 F .422(xpansion is)-.15 F(the resultant list.)144 684 Q(${)108 +700.8 Q F1(par)A(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0 +(})A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(24)185.955 E 0 Cg +EP +%%Page: 25 25 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(${)108 84 Q/F1 10 +/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(//)A F1 +(pattern)A F2(/)A F1(string)A F0(})A(${)108 96 Q F1(par)A(ameter)-.15 E +F2(/#)A F1(pattern)A F2(/)A F1(string)A F0(})A(${)108 108 Q F1(par)A +(ameter)-.15 E F2(/%)A F1(pattern)A F2(/)A F1(string)A F0(})A F2 -.1(Pa) +144 120 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 132 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 144 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 156 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 168 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 180 +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 192 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 204 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 216 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 228 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 240 Q +(wing)-.25 E F1(pattern)3.251 E F0 .751(may be omitted.)3.251 F .751 +(If the)5.751 F F2(patsub_r)3.252 E(eplacement)-.18 E F0 .752 +(shell option is enabled using)3.252 F F2(shopt)3.252 E F0(,)A(an)144 +252 Q 3.451(yu)-.15 G .951(nquoted instances of)-3.451 F F2(&)3.451 E F0 +(in)3.451 E F1(string)3.451 E F0 .951 +(are replaced with the matching portion of)3.451 F F1(pattern)3.45 E F0 +5.95(.B)C(ack-)-5.95 E .182(slash is used to quote)144 264 R F2(&)2.683 +E F0(in)2.683 E F1(string)2.683 E F0 2.683(;t)C .183 +(he backslash is remo)-2.683 F -.15(ve)-.15 G 2.683(di).15 G 2.683(no) +-2.683 G .183(rder to permit a literal)-2.683 F F2(&)2.683 E F0 .183 +(in the re-)2.683 F .234(placement string.)144 276 R .234 +(Users should tak)5.234 F 2.734(ec)-.1 G .234(are if)-2.734 F F1(string) +2.734 E F0 .234(is double-quoted to a)2.734 F -.2(vo)-.2 G .233(id unw) +.2 F .233(anted interactions)-.1 F .084 +(between the backslash and double-quoting.)144 288 R -.15(Pa)5.084 G +.085(ttern substitution performs the check for).15 F F2(&)2.585 E F0 +.085(after e)2.585 F(x-)-.15 E(panding)144 300 Q F1(string)3.029 E F0 +3.029(;s)C .529 +(hell programmers should quote backslashes intended to escape the)-3.029 +F F2(&)3.028 E F0 .528(and inhibit)3.028 F .802(replacement so the)144 +312 R 3.302(ys)-.15 G(urvi)-3.302 E 1.102 -.15(ve a)-.25 H 1.102 -.15 +(ny q).15 H .803(uote remo).15 F -.25(va)-.15 G 3.303(lp).25 G .803 +(erformed by the e)-3.303 F .803(xpansion of)-.15 F F1(string)3.303 E F0 +5.803(.I)C 3.303(ft)-5.803 G(he)-3.303 E F2(no-)3.303 E(casematch)144 +324 Q F0 .122 +(shell option is enabled, the match is performed without re)2.622 F -.05 +(ga)-.15 G .122(rd to the case of alphabetic).05 F 2.791(characters. If) +144 336 R F1(par)4.041 E(ameter)-.15 E F0(is)3.521 E F2(@)2.791 E F0(or) +2.791 E F2(*)2.791 E F0 2.791(,t)C .292 +(he substitution operation is applied to each positional param-)-2.791 F +.793(eter in turn, and the e)144 348 R .793 +(xpansion is the resultant list.)-.15 F(If)5.793 E F1(par)4.543 E +(ameter)-.15 E F0 .793(is an array v)4.023 F .793(ariable subscripted) +-.25 F(with)144 360 Q F2(@)2.877 E F0(or)2.877 E F2(*)2.878 E F0 2.878 +(,t)C .378(he substitution operation is applied to each member of the a\ +rray in turn, and the e)-2.878 F(x-)-.15 E +(pansion is the resultant list.)144 372 Q(${)108 388.8 Q F1(par)A +(ameter)-.15 E F2(^)A F1(pattern)A F0(})A(${)108 400.8 Q F1(par)A +(ameter)-.15 E F2(^^)A F1(pattern)A F0(})A(${)108 412.8 Q F1(par)A +(ameter)-.15 E F2(,)A F1(pattern)A F0(})A(${)108 424.8 Q F1(par)A +(ameter)-.15 E F2(,,)A F1(pattern)A F0(})A F2 .438(Case modi\214cation) +144 436.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 448.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 460.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 472.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 484.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 496.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 508.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 520.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 532.8 R .339(xpansion is the re-)-.15 F .249 +(sultant list.)144 544.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 +556.8 Q(xpansion is the resultant list.)-.15 E(${)108 573.6 Q F1(par)A +(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 585.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 -Cg EP -%%Page: 25 25 +F F1(par)3.36 E(ameter)-.15 E F0 .153(or information about)144 597.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 +609.6 Q F2(U)144 633.6 Q F0 .143(The e)180 633.6 R .142 +(xpansion is a string that is the v)-.15 F .142(alue of)-.25 F F1(par) +2.642 E(ameter)-.15 E F0 .142(with lo)2.642 F .142 +(wercase alphabetic charac-)-.25 F(ters con)180 645.6 Q -.15(ve)-.4 G +(rted to uppercase.).15 E F2(u)144 657.6 Q F0 .429(The e)180 657.6 R +.429(xpansion is a string that is the v)-.15 F .429(alue of)-.25 F F1 +(par)2.929 E(ameter)-.15 E F0 .43(with the \214rst character con)2.93 F +-.15(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 669.6 Q +F2(L)144 681.6 Q F0 .125(The e)180 681.6 R .124 +(xpansion is a string that is the v)-.15 F .124(alue of)-.25 F F1(par) +2.624 E(ameter)-.15 E F0 .124(with uppercase alphabetic charac-)2.624 F +(ters con)180 693.6 Q -.15(ve)-.4 G(rted to lo).15 E(wercase.)-.25 E F2 +(Q)144 705.6 Q F0 1.064(The e)180 705.6 R 1.064 +(xpansion is a string that is the v)-.15 F 1.065(alue of)-.25 F F1(par) +3.565 E(ameter)-.15 E F0 1.065(quoted in a format that can be)3.565 F +(reused as input.)180 717.6 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(25)185.955 E 0 Cg EP +%%Page: 26 26 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(U)144 84 Q F0 .142(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 -(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 -(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 -(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 -(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 -(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 +SF(E)144 84 Q F0 .441(The e)180 84 R .441 +(xpansion is a string that is the v)-.15 F .441(alue of)-.25 F/F2 10 +/Times-Italic@0 SF(par)2.941 E(ameter)-.15 E F0 .44 +(with backslash escape sequences)2.94 F -.15(ex)180 96 S +(panded as with the).15 E F1($'...)2.5 E(')-.55 E F0(quoting mechanism.) +2.5 E F1(P)144 108 Q F0 1.072(The e)180 108 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) -180 228 R 1.138 +F0 1.073(as if it)3.573 F(were a prompt string \(see)180 120 Q F1(PR)2.5 +E(OMPTING)-.3 E F0(belo)2.5 E(w\).)-.25 E F1(A)144 132 Q F0 1.138(The e) +180 132 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 144 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) +(with its attrib)2.5 E(utes and v)-.2 E(alue.)-.25 E F1(K)144 156 Q F0 +1.339(Produces a possibly-quoted v)180 156 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 168 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 -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 +(-v).15 E .257(alue pairs \(see)-.25 F F1(Ar)2.757 E(-)-.37 E(rays)180 +180 Q F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1(a)144 192 Q F0(The e)180 +192 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 204 Q F0(Lik)180 204 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 216 Q +(ords after w)-.1 E(ord splitting.)-.1 E(If)144 232.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 244.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 +256.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e) +144 280.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 292.8 Q -.65(w.)-.25 G F1(Command Substitution)87 309.6 Q F2 +1.697(Command substitution)108 321.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 333.6 Q F1($\()144 350.4 Q F2 +(command)A F1(\))1.666 E F0(or)108 362.4 Q F1<92>144 374.4 Q F2(command) +A F1<92>A(Bash)108 391.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 403.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 415.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 427.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 444 R(xcept)-.15 E +.315(when follo)108 456 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 468 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 480 Q(.)-.65 E .894 +(Command substitutions may be nested.)108 496.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 508.8 Q .422 +(If the substitution appears within double quotes, w)108 525.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 537.6 Q F1(Arithmetic Expansion)87 554.4 Q F0 +1.035(Arithmetic e)108 566.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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 +(The format for arithmetic e)108 578.4 Q(xpansion is:)-.15 E F1($\(\() +144 595.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 612 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 .421(ters in)108 624 R F2 -.2(ex)2.921 G +(pr).2 E(ession)-.37 E F0 .421(are not treated specially and are remo) +2.921 F -.15(ve)-.15 G 2.921(d. All).15 F(tok)2.92 E .42(ens in the e) +-.1 F .42(xpression under)-.15 F .42(go parame-)-.18 F 1.209(ter and v) +108 636 R 1.209(ariable e)-.25 F 1.209 +(xpansion, command substitution, and quote remo)-.15 F -.25(va)-.15 G +3.709(l. The).25 F 1.21(result is treated as the arith-)3.709 F(metic e) +108 648 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 664.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) +-.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F +(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 +(If)5.878 E F2 -.2(ex)108 676.8 S(pr).2 E(ession)-.37 E F0(is in)2.74 E +-.25(va)-.4 G(lid,).25 E F1(bash)2.5 E F0(prints a message indicating f) +2.5 E(ailure and no substitution occurs.)-.1 E F1(Pr)87 693.6 Q +(ocess Substitution)-.18 E F2(Pr)108 705.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 -(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 +(It tak)5.405 F .405(es the form)-.1 F(of)108 717.6 Q F1(<\()3.251 E F2 +(list)A F1(\)).833 E F0(or)3.251 E F1(>\()3.251 E F2(list)A F1(\)).833 E +F0 5.751(.T)C .751(he process)-5.751 F F2(list)3.251 E F0 .751 (is run asynchronously)3.251 F 3.251(,a)-.65 G .751 (nd its input or output appears as a \214lename.)-3.251 F .147 -(This \214lename is passed as an ar)108 148.8 R .148 +(This \214lename is passed as an ar)108 729.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 -(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 -(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) --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) --.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 +(xpansion. If)-.15 F(the)2.648 E F1(>\()2.648 E F2(list)A F1(\)).833 E +F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(26)185.955 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 .56 +(form is used, writing to the \214le will pro)108 84 R .56 +(vide input for)-.15 F/F1 10/Times-Italic@0 SF(list)3.059 E F0 5.559(.I) +C 3.059(ft)-5.559 G(he)-3.059 E/F2 10/Times-Bold@0 SF(<\()3.059 E F1 +(list)A F2(\)).833 E F0 .559(form is used, the \214le passed as an)3.059 +F(ar)108 96 Q .308(gument should be read to obtain the output of)-.18 F +F1(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 108 Q F1(FIFOs)A F0 2.5(\)o)C 2.5(rt)-2.5 G(he) +-2.5 E F2(/de)2.5 E(v/fd)-.15 E F0(method of naming open \214les.)2.5 E +.897(When a)108 124.8 R -.25(va)-.2 G .896(ilable, process substitution\ + is performed simultaneously with parameter and v).25 F .896(ariable e) +-.25 F(xpansion,)-.15 E(command substitution, and arithmetic e)108 136.8 +Q(xpansion.)-.15 E F2 -.75(Wo)87 153.6 S(rd Splitting).75 E F0 1.142 +(The shell scans the results of parameter e)108 165.6 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 -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 -(as a delimiter)2.313 F 2.563(,a)-.4 G .063 +(xpansion that)-.15 F(did not occur within double quotes for)108 177.6 Q +F1(wor)2.84 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063 +(The shell treats each character of)108 194.4 R/F3 9/Times-Bold@0 SF +(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 -.207(alue is e)-.25 F(xactly)-.15 E F4()2.708 E F0 -(,)A .837(the def)108 295.2 R .837(ault, then sequences of)-.1 F F4 -()3.337 E F0(,)A F4()3.337 E F0 3.337(,a)C(nd)-3.337 E F4 +108 206.4 R(If)5.207 E F3(IFS)2.707 E F0 .207(is unset, or its v)2.457 F +.207(alue is e)-.25 F(xactly)-.15 E F2()2.708 E F0 +(,)A .837(the def)108 218.4 R .837(ault, then sequences of)-.1 F F2 +()3.337 E F0(,)A F2()3.337 E F0 3.337(,a)C(nd)-3.337 E F2 ()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 230.4 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 +G .345(equence of)-2.845 F F3(IFS)2.845 E F0 .345 (characters not at the be)2.595 F .345(ginning or end serv)-.15 F(es) --.15 E 1.237(to delimit w)108 319.2 R 3.737(ords. If)-.1 F F1(IFS)3.737 +-.15 E 1.237(to delimit w)108 242.4 R 3.737(ords. If)-.1 F F3(IFS)3.737 E F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236 -(ault, then sequences of the whitespace characters)-.1 F 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 +(ault, then sequences of the whitespace characters)-.1 F F2(space)108 +254.4 Q F0(,)A F2(tab)2.506 E F0 2.506(,a)C(nd)-2.506 E F2(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 +(ter is in the v)108 266.4 R .92(alue of)-.25 F F3(IFS)3.42 E F0(\(an) +3.17 E F3(IFS)3.42 E F0 .92(whitespace character\).)3.17 F(An)5.92 E +3.42(yc)-.15 G .92(haracter in)-3.42 F F3(IFS)3.42 E F0 .92(that is not) +3.17 F F3(IFS)3.42 E F0(whitespace,)3.17 E .428(along with an)108 278.4 +R 2.928(ya)-.15 G(djacent)-2.928 E F3(IFS)2.928 E F0 .428 (whitespace characters, delimits a \214eld.)2.678 F 2.928(As)5.428 G -.428(equence of)-2.928 F 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 -(guments \()-.18 F F4 .833("").833 G F0(or)2.449 E F4 .833<0808>4.115 G +.428(equence of)-2.928 F F3(IFS)2.928 E F0 .429(whitespace charac-)2.679 +F(ters is also treated as a delimiter)108 290.4 Q 5(.I)-.55 G 2.5(ft)-5 +G(he v)-2.5 E(alue of)-.25 E F3(IFS)2.5 E F0(is null, no w)2.25 E +(ord splitting occurs.)-.1 E .783(Explicit null ar)108 307.2 R .783 +(guments \()-.18 F F2 .833("").833 G F0(or)2.449 E F2 .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 319.2 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 331.2 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 343.2 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 355.2 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.1673.483 -F F0(becomes)3.483 E F53.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, unless the)-.1 F F42.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 +(is, the w)3.483 F(ord)-.1 E/F4 10/Courier@0 SF -5.1673.483 +F F0(becomes)3.483 E F43.483 E F0 .983(after w)3.483 F .983 +(ord splitting and)-.1 F(null ar)108 367.2 Q(gument remo)-.18 E -.25(va) +-.15 G(l.).25 E(Note that if no e)108 384 Q +(xpansion occurs, no splitting is performed.)-.15 E F2 -.1(Pa)87 400.8 S +(thname Expansion).1 E F0 .37(After w)108 412.8 R .37 +(ord splitting, unless the)-.1 F F22.87 E F0 .37 +(option has been set,)2.87 F F2(bash)2.87 E F0 .371(scans each w)2.871 F +.371(ord for the characters)-.1 F F2(*)2.871 E F0(,)A F2(?)2.871 E F0 +2.871(,a)C(nd)-2.871 E F2([)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 +424.8 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F1 (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 436.8 R F3 -.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 448.8 R F2 (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 460.8 Q F2(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 +.785(ord is remo)-.1 F -.15(ve)-.15 G 3.285(d. If).15 F(the)3.285 E F2 (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 +472.8 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F +(option)108 484.8 Q F2(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 -(xpansion, the character)-.15 F F4 -.63(``)2.539 G -.55(.').63 G(')-.08 +(When a pattern is used for pathname e)108 496.8 R .039 +(xpansion, the character)-.15 F F2 -.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 +508.8 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 F2(dotglob)2.691 E F0 .191 +(is set.)2.691 F .191(In order to match the \214le-)5.191 F(names)108 +520.8 Q F2 -.63(``)3.645 G -.55(.').63 G(')-.08 E F0(and)6.145 E F2 -.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 F2(dotglob) +3.644 E F0 1.144(is set.)3.644 F 1.144(If the)6.144 F F2(globskipdots) +108 532.8 Q F0 .153(shell option is enabled, the \214lenames)2.653 F F2 +-.63(``)2.653 G -.55(.').63 G(')-.08 E F0(and)5.153 E F2 -.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 544.8 R F2 +-.63(``)2.62 G -.55(.').63 G(')-.08 E F0 5.12(.W)C .12 +(hen not matching pathnames, the)-5.12 F F2 -.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 556.8 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 568.8 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 F3 -.09(Pa)2.631 G(tter).09 E 2.381 +(nM)-.135 G(atch-)-2.381 E(ing)108 580.8 Q/F5 9/Times-Roman@0 SF(.)A F0 +.605(See the description of)5.105 F F2(shopt)3.105 E F0(belo)3.105 E +3.106(wu)-.25 G(nder)-3.106 E F3 .606(SHELL B)3.106 F(UIL)-.09 E .606 +(TIN COMMANDS)-.828 F F0 .606(for a description of the)2.856 F F2(no-) +3.106 E(caseglob)108 592.8 Q F0(,)A F2(nullglob)2.5 E F0(,)A F2 +(globskipdots)2.5 E F0(,)A F2(failglob)2.5 E F0 2.5(,a)C(nd)-2.5 E F2 +(dotglob)2.5 E F0(shell options.)2.5 E(The)108 609.6 Q F3(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) +F F1(pattern)3.811 E F0 5.061(.I).24 G(f)-5.061 E F3(GLO-)2.561 E +(BIGNORE)108 621.6 Q F0 1.096(is set, each matching \214le name that al\ +so matches one of the patterns in)3.346 F F3(GLOBIGNORE)3.597 E F0 1.097 +(is re-)3.347 F(mo)108 633.6 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 F2(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 +(ainst the patterns in)-.05 F F3(GLO-)2.85 E(BIGNORE)108 645.6 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 +1.48(The \214lenames)6.48 F F2 -.63(``)3.98 G -.55(.').63 G(')-.08 E F0 +(and)6.48 E F2 -.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 F3(GLOBIGNORE)108 657.6 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 +1.627 -.4(r, s).15 H(etting).4 E F3(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 +.682(enabling the)108 669.6 R F2(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 +-.15 F F2 -.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 681.6 Q +1.185(vior of ignoring \214lenames be)-.2 F 1.185(ginning with a)-.15 F +F2 -.63(``)3.684 G -.55(.').63 G(')-.08 E F0 3.684(,m)C(ak)-3.684 E(e) +-.1 E F2 -.63(``)3.684 G(.*').63 E(')-.63 E F0 1.184 +(one of the patterns in)6.184 F F3(GLOBIGNORE)3.684 E F5(.)A F0(The)108 +693.6 Q F2(dotglob)3.131 E F0 .631(option is disabled when)3.131 F F3 +(GLOBIGNORE)3.132 E F0 .632(is unset.)2.882 F .632 +(The pattern matching honors the setting of)5.632 F(the)108 705.6 Q F2 +(extglob)2.5 E F0(shell option.)2.5 E F2 -.1(Pa)108 722.4 S(tter).1 E +2.5(nM)-.15 G(atching)-2.5 E F0(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(27)185.955 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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(An)108 84 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 +(atches).65 E 2.721(itself. The)108 96 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 +.418(caping backslash is discarded when matching.)108 108 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 120 Q(.)-.65 E +(The special pattern characters ha)108 136.8 Q .3 -.15(ve t)-.2 H +(he follo).15 E(wing meanings:)-.25 E/F1 10/Times-Bold@0 SF(*)144 153.6 +Q F0 .376(Matches an)180 153.6 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 165.6 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 177.6 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E +F0(,)A(tw)180 189.6 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 201.6 Q +F0(Matches an)180 201.6 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E +F1([...])144 213.6 Q F0 .579(Matches an)180 213.6 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 225.6 R/F2 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 237.6 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 249.6 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 +(The sorting order of characters in range e)180 261.6 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 +180 273.6 R .375(alues of the)-.25 F/F3 9/Times-Bold@0 SF(LC_COLLA)2.875 +E(TE)-.855 E F0(or)2.625 E F3(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 285.6 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 297.6 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 F12.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 +180 309.6 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 321.6 Q -.4(Wi) +180 339.6 S(thin).4 E F1([)3.07 E F0(and)3.07 E F1(])3.07 E F0(,)A F2 -.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 +(can be speci\214ed using the syntax)3.071 F F1([:)3.071 E F2(class)A F1 +(:])A F0 3.071(,w)C(here)-3.071 E F2(class)3.071 E F0 +(is one of the follo)180 351.6 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 +(alnum alpha ascii blank cntrl digit graph lo)180 363.6 R 5.889 +(wer print punct space up-)-.1 F 5(per w)180 375.6 R 5(ord xdigit)-.1 F +F0 4.289(Ac)180 387.6 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(=]) +(class matches letters, digits, and the character _.)180 399.6 Q -.4(Wi) +180 417.6 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 F2 2.037(equivalence class)4.537 F F0 2.036 +(can be speci\214ed using the syntax)4.536 F F1([=)4.536 E F2(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 + collation weight \(as de\214ned by the current locale\) as)180 429.6 R +(the character)180 441.6 Q F2(c)2.5 E F0(.)A -.4(Wi)180 459.6 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 +2.5 E F2(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F2 +(symbol)2.5 E F0(.)A .54(If the)108 476.4 R F1(extglob)3.04 E F0 .54 +(shell option is enabled using the)3.04 F F1(shopt)3.039 E F0 -.2(bu) +3.039 G .539(iltin, the shell recognizes se).2 F -.15(ve)-.25 G .539 +(ral e).15 F .539(xtended pattern)-.15 F .037(matching operators.)108 +488.4 R .037(In the follo)5.037 F .037(wing description, a)-.25 F F2 +(pattern-list)2.538 E F0 .038 +(is a list of one or more patterns separated by)2.538 F(a)108 500.4 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 524.4 Q F2(pattern-list).833 E F1 +(\)).833 E F0(Matches zero or one occurrence of the gi)180 536.4 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 548.4 Q F2 (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 zero or more occurrences of the gi)180 560.4 Q -.15(ve)-.25 G +2.5(np).15 G(atterns)-2.5 E F1(+\()144 572.4 Q F2(pattern-list).833 E F1 +(\)).833 E F0(Matches one or more occurrences of the gi)180 584.4 Q -.15 +(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 596.4 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches one of the gi)180 608.4 Q +-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(!\()144 620.4 Q F2 +(pattern-list).833 E F1(\)).833 E F0(Matches an)180 632.4 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 .988(When matching \214lenames, the)108 649.2 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 661.2 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 673.2 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 685.2 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 697.2 Q +.969(Complicated e)108 714 R .969(xtended pattern matching ag)-.15 F +.969(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968 +(specially when the patterns contain).65 F 1.23 +(alternations and the strings contain multiple matches.)108 726 R 1.23 +(Using separate matches ag)6.23 F 1.23(ainst shorter strings, or)-.05 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(28)185.955 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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(using arrays of strings instead of a single long string, may be f)108 +84 Q(aster)-.1 E(.)-.55 E/F1 10/Times-Bold@0 SF(Quote Remo)87 100.8 Q +-.1(va)-.1 G(l).1 E F0 1.113(After the preceding e)108 112.8 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 -.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 -(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 -.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 +1.112(that did not result)4.445 F(from one of the abo)108 124.8 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 141.6 Q F0 .545 +(Before a command is e)108 153.6 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 .429(by the shell.)108 +165.6 R F3(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 177.6 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 +189.6 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 201.6 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 213.6 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 p\ +receded by a \214le descriptor number may instead be preceded by a w)108 +230.4 R .771(ord of)-.1 F .292(the form {)108 242.4 R F3(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 +254.4 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 266.4 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 (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 278.4 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 290.4 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 307.2 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 319.2 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 331.2 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 348 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 360 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 372 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 -(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 +F .867(xpands to more than one)-.15 F -.1(wo)108 384 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 400.8 Q -.15 +(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 417.6 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 417.6 +(directs both standard output and standard error to the \214le)108 434.4 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 -E F0 3.005(,b).68 G .505(ecause the standard error w)-3.005 F .505 +451.2 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505 +(directs only the standard output to \214le)108 468 R F3(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 +(output before the standard output w)108 480 Q(as redirected to)-.1 E F3 +(dirlist)2.85 E F0(.).68 E F1(Bash)108 496.8 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 +(wing)-.25 E 3.478(table. If)108 508.8 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 +(otherwise it will emulate them internally with the beha)108 520.8 Q +(vior described belo)-.2 E -.65(w.)-.25 G F1(/de)144 537.6 Q(v/fd/)-.15 +E F3(fd)A F0(If)180 549.6 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 +(is duplicated.)2.5 E F1(/de)144 561.6 Q(v/stdin)-.15 E F0 +(File descriptor 0 is duplicated.)180 573.6 Q F1(/de)144 585.6 Q +(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 597.6 Q F1(/de) +144 609.6 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 +621.6 Q F1(/de)144 633.6 Q(v/tcp/)-.15 E F3(host)A F1(/)A F3(port)A F0 +(If)180 645.6 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 (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 657.6 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 +669.6 Q(v/udp/)-.15 E F3(host)A F1(/)A F3(port)A F0(If)180 681.6 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 (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 693.6 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) --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 -(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 +710.4 S(ailure to open or create a \214le causes the redirection to f) +-2.6 E(ail.)-.1 E .946(Redirections using \214le descriptors greater th\ +an 9 should be used with care, as the)108 727.2 R 3.447(ym)-.15 G .947 +(ay con\215ict with \214le)-3.447 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(29)185.955 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(Redir)87 84 Q(ecting Input)-.18 E F0 .391 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(descriptors the shell uses internally)108 84 Q(.)-.65 E/F1 10 +/Times-Bold@0 SF(Redir)87 100.8 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 -(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 +108 112.8 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 124.8 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 141.6 Q([)144 158.4 Q +F2(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 175.2 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 187.2 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 199.2 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 211.2 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 228 Q([)144 244.8 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 261.6 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 273.6 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 285.6 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) +297.6 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 +314.4 S(pending Redir).25 E(ected Output)-.18 E F0 .642 +(Redirection of output in this f)108 326.4 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 338.4 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 +350.4 Q(xist it is created.)-.15 E +(The general format for appending output is:)108 367.2 Q([)144 384 Q F2 +(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 400.8 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 412.8 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 +424.8 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E +(There are tw)108 441.6 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 458.4 Q F2(wor)A(d)-.37 E F0(and)108 470.4 Q F1(>&)144 482.4 Q +F2(wor)A(d)-.37 E F0(Of the tw)108 499.2 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 +-.25(va)-.25 G(lent to).25 E F1(>)144 516 Q F2(wor)A(d)-.37 E F0(2)2.5 E +F1(>&)A F0(1)A .114(When using the second form,)108 532.8 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 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 +(oes, other redirection operators)-2.615 F(apply \(see)108 544.8 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 +(w\) for compatibility reasons.)-.25 E F1 -.25(Ap)87 561.6 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 573.6 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 +585.6 Q(xpansion of)-.15 E F2(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\ -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 +602.4 Q F1(&>>)144 619.2 Q F2(wor)A(d)-.37 E F0 +(This is semantically equi)108 636 Q -.25(va)-.25 G(lent to).25 E F1(>>) +144 652.8 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A(\(see)108 669.6 +Q F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E F1 +(Her)87 686.4 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of redir\ +ection instructs the shell to read input from the current source until \ +a line containing only)108 698.4 R F2(delimiter)108.35 710.4 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 +F(dard input \(or \214le descriptor)108 722.4 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(GNU Bash 5.2)72 768 +Q(2021 December 26)136.795 E(30)185.955 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([)144 84 Q/F1 10 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E +(The format of here-documents is:)108 84 Q([)144 100.8 Q/F1 10 /Times-Italic@0 SF(n)A F0(])A/F2 10/Times-Bold@0 SF(<<)A F0([)A F2A -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 -(xpansion, command substitution, arithmetic e)-.15 F .302 +F0(])A F1(wor)A(d)-.37 E(her)164 112.8 Q(e-document)-.37 E(delimiter)144 +124.8 Q F0 .301(No parameter and v)108 141.6 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 +153.6 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 165.6 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 177.6 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(\\) +(xpansion, the character se-)-.15 F(quence)108 189.6 Q F2(\\) 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 206.4 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 218.4 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 +-.25 E(ashion.)-.1 E F2(Her)87 235.2 Q 2.5(eS)-.18 G(trings)-2.5 E F0 +2.5(Av)108 247.2 S(ariant of here documents, the format is:)-2.75 E([) +144 264 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 280.8 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 292.8 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 -F1(wor)2.967 E(d)-.37 E F0 -.15(ex)3.397 G .127 +(supplied as a single string, with a ne)108 304.8 R .374(wline appended\ +, to the command on its standard input \(or \214le descrip-)-.25 F(tor) +108 316.8 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 333.6 Q F0(The redirection operator) +108 345.6 Q([)144 362.4 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 +.126(is used to duplicate input \214le descriptors.)108 379.2 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 +391.2 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 403.2 R(If)5.149 E F1(wor) 2.989 E(d)-.37 E F0 -.25(eva)3.419 G .149(luates to).25 F F22.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) +(the standard input \(\214le descriptor 0\) is used.)108 415.2 Q +(The operator)108 432 Q([)144 448.8 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 +(is used similarly to duplicate output \214le descriptors.)108 465.6 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 +(tor 1\) is used.)108 477.6 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 +a redirection error oc-)3.836 F 3.204(curs. If)108 489.6 R F1(wor)3.544 E(d)-.37 E F0 -.25(eva)3.974 G .704(luates to).25 F F23.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 +.965(not e)108 501.6 R .965(xpand to one or more digits or)-.15 F F2 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 F2A F0(mo)108 559.2 Q +-3.466 F(pre)108 513.6 Q(viously)-.25 E(.)-.65 E F2(Mo)87 530.4 Q +(ving File Descriptors)-.1 E F0(The redirection operator)108 542.4 Q([) +144 559.2 Q F1(n)A F0(])A F2(<&)A F1(digit)A F2A F0(mo)108 576 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 +.517(is not speci-)3.017 F(\214ed.)108 588 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 F2A 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 +108 604.8 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([)144 621.6 Q +F1(n)A F0(])A F2(>&)A F1(digit)A F2A F0(mo)108 638.4 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 +F1(n)2.768 E F0 .268(is not speci-)2.768 F(\214ed.)108 650.4 Q F2 +(Opening File Descriptors f)87 667.2 Q(or Reading and Writing)-.25 E F0 +(The redirection operator)108 679.2 Q([)144 696 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 +712.8 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 +(scriptor)108 724.8 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.2)72 768 Q(2021 December 26) +136.795 E(31)185.955 E 0 Cg EP +%%Page: 32 32 %%BeginPageSetup BP %%EndPageSetup @@ -3983,15 +4110,14 @@ ses that may be set and unset with the)108 108 R/F3 10/Times-Bold@0 SF (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 +(unalias)2.5 E F0(command.)2.5 E .742 +(There is no mechanism for using ar)108 237.6 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 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 (SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E .436 @@ -4090,9 +4216,9 @@ hildren \(including the functions it calls\).)108 638.4 R 1.185(Local v) 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 (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 +(alue within its caller)-.25 F 3.313(,i)-.4 G(f)-3.313 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(32)185.955 E 0 Cg EP +%%Page: 33 33 %%BeginPageSetup BP %%EndPageSetup @@ -4151,4002 +4277,4117 @@ 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 F23.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 F23.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 F22.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 -(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 +.046(\214le and line number)108 336 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 .493 +(processes \(those created when e)108 348 R -.15(xe)-.15 G .492 +(cuting a separate shell in).15 F -.2(vo)-.4 G .492 +(cation\) automatically ha).2 F .792 -.15(ve t)-.2 H .492 +(hem de\214ned with).15 F(the)108 360 Q F23.2 E F0 .7 +(option to the)3.2 F F2(export)3.2 E F0 -.2(bu)3.2 G 3.2(iltin. A).2 F +.701(function de\214nition may be deleted using the)3.2 F F23.201 +E F0 .701(option to the)3.201 F F2(unset)3.201 E F0 -.2(bu)108 372 S +(iltin.).2 E .372(Functions may be recursi)108 388.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 .322 +(stack and restrict the number of function in)108 400.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 +(ault, no limit is imposed on the number of re-)-.1 F(cursi)108 412.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 +72 429.6 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 1.089 +(The shell allo)108 441.6 R 1.089(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 +(luated, under certain circumstances \(see the).25 F F2(let)3.588 E F0 +(and)3.588 E F2(de-)3.588 E(clar)108 453.6 Q(e)-.18 E F0 -.2(bu)3.452 G +.952(iltin commands, the).2 F F2(\(\()3.452 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.453(\). Ev)B .953(aluation is done in)-.25 F<8c78>108 465.6 Q 1.058 (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 +(vision by 0 is trapped and \215agged as an error)-.25 F(.)-.55 E .828 +(The operators and their precedence, associati)108 477.6 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 F2A F0 -.25(va)144 518.4 S -(riable post-increment and post-decrement).25 E F2 2.5108 530.4 S -F0(unary minus and plus)144 530.4 Q F2(++)108 542.4 Q F1(id)A F2 -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 +(alues are the same as in the C language.)-.25 F .829(The fol-)5.829 F +(lo)108 489.6 Q .44(wing list of operators is grouped into le)-.25 F +-.15(ve)-.25 G .439(ls of equal-precedence operators.).15 F .439(The le) +5.439 F -.15(ve)-.25 G .439(ls are listed in order).15 F +(of decreasing precedence.)108 501.6 Q F1(id)108 518.4 Q F2(++)A F1(id) +2.5 E F2A F0 -.25(va)144 530.4 S +(riable post-increment and post-decrement).25 E F2 2.5108 542.4 S +F0(unary minus and plus)144 542.4 Q F2(++)108 554.4 Q F1(id)A F2 +2.5 E F1(id)A F0 -.25(va)144 566.4 S +(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 578.4 S F0 +(logical and bitwise ne)144 578.4 Q -.05(ga)-.15 G(tion).05 E F2(**)108 +590.4 Q F0 -.15(ex)144 590.4 S(ponentiation).15 E F2 2.5(*/%)108 602.4 S +F0(multiplication, di)144 602.4 Q(vision, remainder)-.25 E F2 2.5<2bad> +108 614.4 S F0(addition, subtraction)144 614.4 Q F2(<< >>)108 626.4 Q F0 +(left and right bitwise shifts)144 626.4 Q F2(<= >= < >)108 638.4 Q F0 +(comparison)144 650.4 Q F2(== !=)108 662.4 Q F0(equality and inequality) +144 662.4 Q F2(&)108 674.4 Q F0(bitwise AND)144 674.4 Q F2(^)108 686.4 Q +F0(bitwise e)144 686.4 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|) +108 698.4 Q F0(bitwise OR)144 698.4 Q F2(&&)108 710.4 Q F0(logical AND) +144 710.4 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(33)185.955 +E 0 Cg EP +%%Page: 34 34 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F -(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 -/Times-Italic@0 SF -.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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(||)108 84 Q F0(logical OR)144 84 Q/F2 10/Times-Italic@0 SF -.2(ex)108 +96 S(pr).2 E F1(?)A F2 -.2(ex)C(pr).2 E F1(:)A F2 -.2(ex)C(pr).2 E F0 +(conditional operator)144 108 Q F1 2.5(=*)108 120 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 132 Q F2 -.2(ex)108 144 S(pr1).2 E F1(,)2.5 E +F2 -.2(ex)2.5 G(pr2).2 E F0(comma)144 156 Q .68(Shell v)108 172.8 R .68 +(ariables are allo)-.25 F .68(wed as operands; parameter e)-.25 F .68 (xpansion is performed before the e)-.15 F .68(xpression is e)-.15 F --.25(va)-.25 G(lu-).25 E 3.507(ated. W)108 172.8 R 1.007(ithin an e)-.4 -F 1.007(xpression, shell v)-.15 F 1.007 +-.25(va)-.25 G(lu-).25 E 3.508(ated. W)108 184.8 R 1.008(ithin an e)-.4 +F 1.008(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 196.8 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 -(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 +.421(ing the parameter e)108 208.8 R .421(xpansion syntax.)-.15 F .421 +(The v)5.421 F .421(alue of a v)-.25 F .421(ariable is e)-.25 F -.25(va) +-.25 G .42(luated as an arithmetic e).25 F .42(xpression when)-.15 F +.153(it is referenced, or when a v)108 220.8 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 -(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 +-2.654 E F2(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .154 +(ute using)-.2 F F1(declar)2.654 E 2.654<65ad>-.18 G(i)-2.654 E F0 .154 +(is assigned a)2.654 F -.25(va)108 232.8 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 -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 -(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) -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 -(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\ - 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 +.657 -.15(ve i)-.2 H(ts).15 E F2(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 244.8 Q +(xpression.)-.15 E(Inte)108 261.6 Q .517(ger constants follo)-.15 F +3.017(wt)-.25 G .518(he C language de\214nition, without suf)-3.017 F +<8c78>-.25 E .518(es or character constants.)-.15 F .518(Constants with) +5.518 F 3.283(al)108 273.6 S .783 +(eading 0 are interpreted as octal numbers.)-3.283 F 3.282(Al)5.783 G +.782(eading 0x or 0X denotes he)-3.282 F 3.282(xadecimal. Otherwise,) +-.15 F(num-)3.282 E .815(bers tak)108 285.6 R 3.315(et)-.1 G .815 +(he form [)-3.315 F F2(base#)A F0 .815(]n, where the optional)B F2(base) +3.315 E F0 .816(is a decimal number between 2 and 64 representing)3.315 +F .35(the arithmetic base, and)108 297.6 R F2(n)2.85 E F0 .35 +(is a number in that base.)2.85 F(If)5.35 E F2(base#)2.849 E F0 .349 +(is omitted, then base 10 is used.)2.849 F .349(When speci-)5.349 F +(fying)108 309.6 Q F2(n)2.974 E F0 2.974(,i)C 2.974(fan)-2.974 G .474(o\ +n-digit is required, the digits greater than 9 are represented by the l\ +o)-2.974 F .475(wercase letters, the up-)-.25 F .518 +(percase letters, @, and _, in that order)108 321.6 R 5.518(.I)-.55 G(f) +-5.518 E F2(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 +333.6 Q .234(Operators are e)108 350.4 R -.25(va)-.25 G .234 (luated in order of precedence.).25 F(Sub-e)5.234 E .234 -(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .234 -(luated \214rst and may).25 F -.15(ove)108 350.4 S +(xpressions in parentheses are e)-.15 F -.25(va)-.25 G .235 +(luated \214rst and may).25 F -.15(ove)108 362.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 +/Times-Bold@0 SF(CONDITION)72 379.2 Q(AL EXPRESSIONS)-.219 E F0 .256 +(Conditional e)108 391.2 R .256(xpressions are used by the)-.15 F F1([[) +2.755 E F0 .255(compound command and the)2.755 F F1(test)2.755 E F0(and) +2.755 E F1([)2.755 E F0 -.2(bu)2.755 G .255(iltin commands to test).2 F +.133(\214le attrib)108 403.2 R .133 (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 -(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 +F1(test)2.633 E F0(and)2.633 E F1([)2.634 E F0 .134 +(commands determine their be-)2.634 F(ha)108 415.2 Q .198 +(vior based on the number of ar)-.2 F .197 +(guments; see the descriptions of those commands for an)-.18 F 2.697(yo) +-.15 G .197(ther command-)-2.697 F(speci\214c actions.)108 427.2 Q .234 +(Expressions are formed from the follo)108 444 R .234 +(wing unary or binary primaries.)-.25 F F1(Bash)5.234 E F0 .235 +(handles se)2.735 F -.15(ve)-.25 G .235(ral \214lenames spe-).15 F .425 +(cially when the)108 456 R 2.925(ya)-.15 G .425(re used in e)-2.925 F 2.925(xpressions. If)-.15 F .425(the operating system on which)2.925 F -F2(bash)2.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 -(\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 -(/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 -(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .721 +F1(bash)2.924 E F0 .424(is running pro)2.924 F .424(vides these)-.15 F +.344(special \214les, bash will use them; otherwise it will emulate the\ +m internally with this beha)108 468 R .345(vior: If an)-.2 F(y)-.15 E F2 +(\214le)2.845 E F0(ar)2.845 E(-)-.2 E .806 +(gument to one of the primaries is of the form)108 480 R F2(/de)3.306 E +(v/fd/n)-.15 E F0 3.305(,t)C .805(hen \214le descriptor)-3.305 F F2(n) +3.305 E F0 .805(is check)3.305 F 3.305(ed. If)-.1 F(the)3.305 E F2 +(\214le)3.305 E F0(ar)3.305 E(gu-)-.18 E .029 +(ment to one of the primaries is one of)108 492 R F2(/de)2.529 E +(v/stdin)-.15 E F0(,)A F2(/de)2.529 E(v/stdout)-.15 E F0 2.53(,o)C(r) +-2.53 E F2(/de)2.53 E(v/stderr)-.15 E F0 2.53<2c8c>C .03 +(le descriptor 0, 1, or 2, respec-)-2.53 F(ti)108 504 Q -.15(ve)-.25 G +(ly).15 E 2.5(,i)-.65 G 2.5(sc)-2.5 G(heck)-2.5 E(ed.)-.1 E .722 (Unless otherwise speci\214ed, primaries that operate on \214les follo) -108 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) -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 F2108 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 F2108 -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 F2108 -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 -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 -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 F2108 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 F2108 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 F2108 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 F2108 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 +108 520.8 R 3.221(ws)-.25 G .721(ymbolic links and operate on the tar) +-3.221 F(get)-.18 E(of the link, rather than the link itself.)108 532.8 +Q 1.095(When used with)108 550.8 R F1([[)3.595 E F0 3.595(,t)C(he)-3.595 +E F1(<)3.595 E F0(and)3.595 E F1(>)3.595 E F0 1.095(operators sort le) +3.595 F 1.095(xicographically using the current locale.)-.15 F(The)6.096 +E F1(test)3.596 E F0(com-)3.596 E(mand sorts using ASCII ordering.)108 +562.8 Q F1108 586.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 586.8 S +(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1108 +598.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 598.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 F1108 +610.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 610.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 +108 622.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 622.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 +108 634.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 634.8 S(ue if).35 E F2 +(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F1108 646.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 646.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 F1108 658.8 +Q F2(\214le)2.5 E F0 -.35(Tr)144 658.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 F1108 670.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 670.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 F1108 682.8 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 682.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 F2108 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 F2108 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 F2108 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 F2108 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 F1108 694.8 Q F2(\214le)2.5 E F0 -.35(Tr)144 +694.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 F1108 706.8 Q F2(\214le) +2.5 E F0 -.35(Tr)144 706.8 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 +G(ists and is readable.).15 E F1108 718.8 Q F2(\214le)2.5 E F0 +-.35(Tr)144 718.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(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(34)185.955 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/F1 10/Times-Bold@0 -SF108 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 F1108 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 F1108 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 F1108 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 -F1108 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 -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 F1108 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 -F1108 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 F02.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 -F02.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 F1108 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 +SF108 84 Q/F2 10/Times-Italic@0 SF(fd)2.5 E F0 -.35(Tr)144 84 S +(ue if \214le descriptor).35 E F2(fd)4.47 E F0 +(is open and refers to a terminal.)3.27 E F1108 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 its set-user).15 E(-id bit is set.)-.2 E F1108 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 writable.).15 E F1108 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 e).15 E -.15(xe)-.15 G(cutable.).15 E F1108 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 o).15 E(wned by the ef)-.25 E(fecti)-.25 E .3 -.15 +(ve g)-.25 H(roup id.).15 E F1108 144 Q F2(\214le)2.5 E F0 -.35 +(Tr)144 144 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G +(ists and is a symbolic link.).15 E F1108 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 has been modi\214ed since it w).15 E(as last read.)-.1 E F1 +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 o).15 E(wned by the ef)-.25 E +(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id.).15 E F1108 180 Q F2 +(\214le)2.5 E F0 -.35(Tr)144 180 S(ue if).35 E F2(\214le)2.5 E F0 -.15 +(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2(\214le1)108 192 Q F1 +(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 204 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 216 Q F02.5 E F1(nt) +A F2(\214le2)2.5 E F0 -.35(Tr)144 228 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 240 Q F02.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144 +252 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 F1108 264 Q F2 +(optname)2.5 E F0 -.35(Tr)144 276 S .263(ue if the shell option).35 F F2 +(optname)2.992 E F0 .262(is enabled.)2.942 F .262 (See the list of options under the description of the)5.262 F F1 -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 F1108 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 +2.762 E F0(option to the)144 288 Q F1(set)2.5 E F0 -.2(bu)2.5 G +(iltin belo).2 E -.65(w.)-.25 G F1108 300 Q F2(varname)2.5 E F0 +-.35(Tr)144 312 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 F1108 -312 Q F2(varname)2.5 E F0 -.35(Tr)144 324 S(ue if the shell v).35 E +324 Q F2(varname)2.5 E F0 -.35(Tr)144 336 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 F1108 336 Q F2(string)2.5 E F0 -.35(Tr)144 348 S +2.68 E F1108 348 Q F2(string)2.5 E F0 -.35(Tr)144 360 S (ue if the length of).35 E F2(string)2.5 E F0(is zero.)2.5 E F2(string) -108 360 Q F1108 372 Q F2(string)2.5 E F0 -.35(Tr)144 384 S +108 372 Q F1108 384 Q F2(string)2.5 E F0 -.35(Tr)144 396 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 +(string1)108 412.8 Q F1(==)2.5 E F2(string2)2.5 E(string1)108 424.8 Q F1 +(=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 436.8 S .861 (ue if the strings are equal.).35 F F1(=)5.861 E F0 .861 -(should be used with the)3.361 F F1(test)3.361 E F0 .861 -(command for POSIX conformance.)3.361 F .446(When used with the)144 -436.8 R F1([[)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 +(should be used with the)3.361 F F1(test)3.361 E F0 .862 +(command for POSIX conformance.)3.362 F .447(When used with the)144 +448.8 R F1([[)2.946 E F0 .446 +(command, this performs pattern matching as described abo)2.946 F .746 +-.15(ve \()-.15 H F1(Compound).15 E(Commands)144 460.8 Q F0(\).)A F2 +(string1)108 477.6 Q F1(!=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 489.6 S +(ue if the strings are not equal.).35 E F2(string1)108 506.4 Q F1(<)2.5 +E F2(string2)2.5 E F0 -.35(Tr)144 518.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 +E(.)-.65 E F2(string1)108 535.2 Q F1(>)2.5 E F2(string2)2.5 E F0 -.35 +(Tr)144 547.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 +564 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 576 Q F0 .385(is one of)2.634 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 -(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) --.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 +(ar)2.885 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 588 R +F2(ar)144 600 Q(g2)-.37 E F0 3.589(,r)C(especti)-3.589 E -.15(ve)-.25 G +(ly).15 E(.)-.65 E F2(Ar)7.099 E(g1)-.37 E F0(and)3.589 E F2(ar)3.919 E +(g2)-.37 E F0 1.089(may be positi)3.609 F 1.389 -.15(ve o)-.25 H 3.589 +(rn).15 G -2.25 -.15(eg a)-3.589 H(ti).15 E 1.389 -.15(ve i)-.25 H(nte) +.15 E 3.59(gers. When)-.15 F 1.09(used with the)3.59 F F1([[)3.59 E F0 +(command,)144 612 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 (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 +(ARITHMETIC EV)3.437 F(ALU)-1.215 E(A-)-.54 E(TION)144 624 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 -(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.849 +72 640.8 Q(ANSION)-.81 E F0 .613(When a simple command is e)108 652.8 R +-.15(xe)-.15 G .614(cuted, the shell performs the follo).15 F .614 +(wing e)-.25 F .614(xpansions, assignments, and redi-)-.15 F +(rections, from left to right, in the follo)108 664.8 Q(wing order)-.25 +E(.)-.55 E(1.)108 681.6 Q 1.849(The w)144 681.6 R 1.849 +(ords that the parser has mark)-.1 F 1.848(ed as v)-.1 F 1.848 (ariable assignments \(those preceding the command)-.25 F -(name\) and redirections are sa)144 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 693.6 Q -.15(ve)-.2 G 2.5(df).15 G +(or later processing.)-2.5 E(2.)108 710.4 Q .179(The w)144 710.4 R .179 (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 -.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 +(ariable assignments or redirections are e)-.25 F 2.68(xpanded. If)-.15 +F(an)2.68 E 2.68(yw)-.15 G .18(ords remain af-)-2.78 F .347(ter e)144 +722.4 R .347(xpansion, the \214rst w)-.15 F .347(ord is tak)-.1 F .347 +(en to be the name of the command and the remaining w)-.1 F .346 +(ords are)-.1 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(35) +185.955 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(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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(the ar)144 84 Q +(guments.)-.18 E(3.)108 100.8 Q +(Redirections are performed as described abo)144 100.8 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 117.6 Q .716(The te)144 117.6 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 .34 +(command substitution, arithmetic e)144 129.6 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 +(efore being assigned to the v)-2.839 F(ari-)-.25 E(able.)144 141.6 Q +.586(If no command name results, the v)108 158.4 R .586 +(ariable assignments af)-.25 F .586(fect the current shell en)-.25 F +3.087(vironment. In)-.4 F .587(the case of)3.087 F .371(such a command \ +\(one that consists only of assignment statements and redirections\), a\ +ssignment statements)108 170.4 R .835 +(are performed before redirections.)108 182.4 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 .839 +(command and do not af)108 194.4 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 +.838(he assignments attempts to assign a)-3.338 F -.25(va)108 206.4 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 .149 +(If no command name results, redirections are performed, b)108 223.2 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 +(vironment. A)-.4 F(redirection error causes the command to e)108 235.2 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 252 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 +4.864 -.65(w. O)-.25 H 1.064(therwise, the).65 F .068(command e)108 264 +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 command)-.15 F .467(is the e)108 276 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 +(If there were no command substitutions, the)5.466 F(command e)108 288 Q +(xits with a status of zero.)-.15 E/F4 10.95/Times-Bold@0 SF +(COMMAND EXECUTION)72 304.8 Q F0 .546 +(After a command has been split into w)108 316.8 R .547 (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 328.8 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 345.6 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 +108 357.6 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 +(tion, the shell searches for it in the list of shell b)108 369.6 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 +(If the name is neither a shell function nor a b)108 386.4 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 +(searches each element of)2.809 F(the)108 398.4 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 +410.4 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 +(search of the directories in)108 422.4 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 +es for a de\214ned shell function named)108 434.4 R F3(command_not_f) +3.455 E(ound_han-)-.25 E(dle)108 446.4 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 +(and the original command')108 458.4 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\ +.263(tus of that subshell.)108 470.4 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\ +(xit sta-)-.15 F(tus of 127.)108 482.4 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 +108 499.2 R -.15(xe)-.15 G 1.089(cutes the).15 F .197 +(named program in a separate e)108 511.2 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 +(n, and the remain-).15 F(ing ar)108 523.2 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 +(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.049(If this e)108 540 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 +3.548(ti)-3.548 G 3.548(sa)-3.548 G(s-)-3.548 E .143(sumed to be a)108 +552 R/F5 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 564 S +.137(cute it.).15 F .137 +(This subshell reinitializes itself, so that the ef)5.137 F .136 +(fect is as if a ne)-.25 F 2.636(ws)-.25 G .136(hell had been in)-2.636 +F -.2(vo)-.4 G -.1(ke).2 G 2.636(dt).1 G 2.636(oh)-2.636 G(andle)-2.636 +E .865(the script, with the e)108 576 R .866 +(xception that the locations of commands remembered by the parent \(see) +-.15 F F3(hash)3.366 E F0(belo)3.366 E(w)-.25 E(under)108 588 Q F1 +(SHELL B)2.5 E(UIL)-.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 604.8 R .348(ginning with)-.15 F F3(#!)2.848 E F0 2.848(,t)C .347(h\ +e remainder of the \214rst line speci\214es an interpreter for the pro-) +-2.848 F 3.178(gram. The)108 616.8 R .678(shell e)3.178 F -.15(xe)-.15 G .678(cutes the speci\214ed interpreter on operating systems that do not\ handle this e).15 F -.15(xe)-.15 G(cutable).15 E .206(format themselv) -108 600 R 2.706(es. The)-.15 F(ar)2.706 E .206 +108 628.8 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 +(terpreter name on the \214rst line of the program, follo)108 640.8 R +.268(wed by the name of the program, follo)-.25 F .268(wed by the com-) +-.25 F(mand ar)108 652.8 Q(guments, if an)-.18 E -.65(y.)-.15 G F4 +(COMMAND EXECUTION ENVIR)72 669.6 Q(ONMENT)-.329 E F0(The shell has an) +108 681.6 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 698.4 Q +1.406(open \214les inherited by the shell at in)144 698.4 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 +(exec)3.905 E F0 -.2(bu)144 710.4 S(iltin).2 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(36)185.955 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 +(the current w)144 84 Q(orking directory as set by)-.1 E/F1 10 +/Times-Bold@0 SF(cd)2.5 E F0(,)A F1(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F1 +(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 100.8 Q +(the \214le creation mode mask as set by)144 100.8 Q F1(umask)2.5 E F0 +(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)-2.5 E<83>108 +117.6 Q(current traps set by)144 117.6 Q F1(trap)2.5 E F0<83>108 134.4 Q +.256(shell parameters that are set by v)144 134.4 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 +(in the en)144 146.4 Q(vironment)-.4 E<83>108 163.2 Q +(shell functions de\214ned during e)144 163.2 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 180 Q +(options enabled at in)144 180 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 196.8 Q(options enabled by)144 196.8 Q F1(shopt)2.5 E F0<83> +108 213.6 Q(shell aliases de\214ned with)144 213.6 Q F1(alias)2.5 E F0 +<83>108 230.4 Q -.25(va)144 230.4 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 +(When a simple command other than a b)108 247.2 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 +-2.926 G(eparate)-2.926 E -.15(exe)108 259.2 S .133(cution en).15 F .133 (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 +(the shell.)108 271.2 Q<83>108 288 Q 1.056(the shell')144 288 R 3.556 +(so)-.55 G 1.056(pen \214les, plus an)-3.556 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 300 Q<83>108 316.8 Q(the current w)144 316.8 Q +(orking directory)-.1 E<83>108 333.6 Q(the \214le creation mode mask)144 +333.6 Q<83>108 350.4 Q .856(shell v)144 350.4 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 +(xported for the command,)-.15 F(passed in the en)144 362.4 Q(vironment) +-.4 E<83>108 379.2 Q .307(traps caught by the shell are reset to the v) +144 379.2 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 +391.2 Q 2.5(Ac)108 408 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 424.8 Q/F3 10/Times-Italic@0 SF(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 +.577(Command substitution, commands grouped with parentheses, and async\ +hronous commands are in)108 441.6 R -.2(vo)-.4 G -.1(ke).2 G 3.078(di).1 +G(n)-3.078 E 2.745(as)108 453.6 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 465.6 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 +-.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 477.6 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 +-.4 E(ment cannot af)108 489.6 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 +506.4 R 1.376(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 F13.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 F12.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 -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 -F0A 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 --.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\ -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 -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.832(vironment. If)-.4 F .332(the v)2.832 F .332 +108 518.4 R(not in)2.5 E F3(posix mode)2.5 E F0(,)A F1(bash)2.5 E F0 +(clears the)2.5 E F12.5 E F0(option in such subshells.)2.5 E .405 +(If a command is follo)108 535.2 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 547.2 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 559.2 Q/F4 10.95 +/Times-Bold@0 SF(ENVIR)72 576 Q(ONMENT)-.329 E F0 2.344 +(When a program is in)108 588 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 600 Q F0A 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 616.8 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 and creates a parameter for each name fou\ +nd, automatically marking it for)108 628.8 R F3 -.2(ex)3.208 G(port).2 E +F0 .708(to child pro-)3.888 F 2.703(cesses. Ex)108 640.8 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 +652.8 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 +(vironment is modi\214ed, the ne)108 664.8 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 +.321(inherited by an)108 676.8 R 2.821(ye)-.15 G -.15(xe)-2.971 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 +-.25 F .533(\214ed in the shell, less an)108 688.8 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 +F1(de-)3.034 E(clar)108 700.8 Q 2.5<65ad>-.18 G(x)-2.5 E F0(commands.) +2.5 E .563(The en)108 717.6 R .563(vironment for an)-.4 F(y)-.15 E F3 .563(simple command)3.403 F F0 .562 (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) +.202(parameter assignments, as described abo)108 729.6 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 F13.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 -(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 +-.25 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(37)185.955 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(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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(en)108 84 Q +(vironment seen by that command.)-.4 E .81(If the)108 100.8 R/F1 10 +/Times-Bold@0 SF3.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 10/Times-Italic@0 SF(all)3.64 E F0 .81 +(parameter assignments are placed in)3.82 F(the en)108 112.8 Q +(vironment for a command, not just those that precede the command name.) +-.4 E(When)108 129.6 Q F1(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 (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 141.6 Q(vironment.)-.4 E/F3 10.95 +/Times-Bold@0 SF(EXIT ST)72 158.4 Q -1.04(AT)-.986 G(US)1.04 E F0 .151 +(The e)108 170.4 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 F2 +(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 182.4 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 194.4 Q 5.507(.E)-.65 G +.507(xit statuses from shell b)-5.507 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 +206.4 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15 +(Fo)108 223.2 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) +(xit status of)-.15 F .049(zero indicates success.)108 235.2 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 +-2.549 F .048(atal sig-)-.1 F(nal)108 247.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 .404 -(If a command is not found, the child process created to e)108 218.4 R +(If a command is not found, the child process created to e)108 264 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 +(If a command is)5.405 F(found b)108 276 Q(ut is not e)-.2 E -.15(xe) +-.15 G(cutable, the return status is 126.).15 E(If a command f)108 292.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 +-.15 E .081(Shell b)108 309.6 R .081 +(uiltin commands return a status of 0 \()-.2 F F2(true)A F0 2.581(\)i)C +2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F2(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 +(the)108 321.6 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 (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 .468(lid options or).25 F(missing ar)108 333.6 Q(guments.)-.18 +E(The e)108 350.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 367.2 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 379.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 396 Q(ALS)-.219 E F0(When)108 408 Q F1(bash)2.502 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 +420 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 432 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 +-.162 E F5(,)A F0(and)2.25 E F4(SIGTSTP)2.5 E F5(.)A F0(Non-b)108 448.8 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 +460.8 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 +(tion to these inherited handlers.)108 472.8 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 +-.15(ey)-.1 G(board-).15 E(generated job control signals)108 484.8 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 +(SIGTSTP)2.5 E F5(.)A F0 2.046(The shell e)108 501.6 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 +-.15(ve s)-.25 H 2.045(hell resends the).15 F F4(SIGHUP)108 513.6 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 +(ve t)-.25 H(he).15 E F4(SIGHUP)108 525.6 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) +.929(rom the)-3.429 F 1.356(jobs table with the)108 537.6 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 +(SIGHUP)108 549.6 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A +.166(If the)108 566.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 (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 +578.4 Q(xits.)-.15 E(If)108 595.2 Q F1(bash)3.046 E F0 .546(is w)3.046 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 .663(will not be e)108 607.2 R -.15(xe)-.15 G .663 (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 \ +(via the)108 619.2 R F1(wait)2.826 E F0 -.2(bu)2.826 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 +(turn immediately with an e)108 631.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 -(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 -(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 -.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 -(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 +E -.15(xe)-.15 G(cuted.).15 E .499(When job control is not enabled, and) +108 648 R F1(bash)2.998 E F0 .498(is w)2.998 F .498(aiting for a fore) +-.1 F .498(ground command to complete, the shell re-)-.15 F(cei)108 660 +Q -.15(ve)-.25 G 2.605(sk).15 G -.15(ey)-2.705 G .105 +(board-generated signals such as).15 F F4(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 .424(send to that command.)108 +672 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 684 Q F1(^C)2.5 E F0 +(sends)2.5 E F4(SIGINT)2.5 E F0(to all processes in that process group.) +2.25 E(When)108 700.8 Q F1(bash)3.8 E F0 1.3 +(is running without job control enabled and recei)3.8 F -.15(ve)-.25 G +(s).15 E F4(SIGINT)3.8 E F0 1.3(while w)3.55 F 1.3(aiting for a fore)-.1 +F(ground)-.15 E .81(command, it w)108 712.8 R .81(aits until that fore) +-.1 F .81 +(ground command terminates and then decides what to do about the)-.15 F +F4(SIG-)3.309 E(INT)108 724.8 Q F5(:)A F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(38)185.955 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 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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(1.)108 84 Q .002 +(If the command terminates due to the)144 84 R/F1 9/Times-Bold@0 SF +(SIGINT)2.502 E/F2 9/Times-Roman@0 SF(,)A/F3 10/Times-Bold@0 SF(bash) +2.252 E F0 .003(concludes that the user meant to end the entire)2.502 F +(script, and acts on the)144 96 Q F1(SIGINT)2.5 E F0 +(\(e.g., by running a)2.25 E F1(SIGINT)2.5 E F0(trap or e)2.25 E +(xiting itself\);)-.15 E(2.)108 112.8 Q .289 +(If the command does not terminate due to)144 112.8 R F1(SIGINT)2.788 E +F2(,)A F0 .288(the program handled the)2.538 F F1(SIGINT)2.788 E F0 .288 +(itself and did)2.538 F .728(not treat it as a f)144 124.8 R .728 +(atal signal.)-.1 F .728(In that case,)5.728 F F3(bash)3.228 E F0 .728 +(does not treat)3.228 F F1(SIGINT)3.228 E F0 .728(as a f)2.978 F .728 +(atal signal, either)-.1 F 3.229(,i)-.4 G(n-)-3.229 E .772 +(stead assuming that the)144 136.8 R F1(SIGINT)3.272 E F0 -.1(wa)3.022 G +3.272(su).1 G .771(sed as part of the program')-3.272 F 3.271(sn)-.55 G +.771(ormal operation \(e.g., emacs)-3.271 F .409 +(uses it to abort editing commands\) or deliberately discarded.)144 +148.8 R(Ho)5.409 E(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F3(bash)3.309 E +F0 .41(will run an)2.91 F 2.91(yt)-.15 G .41(rap set)-2.91 F(on)144 +160.8 Q F1(SIGINT)3.789 E F2(,)A F0 1.289(as it does with an)3.539 F +3.789(yo)-.15 G 1.288(ther trapped signal it recei)-3.789 F -.15(ve)-.25 +G 3.788(sw).15 G 1.288(hile it is w)-3.788 F 1.288(aiting for the fore-) +-.1 F(ground command to complete, for compatibility)144 172.8 Q(.)-.65 E +/F4 10.95/Times-Bold@0 SF(JOB CONTR)72 189.6 Q(OL)-.329 E/F5 10 +/Times-Italic@0 SF -.25(Jo)108 201.6 S 3.368(bc).25 G(ontr)-3.368 E(ol) +-.45 E F0 .868(refers to the ability to selecti)3.878 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 213.6 Q F0 2.665(\)t)C .165(heir e)-2.665 F -.15 +(xe)-.15 G .165(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 .164 +(acility via an interacti)-.1 F .464 -.15(ve i)-.25 H(nterf).15 E .164 +(ace sup-)-.1 F(plied jointly by the operating system k)108 225.6 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 F3(bash)2.5 E F0(.)A .784(The shell associates a)108 242.4 R +F5(job)5.024 E F0 .784(with each pipeline.)3.514 F .784(It k)5.784 F +.785(eeps a table of currently e)-.1 F -.15(xe)-.15 G .785 +(cuting jobs, which may be).15 F .325(listed with the)108 254.4 R F3 +(jobs)2.825 E F0 2.825(command. When)2.825 F F3(bash)2.825 E F0 .325 +(starts a job asynchronously \(in the)2.825 F F5(bac)3.094 E(kgr)-.2 E +(ound)-.45 E F0 .324(\), it prints a line).77 F(that looks lik)108 266.4 +Q(e:)-.1 E([1] 25647)144 283.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 300 R .733(with this job is 25647.)108 312 R .732 +(All of the processes in a single pipeline are members of the same job) +5.733 F(.)-.4 E F3(Bash)5.732 E F0(uses)3.232 E(the)108 324 Q F5(job) +4.24 E F0(abstraction as the basis for job control.)2.73 E 1.981 -.8 +(To f)108 340.8 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.538(tion of a)108 352.8 R F5(curr)4.038 E 1.538(ent terminal pr)-.37 +F 1.537(ocess gr)-.45 F 1.537(oup ID)-.45 F F0 6.537(.M)C 1.537 +(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 -(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 -(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) -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 +364.8 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023 +(board-generated signals such as).15 F F1(SIG-)2.523 E(INT)108 376.8 Q +F2(.)A F0 1.215(These processes are said to be in the)5.716 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.215(processes are those whose process)4.485 +F .145(group ID dif)108 388.8 R .145(fers from the terminal')-.25 F .146 +(s; such processes are immune to k)-.55 F -.15(ey)-.1 G .146 +(board-generated signals.).15 F .146(Only fore-)5.146 F .16 +(ground processes are allo)108 400.8 R .16(wed to read from or)-.25 F +2.66(,i)-.4 G 2.66(ft)-2.66 G .16(he user so speci\214es with)-2.66 F/F6 +10/Courier@0 SF .16(stty tostop)2.66 F F0 2.66(,w)C .16(rite to the ter) +-2.66 F(-)-.2 E 3.051(minal. Background)108 412.8 R .551 +(processes which attempt to read from \(write to when)3.051 F F6 .551 +(stty tostop)3.051 F F0 .552(is in ef)3.052 F .552(fect\) the)-.25 F +.718(terminal are sent a)108 424.8 R F1 .718(SIGTTIN \(SIGTT)3.218 F +(OU\))-.162 E F0 .718(signal by the k)2.968 F(ernel')-.1 E 3.217(st)-.55 +G .717(erminal dri)-3.217 F -.15(ve)-.25 G 1.517 -.4(r, w).15 H .717 +(hich, unless caught, sus-).4 F(pends the process.)108 436.8 Q 1.087 +(If the operating system on which)108 453.6 R F3(bash)3.587 E F0 1.088 +(is running supports job control,)3.588 F F3(bash)3.588 E F0 1.088 +(contains f)3.588 F 1.088(acilities to use it.)-.1 F -.8(Ty)108 465.6 S +.302(ping the).8 F F5(suspend)3.142 E F0 .302(character \(typically) +3.572 F F3(^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 -(ontrol-Y\))-4.642 E .021(causes the process to be stopped when it atte\ +F 2.142(stopped and returns control to)108 477.6 R F3(bash)4.642 E F0 +7.142(.T)C 2.142(yping the)-7.942 F F5 2.142(delayed suspend)4.992 F F0 +2.143(character \(typically)5.413 F F3(^Y)4.643 E F0 4.643(,C)C +(ontrol-Y\))-4.643 E .021(causes the process to be stopped when it atte\ mpts to read input from the terminal, and control to be returned)108 -232.8 R(to)108 244.8 Q F5(bash)3.392 E F0 5.892(.T)C .892 +489.6 R(to)108 501.6 Q F3(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 -(,a)-.65 G 1.418(nd has the additional side ef)-3.919 F 1.418 +F3(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17 +(background, the)108 513.6 R F3(fg)2.67 E F0 .17 +(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F3 +(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F3(^Z)2.67 E F0 +(tak)2.67 E .17(es ef-)-.1 F 1.418(fect immediately)108 525.6 R 3.918 +(,a)-.65 G 1.418(nd has the additional side ef)-3.918 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 537.6 Q .777(There are a number of w)108 554.4 R .777 +(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F3 +(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 566.4 +Q F5(jobspec)A F0 3.457(\). Job)B(number)3.457 E F5(n)3.817 E F0 .957 +(may be referred to as)3.697 F F3(%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 578.4 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F3(%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 +590.4 R .385(gins with)-.15 F F3(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 F3(bash)2.885 +E F0 .385(reports an)2.885 F(error)108 602.4 Q 5.194(.U)-.55 G(sing) +-5.194 E F3(%?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 F3(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 614.4 R F3(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 +F3(%%)2.806 E F0(and)2.806 E F3(%+)2.806 E F0 .307(refer to the shell') +2.806 F(s)-.55 E .133(notion of the)108 626.4 R F5(curr)2.833 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 -(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 F52.533 -E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .032 +-.1 F .132(ground or started in the back-)-.15 F 2.575(ground. The)108 +638.4 R F5(pr)3.825 E -.15(ev)-.37 G .075(ious job).15 F F0 .075 +(may be referenced using)2.805 F F3<25ad>2.575 E F0 5.075(.I)C 2.575(ft) +-5.075 G .076(here is only a single job,)-2.575 F F3(%+)2.576 E F0(and) +2.576 E F3<25ad>2.576 E F0 .076(can both)2.576 F .317 +(be used to refer to that job)108 650.4 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 F3 +(jobs)2.817 E F0 .317(command\), the current)2.817 F .032(job is al)108 +662.4 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F3(+)2.533 E F0 2.533 +(,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F32.533 +E F0 5.033(.A)C .033(single % \(with no accompan)-2.5 F .033 (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 -(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 -(%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 --.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 -(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 -.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 F52.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 -(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 -.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 -(shopt)3.502 E F0 -.2(bu)3.502 G 1.002 +674.4 Q(.)-.4 E .444 +(Simply naming a job can be used to bring it into the fore)108 691.2 R +(ground:)-.15 E F3(%1)2.943 E F0 .443(is a synon)2.943 F .443(ym for) +-.15 F F3 -.63(``)2.943 G .443(fg %1').63 F(')-.63 E F0 2.943(,b)C +(ringing)-2.943 E 1.472(job 1 from the background into the fore)108 +703.2 R 3.972(ground. Similarly)-.15 F(,)-.65 E F3 -.63(``)3.973 G 1.473 +(%1 &').63 F(')-.63 E F0 1.473(resumes job 1 in the background,)3.973 F +(equi)108 715.2 Q -.25(va)-.25 G(lent to).25 E F3 -.63(``)2.5 G(bg %1') +.63 E(')-.63 E F0(.)A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(39)185.955 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 .131 +(The shell learns immediately whene)108 84 R -.15(ve)-.25 G 2.631(raj) +.15 G .131(ob changes state.)-2.631 F(Normally)5.131 E(,)-.65 E/F1 10 +/Times-Bold@0 SF(bash)2.631 E F0 -.1(wa)2.63 G .13 +(its until it is about to print a).1 F .157 +(prompt before reporting changes in a job')108 96 R 2.657(ss)-.55 G .157 +(tatus so as to not interrupt an)-2.657 F 2.658(yo)-.15 G .158 +(ther output.)-2.658 F .158(If the)5.158 F F12.658 E F0 .158 +(option to)2.658 F(the)108 108 Q F1(set)2.648 E F0 -.2(bu)2.648 G .148 +(iltin command is enabled,).2 F F1(bash)2.648 E F0 .148 +(reports such changes immediately)2.648 F 5.147(.A)-.65 G .447 -.15 +(ny t)-5.147 H .147(rap on).15 F/F2 9/Times-Bold@0 SF(SIGCHLD)2.647 E F0 +.147(is e)2.397 F -.15(xe)-.15 G(-).15 E(cuted for each child that e)108 +120 Q(xits.)-.15 E .032(If an attempt to e)108 136.8 R(xit)-.15 E F1 +(bash)2.532 E F0 .032(is made while jobs are stopped \(or)2.532 F 2.533 +(,i)-.4 G 2.533(ft)-2.533 G(he)-2.533 E F1(checkjobs)2.533 E F0 .033 +(shell option has been enabled)2.533 F 1.003(using the)108 148.8 R F1 +(shopt)3.503 E F0 -.2(bu)3.503 G 1.003 (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 -(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 -(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 +(arning message, and, if the)-.1 F F1(checkjobs)3.502 E F0 1.002 +(option is en-)3.502 F .955(abled, lists the jobs and their statuses.) +108 160.8 R(The)5.955 E F1(jobs)3.455 E F0 .955 +(command may then be used to inspect their status.)3.455 F .956(If a) +5.956 F .604(second attempt to e)108 172.8 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 -2.782 E F0 .282(option causes)2.782 F F5(wait)2.782 E F0 .282 +(and an)108 184.8 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E +.644(When the shell is w)108 201.6 R .644 +(aiting for a job or process using the)-.1 F F1(wait)3.145 E F0 -.2(bu) +3.145 G .645(iltin, and job control is enabled,).2 F F1(wait)3.145 E F0 +(will)3.145 E .282(return when the job changes state. The)108 213.6 R F1 +2.782 E F0 .282(option causes)2.782 F F1(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 +(fore returning.)108 225.6 Q/F3 10.95/Times-Bold@0 SF(PR)72 242.4 Q +(OMPTING)-.329 E F0 .644(When e)108 254.4 R -.15(xe)-.15 G .644 +(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F1(bash)3.144 E F0 .645(displays the primary prompt)3.145 F F2(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 -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 -3.621 E F0 1.122(option is enabled.)3.621 F F5(Bash)6.122 E F0(allo) +(when it is ready to read a command,)2.895 F .428 +(and the secondary prompt)108 266.4 R F2(PS2)2.928 E F0 .427 +(when it needs more input to complete a command.)2.678 F F1(Bash)5.427 E +F0(displays)2.927 E F2(PS0)2.927 E F0(after)2.677 E .037 +(it reads a command b)108 278.4 R .037(ut before e)-.2 F -.15(xe)-.15 G +.037(cuting it.).15 F F1(Bash)5.037 E F0(displays)2.537 E F2(PS4)2.538 E +F0 .038(as described abo)2.288 F .338 -.15(ve b)-.15 H .038 +(efore tracing each com-).15 F 1.122(mand when the)108 290.4 R F1 +3.622 E F0 1.122(option is enabled.)3.622 F F1(Bash)6.122 E F0(allo) 3.622 E 1.122(ws these prompt strings to be customized by inserting a) -.25 F(number of backslash-escaped special characters that are decoded \ -as follo)108 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 -%%BeginPageSetup -BP +as follo)108 302.4 Q(ws:)-.25 E F1(\\a)144 314.4 Q F0 +(an ASCII bell character \(07\))180 314.4 Q F1(\\d)144 326.4 Q F0 +(the date in "W)180 326.4 Q(eekday Month Date" format \(e.g., "T)-.8 E +(ue May 26"\))-.45 E F1(\\D{)144 338.4 Q/F4 10/Times-Italic@0 SF(format) +A F1(})A F0(the)180 350.4 Q F4(format)3.926 E F0 1.426(is passed to) +3.926 F F4(strftime)3.926 E F0 1.427 +(\(3\) and the result is inserted into the prompt string; an)B(empty)180 +362.4 Q F4(format)2.5 E F0 +(results in a locale-speci\214c time representation.)2.5 E +(The braces are required)5 E F1(\\e)144 374.4 Q F0 +(an ASCII escape character \(033\))180 374.4 Q F1(\\h)144 386.4 Q F0 +(the hostname up to the \214rst `.)180 386.4 Q(')-.7 E F1(\\H)144 398.4 +Q F0(the hostname)180 398.4 Q F1(\\j)144 410.4 Q F0 +(the number of jobs currently managed by the shell)180 410.4 Q F1(\\l) +144 422.4 Q F0(the basename of the shell')180 422.4 Q 2.5(st)-.55 G +(erminal de)-2.5 E(vice name)-.25 E F1(\\n)144 434.4 Q F0(ne)180 434.4 Q +(wline)-.25 E F1(\\r)144 446.4 Q F0(carriage return)180 446.4 Q F1(\\s) +144 458.4 Q F0(the name of the shell, the basename of)180 458.4 Q F1($0) +2.5 E F0(\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F1 +(\\t)144 470.4 Q F0(the current time in 24-hour HH:MM:SS format)180 +470.4 Q F1(\\T)144 482.4 Q F0 +(the current time in 12-hour HH:MM:SS format)180 482.4 Q F1(\\@)144 +494.4 Q F0(the current time in 12-hour am/pm format)180 494.4 Q F1(\\A) +144 506.4 Q F0(the current time in 24-hour HH:MM format)180 506.4 Q F1 +(\\u)144 518.4 Q F0(the username of the current user)180 518.4 Q F1(\\v) +144 530.4 Q F0(the v)180 530.4 Q(ersion of)-.15 E F1(bash)2.5 E F0 +(\(e.g., 2.00\))2.5 E F1(\\V)144 542.4 Q F0(the release of)180 542.4 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 554.4 Q F0 .12(the v)180 +554.4 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($HOME)2.619 E F0 +(abbre)2.369 E .119(viated with a tilde \(uses)-.25 F(the v)180 566.4 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 578.4 Q F0(the basename of)180 578.4 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 590.4 Q F0 +(the history number of this command)180 590.4 Q F1(\\#)144 602.4 Q F0 +(the command number of this command)180 602.4 Q F1(\\$)144 614.4 Q F0 +(if the ef)180 614.4 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 626.4 Q F4 +(nnn)A F0(the character corresponding to the octal number)180 626.4 Q F4 +(nnn)2.5 E F1(\\\\)144 638.4 Q F0 2.5(ab)180 638.4 S(ackslash)-2.5 E F1 +(\\[)144 650.4 Q F0(be)180 650.4 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 662.4 Q F1(\\])144 674.4 Q F0 +(end a sequence of non-printing characters)180 674.4 Q .12 +(The command number and the history number are usually dif)108 691.2 R +.119(ferent: the history number of a command is its)-.25 F .547(positio\ +n in the history list, which may include commands restored from the his\ +tory \214le \(see)108 703.2 R F2(HIST)3.047 E(OR)-.162 E(Y)-.315 E F0 +(be-)2.797 E(lo)108 715.2 Q .354(w\), while the command number is the p\ +osition in the sequence of commands e)-.25 F -.15(xe)-.15 G .354 +(cuted during the current).15 F .822(shell session.)108 727.2 R .822 +(After the string is decoded, it is e)5.822 F .822 +(xpanded via parameter e)-.15 F .823(xpansion, command substitution,) +-.15 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(40)185.955 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 -(\(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 -(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 -.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\ -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 -(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 -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 -(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 \ -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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .683(arithmetic e) +108 84 R .683(xpansion, and quote remo)-.15 F -.25(va)-.15 G .683 +(l, subject to the v).25 F .682(alue of the)-.25 F/F1 10/Times-Bold@0 SF +(pr)3.182 E(omptv)-.18 E(ars)-.1 E F0 .682(shell option \(see the de-) +3.182 F 1.197(scription of the)108 96 R F1(shopt)3.697 E F0 1.197 +(command under)3.697 F/F2 9/Times-Bold@0 SF 1.197(SHELL B)3.697 F(UIL) +-.09 E 1.197(TIN COMMANDS)-.828 F F0(belo)3.448 E 3.698(w\). This)-.25 F +1.198(can ha)3.698 F 1.498 -.15(ve u)-.2 H(nw).15 E(anted)-.1 E .322 +(side ef)108 108 R .322(fects if escaped portions of the string appear \ +within command substitution or contain characters spe-)-.25 F(cial to w) +108 120 Q(ord e)-.1 E(xpansion.)-.15 E/F3 10.95/Times-Bold@0 SF +(READLINE)72 136.8 Q F0 .15 (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 -(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 F12.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 +108 148.8 R .451 -.15(ve s)-.25 H .151(hell, unless the).15 F F1 +(\255\255noediting)2.651 E F0(option)2.651 E .385(is gi)108 160.8 R -.15 +(ve)-.25 G 2.885(na).15 G 2.885(ts)-2.885 G .385(hell in)-2.885 F -.2 +(vo)-.4 G 2.885(cation. Line).2 F .385 +(editing is also used when using the)2.885 F F12.884 E F0 .384 +(option to the)2.884 F F1 -.18(re)2.884 G(ad).18 E F0 -.2(bu)2.884 G +2.884(iltin. By).2 F(de-)2.884 E -.1(fa)108 172.8 S 1.406 (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 +3.907(Av)6.407 G 1.407(i-style line editing interf)-3.907 F 1.407 +(ace is also)-.1 F -.2(av)108 184.8 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) --.828 F F0(belo)3.013 E 3.263(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) +(\(see)108 196.8 Q F2 .762(SHELL B)3.262 F(UIL)-.09 E .762(TIN COMMANDS) +-.828 F F0(belo)3.012 E 3.262(w\). T)-.25 F 3.263(ot)-.8 G .763(urn of) -3.263 F 3.263(fl)-.25 G .763 -(ine editing after the shell is running, use the)-3.263 F 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 +(ine editing after the shell is running, use the)-3.263 F F1(+o)3.263 E +(emacs)108 208.8 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 225.6 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.65 E F2(x)A F0 .83(means ESC)3.33 F F2(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) --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 -.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) -.4 G 3.119(st)-3.119 G .619(he sign of the ar)-3.119 F .619 +108 237.6 R -.15(ey)-.1 G(strok).15 E 2.963(es. Control)-.1 F -.1(ke) +2.963 G .463(ys are denoted by C\255)-.05 F/F4 10/Times-Italic@0 SF -.1 +(ke)C(y)-.2 E F0(,)A 1.152(e.g., C\255n means Control\255N.)108 249.6 R +(Similarly)6.152 E(,)-.65 E F4(meta)4.032 E F0 -.1(ke)3.913 G 1.153 +(ys are denoted by M\255)-.05 F F4 -.1(ke)C(y)-.2 E F0 3.653(,s)C 3.653 +(oM)-3.653 G 1.153(\255x means Meta\255X.)-3.653 F(\(On)6.153 E -.1(ke) +108 261.6 S .831(yboards without a)-.05 F F4(meta)3.711 E F0 -.1(ke) +3.591 G 2.131 -.65(y, M)-.05 H.65 E F4(x)A F0 .831(means ESC)3.331 F +F4(x)3.331 E F0 3.331(,i)C .83(.e., press the Escape k)-3.331 F 1.13 +-.15(ey t)-.1 H .83(hen the).15 F F4(x)4.1 E F0 -.1(ke)3.86 G 4.63 -.65 +(y. T)-.05 H .83(his mak).65 F(es)-.1 E .599(ESC the)108 273.6 R F4 .599 +(meta pr)3.099 F(e\214x)-.37 E F0 5.599(.T)C .599 +(he combination M\255C\255)-5.599 F F4(x)A F0 .599 +(means ESC\255Control\255)3.099 F F4(x)A F0 3.099(,o)C 3.099(rp)-3.099 G +.6(ress the Escape k)-3.099 F .9 -.15(ey t)-.1 H .6(hen hold).15 F +(the Control k)108 285.6 Q .3 -.15(ey w)-.1 H(hile pressing the).15 E F4 +(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\)).65 E .596 +(Readline commands may be gi)108 302.4 R -.15(ve)-.25 G 3.096(nn).15 G +(umeric)-3.096 E F4(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.595 E(ho)108 +314.4 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti).4 G +3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 (gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) .15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 -(ument to a command that).18 F 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.019(acts in the forw)108 326.4 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.018 +(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 338.4 Q +(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) +-.25 E -.65(w.)-.25 G .811(When a command is described as)108 355.2 R F4 (killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 -(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .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 +(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812 +(or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F4 +(yank-)-3.312 E(ing)108 367.2 Q F0 2.529(\). The)B .029(killed te)2.529 +F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F4 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029(xt to be accumulated into one unit,) --.15 F .567(which can be yank)108 124.8 R .567(ed all at once.)-.1 F +-.15 F .567(which can be yank)108 379.2 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 -(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 -(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 -(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 -F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 +108 391.2 Q F1(Readline Initialization)87 408 Q F0 .091(Readline is cus\ +tomized by putting commands in an initialization \214le \(the)108 420 R +F4(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 F .091 +(name of this \214le)2.591 F .572(is tak)108 432 R .573(en from the v) +-.1 F .573(alue of the)-.25 F F2(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 F4(~/.inputr)2.573 +E(c)-.37 E F0 5.573(.I).31 G 3.073(ft)-5.573 G(hat)-3.073 E 3.062 +(\214le does)108 444 R .562(not e)3.062 F .562 +(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F F4 +(/etc/inputr)4.212 E(c)-.37 E F0 5.561(.W).31 G .561 +(hen a program which uses the)-5.561 F .174(readline library starts up,\ + the initialization \214le is read, and the k)108 456 R .475 -.15(ey b) +-.1 H .175(indings and v).15 F .175(ariables are set.)-.25 F .175 +(There are)5.175 F .239(only a fe)108 468 R 2.739(wb)-.25 G .239 +(asic constructs allo)-2.739 F .239 +(wed in the readline initialization \214le.)-.25 F .238 +(Blank lines are ignored.)5.239 F .238(Lines be)5.238 F(gin-)-.15 E .553 +(ning with a)108 480 R F1(#)3.053 E F0 .554(are comments.)3.053 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 .554(Other lines denote)5.554 +F -.1(ke)108 492 S 2.5(yb)-.05 G(indings and v)-2.5 E(ariable settings.) +-.25 E .987(The def)108 508.8 R .987(ault k)-.1 F -.15(ey)-.1 G .987 +(-bindings may be changed with an).15 F F4(inputr)3.497 E(c)-.37 E F0 +3.487(\214le. Other)3.797 F .987(programs that use this library may) +3.487 F(add their o)108 520.8 Q(wn commands and bindings.)-.25 E -.15 +(Fo)108 537.6 S 2.5(re).15 G(xample, placing)-2.65 E +(M\255Control\255u: uni)144 554.4 Q -.15(ve)-.25 G(rsal\255ar).15 E +(gument)-.18 E(or)108 566.4 Q(C\255Meta\255u: uni)144 578.4 Q -.15(ve) +-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 590.4 Q F4(inputr) +2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e) +-2.5 E -.15(xe)-.15 G(cute the readline command).15 E F4(univer)2.58 E +(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.01(The follo)108 607.2 R +1.011(wing symbolic character names are recognized:)-.25 F F4 -.4(RU) +3.511 G(BOUT).4 E F0(,)1.27 E F4(DEL)4.091 E F0(,).53 E F4(ESC)4.021 E +F0(,).72 E F4(LFD)4.091 E F0(,).28 E F4(NEWLINE)4.211 E F0(,).73 E F4 +(RET)4.141 E F0(,)1.27 E F4(RETURN)108.63 619.2 Q F0(,)1.1 E F4(SPC)2.83 +E F0(,).72 E F4(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73 G(nd)-2.5 E +F4 -.5(TA)2.5 G(B).5 E F0(.).27 E .209 +(In addition to command names, readline allo)108 636 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 648 Q F4(macr)2.5 E(o)-.45 E F0(\).)A F1 +(Readline K)87 664.8 Q(ey Bindings)-.25 E F0 .366 +(The syntax for controlling k)108 676.8 R .666 -.15(ey b)-.1 H .366 +(indings in the).15 F F4(inputr)2.876 E(c)-.37 E F0 .366 (\214le is simple.)3.176 F .366(All that is required is the name of the) -5.366 F .263(command or the te)108 434.4 R .264(xt of a macro and a k) +5.366 F .264(command or the te)108 688.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 -(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 -(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\ +.15 F .263(The name may be speci-)5.264 F .138(\214ed in one of tw)108 +700.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 F4(Meta\255)2.638 E F0(or) +2.638 E F4(Contr)2.638 E(ol\255)-.45 E F0(pre\214x)2.638 E .138 +(es, or as a k)-.15 F .439 -.15(ey s)-.1 H(e-).15 E(quence.)108 712.8 Q +1.542(When using the form)108 729.6 R F1 -.1(ke)4.042 G(yname).1 E F0(:) +A F4(function\255name).833 E F0(or)4.042 E F4(macr)4.042 E(o)-.45 E F0 +(,)A F4 -.1(ke)4.042 G(yname)-.2 E F0 1.542(is the name of a k)4.222 F +1.841 -.15(ey s)-.1 H 1.541(pelled out in).15 F(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(41)185.955 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 2.5(English. F)108 +84 R(or e)-.15 E(xample:)-.15 E(Control-u: uni)144 108 Q -.15(ve)-.25 G +(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 120 Q(ard-kill-w) +-.1 E(ord)-.1 E(Control-o: "> output")144 132 Q .698(In the abo)108 +148.8 R .998 -.15(ve ex)-.15 H(ample,).15 E/F1 10/Times-Italic@0 SF +(C\255u)3.038 E F0 .698(is bound to the function)3.448 F/F2 10 +/Times-Bold@0 SF(uni)3.198 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E +F0(,)A F1(M\255DEL)3.878 E F0 .698(is bound to the func-)3.728 F(tion) +108 160.8 Q F2(backward\255kill\255w)2.759 E(ord)-.1 E F0 2.759(,a)C(nd) +-2.759 E F1(C\255o)2.599 E F0 .258(is bound to run the macro e)2.939 F +.258(xpressed on the right hand side \(that is, to)-.15 F(insert the te) +108 172.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 +(into the line\).)2.5 E .055(In the second form,)108 189.6 R F2("k)2.555 +E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.555 E F1(macr) +2.555 E(o)-.45 E F0(,)A F2 -.1(ke)2.555 G(yseq).1 E F0(dif)2.556 E .056 +(fers from)-.25 F F2 -.1(ke)2.556 G(yname).1 E F0(abo)2.556 E .356 -.15 +(ve i)-.15 H 2.556(nt).15 G .056(hat strings)-2.556 F 1.284 +(denoting an entire k)108 201.6 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 -.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) +(Some)6.284 E .385(GNU Emacs style k)108 213.6 R .685 -.15(ey e)-.1 H +.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .386 +(xample, b)-.15 F .386(ut the symbolic character names)-.2 F +(are not recognized.)108 225.6 Q("\\C\255u": uni)144 249.6 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 +("\\C\255x\\C\255r": re\255read\255init\255\214le)144 261.6 Q +("\\e[11~": "Function K)144 273.6 Q .3 -.15(ey 1)-.25 H(").15 E .315 +(In this e)108 290.4 R(xample,)-.15 E F1(C\255u)2.655 E F0 .315(is ag) +3.065 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 +.314(is bound to the func-)3.544 F(tion)108 302.4 Q F2 -.18(re)2.5 G .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 +(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F3 (Function Key 1)2.5 E F0(.)A -(The full set of GNU Emacs style escape sequences is)108 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 -(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 -(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\ - 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 -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 +(The full set of GNU Emacs style escape sequences is)108 319.2 Q F2 +<5c43ad>144 331.2 Q F0(control pre\214x)180 331.2 Q F2<5c4dad>144 343.2 +Q F0(meta pre\214x)180 343.2 Q F2(\\e)144 355.2 Q F0 +(an escape character)180 355.2 Q F2(\\\\)144 367.2 Q F0(backslash)180 +367.2 Q F2(\\")144 379.2 Q F0(literal ")180 379.2 Q F2<5c08>144 391.2 Q +F0(literal \010)180 391.2 Q(In addition to the GNU Emacs style escape s\ +equences, a second set of backslash escapes is a)108 408 Q -.25(va)-.2 G +(ilable:).25 E F2(\\a)144 420 Q F0(alert \(bell\))180 420 Q F2(\\b)144 +432 Q F0(backspace)180 432 Q F2(\\d)144 444 Q F0(delete)180 444 Q F2 +(\\f)144 456 Q F0(form feed)180 456 Q F2(\\n)144 468 Q F0(ne)180 468 Q +(wline)-.25 E F2(\\r)144 480 Q F0(carriage return)180 480 Q F2(\\t)144 +492 Q F0(horizontal tab)180 492 Q F2(\\v)144 504 Q F0 -.15(ve)180 504 S +(rtical tab).15 E F2(\\)144 516 Q F1(nnn)A F0 +(the eight-bit character whose v)180 516 Q(alue is the octal v)-.25 E +(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 +528 Q F1(HH)A F0(the eight-bit character whose v)180 528 Q +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.141 +(When entering the te)108 544.8 R 1.141(xt of a macro, single or double\ + quotes must be used to indicate a macro de\214nition.)-.15 F .09 +(Unquoted te)108 556.8 R .09(xt is assumed to be a function name.)-.15 F +.089(In the macro body)5.089 F 2.589(,t)-.65 G .089 +(he backslash escapes described abo)-2.589 F -.15(ve)-.15 G(are e)108 +568.8 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 -.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 -(ve u)-.25 H .046(se by using the).15 F F12.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 -(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 +F2(Bash)108 585.6 Q F0(allo)2.929 E .429(ws the current readline k)-.25 +F .729 -.15(ey b)-.1 H .429 +(indings to be displayed or modi\214ed with the).15 F F2(bind)2.93 E F0 +-.2(bu)2.93 G .43(iltin command.).2 F .046 +(The editing mode may be switched during interacti)108 597.6 R .346 -.15 +(ve u)-.25 H .046(se by using the).15 F F22.545 E F0 .045 +(option to the)2.545 F F2(set)2.545 E F0 -.2(bu)2.545 G .045 +(iltin command).2 F(\(see)108 609.6 Q/F4 9/Times-Bold@0 SF(SHELL B)2.5 E +(UIL)-.09 E(TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E F2 +(Readline V)87 626.4 Q(ariables)-.92 E F0 .043(Readline has v)108 638.4 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 --.2(bu)2.5 G(iltin command \(see).2 E F3(SHELL B)2.5 E(UIL)-.09 E +(riable may be set in the).25 F F1(inpu-)2.554 E(tr)108 650.4 Q(c)-.37 E +F0(\214le with a statement of the form)2.81 E F2(set)144 667.2 Q F1 +(variable\255name value)2.5 E F0(or using the)108 679.2 Q F2(bind)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 .79 -(Except where noted, readline v)108 448.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 +(Except where noted, readline v)108 696 R .79(ariables can tak)-.25 F +3.29(et)-.1 G .79(he v)-3.29 F(alues)-.25 E F2(On)3.29 E F0(or)3.29 E F2 (Off)3.29 E F0 .79(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).) -.05 F(Unrecog-)5.79 E .449(nized v)108 460.8 R .448 +.05 F(Unrecog-)5.79 E .448(nized v)108 708 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 -(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(On) +-.25 F .448(alue is read, empty or null v)-.25 F .449 +(alues, "on" \(case-insensi-)-.25 F(ti)108 720 Q -.15(ve)-.25 G .468 +(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F2(On) 2.968 E F0 5.468(.A)C .468(ll other v)-5.468 F .468(alues are equi)-.25 -F -.25(va)-.25 G .468(lent to).25 F 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 -(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 -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\ -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 +F -.25(va)-.25 G .468(lent to).25 F F2(Off)2.968 E F0 5.468(.T)C .467 +(he v)-5.468 F .467(ariables and their def)-.25 F(ault)-.1 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(42)185.955 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 -.25(va)108 84 S +(lues are:).25 E/F1 10/Times-Bold@0 SF(bell\255style \(audible\))108 +100.8 Q F0 .01(Controls what happens when readline w)144 112.8 R .011 +(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) +2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E +.94(rings the bell.)144 124.8 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 136.8 Q 2.5(sb)-.55 G +(ell.)-2.5 E F1(bind\255tty\255special\255chars \(On\))108 148.8 Q F0 +.055(If set to)144 160.8 R F1(On)2.555 E F0 2.555(,r)C .056(eadline att\ +empts to bind the control characters treated specially by the k)-2.555 F +(ernel')-.1 E 2.556(st)-.55 G(ermi-)-2.556 E(nal dri)144 172.8 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 +-.25 G(lents.).25 E F1(blink\255matching\255par)108 184.8 Q(en \(Off\)) +-.18 E F0 .21(If set to)144 196.8 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 +(parenthesis is inserted.)144 208.8 Q F1(color)108 220.8 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\ +144 232.8 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 +2.936(completions using a dif)144 244.8 R 2.936(ferent color)-.25 F +7.936(.T)-.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.935 +(en from the v)-.1 F 2.935(alue of the)-.25 F F1(LS_COLORS)144 256.8 Q +F0(en)3.076 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 .135(tom suf)144 268.8 R .135(\214x "readline-col\ +ored-completion-pre\214x", readline uses this color for the common pre\ +\214x in-)-.25 F(stead of its def)144 280.8 Q(ault.)-.1 E F1(color)108 +292.8 Q(ed\255stats \(Off\))-.18 E F0 1.579(If set to)144 304.8 R F1(On) +4.079 E F0 4.079(,r)C 1.579 +(eadline displays possible completions using dif)-4.079 F 1.58 +(ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 316.8 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 328.8 Q(`#')-.63 E('\))-.63 E F0 .885 +(The string that is inserted when the readline)144 340.8 R F1 +(insert\255comment)3.385 E F0 .884(command is e)3.384 F -.15(xe)-.15 G +3.384(cuted. This).15 F(com-)3.384 E(mand is bound to)144 352.8 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 -(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 -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 SFA 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 -(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E +(in vi command mode.)2.5 E F1(completion\255display\255width \(\2551\)) +108 364.8 Q F0 1.453(The number of screen columns used to display possi\ +ble matches when performing completion.)144 376.8 R .194(The v)144 388.8 +R .193(alue is ignored if it is less than 0 or greater than the termina\ +l screen width.)-.25 F 2.693(Av)5.193 G .193(alue of 0 will)-2.943 F +(cause matches to be displayed one per line.)144 400.8 Q(The def)5 E +(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 412.8 Q +(e\255case \(Off\))-.18 E F0(If set to)144 424.8 Q F1(On)2.5 E F0 2.5 +(,r)C(eadline performs \214lename matching and completion in a case\255\ +insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 +(completion\255map\255case \(Off\))108 436.8 Q F0 .093(If set to)144 +448.8 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 SFA F0 2.593(\)a)C .094 +(nd underscores)-2.593 F(\()144 460.8 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 -.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 -(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 \ -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 -(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 -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 +(completion\255pr)108 472.8 Q(e\214x\255display\255length \(0\))-.18 E +F0 .829(The length in characters of the common pre\214x of a list of po\ +ssible completions that is displayed)144 484.8 R 1.274 +(without modi\214cation.)144 496.8 R 1.274(When set to a v)6.274 F 1.274 +(alue greater than zero, common pre\214x)-.25 F 1.275 +(es longer than this)-.15 F -.25(va)144 508.8 S(lue are replaced with a\ +n ellipsis when displaying possible completions.).25 E F1 +(completion\255query\255items \(100\))108 520.8 Q F0 .53 +(This determines when the user is queried about vie)144 532.8 R .529 +(wing the number of possible completions gen-)-.25 F .56(erated by the) +144 544.8 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F +.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) +-.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 556.8 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.783 F .782(alue of this)-.25 F -.25(va)144 568.8 S .367 (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 +2.868(wt)-.25 G .368(hem; otherwise the)-2.868 F 2.868(ya)-.15 G .368 +(re simply)-2.868 F .673(listed on the terminal.)144 580.8 R 3.173(Az) +5.673 G .673(ero v)-3.173 F .673(alue means readline should ne)-.25 F +-.15(ve)-.25 G 3.172(ra).15 G .672(sk; ne)-3.172 F -.05(ga)-.15 G(ti).05 +E .972 -.15(ve v)-.25 H .672(alues are treated)-.1 F(as zero.)144 592.8 +Q F1(con)108 604.8 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612 +(If set to)144 616.8 R F1(On)3.112 E F0 3.112(,r)C .613 +(eadline will con)-3.112 F -.15(ve)-.4 G .613 (rt characters with the eighth bit set to an ASCII k).15 F .913 -.15 (ey s)-.1 H .613(equence by).15 F .541 (stripping the eighth bit and pre\214xing an escape character \(in ef) -144 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 +144 628.8 R .541(fect, using escape as the)-.25 F F2 .541(meta pr)3.041 +F(e-)-.37 E<8c78>144 640.8 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 -(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038 +(disable\255completion \(Off\))108 652.8 Q F0 .038(If set to)144 664.8 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 -(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) -.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 +144 676.8 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 688.8 Q(ol\255characters \(On\))-.18 E F0 +1.211(When set to)144 700.8 R F1(On)3.711 E F0 3.711(,o)C 3.711(no) +-3.711 G 1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 +G 1.21(upport it, readline echoes a character)-3.711 F +(corresponding to a signal generated from the k)144 712.8 Q -.15(ey)-.1 +G(board.).15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(43) +185.955 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(editing\255mode \(emacs\))108 84 Q F0 .141 +(Controls whether readline be)144 96 R .141(gins with a set of k)-.15 F +.441 -.15(ey b)-.1 H .141(indings similar to).15 F/F2 10/Times-Italic@0 +SF(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 108 Q F1(emacs)2.5 E F0(or)2.5 E F1 +(vi)2.5 E F0(.)A F1(emacs\255mode\255string \(@\))108 120 Q F0 .518 +(If the)144 132 R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 +-.25(va)3.018 G .517 +(riable is enabled, this string is displayed immediately before the).25 +F .622(last line of the primary prompt when emacs editing mode is acti) +144 144 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 156 +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 168 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 +144 180 Q F1(enable\255acti)108 192 Q -.1(ve)-.1 G.1 E +(egion \(On\))-.18 E F0(The)144 204 Q F2(point)3.246 E F0 .746 +(is the current cursor position, and)3.246 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 .745(The te)5.746 F .745(xt be-)-.15 F .344 +(tween the point and mark is referred to as the)144 216 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.845 E F0 2.845(,r)C .345(eadline al-) +-2.845 F(lo)144 228 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 .628(lights the te)144 240 R .628(xt in the re) +-.15 F .628(gion using the terminal')-.15 F 3.128(ss)-.55 G .628 +(tandout mode.)-3.128 F .628(The acti)5.628 F .928 -.15(ve r)-.25 H -.15 +(eg).15 G .628(ion sho).15 F .629(ws the te)-.25 F(xt)-.15 E .448 +(inserted by brack)144 252 R .448(eted-paste and an)-.1 F 2.948(ym)-.15 +G .448(atching te)-2.948 F .447 +(xt found by incremental and non-incremental his-)-.15 F(tory searches.) +144 264 Q F1(enable\255brack)108 276 Q(eted\255paste \(On\))-.1 E F0 +1.221(When set to)144 288 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 +(paste into the editing b)144 300 R(uf)-.2 E .353(fer as a single strin\ +g of characters, instead of treating each character as if)-.25 F .543 +(it had been read from the k)144 312 R -.15(ey)-.1 G 3.043(board. This) +.15 F .543(can pre)3.043 F -.15(ve)-.25 G .544 (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 324 Q F1(enable\255k)108 336 Q(eypad \(Off\))-.1 E F0 .893 +(When set to)144 348 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 +.893(pad when it is called.).15 F .892(Some sys-)5.893 F +(tems need this to enable the arro)144 360 Q 2.5(wk)-.25 G -.15(ey)-2.6 +G(s.).15 E F1(enable\255meta\255k)108 372 Q(ey \(On\))-.1 E F0 .64 +(When set to)144 384 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 396 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 408 Q F0(If set to)144 420 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 432 Q(eser)-.18 E -.1 +(ve)-.1 G(\255point \(Off\)).1 E F0 .553(If set to)144 444 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 456 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 -.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 -(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448 +F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1(history\255size \(unset\)) +108 468 Q F0 .948(Set the maximum number of history entries sa)144 480 R +-.15(ve)-.2 G 3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.) +-3.448 F .949(If set to zero, an)5.948 F 3.449(ye)-.15 G(xisting)-3.599 +E .483(history entries are deleted and no ne)144 492 R 2.983(we)-.25 G +.483(ntries are sa)-2.983 F -.15(ve)-.2 G 2.983(d. If).15 F .482 +(set to a v)2.983 F .482(alue less than zero, the num-)-.25 F .277 +(ber of history entries is not limited.)144 504 R .277(By def)5.277 F +.278(ault, the number of history entries is set to the v)-.1 F .278 +(alue of)-.25 F(the)144 516 Q F1(HISTSIZE)3.411 E F0 .911(shell v)3.411 +F 3.411(ariable. If)-.25 F .911(an attempt is made to set)3.411 F F2 +(history\255size)3.41 E F0 .91(to a non-numeric v)3.41 F(alue,)-.25 E +(the maximum number of history entries will be set to 500.)144 528 Q F1 +(horizontal\255scr)108 540 Q(oll\255mode \(Off\))-.18 E F0 .448 +(When set to)144 552 R F1(On)2.948 E F0 2.948(,m)C(ak)-2.948 E .448 +(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .449 (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 564 R(w)-.25 E 2.5(line. This)144 576 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) -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 -(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) --2.865 E .365(ym for this v)-.15 F 2.864(ariable. The)-.25 F(def)2.864 E +(input\255meta \(Off\))108 588 Q F0 1.061(If set to)144 600 R F1(On) +3.561 E F0 3.561(,r)C 1.062(eadline will enable eight-bit input \(that \ +is, it will not strip the eighth bit from the)-3.561 F .336 +(characters it reads\), re)144 612 R -.05(ga)-.15 G .335 +(rdless of what the terminal claims it can support.).05 F .335(The name) +5.335 F F1(meta\255\215ag)2.835 E F0(is)2.835 E 2.864(as)144 624 S(ynon) +-2.864 E .364(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('\)) +(ut readline will set it to)-3.064 F F2(On)2.864 E F0 .365 +(if the locale contains)2.865 F(eight-bit characters.)144 636 Q F1 +(isear)108 648 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 660 R -.15(xe)-.15 G(cut-).15 E +.934(ing the character as a command.)144 672 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 684 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 696 S(ymap \(emacs\)).1 E F0 2.021(Set the current readline k)144 +708 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 720 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 -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 +2.542 E F0(;)A F2(emacs)2.542 E F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(44)185.955 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 .449(is equi)144 +84 R -.25(va)-.25 G .449(lent to).25 F/F1 10/Times-Italic@0 SF +(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 F1(emacs)3.139 E F0 2.948(;t).27 G +.448(he v)-2.948 F .448(alue of)-.25 F/F2 10/Times-Bold@0 SF +(editing\255mode)2.948 E F0 .448(also af-)2.948 F(fects the def)144 96 Q +(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F2 -.1(ke)108 108 S +(yseq\255timeout \(500\)).1 E F0 .367(Speci\214es the duration)144 120 R +F1 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 +(ait for a character when reading an ambiguous k)-.1 F .668 -.15(ey s) +-.1 H(equence).15 E .525(\(one that can form a complete k)144 132 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 144 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 +3.306 F -.15(ve)-.25 G 3.306(dw).15 G .807(ithin the timeout,)-3.306 F +F1 -.37(re)3.307 G(adline).37 E F0(will)3.307 E .907(use the shorter b) +144 156 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 +(lue is speci\214ed in milliseconds, so a v).25 F .906(alue of)-.25 F +.05(1000 means that)144 168 R F1 -.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 +(less than or equal to zero, or to a non-numeric v)144 180 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 192 Q .3 -.15(ey s)-.1 H +(equence to complete.).15 E F2(mark\255dir)108 204 Q(ectories \(On\)) +-.18 E F0(If set to)144 216 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 228 Q F0(If set to)144 +240 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 252 Q(ed\255dir)-.1 E +(ectories \(Off\))-.18 E F0 .175(If set to)144 264 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 276 +Q(alue of)-.25 E F2(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F2 +(match\255hidden\255\214les \(On\))108 288 Q F0 .193(This v)144 300 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 312 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 324 Q F2 +(menu\255complete\255display\255pr)108 336 Q(e\214x \(Off\))-.18 E F0 +1.586(If set to)144 348 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 360 Q +(ycling through the list.)-.15 E F2(output\255meta \(Off\))108 372 Q F0 +.506(If set to)144 384 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 396 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(eight-bit characters.)144 408 Q F2 +(page\255completions \(On\))108 420 Q F0 .808(If set to)144 432 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 444 Q F2 +(print\255completions\255horizontally \(Off\))108 456 Q F0 .228 +(If set to)144 468 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 480 Q 2.5(,r)-.4 G(ather than do)-2.5 E +(wn the screen.)-.25 E F2 -2.29 -.18(re v)108 492 T +(ert\255all\255at\255newline \(Off\)).08 E F0 .698(If set to)144 504 R +F2(On)3.198 E F0 3.198(,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.198 F F2(accept\255line)3.199 E F0(is)3.199 E -.15(exe)144 516 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) -2.804 E F0 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H +(vidual undo lists across calls to)-.25 F F2 -.18(re)144 528 S(adline) +.18 E F0(.)A F2(sho)108 540 Q(w\255all\255if\255ambiguous \(Off\))-.1 E +F0 .303(This alters the def)144 552 R .303(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.804(,w)C .304(ords which ha)-2.904 F .604 -.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 -(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 +isted immediately instead of ringing the)144 564 R(bell.)144 576 Q F2 +(sho)108 588 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.345 +(This alters the def)144 600 R 5.345(ault beha)-.1 F 5.345 +(vior of the completion functions in a f)-.2 F 5.346(ashion similar to) +-.1 F F2(sho)144 612 Q(w\255all\255if\255ambiguous)-.1 E F0 6.691(.I)C +4.191(fs)-6.691 G 1.691(et to)-4.191 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.039(without an)144 624 R 3.539 (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 -(dd a string to the be)-3.521 F 1.022 +(ossible partial completion \(the possible completions don')-3.539 F +3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ +s to be listed immediately instead of ringing the bell.)144 636 Q F2 +(sho)108 648 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.022 +(If set to)144 660 R F2(On)3.522 E F0 3.522(,a)C 1.022 +(dd a string to the be)-3.522 F 1.021 (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 -(ault completion beha)-.1 F .094 -(vior when inserting a single match into the line.)-.2 F(It')144 336 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 -.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 +(command, or vi insertion.)144 672 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 684 Q F0 .094(If set to)144 696 R +F2(On)2.594 E F0 2.594(,t)C .095(his alters the def)-2.594 F .095 +(ault completion beha)-.1 F .095 +(vior when inserting a single match into the line.)-.2 F(It')144 708 Q +2.546(so)-.55 G .046(nly acti)-2.546 F .346 -.15(ve w)-.25 H .046 +(hen performing completion in the middle of a w).15 F 2.545(ord. If)-.1 +F .045(enabled, readline does not)2.545 F 3.275(insert characters from \ +the completion that match characters after point in the w)144 720 R +3.275(ord being)-.1 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(45)185.955 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 +(completed, so portions of the w)144 84 Q(ord follo)-.1 E +(wing the cursor are not duplicated.)-.25 E/F1 10/Times-Bold@0 SF +(vi\255cmd\255mode\255string \(\(cmd\)\))108 96 Q F0 .518(If the)144 108 +R/F2 10/Times-Italic@0 SF(show\255mode\255in\255pr)3.018 E(ompt)-.45 E +F0 -.25(va)3.018 G .517 +(riable is enabled, this string is displayed immediately before the).25 +F .475(last line of the primary prompt when vi editing mode is acti)144 +120 R .775 -.15(ve a)-.25 H .476(nd in command mode.).15 F .476(The v) +5.476 F(alue)-.25 E .33(is e)144 132 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\ +(es and backslash es-)-.15 F .244(cape sequences is a)144 144 R -.25(va) +-.2 G 2.744(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.744 F +.245(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 +156 Q F1(vi\255ins\255mode\255string \(\(ins\)\))108 168 Q F0 .518 +(If the)144 180 R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 +-.25(va)3.018 G .517 (riable is enabled, this string is displayed immediately before the).25 F .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 -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) --.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\ +192 R .486 -.15(ve a)-.25 H .186(nd in insertion mode.).15 F .187(The v) +5.186 F .187(alue is)-.25 F -.15(ex)144 204 S .924(panded lik).15 F +3.424(eak)-.1 G 1.224 -.15(ey b)-3.524 H .924 +(inding, so the standard set of meta- and control pre\214x).15 F .923 +(es and backslash es-)-.15 F .244(cape sequences is a)144 216 R -.25(va) +-.2 G 2.744(ilable. Use).25 F .244(the \\1 and \\2 escapes to be)2.744 F +.245(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 +228 Q F1(visible\255stats \(Off\))108 240 Q F0 .847(If set to)144 252 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\ -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 +(when listing possible completions.)144 264 Q F1 +(Readline Conditional Constructs)87 280.8 Q F0 .05 +(Readline implements a f)108 292.8 R .05(acility similar in spirit to t\ +he conditional compilation features of the C preprocessor)-.1 F .097 +(which allo)108 304.8 R .097(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 -E F0 .463(construct allo)2.963 F .462(ws bindings to be made based on t\ +(ariable settings to be performed as the result of tests.)-.25 F .096 +(There are four parser)5.096 F(directi)108 316.8 Q -.15(ve)-.25 G 2.5 +(su).15 G(sed.)-2.5 E F1($if)108 333.6 Q F0(The)144 333.6 Q F1($if)2.962 +E F0 .462(construct allo)2.962 F .463(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 345.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 357.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) -3.711 F F1($if)3.711 E F0(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711 +144 374.4 Q F0(The)180 374.4 Q F1(mode=)3.712 E F0 1.212(form of the) +3.712 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 386.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 398.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 -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 +(out in emacs mode.)180 410.4 Q F1(term)144 427.2 Q F0(The)180 427.2 Q +F1(term=)3.196 E F0 .696 +(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 +(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 439.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 -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 SF2.5 E F0 5 -(.T)C(his allo)-5 E(ws)-.25 E/F2 10/Times-Italic@0 SF(sun)2.84 E F0 +(wo)3.154 G .654(rd on the right side of).1 F(the)180 451.2 Q F1(=)3.231 +E F0 .731(is tested ag)3.231 F .732(ainst both the full name of the ter\ +minal and the portion of the terminal)-.05 F(name before the \214rst)180 +463.2 Q F12.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 -(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 -(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 -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 +F0 2.5(,f).77 G(or instance.)-2.5 E F1 -.1(ve)144 480 S(rsion).1 E F0 +(The)180 492 Q F1 -.1(ve)3.109 G(rsion).1 E F0 .608 +(test may be used to perform comparisons ag)3.109 F .608 +(ainst speci\214c readline v)-.05 F(ersions.)-.15 E(The)180 504 Q F1 -.1 +(ve)2.771 G(rsion).1 E F0 -.15(ex)2.771 G .271 +(pands to the current readline v).15 F 2.772(ersion. The)-.15 F .272 +(set of comparison operators in-)2.772 F(cludes)180 516 Q F1(=)3.064 E +F0 3.064(,\()C(and)-3.064 E F1(==)3.064 E F0(\),)A F1(!=)3.064 E F0(,)A +F1(<=)3.064 E F0(,)A F1(>=)3.064 E F0(,)A F1(<)3.064 E F0 3.064(,a)C(nd) +-3.064 E F1(>)3.064 E F0 5.563(.T)C .563(he v)-5.563 F .563 (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 -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 +(of the operator consists of a major v)180 528 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 .101(tional minor v)180 540 +R .101(ersion \(e.g.,)-.15 F F1(7.1)2.601 E F0 .101(\). If the minor v)B +.1(ersion is omitted, it is assumed to be)-.15 F F1(0)2.6 E F0 5.1(.T)C +(he)-5.1 E .06(operator may be separated from the string)180 552 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 564 Q F1 +(application)144 580.8 Q F0(The)180 592.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 -(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 -(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 +604.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 .501(particular v) +180 616.8 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F +.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F +.396(ci\214c program.)180 628.8 R -.15(Fo)5.396 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 -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 -(!=)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 -.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 -(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 -(es a single \214lename as an ar)-.1 F .357 +(ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 640.8 +Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 664.8 Q F0 +(Bash)2.5 E 2.5(#Q)180 676.8 S(uote the current or pre)-2.5 E(vious w) +-.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 688.8 Q F1($endif)180 +700.8 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(46)185.955 E +0 Cg EP +%%Page: 47 47 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10 +/Times-Italic@0 SF(variable)144 84 Q F0(The)180 96 Q F1(variable)3.777 E +F0 1.277(construct pro)3.777 F 1.276 +(vides simple equality tests for readline v)-.15 F 1.276(ariables and v) +-.25 F(alues.)-.25 E .079(The permitted comparison operators are)180 108 +R F1(=)2.579 E F0(,)A F1(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F1(!=) +2.579 E F0 5.079(.T)C .079(he v)-5.079 F .08(ariable name must be sepa-) +-.25 F .98(rated from the comparison operator by whitespace; the operat\ +or may be separated from)180 120 R .129(the v)180 132 R .129 +(alue on the right hand side by whitespace.)-.25 F .13 +(Both string and boolean v)5.129 F .13(ariables may be)-.25 F +(tested. Boolean v)180 144 Q(ariables must be tested ag)-.25 E +(ainst the v)-.05 E(alues)-.25 E F1(on)2.5 E F0(and)2.5 E F1(of)2.5 E(f) +-.18 E F0(.)A/F2 10/Times-Bold@0 SF($endif)108 160.8 Q F0 +(This command, as seen in the pre)144 160.8 Q(vious e)-.25 E +(xample, terminates an)-.15 E F2($if)2.5 E F0(command.)2.5 E F2($else) +108 177.6 Q F0(Commands in this branch of the)144 177.6 Q F2($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 F2($include)108 194.4 Q F0 .357 +(This directi)144 206.4 R .657 -.15(ve t)-.25 H(ak).15 E .357 +(es a single \214lename as an ar)-.1 F .356 (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 218.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 +-.15(ve w)-.25 H(ould read).05 E F1(/etc/inputr)2.5 E(c)-.37 E F0(:)A F2 +($include)144 242.4 Q F1(/etc/inputr)5.833 E(c)-.37 E F2(Sear)87 259.2 Q +(ching)-.18 E F0 .834(Readline pro)108 271.2 R .834 (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 -(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 +/F3 9/Times-Bold@0 SF(HIST)3.335 E(OR)-.162 E(Y)-.315 E F0(belo)3.085 E +.835(w\) for lines)-.25 F(containing a speci\214ed string.)108 283.2 Q +(There are tw)5 E 2.5(os)-.1 G(earch modes:)-2.5 E F1(incr)2.51 E +(emental)-.37 E F0(and)3.01 E F1(non-incr)2.86 E(emental)-.37 E F0(.).51 +E .698(Incremental searches be)108 300 R .698 (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 +.697(As each character of the)5.697 F .112 +(search string is typed, readline displays the ne)108 312 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 -.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) -2.724 E(ch-terminators)-.18 E F0 -.25(va)2.724 G .224 +E 5.113(.A)-.55 G(n)-5.113 E .542 +(incremental search requires only as man)108 324 R 3.042(yc)-.15 G .542 +(haracters as needed to \214nd the desired history entry)-3.042 F 5.541 +(.T)-.65 G .541(he char)-5.541 F(-)-.2 E .224(acters present in the v) +108 336 R .224(alue of the)-.25 F F2(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 348 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\ -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 -(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 -H .174 +F .096(mental search.)108 360 R .096(Control-G will abort an incrementa\ +l search and restore the original line.)5.096 F .097(When the search is) +5.097 F(terminated, the history entry containing the search string beco\ +mes the current line.)108 372 Q 2.939 -.8(To \214)108 388.8 T 1.339(nd \ +other matching entries in the history list, type Control-S or Control-R\ + as appropriate.).8 F 1.338(This will)6.338 F .674(search backw)108 +400.8 R .674(ard or forw)-.1 F .674(ard in the history for the ne)-.1 F +.675(xt entry matching the search string typed so f)-.15 F(ar)-.1 E +5.675(.A)-.55 G -.15(ny)-5.675 G .175(other k)108 412.8 R .475 -.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 -(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 -.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 +F -.15(xe)-.15 G .174(cute that command.).15 F -.15(Fo)5.174 G(r).15 E +.54(instance, a)108 424.8 R F1(ne)3.04 E(wline)-.15 E F0 .541 +(will terminate the search and accept the line, thereby e)3.04 F -.15 +(xe)-.15 G .541(cuting the command from the).15 F(history list.)108 +436.8 Q .653(Readline remembers the last incremental search string.)108 +453.6 R .653(If tw)5.653 F 3.153(oC)-.1 G .653 +(ontrol-Rs are typed without an)-3.153 F 3.152(yi)-.15 G(nterv)-3.152 E +(en-)-.15 E(ing characters de\214ning a ne)108 465.6 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 +-2.5 E .567(Non-incremental searches read the entire search string befo\ +re starting to search for matching history lines.)108 482.4 R(The searc\ +h string may be typed by the user or be part of the contents of the cur\ +rent line.)108 494.4 Q F2(Readline Command Names)87 511.2 Q F0 1.392 +(The follo)108 523.2 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.891(ya)-.15 G(re)-3.891 E 2.621(bound. Command)108 535.2 R .121 +(names without an accompan)2.621 F .121(ying k)-.15 F .421 -.15(ey s)-.1 +H .122(equence are unbound by def).15 F 2.622(ault. In)-.1 F .122 +(the follo)2.622 F(wing)-.25 E(descriptions,)108 547.2 Q F1(point)3.411 +E F0 .911(refers to the current cursor position, and)3.411 F F1(mark) +3.411 E F0 .91(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.41 +(db).15 G 3.41(yt)-3.41 G(he)-3.41 E F2(set\255mark)108 559.2 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 F1 -.37(re) +2.5 G(gion)-.03 E F0(.)A F2(Commands f)87 576 Q(or Mo)-.25 E(ving)-.1 E +(beginning\255of\255line \(C\255a\))108 588 Q F0(Mo)144 600 Q .3 -.15 +(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F2 +(end\255of\255line \(C\255e\))108 612 Q F0(Mo)144 624 Q .3 -.15(ve t) +-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F2 -.25(fo)108 636 S +(rward\255char \(C\255f\)).25 E F0(Mo)144 648 Q .3 -.15(ve f)-.15 H(orw) +.15 E(ard a character)-.1 E(.)-.55 E F2(backward\255char \(C\255b\))108 +660 Q F0(Mo)144 672 Q .3 -.15(ve b)-.15 H(ack a character).15 E(.)-.55 E +F2 -.25(fo)108 684 S(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 696 +Q .822 -.15(ve f)-.15 H(orw).15 E .522(ard to the end of the ne)-.1 F +.523(xt w)-.15 F 3.023(ord. W)-.1 F .523 +(ords are composed of alphanumeric characters \(let-)-.8 F +(ters and digits\).)144 708 Q(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(47)185.955 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 .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 -(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 -(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 -(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 --.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 -(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) --.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) -.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 -(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 -(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 -(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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(backward\255w)108 84 Q(ord \(M\255b\))-.1 E F0(Mo)144 96 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 108 Q F1(shell\255f)108 120 Q +(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 132 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 144 Q F1(shell\255backward\255w)108 156 Q(ord)-.1 E F0(Mo)144 +168 Q .909 -.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 .608 +(ords are delimited by non-quoted shell)-.8 F(metacharacters.)144 180 Q +F1(pr)108 192 Q -.15(ev)-.18 G(ious\255scr).15 E(een\255line)-.18 E F0 +.89(Attempt to mo)144 204 R 1.19 -.15(ve p)-.15 H .89 +(oint to the same ph).15 F .891(ysical screen column on the pre)-.05 F +.891(vious ph)-.25 F .891(ysical screen line.)-.05 F .87 +(This will not ha)144 216 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 228 Q(ysical line or if\ + point is not greater than the length of the prompt plus the screen wid\ +th.)-.05 E F1(next\255scr)108 240 Q(een\255line)-.18 E F0 .637 +(Attempt to mo)144 252 R .937 -.15(ve p)-.15 H .637(oint to the same ph) +.15 F .638(ysical screen column on the ne)-.05 F .638(xt ph)-.15 F .638 +(ysical screen line. This)-.05 F .009(will not ha)144 264 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\ +2.509(pm)-2.509 G .008(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) --.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 +length of the prompt plus)144 276 R(the screen width.)144 288 Q F1 +(clear\255display \(M\255C\255l\))108 300 Q F0 1.499 +(Clear the screen and, if possible, the terminal')144 312 R 3.999(ss) +-.55 G 1.498(crollback b)-3.999 F(uf)-.2 E(fer)-.25 E 3.998(,t)-.4 G +1.498(hen redra)-3.998 F 3.998(wt)-.15 G 1.498(he current line,)-3.998 F +(lea)144 324 Q(ving the current line at the top of the screen.)-.2 E F1 +(clear\255scr)108 336 Q(een \(C\255l\))-.18 E F0 1.36 +(Clear the screen, then redra)144 348 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 360 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 372 S(draw\255curr).18 E(ent\255line)-.18 E F0 +(Refresh the current line.)144 384 Q F1(Commands f)87 400.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 -.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) +412.8 Q(n\))-.15 E F0 .159(Accept the line re)144 424.8 R -.05(ga)-.15 G +.159(rdless of where the cursor is.).05 F .158 +(If this line is non-empty)5.158 F 2.658(,a)-.65 G .158 +(dd it to the history list)-2.658 F .699(according to the state of the) +144 436.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 448.8 Q F1(pr)108 +460.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 +(Fetch the pre)144 472.8 Q(vious command from the history list, mo)-.25 +E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 484.8 +Q F0(Fetch the ne)144 496.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 508.8 Q F0(Mo)144 520.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 532.8 Q F0(Mo)144 544.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 556.8 Q F0 .948 +(Accept the current line for e)144 568.8 R -.15(xe)-.15 G .948 +(cution and fetch the ne).15 F .948(xt line relati)-.15 F 1.247 -.15 +(ve t)-.25 H 3.447(ot).15 G .947(he current line from the)-3.447 F .729 +(history for editing.)144 580.8 R 3.229(An)5.729 G .729(umeric ar)-3.229 +F .729 +(gument, if supplied, speci\214es the history entry to use instead of) +-.18 F(the current line.)144 592.8 Q F1(fetch\255history)108 604.8 Q F0 +-.4(Wi)144 616.8 S .257(th a numeric ar).4 F .257 +(gument, fetch that entry from the history list and mak)-.18 F 2.756(ei) +-.1 G 2.756(tt)-2.756 G .256(he current line.)-2.756 F -.4(Wi)5.256 G +(th-).4 E(out an ar)144 628.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 640.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47 +(Search backw)144 652.8 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 664.8 Q F1 -.25(fo)108 676.8 S +(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132 +(Search forw)144 688.8 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 700.8 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(48)185.955 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(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 +SF(non\255incr)108 84 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 96 R .164(ard through the history starting at the current line usin\ +g a non-incremental search for)-.1 F 2.5(as)144 108 S +(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 120 Q +(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 +E F0 1.354(Search forw)144 132 R 1.354(ard through the history using a \ +non-incremental search for a string supplied by the)-.1 F(user)144 144 Q +(.)-.55 E F1(history\255sear)108 156 Q(ch\255f)-.18 E(orward)-.25 E F0 +.248(Search forw)144 168 R .249(ard through the history for the string \ +of characters between the start of the current line)-.1 F +(and the point.)144 180 Q(This is a non-incremental search.)5 E F1 +(history\255sear)108 192 Q(ch\255backward)-.18 E F0 .951(Search backw) +144 204 R .951(ard through the history for the string of characters bet\ +ween the start of the current)-.1 F(line and the point.)144 216 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 \ +108 228 Q(ch\255backward)-.18 E F0 .95(Search backw)144 240 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 +he current)-.1 F .007(line and the current cursor position \(the)144 252 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 \ +(line. This)144 264 R(is a non-incremental search.)2.5 E F1 +(history\255substring\255sear)108 276 Q(ch\255f)-.18 E(orward)-.25 E F0 +.248(Search forw)144 288 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 +(and the point.)144 300 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 +5.318 F(search.)144 312 Q F1(yank\255nth\255ar)108 324 Q 2.5(g\()-.1 G +<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 336 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 +348 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 360 Q .291(vious command be)-.25 F .291 (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.) +(ord from the end of)-.1 F .282(the pre)144 372 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 +(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 384 Q +(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 396 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 +(Insert the last ar)144 408 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 +(vious history entry\).)-.25 F -.4(Wi)144 420 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 +(g)-.1 E F0(mo)144 432 Q .806 -.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 444 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 +(alls de-).15 F 1.217(termines the direction to mo)144 456 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 (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 468 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 +480 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.) +-.15 E F1(shell\255expand\255line \(M\255C\255e\))108 492 Q F0 .622 +(Expand the line as the shell does.)144 504 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 +(xpansion as well as all of the)-.15 F(shell w)144 516 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 528 Q F0 .939 +(Perform history e)144 540 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 +-3.438 F(tion of history e)144 552 Q(xpansion.)-.15 E F1(magic\255space) +108 564 Q F0 .437(Perform history e)144 576 R .437 +(xpansion on the current line and insert a space.)-.15 F(See)5.438 E F3 +(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 588 Q 2.5(wf)-.25 G(or a description of history e) +-2.5 E(xpansion.)-.15 E F1(alias\255expand\255line)108 600 Q F0 .395 +(Perform alias e)144 612 R .395(xpansion on the current line.)-.15 F +(See)5.395 E F3(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 624 Q F1 +(history\255and\255alias\255expand\255line)108 636 Q F0 +(Perform history and alias e)144 648 Q(xpansion on the current line.) +-.15 E F1(insert\255last\255ar)108 660 Q(gument \(M\255.)-.1 E 2.5(,M) +.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 672 S(ynon)-2.5 E(ym for) +-.15 E F1(yank\255last\255ar)2.5 E(g)-.1 E F0(.)A F1 +(edit\255and\255execute\255command \(C\255x C\255e\))108 684 Q F0(In)144 +696 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 708 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(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(49)185.955 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(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) --.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 +SF(Commands f)87 84 Q(or Changing T)-.25 E(ext)-.92 E/F2 10 +/Times-Italic@0 SF(end\255of\255\214le)108 96 Q F1(\(usually C\255d\)) +2.5 E F0 .799(The character indicating end-of-\214le as set, for e)144 +108 R .799(xample, by)-.15 F/F3 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 120 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 +(as the end of input and returns)144 132 Q/F4 9/Times-Bold@0 SF(EOF)2.5 +E/F5 9/Times-Roman@0 SF(.)A F1(delete\255char \(C\255d\))108 144 Q F0 +.442(Delete the character at point.)144 156 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 +(EOF)2.941 E F0(char)2.941 E(-)-.2 E(acter)144 168 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 +108 180 Q F0 .552(Delete the character behind the cursor)144 192 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 +(he deleted te).15 F .553(xt on)-.15 F(the kill ring.)144 204 Q F1 -.25 +(fo)108 216 S(rward\255backward\255delete\255char).25 E F0 .474 +(Delete the character under the cursor)144 228 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) +(character behind the cursor is deleted.)144 240 Q F1 +(quoted\255insert \(C\255q, C\255v\))108 252 Q F0 .778(Add the ne)144 +264 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 276 S(ample.).15 E F1(tab\255insert \(C\255v T) +108 288 Q(AB\))-.9 E F0(Insert a tab character)144 300 Q(.)-.55 E F1 +(self\255insert \(a, b, A, 1, !, ...\))108 312 Q F0 +(Insert the character typed.)144 324 Q F1(transpose\255chars \(C\255t\)) +108 336 Q F0 .322(Drag the character before point forw)144 348 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 360 +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 +372 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 +(transpose\255w)108 384 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 +396 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 +(is at the end of the line, this transposes the last tw)144 408 Q 2.5 +(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 420 Q +(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 432 +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 444 S(rd, b).1 E +(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 456 Q +(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 468 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 --.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 -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 +-.25 F(vious)-.25 E -.1(wo)144 480 S(rd, b).1 E(ut do not mo)-.2 E .3 +-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 492 Q +(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 504 +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 516 S(rd, b).1 +E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 528 +S(rwrite\255mode).1 E F0 -.8(To)144 540 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 552 S .78(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 564 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 F(ferently)-.25 E 6.894(.E)-.65 G +1.894(ach call to)-6.894 F F2 -.37(re)4.394 G(adline\(\)).37 E F0 1.894 +(starts in insert)4.394 F 3.968(mode. In)144 576 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 +.958(pushing the te)144 588 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 +.957(replace the character)3.457 F(before point with a space.)144 600 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 +616.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 628.8 Q F0 +(Kill the te)144 640.8 Q(xt from point to the end of the line.)-.15 E F1 +(backward\255kill\255line \(C\255x Rubout\))108 652.8 Q F0(Kill backw) +144 664.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 +(unix\255line\255discard \(C\255u\))108 676.8 Q F0(Kill backw)144 688.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 700.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 +712.8 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(50)185.955 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(kill\255w)108 84 Q(ord \(M\255d\))-.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 304.8 S +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 108 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.) --.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 +(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 120 Q +(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 132 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 144 Q +(ord)-.1 E F0 .729(Kill from point to the end of the current w)144 156 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 168 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 180 Q(ord)-.1 E F0 3.025(Kill the w)144 192 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 +5.525 E(ward\255w)144 204 Q(ord)-.1 E F0(.)A F1(unix\255w)108 216 Q +(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 228 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 +240 Q F1(unix\255\214lename\255rubout)108 252 Q F0 .166(Kill the w)144 +264 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 .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 276 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 288 Q F0 +(Delete all spaces and tabs around point.)144 300 Q F1(kill\255r)108 312 +Q(egion)-.18 E F0(Kill the te)144 324 Q(xt in the current re)-.15 E +(gion.)-.15 E F1(copy\255r)108 336 Q(egion\255as\255kill)-.18 E F0(Cop) +144 348 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 360 Q(ord)-.1 E F0(Cop)144 372 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 384 Q +(ord)-.1 E F0(.)A F1(copy\255f)108 396 Q(orward\255w)-.25 E(ord)-.1 E F0 +(Cop)144 408 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 420 Q(ord)-.1 E F0(.)A F1 +(yank \(C\255y\))108 432 Q F0 -1(Ya)144 444 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 456 Q F0 +(Rotate the kill ring, and yank the ne)144 468 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 484.8 Q +(guments)-.1 E(digit\255ar)108 496.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 508.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 +(ga)-.15 G(-).05 E(ti)144 520.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G +(ument.).18 E F1(uni)108 532.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 +E F0 .778(This is another w)144 544.8 R .779(ay to specify an ar)-.1 F +3.279(gument. If)-.18 F .779(this command is follo)3.279 F .779 (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) +556.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 +568.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 +-.2 F(-)-.2 E .899(wise ignored.)144 580.8 R .898 (As a special case, if this command is immediately follo)5.899 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 592.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 .823(The ar)144 604.8 R .823 (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 +(gument)-.18 E(count four)144 616.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 633.6 Q(complete \(T)108 645.6 Q(AB\))-.9 E F0 1.137 +(Attempt to perform completion on the te)144 657.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) +(attempts completion treating the)3.637 F(te)144 669.6 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 +144 681.6 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 (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 -(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 -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 +(duces a match, \214lename completion is attempted.)144 693.6 Q F1 +(possible\255completions \(M\255?\))108 705.6 Q F0 +(List the possible completions of the te)144 717.6 Q(xt before point.) +-.15 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(51)185.955 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(insert\255completions \(M\255*\))108 84 Q F0 .783 +(Insert all completions of the te)144 96 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 108 Q F0(.)A F1 +(menu\255complete)108 120 Q F0 .928(Similar to)144 132 R F1(complete) +3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 F .929 +(ord to be completed with a single match from the list of)-.1 F 1.194 +(possible completions.)144 144 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 +(completions, inserting each match in turn.)144 156 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 +(\(subject to the setting of)144 168 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 180 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 +E(through the list.)144 192 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 204 Q F0 .82(Identical to)144 +216 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 228 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 240 Q F0 .234 +(Deletes the character under the cursor if not at the be)144 252 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 264 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 +276 Q(ault.)-.1 E F1(complete\255\214lename \(M\255/\))108 288 Q F0 +(Attempt \214lename completion on the te)144 300 Q(xt before point.)-.15 +E F1(possible\255\214lename\255completions \(C\255x /\))108 312 Q F0 +(List the possible completions of the te)144 324 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 336 Q(name \(M\255~\))-.15 E F0 +(Attempt completion on the te)144 348 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 360 Q(name\255completions \(C\255x ~\))-.15 E F0 +(List the possible completions of the te)144 372 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 +384 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144 396 Q +(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E F1 +(possible\255v)108 408 Q(ariable\255completions \(C\255x $\))-.1 E F0 +(List the possible completions of the te)144 420 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 +(complete\255hostname \(M\255@\))108 432 Q F0 +(Attempt completion on the te)144 444 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 456 Q F0 +(List the possible completions of the te)144 468 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 +(complete\255command \(M\255!\))108 480 Q F0 .58 +(Attempt completion on the te)144 492 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 +(Command comple-)5.581 F .715(tion attempts to match the te)144 504 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 516 Q -.15(xe)-.15 G +(cutable \214lenames, in that order).15 E(.)-.55 E F1 +(possible\255command\255completions \(C\255x !\))108 528 Q F0 +(List the possible completions of the te)144 540 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 +(dynamic\255complete\255history \(M\255T)108 552 Q(AB\))-.9 E F0 .424 +(Attempt completion on the te)144 564 R .425 (xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .425 (ainst lines from the history list)-.05 F -(for possible completion matches.)144 132 Q F1(dab)108 144 Q(br)-.1 E +(for possible completion matches.)144 576 Q F1(dab)108 588 Q(br)-.1 E -.15(ev)-.18 G(\255expand).15 E F0 .611 -(Attempt menu completion on the te)144 156 R .611 +(Attempt menu completion on the te)144 600 R .611 (xt before point, comparing the te)-.15 F .61(xt ag)-.15 F .61 (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 612 Q F1 +(complete\255into\255braces \(M\255{\))108 624 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 636 R(the list is a)144 648 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 664.8 S(yboard Macr).25 E(os)-.18 +E(start\255kbd\255macr)108 676.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)) +.833 E F0(Be)144 688.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 700.8 Q 2.5(o\()-.18 G +(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 712.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 and store the de\214nition.).15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(52)185.955 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/F1 10/Times-Bold@0 +SF(call\255last\255kbd\255macr)108 84 Q 2.5(o\()-.18 G(C\255x e\))-2.5 E +F0(Re-e)144 96 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 appea\ +r as if).15 F(typed at the k)144 108 Q -.15(ey)-.1 G(board.).15 E F1 +(print\255last\255kbd\255macr)108 120 Q 2.5(o\()-.18 G(\))-2.5 E F0 +(Print the last k)144 132 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.18 E +(Miscellaneous)87 148.8 Q -.18(re)108 160.8 S.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 +(Read in the contents of the)144 172.8 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 +184.8 Q F1(abort \(C\255g\))108 196.8 Q F0 3.249 +(Abort the current editing command and ring the terminal')144 208.8 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 +(bell\255style)144 220.8 Q F0(\).)A F1(do\255lo)108 232.8 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) +C(..\))-2.5 E F0 1.738(If the meta\214ed character)144 244.8 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 +F(meta\214ed lo)144 256.8 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 +2.5 E(wercase.)-.25 E F1(pr)108 268.8 Q(e\214x\255meta \(ESC\))-.18 E F0 +(Metafy the ne)144 280.8 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 +(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 292.8 Q F0 +(Incremental undo, separately remembered for each line.)144 304.8 Q F1 +-2.29 -.18(re v)108 316.8 T(ert\255line \(M\255r\)).08 E F0 .231 +(Undo all changes made to this line.)144 328.8 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 +(turn the line to its initial state.)144 340.8 Q F1 +(tilde\255expand \(M\255&\))108 352.8 Q F0(Perform tilde e)144 364.8 Q (xpansion on the current w)-.15 E(ord.)-.1 E F1 -(set\255mark \(C\255@, M\255\))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\))108 376.8 Q F0 +(Set the mark to the point.)144 388.8 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 400.8 Q F0(Sw) +144 412.8 Q .282(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 +144 424.8 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 436.8 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 +448.8 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 +144 460.8 Q(vious occurrences.)-.25 E F1(character\255sear)108 472.8 Q +(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 484.8 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 +(count searches for subsequent occurrences.)144 496.8 Q F1 +(skip\255csi\255sequence)108 508.8 Q F0 1.827 +(Read enough characters to consume a multi-k)144 520.8 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 +-.1 G 4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 532.8 R .791(Such sequences be)5.79 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 +.332(If this sequence is bound to "\\[", k)144 544.8 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 insert\ +ing stray characters into the editing b)144 556.8 R(uf)-.2 E(fer)-.25 E +5.026(.T)-.55 G(his)-5.026 E(is unbound by def)144 568.8 Q(ault, b)-.1 E +(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 +580.8 Q F0 -.4(Wi)144 592.8 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 604.8 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 +(the characters at the be)144 616.8 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 +-.25 F .831(inserted, otherwise the characters in)144 628.8 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 +(In either case, the line is accepted as if a ne)144 640.8 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 +1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 652.8 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 -(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 +(gu-)-.18 E(ment causes the comment character to be remo)144 664.8 Q +-.15(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G +(cuted by the shell.).15 E F1(spell\255corr)108 676.8 Q(ect\255w)-.18 E +(ord \(C\255x s\))-.1 E F0 .421 +(Perform spelling correction on the current w)144 688.8 R .42 +(ord, treating it as a directory or \214lename, in the same)-.1 F -.1 +(wa)144 700.8 S 4.717(ya).1 G 4.717(st)-4.717 G(he)-4.717 E F1(cdspell) +4.717 E F0 2.217(shell option.)4.717 F -.8(Wo)7.217 G 2.217 +(rd boundaries are the same as those used by).8 F F1(shell\255f)4.718 E +(or)-.25 E(-)-.37 E(ward\255w)144 712.8 Q(ord)-.1 E F0(.)A(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(53)185.955 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(glob\255complete\255w)108 84 Q(ord \(M\255g\))-.1 E F0 .792(The w)144 +96 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 +108 R(pattern is used to generate a list of matching \214lenames for po\ +ssible completions.)2.5 E F1(glob\255expand\255w)108 120 Q +(ord \(C\255x *\))-.1 E F0 .175(The w)144 132 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 144 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 +144 156 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\)) +108 168 Q F0 .923(The list of e)144 180 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(the line is redra)144 192 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 +(ex)144 204 S(pansion.).15 E F1(dump\255functions)108 216 Q F0 .626 +(Print all of the functions and their k)144 228 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 +(ment is supplied, the output is formatted in such a w)144 240 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 +2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 252 Q(ariables)-.1 E F0 +.763(Print all of the settable readline v)144 264 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 +-.25 F .762(If a nu-)5.762 F .108(meric ar)144 276 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 +(ay that it can be made part of an)-.1 F F2(in-)2.609 E(putr)144 288 Q +(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 300 Q(os)-.18 E F0 .593 +(Print all of the readline k)144 312 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 +3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 324 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 +(\214le.)144 336 Q F1(display\255shell\255v)108 348 Q +(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 360 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 376.8 Q(ogrammable Completion)-.18 E F0 .147(When w)108 +388.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 +F2(compspec)108 400.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) 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 +-.25 F(programmable completion f)108 412.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 +(First, the command name is identi\214ed.)108 429.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 +441.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 F12.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 +used to generate the list of possible completions)108 453.6 R .822 +(for the w)108 465.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\ +ed for)-.1 F 2.867(\214rst. If)108 477.6 R .366(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 +rtion)2.867 F(follo)108 489.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 F12.799 E F0 .057 -(option to)108 633.6 R F1(complete)2.557 E F0 .056(is used as the def) +(option to)108 501.6 R F1(complete)2.557 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 \ +.056(xpansion on)-.15 F .332(the command w)108 513.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 +525.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\ +d to generate the list of matching w)108 542.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 554.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 +(First, the actions speci\214ed by the compspec are used.)108 571.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 +.464(ord being)-.1 F .596(completed are returned.)108 583.2 R .596 (When the)5.596 F F13.096 E F0(or)3.095 E F13.095 E F0 .595 (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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 SF4.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 +(shell v)108 595.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0 +(is used to \214lter the matches.)2.25 E(An)108 612 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 F14.084 E F0 1.584 +(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 624 S +.555(rds generated by the pattern need not match the w).1 F .554 +(ord being completed.)-.1 F(The)5.554 E F3(GLOBIGNORE)3.054 E F0 .554 +(shell v)2.804 F(ari-)-.25 E +(able is not used to \214lter the matches, b)108 636 Q(ut the)-.2 E F3 +(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 652.8 Q .32(xt, the string speci\214ed as the ar)-.15 F .32(gument to the)-.18 F F12.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 +108 664.8 R F3(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 +(using brace e)108 676.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 +688.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 -172.8 Q .509 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.709 G .209 +700.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 F12.733 E -F0(and)2.733 E F12.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 com-)-.1 F(pleted, and the matching w)108 712.8 Q +(ords become the possible completions.)-.1 E 1.238 +(After these matches ha)108 729.6 R 1.538 -.15(ve b)-.2 H 1.238 +(een generated, an).15 F 3.738(ys)-.15 G 1.237 +(hell function or command speci\214ed with the)-3.738 F F13.737 E +F0(and)3.737 E F13.737 E F0(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(54)185.955 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 3.375 +(options is in)108 84 R -.2(vo)-.4 G -.1(ke).2 G 5.875(d. When).1 F +3.375(the command or function is in)5.875 F -.2(vo)-.4 G -.1(ke).2 G +3.375(d, the).1 F/F1 9/Times-Bold@0 SF(COMP_LINE)5.876 E/F2 9 +/Times-Roman@0 SF(,)A F1(COMP_POINT)5.626 E F2(,)A F1(COMP_KEY)108 96 Q +F2(,)A F0(and)2.408 E F1(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/F3 10/Times-Bold@0 SF .157(Shell V)2.657 F +(ariables)-.92 E F0 5.157(.I)C(f)-5.157 E 3.485(as)108 108 S .986 +(hell function is being in)-3.485 F -.2(vo)-.4 G -.1(ke).2 G .986 +(d, the).1 F F1(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F1(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 120 R -.2(vo)-.4 G +-.1(ke).2 G .347(d, the \214rst ar).1 F .346(gument \()-.18 F F3($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 132 +R .263(gument \()-.18 F F3($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 F3($3)A F0 2.764(\)i)C(s)-2.764 E .629(the w)108 144 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 +(No \214ltering of the generated)5.629 F .714(completions ag)108 156 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 F12.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 F12.581 E F0 .081 +108 168 Q(An)108 184.8 Q 2.938(yf)-.15 G .437(unction speci\214ed with) +-2.938 F F32.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 196.8 Q F3(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 F1(COMPREPL)108 +208.8 Q(Y)-.828 E F0(array v)2.25 E(ariable, one per array element.)-.25 +E(Ne)108 225.6 Q .081(xt, an)-.15 F 2.581(yc)-.15 G .081 +(ommand speci\214ed with the)-2.581 F F32.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 +-.25 G .08(lent to command sub-).25 F 2.858(stitution. It)108 237.6 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 F12.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 +249.6 Q(wline, if necessary)-.25 E(.)-.65 E .377 +(After all of the possible completions are generated, an)108 266.4 R +2.877<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F32.876 +E F0 .376(option is applied to the)2.876 F 3.181(list. The)108 278.4 R +.681(\214lter is a pattern as used for pathname e)3.181 F .681 +(xpansion; a)-.15 F F3(&)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 290.4 R .523(ord being completed.)-.1 F 3.023(Al)5.523 G +(iteral)-3.023 E F3(&)3.023 E F0 .522 (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 +-.15 G 3.022(db).15 G(efore)-3.022 E .849(attempting a match.)108 302.4 +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 +3.35(df).15 G .85(rom the list.)-3.35 F 3.35(Al)5.85 G(eading)-3.35 E F3 +(!)3.35 E F0(ne)108 314.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.264 E F3(nocase-)3.264 E(match)108 326.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 -F .587(\214x speci\214ed with the)-.25 F F13.087 E F0(and)3.087 E -F13.087 E F0 .587(options are added to each member of the com-) +343.2 Q 3.086(,a)-.65 G .886 -.15(ny p)-3.086 H .586(re\214x and suf).15 +F .587(\214x speci\214ed with the)-.25 F F33.087 E F0(and)3.087 E +F33.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) --.25 F 2.747(ym)-.15 G .247(atches, and the)-2.747 F F1 .247(\255o dir) +tion code as the list of possible completions.)108 355.2 Q .247 +(If the pre)108 372 R .247(viously-applied actions do not generate an) +-.25 F 2.747(ym)-.15 G .247(atches, and the)-2.747 F F3 .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 +F3(complete)108 384 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.962 F .462(as supplied to)-.1 F F1(complete)2.962 E F0 .462 +(If the)108 400.8 R F3 .462(\255o plusdirs)2.961 F F0 .462(option w) +2.962 F .462(as supplied to)-.1 F F3(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 +F(pletion is attempted and an)108 412.8 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 +(By def)108 429.6 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 +.631(of possible completions.)108 441.6 R .631(The def)5.631 F(ault)-.1 +E F3(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 +(ault of \214le-)-.1 F .559(name completion is disabled.)108 453.6 R +.559(If the)5.559 F F3 .559(\255o bashdefault)3.059 F F0 .559(option w) +3.059 F .559(as supplied to)-.1 F F3(complete)3.058 E F0 .558 +(when the compspec)3.058 F -.1(wa)108 465.6 S 3.171(sd).1 G .671 +(e\214ned, the)-3.171 F F3(bash)3.171 E F0(def)3.171 E .671 (ault completions are attempted if the compspec generates no matches.) --.1 F .672(If the)5.672 F F13.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 .672(If the)5.672 F F33.172 E(default)108 477.6 Q F0 1.207 +(option w)3.707 F 1.207(as supplied to)-.1 F F3(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 (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.) +489.6 Q(ault)-.1 E F3(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 +desired, the programmable completion func-)108 506.4 R .633(tions force\ + readline to append a slash to completed names which are symbolic links\ + to directories, subject)108 518.4 R 2.761(to the v)108 530.4 R 2.761 +(alue of the)-.25 F F3(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 +(rdless of the setting of the).05 F F3(mark-sym-)5.262 E(link)108 542.4 +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 -F F1 1.172(complete \255D)3.672 F F0 6.172(.I)C(t')-6.172 E 3.672(sp) +559.2 R .19(This is most useful when used in combina-)5.191 F 1.172 +(tion with a def)108 571.2 R 1.172(ault completion speci\214ed with)-.1 +F F3 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 583.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 +ec associated with the command on which completion is)108 595.2 R .666 +(being attempted \(supplied as the \214rst ar)108 607.2 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 +(cuted\), programmable completion).15 F .083(restarts from the be)108 +619.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 .084(This allo)5.084 F +.084(ws a set of)-.25 F(completions to be b)108 631.2 Q(uilt dynamicall\ +y as completion is attempted, rather than being loaded all at once.)-.2 +E -.15(Fo)108 648 S 2.637(ri).15 G .137 (nstance, assuming that there is a library of compspecs, each k)-2.637 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 660 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/F4 10/Courier@0 SF(_completion_loader\(\))108 676.8 Q({)108 688.8 Q 6 +(.")144 700.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 +712.8 Q(complete -D -F _completion_loader -o bashdefault -o default)108 +724.8 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(55)185.955 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.95 +/Times-Bold@0 SF(HIST)72 100.8 Q(OR)-.197 E(Y)-.383 E F0 .371(When the) +108 112.8 R/F2 10/Times-Bold@0 SF .371(\255o history)2.871 F F0 .371 +(option to the)2.871 F F2(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/F3 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) +(the list of commands pre)108 124.8 R .305(viously typed.)-.25 F .305 +(The v)5.305 F .304(alue of the)-.25 F/F4 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 +F .429(mands to sa)108 136.8 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 F4 (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 (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 +148.8 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F4(EXP)2.787 E +(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 160.8 S 4.065(ta).2 G 1.565(fter history e)-4.065 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(.) +(alues of the shell v)-.25 F(ariables)-.25 E F4(HISTIGNORE)4.065 E F0 +(and)3.816 E F4(HISTCONTR)108 172.8 Q(OL)-.27 E/F5 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 +108 189.6 R(ariable)-.25 E F4(HISTFILE)2.582 E F0(\(def)2.332 E(ault)-.1 +E F3(~/.bash_history)2.582 E F0(\).)A .315(The \214le named by the v)108 +201.6 R .315(alue of)-.25 F F4(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 +(lines speci\214ed by the v)108 213.6 R .659(alue of)-.25 F F4 +(HISTFILESIZE)3.158 E F5(.)A F0(If)5.158 E F2(HISTFILESIZE)3.158 E F0 +.658(is unset, or set to null, a non-numeric)3.158 F -.25(va)108 225.6 S .142(lue, or a numeric v).25 F .142 (alue less than zero, the history \214le is not truncated.)-.25 F .142 -(When the history \214le is read, lines)5.142 F(be)108 367.2 Q 1.605 +(When the history \214le is read, lines)5.142 F(be)108 237.6 Q 1.605 (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 +(stamps for the follo)108 249.6 R .15(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 +.151(alue of)-.25 F(the)108 261.6 Q F4(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 +(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F4 ($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 +(copied from the history list to)108 273.6 R F4($HISTFILE)2.658 E F5(.)A +F0 .158(If the)4.658 F F2(histappend)2.658 E F0 .159 +(shell option is enabled \(see the description of)2.659 F F2(shopt)108 +285.6 Q F0(under)2.582 E F4 .082(SHELL B)2.582 F(UIL)-.09 E .082 (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\ +.196(history \214le is o)108 297.6 R -.15(ve)-.15 G 2.696(rwritten. If) +.15 F F4(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 +(If the)108 309.6 R F4(HISTTIMEFORMA)3.084 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 +F .583(ed with the his-)-.1 F 1.147(tory comment character)108 321.6 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 +(character to distinguish timestamps from other history lines.)108 333.6 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 +(truncated to contain no more than)108 345.6 R F4(HISTFILESIZE)3.257 E +F0 3.257(lines. If)3.007 F F4(HISTFILESIZE)3.257 E F0 .757 +(is unset, or set to null, a non-)3.007 F(numeric v)108 357.6 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 +(The b)108 374.4 R .299(uiltin command)-.2 F F2(fc)2.799 E F0(\(see) +2.799 E F4 .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 386.4 R +(The)5.471 E F2(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 +(manipulate the history \214le.)108 398.4 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 +-.2 G .001(ilable in each edit-).25 F(ing mode that pro)108 410.4 Q +(vide access to the history list.)-.15 E 1.485(The shell allo)108 427.2 R 1.485(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 +-3.986 G 1.486(he history list.)-3.986 F(The)6.486 E F4(HISTCONTR)3.986 +E(OL)-.27 E F0(and)3.736 E F4(HISTIGNORE)108 439.2 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 +-.2 H .457(nly a subset of the commands entered.).15 F(The)5.457 E F2 +(cmdhist)108 451.2 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 463.2 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 +1.077(yntactic correctness.)-3.577 F(The)6.077 E F2(lithist)3.576 E F0 +.373(shell option causes the shell to sa)108 475.2 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 +(description of the)108 487.2 R F2(shopt)2.819 E F0 -.2(bu)2.819 G .318 +(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F4 .318(SHELL B)2.818 F (UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .318 (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 +499.2 Q F1(HIST)72 516 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 528 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 +(xpansion in)-.15 F F2(csh)3.111 E F0 5.611(.T)C .611(his section)-5.611 +F .871(describes what syntax features are a)108 540 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 -(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 +.949(can be disabled using the)108 552 R F2(+H)3.449 E F0 .949 +(option to the)3.449 F F2(set)3.449 E F0 -.2(bu)3.449 G .949 +(iltin command \(see).2 F F4 .949(SHELL B)3.449 F(UIL)-.09 E .95 +(TIN COMMANDS)-.828 F F0(be-)3.2 E(lo)108 564 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 580.8 R 1.306 +(xpansions introduce w)-.15 F 1.306(ords from the history list into the\ + input stream, making it easy to repeat)-.1 F .209 +(commands, insert the ar)108 592.8 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 +F(vious)-.25 E(commands quickly)108 604.8 Q(.)-.65 E 1.164(History e)108 +621.6 R 1.163(xpansion is performed immediately after a complete line i\ +s read, before the shell breaks it into)-.15 F -.1(wo)108 633.6 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 +(vious lines into account.)-.25 F(It)5.252 E(tak)108 645.6 Q .146 (es place in tw)-.1 F 2.646(op)-.1 G 2.646(arts. The)-2.646 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) +r inclusion into the current one.)108 657.6 R .767 +(The line selected from the)5.767 F .254(history is the)108 669.6 R F3 +-.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 F3(wor) +2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F3(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 +(able to manipulate the selected w)108 681.6 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 +-.1 F .539(ashion as when reading)-.1 F .573(input, so that se)108 693.6 +R -.15(ve)-.25 G(ral).15 E F3(metac)3.073 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.072(ord. His-)-.1 F .355(tory e)108 705.6 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 +(xpansion character)-.15 F 2.855(,w)-.4 G .356(hich is)-2.855 F F2(!) +3.689 E F0 .356(by def)3.689 F(ault.)-.1 E .791(Only backslash \()108 +717.6 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)-.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 -(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 +tely precedes the closing double quote in a double-quoted)108 729.6 R +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(56)185.955 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(string.)108 84 Q +(Se)108 100.8 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 112.8 T 3.162(ni).25 G 3.162(fi)-3.162 G 3.162(ti)-3.162 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) +-.25 F/F1 10/Times-Bold@0 SF(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G +(he)-3.162 E F1(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F +F1(\()3.163 E F0(will also inhibit e)108 124.8 Q(xpansion.)-.15 E(Se)108 +141.6 Q -.15(ve)-.25 G .11(ral shell options settable with the).15 F F1 +(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 153.6 R F1(histv)2.731 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 .232(is be-)2.732 F .449(ing used,\ + history substitutions are not immediately passed to the shell parser) +108 165.6 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 177.6 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 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 +(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 189.6 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 F22.803 E F0 .303 -(option to the)2.803 F F2(history)2.804 E F0 -.2(bu)2.804 G .304 +(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 201.6 S -.25(ff).2 G +.303(er for correction.).25 F(The)5.303 E F12.803 E F0 .303 +(option to the)2.803 F F1(history)2.804 E F0 -.2(bu)2.804 G .304 (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 F23.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 213.6 R(The)5.52 E F13.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 225.6 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.108(The shell allo)108 242.4 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 +(xpansion mechanism \(see the de-)-.15 F .163(scription of)108 254.4 R +F1(histchars)2.663 E F0(abo)2.663 E .463 -.15(ve u)-.15 H(nder).15 E F1 .163(Shell V)2.663 F(ariables)-.92 E F0 2.663(\). The)B .162 (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 266.4 Q F1(Ev) +87 283.2 Q(ent Designators)-.1 E F0 .204(An e)108 295.2 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 F23.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 .205(Unless the reference is abso-)5.204 F(lute, e)108 +307.2 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 324 Q F0 +1.608(Start a history substitution, e)144 324 R 1.608(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.607(line, carriage return, = or \().25 F(\(when the)144 336 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 348 Q/F2 10/Times-Italic@0 SF +(n)A F0(Refer to command line)144 348 Q F2(n)2.86 E F0(.).24 E F1<21ad> +108 360 Q F2(n)A F0(Refer to the current command minus)144 360 Q F2(n) +2.86 E F0(.).24 E F1(!!)108 372 Q F0(Refer to the pre)144 372 Q +(vious command.)-.25 E(This is a synon)5 E(ym for `!\2551'.)-.15 E F1(!) +108 384 Q F2(string)A F0 .865(Refer to the most recent command precedin\ +g the current position in the history list starting with)144 384 R F2 +(string)144.34 396 Q F0(.).22 E F1(!?)108 408 Q F2(string)A F1([?])A F0 +1.503(Refer to the most recent command preceding the current position i\ +n the history list containing)144 420 R F2(string)144.34 432 Q F0 5.496 +(.T).22 G .496(he trailing)-5.496 F F1(?)2.996 E F0 .496 +(may be omitted if)2.996 F F2(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 F2(string) +2.997 E F0(is)2.997 E .391(missing, the string from the most recent sea\ +rch is used; it is an error if there is no pre)144 444 R .39 +(vious search)-.25 F(string.)144 456 Q/F3 12/Times-Bold@0 SF(^)108 473 Q +F2(string1)-5 I F3(^)5 I F2(string2)-5 I F3(^)5 I F0 .752 +(Quick substitution.)144 480 R .752(Repeat the pre)5.752 F .753 +(vious command, replacing)-.25 F F2(string1)3.593 E F0(with)3.253 E F2 +(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 492 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 504 +Q F0(The entire command line typed so f)144 504 Q(ar)-.1 E(.)-.55 E F1 +-.75(Wo)87 520.8 S(rd Designators).75 E F0 -.8(Wo)108 532.8 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 F1(:)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 544.8 R .529(ord designator)-.1 F 5.529(.I)-.55 G +3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 +(ord designator be)-.1 F .529(gins with a)-.15 F F1(^)3.029 E F0(,)A F1 +($)3.029 E F0(,)A F1(*)3.029 E F0(,)A F13.029 E F0 3.029(,o)C(r) +-3.029 E F1(%)3.029 E F0 5.53(.W)C(ords)-6.33 E .516 +(are numbered from the be)108 556.8 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 +.8 F(serted into the current line separated by single spaces.)108 568.8 +Q F1 2.5(0\()108 585.6 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 597.6 +Q 2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E +F2(n)108.36 609.6 Q F0(The)144 609.6 Q F2(n)2.5 E F0(th w)A(ord.)-.1 E +F1(^)108 621.6 Q F0(The \214rst ar)144 621.6 Q 2.5(gument. That)-.18 F +(is, w)2.5 E(ord 1.)-.1 E F1($)108 633.6 Q F0 .063(The last w)144 633.6 +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 645.6 Q(ord in the line.)-.1 E +F1(%)108 657.6 Q F0 1.42(The \214rst w)144 657.6 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 669.6 Q(ord.)-.1 E F2(x)108.77 681.6 +Q F1A F2(y)A F0 2.5(Ar)144 681.6 S(ange of w)-2.5 E(ords; `\255)-.1 +E F2(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)-.25 E F2(y)A F0('.)A F1 +(*)108 693.6 Q F0 .315(All of the w)144 693.6 R .315(ords b)-.1 F .315 +(ut the zeroth.)-.2 F .315(This is a synon)5.315 F .315(ym for `)-.15 F +F2(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*) +2.816 E F0 .316(if there is)2.816 F(just one w)144 705.6 Q(ord in the e) +-.1 E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 +E F1(x*)108 717.6 Q F0(Abbre)144 717.6 Q(viates)-.25 E F2(x\255$)2.5 E +F0(.)A(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(57)185.955 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 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 -A F2(y)A F0 2.5(Ar)144 180 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 -(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) --.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 -(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 -(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 +SF<78ad>108 84 Q F0(Abbre)144 84 Q(viates)-.25 E/F2 10/Times-Italic@0 SF +(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 100.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 117.6 Q F0 .184 +(After the optional w)108 129.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 141.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 F1(h)108 158.4 Q F0(Remo)144 158.4 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 170.4 Q F0(Remo)144 170.4 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 +108 182.4 Q F0(Remo)144 182.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 +(ving the basename.)-.2 E F1(e)108 194.4 Q F0(Remo)144 194.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 +206.4 Q F0(Print the ne)144 206.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 218.4 Q F0 +(Quote the substituted w)144 218.4 Q +(ords, escaping further substitutions.)-.1 E F1(x)108 230.4 Q F0 .385 +(Quote the substituted w)144 230.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 +242.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 254.4 Q F2(old)A F1(/)A +F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 266.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 (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 +(delimiter in place of /.)144 278.4 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 +(The delimiter may be quoted in)144 290.4 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 .619(placed by)144 302.4 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 +3.889 F F2(old)3.349 E F0(substi-)3.89 E .487(tuted, or)144 314.4 R 2.987(,i)-.4 G 2.987(fn)-2.987 G 2.987(op)-2.987 G(re)-2.987 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 +(search. If)5.486 F F2(ne)144.36 326.4 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 +108 338.4 Q F0(Repeat the pre)144 338.4 Q(vious substitution.)-.25 E F1 +(g)108 350.4 Q F0 .397(Cause changes to be applied o)144 350.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 +F0 2.898('\()C(e.g.,)-2.898 E(`)144 362.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 +(limiter is optional if it is the last character of the e)144 374.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 +386.4 Q F0(Apply the follo)144 386.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\ +SF(SHELL B)72 403.2 Q(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .062 +(Unless otherwise noted, each b)108 415.2 R .062(uiltin command documen\ ted in this section as accepting options preceded by)-.2 F F1108 -571.2 Q F0(accepts)3.077 E F13.077 E F0 .577 +427.2 Q F0(accepts)3.077 E F13.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 .461(and do not treat)108 439.2 R F1 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 +2.962 G .462(iltins accept and).2 F .261(process ar)108 451.2 R .261 (guments be)-.18 F .261(ginning with)-.15 F F12.761 E F0 .261 (without requiring)2.761 F F12.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 (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 +108 463.2 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1 3.654 E F0 1.154(as in)3.654 F -.25(va)-.4 G 1.154 (lid options and require).25 F F13.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 +475.2 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 493.2 Q F0 +([)2.5 E F2(ar)A(guments)-.37 E F0(])A .452(No ef)144 505.2 R .452 (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 +2.951(ys)-.15 G(peci\214ed)-2.951 E 2.5(redirections. The)144 517.2 R +(return status is zero.)2.5 E F1(.)110.5 534 Q F2(\214lename)6.666 E F0 +([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 546 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 +(Read and e)144 558 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) +(status of the last command e)144 570 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 F12.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 F13.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 -F1A 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 +5.741 E F0 1.33(does not contain a slash, \214le-)4.011 F .022(names in) +144 582 R/F4 9/Times-Bold@0 SF -.666(PA)2.522 G(TH)-.189 E F0 .022 +(are used to \214nd the directory containing)2.272 F F2(\214lename)4.432 +E F0 2.522(,b).18 G(ut)-2.722 E F2(\214lename)2.522 E F0 .023 +(does not need to be)2.523 F -.15(exe)144 594 S 3.861(cutable. The).15 F +1.361(\214le searched for in)3.861 F F4 -.666(PA)3.861 G(TH)-.189 E F0 +1.361(need not be e)3.611 F -.15(xe)-.15 G 3.86(cutable. When).15 F F1 +(bash)3.86 E F0 1.36(is not in)3.86 F F2(posix)3.86 E(mode)144 606 Q F0 +2.648(,t)C .148 +(he current directory is searched if no \214le is found in)-2.648 F F4 +-.666(PA)2.648 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .149(If the) +4.648 F F1(sour)2.649 E(cepath)-.18 E F0 .149(option to the)2.649 F F1 +(shopt)144 618 Q F0 -.2(bu)3.66 G 1.16(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.159(If an)6.159 F(y)-.15 E F2(ar)3.659 E +(guments)-.37 E F0 1.159(are supplied,)3.659 F(the)144 630 Q 3.691(yb) +-.15 G 1.191(ecome the positional parameters when)-3.691 F F2 +(\214lename)3.692 E F0 1.192(is e)3.692 F -.15(xe)-.15 G 3.692 +(cuted. Otherwise).15 F 1.192(the positional pa-)3.692 F .82 +(rameters are unchanged.)144 642 R .82(If the)5.82 F F13.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 654 Q(y) +-.15 E F1(DEB)3.322 E(UG)-.1 E F0 .822(trap string is sa)3.322 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 .823(unsets the) +3.323 F F1(DEB)3.323 E(UG)-.1 E F0(trap)3.323 E .227(while it e)144 666 +R -.15(xe)-.15 G 2.727(cutes. If).15 F F12.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.726(wv)-.25 G .226(alue is) +-2.976 F .89(retained when)144 678 R F1(.)3.39 E F0 3.39(completes. The) +3.39 F .891(return status is the status of the last command e)3.39 F +.891(xited within the)-.15 F(script \(0 if no commands are e)144 690 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 706.8 Q F0([)2.5 +E F1A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C +(..])-2.5 E F1(Alias)144 718.8 Q F0 2.725(with no ar)5.225 F 2.724 (guments or with the)-.18 F F15.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 +F2(name)144 730.8 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 -(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 -(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 -(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 +3.08 E F0(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(58)185.955 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(whose)144 84 Q/F1 +10/Times-Italic@0 SF(value)2.509 E F0 .009(is gi)2.509 F -.15(ve)-.25 G +2.509(n. A).15 F .009(trailing space in)2.509 F F1(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 96 R +3.079(xpanded. F)-.15 F .579(or each)-.15 F F1(name)3.079 E F0 .579 +(in the ar)3.079 F .579(gument list for which no)-.18 F F1(value)3.079 E +F0 .579(is sup-)3.079 F 1.314(plied, the name and v)144 108 R 1.314 +(alue of the alias is printed.)-.25 F/F2 10/Times-Bold@0 SF(Alias)6.314 +E F0 1.314(returns true unless a)3.814 F F1(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 120 Q F2(bg)108 136.8 Q F0([)2.5 +E F1(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144 148.8 R +F1(jobspec)3.244 E F0 .745 +(in the background, as if it had been started with)3.244 F F2(&)3.245 E +F0 5.745(.I)C(f)-5.745 E F1(job-)4.985 E(spec)144 160.8 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 +-3.172 F F1(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2 +(bg)5.671 E F1(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418 +(when job control is disabled or)144 172.8 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 F1A 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 -A F2 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F1-2.5 E F2 -(function)2.5 E F0 2.5(][)C F1-2.5 E F2(function)2.5 E F0 2.5(][)C -F1-2.5 E F2 -.1(ke)2.5 G(yseq)-.2 E F0(])A F1(bind)108 374.4 Q F0 -([)2.5 E F1A F2 -.1(ke)2.5 G(ymap)-.2 E F0(])A F12.5 E F2 -(\214lename)2.5 E F1(bind)108 386.4 Q F0([)2.5 E F1A F2 -.1(ke)2.5 -G(ymap)-.2 E F0(])A F12.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 F1A 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 F1A 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 +(peci\214ed)-2.919 E F1(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G +(ot)-2.919 E(found or w)144 184.8 Q(as started without job control.)-.1 +E F2(bind)108 201.6 Q F0([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0 +2.5(][)C F2(\255lpsvPSVX)-2.5 E F0(])A F2(bind)108 213.6 Q F0([)2.5 E F2 +A F1 -.1(ke)2.5 G(ymap)-.2 E F0 2.5(][)C F2-2.5 E F1 +(function)2.5 E F0 2.5(][)C F2-2.5 E F1(function)2.5 E F0 2.5(][)C +F2-2.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 225.6 Q F0 +([)2.5 E F2A F1 -.1(ke)2.5 G(ymap)-.2 E F0(])A F22.5 E F1 +(\214lename)2.5 E F2(bind)108 237.6 Q F0([)2.5 E F2A F1 -.1(ke)2.5 +G(ymap)-.2 E F0(])A F22.5 E F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(shell\255command)A F2(bind)108 249.6 Q F0([)2.5 E F2A F1 -.1(ke) +2.5 G(ymap)-.2 E F0(])A F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 +(function\255name)A F2(bind)108 261.6 Q F0([)2.5 E F2A F1 -.1(ke) +2.5 G(ymap)-.2 E F0(])A F1 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F1 -.37(re)C +(adline\255command).37 E F2(bind)108 273.6 Q F1 -.37(re)2.5 G +(adline-command-line).37 E F0 .239(Display current)144 285.6 R F2 -.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 F1144 -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 -(emacs, emacs\255standar)5.693 F 3.192 +(equence to a).15 F F2 -.18(re)2.738 G(adline).18 E F0 .238(function or) +2.738 F .039(macro, or set a)144 297.6 R F2 -.18(re)2.539 G(adline).18 E +F0 -.25(va)2.539 G 2.539(riable. Each).25 F .039(non-option ar)2.539 F +.04(gument is a command as it w)-.18 F .04(ould appear in a)-.1 F F2 +-.18(re)144 309.6 S(adline).18 E F0 .182(initialization \214le such as) +2.682 F F1(.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 321.6 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 333.6 Q F2144 345.6 Q F1 +-.1(ke)2.5 G(ymap)-.2 E F0(Use)180 357.6 Q F1 -.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 F1 -.1(ke) +180 369.6 S(ymap)-.2 E F0 3.192(names are)5.882 F F1 3.192 +(emacs, emacs\255standar)5.692 F 3.193 (d, emacs\255meta, emacs\255ctlx, vi, vi\255mo)-.37 F(ve)-.1 E(,)-.1 E -(vi\255command)180 506.4 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 -(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 F1144 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 F1144 542.4 Q F0(Display)180 542.4 Q F1 -.18(re) +(vi\255command)180 381.6 Q F0 4.09(,a)C(nd)-4.09 E F1(vi\255insert)4.38 +E F0(.).68 E F1(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G 1.589 +(lent to).25 F F1(vi\255command)4.089 E F0(\()4.089 E F1(vi\255mo)A(ve) +-.1 E F0 1.589(is also a syn-)4.089 F(on)180 393.6 Q(ym\);)-.15 E F1 +(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 +(emacs\255standar)2.5 E(d)-.37 E F0(.)A F2144 405.6 Q F0 +(List the names of all)180 405.6 Q F2 -.18(re)2.5 G(adline).18 E F0 +(functions.)2.5 E F2144 417.6 Q F0(Display)180 417.6 Q F2 -.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 F1144 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 F1144 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 F2144 429.6 +Q F0(List current)180 429.6 Q F2 -.18(re)2.5 G(adline).18 E F0 +(function names and bindings.)2.5 E F2144 441.6 Q F0(Display)180 +441.6 Q F2 -.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 F1144 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 453.6 S 2.5(yt).1 G +(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F2144 465.6 Q +F0(Display)180 465.6 Q F2 -.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 F1144 602.4 Q F0(Display)180 602.4 Q F1 -.18 +-.15 G(utput.)-2.5 E F2144 477.6 Q F0(Display)180 477.6 Q F2 -.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 F1144 614.4 Q F0(List current)180 614.4 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 F1144 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 -F1144 650.4 Q F2(function)2.5 E F0(Query about which k)180 662.4 Q +(an be re-read.)-2.5 E F2144 489.6 Q F0(List current)180 489.6 Q +F2 -.18(re)2.5 G(adline).18 E F0 -.25(va)2.5 G(riable names and v).25 E +(alues.)-.25 E F2144 501.6 Q F1(\214lename)2.5 E F0(Read k)180 +513.6 Q .3 -.15(ey b)-.1 H(indings from).15 E F1(\214lename)2.5 E F0(.)A +F2144 525.6 Q F1(function)2.5 E F0(Query about which k)180 537.6 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 F1144 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 F1144 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 --.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 -SF144 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 +(he named).1 E F1(function)2.5 E F0(.)A F2144 549.6 Q F1(function) +2.5 E F0(Unbind all k)180 561.6 Q -.15(ey)-.1 G 2.5(sb).15 G +(ound to the named)-2.5 E F1(function)2.5 E F0(.)A F2144 573.6 Q +F1 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 585.6 Q .3 -.15(ve a)-.15 H .3 +-.15(ny c).15 H(urrent binding for).15 E F1 -.1(ke)2.5 G(yseq)-.2 E F0 +(.)A F2144 597.6 Q F1 -.1(ke)2.5 G(yseq)-.2 E F2(:)A F1 +(shell\255command)A F0(Cause)180 609.6 Q F1(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) -4.265 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 +-.25 G(r).15 E F1 -.1(ke)4.325 G(yseq)-.2 E F0 1.825(is entered.)4.325 F +(When)6.825 E F1(shell\255com-)4.325 E(mand)180 621.6 Q F0 1.764(is e) +4.264 F -.15(xe)-.15 G 1.765(cuted, the shell sets the).15 F/F3 9 /Times-Bold@0 SF(READLINE_LINE)4.265 E F0 -.25(va)4.015 G 1.765 -(riable to the contents of the).25 F F1 -.18(re)180 120 S(adline).18 E -F0 .375(line b)2.874 F(uf)-.2 E .375(fer and the)-.25 F F3 +(riable to the contents of the).25 F F2 -.18(re)180 633.6 S(adline).18 E +F0 .375(line b)2.875 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) --.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 F1144 180 Q F0 .829(List all k)180 180 R 1.129 --.15(ey s)-.1 H .829 +(va)2.625 G .375(riables to the).25 F 1.185 +(current location of the insertion point and the sa)180 645.6 R -.15(ve) +-.2 G 3.686(di).15 G 1.186(nsertion point \(the mark\), respec-)-3.686 F +(ti)180 657.6 Q -.15(ve)-.25 G(ly).15 E 5.378(.T)-.65 G .377 +(he shell assigns an)-5.378 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.877 E +(GUMENT)180 669.6 Q F0 -.25(va)3.604 G 3.854(riable. If).25 F 1.354 +(there w)3.854 F 1.354(as no ar)-.1 F 1.354(gument, that v)-.18 F 1.354 +(ariable is not set.)-.25 F 1.355(If the e)6.355 F -.15(xe)-.15 G(cuted) +.15 E .344(command changes the v)180 681.6 R .344(alue of an)-.25 F +2.843(yo)-.15 G(f)-2.843 E F3(READLINE_LINE)2.843 E/F4 9/Times-Roman@0 +SF(,)A F3(READLINE_POINT)2.593 E F4(,)A F0(or)2.593 E F3(READ-)2.843 E +(LINE_MARK)180 693.6 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 F2144 +705.6 Q F0 .829(List all k)180 705.6 R 1.129 -.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 -(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 -(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 SF2.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 +.15 F(-)-.2 E(mat that can be reused as input.)180 717.6 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(59)185.955 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(The return v)144 +84 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 10 +/Times-Bold@0 SF(br)108 100.8 Q(eak)-.18 E F0([)2.5 E/F2 10 +/Times-Italic@0 SF(n)A F0(])A .055(Exit from within a)144 112.8 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(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/F3 +10/Symbol SF2.554 E F0(1.)2.554 E(If)144 124.8 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 136.8 Q F2(n)2.5 E F0 +(is not greater than or equal to 1.)2.5 E F1 -.2(bu)108 153.6 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 165.6 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 (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 +177.6 R .616(uiltin, retaining the functionality of)-.2 F .57(the b)144 +189.6 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 326.4 Q(alse if)-.1 +5.57(.T)-.65 G .57(he return status)-5.57 F(is f)144 201.6 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 +(uiltin command.)-.2 E F1(caller)108 218.4 Q F0([)2.5 E F2 -.2(ex)C(pr) +.2 E F0(])A .253(Returns the conte)144 230.4 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 +.254(cuted with the).15 F F1(.)2.754 E F0(or)2.754 E F1(sour)144 242.4 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 (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 +.253(subroutine call.)144 254.4 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\ 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 +ent e)144 266.4 R -.15(xe)-.15 G 1.327(cution call stack.).15 F(This e) +144 278.4 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 +5.001 F 3.02(0. The)144 290.4 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 +(does not corre-)3.019 F(spond to a v)144 302.4 Q +(alid position in the call stack.)-.25 E F1(cd)108 319.2 Q F0([)2.5 E F1 A F0(|[)A F1A F0([)2.5 E F1A F0(]] [\255@]] [)A F2 -(dir)A F0(])A .321(Change the current directory to)144 456 R F2(dir) +(dir)A F0(])A .321(Change the current directory to)144 331.2 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 F13.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 -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 F12.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 -F12.868 E F0 .368(option is supplied with)2.868 F F12.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 F12.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 F12.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 F12.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 +(is not supplied, the v)2.821 F .322(alue of the)-.25 F/F4 9 +/Times-Bold@0 SF(HOME)2.822 E F0 .322(shell v)2.572 F .322(ariable is) +-.25 F .93(the def)144 343.2 R 3.43(ault. The)-.1 F -.25(va)3.43 G +(riable).25 E F4(CDP)3.43 E -.855(AT)-.666 G(H).855 E F0 .929 +(de\214nes the search path for the directory containing)3.18 F F2(dir) +3.779 E F0 3.429(:e).73 G(ach)-3.429 E .406(directory name in)144 355.2 +R F4(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 F4(CDP)2.907 E -.855(AT)-.666 G(H).855 E F0 +.407(are sepa-)2.657 F .799(rated by a colon \(:\).)144 367.2 R 3.299 +(An)5.799 G .799(ull directory name in)-3.299 F F4(CDP)3.299 E -.855(AT) +-.666 G(H).855 E F0 .799(is the same as the current directory)3.049 F +3.299(,i)-.65 G(.e.,)-3.299 E -.74(``)144 379.2 S F1(.).74 E F0 -.74('') +C 5.427(.I).74 G(f)-5.427 E F2(dir)3.277 E F0(be)3.657 E .427 +(gins with a slash \(/\), then)-.15 F F4(CDP)2.928 E -.855(AT)-.666 G(H) +.855 E F0 .428(is not used.)2.678 F(The)5.428 E F12.928 E F0 .428 +(option causes)2.928 F F1(cd)2.928 E F0 .428(to use the)2.928 F(ph)144 +391.2 Q .168 +(ysical directory structure by resolving symbolic links while tra)-.05 F +-.15(ve)-.2 G(rsing).15 E F2(dir)2.667 E F0 .167(and before processing) +2.667 F 1.225(instances of)144 403.2 R F2(..)3.725 E F0(in)3.725 E F2 +(dir)3.725 E F0 1.225(\(see also the)3.725 F F13.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 F13.725 E F0 1.225(option forces)3.725 +F .412(symbolic links to be follo)144 415.2 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.911 E F0(ap-)2.911 E .34(pears in)144 427.2 R F2(dir)2.84 E F0 2.84 +(,i)C 2.84(ti)-2.84 G 2.841(sp)-2.84 G .341(rocessed by remo)-2.841 F +.341(ving the immediately pre)-.15 F .341(vious pathname component from) +-.25 F F2(dir)2.841 E F0(,)A .176(back to a slash or the be)144 439.2 R +.176(ginning of)-.15 F F2(dir)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F12.675 E F0 .175(option is supplied with)2.675 F F1 +2.675 E F0 2.675(,a)C .175(nd the current w)-2.675 F(ork-)-.1 E +.341(ing directory cannot be successfully determined after a successful\ + directory change,)144 451.2 R F1(cd)2.841 E F0 .341(will return)2.841 F +.357(an unsuccessful status.)144 463.2 R .357 +(On systems that support it, the)5.357 F F12.856 E F0 .356 +(option presents the e)2.856 F .356(xtended attrib)-.15 F(utes)-.2 E +.069(associated with a \214le as a directory)144 475.2 R 5.069(.A)-.65 G +2.569(na)-5.069 G -.18(rg)-2.569 G .069(ument of).18 F F12.569 E F0 +.07(is con)2.57 F -.15(ve)-.4 G .07(rted to).15 F F4($OLDPWD)2.57 E F0 +.07(before the direc-)2.32 F .307(tory change is attempted.)144 487.2 R +.306(If a non-empty directory name from)5.307 F F4(CDP)2.806 E -.855(AT) +-.666 G(H).855 E F0 .306(is used, or if)2.556 F F12.806 E F0 .306 +(is the \214rst)2.806 F(ar)144 499.2 Q .116(gument, and the directory c\ +hange is successful, the absolute pathname of the ne)-.18 F 2.616(ww) +-.25 G .116(orking direc-)-2.716 F .15 +(tory is written to the standard output.)144 511.2 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 523.2 Q F0(en)2.957 +E .457(vironment v)-.4 F .457(ariable to the ne)-.25 F 2.958(wd)-.25 G +.458(irectory name, and sets the)-2.958 F F1(OLDPWD)2.958 E F0(en)2.958 +E .458(vironment v)-.4 F(ari-)-.25 E .126(able to the v)144 535.2 R .126 +(alue of the current w)-.25 F .126(orking directory before the change.) +-.1 F .125(The return v)5.125 F .125(alue is true if the)-.25 F +(directory w)144 547.2 Q(as successfully changed; f)-.1 E +(alse otherwise.)-.1 E F1(command)108 564 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 +576 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 F13.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 +F .065(uiltin commands or)-.2 F .502(commands found in the)144 588 R F4 +-.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 F13.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 600 R .399(ault v)-.1 F .399 +(alue for)-.25 F F4 -.666(PA)2.899 G(TH)-.189 E F0 .4 (that is guaranteed to \214nd all of the standard utilities.)2.649 F(If) -5.4 E .175(either the)144 712.8 R F12.675 E F0(or)2.675 E F1 +5.4 E .175(either the)144 612 R F12.675 E F0(or)2.675 E F1 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 F12.674 E F0 .174 -(option causes)2.674 F 3.317(as)144 724.8 S .817(ingle w)-3.317 F .817 +(option causes)2.674 F 3.317(as)144 624 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 -SF144 84 Q F0 .25(option produces a more v)2.75 F .25 +-.1(ke).2 G F2(command)3.618 E F0 .818(to be displayed; the)4.088 F F1 +144 636 Q F0 .25(option produces a more v)2.75 F .25 (erbose description.)-.15 F .249(If the)5.25 F F12.749 E F0(or) 2.749 E F12.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 +(xit status)-.15 F 1.004(is 0 if)144 648 R F2(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 +(command)144.2 660 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 +(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 672 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 +(compgen)108 688.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 700.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 +(accepted by the)144 712.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 F13.481 E F0(and) 3.481 E F13.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 -2.63 E F0(or)2.63 E F12.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 +-3.481 F 2.786(standard output.)144 724.8 R 2.786(When using the)7.786 F +F15.286 E F0(or)5.287 E F15.287 E F0 2.787(options, the v) +5.287 F 2.787(arious shell v)-.25 F 2.787(ariables set by the)-.25 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(60)185.955 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 +(programmable completion f)144 84 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 108 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 +120 R(If)5.02 E/F1 10/Times-Italic@0 SF(wor)2.52 E(d)-.37 E F0 .02 +(is speci\214ed, only)2.52 F(those completions matching)144 132 Q F1 +(wor)2.5 E(d)-.37 E F0(will be displayed.)2.5 E(The return v)144 156 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 --2.5 E F2(comp-option)2.5 E F0 2.5(][)C F1(\255DEI)-2.5 E F0 2.5 -(][)C F1-2.5 E F2(action)2.5 E F0 2.5(][)C F1-2.5 E F2 -(globpat)2.5 E F0 2.5(][)C F1-2.5 E F2(wor)2.5 E(dlist)-.37 E F0 -(])A([)144 285.6 Q F1A F2(function)2.5 E F0 2.5(][)C F1-2.5 -E F2(command)2.5 E F0 2.5(][)C F1-2.5 E F2(\214lterpat)2.5 E F0 -2.5(][)C F1-2.5 E F2(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F1 --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 F13.133 -E F0 .633(option is supplied, or if no)3.133 F .139 -(options are supplied, e)144 321.6 R .139 +(lid option is supplied, or no matches were generated.).25 E/F2 10 +/Times-Bold@0 SF(complete)108 172.8 Q F0([)2.5 E F2(\255abcdefgjksuv)A +F0 2.5(][)C F2-2.5 E F1(comp-option)2.5 E F0 2.5(][)C F2(\255DEI) +-2.5 E F0 2.5(][)C F2-2.5 E F1(action)2.5 E F0 2.5(][)C F2 +-2.5 E F1(globpat)2.5 E F0 2.5(][)C F2-2.5 E F1(wor)2.5 E(dlist) +-.37 E F0(])A([)144 184.8 Q F2A F1(function)2.5 E F0 2.5(][)C F2 +-2.5 E F1(command)2.5 E F0 2.5(][)C F2-2.5 E F1(\214lterpat) +2.5 E F0 2.5(][)C F2-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C +F2-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 196.8 Q F0([)2.5 E F2 +(\255DEI)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 +208.8 R 3.134(wa)-.25 G -.18(rg)-3.134 G .634(uments to each).18 F F1 +(name)3.134 E F0 .634(should be completed.)3.134 F .633(If the)5.634 F +F23.133 E F0 .633(option is supplied, or if no)3.133 F .139 +(options are supplied, e)144 220.8 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 F12.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 +232.8 R(The)5.31 E F22.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.207 -(are supplied, all completion speci\214cations.)144 345.6 R(The)6.207 E -F13.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 +(are supplied, all completion speci\214cations.)144 244.8 R(The)6.207 E +F23.707 E F0 1.208(option indicates that other supplied options) +3.708 F .5(and actions should apply to the `)144 256.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 F13.455 E F0 .955 +268.8 S .955(ommand for which no completion has pre)-3.455 F .955 +(viously been de\214ned.)-.25 F(The)5.955 E F23.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 280.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 -F12.947 E F0 .448 +-3.376 F .447(pletion attempted on a blank line.)144 292.8 R(The)5.447 E +F22.947 E F0 .448 (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 +(should apply to completion on the initial non-assignment w)144 304.8 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 +144 316.8 R F2(;)3.52 E F0(or)3.52 E F2(|)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 +(If multiple options are sup-)6.021 F .708(plied, the)144 328.8 R F2 3.208 E F0 .708(option tak)3.208 F .708(es precedence o)-.1 F -.15 -(ve)-.15 G(r).15 E F13.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 +(ve)-.15 G(r).15 E F23.208 E F0 3.208(,a)C .708(nd both tak)-3.208 +F 3.208(ep)-.1 G .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F2 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 F13.207 E F0(,)A F1144 441.6 Q F0 2.603(,o)C(r) --2.603 E F12.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 +(f).15 E F23.207 E F0(,)A F2144 340.8 Q F0 2.603(,o)C(r) +-2.603 E F22.603 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 352.8 Q .153 (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 +376.8 R .152(ord completion is attempted is de-)-.1 F(scribed abo)144 +388.8 Q .3 -.15(ve u)-.15 H(nder).15 E F2(Pr)2.5 E (ogrammable Completion)-.18 E F0(.)A .555 -(Other options, if speci\214ed, ha)144 513.6 R .855 -.15(ve t)-.2 H .555 +(Other options, if speci\214ed, ha)144 412.8 R .855 -.15(ve t)-.2 H .555 (he follo).15 F .555(wing meanings.)-.25 F .555(The ar)5.555 F .555 -(guments to the)-.18 F F13.056 E F0(,)A F13.056 E F0 3.056 -(,a)C(nd)-3.056 E F13.056 E F0 .723(options \(and, if necessary) -144 525.6 R 3.223(,t)-.65 G(he)-3.223 E F13.223 E F0(and)3.223 E -F13.223 E F0 .722 +(guments to the)-.18 F F23.056 E F0(,)A F23.056 E F0 3.056 +(,a)C(nd)-3.056 E F23.056 E F0 .723(options \(and, if necessary) +144 424.8 R 3.223(,t)-.65 G(he)-3.223 E F23.223 E F0(and)3.223 E +F23.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 F1144 549.6 Q -F2(comp-option)2.5 E F0(The)184 561.6 Q F2(comp-option)2.79 E F0 .291 +(sion before the)144 436.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 F2144 448.8 Q +F1(comp-option)2.5 E F0(The)184 460.8 Q F1(comp-option)2.79 E F0 .291 (controls se)2.791 F -.15(ve)-.25 G .291(ral aspects of the compspec') .15 F 2.791(sb)-.55 G(eha)-2.791 E .291(vior be)-.2 F .291 -(yond the simple)-.15 F(generation of completions.)184 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 472.8 Q F1 +(comp-option)5 E F0(may be one of:)2.5 E F2(bashdefault)184 484.8 Q F0 +.281(Perform the rest of the def)224 496.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 +508.8 Q F2(default)184 520.8 Q F0 2.875(Use readline')224 520.8 R 5.375 (sd)-.55 G(ef)-5.375 E 2.876 (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\ +224 532.8 Q F2(dir)184 544.8 Q(names)-.15 E F0(Perform directory name c\ +ompletion if the compspec generates no matches.)224 556.8 Q F2 +(\214lenames)184 568.8 Q F0 -.7(Te)224 580.8 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 +-.15 G(le-)-2.636 E .134(name\255speci\214c processing \(lik)224 592.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 +604.8 R .45(Intended to be used with shell)5.45 F(functions.)224 616.8 Q +F2(noquote)184 628.8 Q F0 -.7(Te)224 628.8 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 640.8 Q(ault\).)-.1 E F2(nosort)184 652.8 Q +F0 -.7(Te)224 652.8 S(ll readline not to sort the list of possible comp\ +letions alphabetically).7 E(.)-.65 E F2(nospace)184 664.8 Q F0 -.7(Te) +224 664.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 +676.8 Q F2(plusdirs)184 688.8 Q F0 1.985(After an)224 688.8 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 700.8 R 3.084(ym)-.15 G .584 +(atches are added to the results of the other)-3.084 F(actions.)224 +712.8 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(61)185.955 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(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 F1144 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 +SF144 84 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 96 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 -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 F12.5 E F0(.)A F1(command)184 264 -Q F0(Command names.)224 276 Q(May also be speci\214ed as)5 E F12.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 F12.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) +108 Q F0(Alias names.)224 108 Q(May also be speci\214ed as)5 E F1 +2.5 E F0(.)A F1(arrayv)184 120 Q(ar)-.1 E F0(Array v)224 132 Q +(ariable names.)-.25 E F1(binding)184 144 Q(Readline)224 144 Q F0 -.1 +(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 156 S(iltin) +.2 E F0(Names of shell b)224 156 Q(uiltin commands.)-.2 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 168 +Q F0(Command names.)224 180 Q(May also be speci\214ed as)5 E F12.5 +E F0(.)A F1(dir)184 192 Q(ectory)-.18 E F0(Directory names.)224 204 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(disabled)184 216 +Q F0(Names of disabled shell b)224 228 Q(uiltins.)-.2 E F1(enabled)184 +240 Q F0(Names of enabled shell b)224 240 Q(uiltins.)-.2 E F1(export)184 +252 Q F0(Names of e)224 252 Q(xported shell v)-.15 E 2.5(ariables. May) -.25 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 -360 Q F0(File names.)224 360 Q(May also be speci\214ed as)5 E F1 -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 +264 Q F0(File names.)224 264 Q(May also be speci\214ed as)5 E F1 +2.5 E F0(.)A F1(function)184 276 Q F0(Names of shell functions.)224 288 +Q F1(gr)184 300 Q(oup)-.18 E F0(Group names.)224 300 Q (May also be speci\214ed as)5 E F12.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 +312 Q F0(Help topics as accepted by the)224 324 Q F1(help)2.5 E F0 -.2 +(bu)2.5 G(iltin.).2 E F1(hostname)184 336 Q F0(Hostnames, as tak)224 348 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 F12.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) +(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 360 Q F0 +(Job names, if job control is acti)224 360 Q -.15(ve)-.25 G 5(.M).15 G +(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 372 S +(yw).1 E(ord)-.1 E F0(Shell reserv)224 384 Q(ed w)-.15 E 2.5(ords. May) -.1 F(also be speci\214ed as)2.5 E F12.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 F12.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 F12.5 +396 Q F0(Names of running jobs, if job control is acti)224 396 Q -.15 +(ve)-.25 G(.).15 E F1(ser)184 408 Q(vice)-.1 E F0(Service names.)224 408 +Q(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 420 +Q F0 -1.11(Va)224 420 S(lid ar)1.11 E(guments for the)-.18 E F12.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 F12.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 F12.5 E F0(.)A F1144 588 Q F2 -(command)2.5 E(command)184 600 Q F0 1.055(is e)3.555 F -.15(xe)-.15 G +(shopt)184 432 Q F0(Shell option names as accepted by the)224 432 Q F1 +(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 444 Q F0 +(Signal names.)224 444 Q F1(stopped)184 456 Q F0 +(Names of stopped jobs, if job control is acti)224 456 Q -.15(ve)-.25 G +(.).15 E F1(user)184 468 Q F0(User names.)224 468 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 480 S +(riable).1 E F0(Names of all shell v)224 480 Q 2.5(ariables. May)-.25 F +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 492 Q F2 +(command)2.5 E(command)184 504 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 F1144 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 +184 516 Q F1144 528 Q F2(function)2.5 E F0 .114 +(The shell function)184 540 R F2(function)2.614 E F0 .114(is e)2.614 F -.15(xe)-.15 G .114(cuted in the current shell en).15 F 2.614 -(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 648 R +(vironment. When)-.4 F .113(the func-)2.613 F .816(tion is e)184 552 R -.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1 ($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817 (he name of the command whose ar)-3.316 F(guments)-.18 E 1.407 -(are being completed, the second ar)184 660 R 1.407(gument \()-.18 F F1 +(are being completed, the second ar)184 564 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 +(ord being completed, and the)-.1 F .103(third ar)184 576 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 +(ord being completed on the current com-)-.1 F .102(mand line.)184 588 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 +-.25 F F3(COMPREPL)184 600 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E +F1144 612 Q F2(globpat)2.5 E F0 1.007(The pathname e)184 624 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 636 Q +F1144 648 Q F2(pr)2.5 E(e\214x)-.37 E(pr)184 660 Q(e\214x)-.37 E +F0 .535(is added at the be)3.035 F .534 +(ginning of each possible completion after all other options ha)-.15 F +-.15(ve)-.2 G(been applied.)184 672 Q F1144 684 Q F2(suf)2.5 E +<8c78>-.18 E(suf)184 684 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 F1144 696 Q F2(wor)2.5 E +(dlist)-.37 E F0(The)184 708 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14 +(is split using the characters in the)3.639 F F3(IFS)3.64 E F0 1.14 +(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F .981 +(each resultant w)184 720 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(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(62)185.955 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 -SF144 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 F1144 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 -(ginning of each possible completion after all other options ha)-.15 F --.15(ve)-.2 G(been applied.)184 144 Q F1144 156 Q F2(suf)2.5 E -<8c78>-.18 E(suf)184 156 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 F1144 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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(pro)184 84 Q .765 +(vide a mechanism for the w)-.15 F .766 (ords to contain shell metacharacters or characters in the)-.1 F -.25 -(va)184 216 S 1.965(lue of).25 F F3(IFS)4.465 E/F4 9/Times-Roman@0 SF(.) -A F0 1.964 +(va)184 96 S 1.965(lue of).25 F/F1 9/Times-Bold@0 SF(IFS)4.465 E/F2 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 F1144 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) +6.465 F(match the w)184 108 Q(ord being completed.)-.1 E/F3 10 +/Times-Bold@0 SF144 120 Q/F4 10/Times-Italic@0 SF(\214lterpat)2.5 +E(\214lterpat)184 132 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 144 R 1.596 +(guments, and each completion)-.18 F(matching)184 156 Q F4(\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 -(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 +(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F3(!)3.204 E F0 +(in)3.204 E F4(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705 +(tes the pattern;).05 F(in this case, an)184 168 Q 2.5(yc)-.15 G +(ompletion not matching)-2.5 E F4(\214lterpat)2.5 E F0(is remo)2.5 E +-.15(ve)-.15 G(d.).15 E .467(The return v)144 184.8 R .467 (alue is true unless an in)-.25 F -.25(va)-.4 G .466 -(lid option is supplied, an option other than).25 F F12.966 E F0 -(or)2.966 E F12.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 +(lid option is supplied, an option other than).25 F F32.966 E F0 +(or)2.966 E F32.966 E F0 .466(is sup-)2.966 F 1.361 +(plied without a)144 196.8 R F4(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 +1.362(ompletion speci\214cation for a).15 F F4(name)144 208.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 F1A 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 -R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0 +F3(compopt)108 225.6 Q F0([)2.5 E F3A F4(option)2.5 E F0 2.5(][)C +F3(\255DEI)-2.5 E F0 2.5(][)C F3(+o)-2.5 E F4(option)2.5 E F0 2.5(][)C +F4(name)-2.5 E F0(])A .447(Modify completion options for each)144 237.6 +R F4(name)2.947 E F0 .447(according to the)2.947 F F4(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) +(completion if no)144 249.6 R F4(name)3.225 E F0 3.225(sa)C .725 +(re supplied.)-3.225 F .725(If no)5.725 F F4(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) +(n, display the completion options for).15 F(each)144 261.6 Q F4(name) 3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v) -5.724 F .724(alues of)-.25 F F2(option)3.224 E F0 .724(are those v)3.224 -F .723(alid for the)-.25 F F1(com-)3.223 E(plete)144 393.6 Q F0 -.2(bu) +5.724 F .724(alues of)-.25 F F4(option)3.224 E F0 .724(are those v)3.224 +F .723(alid for the)-.25 F F3(com-)3.223 E(plete)144 273.6 Q F0 -.2(bu) 2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he) --5.178 E F12.678 E F0 .178 +-5.178 E F32.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.228(the `)144 285.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\ mmand completion; that is, completion attempted on a command for which \ -no)-3.728 F 2.038(completion has pre)144 417.6 R 2.038 -(viously been de\214ned.)-.25 F(The)7.038 E F14.538 E F0 2.039 +no)-3.728 F 2.038(completion has pre)144 297.6 R 2.038 +(viously been de\214ned.)-.25 F(The)7.038 E F34.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 +(should apply to `)144 309.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538 (ommand completion; that is, completion attempted on a blank line.) --4.039 F(The)144 441.6 Q F13.02 E F0 .52(option indicates that ot\ +-4.039 F(The)144 321.6 Q F33.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 -(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 +F .868(assignment w)144 333.6 R .868 +(ord on the line, or after a command delimiter such as)-.1 F F3(;)3.368 +E F0(or)3.368 E F3(|)3.368 E F0 3.367(,w)C .867(hich is usually com-) +-3.367 F(mand name completion.)144 345.6 Q .431(The return v)144 369.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 381.6 Q F4(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 -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 SF2.703 E F0 2.704(1. If)2.703 F F2(n)3.064 E F0 .204 +(xists, or an output error occurs.)-.15 E F3(continue)108 398.4 Q F0([) +2.5 E F4(n)A F0(])A .851(Resume the ne)144 410.4 R .851 +(xt iteration of the enclosing)-.15 F F3 -.25(fo)3.351 G(r).25 E F0(,)A +F3(while)3.351 E F0(,)A F3(until)3.351 E F0 3.351(,o)C(r)-3.351 E F3 +(select)3.35 E F0 3.35(loop. If)3.35 F F4(n)3.71 E F0 .85 +(is speci\214ed, re-)3.59 F .203(sume at the)144 422.4 R F4(n)2.703 E F0 +.203(th enclosing loop.)B F4(n)5.563 E F0 .203(must be)2.943 F/F5 10 +/Symbol SF2.703 E F0 2.704(1. If)2.703 F F4(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 +(the last enclosing loop \(the `)144 434.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 --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(][)C F1-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 +(The return v)6.184 F 1.183(alue is 0 unless)-.25 F F4(n)3.683 E F0 +1.183(is not)3.683 F(greater than or equal to 1.)144 446.4 Q F3(declar) +108 463.2 Q(e)-.18 E F0([)2.5 E F3(\255aAfFgiIlnrtux)A F0 2.5(][)C F3 +-2.5 E F0 2.5(][)C F4(name)-2.5 E F0([=)A F4(value)A F0 2.5(].)C +(..])-2.5 E F3(typeset)108 475.2 Q F0([)2.5 E F3(\255aAfFgiIlnrtux)A F0 +2.5(][)C F3-2.5 E F0 2.5(][)C F4(name)-2.5 E F0([=)A F4(value)A F0 +2.5(].)C(..])-2.5 E 1.264(Declare v)144 487.2 R 1.264 (ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F -3.765(utes. If)-.2 F(no)3.765 E F2(name)3.765 E F0 3.765(sa)C 1.265 +3.765(utes. If)-.2 F(no)3.765 E F4(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 -F F13.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 F13.46 E F0 .96(is used)3.46 F(with)144 631.2 Q F2 +-3.765 F 1.265(alues of)-.25 F -.25(va)144 499.2 S 3.46(riables. The).25 +F F33.46 E F0 .96(option will display the attrib)3.46 F .96 +(utes and v)-.2 F .96(alues of each)-.25 F F4(name)3.82 E F0 5.96(.W).18 +G(hen)-5.96 E F33.46 E F0 .96(is used)3.46 F(with)144 511.2 Q F4 (name)2.774 E F0(ar)2.774 E .274 -(guments, additional options, other than)-.18 F F12.775 E F0(and) -2.775 E F12.775 E F0 2.775(,a)C .275(re ignored.)-2.775 F(When) -5.275 E F12.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) +(guments, additional options, other than)-.18 F F32.775 E F0(and) +2.775 E F32.775 E F0 2.775(,a)C .275(re ignored.)-2.775 F(When) +5.275 E F32.775 E F0 .275(is supplied)2.775 F(without)144 523.2 Q +F4(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 +(ariables ha)-.25 F 1.289(ving the at-)-.2 F(trib)144 535.2 Q .38 (utes speci\214ed by the additional options.)-.2 F .38 -(If no other options are supplied with)5.38 F F12.88 E F0(,)A F1 +(If no other options are supplied with)5.38 F F32.88 E F0(,)A F3 (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 F13.606 E F0 1.106 +547.2 R 1.107(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606 +(ariables. The)-.25 F F33.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 F12.799 E F0 .299(option inhibits the display\ +559.2 R(The)5.299 E F32.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 -(is de\214ned are displayed as well.)3.148 F(The)5.648 E F13.148 E -F0 .649(option implies)3.149 F F1144 715.2 Q F0 5.837(.T)C(he) --5.837 E F13.337 E F0 .837(option forces v)3.337 F .836 +(and attrib)144 571.2 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F +F3(extdeb)4.04 E(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F +F3(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 583.2 R F4(name)3.148 E F0 .648 +(is de\214ned are displayed as well.)3.148 F(The)5.648 E F33.148 E +F0 .649(option implies)3.149 F F3144 595.2 Q F0 5.837(.T)C(he) +-5.837 E F33.337 E F0 .837(option forces v)3.337 F .836 (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 +(ve)-.25 G 3.336(nw).15 G(hen)-3.336 E F3(de-)3.336 E(clar)144 607.2 Q (e)-.18 E F0 .818(is e)3.318 F -.15(xe)-.15 G .818 (cuted in a shell function.).15 F .818 -(It is ignored in all other cases.)5.818 F(The)5.819 E F13.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.819 E F33.319 E +F0 .819(option causes local)3.319 F -.25(va)144 619.2 S .694 +(riables to inherit the attrib).25 F .694(utes \(e)-.2 F .694(xcept the) +-.15 F F4(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 631.2 R F4(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 643.2 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 655.2 Q(ute or to gi) +-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F3144 +667.2 Q F0(Each)180 667.2 Q F4(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 F3(Arrays)2.5 E +F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F3144 679.2 Q F0(Each)180 +679.2 Q F4(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 F3(Arrays)2.5 E F0(abo)2.5 E -.15(ve) +-.15 G(\).).15 E F3144 691.2 Q F0(Use function names only)180 +691.2 Q(.)-.65 E F3144 703.2 Q F0 .557(The v)180 703.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 F1 .558(ARITHMETIC EV)3.058 F(ALU) +-1.215 E(A-)-.54 E(TION)180 715.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(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(63)185.955 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 -.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 SF144 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 F2144 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 F2144 -156 Q F0(Use function names only)180 156 Q(.)-.65 E F2144 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 -F2144 192 Q F0 .91(When the v)180 192 R .909 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF144 84 Q F0 .91(When the v)180 84 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 F2144 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 +-.25 E(-)-.2 E 2.5(case. The)180 96 R(upper)2.5 E(-case attrib)-.2 E +(ute is disabled.)-.2 E F1144 108 Q F0(Gi)180 108 Q 1.619 -.15 +(ve e)-.25 H(ach).15 E/F2 10/Times-Italic@0 SF(name)3.819 E F0(the)3.819 +E F2(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319 (ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .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 F23.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 +(That other v)180 120 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 132 Q .781 +(ute modi\214cations to)-.2 F F2(name)3.281 E F0 3.281(,e)C .782 +(xcept those using or changing the)-3.431 F F13.282 E F0(attrib) +3.282 E .782(ute itself, are)-.2 F .809(performed on the v)180 144 R +.809(ariable referenced by)-.25 F F2(name)3.308 E F0 1.908 -.55('s v)D 3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2 -F(applied to array v)180 264 Q(ariables.)-.25 E F2144 276 Q F0 -(Mak)180 276 Q(e)-.1 E F1(name)3.654 E F0 3.654(sr)C(eadonly)-3.654 E +F(applied to array v)180 156 Q(ariables.)-.25 E F1144 168 Q F0 +(Mak)180 168 Q(e)-.1 E F2(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 F2144 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 -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 F2144 324 -Q F0 .909(When the v)180 324 R .909(ariable is assigned a v)-.25 F .909 +180 Q F1144 192 Q F0(Gi)180 192 Q .73 -.15(ve e)-.25 H(ach).15 E +F2(name)2.93 E F0(the)2.929 E F2(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E +2.929(ute. T)-.2 F .429(raced functions inherit the)-.35 F F1(DEB)2.929 +E(UG)-.1 E F0(and)2.929 E F1(RETURN)2.929 E F0 +(traps from the calling shell.)180 204 Q(The trace attrib)5 E +(ute has no special meaning for v)-.2 E(ariables.)-.25 E F1144 216 +Q F0 .909(When the v)180 216 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 F2144 348 Q -F0(Mark)180 348 Q F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E +(ve)-.4 G .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 228 R(lo)2.5 +E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F1144 240 Q +F0(Mark)180 240 Q F2(name)2.5 E F0 2.5(sf)C(or e)-2.5 E (xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144 -(Using `+' instead of `\255' turns of)144 364.8 R 2.643(ft)-.25 G .143 +(Using `+' instead of `\255' turns of)144 256.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 -.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.643 E F0(and)2.643 E F1(+A)2.643 E F0 +.143(may not)2.643 F .578(be used to destro)144 268.8 R 3.079(ya)-.1 G +.579(rray v)-3.079 F .579(ariables and)-.25 F F1(+r)3.079 E F0 .579 (will not remo)3.079 F .879 -.15(ve t)-.15 H .579(he readonly attrib).15 -F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 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 F23.543 E F0 1.205 -(option is supplied.)144 400.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 +F 3.079(ute. When)-.2 F .579(used in a)3.079 F(function,)144 280.8 Q F1 +(declar)3.544 E(e)-.18 E F0(and)3.544 E F1(typeset)3.544 E F0(mak)3.544 +E 3.544(ee)-.1 G(ach)-3.544 E F2(name)3.543 E F0 1.043 +(local, as with the)3.543 F F1(local)3.543 E F0 1.043 +(command, unless the)3.543 F F13.543 E F0 1.205 +(option is supplied.)144 292.8 R 1.205(If a v)6.205 F 1.205 +(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F2(value)A F0 3.705 (,t)C 1.205(he v)-3.705 F 1.205(alue of the v)-.25 F 1.205 -(ariable is set to)-.25 F F1(value)144 412.8 Q F0 5.218(.W)C .218 -(hen using)-5.218 F F22.718 E F0(or)2.718 E F22.718 E F0 +(ariable is set to)-.25 F F2(value)144 304.8 Q F0 5.218(.W)C .218 +(hen using)-5.218 F F12.718 E F0(or)2.718 E F12.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 +(ariables, addi-)-.25 F .882(tional attrib)144 316.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 328.8 Q -.25(va)-.4 G .366(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 +/F3 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 340.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 -(ariable without using the compound assignment syntax \(see)-.25 F F2 +1.749(array v)144 352.8 R 1.749 +(ariable without using the compound assignment syntax \(see)-.25 F F1 (Arrays)4.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F -F1(names)144 472.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F +F2(names)144 364.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F .359(ariable name, an attempt is made to turn of)-.25 F 2.859(fr)-.25 G -.359(eadonly status for a read-)-2.859 F 1.213(only v)144 484.8 R 1.213 +.359(eadonly status for a read-)-2.859 F 1.213(only v)144 376.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 -F22.5 E F0(.)A F2(dirs [\255clpv] [+)108 513.6 Q F1(n)A F2 2.5(][) -C-2.5 E F1(n)A F2(])A F0 -.4(Wi)144 525.6 S .328 +-.25 F(made to display a non-e)144 388.8 Q(xistent function with)-.15 E +F12.5 E F0(.)A F1(dirs [\255clpv] [+)108 405.6 Q F2(n)A F1 2.5(][) +C-2.5 E F2(n)A F1(])A F0 -.4(Wi)144 417.6 S .328 (thout options, displays the list of currently remembered directories.) .4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 -(single line with directory names separated by spaces.)144 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 +(single line with directory names separated by spaces.)144 429.6 R 1.238 +(Directories are added to the list with the)6.238 F F1(pushd)144 441.6 Q +F0 .927(command; the)3.427 F F1(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 F2144 573.6 Q F0 -(Clears the directory stack by deleting all of the entries.)180 573.6 Q -F2144 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 453.6 S +(ys the \214rst directory in the stack.).1 E F1144 465.6 Q F0 +(Clears the directory stack by deleting all of the entries.)180 465.6 Q +F1144 477.6 Q F0 .882 +(Produces a listing using full pathnames; the def)180 477.6 R .881 (ault listing format uses a tilde to denote)-.1 F(the home directory)180 -597.6 Q(.)-.65 E F2144 609.6 Q F0 -(Print the directory stack with one entry per line.)180 609.6 Q F2 -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 +489.6 Q(.)-.65 E F1144 501.6 Q F0 +(Print the directory stack with one entry per line.)180 501.6 Q F1 +144 513.6 Q F0 .272(Print the directory stack with one entry per line, \ +pre\214xing each entry with its inde)180 513.6 R 2.773(xi)-.15 G 2.773 +(nt)-2.773 G(he)-2.773 E(stack.)180 525.6 Q F1(+)144 537.6 Q F2(n)A F0 +1.565(Displays the)180 537.6 R F2(n)4.065 E F0 1.565 +(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F1 (dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E -(without options, starting with zero.)180 657.6 Q F2144 669.6 Q F1 -(n)A F0 1.194(Displays the)180 669.6 R F1(n)3.694 E F0 1.194 +(without options, starting with zero.)180 549.6 Q F1144 561.6 Q F2 +(n)A F0 1.194(Displays the)180 561.6 R F2(n)3.694 E F0 1.194 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F -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 -(lid option is supplied or).25 F F1(n)2.758 E F0(inde)2.758 E -.15(xe) +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 573.6 Q .258(The return v)144 +590.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 +(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe) -.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-) -.15 F(tory stack.)144 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 --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 F12.596 E F0 .096(nor the)2.596 F F1 -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.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 +.15 F(tory stack.)144 602.4 Q F1(diso)108 619.2 Q(wn)-.1 E F0([)2.5 E F1 +(\255ar)A F0 2.5(][)C F1-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 631.2 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 643.2 R F12.596 E F0 .096(nor the)2.596 F +F12.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.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each) +.15 F F2(jobspec)145.74 655.2 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/F4 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 667.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 F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1 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 +H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 679.2 R F1 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 +1.359(The return)6.359 F -.25(va)144 691.2 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 F12.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 F12.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 F12.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 +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(64)185.955 E 0 Cg EP +%%Page: 65 65 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 +SF(echo)108 84 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C/F2 10 +/Times-Italic@0 SF(ar)-2.5 E(g)-.37 E F0(...])2.5 E .425(Output the)144 +96 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 108 R +(If)5.307 E F12.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 +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 120 R .198 +(wing backslash-escaped characters is enabled.)-.25 F(The)5.198 E F1 +2.698 E F0 .197(option disables the in-)2.697 F .067 +(terpretation of these escape characters, e)144 132 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 +(xpg_echo)144 144 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 F13.159 E F0 .659 +(escape characters by def)144 156 R(ault.)-.1 E F1(echo)5.658 E F0 .659 +(does not interpret)3.159 F F13.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 +-.2 E(prets the follo)144 168 Q(wing escape sequences:)-.25 E F1(\\a)144 +180 Q F0(alert \(bell\))180 180 Q F1(\\b)144 192 Q F0(backspace)180 192 +Q F1(\\c)144 204 Q F0(suppress further output)180 204 Q F1(\\e)144 216 Q +(\\E)144 228 Q F0(an escape character)180 228 Q F1(\\f)144 240 Q F0 +(form feed)180 240 Q F1(\\n)144 252 Q F0(ne)180 252 Q 2.5(wl)-.25 G(ine) +-2.5 E F1(\\r)144 264 Q F0(carriage return)180 264 Q F1(\\t)144 276 Q F0 +(horizontal tab)180 276 Q F1(\\v)144 288 Q F0 -.15(ve)180 288 S +(rtical tab).15 E F1(\\\\)144 300 Q F0(backslash)180 300 Q F1(\\0)144 +312 Q F2(nnn)A F0(the eight-bit character whose v)180 312 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 324 Q F2(HH)A F0 +(the eight-bit character whose v)180 324 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 336 Q F2(HHHH)A F0 +1.507(the Unicode \(ISO/IEC 10646\) character whose v)180 348 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 +4.006 E F0(\(one to four he)180 360 Q 2.5(xd)-.15 G(igits\))-2.5 E F1 +(\\U)144 372 Q F2(HHHHHHHH)A F0 .547 +(the Unicode \(ISO/IEC 10646\) character whose v)180 384 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 F1A F0 2.5(][)C -F1(\255dnps)-2.5 E F0 2.5(][)C F1-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 +3.048 E(HHH)180 396 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G(igits\)) +-2.5 E F1(enable)108 412.8 Q F0([)2.5 E F1A F0 2.5(][)C F1 +(\255dnps)-2.5 E F0 2.5(][)C F1-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 424.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 +(the same name as a shell b)144 436.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 +(the shell normally searches for b)144 448.8 R .989 (uiltins before disk commands.)-.2 F(If)5.989 E F13.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.) +(abled; otherwise,)144 460.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 F13.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.899 E .539(stead of the shell b) +144 472.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 F13.038 E +F0 .538(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 484.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 -2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F -.367(viously loaded with)-.25 F F12.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 -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 F12.598 E F0 .098 -(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F -(If)5.098 E F12.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 F12.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 +(ystems that support dynamic loading.)-3.865 F .607(Bash will use the v) +144 496.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 .548 +(directories in which to search for)144 508.8 R F2(\214lename)3.048 E F0 +5.549(.T)C .549(he def)-5.549 F .549(ault is system-dependent.)-.1 F +(The)5.549 E F13.049 E F0 .549(option will)3.049 F .547 +(delete a b)144 520.8 R .547(uiltin pre)-.2 F .547(viously loaded with) +-.25 F F13.047 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 +.546(n, or if the).15 F F13.046 E F0 .546(option is)3.046 F .545 +(supplied, a list of shell b)144 532.8 R .545(uiltins is printed.)-.2 F +-.4(Wi)5.545 G .545(th no other option ar).4 F .546 +(guments, the list consists of all)-.18 F .695(enabled shell b)144 544.8 +R 3.195(uiltins. If)-.2 F F13.195 E F0 .695 +(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F +(If)5.695 E F13.195 E F0 .695(is supplied, the)3.195 F .261 +(list printed includes all b)144 556.8 R .261 +(uiltins, with an indication of whether or not each is enabled.)-.2 F +(If)5.261 E F12.761 E F0 .262(is sup-)2.762 F .269 +(plied, the output is restricted to the POSIX)144 568.8 R F2(special) +2.768 E F0 -.2(bu)2.768 G 2.768(iltins. If).2 F .268 +(no options are supplied and a)2.768 F F2(name)2.768 E F0 .284 +(is not a shell b)144 580.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.785 E F0 2.785(,a)C 2.785 +(si)-2.785 G 2.785(ft)-2.785 G(he)-2.785 E 1.41(command were)144 592.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 604.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 621.6 T(l).15 +E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 633.6 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 +(This command is then read)5.671 F .479(and e)144 645.6 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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-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 +-2.978 F F2(ar)3.308 E(gs)-.37 E F0(,).27 E(or only null ar)144 657.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 674.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-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 686.4 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 -2.676 E F0 .176 +(guments)-.37 E F0(become)3.076 E .177(the ar)144 698.4 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 F12.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 F12.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 +(ginning of)-.15 F .48(the zeroth ar)144 710.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 F12.98 E F0 +.48(option causes)2.98 F F2(com-)3.18 E(mand)144 722.4 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 F13.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 +3.318 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(65)185.955 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 1.077(zeroth ar) +144 84 R 1.077(gument to the e)-.18 F -.15(xe)-.15 G 1.077 +(cuted command.).15 F(If)6.077 E/F1 10/Times-Italic@0 SF(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 96 Q .877 -.15(ve s) +-.25 H .577(hell e).15 F .577(xits, unless the)-.15 F/F2 10/Times-Bold@0 +SF(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 108 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 +120 R F2(exec)2.788 E F0 -.1(fa)2.788 G 2.788(ils. If).1 F F1(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 132 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 +(he return status is 1.)-2.5 E F2(exit)108 148.8 Q F0([)2.5 E F1(n)A F0 +(])A .095(Cause the shell to e)144 148.8 R .095(xit with a status of) +-.15 F F1(n)2.595 E F0 5.095(.I)C(f)-5.095 E F1(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 +-.15 F -.15(exe)144 160.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 +(cuted before the shell terminates.).15 E F2(export)108 177.6 Q F0([)2.5 +E F2(\255fn)A F0 2.5(][).833 G F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E +F0(]] ...)A F2(export \255p)108 189.6 Q F0 .257(The supplied)144 201.6 R +F1(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 +(xe)-.15 G(cuted).15 E 2.626(commands. If)144 213.6 R(the)2.626 E F2 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 F1144 285.6 Q F0 .048 +.15 F F1(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no) +5.127 F F1(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .127 +(n, or if the).15 F F2144 225.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 F12.547 E F0 -.047(option causes the)2.547 F -.15(ex)144 297.6 S 1.446 +-.15 F .048(ariables is printed.)-.25 F(The)5.048 E F22.547 E F0 +.047(option causes the)2.547 F -.15(ex)144 237.6 S 1.446 (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 +(rom each)-3.947 F F1(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 F1(wor)A(d) +-.37 E F0 3.947(,t)C(he)-3.947 E -.25(va)144 249.6 S .742(lue of the v) +.25 F .742(ariable is set to)-.25 F F1(wor)3.242 E(d)-.37 E F0(.)A F2 (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 +.25 F .031(encountered, one of the)144 261.6 R F1(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 F12.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 -E F1A 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 +F F22.532 E F0 .032(is supplied with a)2.532 F F1(name)2.892 E F0 +(that)2.712 E(is not a function.)144 273.6 Q F2(fc)108 290.4 Q F0([)2.5 +E F2A F1(ename)2.5 E F0 2.5(][)C F2(\255lnr)-2.5 E F0 2.5(][)C F1 +<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F1(last)-2.5 E F0(])A F2(fc \255s)108 +302.4 Q F0([)2.5 E F1(pat)A F0(=)A F1 -.37(re)C(p).37 E F0 2.5(][)C F1 (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 +(The \214rst form selects a range of commands from)144 314.4 R F1<8c72> +4.842 E(st)-.1 E F0(to)3.612 E F1(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) -.45 G(t).1 E F0(and)3.321 E F2(last)2.731 E F0 .141 +326.4 R -.15(xe)-.15 G .141(cutes them.).15 F F1 -.45(Fi)5.141 G -.1(rs) +.45 G(t).1 E F0(and)3.321 E F1(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) +144 338.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 +(is used as an of)144 350.4 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 +5.071 F F1<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 422.4 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 +(lent to \2551 and \2550 is equi)144 362.4 R -.25(va)-.25 G .653 +(lent to the current command \(usually the).25 F F2(fc)3.153 E F0 .653 +(command\); otherwise 0 is)3.153 F(equi)144 374.4 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 +F1(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 -Q F12.522 E F0 .022 +.093(ing \(so that)144 386.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 F1<8c72> +4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F1<8c72>4.502 E(st)-.1 E +F0 .092(is not speci-)3.272 F(\214ed, it is set to the pre)144 398.4 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 422.4 +Q F22.522 E F0 .022 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E -F12.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) -5.438 F F12.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 +F22.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 +(rses the order of).15 F .438(the commands.)144 434.4 R .438(If the) +5.438 F F22.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 +.334(the editor gi)144 446.4 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E +F1(ename)3.024 E F0 .335(is in)3.014 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 +F(If)5.335 E F1(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G +(n,).15 E .631(the v)144 458.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 -(ariable is set,)-.25 F F2(vi)4.171 E F0 .005(is used.)4.171 F .005 +(is not set.)2.88 F .63(If nei-)5.63 F .005(ther v)144 470.4 R .005 +(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 542.4 Q .789(In the second form,)144 566.4 R F2 +(x-)-.15 E(ecuted.)144 482.4 Q .789(In the second form,)144 506.4 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 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> +(cuted after each instance of).15 F F1(pat)3.288 E F0 .788 +(is replaced by)3.288 F F1 -.37(re)3.288 G(p).37 E F0(.)A F1(Com-)5.788 +E(mand)144 518.4 Q F0 .171(is interpreted the same as)2.671 F F1<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 +F0 2.672(,s)C 2.672(ot)-2.672 G(hat)-2.672 E(typing)144 530.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 -(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 -R .454(If the)5.454 F F12.954 E F0 .454 +(mand.)144 542.4 Q .142(If the \214rst form is used, the return v)144 +566.4 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 .455(specify history lines out of range.)144 578.4 +R .454(If the)5.454 F F22.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 +(alue of the)-.25 F .787(last command e)144 590.4 R -.15(xe)-.15 G .787 (cuted or f).15 F .788 (ailure if an error occurs with the temporary \214le of commands.)-.1 F .788(If the)5.788 F 1.136 (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 -(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 +602.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F1(cmd)3.835 E F0 1.135 +(does not)4.405 F(specify a v)144 614.4 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 631.2 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume) +144 643.2 Q F1(jobspec)5.653 E F0 1.413(in the fore)4.223 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 +(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1(jobspec)5.653 E F0 +1.414(is not present, the)4.223 F(shell')144 655.2 Q 3.117(sn)-.55 G +.617(otion of the)-3.117 F F1(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 +(alue is that of the command placed into the)-.25 F(fore)144 667.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 +(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 679.2 Q +F0(does not specify a v)2.81 E(alid job or)-.25 E F1(jobspec)4.24 E F0 +(speci\214es a job that w)2.81 E(as started without job control.)-.1 E +F2(getopts)108 696 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 708 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 720 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(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E +(66)185.955 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-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 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(ar)144 84 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 +(acters may not be used as option characters.)144 96 R .636 +(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E/F1 10 +/Times-Bold@0 SF(getopts)3.136 E F0 .636(places the ne)3.136 F .636 +(xt op-)-.15 F .03(tion in the shell v)144 108 R(ariable)-.25 E/F2 10 +/Times-Italic@0 SF(name)2.89 E F0 2.53(,i).18 G(nitializing)-2.53 E F2 +(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 120 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 132 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 .566(the v)144 +144 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 +(between multiple calls to)144 156 R F1(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 +2.889(ws)-.25 G .389(et of parameters is to)-2.889 F(be used.)144 168 Q +2.043(When the end of options is encountered,)144 192 R F1(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 204 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 +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F2(name)2.5 E F0 +(is set to ?.)2.5 E F1(getopts)144 228 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 F2(ar)3.315 E +(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 240 Q F1(getopts)2.5 E F0 +(parses those instead.)2.5 E F1(getopts)144 264 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 +.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.669 +(porting is used.)144 276 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 +-.25(va)-.4 G 1.668(lid options or).25 F .393(missing option ar)144 288 +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 300 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 .667(If an in)144 324 R -.25(va)-.4 G .667(lid option is seen,) +.25 F F1(getopts)3.167 E F0 .667(places ? into)3.167 F F2(name)3.527 E +F0 .666(and, if not silent, prints an error message)3.347 F .399 +(and unsets)144 336 R F3(OPT)2.899 E(ARG)-.81 E F4(.)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 F3(OPT)2.899 +E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 348 +Q 1.242(If a required ar)144 372 R 1.242(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.741(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F +F2(name)144.36 384 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 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 396 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 420 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-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) +(options is encountered or an error occurs.)144 432 Q F1(hash)108 448.8 +Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1-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 460.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 525.6 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F0 +(the directories in)144 472.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 F22.742 E F0 .243 -(option is supplied, no path search is performed, and)2.742 F F1 +(viously-remembered pathname is discarded.)-.25 F .242(If the)144 484.8 +R F12.742 E F0 .243 +(option is supplied, no path search is performed, and)2.742 F F2 (\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 F23.115 E F0 .615 +(of the command.)144 496.8 R(The)5.615 E F13.115 E F0 .615 (option causes the shell to for)3.115 F .615 -(get all remembered locations.)-.18 F(The)5.615 E F23.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 F22.794 E F0 .294 +(get all remembered locations.)-.18 F(The)5.615 E F13.115 E F0 +(op-)3.115 E .293(tion causes the shell to for)144 508.8 R .293 +(get the remembered location of each)-.18 F F2(name)2.794 E F0 5.294(.I) +C 2.794(ft)-5.294 G(he)-2.794 E F12.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 F22.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 +520.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 .175(plied with)144 532.8 R F12.675 E F0 +2.675(,t)C(he)-2.675 E F2(name)2.675 E F0 .175 +(is printed before the hashed full pathname.)2.675 F(The)5.175 E F1 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 +(be displayed in a format that may be reused as input.)144 544.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 F23.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 F13.283 E F0(is)3.283 E .807 +(supplied, information about remembered commands is printed.)144 556.8 R +.807(The return status is true unless a)5.807 F F2(name)144.36 568.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 +.25 E F1(help)108 585.6 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2 (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 +597.6 R .867(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 +.866(is speci\214ed,)3.607 F F1(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 +609.6 R F2(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 -144 686.4 Q F0(Display a short description of each)180 686.4 Q F1 -(pattern)2.5 E F2144 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 F2144 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 +(uiltins and shell control struc-)-.2 F(tures is printed.)144 621.6 Q F1 +144 633.6 Q F0(Display a short description of each)180 633.6 Q F2 +(pattern)2.5 E F1144 645.6 Q F0(Display the description of each) +180 645.6 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G +(ormat)-2.5 E F1144 657.6 Q F0 +(Display only a short usage synopsis for each)180 657.6 Q F2(pattern)2.5 +E F0(The return status is 0 unless no command matches)144 674.4 Q F2 +(pattern)3.75 E F0(.).24 E F1(history [)108 691.2 Q F2(n)A F1(])A +(history \255c)108 703.2 Q F0(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(67)185.955 E 0 Cg EP +%%Page: 68 68 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(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 F0A 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 +SF(history \255d)108 84 Q/F2 10/Times-Italic@0 SF(of)2.5 E(fset)-.18 E +F1(history \255d)108 96 Q F2(start)2.5 E F0A F2(end)A F1 +(history \255anrw)108 108 Q F0([)2.5 E F2(\214lename)A F0(])A F1 +(history \255p)108 120 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 132 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 144 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 +G .38(been modi\214ed.)144 156 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 +/Times-Bold@0 SF(HISTTIMEFOR-)2.881 E(MA)144 168 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 +(ciated with each displayed history entry)144 180 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) +(time stamp and the history line.)144 192 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 +(not, the v)144 204 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 F1144 240 Q F0 -(Clear the history list by deleting all the entries.)180 240 Q F1 -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 +(wing meanings:)-.25 E F1144 216 Q F0 +(Clear the history list by deleting all the entries.)180 216 Q F1 +144 228 Q F2(of)2.5 E(fset)-.18 E F0 .389 +(Delete the history entry at position)180 240 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) +(to one greater than the last history position, so ne)180 252 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) +(ndices count back from the end).15 F(of the history)180 264 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 -144 300 Q F2(start)2.5 E F0A 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 -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 +144 276 Q F2(start)2.5 E F0A F2(end)A F0 1.25 +(Delete the range of history entries between positions)180 288 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 300 +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 F1144 312 Q F0 .565(Append the `)180 312 +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 324 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 F1144 360 Q +(ut not already appended to the history \214le.)-.2 E F1144 336 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 + into the current history list.)180 336 R .773 +(These are lines appended to the history \214le since the be)180 348 R .772(ginning of the current)-.15 F F1(bash)3.272 E F0(ses-)3.272 E -(sion.)180 384 Q F1144 396 Q F0(Read the contents of the history \ -\214le and append them to the current history list.)180 396 Q F1 -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 F1144 420 Q F0 .625 -(Perform history substitution on the follo)180 420 R(wing)-.25 E F2(ar) +(sion.)180 360 Q F1144 372 Q F0(Read the contents of the history \ +\214le and append them to the current history list.)180 372 Q F1 +144 384 Q F0(Write the current history list to the history \214le, o)180 +384 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G +(ontents.)-2.5 E F1144 396 Q F0 .625 +(Perform history substitution on the follo)180 396 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 +2.975(output. Does)180 408 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 444 Q(xpansion.)-.15 E F1144 456 Q F0 .362 -(Store the)180 456 R F2(ar)3.192 E(gs)-.37 E F0 .363 +(normal history e)180 420 Q(xpansion.)-.15 E F1144 432 Q F0 .362 +(Store the)180 432 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) +(he last command in the history list is)-5.363 F(remo)180 444 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) +(are added.)2.77 E .146(If the)144 460.8 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 .668(entry is written to the history \214le, mark)144 496.8 R .669 +.25 F .668(entry is written to the history \214le, mark)144 472.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 +(hen the history)-5.669 F .956(\214le is read, lines be)144 484.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 +(are interpreted as timestamps for the follo)144 496.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\ +.833(alue is 0 unless an in-)-.25 F -.25(va)144 508.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 F12.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 F12.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 F1144 597.6 Q F0 -(List process IDs in addition to the normal information.)180 597.6 Q F1 -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 -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 F1144 645.6 Q F0 -(Display only running jobs.)180 645.6 Q F1144 657.6 Q F0 -(Display only stopped jobs.)180 657.6 Q(If)144 674.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 686.4 Q -.25 +144 520.8 Q F0 .34(or range is supplied as an ar)2.84 F .34(gument to) +-.18 F F12.841 E F0 2.841(,o)C 2.841(rt)-2.841 G .341 +(he history e)-2.841 F .341(xpansion supplied as an ar)-.15 F .341 +(gument to)-.18 F F1144 532.8 Q F0 -.1(fa)2.5 G(ils.).1 E F1(jobs) +108 549.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ]) +2.5 E F1(jobs \255x)108 561.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 573.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 F1144 585.6 Q F0 +(List process IDs in addition to the normal information.)180 585.6 Q F1 +144 597.6 Q F0 .194(Display information only about jobs that ha) +180 597.6 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 609.6 Q F1 +144 621.6 Q F0(List only the process ID of the job')180 621.6 Q 2.5(sp) +-.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 633.6 Q F0 +(Display only running jobs.)180 633.6 Q F1144 645.6 Q F0 +(Display only stopped jobs.)180 645.6 Q(If)144 662.4 Q F2(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 674.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 -2.894 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0 +E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 691.2 R F1 +2.895 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 +3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .394 +(with the corre-)3.164 F(sponding process group ID, and e)144 703.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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(66)190.395 E 0 Cg EP -%%Page: 67 67 +E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(68)185.955 E 0 Cg EP +%%Page: 69 69 %%BeginPageSetup BP %%EndPageSetup @@ -8160,60 +8401,60 @@ SF(kill)108 84 Q F0([)2.5 E F1A/F2 10/Times-Italic@0 SF(sigspec) (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 +2.828 E .319(either a case-insensiti)144 120 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 132 Q F2(signum)3.267 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 -F12.813 E F0 .314(lists the signal names.)2.814 F .314(If an)5.314 +(is assumed.)2.677 F .428(An ar)5.427 F(-)-.2 E .314(gument of)144 144 R +F12.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 -F12.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 F13.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 +F12.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 156 +R .119(guments are listed, and the return status is 0.)-.18 F(The)5.12 E +F2 -.2(ex)2.62 G(it_status).2 E F0(ar)2.62 E(-)-.2 E .8(gument to)144 +168 R F13.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 180 R (The)5.962 E F13.462 E F0 .962(option is equi)3.462 F -.25(va)-.25 G .962(lent to).25 F F13.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) +220.8 Q F2(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 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 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) --2.542 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F2 +(.. | \255 ])-2.5 E -.15(Fo)144 261.6 S 2.541(re).15 G .041(ach ar) +-2.541 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 -(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 +F0 5.042(.T).18 G(he)-5.042 E F2(option)2.542 E F0 .042(can be)2.542 F +(an)144 273.6 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653 +(he options accepted by)-3.153 F F1(declar)3.153 E(e)-.18 E F0 5.652(.W) +C(hen)-5.652 E F1(local)3.152 E F0 .652 (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 +285.6 Q F2(name)3.281 E F0 .421(to ha)3.101 F .721 -.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 +(If)5.422 E F2(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 297.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) -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 -(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 +(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 309.6 R F1(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 321.6 R .881 +(restore is ef)3.381 F .881(fected as if a series of)-.25 F F1(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 333.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 -.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 +(th no operands,).4 F F1(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 345.6 R +.654(It is an error to use)5.655 F F1(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 357.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 @@ -8229,17 +8470,17 @@ F0 2.5(][)C F1-2.5 E F2(quantum)2.5 E F0 2.5(][)C F2(arr)-2.5 E (count)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5(][)C F1-2.5 E F2 (fd)2.5 E F0 2.5(][)C F1-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][) C F1-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 .158(Read lines from the standard input into the inde)144 415.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 -R F13.748 E F0 1.248(option is supplied.)3.748 F 1.249(The v)6.249 +(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 F2(fd)4.629 E F0 1.249(if the)144 427.2 +R F13.749 E F0 1.249(option is supplied.)3.749 F 1.249(The v)6.249 F(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1 -E F2(arr)3.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 F1144 451.2 Q F0 .911 -(The \214rst character of)180 451.2 R F2(delim)3.411 E F0 .911 -(is used to terminate each input line, rather than ne)3.411 F 3.41 +E F2(arr)3.748 E(ay)-.15 E F0 6.248(.O)C 1.248(ptions, if supplied,) +-6.248 F(ha)144 439.2 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 451.2 Q F0 .91 +(The \214rst character of)180 451.2 R F2(delim)3.41 E F0 .911 +(is used to terminate each input line, rather than ne)3.41 F 3.411 (wline. If)-.25 F F2(delim)180 463.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 F1144 475.2 Q F0(Cop)180 475.2 Q 2.5(ya)-.1 G 2.5 @@ -8258,39 +8499,40 @@ E F2(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E (quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F12.5 E F0 (option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1144 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 F12.967 E F0 .467 +F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 564 Q F12.968 E F0 .467 (is speci\214ed without)2.967 F F12.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 -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 -F0 .274(is e)2.774 F -.25(va)-.25 G .274 -(luated after the line is read b).25 F .275 +(luated, it is sup-).25 F .261(plied the inde)144 576 R 2.761(xo)-.15 G +2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be assig\ +ned and the line to be assigned to that element)-.15 F .275 +(as additional ar)144 588 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 600 Q (If not supplied with an e)144 616.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 -(returns successfully unless an in)3.298 F -.25(va)-.4 G .797 +(returns successfully unless an in)3.297 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 .798(is in-)3.298 F -.25(va)144 645.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-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 F1144 710.4 Q F0 .551 +2.5(][)C-2.5 E F2(n)A F0(])A(Remo)144 674.4 Q -.15(ve)-.15 G 3.092 +(se).15 G .592(ntries from the directory stack.)-3.092 F .591 +(The elements are numbered from 0 starting at the \214rst)5.591 F .664 +(directory listed by)144 686.4 R F1(dirs)3.164 E F0 5.664(.W)C .664 +(ith no ar)-6.064 F(guments,)-.18 E F1(popd)3.165 E F0(remo)3.165 E -.15 +(ve)-.15 G 3.165(st).15 G .665(he top directory from the stack, and) +-3.165 F(changes to the ne)144 698.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 F1144 710.4 Q F0 .551 (Suppresses the normal change of directory when remo)180 710.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 722.4 Q(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(69)185.955 E 0 Cg EP +%%Page: 70 70 %%BeginPageSetup BP %%EndPageSetup @@ -8299,1761 +8541,1830 @@ BP 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 F1144 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 F1A 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 +(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero,)-2.64 F .78 +(from the stack.)180 96 R -.15(Fo)5.78 G 3.28(re).15 G(xample:)-3.43 E +/F3 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 F3 .779 +(popd +1)3.279 F F0 .779(the sec-)3.279 F(ond.)180 108 Q F1144 120 Q +F2(n)A F0(Remo)180 120 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 132 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 .094 +(If the top element of the directory stack is modi\214ed, and the)144 +148.8 R F2(-n)2.593 E F0 .093(option w)2.593 F .093(as not supplied,)-.1 +F F1(popd)2.593 E F0(uses)2.593 E(the)144 160.8 Q F1(cd)2.696 E F0 -.2 +(bu)2.696 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.697 +E F0 .197(returns a non-)2.697 F(zero v)144 172.8 Q(alue.)-.25 E +(Otherwise,)144 189.6 Q F1(popd)2.671 E F0 .171(returns f)2.671 F .171 +(alse if an in)-.1 F -.25(va)-.4 G .171 +(lid option is encountered, the directory stack is empty).25 F 2.67(,o) +-.65 G 2.67(ra)-2.67 G(non-e)144 201.6 Q +(xistent directory stack entry is speci\214ed.)-.15 E 1.555(If the)144 +218.4 R F1(popd)4.055 E F0 1.555(command is successful, bash runs)4.055 +F F1(dirs)4.056 E F0 1.556(to sho)4.056 F 4.056(wt)-.25 G 1.556 +(he \214nal contents of the directory)-4.056 F +(stack, and the return status is 0.)144 230.4 Q F1(printf)108 247.2 Q F0 +([)2.5 E F1A 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 259.2 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 F12.857 E F0(op-)2.857 E .714 -(tion causes the output to be assigned to the v)144 201.6 R(ariable)-.25 +(tion causes the output to be assigned to the v)144 271.2 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 283.2 Q(The)144 307.2 Q F2(format)3.018 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 +ape sequences, which are con)144 319.2 R -.15(ve)-.4 G .704 (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 +\214cations, each of which causes printing of the ne)144 331.2 R .036 +(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 343.2 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) +E F0 .532(interprets the follo)3.032 F(w-)-.25 E(ing e)144 355.2 Q +(xtensions:)-.15 E F1(%b)144 367.2 Q F0(causes)180 367.2 Q F1(printf) 2.596 E F0 .096(to e)2.596 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 .095(in the)2.595 F(same w)180 379.2 Q(ay as) +-.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 391.2 Q F0(causes)180 391.2 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 +(input.)180 403.2 Q F1(%Q)144 415.2 Q F0(lik)180 415.2 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 427.2 Q F2(datefmt)A F1(\)T)A F0 +(causes)180 439.2 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 +4.404 E F0 1.903(as a format)4.404 F .38(string for)180 451.2 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 +463.2 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 +(current time, and \2552 represents the time the shell w)180 475.2 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 +3.194 F .694(gument is speci-)-.18 F .21(\214ed, con)180 487.2 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 +F1(printf)2.71 E F0(beha)180 499.2 Q(vior)-.2 E(.)-.55 E .901 +(The %b, %q, and %T directi)144 516 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 +144 528 R 2.858(yb)-.15 G .357 (ytes from \(or use that wide a \214eld for\) the e)-2.858 F .357 (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 540 Q(Ar) +144 556.8 Q .463(guments to non-string format speci\214ers are treated \ +as C constants, e)-.18 F .464(xcept that a leading plus or)-.15 F 1.259 +(minus sign is allo)144 568.8 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) +-.25 F 1.258(alue is the)-.25 F(ASCII v)144 580.8 Q(alue of the follo) +-.25 E(wing character)-.25 E(.)-.55 E(The)144 597.6 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 +609.6 Q F0 .566(than are supplied, the e)3.066 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 +-.25 F(as appropriate, had been supplied.)144 621.6 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 F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C --2.5 E F2(n)A F0(])A F1(pushd)108 568.8 Q F0([)2.5 E F1A F0 +108 638.4 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C +-2.5 E F2(n)A F0(])A F1(pushd)108 650.4 Q F0([)2.5 E F1A 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 -F1144 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) -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 F1144 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 -(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 +irectory stack, or rotates the stack, making the ne)144 662.4 R 3.14(wt) +-.25 G .64(op of the)-3.14 F .089(stack the current w)144 674.4 R .089 +(orking directory)-.1 F 5.089(.W)-.65 G .089(ith no ar)-5.489 F +(guments,)-.18 E F1(pushd)2.589 E F0 -.15(ex)2.588 G .088 +(changes the top tw).15 F 2.588(oe)-.1 G .088(lements of)-2.588 F +(the directory stack.)144 686.4 Q(Ar)5 E(guments, if supplied, ha)-.18 E +.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1144 +698.4 Q F0 1.811(Suppresses the normal change of directory when rotatin\ +g or adding directories to the)180 698.4 R +(stack, so that only the stack is manipulated.)180 710.4 Q(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(70)185.955 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 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 -(he pathname printed contains no)-5.845 F .182(symbolic links if the)144 -148.8 R F22.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 .181(iltin command is).2 F 3.263 -(enabled. If)144 160.8 R(the)3.263 E F23.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-3.816 -E F1(aname)3.816 E F0 3.816(][)C F2-3.816 E F1(delim)3.816 E F0 -3.816(][)C F2-3.816 E F1(te)3.816 E(xt)-.2 E F0 3.816(][)C F2 --3.816 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2 --3.817 E F1(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2-3.817 E -F1(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F2-3.817 E F1(timeout) -3.817 E F0 3.817(][)C F2-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 -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 -(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 -(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 -(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) --.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 -.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 +(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 1.268 +(Rotates the stack so that the)180 84 R F2(n)3.768 E F0 1.267 +(th directory \(counting from the left of the list sho)B 1.267(wn by) +-.25 F F1(dirs)180 96 Q F0 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F1144 108 Q F2(n)A F0 .92(Rotates the stack so that the)180 +108 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 120 Q F0 2.5(,s)C(tarting with zero\) is at the top.)-2.5 +E F2(dir)144.35 132 Q F0(Adds)180 132 Q F2(dir)2.85 E F0 +(to the directory stack at the top)3.23 E .435 +(After the stack has been modi\214ed, if the)144 148.8 R F12.935 E +F0 .434(option w)2.934 F .434(as not supplied,)-.1 F F1(pushd)2.934 E F0 +.434(uses the)2.934 F F1(cd)2.934 E F0 -.2(bu)2.934 G .434(iltin to).2 F +(change to the directory at the top of the stack.)144 160.8 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 +177.6 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 .093 +(When rotating the directory stack,)144 189.6 R F1(pushd)2.593 E F0 .092 +(returns 0 unless the directory stack is empty or a non-e)2.593 F(x-) +-.15 E(istent directory stack element is speci\214ed.)144 201.6 Q 1.277 +(If the)144 218.4 R F1(pushd)3.777 E F0 1.277 +(command is successful, bash runs)3.777 F F1(dirs)3.777 E F0 1.278 +(to sho)3.778 F 3.778(wt)-.25 G 1.278 +(he \214nal contents of the directory)-3.778 F(stack.)144 230.4 Q F1 +(pwd)108 247.2 Q F0([)2.5 E F1(\255LP)A F0(])A .845 +(Print the absolute pathname of the current w)144 259.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 +271.2 R F12.681 E F0 .181(option is supplied or the)2.681 F F1 +.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1 +(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264 +(enabled. If)144 283.2 R(the)3.264 E F13.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 295.2 R -.25(va) +-.4 G .405(lid op-).25 F(tion is supplied.)144 307.2 Q F1 -.18(re)108 +324 S(ad).18 E F0([)3.817 E F1(\255ers)A F0 3.817(][)C F1-3.817 E +F2(aname)3.817 E F0 3.817(][)C F1-3.817 E F2(delim)3.817 E F0 +3.817(][)C F1-3.817 E F2(te)3.817 E(xt)-.2 E F0 3.817(][)C F1 +-3.817 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1 +-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F1-3.816 E +F2(pr)3.816 E(ompt)-.45 E F0 3.816(][)C F1-3.816 E F2(timeout) +3.816 E F0 3.816(][)C F1-3.816 E F2(fd)3.816 E F0(])A([)108 336 Q +F2(name)A F0(...])2.5 E .516(One line is read from the standard input, \ +or from the \214le descriptor)144 348 R F2(fd)3.016 E F0 .516 +(supplied as an ar)3.016 F .517(gument to)-.18 F(the)144 360 Q F1 +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 F1 -.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 372 R F2(name)3.235 E +F0 2.876(,t).18 G .376(he second w)-2.876 F .376(ord to the second)-.1 F +F2(name)3.236 E F0 2.876(,a).18 G .376(nd so on.)-2.876 F .376 +(If there are more w)5.376 F(ords)-.1 E .237 +(than names, the remaining w)144 384 R .237(ords and their interv)-.1 F +.237(ening delimiters are assigned to the last)-.15 F F2(name)3.096 E F0 +5.236(.I).18 G(f)-5.236 E .874(there are fe)144 396 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 408 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 420 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.527(\)m)C(ay)-2.527 E .489 +(be used to remo)144 432 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 F2144 333.6 Q F1(aname)2.5 E F0 1.026 -(The w)180 345.6 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 F2144 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 -(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 -144 405.6 Q F0 .373 -(If the standard input is coming from a terminal,)180 405.6 R F2 -.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 -(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 F2144 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 -(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 F2144 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 +(xt character read and for line continuation.)-.15 F(Op-)5.488 E +(tions, if supplied, ha)144 444 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 456 Q F2(aname)2.5 E F0 1.025(The w) +180 468 R 1.026(ords are assigned to sequential indices of the array v) +-.1 F(ariable)-.25 E F2(aname)3.856 E F0 3.526(,s).18 G 1.026 +(tarting at 0.)-3.526 F F2(aname)180.33 480 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 F1144 492 Q +F2(delim)2.5 E F0 .281(The \214rst character of)180 504 R F2(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 F2(de-)2.78 E(lim)180 516 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 +144 528 Q F0 .372 +(If the standard input is coming from a terminal,)180 528 R F1 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E +-.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E .218 +(to obtain the line.)180 540 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 552 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 F1144 564 Q F2(te)2.5 E(xt)-.2 +E F0(If)180 564 Q F1 -.18(re)2.715 G(adline).18 E F0 .216 +(is being used to read the line,)2.715 F F2(te)2.716 E(xt)-.2 E F0 .216 +(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-) +-.25 F(ing be)180 576 Q(gins.)-.15 E F1144 588 Q F2(nc)2.5 E(har) +-.15 E(s)-.1 E F1 -.18(re)180 600 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 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 -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) -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) -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 +(aiting for a complete line of in-)-.1 F(put, b)180 612 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 +144 624 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 636 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 648 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 660 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 672 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 684 S .669 (riable is assigned e).25 F .669 -(xactly the characters read \(with the e)-.15 F .669 -(xception of backslash; see the)-.15 F F2180 573.6 Q F0 -(option belo)2.5 E(w\).)-.25 E F2144 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 -(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 -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 -144 621.6 Q F0 .544(Backslash does not act as an escape character) -180 621.6 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 -.493(wline pair may not then be used as a line continua-)-.25 F(tion.) -180 645.6 Q F2144 657.6 Q F0(Silent mode.)180 657.6 Q -(If input is coming from a terminal, characters are not echoed.)5 E F2 -144 669.6 Q F1(timeout)2.5 E F0(Cause)180 681.6 Q F2 -.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 -(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\ -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 +(xactly the characters read \(with the e)-.15 F .67 +(xception of backslash; see the)-.15 F F1180 696 Q F0(option belo) +2.5 E(w\).)-.25 E(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(71) +185.955 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 -.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 -F2144 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/F1 10/Times-Bold@0 +SF144 84 Q/F2 10/Times-Italic@0 SF(pr)2.5 E(ompt)-.45 E F0 +(Display)180 96 Q F2(pr)3.661 E(ompt)-.45 E F0 1.161(on standard error) +3.661 F 3.661(,w)-.4 G 1.161(ithout a trailing ne)-3.661 F 1.161 +(wline, before attempting to read)-.25 F(an)180 108 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 +144 120 Q F0 .543(Backslash does not act as an escape character) +180 120 R 5.543(.T)-.55 G .544(he backslash is considered to be part of) +-5.543 F .493(the line.)180 132 R .493(In particular)5.493 F 2.993(,ab) +-.4 G(ackslash-ne)-2.993 E .493 +(wline pair may not then be used as a line continua-)-.25 F(tion.)180 +144 Q F1144 156 Q F0(Silent mode.)180 156 Q +(If input is coming from a terminal, characters are not echoed.)5 E F1 +144 168 Q F2(timeout)2.5 E F0(Cause)180 180 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 192 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 204 Q +(wing the decimal point.)-.25 E(This option is only ef)5 E(fecti)-.25 E +.3 -.15(ve i)-.25 H(f).15 E F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\ +g input from a terminal, pipe, or other special \214le; it has no ef)180 +216 R .505(fect when reading)-.25 F .589(from re)180 228 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 240 S(riable) +.25 E F2(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2(timeout)2.77 E F0 .27 +(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77 +F 2.77(,w)-.65 G .27(ithout trying to read an)-2.77 F 2.77(yd)-.15 G +(ata.)-2.77 E .227(The e)180 252 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.728(rt)-2.728 G .228(he read will re-)-2.728 F +1.225(turn EOF)180 264 R 3.725(,n)-.8 G 1.225(on-zero otherwise.)-3.725 +F 1.225(The e)6.225 F 1.225 +(xit status is greater than 128 if the timeout is e)-.15 F(x-)-.15 E +(ceeded.)180 276 Q F1144 288 Q F2(fd)2.5 E F0 +(Read input from \214le descriptor)180 288 Q F2(fd)2.5 E F0(.)A .522 +(If no)144 304.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 +316.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 +(xit status is zero, unless end-of-\214le is encountered,)-.15 F F1 -.18 (re)3.686 G(ad).18 E F0 .96 (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) +328.8 R .961(ariable assignment error \(such as as-)-.25 F .707 +(signing to a readonly v)144 340.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 F2144 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-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 .706(gument to)-.18 F F1144 352.8 Q F0(.)A F1 -.18(re)108 +369.6 S(adonly).18 E F0([)2.5 E F1(\255aAf)A F0 2.5(][)C F1-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 381.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 F23.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 F23.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.097 +(quent assignment.)144 393.6 R 1.097(If the)6.097 F F13.597 E F0 +1.097(option is supplied, the functions corresponding to the)3.597 F F2 +(names)3.596 E F0 1.096(are so)3.596 F(mark)144 405.6 Q 3.334(ed. The) +-.1 F F13.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 F23.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 F23.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 F23.021 E F0 .521 +-3.334 F F13.334 E F0 .834(option restricts the v)3.334 F(ari-) +-.25 E .777(ables to associati)144 417.6 R 1.077 -.15(ve a)-.25 H 3.277 +(rrays. If).15 F .777(both options are supplied,)3.277 F F13.277 E +F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F2(name) +3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 429.6 R -.15(ve) +-.25 G .521(n, or if the).15 F F13.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 +to a subset of the set of readonly names.)144 441.6 R(The)5.295 E F1 2.795 E F0(option)2.795 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 453.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144 +465.6 Q .718(wed by =)-.25 F F2(wor)A(d)-.37 E F0 3.218(,t)C .718(he v) +-3.218 F .718(alue of the v)-.25 F .718(ariable is set to)-.25 F F2(wor) 3.218 E(d)-.37 E F0 5.718(.T)C .718(he return status is 0 unless an in) -5.718 F -.25(va)-.4 G(lid).25 E .26(option is encountered, one of the) -144 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 F22.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 +144 477.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 F12.76 E F0 .26 +(is supplied with a)2.76 F F2(name)144.36 489.6 Q F0 +(that is not a function.)2.68 E F1 -.18(re)108 506.4 S(tur).18 E(n)-.15 +E F0([)2.5 E F2(n)A F0(])A .021(Causes a function to stop e)144 518.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) +(alue speci\214ed by)-.25 F F2(n)2.88 E F0 .02(to its caller)2.76 F 5.02 +(.I)-.55 G(f)-5.02 E F2(n)2.88 E F0 .02(is omitted,)2.76 F .596 +(the return status is that of the last command e)144 530.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 +F1 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15 +G(cuted).15 E .267(by a trap handler)144 542.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 +144 554.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 +.886(mine the status is the last command e)144 566.4 R -.15(xe)-.15 G +.886(cuted by the trap handler before).15 F F1 -.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 +.4 G 3.385(d. If).1 F F1 -.18(re)144 578.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 +-.15 G .628(cution of a script by the).15 F F1(.)3.128 E F0(\()5.628 E +F1(sour)A(ce)-.18 E F0 3.128(\)c)C .628(ommand, it)-3.128 F .589 +(causes the shell to stop e)144 590.4 R -.15(xe)-.15 G .589 +(cuting that script and return either).15 F F2(n)3.448 E F0 .588 (or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e) -144 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 +144 602.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F +.326(xit status of the script.)-.15 F(If)5.326 E F2(n)2.826 E F0 .326 (is supplied, the return v)2.826 F .326(alue is)-.25 F .445 -(its least signi\214cant 8 bits.)144 446.4 R .444 -(The return status is non-zero if)5.445 F F2 -.18(re)2.944 G(tur).18 E +(its least signi\214cant 8 bits.)144 614.4 R .444 +(The return status is non-zero if)5.445 F F1 -.18(re)2.944 G(tur).18 E (n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381 -(ment, or is used outside a function and not during e)144 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 +(ment, or is used outside a function and not during e)144 626.4 R -.15 +(xe)-.15 G .381(cution of a script by).15 F F1(.)2.881 E F0(or)3.714 E +F1(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15 +E .75(mand associated with the)144 638.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-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 F2144 -595.2 Q F0 1.378(Each v)184 595.2 R 1.377 +G .749(cution resumes after the function).15 F(or script.)144 650.4 Q F1 +(set)108 667.2 Q F0([)2.5 E F1(\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1 +-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5 +(][)C F1-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1 +(set)108 679.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-2.5 E F0 2.5(][)C F1 +-2.5 E F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 +691.2 S .573(thout options, display the name and v).4 F .573 +(alue of each shell v)-.25 F .574 +(ariable in a format that can be reused)-.25 F .113 +(as input for setting or resetting the currently-set v)144 703.2 R 2.613 +(ariables. Read-only)-.25 F -.25(va)2.613 G .113 +(riables cannot be reset.).25 F(In)5.112 E F2 1.032(posix mode)144 715.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 1.843(When options are speci\214ed, the)144 727.2 R 4.343(ys)-.15 G +1.843(et or unset shell attrib)-4.343 F 4.343(utes. An)-.2 F 4.343(ya) +-.15 G -.18(rg)-4.343 G 1.843(uments remaining after).18 F(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(72)185.955 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 .504 +(option processing are treated as v)144 84 R .505 +(alues for the positional parameters and are assigned, in order)-.25 F +3.005(,t)-.4 G(o)-3.005 E/F1 10/Times-Bold@0 SF($1)144 96 Q F0(,)A F1 +($2)2.5 E F0(,)A F1 2.5(... $)2.5 F/F2 10/Times-Italic@0 SF(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 F1144 108 Q F0 1.378(Each v)184 108 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 F2144 619.2 Q F0 .131 -(Report the status of terminated background jobs immediately)184 619.2 R +1.377(ute and)-.2 F(mark)184 120 Q(ed for e)-.1 E(xport to the en)-.15 E +(vironment of subsequent commands.)-.4 E F1144 132 Q F0 .131 +(Report the status of terminated background jobs immediately)184 132 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 F2144 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 +(primary prompt.)184 144 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)-.25 +H(nly when job control is enabled.).15 E F1144 156 Q F0 .088 +(Exit immediately if a)184 156 R F2(pipeline)2.588 E F0 .087 +(\(which may consist of a single)2.588 F F2 .087(simple command)2.587 F +F0 .087(\), a)B F2(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 168 Q F2 +1.52(compound command)4.02 F F0(\(see)4.021 E/F3 9/Times-Bold@0 SF 1.521 +(SHELL GRAMMAR)4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F +1.521(xits with a non-zero status.)-.15 F .08(The shell does not e)184 +180 R .079(xit if the command that f)-.15 F .079 +(ails is part of the command list immediately)-.1 F(follo)184 192 Q +1.654(wing a)-.25 F F1(while)4.154 E F0(or)4.154 E F1(until)4.154 E F0 -.1(ke)4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655 -(wing the)-.25 F 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) +(wing the)-.25 F F1(if)4.155 E F0(or)4.155 E F1(elif)4.155 E F0(reserv) +4.155 E(ed)-.15 E -.1(wo)184 204 S .582(rds, part of an).1 F 3.082(yc) +-.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F1 +(&&)3.081 E F0(or)3.081 E F1(||)3.081 E F0 .581(list e)3.081 F .581 +(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 216 R +F1(&&)3.417 E F0(or)3.417 E F1(||)3.417 E F0 3.417(,a)C 1.217 -.15(ny c) -3.417 H .918(ommand in a pipeline b).15 F .918 (ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E --.25(va)184 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 +-.25(va)184 228 S .661(lue is being in).25 F -.15(ve)-.4 G .661 +(rted with).15 F F1(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66 (ompound command other than a subshell returns a)-3.161 F 1.112 -(non-zero status because a command f)184 727.2 R 1.112(ailed while)-.1 F -F23.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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 +(non-zero status because a command f)184 240 R 1.112(ailed while)-.1 F +F13.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113 +(eing ignored, the shell does)-3.612 F .178(not e)184 252 R 2.678 +(xit. A)-.15 F .178(trap on)2.678 F F1(ERR)2.678 E F0 2.678(,i)C 2.678 +(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)-.15 G .178 +(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177 +(option applies to)2.677 F .617(the shell en)184 264 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 F3 .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR)184 276 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 +(xe)-.15 G .642(cuting all).15 F(the commands in the subshell.)184 288 Q +.998(If a compound command or shell function e)184 306 R -.15(xe)-.15 G .999(cutes in a conte).15 F .999(xt where)-.15 F F13.499 E F0 .999 -(is being ig-)3.499 F .089(nored, none of the commands e)184 150 R -.15 +(is being ig-)3.499 F .089(nored, none of the commands e)184 318 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 F13.002 E F0 +.502(will be af)184 330 R .502(fected by the)-.25 F F13.002 E F0 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1 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 +(ailure sta-)-.1 F 4.184(tus. If)184 342 R 4.184(ac)4.184 G 1.684 (ompound command or shell function sets)-4.184 F F14.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 F13.153 E F0 .653 +-.15 E(where)184 354 Q F13.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 -144 210 Q F0(Disable pathname e)184 210 Q(xpansion.)-.15 E F1 -144 222 Q F0 .988(Remember the location of commands as the)184 222 +(or the command containing the function call completes.)184 366 Q F1 +144 378 Q F0(Disable pathname e)184 378 Q(xpansion.)-.15 E F1 +144 390 Q F0 .988(Remember the location of commands as the)184 390 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 F1144 246 Q F0 .513(All ar)184 246 R .514 +-.15 G 3.488(cution. This).15 F .987(is en-)3.487 F(abled by def)184 402 +Q(ault.)-.1 E F1144 414 Q F0 .513(All ar)184 414 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 -144 270 Q F0 .149(Monitor mode.)184 270 R .149 +(command, not just those that precede the command name.)184 426 Q F1 +144 438 Q F0 .149(Monitor mode.)184 438 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 +(on systems that support it \(see)184 450 R F3 .651(JOB CONTR)3.151 F (OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651 -(processes run in a separate)3.151 F .679(process group.)184 294 R .678 +(processes run in a separate)3.151 F .679(process group.)184 462 R .678 (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 F1144 318 Q F0 .652 -(Read commands b)184 318 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652 +s)5.679 F -.15(ex)184 474 S(it status.).15 E F1144 486 Q F0 .652 +(Read commands b)184 486 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 F1144 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 F12.5 E F0(.)A F1(braceexpand)184 390 Q F0 -(Same as)224 402 Q F12.5 E F0(.)A F1(emacs)184 414 Q F0 .089 -(Use an emacs-style command line editing interf)224 414 R 2.589 +5.652 F(syntax errors.)184 498 Q(This is ignored by interacti)5 E .3 +-.15(ve s)-.25 H(hells.).15 E F1144 510 Q F2(option\255name)2.5 E +F0(The)184 522 Q F2(option\255name)2.5 E F0(can be one of the follo)2.5 +E(wing:)-.25 E F1(allexport)184 534 Q F0(Same as)224 546 Q F12.5 E +F0(.)A F1(braceexpand)184 558 Q F0(Same as)224 570 Q F12.5 E F0(.) +A F1(emacs)184 582 Q F0 .089 +(Use an emacs-style command line editing interf)224 582 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 594 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 606 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 F12.5 E F0(.)A F1 -(errtrace)184 462 Q F0(Same as)224 462 Q F12.5 E F0(.)A F1 -(functrace)184 474 Q F0(Same as)224 486 Q F12.5 E F0(.)A F1 -(hashall)184 498 Q F0(Same as)224 498 Q F12.5 E F0(.)A F1 -(histexpand)184 510 Q F0(Same as)224 522 Q F12.5 E F0(.)A F1 -(history)184 534 Q F0 .587(Enable command history)224 534 R 3.087(,a) +184 618 Q(exit)-.18 E F0(Same as)224 618 Q F12.5 E F0(.)A F1 +(errtrace)184 630 Q F0(Same as)224 630 Q F12.5 E F0(.)A F1 +(functrace)184 642 Q F0(Same as)224 654 Q F12.5 E F0(.)A F1 +(hashall)184 666 Q F0(Same as)224 666 Q F12.5 E F0(.)A F1 +(histexpand)184 678 Q F0(Same as)224 690 Q F12.5 E F0(.)A F1 +(history)184 702 Q F0 .587(Enable command history)224 702 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 -(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 -(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 -2.5 E F0(.)A F1(monitor)184 618 Q F0(Same as)224 618 Q F12.5 -E F0(.)A F1(noclob)184 630 Q(ber)-.1 E F0(Same as)224 642 Q F12.5 -E F0(.)A F1(noexec)184 654 Q F0(Same as)224 654 Q F12.5 E F0(.)A -F1(noglob)184 666 Q F0(Same as)224 666 Q F12.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 F12.5 E F0(.)A F1(nounset)184 702 Q F0(Same as) -224 702 Q F12.5 E F0(.)A F1(onecmd)184 714 Q F0(Same as)224 714 Q -F12.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 +H(nder).15 E F3(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 714 Q +(ault in interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E(GNU Bash 5.2) +72 768 Q(2021 December 26)136.795 E(73)185.955 E 0 Cg EP +%%Page: 74 74 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(ph)184 84 Q(ysical)-.15 E F0(Same as)224 84 Q F12.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(ignor)184 84 Q(eeof)-.18 E F0 1.656(The ef)224 96 R 1.656 +(fect is as if the shell command)-.25 F/F2 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 +108 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 120 S(yw).1 E(ord)-.1 E F0(Same as)224 132 Q F1 +2.5 E F0(.)A F1(monitor)184 144 Q F0(Same as)224 144 Q F12.5 +E F0(.)A F1(noclob)184 156 Q(ber)-.1 E F0(Same as)224 168 Q F12.5 +E F0(.)A F1(noexec)184 180 Q F0(Same as)224 180 Q F12.5 E F0(.)A +F1(noglob)184 192 Q F0(Same as)224 192 Q F12.5 E F0(.)A F1(nolog) +184 204 Q F0(Currently ignored.)224 204 Q F1(notify)184 216 Q F0 +(Same as)224 216 Q F12.5 E F0(.)A F1(nounset)184 228 Q F0(Same as) +224 228 Q F12.5 E F0(.)A F1(onecmd)184 240 Q F0(Same as)224 240 Q +F12.5 E F0(.)A F1(ph)184 252 Q(ysical)-.15 E F0(Same as)224 252 Q +F12.5 E F0(.)A F1(pipefail)184 264 Q F0 1.03(If set, the return v) +224 264 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 276 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 288 S(it successfully).15 E 5(.T)-.65 G +(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 300 Q F0 +2.091(Change the beha)224 300 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 +312 R/F3 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F4 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 +(for a reference to a document that details ho)224 324 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 F12.5 E F0(.)A F1 -.1(ve)184 204 S(rbose).1 E -F0(Same as)224 204 Q F12.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 +-3.454 E(ha)224 336 Q(vior)-.2 E(.)-.55 E F1(pri)184 348 Q(vileged)-.1 E +F0(Same as)224 360 Q F12.5 E F0(.)A F1 -.1(ve)184 372 S(rbose).1 E +F0(Same as)224 372 Q F12.5 E F0(.)A F1(vi)184 384 Q F0 .209 +(Use a vi-style command line editing interf)224 384 R 2.709(ace. This) +-.1 F .209(also af)2.709 F .21(fects the editing in-)-.25 F(terf)224 396 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 F12.5 E F0(.)A(If)184 258 Q F1 -3.053 E F0 .553(is supplied with no)3.053 F F2(option\255name) +184 408 Q F0(Same as)224 408 Q F12.5 E F0(.)A(If)184 426 Q F1 +3.053 E F0 .553(is supplied with no)3.053 F F3(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 +438 Q F0 1.071(is supplied with no)3.571 F F3(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 -144 294 Q F0 -.45(Tu)184 294 S 1.072(rn on).45 F F2(privile)4.822 E -.1 +(option settings is displayed on the standard output.)184 450 Q F1 +144 462 Q F0 -.45(Tu)184 462 S 1.072(rn on).45 F F3(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 +F4($ENV)3.572 E F0(and)3.322 E F4($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 +(cessed, shell functions are not inherited from the en)184 474 R 1.501 +(vironment, and the)-.4 F F4(SHELLOPTS)4.001 E/F5 9/Times-Roman@0 SF(,)A +F4 -.27(BA)184 486 S(SHOPTS).27 E F5(,)A F4(CDP)2.775 E -.855(AT)-.666 G +(H).855 E F5(,)A F0(and)2.775 E F4(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 +(vironment,)-.4 E .379(are ignored.)184 498 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 F12.961 E F0 .461 +(user \(group\) id, and the)184 510 R F12.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 +(en and the ef)-.1 F(fec-)-.25 E(ti)184 522 Q .694 -.15(ve u)-.25 H .394 (ser id is set to the real user id.).15 F .395(If the)5.395 F F1 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 +E -.15(ve)-.25 G .387(user id is not reset.)184 534 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 F1144 390 Q F0 -(Exit after reading and e)184 390 Q -.15(xe)-.15 G(cuting one command.) -.15 E F1144 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 F1144 450 Q F0(Print shell input lines as the)184 450 Q 2.5 -(ya)-.15 G(re read.)-2.5 E F1144 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 -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 F1144 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 +(set to the real user and group ids.)184 546 Q F1144 558 Q F0 +(Enable restricted shell mode.)184 558 Q +(This option cannot be unset once it has been set.)5 E F1144 570 Q +F0(Exit after reading and e)184 570 Q -.15(xe)-.15 G +(cuting one command.).15 E F1144 582 Q F0 -.35(Tr)184 582 S .773 +(eat unset v).35 F .773(ariables and parameters other than the special \ +parameters "@" and "*", or)-.25 F .46(array v)184 594 R .459(ariables s\ +ubscripted with "@" or "*", as an error when performing parameter e)-.25 +F(x-)-.15 E 2.89(pansion. If)184 606 R -.15(ex)2.89 G .391 +(pansion is attempted on an unset v).15 F .391(ariable or parameter)-.25 +F 2.891(,t)-.4 G .391(he shell prints an)-2.891 F +(error message, and, if not interacti)184 618 Q -.15(ve)-.25 G 2.5(,e) +.15 G(xits with a non-zero status.)-2.65 E F1144 630 Q F0 +(Print shell input lines as the)184 630 Q 2.5(ya)-.15 G(re read.)-2.5 E +F1144 642 Q F0 .315(After e)184 642 R .315(xpanding each)-.15 F F3 +.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 654 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 F4(PS4)3.736 E F5(,)A F0(follo)3.486 E 1.236 +(wed by the com-)-.25 F(mand and its e)184 666 Q(xpanded ar)-.15 E +(guments or associated w)-.18 E(ord list.)-.1 E F1144 678 Q F0 +1.206(The shell performs brace e)184 678 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 690 S(ult.).1 E F1 +144 702 Q F0 .213(If set,)184 702 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 +3.054(tors. This)184 714 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 -144 558 Q F0 .103(If set, an)184 558 R 2.603(yt)-.15 G .103 +.15 F(tor)184 726 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(74)185.955 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 +SF144 84 Q F0 .103(If set, an)184 84 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 -144 594 Q F0(Enable)184 594 Q F1(!)3.031 E F0 .531 +F .839(mands e)184 96 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 108 Q F1 +144 120 Q F0(Enable)184 120 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 F1144 618 Q F0 .96 -(If set, the shell does not resolv)184 618 R 3.459(es)-.15 G .959 +F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 132 Q -.15 +(ve)-.25 G(.).15 E F1144 144 Q F0 .96 +(If set, the shell does not resolv)184 144 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 +(that change the current w)184 156 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) +(ysical directory structure in-)-.05 F 3.335(stead. By)184 168 R(def) 3.335 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 F1144 -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 180 Q(.)-.65 E F1144 +192 Q F0 .89(If set, an)184 192 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 204 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 F1144 702 Q -F0 .4(If no ar)184 702 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401 +(UG)-.1 E F0(and)4.432 E F1(RETURN)184 216 Q F0 +(traps are normally not inherited in such cases.)2.5 E F1144 228 Q +F0 .4(If no ar)184 228 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 F12.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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 -SF144 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 F13.021 E F0(and)3.022 E F1 -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 +(Otherwise,)5.401 E(the positional parameters are set to the)184 240 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 +2.5 E F0(.)A F1144 252 Q F0 .797 +(Signal the end of options, cause all remaining)184 252 R F2(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 264 R F1 +3.021 E F0(and)3.022 E F13.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 276 Q .425(The options are of)144 292.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 +(to be turned of)144 304.8 R 2.677(f. The)-.25 F .178 (options can also be speci\214ed as ar)2.678 F .178(guments to an in) -.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066 -(current set of options may be found in)144 148.8 R F1<24ad>2.566 E F0 +(current set of options may be found in)144 316.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 +(is encountered.)144 328.8 Q F1(shift)108 345.6 Q F0([)2.5 E F2(n)A F0 +(])A .428(The positional parameters from)144 357.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 +.429(rameters represented by the num-).15 F(bers)144 369.6 Q F1($#)2.583 E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0A 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 +(is 0, no parameters are changed.)144 381.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 +(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 393.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([) +(or less than zero; otherwise 0.)144 405.6 Q F1(shopt)108 422.4 Q F0([) 2.5 E F1(\255pqsu)A F0 2.5(][)C F1-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 434.4 S .639(ggle the v).8 F .639 (alues of settings controlling optional shell beha)-.25 F(vior)-.2 E 5.639(.T)-.55 G .64(he settings can be either those)-5.639 F .375 -(listed belo)144 278.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H +(listed belo)144 446.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 F12.875 E F0 .375 (option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 F F12.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 +(bu)2.874 G .374(iltin com-).2 F 2.565(mand. W)144 458.4 R .065 (ith no options, or with the)-.4 F F12.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 470.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 F13.105 E F0 .605(option causes output to\ +(tions. The)144 482.4 R F13.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 F1144 338.4 Q F0(Enable \(set\) each)180 -338.4 Q F2(optname)2.5 E F0(.)A F1144 350.4 Q F0 -(Disable \(unset\) each)180 350.4 Q F2(optname)2.5 E F0(.)A F1144 -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(options ha)144 494.4 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F1144 506.4 Q F0(Enable \(set\) each)180 +506.4 Q F2(optname)2.5 E F0(.)A F1144 518.4 Q F0 +(Disable \(unset\) each)180 518.4 Q F2(optname)2.5 E F0(.)A F1144 +530.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\ +tus indicates whether the)180 530.4 R F2(optname)2.503 E F0(is)2.503 E +.255(set or unset.)180 542.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 F12.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 F1144 398.4 Q F0 -(Restricts the v)180 398.4 Q(alues of)-.25 E F2(optname)2.5 E F0 +(he return status is zero if)-2.756 F(all)180 554.4 Q F2(optnames)2.5 E +F0(are enabled; non-zero otherwise.)2.5 E F1144 566.4 Q F0 +(Restricts the v)180 566.4 Q(alues of)-.25 E F2(optname)2.5 E F0 (to be those de\214ned for the)2.5 E F12.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 +E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .625(If either)144 583.2 R F1 3.125 E F0(or)3.124 E F13.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) +(set or unset, respecti)144 595.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 +(options are disabled \(unset\) by de-)3.484 F -.1(fa)144 607.2 S(ult.) +.1 E 1.544(The return status when listing options is zero if all)144 624 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)4.044 F .696 (When setting or unsetting options, the return status is zero unless an) -144 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 +144 636 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell) +-.25 F(option.)144 648 Q(The list of)144 664.8 Q F1(shopt)2.5 E F0 +(options is:)2.5 E F1(assoc_expand_once)144 682.8 Q F0 1.945 +(If set, the shell suppresses multiple e)184 694.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 +(rray subscripts during).15 F .885(arithmetic e)184 706.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 -(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 +(ariable as-)-.25 F(signments, and while e)184 718.8 Q -.15(xe)-.15 G +(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(75)185.955 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(autocd)144 84 Q F0 .2 +(If set, a command name that is the name of a directory is e)184 84 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 +(ment to the)184 96 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 +F1(cdable_v)144 108 Q(ars)-.1 E F0 .155(If set, an ar)184 120 R .155 (gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156 (iltin command that is not a directory is assumed to be the).2 F -(name of a v)184 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 132 Q(ariable whose v)-.25 E +(alue is the directory to change to.)-.25 E F1(cdspell)144 144 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 +144 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987 +(corrected. The)184 156 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) +-.4 G(nd)-3.988 E .77(one character too man)184 168 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 -(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 -(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 +(the command proceeds.)184 180 Q(This option is only used by interacti)5 +E .3 -.15(ve s)-.25 H(hells.).15 E F1(checkhash)144 192 Q F0 .736 +(If set,)184 204 R F1(bash)3.236 E F0 .736 +(checks that a command found in the hash table e)3.236 F .737 +(xists before trying to e)-.15 F -.15(xe)-.15 G(-).15 E(cute it.)184 216 +Q(If a hashed command no longer e)5 E +(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 228 Q +F0 .449(If set,)184 240 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 +F -.15(ve)-.25 G 2.661(shell. If)184 252 R(an)2.661 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 .162(xit is at-)-.15 F 1.473 +(tempted without an interv)184 264 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.472(shell al-)3.972 F -.1(wa)184 276 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 288 Q F0 1.09(If set,)184 300 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 312 Q 3.351(,u)-.65 G .851(pdates the v)-3.351 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 324 S(ult.).1 E F1(cmdhist)144 336 Q F0 .172(If set,)184 336 R +F1(bash)2.672 E F0 .172(attempts to sa)2.672 F .472 -.15(ve a)-.2 H .173 (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 348 Q 5.597(.T)-.65 G .597(his allo)-5.597 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 360 S 1.287(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 +(ve u)-.15 H(nder).15 E F2(HIST)184 372 Q(OR)-.162 E(Y)-.315 E F3(.)A F1 +(compat31)144 384 Q(compat32)144 396 Q(compat40)144 408 Q(compat41)144 +420 Q(compat42)144 432 Q(compat43)144 444 Q(compat44)144 456 Q(compat50) +144 468 Q F0 .889(These control aspects of the shell')184 480 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 492 Q F0(belo)2.25 E +(w\).)-.25 E F1(complete_fullquote)144 508.8 Q F0 .653(If set,)184 520.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.525 +(forming completion.)184 532.8 R 1.524(If not set,)6.525 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 +544.8 R .029(metacharacters appear in shell v)184 556.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 568.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 580.8 T 1.923 -.4(r, a).25 H 1.423 -.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 (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 +592.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 604.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 621.6 Q(expand)-.18 E F0 .487 +(If set,)184 633.6 R F1(bash)2.987 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 +645.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 +657.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 674.4 Q F0 .859(If set,)184 +674.4 R F1(bash)3.359 E F0 .858 (attempts spelling correction on directory names during w)3.359 F .858 (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 686.4 Q(xist.)-.15 +E F1(dotglob)144 703.2 Q F0 .165(If set,)184 703.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 715.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 -(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 -(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 -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 F24.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 -(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 +(,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(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(76) +185.955 E 0 Cg EP +%%Page: 77 77 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F (Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0 -SF(3.)184 84 Q F0 .841(If the command run by the)220 84 R F1(DEB)3.341 E +SF(execfail)144 84 Q F0 .517(If set, a non-interacti)184 84 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(cute the \214le speci\214ed as an ar).15 F(-)-.2 E +(gument to the)184 96 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 112.8 Q +F0 .716(If set, aliases are e)184 124.8 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 .717(This option is enabled)5.217 F +(by def)184 136.8 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.) +.15 E F1(extdeb)144 153.6 Q(ug)-.2 E F0 .17(If set at shell in)184 165.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 177.6 R F1 +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 189.6 Q +(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184 +206.4 Q F0(The)220 206.4 Q F14.251 E F0 1.751(option to the)4.251 +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 218.4 +Q(gument.)-.18 E F1(2.)184 235.2 Q F0 1.667(If the command run by the) +220 235.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 247.2 Q -.15(xe)-.15 G(cuted.).15 E F1 +(3.)184 264 Q F0 .841(If the command run by the)220 264 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 +(alue of 2, and the shell is)-.25 F -.15(exe)220 276 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 288 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 -.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) --2.5 E F1(\()2.5 E/F3 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0 +(n)-.15 E F0(.)A F1(4.)184 304.8 Q F2 -.27(BA)220 304.8 S(SH_ARGC).27 E +F0(and)3.154 E F2 -.27(BA)3.404 G(SH_ARGV).27 E F0 .904 +(are updated as described in their descriptions)3.154 F(abo)220 316.8 Q +-.15(ve)-.15 G(.).15 E F1(5.)184 333.6 Q F0 1.637(Function tracing is e\ +nabled: command substitution, shell functions, and sub-)220 333.6 R +(shells in)220 345.6 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 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 362.4 Q F0 1.082(Error tracing is enabled: comm\ +and substitution, shell functions, and subshells)220 362.4 R(in)220 +374.4 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 211.2 Q F0 .4(If set, the e)184 211.2 R .4 +2.5 E F1(extglob)144 391.2 Q F0 .4(If set, the e)184 391.2 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 -(")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 +-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 403.2 Q +F0(are enabled.)2.5 E F1(extquote)144 420 Q F0 .86(If set,)184 432 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 444 Q +(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 460.8 Q +F0 .242(If set, patterns which f)184 460.8 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 472.8 Q(.) +-.55 E F1 -.25(fo)144 489.6 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0 +.937(If set, the suf)184 501.6 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 .936(ords to be ignored)-.1 F .32(when performing w)184 513.6 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 +(pletions. See)184 525.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 +(FIGNORE)2.947 E F3(.)A F0 .447(This option is)4.947 F(enabled by def) +184 537.6 Q(ault.)-.1 E F1(globasciiranges)144 554.4 Q F0 2.518 +(If set, range e)184 566.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) +(Matching)184 578.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 (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 590.4 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 +F1(b)3.52 E F0 1.02(will not)3.52 F .957(collate between)184 602.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(**) -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 -(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 -(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 -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 -(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 -(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 +(-case ASCII characters will collate)-.2 F(together)184 614.4 Q(.)-.55 E +F1(globskipdots)144 631.2 Q F0 .284(If set, pathname e)184 643.2 R .284 +(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.785 G(..).63 E -.63('')-.55 G F0 2.785(,e) +.63 G -.15(ve)-3.035 G 2.785(ni).15 G 2.785(ft)-2.785 G .285(he pat-) +-2.785 F(tern be)184 655.2 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 672 Q F0 .519(If set, the pattern)184 672 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 684 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 +696 Q(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(77)185.955 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(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 -(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 +SF(gnu_errfmt)144 84 Q F0(If set, shell error messages are written in t\ +he standard GNU error message format.)184 96 Q F1(histappend)144 112.8 Q +F0 .676 +(If set, the history list is appended to the \214le named by the v)184 +124.8 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 136.8 Q +(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F1 +(histr)144 153.6 Q(eedit)-.18 E F0 .575(If set, and)184 165.6 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 177.6 Q F1(histv)144 +194.4 Q(erify)-.1 E F0 .403(If set, and)184 206.4 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 218.4 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 230.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 247.2 Q F0 1.182(If set, and)184 259.2 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 271.2 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 283.2 Q -.15(ve)-.15 G 2.5(\). This).15 F +(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 300 Q F0(If set,) +184 312 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 328.8 Q(exit)-.18 E F0 .22 +(If set, command substitution inherits the v)184 340.8 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 352.8 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 369.6 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 381.6 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 393.6 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 +E -.15(ve)-.15 G 3.467(\). This).15 F .967(option is)3.467 F +(enabled by def)184 405.6 Q(ault.)-.1 E F1(lastpipe)144 422.4 Q F0 .066 +(If set, and job control is not acti)184 422.4 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 434.4 Q(vironment.) +-.4 E F1(lithist)144 451.2 Q F0 .655(If set, and the)184 451.2 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 463.2 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 480 Q(ar_inherit)-.1 E F0 .421(If set, local v)184 492 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 -(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 -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\ +504 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 516 Q +F1(localv)144 532.8 Q(ar_unset)-.1 E F0 .328(If set, calling)184 544.8 R +F1(unset)2.828 E F0 .328(on local v)2.828 F .329(ariables in pre)-.25 F +.329(vious function scopes marks them so subse-)-.25 F .543(quent looku\ ps \214nd them unset until that function returns. This is identical to \ -the beha)184 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 556.8 R(v-)-.2 E(ior of unsetting local v)184 568.8 Q +(ariables at the current function scope.)-.25 E F1(login_shell)144 585.6 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 -(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 +597.6 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 609.6 S(lue may not be changed.) +.25 E F1(mailwar)144 626.4 Q(n)-.15 E F0 .815(If set, and a \214le that) +184 638.4 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 650.4 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 -(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 -.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 +667.2 Q F0 .324(If set, and)184 679.2 R F1 -.18(re)2.824 G(adline).18 E +F0 .324(is being used,)2.824 F F1(bash)2.824 E F0 .324 +(will not attempt to search the)2.824 F F2 -.666(PA)2.825 G(TH)-.189 E +F0 .325(for possible)2.575 F +(completions when completion is attempted on an empty line.)184 691.2 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(78)185.955 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(nocaseglob)144 84 Q F0 .437(If set,)184 96 R F1(bash)2.937 E F0 .436 +(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25 +H .436(ashion when performing pathname).05 F -.15(ex)184 108 S (pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E --.15(ve)-.15 G(\).).15 E F1(nocasematch)144 532.8 Q F0 1.194(If set,)184 -544.8 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 +-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 124.8 Q F0 1.193(If set,)184 +136.8 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 148.8 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 160.8 S .622(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 +172.8 Q F1(noexpand_translation)144 189.6 Q F0 1.118(If set,)184 201.6 R +F1(bash)3.618 E F0 1.117(encloses the translated results of $"..." quot\ +ing in single quotes instead of)3.617 F(double quotes.)184 213.6 Q +(If the string is not translated, this has no ef)5 E(fect.)-.25 E F1 +(nullglob)144 230.4 Q F0 .854(If set,)184 242.4 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 254.4 S +(pand to a null string, rather than themselv).15 E(es.)-.15 E F1 +(patsub_r)144 271.2 Q(eplacement)-.18 E F0 .106(If set,)184 283.2 R F1 +(bash)2.606 E F0 -.15(ex)2.606 G .106(pands occurrences of).15 F F1(&) +2.606 E F0 .105(in the replacement string of pattern substitution to) +2.606 F .527(the te)184 295.2 R .527 +(xt matched by the pattern, as described under)-.15 F F1 -.1(Pa)3.028 G +.528(rameter Expansion).1 F F0(abo)3.028 E -.15(ve)-.15 G 5.528(.T).15 G +(his)-5.528 E(option is enabled by def)184 307.2 Q(ault.)-.1 E F1(pr)144 +324 Q(ogcomp)-.18 E F0 .677(If set, the programmable completion f)184 +336 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 +(are enabled.)184 348 Q(This option is enabled by def)5 E(ault.)-.1 E F1 +(pr)144 364.8 Q(ogcomp_alias)-.18 E F0 2.124 +(If set, and programmable completion is enabled,)184 376.8 R F1(bash) +4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 388.8 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 +(xpansion. If it has)-.15 F 1.473(an alias,)184 400.8 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 +1.473(ord resulting)-.1 F(from the e)184 412.8 Q(xpanded alias.)-.15 E +F1(pr)144 429.6 Q(omptv)-.18 E(ars)-.1 E F0 1.448 +(If set, prompt strings under)184 441.6 R 1.448(go parameter e)-.18 F +1.447(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 +453.6 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 +(.).15 E(This option is enabled by def)184 465.6 Q(ault.)-.1 E F1 -.18 +(re)144 482.4 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 494.4 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 506.4 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 518.4 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 +E F1(shift_v)144 535.2 Q(erbose)-.1 E F0 .502(If set, the)184 547.2 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 +(xceeds the number)-.15 F(of positional parameters.)184 559.2 Q F1(sour) +144 576 Q(cepath)-.18 E F0 .77(If set, the)184 588 R F1(.)3.27 E F0(\() +3.27 E F1(sour)A(ce)-.18 E 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 +(\214le supplied as an ar)184 600 Q 2.5(gument. This)-.18 F +(option is enabled by def)2.5 E(ault.)-.1 E F1 -.1(va)144 616.8 S(rr).1 +E(edir_close)-.18 E F0 .74(If set, the shell automatically closes \214l\ +e descriptors assigned using the)184 628.8 R/F3 10/Times-Italic@0 SF +({varname})3.24 E F0(redi-)3.24 E .423(rection syntax \(see)184 640.8 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 652.8 Q F1(xpg_echo)144 669.6 Q F0(If set, the)184 +681.6 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 F1A 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 +108 698.4 Q F0([)2.5 E F1A F0(])A 1.002(Suspend the e)144 710.4 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 722.4 R F1 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 -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 +5.023 F(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(79)185.955 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 2.5(0u)144 84 S +(nless the shell is a login shell and)-2.5 E/F1 10/Times-Bold@0 SF +2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E F1 +(test)108 100.8 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)108 +112.8 Q F2 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .878 +(Return a status of 0 \(true\) or 1 \(f)144 112.8 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 +(luation of the conditional e).25 F(xpression)-.15 E F2 -.2(ex)144 124.8 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 F12.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 136.8 R 1.661 -.15(ve u)-.15 H(nder).15 E +/F3 9/Times-Bold@0 SF(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 +148.8 Q(gument of)-.18 E F12.5 E F0 +(as signifying the end of options.)2.5 E .785 +(Expressions may be combined using the follo)144 166.8 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 178.8 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 +(used when there are \214v)144 190.8 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G +(ore ar)-2.5 E(guments.)-.18 E F1(!)144 202.8 Q F2 -.2(ex)2.5 G(pr).2 E +F0 -.35(Tr)180 202.8 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 214.8 Q F2 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 +.26(Returns the v)180 214.8 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 478.8 Q F3 -.2 -(ex)144 490.8 S(pr1).2 E F02.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 F02.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 +(rride the normal precedence of opera-).15 F(tors.)180 226.8 Q F2 -.2 +(ex)144 238.8 S(pr1).2 E F02.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 +-.35(Tr)180 250.8 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 262.8 S +(pr1).2 E F02.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 +274.8 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 291.6 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 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 309.6 S -.18(rg)-2.5 G(uments).18 E(The e) +180 321.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 333.6 S -.18 +(rg)-2.5 G(ument).18 E(The e)180 345.6 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 357.6 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar) +180 369.6 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 633.6 R .38 +(gument is null.)-.18 F .379(If the \214rst ar)180 381.6 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 +-.15(ve u)-.15 H(nder).15 E F3(CONDI-)2.88 E(TION)180 393.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 +(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 405.6 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 417.6 S -.18(rg)-2.5 G +(uments).18 E .236(The follo)180 429.6 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 441.6 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 453.6 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 F13.833 +(guments)-.18 E 1.333(as operands.)180 465.6 R(The)6.333 E F13.833 E F0(and)3.833 E F13.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 +(three ar)180 477.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 .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 +(o-ar)-.1 E(gument)-.18 E .521(test using the second and third ar)180 +489.6 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 501.6 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 513.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 +525.6 S -.18(rg)-2.5 G(uments).18 E .43(The follo)180 537.6 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 F1(!)2.929 E F0 2.929 +(,t)C .429(he re-)-2.929 F 1.314(sult is the ne)180 549.6 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 561.6 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 573.6 R +(xactly)-.15 E F1(\()2.809 E F0 .309(and the fourth ar)2.809 F .309 +(gument is e)-.18 F(xactly)-.15 E F1(\))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 585.6 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 +597.6 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 609.6 S 2.5(rm)-2.5 G(ore ar) +-2.5 E(guments)-.18 E 1.635(The e)180 621.6 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 +633.6 Q -.15(ve)-.15 G(.).15 E(When used with)144 651.6 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 668.4 Q F0 +1.229(Print the accumulated user and system times for the shell and for\ + processes run from the shell.)144 668.4 R(The return status is 0.)144 +680.4 Q F1(trap)108 697.2 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 .682(The command) +144 709.2 R F2(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 F2(sigspec)3.523 E F0 5.683(.I).31 G +(f)-5.683 E F2(ar)3.513 E(g)-.37 E F0(is)3.403 E .609 +(absent \(and there is a single)144 721.2 R F2(sigspec)3.108 E F0 3.108 +(\)o)C(r)-3.108 E F13.108 E F0 3.108(,e)C .608 +(ach speci\214ed signal is reset to its original disposition)-3.108 F +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(80)185.955 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 .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 -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 F13.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 F13.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 F13.36 -E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E .658(\(the v)144 +84 R .658(alue it had upon entrance to the shell\).)-.25 F(If)5.658 E/F1 +10/Times-Italic@0 SF(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 96 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 10/Times-Bold@0 SF3.08 E F0 +(has)3.08 E 1.214 +(been supplied, then the trap commands associated with each)144 108 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 120 R F23.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 F12.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 132 R F22.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 144 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 156 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 .666(If a) +144 174 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 186 S(G).09 E/F4 9/Times-Roman@0 SF(,)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 198 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 210 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 222 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 234 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 +(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 -.15(exe)144 246 S(cuting.) +.15 E .96(If a)144 264 R F1(sigspec)3.8 E F0(is)3.77 E F3(ERR)3.46 E F4 +(,)A F0 .96(the command)3.21 F F1(ar)3.791 E(g)-.37 E F0 .961(is e)3.681 +F -.15(xe)-.15 G .961(cuted whene).15 F -.15(ve)-.25 G 3.461(rap).15 G +.961(ipeline \(which may consist of a)-3.461 F .185(single simple comma\ +nd\), a list, or a compound command returns a non\255zero e)144 276 R +.184(xit status, subject to)-.15 F .451(the follo)144 288 R .451 +(wing conditions.)-.25 F(The)5.451 E F3(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 300 R .388(wing a)-.25 F F2(while)2.888 +E F0(or)2.888 E F2(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 312 R -.15(xe)-.15 G +.778(cuted in a).15 F F2(&&)3.278 E F0(or)3.278 E F2(||)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 F1A F0 2.5 -(\)o)C(ption.)-2.5 E .133 +(wing the \214nal)-.25 F F2(&&)3.278 E F0(or)3.278 E F2(||)3.278 E F0 +3.278(,a)C -.15(ny)-3.278 G 1.28(command in a pipeline b)144 324 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 F2(!) +3.78 E F0(.)A(These are the same conditions obe)144 336 Q(yed by the) +-.15 E F2(err)2.5 E(exit)-.18 E F0(\()2.5 E F2A F0 2.5(\)o)C +(ption.)-2.5 E .132 (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 +354 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 366 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 -F1144 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 -F12.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 F13.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 -2.506 E F0(and)144 698.4 Q F13.23 E F0 .73 -(print the hashed v)3.23 F .731 +(vironment when one is cre-)-.4 F 2.5(ated. The)144 378 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 F2(trap)2.5 E F0 +(returns true.)2.5 E F2(type)108 394.8 Q F0([)2.5 E F2(\255aftpP)A F0(]) +A F1(name)2.5 E F0([)2.5 E F1(name)A F0(...])2.5 E -.4(Wi)144 406.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 +F2144 418.8 Q F0 .715(option is used,)3.215 F F2(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 430.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 442.8 R .118 +(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F +F22.618 E F0 .118(option is used,)2.618 F F2(type)2.618 E F0 .855 +(either returns the name of the disk \214le that w)144 454.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 466.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 F23.028 E F0 .528(option forces a)3.028 F F3 -.666(PA)3.028 G +(TH)-.189 E F0 .006(search for each)144 478.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 F2 +2.507 E F0(and)144 490.8 Q F23.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 -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 F13.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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 -3.723 E F0 6.223(.T)C(he)-6.223 E F13.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 -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 +F F3 -.666(PA)3.23 G(TH)-.189 E F4(.)A F0 .73(If the)5.23 F F2144 +502.8 Q F0 .823(option is used,)3.323 F F2(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 +514.8 R F23.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 526.8 R F23.723 E F0 6.223(.T)C(he)-6.223 E F23.723 E F0 +1.223(option suppresses shell function lookup, as)3.723 F .326(with the) +144 538.8 R F2(command)2.826 E F0 -.2(bu)2.826 G(iltin.).2 E F2(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 550.8 Q F2(ulimit)108 567.6 Q F0([)2.5 E F2 +(\255HS)A F0(])A F22.5 E(ulimit)108 579.6 Q F0([)2.5 E F2(\255HS)A +F0 2.5(][)C F2(\255bcde\214klmnpqrstuvxPR)-2.5 E(T)-.4 E F0([)2.5 E F1 +(limit)A F0(]])A(Pro)144 591.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 F13.443 E F0(and)3.443 E F13.444 E F0 .944 +.944(that allo)144 603.6 R 3.444(ws)-.25 G .944(uch control.)-3.444 F +(The)5.944 E F23.444 E F0(and)3.444 E F23.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 615.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 F12.926 E -F0(nor)2.926 E F12.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 627.6 R .426 +(alue of the hard limit.)-.25 F .425(If neither)5.426 F F22.925 E +F0(nor)2.925 E F22.925 E F0 .425 +(is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144 +639.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 651.6 R(alues)-.25 E F2(hard)3.242 E F0(,)A F2 +(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F2(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 663.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 F13.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 675.6 R F23.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 687.6 R 3.2(alue. Other)-.25 F .7(options are interpreted as)3.2 F(follo)144 -256.8 Q(ws:)-.25 E F1144 268.8 Q F0 -(All current limits are reported; no limits are set)180 268.8 Q F1 -144 280.8 Q F0(The maximum sock)180 280.8 Q(et b)-.1 E(uf)-.2 E -(fer size)-.25 E F1144 292.8 Q F0 -(The maximum size of core \214les created)180 292.8 Q F1144 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 F1144 316.8 Q F0 -(The maximum scheduling priority \("nice"\))180 316.8 Q F1144 -328.8 Q F0 -(The maximum size of \214les written by the shell and its children)180 -328.8 Q F1144 340.8 Q F0(The maximum number of pending signals)180 -340.8 Q F1144 352.8 Q F0 -(The maximum number of kqueues that may be allocated)180 352.8 Q F1 -144 364.8 Q F0(The maximum size that may be lock)180 364.8 Q -(ed into memory)-.1 E F1144 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 F1144 388.8 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 F1144 412.8 Q F0 -(The pipe size in 512-byte blocks \(this may not be set\))180 412.8 Q F1 -144 424.8 Q F0 -(The maximum number of bytes in POSIX message queues)180 424.8 Q F1 -144 436.8 Q F0(The maximum real-time scheduling priority)180 436.8 -Q F1144 448.8 Q F0(The maximum stack size)180 448.8 Q F1144 -460.8 Q F0(The maximum amount of cpu time in seconds)180 460.8 Q F1 -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 F1144 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 F1144 508.8 Q F0(The maximum number of \214le locks)180 -508.8 Q F1144 520.8 Q F0(The maximum number of pseudoterminals)180 -520.8 Q F1144 532.8 Q F0(The maximum time a real-time process can\ - run before blocking, in microseconds)180 532.8 Q F1144 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 -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 -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 -2.544 E F0 2.544(,w)C .044(hich is)-2.544 F .67(in seconds;)144 -585.6 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F +699.6 Q(ws:)-.25 E F2144 711.6 Q F0 +(All current limits are reported; no limits are set)180 711.6 Q +(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(81)185.955 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 +SF144 84 Q F0(The maximum sock)180 84 Q(et b)-.1 E(uf)-.2 E +(fer size)-.25 E F1144 96 Q F0 +(The maximum size of core \214les created)180 96 Q F1144 108 Q F0 +(The maximum size of a process')180 108 Q 2.5(sd)-.55 G(ata se)-2.5 E +(gment)-.15 E F1144 120 Q F0 +(The maximum scheduling priority \("nice"\))180 120 Q F1144 132 Q +F0(The maximum size of \214les written by the shell and its children)180 +132 Q F1144 144 Q F0(The maximum number of pending signals)180 144 +Q F1144 156 Q F0 +(The maximum number of kqueues that may be allocated)180 156 Q F1 +144 168 Q F0(The maximum size that may be lock)180 168 Q(ed into memory) +-.1 E F1144 180 Q F0(The maximum resident set size \(man)180 180 Q +2.5(ys)-.15 G(ystems do not honor this limit\))-2.5 E F1144 192 Q +F0 .791(The maximum number of open \214le descriptors \(most systems do\ + not allo)180 192 R 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F +(be set\))180 204 Q F1144 216 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))180 216 Q F1 +144 228 Q F0(The maximum number of bytes in POSIX message queues) +180 228 Q F1144 240 Q F0 +(The maximum real-time scheduling priority)180 240 Q F1144 252 Q +F0(The maximum stack size)180 252 Q F1144 264 Q F0 +(The maximum amount of cpu time in seconds)180 264 Q F1144 276 Q +F0(The maximum number of processes a)180 276 Q -.25(va)-.2 G +(ilable to a single user).25 E F1144 288 Q F0 .47 +(The maximum amount of virtual memory a)180 288 R -.25(va)-.2 G .47 +(ilable to the shell and, on some systems, to).25 F(its children)180 300 +Q F1144 312 Q F0(The maximum number of \214le locks)180 312 Q F1 +144 324 Q F0(The maximum number of pseudoterminals)180 324 Q F1 +144 336 Q F0(The maximum time a real-time process can run before \ +blocking, in microseconds)180 336 Q F1144 348 Q F0 +(The maximum number of threads)180 348 Q(If)144 364.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 F12.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 376.8 R -.15(ve)-.25 G .044(n, then).15 F F1 +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 +2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 +388.8 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F F13.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) -3.17 F F13.17 E F0(,)A F13.17 E F0(,)A F13.17 E F0(,) -A F1144 597.6 Q F0(,)A F13.737 E F0 3.737(,a)C(nd)-3.737 E +A F1144 400.8 Q F0(,)A F13.736 E F0 3.736(,a)C(nd)-3.736 E F13.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 F13.736 E F0(and)3.736 E -F13.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 +F13.736 E F0 3.736(,w)C 1.237(hich are in)-3.736 F .239 +(512-byte increments.)144 412.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 F1A F0 2.5(][)C F1-2.5 E F0 +(error occurs while setting a ne)144 424.8 Q 2.5(wl)-.25 G(imit.)-2.5 E +F1(umask)108 441.6 Q F0([)2.5 E F1A F0 2.5(][)C F1-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 453.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 465.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144 +477.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 F12.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 489.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 F13.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 501.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 513.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 F13.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 530.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 542.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 +F13.258 E F0 .757(is supplied, all alias de\214nitions are re-) +3.258 F(mo)144 554.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 571.2 Q F0<5bad>2.5 E F1 (fv)A F0 2.5(][)C-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 583.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 F13.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 -2.769 E F0 .269(is speci\214ed, each)2.769 F F2(name)3.129 E F0 +(If the)6.303 F F13.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 595.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 607.2 R F1 +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 F12.903 E +2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 619.2 R F12.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 -5.72 E F0 .72(has no ef)3.22 F .719(fect if the)-.25 F F1 -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 631.2 R .719(ariable it references.)-.25 F F1 +5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1 +3.22 E F0 .72(option is supplied.)3.22 F .72(If no options)5.72 F .737 +(are supplied, each)144 643.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 +655.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 667.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 679.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 691.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 --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 +703.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 715.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(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(82)185.955 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(wait)108 84 Q F0([)2.5 E F1(\255fn)A F0 2.5(][)C F1-2.5 E/F2 10 +/Times-Italic@0 SF(varname)2.5 E F0 2.5(][)C F2(id ...)-2.5 E F0(])A -.8 +(Wa)144 96 S .659(it for each speci\214ed child 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 108 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 120 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 F13.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 F13.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 132 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 +3.098 E F0 .598(option is supplied,)3.098 F F1(wait)144 144 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 156 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 168 R .573 +(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .572 +(If the)5.573 F F13.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 180 R .39(xit status is returned is assigned to)-.15 F .905(the v) +144 192 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 204 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39 (is useful only when the)3.89 F F13.89 E F0 1.39 (option is supplied.)3.89 F 1.39(Supplying the)6.39 F F13.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 216 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 +.574(to terminate before returning its status, in-)3.075 F .635 +(stead of returning when it changes status.)144 228 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 240 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 +/F3 10.95/Times-Bold@0 SF(SHELL COMP)72 256.8 Q -1.04(AT)-.81 G +(IBILITY MODE)1.04 E F0 .912 +(Bash-4.0 introduced the concept of a `shell compatibility le)108 268.8 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 +.15 F -.2(bu)108 280.8 S(iltin).2 E F1(compat31)3.377 E F0(,)A F1 +(compat32)3.377 E F0(,)A F1(compat40)3.377 E F0(,)A F1(compat41)3.377 E +F0 3.378(,a)C .878(nd so on\).)-3.378 F .878 +(There is only one current compatibility)5.878 F(le)108 292.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 304.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 316.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 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 +(ntended to be a temporary solution.)-2.5 E 1.457 +(This section does not mention beha)108 333.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 345.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 357.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 576 R(,)-.65 E F1(compat32)3.023 E F0 +.523(If a user enables, say)108 374.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 .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 +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 +386.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 +398.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 410.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 +422.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 434.4 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 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)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 +(yc)-.1 G .296(ompatibility le)-2.796 F -.15(ve)-.25 G .296(ls care-).15 +F(fully)108 446.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 463.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 475.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 F2(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 487.2 Q -.15(ve)-.25 +G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 504 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 516 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 532.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 544.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 561.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 573.6 Q F2(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 F2(NN)3.686 E F0 1.186 +(using one of the follo)3.686 F(wing)-.25 E 3.807(mechanisms. F)108 +585.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 597.6 Q F2(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 609.6 Q(ersions.)-.15 E F1 +(compat31)108 626.4 Q F0<83>144 638.4 Q(quoting the rhs of the)180 638.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 -(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) +-.25 E F1(compat32)108 655.2 Q F0<83>144 667.2 Q .35 +(interrupting a command list such as "a ; b ; c" causes the e)180 667.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 679.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 691.2 Q -.15(xe)-.15 +G(cution of the entire list\)).15 E(GNU Bash 5.2)72 768 Q +(2021 December 26)136.795 E(83)185.955 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/F1 10/Times-Bold@0 +SF(compat40)108 84 Q F0<83>144 96 Q(the)180 96 Q F1(<)2.674 E F0(and) +2.674 E F1(>)2.673 E F0 .173(operators to the)2.673 F F1([[)2.673 E F0 +.173(command do not consider the current locale when compar)2.673 F(-) +-.2 E .067(ing strings; the)180 108 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 120 Q/F2 +10/Times-Italic@0 SF(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 F2(str)4.742 E(-)-.2 E(coll)180 132 +Q F0(\(3\).).51 E F1(compat41)108 148.8 Q F0<83>144 160.8 Q(in)180 160.8 +Q F2(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 172.8 S(rd \(this is POSIX interpretation 267\)).1 +E<83>144 184.8 Q(in)180 184.8 Q F2(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 F2(wor)2.708 E(d) +-.37 E F0 .281(portion of a double-quoted parameter e)180 196.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 208.8 Q F1 +(compat42)108 225.6 Q F0<83>144 237.6 Q 1.056(the replacement string in\ + double-quoted pattern substitution does not under)180 237.6 R 1.055 +(go quote re-)-.18 F(mo)180 249.6 Q -.25(va)-.15 G(l, as it does in v) +.25 E(ersions after bash-4.2)-.15 E<83>144 261.6 Q .021 +(in posix mode, single quotes are considered special when e)180 261.6 R +.021(xpanding the)-.15 F F2(wor)2.521 E(d)-.37 E F0 .021(portion of a) +2.521 F .018(double-quoted parameter e)180 273.6 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 +.998(cial character \(this is part of POSIX interpretation 221\); in la\ +ter v)180 285.6 R .999(ersions, single quotes)-.15 F +(are not special within double-quoted w)180 297.6 Q(ord e)-.1 E +(xpansions)-.15 E F1(compat43)108 314.4 Q F0<83>144 326.4 Q 1.071 +(the shell does not print a w)180 326.4 R 1.07 +(arning message if an attempt is made to use a quoted com-)-.1 F .248 +(pound assignment as an ar)180 338.4 R .249 +(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .249 +(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 350.4 Q +<83>144 362.4 Q -.1(wo)180 362.4 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 549.6 S +(atal errors that cause the current command to)-.1 F -.1(fa)180 374.4 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 386.4 Q(xit\))-.15 E +<83>144 398.4 Q .355(when e)180 398.4 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 410.4 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 422.4 Q -.15(ve)-.25 G(nt this).15 E F1(compat44)108 439.2 Q F0<83> +144 451.2 Q .719(the shell sets up the v)180 451.2 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 463.2 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) --.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) +(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 475.2 Q +2.634(as)180 475.2 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 +487.2 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 499.2 Q -.25(va) +180 499.2 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 511.2 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 523.2 Q F1(compat50)108 540 Q F0<83>144 552 Q +1.209(Bash-5.1 changed the w)180 552 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 564 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 +(,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 576 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 588 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 600 Q .695 +(If the command hash table is empty)180 600 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 612 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 F12.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 F13.581 E F0 1.081 +(Bash-5.1 suppresses that message when the)180 624 Q F12.5 E F0 +(option is supplied.)2.5 E F1(compat51)108 640.8 Q F0<83>144 652.8 Q +(The)180 652.8 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 664.8 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 681.6 Q F0(If)108 693.6 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 F13.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 705.6 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 +5.477 F(ha)108 717.6 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 +(wing are disallo)-.25 E(wed or not performed:)-.25 E(GNU Bash 5.2)72 +768 Q(2021 December 26)136.795 E(84)185.955 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>108 84 Q +(changing directories with)144 84 Q/F1 10/Times-Bold@0 SF(cd)2.5 E F0 +<83>108 100.8 Q(setting or unsetting the v)144 100.8 Q(alues of)-.25 E +/F2 9/Times-Bold@0 SF(SHELL)2.5 E/F3 9/Times-Roman@0 SF(,)A F2 -.666(PA) +2.25 G(TH)-.189 E F3(,)A F2(HISTFILE)2.25 E F3(,)A F2(ENV)2.25 E F3(,)A +F0(or)2.25 E F2 -.27(BA)2.5 G(SH_ENV).27 E F0<83>108 117.6 Q +(specifying command names containing)144 117.6 Q F1(/)2.5 E F0<83>108 +134.4 Q(specifying a \214lename containing a)144 134.4 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 151.2 Q +(specifying a \214lename containing a slash as an ar)144 151.2 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 F12.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 -(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 -F12.5 E F0(and)2.5 E F12.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 +E<83>108 168 Q .45(specifying a \214lename containing a slash as an ar) +144 168 R .449(gument to the)-.18 F F12.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 180 Q<83>108 196.8 Q +(importing function de\214nitions from the shell en)144 196.8 Q +(vironment at startup)-.4 E<83>108 213.6 Q(parsing the v)144 213.6 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 230.4 Q(redirecting output using the\ + >, >|, <>, >&, &>, and >> redirection operators)144 230.4 Q<83>108 +247.2 Q(using the)144 247.2 Q F1(exec)2.5 E F0 -.2(bu)2.5 G +(iltin command to replace the shell with another command).2 E<83>108 264 +Q(adding or deleting b)144 264 Q(uiltin commands with the)-.2 E F1 +2.5 E F0(and)2.5 E F12.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 280.8 Q(using the)144 280.8 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 F12.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 +297.6 Q(specifying the)144 297.6 Q F12.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 314.4 Q +(turning of)144 314.4 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 331.2 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 +(When a command that is found to be a shell script is e)108 348 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 +(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1(rbash)108 360 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/F4 10.95 +/Times-Bold@0 SF(SEE ALSO)72 376.8 Q/F5 10/Times-Italic@0 SF(Bash Refer) +108 388.8 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 400.8 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 +F5(The Gnu History Libr)108 412.8 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 424.8 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 +-.8 E F0 2.5(,I)C(EEE --)-2.5 E(http://pubs.opengroup.or)144 436.8 Q +(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 448.8 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 +108 460.8 Q F0(\(1\),)A F5(ksh)2.5 E F0(\(1\),)A F5(csh)2.5 E F0(\(1\))A +F5(emacs)108 472.8 Q F0(\(1\),)A F5(vi)2.5 E F0(\(1\))A F5 -.37(re)108 +484.8 S(adline).37 E F0(\(3\))A F4(FILES)72 501.6 Q F5(/bin/bash)109.666 +513.6 Q F0(The)144 525.6 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E +F5(/etc/pr)109.666 537.6 Q(o\214le)-.45 E F0 +(The systemwide initialization \214le, e)144 549.6 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bash_pr)109.666 561.6 Q(o\214le)-.45 +E F0(The personal initialization \214le, e)144 573.6 Q -.15(xe)-.15 G +(cuted for login shells).15 E F5(~/.bashr)109.666 585.6 Q(c)-.37 E F0 +(The indi)144 597.6 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G +(-shell startup \214le).15 E F5(~/.bash_lo)109.666 609.6 Q(gout)-.1 E F0 +(The indi)144 621.6 Q(vidual login shell cleanup \214le, e)-.25 E -.15 +(xe)-.15 G(cuted when a login shell e).15 E(xits)-.15 E F5 +(~/.bash_history)109.666 633.6 Q F0(The def)144 645.6 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 F5(~/.inputr)109.666 657.6 Q(c)-.37 E F0 +(Indi)144 669.6 Q(vidual)-.25 E F5 -.37(re)2.5 G(adline).37 E F0 +(initialization \214le)2.5 E F4 -.548(AU)72 686.4 S(THORS).548 E F0 +(Brian F)108 698.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E +(bfox@gnu.or)108 710.4 Q(g)-.18 E(Chet Rame)108 727.2 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(GNU Bash 5.2)72 768 Q(2021 December 26)136.795 E(85) +185.955 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/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.) -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 -(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 +(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E(chet.rame)108 84 Q +(y@case.edu)-.15 E/F1 10.95/Times-Bold@0 SF -.11(BU)72 100.8 S 2.738(GR) +.11 G(EPOR)-2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108 112.8 R +.568(ug in)-.2 F/F2 10/Times-Bold@0 SF(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 124.8 R 5.625(ersion of)-.15 +F F2(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626 (ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626 -(ilable from).25 F 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/F3 10/Times-Italic@0 SF(ftp://ftp.gnu.or)108 136.8 Q +(g/pub/gnu/bash/)-.37 E F0(and)2.5 E F3(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 153.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 F3(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 165.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 177.6 Q F3 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0 +(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2(gnu.bash.b)2.5 E(ug) +-.2 E F0(.)A(ALL b)108 194.4 Q(ug reports should include:)-.2 E(The v) +108 211.2 Q(ersion number of)-.15 E F2(bash)2.5 E F0(The hardw)108 223.2 +Q(are and operating system)-.1 E(The compiler used to compile)108 235.2 +Q 2.5(Ad)108 247.2 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 +E 2.5(As)108 259.2 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 +G(rcises the b).15 E(ug)-.2 E F3(bashb)108.27 276 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 -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 +292.8 Q(ug reports concerning this manual page should be directed to)-.2 +E F3 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.) +.25 E F1 -.11(BU)72 309.6 S(GS).11 E F0(It')108 321.6 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 +(There are some subtle dif)108 338.4 R 1.869(ferences between)-.25 F F2 (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 +F2(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 350.4 Q F0(speci\214cation.)2.25 E +(Aliases are confusing in some uses.)108 367.2 Q(Shell b)108 384 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 400.8 R .39 +(process suspension is attempted.)108 412.8 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 424.8 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 436.8 Q(Array v)108 +453.6 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E +(There may be only one acti)108 470.4 Q .3 -.15(ve c)-.25 H +(oprocess at a time.).15 E(GNU Bash 5.2)72 768 Q(2021 December 26) +136.795 E(86)185.955 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/bashref.dvi b/doc/bashref.dvi index 2b682d27696646a1393ebce7d4d6520eedfb49d7..94e70660e5402c75eccc4e83d1a8b0ce4e066c2b 100644 GIT binary patch delta 88463 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 z%0A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 delta 64281 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

j4WrDTgVrbC8 zNnfBf+c~SH5F={;8Xy|z!T!*nj>)_~^&=(2eAGKsn#OO>=cx3T;OUWa&|!H4j=!8B z<~evjy|`9-*X+JCTpzv;&;k28TO`dF+>7C}YJuPYSnQuSNcep6&PJ&#-rF}a6rdGL zXt`isF}w5pQ7mQerC#Xzct5@QKHH#uw=f*Be~T1kAcyfB zISd%hC#mL0$(7FDA!+pa7ReCm9sGfWT26;Pkm4Hwti-L_h>v{vl?tdv7lQMd39c?% zfs84kTenIh8}jVNmS746Tw2HAXv4HM-p0_+s%@;pkG4t3=&Qb+9TU0R;Vxf7FKm~3 znDND^R;kpIKHLeUTTCgNP`y+_58%x|lu&`{-4EFqZ+{4<%2qmK2TOanL%LuLbpj66 zRT}xK;;m_4w}7$$e;RO>ccYwdv97iie(aLy}Y!pPPAK zIwxe{+__1sKYx4f0s^>{&AJEDB$E)JTOUg?_!u_!Psv9Xg7u}(r5S|Q+y^Zb3v|*Q zIgCcbJnJ)GNz1IlBo2GK53m$dfFZIo+aeFIfj5g^yyXHRi)T7`$jHRKG3n(sQH)a5^<+H!{osn5tzc|5oV9}H}q z5wfekxUHOO&Lc&`;?j#q(eO$pbrr^NRRtsTV39Z}H!jW2`QY-Q&$`%1QEhG$gnOm0 zDCyudOawZbkpqL^^kR}m#?>XA8@H|j`zU(?Gog+uPWqmX@?R!;GzG@LtBd>#F4L=S zGUAd^-Q_^~<|P~pw=EnV6JJSOl+!bDVqAQ-@5GFRL|;R8f_wYQl8@;Vd&o}&?pkAa zUm0!Yqn(8{{pH4Z79EO`ZwuZSRVgP4cMRX`)aht5GGL$_kJ;=oa!Y{<767Fu2YKts z7TJ)_JQ*twH5B~^%Zo^f_L-WpD|bL}E>5n^+rA$s--cl} zOV%%rlkF(iIVnN*!r?Yc(U&C3;W&=3ljT?wi=r#X%XQ#T{%E}1L7=lEp}~J9$j%O_ z*{Qt28l}9!Us@Usdc*Qf;WM3@?#sD2Tx_vXx*Q-d@lSn7hCIfMlA9)7&yrh<^mUG$ zuL23RH_tY%Wj79QDql43V2Ym+c z4nF86yA;+`B>KZ5c?IB)lxnC>-++|5r3f_qiMbKovKU5JLeDIgQJbXs5*cn!dhaE& zCklF|RMW>Tl^dGsJ4dc%`atE4Mt1X^I&x&Awy3t<2tM+Qy@S8kH!p`S0Y-Q?nO4u2 z&q7UuR?2wX9$qQ8ht++xQeNb+BRYe3F?cWUqGceUmHYykTcpr$7sx%$uvohv(LgFk zlVb0dJN0=~w&KmIV6B|VW5_!B4#vc9keko}R1P9rAetWAAg5r49eT@+@?fDkw>DMY z#Bke;ooBdv%Ox~l;>AXi1$H4w!7O8g?%bU4~N%SVUsW6M@>%W}m%Ns9O z*ULA_k)kl0r$m0wQ~FGmUGz;`<+>8xGGA_PidoF#$pWYu;w3$Jm+XOuTi=i5Au=t` zhfKpgd8V!_0iv1ImzOTTw9voTLt^|3o*1(MYC!g&zT~(ZQiJAhg2aq8ObiFIf@u!~ zotM|>XD`TW5a_Rdt|$H|Z^K>Zd`WJCyYA{|ddN?5LkZt}uK?aI(H~urT^%4kj}K+G z7ps%5+A4E-o0_?q=n26WZB^r~t3{-5t`Em%4X?=`lTw#M6ZDJMg(d%N@|?`^$ZMsMjCcVvlJC_pZp# zY1VytF#vS04)nkK@)3a4UhVaR59FZ&`=suVWPBORed>*bFp9U#SFrkPJHz~Nu+nSX&$fz_c$osfv zR*+vYmMF!v`f+IR{mHz+oa2CqBvCOiu0WK5G+R{MNvX$oE$CuV`3P@Vl9G<7c9){W zVkl~gDDVgPT7^%kt5s=fdc8~UXjN+Cw4bf6G=-+0S6ALgHKH2I0%Oh>@j3ta5^uZy zdD$@F-o{C3W%gKLqobUZro1QfoRsyX*!`!6w1KlyVkve1>5<_h@aQJZUH{ElX^w5l zuF6@S?I%|Sed~2|Q_!~_#td{Y5 z1!#0VtEN)J0n&?khY$S4JAC+x>`@1BeqvS*Q@2Y@&oKbHF$ZY<{aVU&^lOXVhPh}!+Xr(;^f6cy`> zTEnWCorbNWANVRL7PP=miGbg0^<#d@4xGbGf29>yn_lm)I0>ep2)Zjk=?A-T*gE}X zfYP5a=7N-5n4Pd-Wg&vVu~4O^P&>${;D0;>I)p%$;>?-kAL!gcf;U~2sWhNVp8$G# z5~idXLVw{(Ex{brx`1A9DR?-Q_w3UvYQUf#W#~`l`5wJELP^H!^Yf2&xt+2XtvMX% zpez8IxN}D(4qwMNcUC?(nK8rYZUAs-vUovvZ3jt*B0t)BWLlmUS4VEbo`P)-SER3qvz3O2ggWo?n3 zF3nJG#Wfa&b(v~H@BOE;w`ioPKg_B;Sh_BHzL1Z67BNcS|QBOa^^)0JSJa4=n& zYzhpcK^Y3ZJZ#Hg_~2-!5`jvRnMxSX7BWd0?p?y$vU09tTy{aZZzAJ1emF_#h2kTV z6qMj;o~87mkDDpJCbzb{+wU|ty6wbF+2mworpEKbWnPwotlHCAiVu?~Ds|sfjlRf& ztyV(&XDeMHSedQV=XlJ0lR)=nE5rW3j*Mp=X_BL$jk(!5N0(-*7MnubVm;A90ExbI9>2AHwn_Q`Byk0&c}HH=oveJ8WF#!ON0 z6)Sg&!dMPd6f|xnOjSJT>yu`M)}N{jfcT85Y%Is7D#PiAdq{QKVw!?NPdU?+cU&EM zJWK^}ZdyQ482xRU(wENdD!b8$=}G|a{q^arrGKX@sBxS#LqT(E^=2w-3?Ny_fut_s zv%Nb=VMMd&HiXG@;hB!?0gnAn%~blLU(`K$y60@Azu9m=p*kV9PCG_{j%4#^?p_bW8l+PS{brtVP^S-<%r+O+L zwEZ&0kapX=Owom4I()fO1i?ScmFdV9$y%X^%uDKdeMY|WIYAFG1&WuYP209@+WNJf z1=k_??d@p7#*mg0Qh~I9dKjWOi?)&f+%KmORs+PcaW-9}B+Gz-R;*VhnT7WlCr9Zt z>uqjCFc%x%qy*zde(q-FCIPZ7X`8Z5GzEt1PP-Hh1$$|okCktQ0zSBYGG}~b-ceea zg2VKIdz6O?YT+DEP7z@>&otse)lA{+UaT)aqKp+RrpdEV5Y;q!Hhptcsh?K}5t(+w z0(!O$;%_lY4V!7-EbgH?F+HKIHT>-PmXmYGRW}+g_N+7${VEDz57hi_yzZ^LF=HRW z%{kDhpIi=r`s?rpY@#}ky>T-Ex2()8^!iyq>m4JWGBfEpu0a3!n6jJbKb=tOqggih zzw{U1!f6Qz*8Ok2?stlSOIQ58f}DKMvv96$rCrV{59zT*fC|RDS562lKFT!HkaGqW z*FQL?C|Kv}JNlmUa85v-t8devE+}~jAwz#qt`H%JhF(@?nZ4sa)%RakoCUMn*I&|; zKP$K3=Ck?^-TRBu8lY(PZN2;#6+5P z0INd2Zqvq8bh9;=td6>-Z04Q(^O~|wFgthtmFAZzHId%jO?Q+j%b}^xztHeQs|baN=6=udp5RwV%!8K`-aa5 zacOB~&5KCfKRFo%#&3K1xVY>TCJ@X&$K|5qU)gyjGb_NJAy7!nZsafE?p_T?SNWCB zO)6e~`lKgipkAP#m|yJH{(Ji4b7cnoY>QGOuQ-tlC>JLrcevGYSe}+T4n-%k zR^aHXcy41)+1aRi^KDlc8MDy9N0DtuDYK09q|{`;6g%=f@ttZ_g?6Q(pOWVoPeLN2 z9ic_8_GBL4t;+kFjhsB+Gd11eb_}{Qxi6Xv8sF7utsu@`^{u-AAI4y{jSd(p;blz1 zY#Qpz=A!w1$J>2YZhE2l6yZvNMdnjtQf>|!?_#=5#-cD^zm*b4P_Z>RmwOzA-u&1) zj_HXy8jO#Nhy1L)f-2^qP7y=Wiiskk>EV#4D{`gT|_=Ph@$IE6qmEo0XgPo z+R@7$YYyhEwT(Omv#vMCGP~a>bpbCUdwtCd)v!7mE2u}Ip+EZQ9wv3P;2z?S9NhH8DGW66=I}>v zeZE=kB$(^fXsCZf)G|P9ke_asR5W}c$Z8QL(PCNM$5C&LqJD`+<-9EFOJ29Tram+A zV%8ceQd%Qxs5!g`=WD2=NpZaz4QPpz8q#vYLqh=qR%k=?|BI9+JYu+}&{=JmR|uKP z+vH|vwP8jN+W@{PYh93-6Ay^VZ}KpN@{HUH35@hY;-_X;XucE?KP4{Rf#0~P1~^Nt zQ>)6BRH+^Pr{m*&aw>|f;3B&j(13d)(atqzXx;A>Khw5Xm9tIa9pN|S+GLpEgC(u`Zv}>g5N{_ZtbMxHjScj+Zs;!*fMl9FMcg4xjL58m<(yu;kF6{Mx6qgpl~!HMyJ4^t}85dtBgi6%)7 zE5`^Nu*SZq*I1AQSQX$8MN@D#fA?2^H+KJezWcv?T4hB-Ial&RfXZ#W(%?X~J*>l= zYIIVdy2I=?N1#`O)bHV*kxV}dRxd<2&#A^n-36V#JCls0BD1rI6a1D>dB=I2 zspinDA*xpmv!C}^6iwz*3wnc4wTr-6E7(-C2=$KQj~7YofqPqZJ;2PKw(2I%jA40( zv{OF>tYvDi?#nZe`xuX)MDD-{z0dZ02Y0wb+=^++aZ|XtnVA)C#%<;|dKD|ah33q5 zs0NMlshMest(nyu1EwmpGEjJzDKk|eErP4~`{tL~|8a?qhYTvAIuuwD=hO3@RX3X5 zK^?+o_e=-%nZ-D602SooPXL z^_VFlj1{Kid#E>{(x{$lFSvECEuw`z)e?wciB7%M>U3x?bqlQOt6plb`BZogEqO=w zXkgG_w-Tr3B&TJJvx&-;GER*ch&9?>^d^PmR5)GGTaCc0-qGHwI}qcSd#i3j=q|$O zj$LNs1bN$T1p^DLH!eFqH8qO~c-u&Wg>+Oha7^k`r z9K(N^YAt#+Nlkz)Q!-2SrX7-@djT{*S^XUCNc2fjPr@ST?x{fVm;s^j5_86@Lxd3h z@_4loF`NJ1NnfR_UOv(*23v>~#IHYMNG%c0Elz*(V?8e2X8wBz?U(_i1oOBVpTkAD zQj?6kRa_BCjz!A1kR%UAfiU#m)nFSwnd6aTA8V)`W~OE)Vlry?WIAkGprt`WmW)ZN z+T-kyk7=@|rlaD8VPwi4mtR7E%uqiXL_F-+U#V4AEHeUwcCglQ!}|`aq7K9NXg(?) zy*b;bIUIF)P?X!q$;v<@8iq}G8kZn7!fEvQZ#vRrS!xVWmklDN zI@D>BD$>ww^)n$rf0V5{3qnv~uG&us#^PQyK3APgUFN8@>62V_5iHKk$?8zU4AYoJ zYAyZm$?8!PY=XE|ss}weP2Hd{c{Jy!DB5r=K=s_|>QkQVNmtBJoz19jxp{^~o=c?B-ipi7@i`L<8a5%o|F|48tf@5s-x8|R$Qi27|FpSh zrurD#!~uAi>`zd)@fO+=!yBc|bn!_UeY0Qja^Xshz&!PuDbR-&PgQH`t>*yw1z2~_T=f7B8KiN8p!e6D^r#^mUY2hyFcZ ztpoKsFHk=hg7ohes4H+U!%q)7agkaI3+J_1?JpP|*JmzKTME=^fm&NXwp9Izf6{%+ z)oqS-n6v^)1=8C2>bF9$eluU4i4{W9UI^T6YN1iRe$=M6Ko=T!-cvs@!T!4+skSlI zU&2Qk%tzXJwR+tIKN?b2jy3Q-RcF9AM0wCLcC`<5vDB`1AUsOMgjM|YN}sqoWtvw8!Yez8SeL&Juv z%}xG`dEY{G>sGY~`mr6fP2Fa4^vn4}^{y${hx&c2)}$Ug)LC^%KsjtoxbviD=ED6Y zv4{lRNX_92lXUkEK#e5!nBk2Qx9Xfh`mG&mfMAY*>4+?aeh2PSlVP*1+Xd6$AFj{b zt^R~&we-Pz)H`MxI1+l*HIw%$l+V~tpQ`;uVH;!7s)OqO4}#>vc3B5iKWA#sg3?1x z)b?2IYYGk5Jx;5SU4&8&aVdF5e1tyzs`}7{ZYzM?({EyIKfzzW@>qS~B<$dsSM=i1 z0eUCF@~5+~lSgkT<_C>p~kJgnB-5;weG;xF(kKR$(_UaP%~brtYUz z_D(A6Uj$f=NL0M4Hh2Br_3g2QvHOb$g>!`HXTvStXwB(%Tgw_;nAzwQI>eYsY)%V_op|Eu_VCR9H#Fa zi1qmEQj7(N&1GFJnr@4=3>Sn@{r+G}Hr6n92!^5hk3)Ibd$=VT!;eSc0D{Bx@KKg& zY$W?e;|N0a`eQBgS;_}-Ff>z0C>`^u=Aj41TRO1lNeLJY1@0uWk`a1BvSk@&)c;Je zq{By;9ycCZ5ktbD<8;*_C|y3m(g#zh??g)j#{k0h9qEwIBP2XOzu2Uqof?|aKFc{o2bEgx3#ls?JL z8Z6N0OIlyDeErUFz27QJJ}&kzHXf!HSa#u(d98sCK=@%HtSZ#g%5Je?yNA~zsQK%` zMKB)_zjr+cJ)ey{+*E8S#4xPHG8^;l-wY!a!gb3Q%PNd7`oQuohV`~#{y=@rcKGcc zke|QRG4afrQnl-neja-)*`!T3pr0#tSf*or$}R}2vzaqa={+>S)zZvVXM5!gQh&q< z|L(S&!6r_8jQb~0AGOzF$MBzh09z2w_>_hFby(2qftBFhq$S@ZH39=!w|Jzlv2y|g z^@Rta1XQ3L=Hb#WFbvYIM|s7zW4xi3U-E{Je#L(e`v&JUP``h|vJUevI>~?6I%R2( zV;geXvKTk|^)r@GJVfHoS={uNXW0)Oe)KUS-Ss2qEq=H<4=-5o7}MMRXbHkF9p075Z^h0(&hmZO+3 z^q!?Ime8l%2Pj4BXlEZ7F%KVFy0Dml$AEqC zpFFdiz%I;sj$H|*ga5VM!?5cM%Nz{9dcorL_5VQ?bj&$Rb^XtmmYM>_Szp7xmBPZ= zZuD`r_?h~>S9Ldr(@SqG4NQk->d)U;`Ux1(L(u+H0zv^}GQ9vy|<{1XQkH4+C?z{@sU1R(XjC_-KJ{OFj2Q^T4VMRVATTHM?!Ti zi+x<{-wVWYOBdh`2U14)sckSM&p83T!4$U;cv}d;--TTDq0aIYtnZhFUPh7RZ z>_c5BTs1i-6uX?3!TI(Tmlgf8nWhV3}TdY4L(9W-2jq^yWFTYHHmDg_Xv! zeo;#s#0t39(b^&iN7mH_V7Q^47Kq`w`dSx(_#+DTZm3o zZB4aoL924k(2X&&Cv|JCeTvz?YmV6i^jbbV9N&_M2U=+>5!(9tYW?vy^}|5~gzJ~u zXhQ`0{R4|tj|k9OAjLK=PZbL<-?zGJ(fB*GCo4zudujKuA2WJudrbimv`ruFUkqFJ)wV#WpX&?rjXn14uQ7bN zA`%-4(*KU)4GxRuzmE*$znjKrAwrFSh$;wjA4ibu=T`!?7p|Z~#qIUe&;DMq0>Te- z^$W3@tAGvvK3HRWc+?PBK&ZEPsOE{`{$a34h}%Zsq6O-`M`9SHCymmkV^}ttha<=G z@TWKkYgAd(=$K&r<2-F5CZ0*)nR+K_lQ8@;MQeiL?NlCCpTH|`m8MN#mW3v2zhUQc z(*ZoG#a+|%8yPs!L3)o#T5k;VvoI@AxY;Z#y_}<6#PFkB?VgIq28?s-So;2C?Jj^^ z{uFJv;1LY_soC-7c>YXSd~Z~2ezDW?Nd47Rt*0QvUfZIXKG*wB*ZkS9V$F0wpFKnC zgedTfnOYi#t!BgQdxSvVX2+X3>KP36sB82O^0cXfYe+tOj%Nw)U;|M!aIW@D_GdMI zPW|82o{|KI|kN;h1z2!2zyv>|5`d^k@gbBb_OrjHen-MEGvJc|1Q>6k^tO{%a>>eU_bO) zsy)>L!zxyXMlRF#X@TKvp59EE`ZraUYiF^ZpCRZK)&YQ_A6H^%7nm-kKx;xvN=VAn1XNZLx9uGMbBCbX>69uhd~i|NaC+RyIz)#&SW2IA`u zgFH4{zf+_M2v?6cXdZCeN#yXocn-YZQgL^<9 z`spUkhZI}TMZhM_O~46xQlkBX)Y)duEQpwKtN!=pTKVj|M^5q#t`WFNf=)E6qYHfJh;< zAJblAGxp;c!tXD&Q}A0){7Msr>H$^IJ3cHV<+xO%J0jJ^znzPR6^Lr!bQT>LAK z?LpYZhScYbwwGZH)}!lZc)j}f+E$TmylshRHGzXh-Pr3!*%)4S`Z;YQJHhq(=NW{C z&<+>0Px&5)!FIl&c~a{SS`h+H=?~hMY}J3%4zb>DrEM;1X93l`xu|VY133cT^q6kH zq}^x3+(JiO)_!3)I6U>YDmd7+(MH<$XYB>YblT-nw9hZvEvtVeRyawWEiEh7%=sS?=x3tzCANorGFvT1C{$gP7 zVyD{I^yjxUUjZSd*m5<8w*EtV!y)Brt{!+Bng-wwxuf~uSvKY_5RP6UIA^RDqcdG$ zU49*)U%v+=m*S5Hl;z}Rz0m_r75ESWA8Ou$glNoiQjdHD$Cyx}uYRmG#YzwSsm&DV z-aJb)vo>a96)YO4FaH}TPYAzw0(%NM0;iv9gneB2M{^dCvwZWJ){w~-%l~RmVO3xK z3m|b`4+yXlysEv|e`h$Y`yb#of9mua)~4l4?K+G|dj(Jp7Z8Z6O>ET;@6!iHTQn>& zd)3YeJ?xEET`-EQ8DXtqO1?z9JkV~6a*Mri_lp#)&EXEolJ#XKs|hcZ`DQCnm|^-c zVpZ@6{!YaBVEv3_<$eA^wzk62yiu&nkl(sYv$lb@w*>IEWt)^(V`oGd{nl!I1=+r- zZtZ}RPn@h0&XeYBg*!%Y1a0hMeE}zPJy&Z-OdsWDjlv~9<7xGxU%FfW-~e>a)9S7t z_pn+RUE^uh1b#GNJbmnC{T+J1iahkT-mgs3|Eg(q#dAfhZG8?{;B{^56Yl`NOC&#c z$CCHVFRf8LShv)*&Js-f`{+yRS;xRfZ~bn4D>9(<{~B03qh|uWLnFA~%gD=UxG_kd z+8E|Q3=T!8*wMu5FDStg2o_NCdQ+=2<1qZy%-VykZA1&J6J!W6%0~NG`MsxKt=e0&1UQoCUerrESUa2W%->Qs`iPNhKz?!c z7q|4MoviHyt)v3mZ`C_?0U(nZ9)+Uay8_4{aaC%WdxL3VR`tQKEOH1RmOkVi>ogO=rOu!LKyZdR zHP!|W3g^_m`iK$M76L + + + - - - Bash Reference Manual @@ -25,17 +25,21 @@ A copy of the license is included in the section entitled + + + + @@ -63,7 +68,36 @@ ul.no-bullet {list-style: none} - + +

+ +

Bash Features

+ +

This text is a brief description of the features that are present in +the Bash shell (version 5.2, 26 December 2021). +The Bash home page is http://www.gnu.org/software/bash/. +

+

This is Edition 5.2, last updated 26 December 2021, +of The GNU Bash Reference Manual, +for Bash, Version 5.2. +

+

Bash contains features that appear in other popular shells, and some +features that only appear in Bash. Some of the shells that Bash has +borrowed concepts from are the Bourne Shell (sh), the Korn Shell +(ksh), and the C-shell (csh and its successor, +tcsh). The following menu breaks the features up into +categories, noting which features were inspired by other shells and +which are specific to Bash. +

+

This manual is meant as a brief introduction to features found in +Bash. The Bash manual page should be used as the definitive +reference on shell behavior. +

+ +

Table of Contents

@@ -266,85 +300,22 @@ ul.no-bullet {list-style: none}
- - -
-

-Next: , Previous: , Up: (dir)   [Contents][Index]

-

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 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. -

-

Bash contains features that appear in other popular shells, and some -features that only appear in Bash. Some of the shells that Bash has -borrowed concepts from are the Bourne Shell (sh), the Korn Shell -(ksh), and the C-shell (csh and its successor, -tcsh). The following menu breaks the features up into -categories, noting which features were inspired by other shells and -which are specific to Bash. -

-

This manual is meant as a brief introduction to features found in -Bash. The Bash manual page should be used as the definitive -reference on shell behavior. -

- - - - - - - - - - - - - - - - -
-
+
+

-Next: , Up: Top   [Contents][Index]

+Next: , Up: Bash Features   [Contents][Index]

1 Introduction

- - - - +
-
+
+ @@ -374,7 +345,9 @@ independently-supported ports exist for MS-DOS, OS/2
-
+
+
+

Previous: , Up: Introduction   [Contents][Index]

@@ -433,146 +406,132 @@ editing, command history and aliases. Each of these features is described in this manual.


-
+
+
+
+

2 Definitions

These definitions are used throughout the remainder of this manual.

-
POSIX
-
-

A family of open system standards based on Unix. Bash +

POSIX
+

A family of open system standards based on Unix. Bash is primarily concerned with the Shell and Utilities portion of the POSIX 1003.1 standard.

-
blank
+
blank

A space or tab character.

-
builtin
-
-

A command that is implemented internally by the shell itself, rather +

builtin
+

A command that is implemented internally by the shell itself, rather than by an executable program somewhere in the file system.

-
control operator
-
-

A token that performs a control function. It is a newline +

control operator
+

A token that performs a control function. It is a newline or one of the following: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, ‘|&’, ‘(’, or ‘)’.

-
exit status
-
-

The value returned by a command to its caller. The value is restricted +

exit status
+

The value returned by a command to its caller. The value is restricted to eight bits, so the maximum value is 255.

-
field
-
-

A unit of text that is the result of one of the shell expansions. After +

field
+

A unit of text that is the result of one of the shell expansions. After expansion, when executing a command, the resulting fields are used as the command name and arguments.

-
filename
-
-

A string of characters used to identify a file. +

filename
+

A string of characters used to identify a file.

-
job
-
-

A set of processes comprising a pipeline, and any processes descended +

job
+

A set of processes comprising a pipeline, and any processes descended from it, that are all in the same process group.

-
job control
-
-

A mechanism by which users can selectively stop (suspend) and restart +

job control
+

A mechanism by which users can selectively stop (suspend) and restart (resume) execution of processes.

-
metacharacter
-
-

A character that, when unquoted, separates words. A metacharacter is +

metacharacter
+

A character that, when unquoted, separates words. A metacharacter is a space, tab, newline, or one of the following characters: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’.

-
name
-
- +
name
+

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

-
operator
-
-

A control operator or a redirection operator. +

operator
+

A control operator or a redirection operator. See Redirections, for a list of redirection operators. Operators contain at least one unquoted metacharacter.

-
process group
-
-

A collection of related processes each having the same process +

process group
+

A collection of related processes each having the same process group ID.

-
process group ID
-
-

A unique identifier that represents a process group +

process group ID
+

A unique identifier that represents a process group during its lifetime.

-
reserved word
-
-

A word that has a special meaning to the shell. Most reserved +

reserved word
+

A word that has a special meaning to the shell. Most reserved words introduce shell flow control constructs, such as for and while.

-
return status
-
-

A synonym for exit status. +

return status
+

A synonym for exit status.

-
signal
-
-

A mechanism by which a process may be notified by the kernel +

signal
+

A mechanism by which a process may be notified by the kernel of an event occurring in the system.

-
special builtin
-
-

A shell builtin command that has been classified as special by the +

special builtin
+

A shell builtin command that has been classified as special by the POSIX standard.

-
token
-
-

A sequence of characters considered a single unit by the shell. +

token
+

A sequence of characters considered a single unit by the shell. It is either a word or an operator.

-
word
-
-

A sequence of characters treated as a unit by the shell. +

word
+

A sequence of characters treated as a unit by the shell. Words may not include unquoted metacharacters.


-
+
+
+

3 Basic Shell Features

@@ -590,40 +549,24 @@ shell expansions, redirections, which are a way to direct input and output from and to named files, and how the shell executes commands.

- - - - - - - - - - +
-
+
+

3.1 Shell Syntax

- - - - -

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’s exit status, and makes that exit status available for further inspection or processing.

+
-
+
+

Next: , Up: Shell Syntax   [Contents][Index]

@@ -679,27 +628,14 @@ status (see Exit Status).
-
+
+
+

Next: , Previous: , Up: Shell Syntax   [Contents][Index]

3.1.2 Quoting

- - - - - - -

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 History Interaction), the -history expansion character, usually ‘!’, must be quoted +(see History Expansion), the +history expansion character, usually ‘!’, must be quoted to prevent history expansion. See Bash History Facilities, for more details concerning history expansion.

There are three quoting mechanisms: the -escape character, single quotes, and double quotes. -

+escape character, single quotes, and double quotes. +

+
-
+
+

Next: , Up: Quoting   [Contents][Index]

@@ -733,7 +677,9 @@ is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).


-
+
+
+

Next: , Previous: , Up: Quoting   [Contents][Index]

@@ -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.


-
+
+
+

Next: , Previous: , Up: Quoting   [Contents][Index]

@@ -776,73 +724,76 @@ The backslash preceding the ‘!’ is not removed. when in double quotes (see Shell Parameter Expansion).


-
+
+
+

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
+
\a

alert (bell)

-
\b
+
\b

backspace

-
\e
-
\E
+
\e
+
\E

an escape character (not ANSI C)

-
\f
+
\f

form feed

-
\n
+
\n

newline

-
\r
+
\r

carriage return

-
\t
+
\t

horizontal tab

-
\v
+
\v

vertical tab

-
\\
+
\\

backslash

-
\'
+
\'

single quote

-
\"
+
\"

double quote

-
\?
+
\?

question mark

-
\nnn
+
\nnn

the eight-bit character whose value is the octal value nnn (one to three octal digits)

-
\xHH
+
\xHH

the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

-
\uHHHH
+
\uHHHH

the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

-
\UHHHHHHHH
+
\UHHHHHHHH

the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

-
\cx
+
\cx

a control-x character

@@ -851,7 +802,9 @@ present, are decoded as follows: been present.


-
+
+
+

Previous: , Up: Quoting   [Contents][Index]

@@ -861,32 +814,142 @@ Previous:

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. +

+
+
+

+   [Contents][Index]

+
+

Creating Internationalized Scripts

+ + +

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.

+ -

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. +

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.


-
+
+
+
+

Previous: , Up: Shell Syntax   [Contents][Index]

@@ -905,7 +968,10 @@ See Interactive Shells, for a description of w a shell interactive.


-
+
+
+
+ @@ -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.

- - - - - - - - - +
-
+
+ @@ -965,7 +1024,9 @@ the first word of a command (see below for exceptions): words if they are the third word in a for command.


-
+
+
+

Next: , Previous: , Up: Shell Commands   [Contents][Index]

@@ -984,9 +1045,11 @@ by the POSIX 1003.1 waitpid function, or 128+n< the command was terminated by signal n.


-
+
+
+

3.2.3 Pipelines

@@ -1006,15 +1069,15 @@ one of 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. +connection is performed before any redirections specified by +command1.

If ‘|&’ is used, command1’s standard error, in addition to its standard output, is connected to command2’s standard input through the pipe; it is shorthand for 2>&1 |. This implicit redirection of the standard error to the standard output is -performed after any redirections specified by the command. +performed after any redirections specified by command1.

The reserved word time causes timing statistics to be printed for the pipeline once it finishes. @@ -1038,14 +1101,15 @@ total user and system time consumed by the shell and its children. The TIMEFORMAT variable may be used to specify the format of the time information.

-

If the pipeline is not executed asynchronously (see Lists), the +

If the pipeline is not executed asynchronously (see Lists of Commands), 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 pipeline is executed in its own subshell, which is a separate process (see Command Execution Environment). If the lastpipe option is enabled using the shopt builtin (see 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 @@ -1061,7 +1125,9 @@ The shell waits for all commands in the pipeline to terminate before returning a value.


-
+
+
+ @@ -1082,8 +1148,8 @@ to delimit commands, equivalent to a semicolon.

If a command is terminated by the control operator ‘&’, the shell executes the command asynchronously in a subshell. -This is known as executing the command in the background, -and these are referred to as asynchronous commands. +This is known as executing the command in the background, +and these are referred to as asynchronous commands. The shell does not wait for the command to finish, and the return status is 0 (true). When job control is not active (see Job Control), @@ -1120,21 +1186,15 @@ returns a non-zero exit status. executed in the list.


-
+
+
+

-Next: , Previous: , Up: Shell Commands   [Contents][Index]

+Next: , Previous: , Up: Shell Commands   [Contents][Index]

3.2.5 Compound Commands

- - - - -

Compound commands are the shell programming language constructs. Each construct begins with a reserved word or control operator and is @@ -1149,8 +1209,14 @@ followed by a newline in place of a semicolon.

Bash provides looping constructs, conditional commands, and mechanisms to group commands and execute them as a unit.

+
-
+
+ @@ -1163,9 +1229,8 @@ Next:
+

The syntax of the until command is:

@@ -1179,9 +1244,8 @@ The return status is the exit status of the last command executed in consequent-commands, or zero if none was executed.

-
while
-
-

The syntax of the while command is: +

while
+

The syntax of the while command is:

while test-commands; do consequent-commands; done
@@ -1193,9 +1257,8 @@ The return status is the exit status of the last command executed
 in consequent-commands, or zero if none was executed.
 

-
for
-
-

The syntax of the for command is: +

for
+

The syntax of the for command is:

for name [ [in [words …] ] ; ] do commands; done
@@ -1235,17 +1298,18 @@ that is executed, or false if any of the expressions is invalid.
 may be used to control loop execution.
 


-
+
+
+

3.2.5.2 Conditional Constructs

-
if
-
- +
if
+
@@ -1273,9 +1337,8 @@ The return status is the exit status of the last command executed, or zero if no condition tested true.

-
case
-
- +
case
+

The syntax of the case command is:

@@ -1302,9 +1365,10 @@ as a clause. The word undergoes tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal (see Shell Parameter Expansion) -before matching is -attempted. Each pattern undergoes tilde expansion, parameter -expansion, command substitution, and arithmetic expansion. +before matching is attempted. +Each pattern undergoes tilde expansion, parameter expansion, +command substitution, arithmetic expansion, process substitution, and +quote removal.

There may be an arbitrary number of case clauses, each terminated by a ‘;;’, ‘;&’, or ‘;;&’. @@ -1342,9 +1406,8 @@ continuing the case statement execution as if the pattern list had not matched. return status is the exit status of the command-list executed.

-
select
-
- +
select
+

The select construct allows the easy generation of menus. It has almost the same syntax as the for command:

@@ -1383,24 +1446,24 @@ done
-
((…))
+
((…))
(( expression ))
 

The arithmetic expression is evaluated according to the rules described below (see 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. This is exactly equivalent to -

-
let "expression"
-
-

See Bash Builtins, for a full description of the let builtin. +otherwise the return status is 1.

+
-
[[…]]
-
- +
[[…]]
+
[[ expression ]]
 
@@ -1409,10 +1472,12 @@ otherwise the return status is 1. This is exactly equivalent to the conditional expression expression. Expressions are composed of the primaries described below in Bash Conditional Expressions. -Word splitting and filename expansion are not performed on the words -between the [[ and ]]; tilde expansion, parameter and +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 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 ‘-f’ must be unquoted to be recognized as primaries.

@@ -1430,78 +1495,110 @@ 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. +

+

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 right of the operator is considered -a POSIX extended regular expression and matched accordingly +When you use ‘=~’, the string to the right of the operator is considered +a POSIX extended regular expression pattern and matched accordingly (using the POSIX regcomp and regexec interfaces usually described in regex(3)). -The return value is 0 if the string matches -the pattern, and 1 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 nocasematch shell option (see the description of shopt in 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 ‘^’ 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. +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) +(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’: -

+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. +

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.

-

Storing the regular expression in a shell variable is often a useful +

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. -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: +

+
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: -

+

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 +(see 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 ]]
@@ -1513,30 +1610,66 @@ The following two sets of commands are not equivalent:
 
 

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 ‘\.’. 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. +

Expressions may be combined using the following operators, listed in decreasing order of precedence:

-
( expression )
+
( expression )

Returns the value of expression. This may be used to override the normal precedence of operators.

-
! expression
+
! expression

True if expression is false.

-
expression1 && expression2
+
expression1 && expression2

True if both expression1 and expression2 are true.

-
expression1 || expression2
+
expression1 || expression2

True if either expression1 or expression2 is true.

@@ -1548,7 +1681,9 @@ value of the entire conditional expression.

-
+
+
+ @@ -1561,21 +1696,20 @@ to the entire command list. For example, the output of all the commands in the list may be redirected to a single stream.

-
()
+
()
( list )
 
-

Placing a list of commands between parentheses causes a subshell -environment to be created (see Command Execution Environment), and each -of the commands in list to be executed in that subshell. Since the -list is executed in a subshell, variable assignments do not remain in -effect after the subshell completes. +

Placing a list of commands between parentheses forces the shell to create +a subshell (see Command Execution Environment), and each +of the commands in list is executed in that subshell environment. +Since the list is executed in a subshell, variable assignments do not +remain in effect after the subshell completes.

-
{}
-
- +
{}
+
{ list; }
 
@@ -1588,9 +1722,9 @@ The semicolon (or newline) following list is required.

In addition to the creation of a subshell, there is a subtle difference between these two constructs due to historical reasons. The braces -are reserved words, so they must be separated from the list +are reserved words, so they must be separated from the list by blanks or other shell metacharacters. -The parentheses are operators, and are +The parentheses are operators, and are recognized as separate tokens by the shell even if they are not separated from the list by whitespace.

@@ -1598,7 +1732,10 @@ from the list by whitespace. list.


-
+
+
+
+ @@ -1611,26 +1748,53 @@ 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 (see Simple Commands); otherwise, it is interpreted as -the first word of the simple command. +command may be either a simple command (see Simple Commands) +or a compound command (see 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 (see Arrays) -named NAME in the context of the executing shell. +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]. +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]. +and that file descriptor is assigned to NAME[1]. This pipe is established before any redirections specified by the command (see Redirections). The file descriptors can be utilized as arguments to shell commands @@ -1639,7 +1803,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 NAME_PID. +available as the value of the variable NAME_PID. The wait builtin command may be used to wait for the coprocess to terminate.

@@ -1648,7 +1812,9 @@ the coproc command always returns success. The return status of a coprocess is the exit status of command.


-
+
+
+

Previous: , Up: Shell Commands   [Contents][Index]

@@ -1665,113 +1831,15 @@ Parallel provides shorthand references to many of the most common operations 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.


-
+
+
+
+ @@ -1803,16 +1871,16 @@ shell context; no new process is created to interpret them. word function is optional. If the function reserved word is supplied, the parentheses are optional. -The body of the function is the compound command +The body of the function is the compound command compound-command (see 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. +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. +name of a simple command. When the shell is in POSIX mode (see Bash POSIX Mode), -fname must be a valid shell name and +fname must be a valid shell name and may not be the same as one of the special builtins (see Special Builtins). In default mode, a function name can be any unquoted shell word that does @@ -1889,7 +1957,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 @@ -1901,11 +1969,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 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 @@ -1943,12 +2011,13 @@ variable with that name that had been shadowed will become visible.

Function names and definitions may be listed with the -f option to the declare (typeset) -builtin command (see Bash Builtins). +builtin command (see Bash Builtin Commands). 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 +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 (see Bourne Shell Builtins). @@ -1959,7 +2028,9 @@ function call stack and restrict the number of function invocations. By default, no limit is placed on the number of recursive calls.


-
+
+
+ @@ -1968,20 +2039,14 @@ Next: , - - - - -

A parameter is an entity that stores values. +

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. +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 Bash Builtins). +(see the description of the declare builtin in Bash Builtin Commands).

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 +2060,16 @@ the unset builtin command. 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 +removal (see 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 (see Arithmetic Expansion). -Word splitting is not performed, with the exception -of "$@" 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 alias, declare, typeset, export, readonly, -and local builtin commands (declaration commands). +and local builtin commands (declaration commands). When in POSIX mode (see 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. @@ -2015,8 +2079,8 @@ to a shell variable or array index (see Arrays), the &lsqu 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 +accept assignment statements (declaration commands). +When ‘+=’ is applied to a variable for which the integer attribute has been set, value is evaluated as an arithmetic expression and added to the variable’s current value, which is also evaluated. When ‘+=’ is applied to an array variable using compound assignment @@ -2028,10 +2092,10 @@ 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 +

A variable can be assigned the nameref attribute using the -n option to the declare or local builtin commands -(see Bash Builtins) -to create a nameref, or a reference to another variable. +(see Bash Builtin Commands) +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 @@ -2045,9 +2109,9 @@ argument, running

declare -n ref=$1
 
-

inside the function creates a nameref variable ref whose value is +

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, +References and assignments to ref, and changes to its attributes, are treated as references, assignments, and attribute modifications to the variable whose name was passed as $1.

@@ -2063,15 +2127,20 @@ Namerefs can be unset using the -n option to the unset Otherwise, if unset is executed with the name of a nameref variable as an argument, the variable referenced by the nameref variable will be unset.

+
-
+
+

3.4.1 Positional Parameters

-

A positional parameter is a parameter denoted by one or more +

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. @@ -2088,7 +2157,9 @@ temporarily replaced when a shell function is executed digit is expanded, it must be enclosed in braces.


-
+
+
+ @@ -2099,9 +2170,7 @@ Previous:

($*) Expands to the positional parameters, starting from one. When the expansion is not within double quotes, each positional parameter @@ -2119,9 +2188,7 @@ If IFS is null, the parameters are joined without intervening separators.

-
@ - -
+
@

($@) Expands to the positional parameters, starting from one. In contexts where word splitting is performed, this expands each @@ -2144,24 +2211,18 @@ When there are no positional parameters, "$@" and expand to nothing (i.e., they are removed).

-
# - -
+
#

($#) Expands to the number of positional parameters in decimal.

-
? - -
+
?

($?) Expands to the exit status of the most recently executed foreground pipeline.

-
- - -
+
-

($-, a hyphen.) Expands to the current option flags as specified upon invocation, by the set @@ -2169,26 +2230,20 @@ builtin command, or those set by the shell itself (such as the -i option).

-
$ - -
+
$
-

($$) Expands to the process ID of the shell. In a () subshell, it +

($$) Expands to the process ID of the shell. In a subshell, it expands to the process ID of the invoking shell, not the subshell.

-
! - -
+
!

($!) Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg builtin (see Job Control Builtins).

-
0 - -
+
0

($0) Expands to the name of the shell or shell script. This is set at shell initialization. If Bash is invoked with a file of commands @@ -2201,7 +2256,10 @@ to the filename used to invoke Bash, as given by argument zero.


-
+
+
+
+ @@ -2221,29 +2279,6 @@ Next: , Previou
  • filename expansion
  • - - - - - - - - - - -

    The order of expansions is: brace expansion; @@ -2253,14 +2288,14 @@ word splitting; and filename expansion.

    On systems that can support it, there is an additional expansion -available: process substitution. +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). +(quote removal).

    Only brace expansion, word splitting, and filename expansion can increase the number of words of the expansion; other expansions @@ -2273,8 +2308,20 @@ The only exceptions to this are the expansions of

    After all expansions, quote removal (see Quote Removal) is performed.

    +
    -
    +
    + @@ -2284,7 +2331,7 @@ Next: , U

    Brace expansion is a mechanism by which arbitrary strings may be generated. This mechanism is similar to -filename expansion (see Filename Expansion), +filename expansion (see Filename Expansion), but the filenames generated need not exist. Patterns to be brace expanded take the form of an optional preamble, followed by either a series of comma-separated strings or a sequence expression @@ -2304,7 +2351,7 @@ ade ace abe

    A sequence expression takes the form {x..y[..incr]}, -where x and y are either integers or single characters, +where x and y are either integers or letters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x and y, inclusive. @@ -2313,10 +2360,11 @@ 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 +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. +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.

    @@ -2349,7 +2397,9 @@ above example:

    -
    +
    +
    + @@ -2359,10 +2409,10 @@ Next:

    Shell Parameters) when they appear as arguments to simple commands. -Bash does not do this, except for the declaration commands listed +Bash does not do this, except for the declaration commands listed above, when in POSIX mode.


    -
    +
    +
    + @@ -2467,7 +2519,7 @@ 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, +and parameter is not a nameref, it introduces a level of indirection. Bash uses the value formed by expanding the rest of parameter as the new parameter; this is then @@ -2496,13 +2548,19 @@ the operator tests for both parameter’s existence and that its is not null; if the colon is omitted, the operator tests only for existence.

    -
    ${parameter:-word}
    +
    ${parameter:-word}

    If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

    +
    +
    $ v=123
    +$ echo ${v-unset}
    +123
    +
    +
    -
    ${parameter:=word}
    +
    ${parameter:=word}

    If parameter is unset or null, the expansion of word is assigned to parameter. @@ -2510,8 +2568,15 @@ 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}
    +
    ${parameter:?word}

    If parameter is null or unset, the expansion of word (or a message to that effect if word @@ -2519,15 +2584,27 @@ 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}
    +
    ${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}
    +
    ${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. @@ -2669,16 +2746,16 @@ If offset is 0, and the positional parameters are used, $0

    -
    ${!prefix*}
    -
    ${!prefix@}
    +
    ${!prefix*}
    +
    ${!prefix@}

    Expands to the names of variables whose names begin with prefix, separated by the first character of the IFS special variable. When ‘@’ is used and the expansion appears within double quotes, each variable name expands to a separate word.

    -
    ${!name[@]}
    -
    ${!name[*]}
    +
    ${!name[@]}
    +
    ${!name[*]}

    If name is an array variable, expands to the list of array indices (keys) assigned in name. If name is not an array, expands to 0 if name is set and null @@ -2687,7 +2764,7 @@ When ‘@’ is used and the expansion appears within doubl key expands to a separate word.

    -
    ${#parameter}
    +
    ${#parameter}

    The length in characters of the expanded value of parameter is substituted. If parameter is ‘*’ or ‘@’, the value substituted @@ -2701,8 +2778,8 @@ interpreted as relative to one greater than the maximum index of array, and an index of -1 references the last element.

    -
    ${parameter#word}
    -
    ${parameter##word}
    +
    ${parameter#word}
    +
    ${parameter##word}

    The word is expanded to produce a pattern and matched according to the rules described below (see Pattern Matching). If the pattern matches @@ -2719,8 +2796,8 @@ the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter%word}
    -
    ${parameter%%word}
    +
    ${parameter%word}
    +
    ${parameter%%word}

    The word is expanded to produce a pattern and matched according to the rules described below (see Pattern Matching). @@ -2737,23 +2814,79 @@ the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter/pattern/string}
    -
    -

    The pattern is expanded to produce a pattern just as in +

    ${parameter/pattern/string}
    +
    ${parameter//pattern/string}
    +
    ${parameter/#pattern/string}
    +
    ${parameter/%pattern/string}
    +

    The pattern is expanded to produce a pattern just as in filename expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. +string undergoes tilde expansion, parameter and variable expansion, +arithmetic expansion, command and process substitution, and quote removal. The match is performed according to the rules described below (see 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 +

    +

    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. +Backslash is used to quote ‘&’ in string; the backslash is removed +in order to permit a literal ‘&’ in the replacement string. +Pattern substitution performs the check for ‘&’ after expanding +string, +so users should take care to quote backslashes intended to escape +the ‘&’ and inhibit replacement so they survive any quote removal +performed by the expansion of string. +For instance, +

    +
    +
    var=abcdef
    +echo ${var/abc/& }
    +echo "${var/abc/& }"
    +echo ${var/abc/"& "}
    +
    + +

    will display three lines of "abc def", while +

    +
    +
    var=abcdef
    +echo ${var/abc/\& }
    +echo "${var/abc/\& }"
    +echo ${var/abc/"\& "}
    +
    + +

    will display two lines of "abc def" and a third line of "& def". +The first two are replaced because the backslash is removed by quote +removal performed during the expansion of string +(the expansion is performed in a +context that doesn’t take any enclosing double quotes into account, as +with other word expansions). +In the third case, the double quotes affect the expansion +of ‘\&’, and, because ‘&’ is not one of the characters for +which backslash is special in double quotes, +the backslash survives the expansion, inhibits the replacement, +but is removed because it is treated specially. +One could use ‘\\&’, unquoted, as the replacement string to achive +the same effect. +It should rarely be necessary to enclose only string in double +quotes. +

    +

    If the nocasematch shell option (see the description of shopt in The Shopt Builtin) is enabled, the match is performed without regard to the case of alphabetic characters. @@ -2766,17 +2899,18 @@ the substitution operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter^pattern}
    -
    ${parameter^^pattern}
    -
    ${parameter,pattern}
    -
    ${parameter,,pattern}
    +
    ${parameter^pattern}
    +
    ${parameter^^pattern}
    +
    ${parameter,pattern}
    +
    ${parameter,,pattern}

    This expansion modifies the case of alphabetic characters in parameter. The pattern is expanded to produce a pattern just as in filename expansion. Each character in the expanded value of parameter is tested against pattern, and, if it matches the pattern, its case is converted. The pattern should not attempt to match more than one character. -The ‘^’ operator converts lowercase letters matching pattern +

    +

    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 @@ -2784,7 +2918,8 @@ expanded value; the ‘^’ and ‘,&rsquo the first character in the expanded value. If pattern is omitted, it is treated like a ‘?’, which matches every character. -If parameter is ‘@’ or ‘*’, +

    +

    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 @@ -2793,51 +2928,55 @@ the case modification operation is applied to each member of the array in turn, and the expansion is the resultant list.

    -
    ${parameter@operator}
    +
    ${parameter@operator}

    The expansion is either a transformation of the value of parameter or information about parameter itself, depending on the value of operator. Each operator is a single letter:

    -
    U
    +
    U

    The expansion is a string that is the value of parameter with lowercase alphabetic characters converted to uppercase.

    -
    u
    +
    u

    The expansion is a string that is the value of parameter with the first character converted to uppercase, if it is alphabetic.

    -
    L
    +
    L

    The expansion is a string that is the value of parameter with uppercase alphabetic characters converted to lowercase.

    -
    Q
    +
    Q

    The expansion is a string that is the value of parameter quoted in a format that can be reused as input.

    -
    E
    +
    E

    The expansion is a string that is the value of parameter with backslash escape sequences expanded as with the $'…' quoting mechanism.

    -
    P
    +
    P

    The expansion is a string that is the result of expanding the value of parameter as if it were a prompt string (see Controlling the Prompt).

    -
    A
    +
    A

    The expansion is a string in the form of an assignment statement or declare command that, if evaluated, will recreate parameter with its attributes and value.

    -
    K
    +
    K

    Produces a possibly-quoted version of the value of parameter, except that it prints the values of indexed and associative arrays as a sequence of quoted key-value pairs (see Arrays).

    -
    a
    +
    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 ‘*’, @@ -2854,7 +2993,9 @@ expansion as described below.


    -
    +
    +
    + @@ -2895,7 +3036,9 @@ form, escape the inner backquotes with backslashes. filename expansion are not performed on the results.


    -
    +
    +
    + @@ -2910,8 +3053,10 @@ and the substitution of the result. The format for arithmetic expansion is:
    $(( expression ))
     
    -

    The expression is treated as if it were within double quotes, but -a double quote inside the parentheses is not treated specially. +

    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. @@ -2923,7 +3068,9 @@ If the expression is invalid, Bash prints a message indicating failure to the standard error and no substitution occurs.


    -
    +
    +
    + @@ -2960,7 +3107,9 @@ parameter and variable expansion, command substitution, and arithmetic expansion.


    -
    +
    +
    + @@ -3008,15 +3157,13 @@ null argument removal. is performed.


    -
    +
    +
    +

    3.5.8 Filename Expansion

    - - - @@ -3042,9 +3189,13 @@ without regard to the case of alphabetic characters.

    When a pattern is used for filename expansion, the character ‘.’ at the start of a filename or immediately following a slash must be matched explicitly, unless the shell option dotglob is set. -The filenames ‘.’ and ‘..’ must always be matched explicitly, +In order to match the filenames ‘.’ and ‘..’, +the pattern must begin with ‘.’ (for example, ‘.?’), even if dotglob is set. -In other cases, the ‘.’ character is not treated specially. +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 @@ -3053,6 +3204,7 @@ below (see Pattern Matching).

    See the description of shopt in The Shopt Builtin, for a description of the nocaseglob, nullglob, +globskipdots, failglob, and dotglob options.

    The GLOBIGNORE @@ -3075,8 +3227,12 @@ To get the old behavior of ignoring filenames beginning with a The dotglob option is disabled when GLOBIGNORE is unset.

    +
    -
    +
    + @@ -3094,7 +3250,7 @@ literally.

    The special pattern characters have the following meanings:

    -
    *
    +
    *

    Matches any string, including the null string. When the globstar shell option is enabled, and ‘*’ is used in a filename expansion context, two adjacent ‘*’s used as a single @@ -3103,10 +3259,10 @@ subdirectories. If followed by a ‘/’, two adjacent ‘*’s will match only directories and subdirectories.

    -
    ?
    +
    ?

    Matches any single character.

    -
    […]
    +
    […]

    Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that falls between those two characters, inclusive, @@ -3130,7 +3286,7 @@ 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 +

    Within ‘[’ and ‘]’, character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX standard: @@ -3142,7 +3298,7 @@ print punct space upper word xdigit The word character class matches letters, digits, and the character ‘_’.

    -

    Within ‘[’ and ‘]’, an equivalence class can be +

    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. @@ -3153,34 +3309,47 @@ matches the collating symbol symbol.

    If the extglob shell option is enabled using the shopt -builtin, several extended pattern matching operators are recognized. +builtin, the shell recognizes several extended pattern matching operators. In the following description, a pattern-list is a list of one or more patterns separated by a ‘|’. +When matching filenames, the dotglob shell option determines +the set of filenames that are tested, as described above. Composite patterns may be formed using one or more of the following sub-patterns:

    -
    ?(pattern-list)
    +
    ?(pattern-list)

    Matches zero or one occurrence of the given patterns.

    -
    *(pattern-list)
    +
    *(pattern-list)

    Matches zero or more occurrences of the given patterns.

    -
    +(pattern-list)
    +
    +(pattern-list)

    Matches one or more occurrences of the given patterns.

    -
    @(pattern-list)
    +
    @(pattern-list)

    Matches one of the given patterns.

    -
    !(pattern-list)
    +
    !(pattern-list)

    Matches anything except one of the given patterns.

    +

    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. @@ -3188,7 +3357,10 @@ Using separate matches against shorter strings, or using arrays of strings instead of a single long string, may be faster.


    -
    +
    +
    +
    + @@ -3199,7 +3371,10 @@ characters ‘\’, ‘'’, and &lsqu result from one of the above expansions are removed.


    -
    +
    +
    +
    + @@ -3207,9 +3382,9 @@ Next:

    The Shopt Builtin).

    In the following descriptions, if the file descriptor number is omitted, and the first character of the redirection operator is @@ -3265,29 +3442,29 @@ special files, bash will use them; otherwise it will emulate them internally with the behavior described below.

    -
    /dev/fd/fd
    +
    /dev/fd/fd

    If fd is a valid integer, file descriptor fd is duplicated.

    -
    /dev/stdin
    +
    /dev/stdin

    File descriptor 0 is duplicated.

    -
    /dev/stdout
    +
    /dev/stdout

    File descriptor 1 is duplicated.

    -
    /dev/stderr
    +
    /dev/stderr

    File descriptor 2 is duplicated.

    -
    /dev/tcp/host/port
    +
    /dev/tcp/host/port

    If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open the corresponding TCP socket.

    -
    /dev/udp/host/port
    +
    /dev/udp/host/port

    If host is a valid hostname or Internet address, and port is an integer port number or service name, Bash attempts to open the corresponding UDP socket. @@ -3300,7 +3477,20 @@ the corresponding UDP socket. care, as they may conflict with file descriptors the shell uses internally.

    -

    3.6.1 Redirecting Input

    + +
    +

    3.6.1 Redirecting Input

    Redirection of input causes the file whose name results from the expansion of word to be opened for reading on file descriptor n, @@ -3312,7 +3502,9 @@ is not specified.

    [n]<word
     
    -

    3.6.2 Redirecting Output

    +
    +
    +

    3.6.2 Redirecting Output

    Redirection of output causes the file whose name results from the expansion of word to be opened for writing on file descriptor n, @@ -3333,7 +3525,9 @@ If the redirection operator is ‘>|’, or the redirect ‘>’ and the noclobber option is not enabled, the redirection is attempted even if the file named by word exists.

    -

    3.6.3 Appending Redirected Output

    +
    +
    +

    3.6.3 Appending Redirected Output

    Redirection of output in this fashion causes the file whose name results from the expansion of word @@ -3346,7 +3540,9 @@ is not specified. If the file does not exist it is created.

    [n]>>word
     
    -

    3.6.4 Redirecting Standard Output and Standard Error

    +
    +
    +

    3.6.4 Redirecting Standard Output and Standard Error

    This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) @@ -3371,7 +3567,9 @@ This is semantically equivalent to ‘-’. If it does, other redirection operators apply (see Duplicating File Descriptors below) for compatibility reasons.

    -

    3.6.5 Appending Standard Output and Standard Error

    +
    +
    +

    3.6.5 Appending Standard Output and Standard Error

    This construct allows both the standard output (file descriptor 1) and the standard error output (file descriptor 2) @@ -3388,7 +3586,9 @@ expansion of word.

    (see Duplicating File Descriptors below).

    -

    3.6.6 Here Documents

    +
    +
    +

    3.6.6 Here Documents

    This type of redirection instructs the shell to read input from the current source until a line containing only word (with no trailing blanks) is seen. All of @@ -3420,7 +3620,9 @@ line containing delimiter. This allows here-documents within shell scripts to be indented in a natural fashion.

    -

    3.6.7 Here Strings

    +
    +
    +

    3.6.7 Here Strings

    A variant of here documents, the format is:

    [n]<<< word
    @@ -3435,7 +3637,9 @@ with a newline appended,
     to the command on its
     standard input (or file descriptor n if n is specified).
     

    -

    3.6.8 Duplicating File Descriptors

    +
    +
    +

    3.6.8 Duplicating File Descriptors

    The redirection operator

    [n]<&word
    @@ -3464,7 +3668,9 @@ As a special case, if n is omitted, and word does not
     expand to one or more digits or ‘-’, the standard output and standard
     error are redirected as described previously.
     

    -

    3.6.9 Moving File Descriptors

    +
    +
    +

    3.6.9 Moving File Descriptors

    The redirection operator

    [n]<&digit-
    @@ -3480,7 +3686,9 @@ or the standard input (file descriptor 0) if n is not specified.
     

    moves the file descriptor digit to file descriptor n, or the standard output (file descriptor 1) if n is not specified.

    -

    3.6.10 Opening File Descriptors for Reading and Writing

    +
    +
    +

    3.6.10 Opening File Descriptors for Reading and Writing

    The redirection operator

    [n]<>word
    @@ -3491,34 +3699,27 @@ to be opened for both reading and writing on file descriptor
     is not specified.  If the file does not exist, it is created.
     


    -
    +
    +
    +
    +

    3.7 Executing Commands

    - - - - - - - - +
    -
    +
    + @@ -3548,7 +3749,11 @@ 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 +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 +3769,9 @@ the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero.


    -
    +
    +
    + @@ -3610,7 +3817,7 @@ to the command are set to the arguments supplied, 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 -shell script and the shell executes it as described in +shell script and the shell executes it as described in Shell Scripts.
  • If the command was not begun asynchronously, the shell waits for @@ -3619,14 +3826,16 @@ the command to complete and collects its exit status.

  • -
    +
    +
    +

    3.7.3 Command Execution Environment

    -

    The shell has an execution environment, which consists of the +

    The shell has an execution environment, which consists of the following:

      @@ -3655,7 +3864,7 @@ arguments) or by set
    • shell aliases defined with alias (see Aliases)
    • various process IDs, including those of background jobs -(see Lists), the value of $$, and the value of +(see Lists of Commands), the value of $$, and the value of $PPID
    @@ -3685,6 +3894,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 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, @@ -3704,7 +3915,9 @@ Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections.


    -
    +
    +
    + @@ -3712,13 +3925,13 @@ Next: , Previous:

    When a program is invoked it is given an array of strings -called the environment. +called the environment. This is a list of name-value pairs, of the form name=value.

    Bash provides several ways to manipulate the environment. On invocation, the shell scans its own environment and creates a parameter for each name found, automatically marking -it for export +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 @@ -3746,7 +3959,9 @@ is set to the full pathname of the command and passed to that command in its environment.


    -
    +
    +
    +

    Next: , Previous: , Up: Executing Commands   [Contents][Index]

    @@ -3754,7 +3969,7 @@ Next: , Previous:

    The exit status of an executed command is the value returned by the -waitpid system call or equivalent function. Exit statuses +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 @@ -3779,7 +3994,7 @@ the exit status is greater than zero.

    The exit status is used by the Bash conditional commands (see Conditional Constructs) and some of the list -constructs (see Lists). +constructs (see Lists of Commands).

    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 +4002,13 @@ 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 $? (see Special Parameters). +


    -
    +
    +
    + @@ -3837,8 +4057,40 @@ 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 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. +
    +
    -
    +
    +
    +
    + @@ -3863,8 +4115,10 @@ 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 +searching the $PATH for a command, it creates a +new instance of itself +to execute it. +In other words, executing

    filename arguments
     
    @@ -3910,25 +4164,15 @@ under another shell. It’s a common idiom to use env to find in $PATH.


    -
    +
    +
    +
    +

    4 Shell Builtin Commands

    - - - - - -

    Builtin commands are contained within the shell itself. When the name of a builtin command is used as the first word of @@ -3963,10 +4207,17 @@ Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with ‘-’ as invalid options and require ‘--’ to prevent this interpretation.

    +
    -
    +
    +

    4.1 Bourne Shell Builtins

    @@ -3974,9 +4225,8 @@ Next: , Up: < These commands are implemented as specified by the POSIX standard.

    -
    : (a colon)
    -
    -
    +
    : (a colon)
    +
    : [arguments]
     
    @@ -3984,35 +4234,34 @@ These commands are implemented as specified by the POSIX standard The return status is zero.

    -
    . (a period)
    -
    -
    +
    . (a period)
    +
    . filename [arguments]
     

    Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, -the PATH variable is used to find filename. +the PATH variable is used to find filename, +but filename does not need to be executable. 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 +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 source, and source unsets the +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 source completes. +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
    +
    break [n]
     
    @@ -4022,16 +4271,14 @@ If n is supplied, the nth enclosing loop is exited. The return status is zero unless n is not greater than or equal to 1.

    -
    cd
    -
    -
    +
    cd
    +
    cd [-L|[-P [-e]] [-@] [directory]
     

    Change the current working directory to directory. If directory is not supplied, the value of the HOME shell variable is used. -Any additional arguments following directory are ignored. If the shell variable CDPATH exists, it is used as a search path: each directory name in CDPATH is searched for @@ -4067,13 +4314,17 @@ before the directory change is attempted. successful, the absolute pathname of the new working directory is written to the standard output.

    +

    If the directory change is successful, cd sets the value of the +PWD environment variable to the new directory name, and sets the +OLDPWD environment variable to the value of the current working +directory before the change. +

    The return status is zero if the directory is successfully changed, non-zero otherwise.

    -
    continue
    -
    -
    +
    continue
    +
    continue [n]
     
    @@ -4085,9 +4336,8 @@ is resumed. The return status is zero unless n is not greater than or equal to 1.

    -
    eval
    -
    -
    +
    eval
    +
    eval [arguments]
     
    @@ -4098,9 +4348,8 @@ If there are no arguments or only empty arguments, the return status is zero.

    -
    exec
    -
    -
    +
    exec
    +
    exec [-cl] [-a name] [command [arguments]]
     
    @@ -4124,9 +4373,8 @@ the current shell environment. If there are no redirection errors, the return status is zero; otherwise the return status is non-zero.

    -
    exit
    -
    -
    +
    exit
    +
    exit [n]
     
    @@ -4135,9 +4383,8 @@ If n is omitted, the exit status is that of the last command executed Any trap on EXIT is executed before the shell terminates.

    -
    export
    -
    -
    +
    export
    +
    export [-fn] [-p] [name[=value]]
     
    @@ -4145,7 +4392,7 @@ Any trap on EXIT is executed before the shell terminates. in the environment. If the -f option is supplied, the names refer to shell functions; otherwise the names refer to shell variables. The -n option means to no longer mark each name for export. -If no names are supplied, or if the -p option is given, a +If no names are supplied, or if the -p option is given, a list of names of all exported variables is displayed. The -p option displays output in a form that may be reused as input. If a variable name is followed by =value, the value of @@ -4156,9 +4403,8 @@ the names is not a valid shell variable name, or -f is supplied with a name that is not a shell function.

    -
    getopts
    -
    -
    +
    getopts
    +
    getopts optstring name [arg …]
     
    @@ -4212,9 +4458,8 @@ If getopts is silent, then a colon (‘:’) i name and OPTARG is set to the option character found.

    -
    hash
    -
    -
    +
    hash
    +
    hash [-r] [-p filename] [-dt] [name]
     
    @@ -4241,9 +4486,8 @@ The return status is zero unless a name is not found or an invalid option is supplied.

    -
    pwd
    -
    -
    +
    pwd
    +
    pwd [-LP]
     
    @@ -4257,9 +4501,8 @@ determining the name of the current directory or an invalid option is supplied.

    -
    readonly
    -
    -
    +
    readonly
    +
    readonly [-aAf] [-p] [name[=value]] …
     
    @@ -4284,9 +4527,8 @@ the name arguments is not a valid shell variable or function name, or the -f option is supplied with a name that is not a shell function.

    -
    return
    -
    -
    +
    return
    +
    return [n]
     
    @@ -4313,9 +4555,8 @@ argument or is used outside a function and not during the execution of a script by . or source.

    -
    shift
    -
    -
    +
    shift
    +
    shift [n]
     
    @@ -4332,10 +4573,9 @@ The return status is zero unless n is greater than $# or less than zero, non-zero otherwise.

    -
    test
    -
    [
    -
    - +
    test
    +
    [
    +
    test expr
     
    @@ -4357,20 +4597,20 @@ The evaluation depends on the number of arguments; see below. Operator precedence is used when there are five or more arguments.

    -
    ! expr
    +
    ! expr

    True if expr is false.

    -
    ( expr )
    +
    ( expr )

    Returns the value of expr. This may be used to override the normal precedence of operators.

    -
    expr1 -a expr2
    +
    expr1 -a expr2

    True if both expr1 and expr2 are true.

    -
    expr1 -o expr2
    +
    expr1 -o expr2

    True if either expr1 or expr2 is true.

    @@ -4379,15 +4619,15 @@ This may be used to override the normal precedence of operators. expressions using a set of rules based on the number of arguments.

    -
    0 arguments
    +
    0 arguments

    The expression is false.

    -
    1 argument
    +
    1 argument

    The expression is true if, and only if, the argument is not null.

    -
    2 arguments
    +
    2 arguments

    If the first argument is ‘!’, the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators @@ -4397,7 +4637,7 @@ If the first argument is not a valid unary operator, the expression is false.

    -
    3 arguments
    +
    3 arguments

    The following conditions are applied in the order listed.

      @@ -4416,14 +4656,21 @@ argument.
    -
    4 arguments
    -

    If the first argument is ‘!’, the result is the negation of +

    4 arguments
    +

    The following conditions are applied in the order listed. +

    +
      +
    1. If the first argument is ‘!’, the result is the negation of the three-argument expression composed of the remaining arguments. -Otherwise, the expression is parsed and evaluated according to +
    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
    +
    5 or more arguments

    The expression is parsed and evaluated according to precedence using the rules listed above.

    @@ -4433,9 +4680,8 @@ using the rules listed above. operators sort lexicographically using ASCII ordering.

    -
    times
    -
    -
    +
    times
    +
    times
     
    @@ -4443,9 +4689,8 @@ operators sort lexicographically using ASCII ordering. The return status is zero.

    -
    trap
    -
    -
    +
    trap
    +
    trap [-lp] [arg] [sigspec …]
     
    @@ -4505,9 +4750,8 @@ values in a subshell or subshell environment when one is created. valid signal.

    -
    umask
    -
    -
    +
    umask
    +
    umask [-p] [-S] [mode]
     
    @@ -4528,9 +4772,8 @@ of the umask is subtracted from 7. Thus, a umask of 022755.

    -
    unset
    -
    -
    +
    unset
    +
    unset [-fnv] [name]
     
    @@ -4540,7 +4783,7 @@ If the -v option is given, each If the -f option is given, the names refer to shell functions, and the function definition is removed. If the -n option is supplied, and name is a variable with -the nameref attribute, name will be unset rather than the +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 @@ -4549,12 +4792,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 name is readonly. +The return status is zero unless a name is readonly or may not be unset.


    -
    +
    +
    + @@ -4565,9 +4810,8 @@ or have been extended in Bash. Some of these commands are specified in the POSIX standard.

    -
    alias
    -
    -
    +
    alias
    +
    alias [-p] [name[=value] …]
     
    @@ -4580,15 +4824,15 @@ and value of the alias is printed. Aliases are described in Aliases.

    -
    bind
    -
    -
    +
    bind
    +
    bind [-m keymap] [-lpsvPSVX]
     bind [-m keymap] [-q function] [-u function] [-r keyseq]
     bind [-m keymap] -f filename
     bind [-m keymap] -x keyseq:shell-command
     bind [-m keymap] keyseq:function-name
     bind [-m keymap] keyseq:readline-command
    +bind readline-command-line
     

    Display current Readline (see Command Line Editing) @@ -4603,7 +4847,7 @@ but each binding or command must be passed as a separate argument; e.g.,

    Options, if supplied, have the following meanings:

    -
    -m keymap
    +
    -m keymap

    Use keymap as the keymap to be affected by the subsequent bindings. Acceptable keymap names are @@ -4619,55 +4863,55 @@ names are synonym); emacs is equivalent to emacs-standard.

    -
    -l
    +
    -l

    List the names of all Readline functions.

    -
    -p
    +
    -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
    +
    -P

    List current Readline function names and bindings.

    -
    -v
    +
    -v

    Display Readline variable names and values in such a way that they can be used as input or in a Readline initialization file.

    -
    -V
    +
    -V

    List current Readline variable names and values.

    -
    -s
    +
    -s

    Display Readline key sequences bound to macros and the strings they output in such a way that they can be used as input or in a Readline initialization file.

    -
    -S
    +
    -S

    Display Readline key sequences bound to macros and the strings they output.

    -
    -f filename
    +
    -f filename

    Read key bindings from filename.

    -
    -q function
    +
    -q function

    Query about which keys invoke the named function.

    -
    -u function
    +
    -u function

    Unbind all keys bound to the named function.

    -
    -r keyseq
    +
    -r keyseq

    Remove any current binding for keyseq.

    -
    -x keyseq:shell-command
    +
    -x keyseq:shell-command

    Cause shell-command to be executed whenever keyseq is entered. When shell-command is executed, the shell sets the @@ -4675,12 +4919,15 @@ When shell-command is executed, the shell sets the buffer and the READLINE_POINT and READLINE_MARK variables to the current location of the insertion point and the saved insertion point (the mark), respectively. +The shell assigns any numeric argument the user supplied to the +READLINE_ARGUMENT variable. +If there was no argument, that variable is not set. If the executed command changes the value of any of READLINE_LINE, READLINE_POINT, or READLINE_MARK, those new values will be reflected in the editing state.

    -
    -X
    +
    -X

    List all key sequences bound to shell commands and the associated commands in a format that can be reused as input.

    @@ -4690,9 +4937,8 @@ in a format that can be reused as input. error occurs.

    -
    builtin
    -
    -
    +
    builtin
    +
    builtin [shell-builtin [args]]
     
    @@ -4704,9 +4950,8 @@ The return status is non-zero if shell-builtin is not a shell builtin command.

    -
    caller
    -
    -
    +
    caller
    +
    caller [expr]
     
    @@ -4726,9 +4971,8 @@ call or expr does not correspond to a valid position in the call stack.

    -
    command
    -
    -
    +
    command
    +
    command [-pVv] command [arguments …]
     
    @@ -4753,9 +4997,8 @@ a more verbose description. In this case, the return status is zero if command is found, and non-zero if not.

    -
    declare
    -
    -
    +
    declare
    +
    declare [-aAfFgiIlnrtux] [-p] [name[=value] …]
     
    @@ -4786,7 +5029,7 @@ the global scope, even when declare is executed in a shell function It is ignored in all other cases.

    The -I option causes local variables to inherit the attributes -(except the nameref attribute) +(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. @@ -4795,32 +5038,32 @@ If there is no existing variable, the local variable is initially unset. the specified attributes or to give variables attributes:

    -
    -a
    +
    -a

    Each name is an indexed array variable (see Arrays).

    -
    -A
    +
    -A

    Each name is an associative array variable (see Arrays).

    -
    -f
    +
    -f

    Use function names only.

    -
    -i
    +
    -i

    The variable is to be treated as an integer; arithmetic evaluation (see Shell Arithmetic) is performed when the variable is assigned a value.

    -
    -l
    +
    -l

    When the variable is assigned a value, all upper-case characters are converted to lower-case. The upper-case attribute is disabled.

    -
    -n
    -

    Give each name the nameref attribute, making +

    -n
    +

    Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All references, assignments, and attribute modifications @@ -4830,25 +5073,25 @@ to name, except for those using or changing the The nameref attribute cannot be applied to array variables.

    -
    -r
    +
    -r

    Make names readonly. These names cannot then be assigned values by subsequent assignment statements or unset.

    -
    -t
    +
    -t

    Give each name the trace attribute. Traced functions inherit the DEBUG and RETURN traps from the calling shell. The trace attribute has no special meaning for variables.

    -
    -u
    +
    -u

    When the variable is assigned a value, all lower-case characters are converted to upper-case. The lower-case attribute is disabled.

    -
    -x
    +
    -x

    Mark each name for export to subsequent commands via the environment.

    @@ -4872,15 +5115,14 @@ an attempt is made to define a function using ‘-f foo=bar&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 Arrays), -one of the names is not a valid shell variable name, +one of the names is not a valid shell variable name, an attempt is made to turn off readonly status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with -f.

    -
    echo
    -
    -
    +
    echo
    +
    echo [-neE] [arg …]
     
    @@ -4899,59 +5141,58 @@ escape characters by default.

    echo interprets the following escape sequences:

    -
    \a
    +
    \a

    alert (bell)

    -
    \b
    +
    \b

    backspace

    -
    \c
    +
    \c

    suppress further output

    -
    \e
    -
    \E
    +
    \e
    +
    \E

    escape

    -
    \f
    +
    \f

    form feed

    -
    \n
    +
    \n

    new line

    -
    \r
    +
    \r

    carriage return

    -
    \t
    +
    \t

    horizontal tab

    -
    \v
    +
    \v

    vertical tab

    -
    \\
    +
    \\

    backslash

    -
    \0nnn
    +
    \0nnn

    the eight-bit character whose value is the octal value nnn (zero to three octal digits)

    -
    \xHH
    +
    \xHH

    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    -
    \uHHHH
    +
    \uHHHH

    the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)

    -
    \UHHHHHHHH
    +
    \UHHHHHHHH

    the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)

    -
    enable
    -
    -
    +
    enable
    +
    enable [-a] [-dnps] [-f filename] [name …]
     
    @@ -4972,6 +5213,9 @@ each builtin with an indication of whether or not it is enabled.

    The -f option means to load the new builtin command name from shared object filename, on systems that support dynamic loading. +Bash will use the value of the BASH_LOADABLES_PATH variable as a +colon-separated list of directories in which to search for filename. +The default is system-dependent. The -d option will delete a builtin loaded with -f.

    If there are no options, a list of the shell builtins is displayed. @@ -4979,13 +5223,17 @@ The -s option restricts enable to the POSIX-s is used with -f, the new builtin becomes a special builtin (see Special Builtins).

    +

    If no options are supplied and a name is not a shell builtin, +enable will attempt to load name from a shared object named +name, as if the command were +‘enable -f name name’. +

    The return status is zero unless a name is not a shell builtin or there is an error loading a new builtin from a shared object.

    -
    help
    -
    -
    +
    help
    +
    help [-dms] [pattern]
     
    @@ -4997,13 +5245,13 @@ the builtins is printed.

    Options, if supplied, have the following meanings:

    -
    -d
    +
    -d

    Display a short description of each pattern

    -
    -m
    +
    -m

    Display the description of each pattern in a manpage-like format

    -
    -s
    +
    -s

    Display only a short usage synopsis for each pattern

    @@ -5011,9 +5259,8 @@ the builtins is printed.

    The return status is zero unless no command matches pattern.

    -
    let
    -
    -
    +
    let
    +
    let expression [expression …]
     
    @@ -5024,9 +5271,8 @@ last expression evaluates to 0, let returns 1; otherwise 0 is returned.

    -
    local
    -
    -
    +
    local
    +
    local [option] name[=value] …
     
    @@ -5047,9 +5293,8 @@ a function, an invalid name is supplied, or name is a readonly variable.

    -
    logout
    -
    -
    +
    logout
    +
    logout [n]
     
    @@ -5057,9 +5302,8 @@ readonly variable. parent.

    -
    mapfile
    -
    -
    +
    mapfile
    +
    mapfile [-d delim] [-n count] [-O origin] [-s count]
         [-t] [-u fd] [-C callback] [-c quantum] [array]
     
    @@ -5071,33 +5315,33 @@ The variable MAPFILE is the default array. Options, if supplied, have the following meanings:

    -
    -d
    +
    -d

    The first character of delim is used to terminate each input line, rather than newline. If delim is the empty string, mapfile will terminate a line when it reads a NUL character.

    -
    -n
    +
    -n

    Copy at most count lines. If count is 0, all lines are copied.

    -
    -O
    +
    -O

    Begin assigning to array at index origin. The default index is 0.

    -
    -s
    +
    -s

    Discard the first count lines read.

    -
    -t
    +
    -t

    Remove a trailing delim (default newline) from each line read.

    -
    -u
    +
    -u

    Read lines from file descriptor fd instead of the standard input.

    -
    -C
    +
    -C

    Evaluate callback each time quantum lines are read. The -c option specifies quantum.

    -
    -c
    +
    -c

    Specify the number of lines read between each call to callback.

    @@ -5118,9 +5362,8 @@ argument is supplied, array is invalid or unassignable, or array is not an indexed array.

    -
    printf
    -
    -
    +
    printf
    +
    printf [-v var] format [arguments]
     
    @@ -5138,16 +5381,20 @@ In addition to the standard printf(1) formats, printf interprets the following extensions:

    -
    %b
    +
    %b

    Causes printf to expand backslash escape sequences in the corresponding argument in the same way as echo -e -(see Bash Builtins). +(see Bash Builtin Commands).

    -
    %q
    +
    %q

    Causes printf to output the corresponding argument in a format that can be reused as shell input.

    -
    %(datefmt)T
    +
    %Q
    +

    like %q, but applies any supplied precision to the argument +before quoting it. +

    +
    %(datefmt)T

    Causes printf to output the date-time string resulting from using datefmt as a format string for strftime(3). The corresponding argument is an integer representing the number of @@ -5176,9 +5423,8 @@ appropriate, had been supplied. The return value is zero on success, non-zero on failure.

    -
    read
    -
    -
    +
    read
    +
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars]
         [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
     
    @@ -5203,38 +5449,38 @@ meaning for the next character read and for line continuation.

    Options, if supplied, have the following meanings:

    -
    -a aname
    +
    -a aname

    The words are assigned to sequential indices of the array variable aname, starting at 0. All elements are removed from aname before the assignment. Other name arguments are ignored.

    -
    -d delim
    +
    -d delim

    The first character of delim is used to terminate the input line, rather than newline. If delim is the empty string, read will terminate a line when it reads a NUL character.

    -
    -e
    +
    -e

    Readline (see Command Line Editing) is used to obtain the line. Readline uses the current (or default, if line editing was not previously active) editing settings, but uses Readline’s default filename completion.

    -
    -i text
    +
    -i text

    If Readline is being used to read the line, text is placed into the editing buffer before editing begins.

    -
    -n nchars
    +
    -n nchars

    read returns after reading nchars characters rather than waiting for a complete line of input, but honors a delimiter if fewer than nchars characters are read before the delimiter.

    -
    -N nchars
    +
    -N nchars

    read returns after reading exactly nchars characters rather than waiting for a complete line of input, unless EOF is encountered or read times out. @@ -5246,25 +5492,25 @@ that the variable is assigned exactly the characters read (with the exception of backslash; see the -r option below).

    -
    -p prompt
    +
    -p prompt

    Display prompt, without a trailing newline, before attempting to read any input. The prompt is displayed only if input is coming from a terminal.

    -
    -r
    +
    -r

    If this option is given, backslash does not act as an escape character. The backslash is considered to be part of the line. In particular, a backslash-newline pair may not then be used as a line continuation.

    -
    -s
    +
    -s

    Silent mode. If input is coming from a terminal, characters are not echoed.

    -
    -t timeout
    +
    -t timeout

    Cause read to time out and return failure if a complete line of input (or a specified number of characters) is not read within timeout seconds. @@ -5276,12 +5522,14 @@ from regular files. If read times out, read saves any partial input read into the specified variable name. If timeout is 0, read returns immediately, without trying to -read any data. The exit status is 0 if input is available on -the specified file descriptor, 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.

    -
    -u fd
    +
    -u fd

    Read input from file descriptor fd.

    @@ -5296,9 +5544,8 @@ a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is supplied as the argument to -u.

    -
    readarray
    -
    -
    +
    readarray
    +
    readarray [-d delim] [-n count] [-O origin] [-s count]
         [-t] [-u fd] [-C callback] [-c quantum] [array]
     
    @@ -5310,18 +5557,16 @@ if the -u option is supplied.

    A synonym for mapfile.

    -
    source
    -
    -
    +
    source
    +
    source filename
     

    A synonym for . (see Bourne Shell Builtins).

    -
    type
    -
    -
    +
    type
    +
    type [-afptP] [name …]
     
    @@ -5354,13 +5599,12 @@ is not also used.

    If the -f option is used, type does not attempt to find shell functions, as with the command builtin.

    -

    The return status is zero if all of the names are found, non-zero +

    The return status is zero if all of the names are found, non-zero if any are not found.

    -
    typeset
    -
    -
    +
    typeset
    +
    typeset [-afFgrxilnrtux] [-p] [name[=value] …]
     
    @@ -5369,9 +5613,8 @@ shell. It is a synonym for the declare builtin command.

    -
    ulimit
    -
    -
    +
    ulimit
    +
    ulimit [-HS] -a
     ulimit [-HS] [-bcdefiklmnpqrstuvxPRT] [limit]
     
    @@ -5381,101 +5624,101 @@ started by the shell, on systems that allow such control. If an option is given, it is interpreted as follows:

    -
    -S
    +
    -S

    Change and report the soft limit associated with a resource.

    -
    -H
    +
    -H

    Change and report the hard limit associated with a resource.

    -
    -a
    +
    -a

    All current limits are reported; no limits are set.

    -
    -b
    +
    -b

    The maximum socket buffer size.

    -
    -c
    +
    -c

    The maximum size of core files created.

    -
    -d
    +
    -d

    The maximum size of a process’s data segment.

    -
    -e
    +
    -e

    The maximum scheduling priority ("nice").

    -
    -f
    +
    -f

    The maximum size of files written by the shell and its children.

    -
    -i
    +
    -i

    The maximum number of pending signals.

    -
    -k
    +
    -k

    The maximum number of kqueues that may be allocated.

    -
    -l
    +
    -l

    The maximum size that may be locked into memory.

    -
    -m
    +
    -m

    The maximum resident set size (many systems do not honor this limit).

    -
    -n
    +
    -n

    The maximum number of open file descriptors (most systems do not allow this value to be set).

    -
    -p
    +
    -p

    The pipe buffer size.

    -
    -q
    +
    -q

    The maximum number of bytes in POSIX message queues.

    -
    -r
    +
    -r

    The maximum real-time scheduling priority.

    -
    -s
    +
    -s

    The maximum stack size.

    -
    -t
    +
    -t

    The maximum amount of cpu time in seconds.

    -
    -u
    +
    -u

    The maximum number of processes available to a single user.

    -
    -v
    +
    -v

    The maximum amount of virtual memory available to the shell, and, on some systems, to its children.

    -
    -x
    +
    -x

    The maximum number of file locks.

    -
    -P
    +
    -P

    The maximum number of pseudoterminals.

    -
    -R
    +
    -R

    The maximum time a real-time process can run before blocking, in microseconds.

    -
    -T
    +
    -T

    The maximum number of threads.

    @@ -5511,9 +5754,8 @@ and, when in POSIX Mode (see Bash POSI or an error occurs while setting a new limit.

    -
    unalias
    -
    -
    +
    unalias
    +
    unalias [-a] [name … ]
     
    @@ -5524,22 +5766,22 @@ Aliases are described in Aliases.

    -
    +
    +
    +

    4.3 Modifying Shell Behavior

    - - - - +
    -
    +
    + @@ -5550,11 +5792,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.

    -
    set
    -
    -
    -
    set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
    -set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
    +
    set
    +
    +
    set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [argument …]
    +set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [argument …]
     

    If no options or arguments are supplied, set displays the names @@ -5568,22 +5809,22 @@ In POSIX mode, only shell variables are listed. Options, if specified, have the following meanings:

    -
    -a
    +
    -a

    Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands.

    -
    -b
    +
    -b

    Cause the status of terminated background jobs to be reported immediately, rather than before printing the next primary prompt.

    -
    -e
    +
    -e

    Exit immediately if a pipeline (see Pipelines), which may consist of a single simple command (see Simple Commands), -a list (see Lists), +a list (see Lists of Commands), or a compound command (see Compound Commands) returns a non-zero status. The shell does not exit if the command that fails is part of the @@ -5613,129 +5854,129 @@ effect until the compound command or the command containing the function call completes.

    -
    -f
    +
    -f

    Disable filename expansion (globbing).

    -
    -h
    +
    -h

    Locate and remember (hash) commands as they are looked up for execution. This option is enabled by default.

    -
    -k
    +
    -k

    All arguments in the form of assignment statements are placed in the environment for a command, not just those that precede the command name.

    -
    -m
    +
    -m

    Job control is enabled (see Job Control). All processes run in a separate process group. When a background job completes, the shell prints a line containing its exit status.

    -
    -n
    +
    -n

    Read commands but do not execute them. This may be used to check a script for syntax errors. This option is ignored by interactive shells.

    -
    -o option-name
    +
    -o option-name

    Set the option corresponding to option-name:

    -
    allexport
    +
    allexport

    Same as -a.

    -
    braceexpand
    +
    braceexpand

    Same as -B.

    -
    emacs
    +
    emacs

    Use an emacs-style line editing interface (see Command Line Editing). This also affects the editing interface used for read -e.

    -
    errexit
    +
    errexit

    Same as -e.

    -
    errtrace
    +
    errtrace

    Same as -E.

    -
    functrace
    +
    functrace

    Same as -T.

    -
    hashall
    +
    hashall

    Same as -h.

    -
    histexpand
    +
    histexpand

    Same as -H.

    -
    history
    +
    history

    Enable command history, as described in Bash History Facilities. This option is on by default in interactive shells.

    -
    ignoreeof
    +
    ignoreeof

    An interactive shell will not exit upon reading EOF.

    -
    keyword
    +
    keyword

    Same as -k.

    -
    monitor
    +
    monitor

    Same as -m.

    -
    noclobber
    +
    noclobber

    Same as -C.

    -
    noexec
    +
    noexec

    Same as -n.

    -
    noglob
    +
    noglob

    Same as -f.

    -
    nolog
    +
    nolog

    Currently ignored.

    -
    notify
    +
    notify

    Same as -b.

    -
    nounset
    +
    nounset

    Same as -u.

    -
    onecmd
    +
    onecmd

    Same as -t.

    -
    physical
    +
    physical

    Same as -P.

    -
    pipefail
    +
    pipefail

    If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.

    -
    posix
    +
    posix

    Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard (see Bash POSIX Mode). @@ -5743,26 +5984,26 @@ This is intended to make Bash behave as a strict superset of that standard.

    -
    privileged
    +
    privileged

    Same as -p.

    -
    verbose
    +
    verbose

    Same as -v.

    -
    vi
    +
    vi

    Use a vi-style line editing interface. This also affects the editing interface used for read -e.

    -
    xtrace
    +
    xtrace

    Same as -x.

    -
    -p
    +
    -p

    Turn on privileged mode. In this mode, the $BASH_ENV and $ENV files are not processed, shell functions are not inherited from the environment, @@ -5777,22 +6018,29 @@ Turning this option off causes the effective user and group ids to be set to the real user and group ids.

    -
    -t
    +
    -r
    +

    Enable restricted shell mode. +This option cannot be unset once it has been set. +

    +
    +
    -t

    Exit after reading and executing one command.

    -
    -u
    +
    -u

    Treat unset variables and parameters other than the special parameters -‘@’ or ‘*’ as an error when performing parameter expansion. +‘@’ 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
    +
    -v

    Print shell input lines as they are read.

    -
    -x
    +
    -x

    Print a trace of simple commands, for commands, case commands, select commands, and arithmetic for commands and their arguments or associated word lists after they are @@ -5801,28 +6049,28 @@ variable is expanded and the resultant value is printed before the command and its expanded arguments.

    -
    -B
    +
    -B

    The shell will perform brace expansion (see Brace Expansion). This option is on by default.

    -
    -C
    +
    -C

    Prevent output redirection using ‘>’, ‘>&’, and ‘<>’ from overwriting existing files.

    -
    -E
    +
    -E

    If set, any trap on ERR is inherited by shell functions, command substitutions, and commands executed in a subshell environment. The ERR trap is normally not inherited in such cases.

    -
    -H
    -

    Enable ‘!’ style history substitution (see History Interaction). +

    -H
    +

    Enable ‘!’ style history substitution (see History Expansion). This option is on by default for interactive shells.

    -
    -P
    +
    -P

    If set, do not resolve symbolic links when performing commands such as cd which change the current directory. The physical directory is used instead. By default, Bash follows @@ -5847,7 +6095,7 @@ $ cd ..; pwd

    -
    -T
    +
    -T

    If set, any trap on DEBUG and RETURN are inherited by shell functions, command substitutions, and commands executed in a subshell environment. @@ -5855,13 +6103,13 @@ The DEBUG and RETURN traps are normally not inherited in such cases.

    -
    --
    +
    --

    If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the arguments, even if some of them begin with a ‘-’.

    -
    -
    +
    -

    Signal the end of options, cause all remaining arguments to be assigned to the positional parameters. The -x and -v options are turned off. @@ -5882,7 +6130,9 @@ The special parameter # is set to N.


    -
    +
    +
    + @@ -5891,9 +6141,8 @@ Previous: This builtin allows you to change additional shell optional behavior.

    -
    shopt
    -
    -
    +
    shopt
    +
    shopt [-pqsu] [-o] [optname …]
     
    @@ -5903,29 +6152,29 @@ The settings can be either those listed below, or, if the option to the set builtin command (see The Set Builtin). With no options, or with the -p option, a list of all settable options is displayed, with an indication of whether or not each is set; -if optnames are supplied, the output is restricted to those options. +if optnames are supplied, the output is restricted to those options. The -p option causes output to be displayed in a form that may be reused as input. Other options have the following meanings:

    -
    -s
    +
    -s

    Enable (set) each optname.

    -
    -u
    +
    -u

    Disable (unset) each optname.

    -
    -q
    +
    -q

    Suppresses normal output; the return status indicates whether the optname is set or unset. If multiple optname arguments are given with -q, -the return status is zero if all optnames are enabled; +the return status is zero if all optnames are enabled; non-zero otherwise.

    -
    -o
    +
    -o

    Restricts the values of optname to be those defined for the -o option to the set builtin (see The Set Builtin). @@ -5939,33 +6188,33 @@ those options which are set or unset, respectively.

    Unless otherwise noted, the shopt options are disabled (off) by default.

    -

    The return status when listing options is zero if all optnames +

    The return status when listing options is zero if all optnames are enabled, non-zero otherwise. When setting or unsetting options, the return status is zero unless an optname is not a valid shell option.

    The list of shopt options is:

    -
    assoc_expand_once
    +
    assoc_expand_once

    If set, the shell suppresses multiple evaluation of associative array subscripts during arithmetic expression evaluation, while executing builtins that can perform variable assignments, and while executing builtins that perform array dereferencing.

    -
    autocd
    +
    autocd

    If set, a command name that is the name of a directory is executed as if it were the argument to the cd command. This option is only used by interactive shells.

    -
    cdable_vars
    +
    cdable_vars

    If this is set, an argument to the cd builtin command that is not a directory is assumed to be the name of a variable whose value is the directory to change to.

    -
    cdspell
    +
    cdspell

    If set, minor errors in the spelling of a directory component in a cd command will be corrected. The errors checked for are transposed characters, @@ -5975,13 +6224,13 @@ and the command proceeds. This option is only used by interactive shells.

    -
    checkhash
    +
    checkhash

    If this is set, Bash checks that a command found in the hash table exists before trying to execute it. If a hashed command no longer exists, a normal path search is performed.

    -
    checkjobs
    +
    checkjobs

    If set, Bash lists the status of any stopped and running jobs before exiting an interactive shell. If any jobs are running, this causes the exit to be deferred until a second exit is attempted without an @@ -5989,14 +6238,14 @@ intervening command (see Job Control). The shell always postpones exiting if any jobs are stopped.

    -
    checkwinsize
    +
    checkwinsize

    If set, Bash checks the window size after each external (non-builtin) command and, if necessary, updates the values of LINES and COLUMNS. This option is enabled by default.

    -
    cmdhist
    +
    cmdhist

    If set, Bash attempts to save all lines of a multiple-line command in the same history entry. This allows @@ -6005,18 +6254,18 @@ This option is enabled by default, but only has an effect if command history is enabled (see Bash History Facilities).

    -
    compat31
    -
    compat32
    -
    compat40
    -
    compat41
    -
    compat42
    -
    compat43
    -
    compat44
    +
    compat31
    +
    compat32
    +
    compat40
    +
    compat41
    +
    compat42
    +
    compat43
    +
    compat44

    These control aspects of the shell’s compatibility mode (see Shell Compatibility Mode).

    -
    complete_fullquote
    +
    complete_fullquote

    If set, Bash quotes all shell metacharacters in filenames and directory names when performing completion. @@ -6034,7 +6283,7 @@ This variable is set by default, which is the default Bash behavior in versions through 4.2.

    -
    direxpand
    +
    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 @@ -6042,33 +6291,33 @@ buffer. If not set, Bash attempts to preserve what the user typed.

    -
    dirspell
    +
    dirspell

    If set, Bash attempts spelling correction on directory names during word completion if the directory name initially supplied does not exist.

    -
    dotglob
    +
    dotglob

    If set, Bash includes filenames beginning with a ‘.’ in the results of filename expansion. The filenames ‘.’ and ‘..’ must always be matched explicitly, even if dotglob is set.

    -
    execfail
    +
    execfail

    If this is set, a non-interactive shell will not exit if it cannot execute the file specified as an argument to the exec builtin command. An interactive shell does not exit if exec fails.

    -
    expand_aliases
    +
    expand_aliases

    If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.

    -
    extdebug
    +
    extdebug

    If set at shell invocation, or in a shell startup file, arrange to execute the debugger profile @@ -6076,7 +6325,7 @@ before the shell starts, identical to the --debugger option. If set after invocation, behavior intended for use by debuggers is enabled:

      -
    1. The -F option to the declare builtin (see Bash Builtins) +
    2. The -F option to the declare builtin (see Bash Builtin Commands) displays the source file name and line number corresponding to each function name supplied as an argument. @@ -6101,23 +6350,23 @@ subshells invoked with ( command ) inherit the
    -
    extglob
    +
    extglob

    If set, the extended pattern matching features described above (see Pattern Matching) are enabled.

    -
    extquote
    +
    extquote

    If set, $'string' and $"string" quoting is performed within ${parameter} expansions enclosed in double quotes. This option is enabled by default.

    -
    failglob
    +
    failglob

    If set, patterns which fail to match filenames during filename expansion result in an expansion error.

    -
    force_fignore
    +
    force_fignore

    If set, the suffixes specified by the FIGNORE shell variable cause words to be ignored when performing word completion even if the ignored words are the only possible completions. @@ -6125,7 +6374,7 @@ See Bash Variables, for a description of FIG This option is enabled by default.

    -
    globasciiranges
    +
    globasciiranges

    If set, range expressions used in pattern matching bracket expressions (see Pattern Matching) behave as if in the traditional C locale when performing @@ -6135,136 +6384,158 @@ is not taken into account, so and upper-case and lower-case ASCII characters will collate together.

    -
    globstar
    +
    globskipdots
    +

    If set, filename expansion will never match the filenames +‘.’ and ‘..’, +even if the pattern begins with a ‘.’. +This option is enabled by default. +

    +
    +
    globstar

    If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match.

    -
    gnu_errfmt
    +
    gnu_errfmt

    If set, shell error messages are written in the standard GNU error message format.

    -
    histappend
    +
    histappend

    If set, the history list is appended to the file named by the value of the HISTFILE variable when the shell exits, rather than overwriting the file.

    -
    histreedit
    +
    histreedit

    If set, and Readline is being used, a user is given the opportunity to re-edit a failed history substitution.

    -
    histverify
    +
    histverify

    If set, and Readline is being used, the results of history substitution are not immediately passed to the shell parser. Instead, the resulting line is loaded into the Readline editing buffer, allowing further modification.

    -
    hostcomplete
    +
    hostcomplete

    If set, and Readline is being used, Bash will attempt to perform hostname completion when a word containing a ‘@’ is being -completed (see Commands For Completion). This option is enabled +completed (see Letting Readline Type For You). This option is enabled by default.

    -
    huponexit
    +
    huponexit

    If set, Bash will send SIGHUP to all jobs when an interactive login shell exits (see Signals).

    -
    inherit_errexit
    +
    inherit_errexit

    If set, command substitution inherits the value of the errexit option, instead of unsetting it in the subshell environment. This option is enabled when POSIX mode is enabled.

    -
    interactive_comments
    +
    interactive_comments

    Allow a word beginning with ‘#’ to cause that word and all remaining characters on that line to be ignored in an interactive shell. This option is enabled by default.

    -
    lastpipe
    +
    lastpipe

    If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in the current shell environment.

    -
    lithist
    +
    lithist

    If enabled, and the cmdhist option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible.

    -
    localvar_inherit
    +
    localvar_inherit

    If set, local variables inherit the value and attributes of a variable of the same name that exists at a previous scope before any new value is -assigned. The nameref attribute is not inherited. +assigned. The nameref attribute is not inherited.

    -
    localvar_unset
    +
    localvar_unset

    If set, calling unset on local variables in previous function scopes marks them so subsequent lookups find them unset until that function returns. This is identical to the behavior of unsetting local variables at the current function scope.

    -
    login_shell
    +
    login_shell

    The shell sets this option if it is started as a login shell (see Invoking Bash). The value may not be changed.

    -
    mailwarn
    +
    mailwarn

    If set, and a file that Bash is checking for mail has been accessed since the last time it was checked, the message "The mail in mailfile has been read" is displayed.

    -
    no_empty_cmd_completion
    +
    no_empty_cmd_completion

    If set, and Readline is being used, Bash will not attempt to search the PATH for possible completions when completion is attempted on an empty line.

    -
    nocaseglob
    +
    nocaseglob

    If set, Bash matches filenames in a case-insensitive fashion when performing filename expansion.

    -
    nocasematch
    +
    nocasematch

    If set, Bash matches patterns in a case-insensitive fashion when performing matching while executing case or [[ -conditional commands, +conditional commands (see Conditional Constructs, when performing pattern substitution word expansions, or when filtering possible completions as part of programmable completion.

    -
    nullglob
    +
    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.

    -
    progcomp
    +
    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 (see Shell Parameter Expansion). +This option is enabled by default. +

    +
    +
    progcomp

    If set, the programmable completion facilities (see Programmable Completion) are enabled. This option is enabled by default.

    -
    progcomp_alias
    +
    progcomp_alias

    If set, and programmable completion is enabled, Bash treats a command name that doesn’t have any completions as a possible alias and attempts alias expansion. If it has an alias, Bash attempts programmable completion using the command word resulting from the expanded alias.

    -
    promptvars
    +
    promptvars

    If set, prompt strings undergo parameter expansion, command substitution, arithmetic expansion, and quote removal after being expanded @@ -6272,7 +6543,7 @@ as described below (see Controlling the Prompt This option is enabled by default.

    -
    restricted_shell
    +
    restricted_shell

    The shell sets this option if it is started in restricted mode (see The Restricted Shell). The value may not be changed. @@ -6280,19 +6551,25 @@ This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell is restricted.

    -
    shift_verbose
    +
    shift_verbose

    If this is set, the shift builtin prints an error message when the shift count exceeds the number of positional parameters.

    -
    sourcepath
    -

    If set, the source builtin uses the value of PATH +

    sourcepath
    +

    If set, the . (source) builtin uses the value of PATH to find the directory containing the file supplied as an argument. This option is enabled by default.

    -
    xpg_echo
    +
    varredir_close
    +

    If set, the shell automatically closes file descriptors assigned using the +{varname} redirection syntax (see Redirections) instead of +leaving them open when the command completes. +

    +
    +
    xpg_echo

    If set, the echo builtin expands backslash-escape sequences by default.

    @@ -6302,7 +6579,10 @@ by default.

    -
    +
    +
    +
    + @@ -6334,25 +6614,26 @@ shift trap unset

    -
    +
    +
    +
    +

    5 Shell Variables

    - - - -

    This chapter describes the shell variables that Bash uses. Bash automatically assigns default values to a number of variables.

    +
    -
    +
    + @@ -6362,41 +6643,31 @@ Next: , Up: In some cases, Bash assigns a default value to the variable.

    -
    CDPATH - -
    +
    CDPATH

    A colon-separated list of directories used as a search path for the cd builtin command.

    -
    HOME - -
    +
    HOME

    The current user’s home directory; the default for the cd builtin command. The value of this variable is also used by tilde expansion (see Tilde Expansion).

    -
    IFS - -
    +
    IFS

    A list of characters that separate fields; used when the shell splits words as part of expansion.

    -
    MAIL - -
    +
    MAIL

    If this parameter is set to a filename or directory name and the MAILPATH variable is not set, Bash informs the user of the arrival of mail in the specified file or Maildir-format directory.

    -
    MAILPATH - -
    +
    MAILPATH

    A colon-separated list of filenames which the shell periodically checks for new mail. Each list entry can specify the message that is printed when new mail @@ -6406,21 +6677,15 @@ When used in the text of the message, $_ expands to the name of the current mail file.

    -
    OPTARG - -
    +
    OPTARG

    The value of the last option argument processed by the getopts builtin.

    -
    OPTIND - -
    +
    OPTIND

    The index of the last option argument processed by the getopts builtin.

    -
    PATH - -
    +
    PATH

    A colon-separated list of directories in which the shell looks for commands. A zero-length (null) directory name in the value of PATH indicates the @@ -6429,17 +6694,13 @@ A null directory name may appear as two adjacent colons, or as an initial or trailing colon.

    -
    PS1 - -
    +
    PS1

    The primary prompt string. The default value is ‘\s-\v\$ ’. See Controlling the Prompt, for the complete list of escape sequences that are expanded before PS1 is displayed.

    -
    PS2 - -
    +
    PS2

    The secondary prompt string. The default value is ‘> ’. PS2 is expanded in the same way as PS1 before being displayed. @@ -6448,7 +6709,9 @@ displayed.


    -
    +
    +
    + @@ -6462,9 +6725,7 @@ variables for controlling the job control facilities (see Job Control Variables).

    -
    _ - -
    +
    _

    ($_, an underscore.) At shell startup, set to the pathname used to invoke the @@ -6477,15 +6738,11 @@ and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file.

    -
    BASH - -
    +
    BASH

    The full pathname used to execute the current instance of Bash.

    -
    BASHOPTS - -
    +
    BASHOPTS

    A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -s option to the shopt builtin command (see The Shopt Builtin). @@ -6496,9 +6753,7 @@ starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly.

    -
    BASHPID - -
    +
    BASHPID

    Expands to the process ID of the current Bash process. This differs from $$ under certain circumstances, such as subshells that do not require Bash to be re-initialized. @@ -6508,9 +6763,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_ALIASES - -
    +
    BASH_ALIASES

    An associative array variable whose members correspond to the internal list of aliases as maintained by the alias builtin. (see Bourne Shell Builtins). @@ -6522,9 +6775,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_ARGC - -
    +
    BASH_ARGC

    An array variable whose values are the number of parameters in each frame of the current bash execution call stack. The number of parameters to the current subroutine (shell function or script executed @@ -6540,9 +6791,7 @@ or referencing this variable when extdebug is not set, may result in inconsistent values.

    -
    BASH_ARGV - -
    +
    BASH_ARGV

    An array variable containing all of the parameters in the current bash execution call stack. The final parameter of the last subroutine call is at the top of the stack; the first parameter of the initial call is @@ -6557,9 +6806,7 @@ or referencing this variable when extdebug is not set, may result in inconsistent values.

    -
    BASH_ARGV0 - -
    +
    BASH_ARGV0

    When referenced, this variable expands to the name of the shell or shell script (identical to $0; See Special Parameters, for the description of special parameter 0). @@ -6570,9 +6817,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_CMDS - -
    +
    BASH_CMDS

    An associative array variable whose members correspond to the internal hash table of commands as maintained by the hash builtin (see Bourne Shell Builtins). @@ -6584,9 +6829,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_COMMAND - -
    +
    BASH_COMMAND

    The command currently being executed or about to be executed, unless the shell is executing a command as the result of a trap, in which case it is the command executing at the time of the trap. @@ -6595,9 +6838,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_COMPAT - -
    +
    BASH_COMPAT

    The value is used to set the shell’s compatibility level. See Shell Compatibility Mode, for a description of the various compatibility levels and their effects. @@ -6616,25 +6857,19 @@ and set the compatibility level to 42. The current version is also a valid value.

    -
    BASH_ENV - -
    +
    BASH_ENV

    If this variable is set when Bash is invoked to execute a shell script, its value is expanded and used as the name of a startup file to read before executing the script. See Bash Startup Files.

    -
    BASH_EXECUTION_STRING - -
    +
    BASH_EXECUTION_STRING

    The command argument to the -c invocation option.

    -
    BASH_LINENO - -
    +
    BASH_LINENO

    An array variable whose members are the line numbers in source files -where each corresponding member of FUNCNAME was invoked. +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 @@ -6642,17 +6877,13 @@ referenced within another shell function). Use LINENO to obtain the current line number.

    -
    BASH_LOADABLES_PATH - -
    +
    BASH_LOADABLES_PATH

    A colon-separated list of directories in which the shell looks for dynamically loadable builtins specified by the enable command.

    -
    BASH_REMATCH - -
    +
    BASH_REMATCH

    An array variable whose members are assigned by the ‘=~’ binary operator to the [[ conditional command (see Conditional Constructs). @@ -6662,9 +6893,7 @@ The element with index n is the portion of the string matching the nth parenthesized subexpression.

    -
    BASH_SOURCE - -
    +
    BASH_SOURCE

    An array variable whose members are the source filenames where the corresponding shell function names in the FUNCNAME array variable are defined. @@ -6672,9 +6901,7 @@ The shell function ${FUNCNAME[$i]} is defined in the file ${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}

    -
    BASH_SUBSHELL - -
    +
    BASH_SUBSHELL

    Incremented by one within each subshell or subshell environment when the shell begins executing in that environment. The initial value is 0. @@ -6683,49 +6910,43 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    BASH_VERSINFO - -
    +
    BASH_VERSINFO

    A readonly array variable (see Arrays) whose members hold version information for this instance of Bash. The values assigned to the array members are as follows:

    -
    BASH_VERSINFO[0]
    -

    The major version number (the release). +

    BASH_VERSINFO[0]
    +

    The major version number (the release).

    -
    BASH_VERSINFO[1]
    -

    The minor version number (the version). +

    BASH_VERSINFO[1]
    +

    The minor version number (the version).

    -
    BASH_VERSINFO[2]
    +
    BASH_VERSINFO[2]

    The patch level.

    -
    BASH_VERSINFO[3]
    +
    BASH_VERSINFO[3]

    The build version.

    -
    BASH_VERSINFO[4]
    -

    The release status (e.g., beta1). +

    BASH_VERSINFO[4]
    +

    The release status (e.g., beta1).

    -
    BASH_VERSINFO[5]
    +
    BASH_VERSINFO[5]

    The value of MACHTYPE.

    -
    BASH_VERSION - -
    +
    BASH_VERSION

    The version number of the current instance of Bash.

    -
    BASH_XTRACEFD - -
    +
    BASH_XTRACEFD

    If set to an integer corresponding to a valid file descriptor, Bash will write the trace output generated when ‘set -x’ is enabled to that file descriptor. @@ -6740,9 +6961,7 @@ descriptor) and then unsetting it will result in the standard error being closed.

    -
    CHILD_MAX - -
    +
    CHILD_MAX

    Set the number of exited child status values for the shell to remember. Bash will not allow this value to be decreased below a POSIX-mandated minimum, and there is a maximum value (currently 8192) that this may @@ -6750,9 +6969,7 @@ not exceed. The minimum value is system-dependent.

    -
    COLUMNS - -
    +
    COLUMNS

    Used by the select command to determine the terminal width when printing selection lists. Automatically set if the checkwinsize option is enabled @@ -6760,27 +6977,21 @@ Automatically set if the checkwinsize option is enabled SIGWINCH.

    -
    COMP_CWORD - -
    +
    COMP_CWORD

    An index into ${COMP_WORDS} of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_LINE - -
    +
    COMP_LINE

    The current command line. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_POINT - -
    +
    COMP_POINT

    The index of the current cursor position relative to the beginning of the current command. If the current cursor position is at the end of the current command, @@ -6790,12 +7001,10 @@ commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_TYPE - -
    +
    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, +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, @@ -6806,16 +7015,12 @@ commands invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMP_KEY - -
    +
    COMP_KEY

    The key (or final key of a key sequence) used to invoke the current completion function.

    -
    COMP_WORDBREAKS - -
    +
    COMP_WORDBREAKS

    The set of characters that the Readline library treats as word separators when performing word completion. If COMP_WORDBREAKS @@ -6823,9 +7028,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    COMP_WORDS - -
    +
    COMP_WORDS

    An array variable consisting of the individual words in the current command line. The line is split into words as Readline would split it, using @@ -6834,25 +7037,19 @@ This variable is available only in shell functions invoked by the programmable completion facilities (see Programmable Completion).

    -
    COMPREPLY - -
    +
    COMPREPLY

    An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility (see Programmable Completion). Each array element contains one possible completion.

    -
    COPROC - -
    +
    COPROC

    An array variable created to hold the file descriptors for output from and input to an unnamed coprocess (see Coprocesses).

    -
    DIRSTACK - -
    +
    DIRSTACK

    An array variable containing the current contents of the directory stack. Directories appear in the stack in the order they are displayed by the dirs builtin. @@ -6865,29 +7062,23 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    EMACS - -
    +
    EMACS

    If Bash finds this variable in the environment when the shell starts with value ‘t’, it assumes that the shell is running in an Emacs shell buffer and disables line editing.

    -
    ENV - -
    +
    ENV

    Expanded and executed similarlty to BASH_ENV (see Bash Startup Files) when an interactive shell is invoked in POSIX Mode (see Bash POSIX Mode).

    -
    EPOCHREALTIME - -
    +
    EPOCHREALTIME

    Each time this parameter is referenced, it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity -(see the documentation for the C library function time for the +(see the documentation for the C library function time for the definition of Epoch). Assignments to EPOCHREALTIME are ignored. If EPOCHREALTIME @@ -6895,28 +7086,22 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    EPOCHSECONDS - -
    +
    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). +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 - -
    +
    EUID

    The numeric effective user id of the current user. This variable is readonly.

    -
    EXECIGNORE - -
    +
    EXECIGNORE

    A colon-separated list of shell patterns (see Pattern Matching) defining the list of filenames to be ignored by command search using PATH. @@ -6932,16 +7117,12 @@ The pattern matching honors the setting of the extglob shell option.

    -
    FCEDIT - -
    +
    FCEDIT

    The editor used as a default by the -e option to the fc builtin command.

    -
    FIGNORE - -
    +
    FIGNORE

    A colon-separated list of suffixes to ignore when performing filename completion. A filename whose suffix matches one of the entries in @@ -6950,9 +7131,7 @@ is excluded from the list of matched filenames. A sample value is ‘.o:~

    -
    FUNCNAME - -
    +
    FUNCNAME

    An array variable containing the names of all shell functions currently in the execution call stack. The element with index 0 is the name of any currently-executing @@ -6974,17 +7153,13 @@ The caller builtin displays the current call stack using this information.

    -
    FUNCNEST - -
    +
    FUNCNEST

    If set to a numeric value greater than 0, defines a maximum function nesting level. Function invocations that exceed this nesting level will cause the current command to abort.

    -
    GLOBIGNORE - -
    +
    GLOBIGNORE

    A colon-separated list of patterns defining the set of file names to be ignored by filename expansion. If a file name matched by a filename expansion pattern also matches one @@ -6994,9 +7169,7 @@ The pattern matching honors the setting of the extglob shell option.

    -
    GROUPS - -
    +
    GROUPS

    An array variable containing the list of groups of which the current user is a member. Assignments to GROUPS have no effect. @@ -7005,13 +7178,11 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    histchars - -
    +
    histchars

    Up to three characters which control history expansion, quick -substitution, and tokenization (see History Interaction). +substitution, and tokenization (see History Expansion). The first character is the -history expansion character, that is, the character which signifies the +history expansion character, that is, the character which signifies the start of a history expansion, normally ‘!’. The second character is the character which signifies ‘quick substitution’ when seen as the first character on a line, normally ‘^’. The optional third character is the @@ -7022,9 +7193,7 @@ remaining words on the line. It does not necessarily cause the shell parser to treat the rest of the line as a comment.

    -
    HISTCMD - -
    +
    HISTCMD

    The history number, or index in the history list, of the current command. Assignments to HISTCMD are ignored. @@ -7033,9 +7202,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    HISTCONTROL - -
    +
    HISTCONTROL

    A colon-separated list of values controlling how commands are saved on the history list. If the list of values includes ‘ignorespace’, lines which begin @@ -7056,16 +7223,12 @@ not tested, and are added to the history regardless of the value of HISTCONTROL.

    -
    HISTFILE - -
    +
    HISTFILE

    The name of the file to which the command history is saved. The default value is ~/.bash_history.

    -
    HISTFILESIZE - -
    +
    HISTFILESIZE

    The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines @@ -7078,9 +7241,7 @@ The shell sets the default value to the value of HISTSIZE after reading any startup files.

    -
    HISTIGNORE - -
    +
    HISTIGNORE

    A colon-separated list of patterns used to decide which command lines should be saved on the history list. Each pattern is anchored at the beginning of the line and must match the complete @@ -7103,9 +7264,7 @@ Combining these two patterns, separating them with a colon, provides the functionality of ignoreboth.

    -
    HISTSIZE - -
    +
    HISTSIZE

    The maximum number of commands to remember on the history list. If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved @@ -7113,11 +7272,9 @@ on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.

    -
    HISTTIMEFORMAT - -
    +
    HISTTIMEFORMAT

    If this variable is set and not null, its value is used as a format string -for strftime to print the time stamp associated with each history +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. @@ -7125,9 +7282,7 @@ This uses the history comment character to distinguish timestamps from other history lines.

    -
    HOSTFILE - -
    +
    HOSTFILE

    Contains the name of a file in the same format as /etc/hosts that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell @@ -7141,21 +7296,15 @@ Bash attempts to read When HOSTFILE is unset, the hostname list is cleared.

    -
    HOSTNAME - -
    +
    HOSTNAME

    The name of the current host.

    -
    HOSTTYPE - -
    +
    HOSTTYPE

    A string describing the machine Bash is running on.

    -
    IGNOREEOF - -
    +
    IGNOREEOF

    Controls the action of the shell on receipt of an EOF character as the sole input. If set, the value denotes the number of consecutive EOF characters that can be read as the @@ -7166,38 +7315,28 @@ If the variable does not exist, then EOF signifies the end of input to the shell. This is only in effect for interactive shells.

    -
    INPUTRC - -
    +
    INPUTRC

    The name of the Readline initialization file, overriding the default of ~/.inputrc.

    -
    INSIDE_EMACS - -
    +
    INSIDE_EMACS

    If Bash finds this variable in the environment when the shell starts, it assumes that the shell is running in an Emacs shell buffer and may disable line editing depending on the value of TERM.

    -
    LANG - -
    +
    LANG

    Used to determine the locale category for any category not specifically selected with a variable starting with LC_.

    -
    LC_ALL - -
    +
    LC_ALL

    This variable overrides the value of LANG and any other LC_ variable specifying a locale category.

    -
    LC_COLLATE - -
    +
    LC_COLLATE

    This variable determines the collation order used when sorting the results of filename expansion, and determines the behavior of range expressions, equivalence classes, @@ -7205,46 +7344,34 @@ and collating sequences within filename expansion and pattern matching (see Filename Expansion).

    -
    LC_CTYPE - -
    +
    LC_CTYPE

    This variable determines the interpretation of characters and the behavior of character classes within filename expansion and pattern matching (see Filename Expansion).

    -
    LC_MESSAGES - -
    +
    LC_MESSAGES

    This variable determines the locale used to translate double-quoted -strings preceded by a ‘$’ (see Locale Translation). +strings preceded by a ‘$’ (see Locale-Specific Translation).

    -
    LC_NUMERIC - -
    +
    LC_NUMERIC

    This variable determines the locale category used for number formatting.

    -
    LC_TIME - -
    +
    LC_TIME

    This variable determines the locale category used for data and time formatting.

    -
    LINENO - -
    +
    LINENO

    The line number in the script or shell function currently executing. If LINENO is unset, it loses its special properties, even if it is subsequently reset.

    -
    LINES - -
    +
    LINES

    Used by the select command to determine the column length for printing selection lists. Automatically set if the checkwinsize option is enabled @@ -7252,16 +7379,12 @@ Automatically set if the checkwinsize option is enabled SIGWINCH.

    -
    MACHTYPE - -
    +
    MACHTYPE

    A string that fully describes the system type on which Bash is executing, in the standard GNU cpu-company-system format.

    -
    MAILCHECK - -
    +
    MAILCHECK

    How often (in seconds) that the shell should check for mail in the files specified in the MAILPATH or MAIL variables. The default is 60 seconds. When it is time to check @@ -7270,44 +7393,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.

    -
    MAPFILE - -
    +
    MAPFILE

    An array variable created to hold the text read by the mapfile builtin when no variable name is supplied.

    -
    OLDPWD - -
    +
    OLDPWD

    The previous working directory as set by the cd builtin.

    -
    OPTERR - -
    +
    OPTERR

    If set to the value 1, Bash displays error messages generated by the getopts builtin command.

    -
    OSTYPE - -
    +
    OSTYPE

    A string describing the operating system Bash is running on.

    -
    PIPESTATUS - -
    +
    PIPESTATUS

    An array variable (see Arrays) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).

    -
    POSIXLY_CORRECT - -
    +
    POSIXLY_CORRECT

    If this variable is in the environment when Bash starts, the shell enters POSIX mode (see Bash POSIX Mode) before reading the startup files, as if the --posix invocation option had been supplied. @@ -7321,16 +7432,12 @@ When the shell enters POSIX mode, it sets this variable if it was not already set.

    -
    PPID - -
    +
    PPID

    The process ID of the shell’s parent process. This variable is readonly.

    -
    PROMPT_COMMAND - -
    +
    PROMPT_COMMAND

    If this variable is set, and is an array, the value of each set element is interpreted as a command to execute before printing the primary prompt ($PS1). @@ -7338,35 +7445,27 @@ If this is set but not an array variable, its value is used as a command to execute instead.

    -
    PROMPT_DIRTRIM - -
    +
    PROMPT_DIRTRIM

    If set to a number greater than zero, the value is used as the number of trailing directory components to retain when expanding the \w and \W prompt string escapes (see Controlling the Prompt). Characters removed are replaced with an ellipsis.

    -
    PS0 - -
    +
    PS0

    The value of this parameter is expanded like PS1 and displayed by interactive shells after reading a command and before the command is executed.

    -
    PS3 - -
    +
    PS3

    The value of this variable is used as the prompt for the select command. If this variable is not set, the select command prompts with ‘#?

    -
    PS4 - -
    -

    The value of this parameter is expanded like PS1 +

    PS4
    +

    The value of this parameter is expanded like PS1 and the expanded value is the prompt printed before the command line is echoed when the -x option is set (see The Set Builtin). The first character of the expanded value is replicated multiple times, @@ -7374,15 +7473,11 @@ as necessary, to indicate multiple levels of indirection. The default is ‘+ ’.

    -
    PWD - -
    +
    PWD

    The current working directory as set by the cd builtin.

    -
    RANDOM - -
    +
    RANDOM

    Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable seeds the random number generator. @@ -7391,62 +7486,53 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    READLINE_LINE - -
    +
    READLINE_ARGUMENT
    +

    Any numeric argument given to a Readline command that was defined using +‘bind -x’ (see Bash Builtin Commands +when it was invoked. +

    +
    +
    READLINE_LINE

    The contents of the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands).

    -
    READLINE_MARK - -
    -

    The position of the mark (saved insertion point) in the +

    READLINE_MARK
    +

    The position of the mark (saved insertion point) in the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands). The characters between the insertion point and the mark are often -called the region. +called the region.

    -
    READLINE_POINT - -
    +
    READLINE_POINT

    The position of the insertion point in the Readline line buffer, for use -with ‘bind -x’ (see Bash Builtins). +with ‘bind -x’ (see Bash Builtin Commands).

    -
    REPLY - -
    +
    REPLY

    The default variable for the read builtin.

    -
    SECONDS - -
    -

    This variable expands to the number of seconds since the -shell was started. Assignment to this variable resets -the count to the value assigned, and the expanded value -becomes the value assigned plus the number of seconds +

    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 SECONDS is unset, it loses its special properties, even if it is subsequently reset.

    -
    SHELL - -
    +
    SHELL

    This environment variable expands to the full pathname to the shell. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user’s login shell.

    -
    SHELLOPTS - -
    +
    SHELLOPTS

    A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -o option to the set builtin command (see The Set Builtin). @@ -7457,16 +7543,12 @@ starts up, each shell option in the list will be enabled before reading any startup files. This variable is readonly.

    -
    SHLVL - -
    +
    SHLVL

    Incremented by one each time a new instance of Bash is started. This is intended to be a count of how deeply your Bash shells are nested.

    -
    SRANDOM - -
    +
    SRANDOM

    This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that support /dev/urandom or arc4random, so each returned number @@ -7478,9 +7560,7 @@ is unset, it loses its special properties, even if it is subsequently reset.

    -
    TIMEFORMAT - -
    +
    TIMEFORMAT

    The value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. @@ -7491,23 +7571,23 @@ The escape sequences and their meanings are as follows; the braces denote optional portions.

    -
    %%
    +
    %%

    A literal ‘%’.

    -
    %[p][l]R
    +
    %[p][l]R

    The elapsed time in seconds.

    -
    %[p][l]U
    +
    %[p][l]U

    The number of CPU seconds spent in user mode.

    -
    %[p][l]S
    +
    %[p][l]S

    The number of CPU seconds spent in system mode.

    -
    %P
    +
    %P

    The CPU percentage, computed as (%U + %S) / %R.

    @@ -7531,11 +7611,9 @@ The value of p determines whether or not the fraction is included. A trailing newline is added when the format string is displayed.

    -
    TMOUT - -
    +
    TMOUT

    If set to a value greater than zero, TMOUT is treated as the -default timeout for the read builtin (see Bash Builtins). +default timeout for the read builtin (see Bash Builtin Commands). The select command (see Conditional Constructs) terminates if input does not arrive after TMOUT seconds when input is coming from a terminal. @@ -7548,63 +7626,47 @@ terminates after waiting for that number of seconds if a complete line of input does not arrive.

    -
    TMPDIR - -
    +
    TMPDIR

    If set, Bash uses its value as the name of a directory in which Bash creates temporary files for the shell’s use.

    -
    UID - -
    +
    UID

    The numeric real user id of the current user. This variable is readonly.


    -
    +
    +
    +
    +

    -Next: , Previous: , Up: Top   [Contents][Index]

    +Next: , Previous: , Up: Bash Features   [Contents][Index]

    6 Bash Features

    This chapter describes features unique to Bash.

    - - - - - - - - - - - - - - +
    -
    +
    + @@ -7626,57 +7688,57 @@ options that you can use. These options must appear on the command line before the single-character options to be recognized.

    -
    --debugger
    +
    --debugger

    Arrange for the debugger profile to be executed before the shell starts. Turns on extended debugging mode (see The Shopt Builtin for a description of the extdebug option to the shopt builtin).

    -
    --dump-po-strings
    +
    --dump-po-strings

    A list of all double-quoted strings preceded by ‘$’ is printed on the standard output in the GNU gettext PO (portable object) file format. Equivalent to -D except for the output format.

    -
    --dump-strings
    +
    --dump-strings

    Equivalent to -D.

    -
    --help
    +
    --help

    Display a usage message on standard output and exit successfully.

    -
    --init-file filename
    -
    --rcfile filename
    +
    --init-file filename
    +
    --rcfile filename

    Execute commands from filename (instead of ~/.bashrc) in an interactive shell.

    -
    --login
    +
    --login

    Equivalent to -l.

    -
    --noediting
    +
    --noediting

    Do not use the GNU Readline library (see Command Line Editing) to read command lines when the shell is interactive.

    -
    --noprofile
    +
    --noprofile

    Don’t load the system-wide startup file /etc/profile or any of the personal initialization files ~/.bash_profile, ~/.bash_login, or ~/.profile when Bash is invoked as a login shell.

    -
    --norc
    +
    --norc

    Don’t read the ~/.bashrc initialization file in an interactive shell. This is on by default if the shell is invoked as sh.

    -
    --posix
    +
    --posix

    Change the behavior of Bash where the default operation differs from the POSIX standard to match the standard. This is intended to make Bash behave as a strict superset of that @@ -7684,15 +7746,15 @@ standard. See Bash POSIX Mode, for a description POSIX mode.

    -
    --restricted
    +
    --restricted

    Make the shell a restricted shell (see The Restricted Shell).

    -
    --verbose
    +
    --verbose

    Equivalent to -v. Print shell input lines as they’re read.

    -
    --version
    +
    --version

    Show version information for this instance of Bash on the standard output and exit successfully.

    @@ -7702,7 +7764,7 @@ Bash on the standard output and exit successfully. invocation which are not available with the set builtin.

    -
    -c
    +
    -c

    Read and execute commands from the first non-option argument command_string, then exit. If there are arguments after the command_string, @@ -7712,12 +7774,12 @@ The assignment to $0 sets the name of the shell, which is used in warning and error messages.

    -
    -i
    +
    -i

    Force the shell to run interactively. Interactive shells are described in Interactive Shells.

    -
    -l
    +
    -l

    Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a login shell with ‘exec -l bash’. @@ -7729,11 +7791,11 @@ See Bash Startup Files, for a description of t of a login shell.

    -
    -r
    +
    -r

    Make the shell a restricted shell (see The Restricted Shell).

    -
    -s
    +
    -s

    If this option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set @@ -7741,16 +7803,16 @@ when invoking an interactive shell or when reading input through a pipe.

    -
    -D
    +
    -D

    A list of all double-quoted strings preceded by ‘$’ is printed on the standard output. These are the strings that are subject to language translation when the current locale -is not C or POSIX (see Locale Translation). +is not C or POSIX (see Locale-Specific Translation). This implies the -n option; no commands will be executed.

    -
    [-+]O [shopt_option]
    +
    [-+]O [shopt_option]

    shopt_option is one of the shell options accepted by the shopt builtin (see The Shopt Builtin). If shopt_option is present, -O sets the value of that option; @@ -7761,7 +7823,7 @@ If the invocation option is +O, the output is displayed in a format that may be reused as input.

    -
    --
    +
    --

    A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. @@ -7792,7 +7854,9 @@ Bash’s exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.


    -
    +
    +
    + @@ -7912,7 +7976,9 @@ If the -p option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset.


    -
    +
    +
    + @@ -7920,25 +7986,24 @@ Next:
    -
    +
    +

    6.3.1 What is an Interactive Shell?

    An interactive shell -is one started without non-option arguments, unless -s is -specified, without specifying the -c option, and +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. @@ -7950,7 +8015,9 @@ terminal. when an interactive shell is started.


    -
    +
    +
    + @@ -7981,7 +8048,9 @@ fi

    -
    +
    +
    + @@ -8005,7 +8074,7 @@ executing it. See Controlling the Prompt, for a complete list of prompt string escape sequences. -
  • Bash executes the values of the set elements of the PROMPT_COMMANDS +
  • Bash executes the values of the set elements of the PROMPT_COMMAND array variable as commands before printing the primary prompt, $PS1 (see Bash Variables). @@ -8017,7 +8086,7 @@ instead of exiting immediately when it receives an EOF on its standard input when reading a command (see The Set Builtin).
  • Command history (see Bash History Facilities) -and history expansion (see History Interaction) +and history expansion (see History Expansion) are enabled by default. Bash will save the command history to the file named by $HISTFILE when a shell with history enabled exits. @@ -8060,9 +8129,11 @@ status will not cause the shell to exit (see Bash POS
  • Parser syntax errors will not cause the shell to exit. -
  • Simple spelling correction for directory arguments to the cd -builtin is enabled by default (see the description of the cdspell +
  • 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 The Shopt Builtin). +The cdspell option is only effective in interactive shells.
  • 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 @@ -8071,7 +8142,10 @@ printing $PS1 (see Bash Variables).

  • -
    +
    +
    +
    + @@ -8079,7 +8153,10 @@ Next: ,

    Conditional expressions are used by the [[ compound command -and the test and [ builtin commands. The test +(see Conditional Constructs) +and the test and [ builtin commands +(see 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. @@ -8107,130 +8184,130 @@ The test command uses ASCII ordering. links and operate on the target of the link, rather than the link itself.

    -
    -a file
    +
    -a file

    True if file exists.

    -
    -b file
    +
    -b file

    True if file exists and is a block special file.

    -
    -c file
    +
    -c file

    True if file exists and is a character special file.

    -
    -d file
    +
    -d file

    True if file exists and is a directory.

    -
    -e file
    +
    -e file

    True if file exists.

    -
    -f file
    +
    -f file

    True if file exists and is a regular file.

    -
    -g file
    +
    -g file

    True if file exists and its set-group-id bit is set.

    -
    -h file
    +
    -h file

    True if file exists and is a symbolic link.

    -
    -k file
    +
    -k file

    True if file exists and its "sticky" bit is set.

    -
    -p file
    +
    -p file

    True if file exists and is a named pipe (FIFO).

    -
    -r file
    +
    -r file

    True if file exists and is readable.

    -
    -s file
    +
    -s file

    True if file exists and has a size greater than zero.

    -
    -t fd
    +
    -t fd

    True if file descriptor fd is open and refers to a terminal.

    -
    -u file
    +
    -u file

    True if file exists and its set-user-id bit is set.

    -
    -w file
    +
    -w file

    True if file exists and is writable.

    -
    -x file
    +
    -x file

    True if file exists and is executable.

    -
    -G file
    +
    -G file

    True if file exists and is owned by the effective group id.

    -
    -L file
    +
    -L file

    True if file exists and is a symbolic link.

    -
    -N file
    +
    -N file

    True if file exists and has been modified since it was last read.

    -
    -O file
    +
    -O file

    True if file exists and is owned by the effective user id.

    -
    -S file
    +
    -S file

    True if file exists and is a socket.

    -
    file1 -ef file2
    +
    file1 -ef file2

    True if file1 and file2 refer to the same device and inode numbers.

    -
    file1 -nt file2
    +
    file1 -nt file2

    True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.

    -
    file1 -ot file2
    +
    file1 -ot file2

    True if file1 is older than file2, or if file2 exists and file1 does not.

    -
    -o optname
    +
    -o optname

    True if the shell option optname is enabled. The list of options appears in the description of the -o option to the set builtin (see The Set Builtin).

    -
    -v varname
    +
    -v varname

    True if the shell variable varname is set (has been assigned a value).

    -
    -R varname
    +
    -R varname

    True if the shell variable varname is set and is a name reference.

    -
    -z string
    +
    -z string

    True if the length of string is zero.

    -
    -n string
    -
    string
    +
    -n string
    +
    string

    True if the length of string is non-zero.

    -
    string1 == string2
    -
    string1 = string2
    +
    string1 == string2
    +
    string1 = string2

    True if the strings are equal. When used with the [[ command, this performs pattern matching as described above (see Conditional Constructs). @@ -8238,19 +8315,19 @@ described above (see Conditional Constructs=’ should be used with the test command for POSIX conformance.

    -
    string1 != string2
    +
    string1 != string2

    True if the strings are not equal.

    -
    string1 < string2
    +
    string1 < string2

    True if string1 sorts before string2 lexicographically.

    -
    string1 > string2
    +
    string1 > string2

    True if string1 sorts after string2 lexicographically.

    -
    arg1 OP arg2
    +
    arg1 OP arg2

    OP is one of ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, or ‘-ge’. These arithmetic binary operators return true if arg1 @@ -8264,7 +8341,9 @@ are evaluated as arithmetic expressions (see Shell A


    -
    +
    +
    + @@ -8288,75 +8367,75 @@ equal-precedence operators. The levels are listed in order of decreasing precedence.

    -
    id++ id--
    +
    id++ id--

    variable post-increment and post-decrement

    -
    ++id --id
    +
    ++id --id

    variable pre-increment and pre-decrement

    -
    - +
    +
    - +

    unary minus and plus

    -
    ! ~
    +
    ! ~

    logical and bitwise negation

    -
    **
    +
    **

    exponentiation

    -
    * / %
    +
    * / %

    multiplication, division, remainder

    -
    + -
    +
    + -

    addition, subtraction

    -
    << >>
    +
    << >>

    left and right bitwise shifts

    -
    <= >= < >
    +
    <= >= < >

    comparison

    -
    == !=
    +
    == !=

    equality and inequality

    -
    &
    +
    &

    bitwise AND

    -
    ^
    +
    ^

    bitwise exclusive OR

    -
    |
    +
    |

    bitwise OR

    -
    &&
    +
    &&

    logical AND

    -
    ||
    +
    ||

    logical OR

    -
    expr ? expr : expr
    +
    expr ? expr : expr

    conditional operator

    -
    = *= /= %= += -= <<= >>= &= ^= |=
    +
    = *= /= %= += -= <<= >>= &= ^= |=

    assignment

    -
    expr1 , expr2
    +
    expr1 , expr2

    comma

    @@ -8369,9 +8448,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 -integer attribute using ‘declare -i’ is assigned a value. +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 +A shell variable need not have its integer attribute turned on to be used in an expression.

    Integer constants follow the C language definition, without suffixes or @@ -8395,14 +8474,16 @@ parentheses are evaluated first and may override the precedence rules above.


    -
    +
    +
    +

    Next: , Previous: , Up: Bash Features   [Contents][Index]

    6.6 Aliases

    -

    Aliases allow a string to be substituted for a word when it is used +

    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. @@ -8422,7 +8503,7 @@ 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 +blank, then the next command word following the alias is also checked for alias expansion.

    Aliases are created and listed with the alias @@ -8430,7 +8511,7 @@ 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 +If arguments are needed, use a shell function (see Shell Functions).

    Aliases are not expanded when the shell is not interactive, @@ -8460,7 +8541,9 @@ in compound commands.

    For almost every purpose, shell functions are preferred over aliases.


    -
    +
    +
    + @@ -8593,8 +8676,14 @@ 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. +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 @@ -8613,18 +8702,15 @@ builtins display array values in a way that allows them to be reused as input.


    -
    +
    +
    +

    6.8 The Directory Stack

    - - -

    The directory stack is a list of recently-visited directories. The pushd builtin adds directories to the stack as it changes @@ -8637,17 +8723,20 @@ of the directory stack.

    The contents of the directory stack are also visible as the value of the DIRSTACK shell variable.

    +
    -
    +
    +

    6.8.1 Directory Stack Builtins

    -
    dirs
    -
    -
    +
    dirs
    +
    dirs [-clpv] [+N | -N]
     
    @@ -8657,27 +8746,27 @@ are added to the list with the pushd command; the The current directory is always the first directory in the stack.

    -
    -c
    +
    -c

    Clears the directory stack by deleting all of the elements.

    -
    -l
    +
    -l

    Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory.

    -
    -p
    +
    -p

    Causes dirs to print the directory stack with one entry per line.

    -
    -v
    +
    -v

    Causes dirs to print the directory stack with one entry per line, prefixing each entry with its index in the stack.

    -
    +N
    +
    +N

    Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.

    -
    -N
    +
    -N

    Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. @@ -8685,80 +8774,116 @@ with zero.

    -
    popd
    -
    -
    +
    popd
    +
    popd [-n] [+N | -N]
     
    -

    When no arguments are given, popd -removes the top directory from the stack and -performs a cd to the new top directory. +

    Removes elements from the directory stack. The elements are numbered from 0 starting at the first directory -listed with dirs; that is, popd is equivalent to popd +0. +listed by dirs; +that is, popd is equivalent to popd +0. +

    +

    When no arguments are given, popd +removes the top directory from the stack and changes to +the new top directory. +

    +

    Arguments, if supplied, have the following meanings:

    -
    -n
    +
    -n

    Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.

    -
    +N
    +
    +N

    Removes the Nth directory (counting from the left of the -list printed by dirs), starting with zero. +list printed by dirs), starting with zero, from the stack.

    -
    -N
    +
    -N

    Removes the Nth directory (counting from the right of the -list printed by dirs), starting with zero. +list printed by dirs), starting with zero, from the stack.

    +

    If the top element of the directory stack is modified, and +the -n option was not supplied, popd uses the cd +builtin to change to the directory at the top of the stack. +If the cd fails, popd returns a non-zero value. +

    +

    Otherwise, popd returns an unsuccessful status if +an invalid option is encountered, the directory stack +is empty, or a non-existent directory stack entry is specified. +

    +

    If the popd command is successful, +Bash runs dirs to show the final contents of the directory stack, +and the return status is 0. +

    -
    pushd
    +
    pushd
    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
    +
    -n

    Suppresses the normal change of directory when rotating or adding directories to the stack, so that only the stack is manipulated.

    -
    +N
    +
    +N

    Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.

    -
    -N
    +
    -N

    Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.

    -
    dir
    -

    Makes dir be the top of the stack, making -it the new current directory as if it had been supplied as an argument -to the cd builtin. +

    dir
    +

    Makes dir be the top of the stack.

    + +

    After the stack has been modified, if the -n option was not +supplied, pushd uses the cd builtin to change to the +directory at the top of the stack. +If the cd fails, pushd returns a non-zero value. +

    +

    Otherwise, if no arguments are supplied, pushd returns 0 unless the +directory stack is empty. +When rotating the directory stack, pushd returns 0 unless +the directory stack is empty or a non-existent directory stack element +is specified. +

    +

    If the pushd command is successful, +Bash runs dirs to show the final contents of the directory stack. +


    -
    +
    +
    +
    +

    6.9 Controlling the Prompt

    -

    Bash examines the value of the array variable PROMPT_COMMANDS just before +

    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 +If any elements in PROMPT_COMMAND are set and non-null, Bash executes each value, in numeric order, just as if it had been typed on the command line.

    @@ -8767,90 +8892,91 @@ can appear in the prompt variables PS0, PS1, PS2 PS4:

    -
    \a
    +
    \a

    A bell character.

    -
    \d
    +
    \d

    The date, in "Weekday Month Date" format (e.g., "Tue May 26").

    -
    \D{format}
    +
    \D{format}

    The format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required.

    -
    \e
    +
    \e

    An escape character.

    -
    \h
    +
    \h

    The hostname, up to the first ‘.’.

    -
    \H
    +
    \H

    The hostname.

    -
    \j
    +
    \j

    The number of jobs currently managed by the shell.

    -
    \l
    +
    \l

    The basename of the shell’s terminal device name.

    -
    \n
    +
    \n

    A newline.

    -
    \r
    +
    \r

    A carriage return.

    -
    \s
    +
    \s

    The name of the shell, the basename of $0 (the portion following the final slash).

    -
    \t
    +
    \t

    The time, in 24-hour HH:MM:SS format.

    -
    \T
    +
    \T

    The time, in 12-hour HH:MM:SS format.

    -
    \@
    +
    \@

    The time, in 12-hour am/pm format.

    -
    \A
    +
    \A

    The time, in 24-hour HH:MM format.

    -
    \u
    +
    \u

    The username of the current user.

    -
    \v
    +
    \v

    The version of Bash (e.g., 2.00)

    -
    \V
    +
    \V

    The release of Bash, version + patchlevel (e.g., 2.00.0)

    -
    \w
    -

    The current working directory, with $HOME abbreviated with a tilde +

    \w
    +

    The value of the PWD shell variable ($PWD), +with $HOME abbreviated with a tilde (uses the $PROMPT_DIRTRIM variable).

    -
    \W
    +
    \W

    The basename of $PWD, with $HOME abbreviated with a tilde.

    -
    \!
    +
    \!

    The history number of this command.

    -
    \#
    +
    \#

    The command number of this command.

    -
    \$
    +
    \$

    If the effective uid is 0, #, otherwise $.

    -
    \nnn
    +
    \nnn

    The character whose ASCII code is the octal value nnn.

    -
    \\
    +
    \\

    A backslash.

    -
    \[
    +
    \[

    Begin a sequence of non-printing characters. This could be used to embed a terminal control sequence into the prompt.

    -
    \]
    +
    \]

    End a sequence of non-printing characters.

    @@ -8871,7 +8997,9 @@ appear within command substitution or contain characters special to word expansion.


    -
    +
    +
    + @@ -8909,7 +9037,7 @@ option to the hash builtin command. -f and -d options to the enable builtin.
  • Using the enable builtin command to enable disabled shell builtins.
  • Specifying the -p option to the command builtin. -
  • Turning off restricted mode with ‘set +r’ or ‘set +o restricted’. +
  • Turning off restricted mode with ‘set +r’ or ‘shopt -u restricted_shell’.
  • These restrictions are enforced after any startup files are read. @@ -8921,8 +9049,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 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 $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). @@ -8932,7 +9060,9 @@ such as jails, zones, or containers.


    -
    +
    +
    + @@ -9042,7 +9172,10 @@ a value to a readonly variable.
  • 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").
  • A non-interactive shell exits with an error status if the iteration variable in a for statement or the selection variable in a @@ -9127,15 +9260,15 @@ shell function names and definitions. variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. -
  • When the cd builtin is invoked in logical mode, and the pathname +
  • 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. +falling back to physical mode.
  • When the cd builtin cannot change a directory because the length of the pathname constructed from $PWD and the directory name supplied as an argument -exceeds PATH_MAX when all symbolic links are expanded, cd will +exceeds PATH_MAX when all symbolic links are expanded, cd will fail instead of attempting to use only the supplied directory name.
  • The pwd builtin verifies that the value it prints is the same as the @@ -9195,7 +9328,9 @@ the --enable-strict-posix-default to configure when bu (see Optional Features).


    -
    +
    +
    + @@ -9260,14 +9395,14 @@ For bash-4.3 and later versions, the BASH_COMPAT variable is prefer and it is required for bash-5.1 and later versions.

    -
    compat31
    +
    compat31
    • quoting the rhs of the [[ command’s regexp matching operator (=~) has no special effect
    -
    compat32
    +
    compat32
    • interrupting a command list such as "a ; b ; c" causes the execution of the next command in the list (in bash-4.0 and later versions, @@ -9277,7 +9412,7 @@ entire list)
    -
    compat40
    +
    compat40
    • the ‘<’ and ‘>’ operators to the [[ command do not consider the current locale when comparing strings; they use ASCII @@ -9288,7 +9423,7 @@ strcoll(3).
    -
    compat41
    +
    compat41
    • in posix mode, time may be followed by options and still be recognized as a reserved word (this is POSIX interpretation 267) @@ -9300,7 +9435,7 @@ the single quotes are considered quoted
    -
    compat42
    +
    compat42
    • the replacement string in double-quoted pattern substitution does not undergo quote removal, as it does in versions after bash-4.2 @@ -9313,7 +9448,7 @@ are not special within double-quoted word expansions
    -
    compat43
    +
    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 @@ -9330,7 +9465,7 @@ the loop state to prevent this
    -
    compat44
    +
    compat44
    • the shell sets up the values used by BASH_ARGV and BASH_ARGC so they can expand to the shell’s positional parameters even if extended @@ -9345,7 +9480,7 @@ mode
    -
    compat50 (set using BASH_COMPAT)
    +
    compat50 (set using BASH_COMPAT)
    • Bash-5.1 changed the way $RANDOM is generated to introduce slightly more randomness. If the shell compatibility level is set to 50 or @@ -9357,32 +9492,58 @@ printed an informational message to that effect, even when producing output that can be reused as input. Bash-5.1 suppresses that message when the -l option is supplied.
    + +
    +
    compat51 (set using BASH_COMPAT)
    +
      +
    • The unset builtin will unset the array a given an argument like +‘a[@]’. +Bash-5.2 will unset an element with key ‘@’ (associative arrays) +or remove all the elements without unsetting the array (indexed arrays) +
    • arithmetic commands ( ((...)) ) and the expressions in an arithmetic for +statement can be expanded more than once +
    • expressions used as arguments to arithmetic operators in the [[ +conditional command can be expanded more than once +
    • the expressions in substring parameter brace expansion can be +expanded more than once +
    • the expressions in the $(( ... )) word expansion can be expanded +more than once +
    • arithmetic expressions used as indexed array subscripts can be +expanded more than once +
    • test -v, when given an argument of ‘A[@]’, where A is +an existing associative array, will return true if the array has any set +elements. +Bash-5.2 will look for and report on a key named ‘@’ +
    • the ${parameter[:]=value} word expansion will return +value, before any variable-specific transformations have been +performed (e.g., converting to lowercase). +Bash-5.2 will return the final value assigned to the variable. +

    -
    +
    +
    +
    +

    7 Job Control

    This chapter discusses what job control is, how it works, and how Bash allows you to access its facilities.

    - - - - - +
    -
    +
    + @@ -9431,9 +9592,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 -suspend character (typically ‘^Z’, Control-Z) while a +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 +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 @@ -9444,7 +9605,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 ‘%’ 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 @@ -9496,16 +9657,17 @@ job changes state. The -f option causes wait to wait until the job or process terminates before returning.


    -
    +
    +
    +

    7.2 Job Control Builtins

    -
    bg
    -
    -
    +
    bg
    +
    bg [jobspec …]
     
    @@ -9518,9 +9680,8 @@ enabled, or, when run with job control enabled, any that was started without job control.

    -
    fg
    -
    -
    +
    fg
    +
    fg [jobspec]
     
    @@ -9532,9 +9693,8 @@ job control enabled, jobspec does not specify a valid job or jobspec specifies a job that was started without job control.

    -
    jobs
    -
    -
    +
    jobs
    +
    jobs [-lnprs] [jobspec]
     jobs -x command [arguments]
     
    @@ -9543,24 +9703,24 @@ jobs -x command [arguments] following meanings:

    -
    -l
    +
    -l

    List process IDs in addition to the normal information.

    -
    -n
    +
    -n

    Display information only about jobs that have changed status since the user was last notified of their status.

    -
    -p
    +
    -p

    List only the process ID of the job’s process group leader.

    -
    -r
    +
    -r

    Display only running jobs.

    -
    -s
    +
    -s

    Display only stopped jobs.

    @@ -9576,9 +9736,8 @@ corresponding process group ID, and executes command, passing it arguments, returning its exit status.

    -
    kill
    -
    -
    +
    kill
    +
    kill [-s sigspec] [-n signum] [-sigspec] jobspec or pid
     kill -l|-L [exit_status]
     
    @@ -9600,9 +9759,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.

    -
    wait
    -
    -
    +
    wait
    +
    wait [-fn] [-p varname] [jobspec or pid …]
     
    @@ -9616,7 +9774,7 @@ the last-executed process substitution, if its process id is the same as $!, and the return status is zero. If the -n option is supplied, wait waits for a single job -from the list of pids or jobspecs or, if no arguments are +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 @@ -9635,9 +9793,8 @@ If neither jobspec nor pid specifies an active child proce of the shell, the return status is 127.

    -
    disown
    -
    -
    +
    disown
    +
    disown [-ar] [-h] [jobspec … | pid … ]
     
    @@ -9653,9 +9810,8 @@ mark all jobs; the -r option without a jobspec argument restricts operation to running jobs.

    -
    suspend
    -
    -
    +
    suspend
    +
    suspend [-f]
     
    @@ -9671,16 +9827,16 @@ builtins do not accept jobspec arguments. They must be supplied process IDs.


    -
    +
    +
    +

    7.3 Job Control Variables

    -
    auto_resume - -
    +
    auto_resume

    This variable controls how the shell interacts with the user and job control. If this variable exists then single word simple commands without redirections are treated as candidates for resumption @@ -9707,9 +9863,12 @@ analogous to the ‘%’ job ID.


    -
    +
    +
    +
    +

    8 Command Line Editing

    @@ -9720,7 +9879,7 @@ used by several different programs, including Bash. Command line editing is enabled by default when using an interactive shell, unless the --noediting option is supplied at shell invocation. Line editing is also used when using the -e option to the -read builtin command (see Bash Builtins). +read builtin command (see Bash Builtin Commands). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the -o emacs or @@ -9728,32 +9887,20 @@ Line editing can be enabled at any time using the -o emacs or (see The Set Builtin), or disabled using the +o emacs or +o vi options to set.

    - - - - - - - - - - +
    -
    +
    + @@ -9795,9 +9942,11 @@ The RET key may be labeled Return or < some keyboards.


    -
    +
    +
    +

    8.2 Readline Interaction

    @@ -9813,21 +9962,17 @@ the line, you simply press RET. You do not have to be at t end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    - - - - - - - +
    -
    +
    + @@ -9855,22 +10000,22 @@ blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    -
    C-b
    +
    C-b

    Move back one character.

    -
    C-f
    +
    C-f

    Move forward one character.

    -
    DEL or Backspace
    +
    DEL or Backspace

    Delete the character to the left of the cursor.

    -
    C-d
    +
    C-d

    Delete the character underneath the cursor.

    -
    Printing characters
    +
    Printing characters

    Insert the character into the line at the cursor.

    -
    C-_ or C-x C-u
    +
    C-_ or C-x C-u

    Undo the last editing command. You can undo all the way back to an empty line.

    @@ -9882,7 +10027,9 @@ to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    -
    +
    +
    + @@ -9896,19 +10043,19 @@ other commands have been added in addition to C-b, C-f, about the line.

    -
    C-a
    +
    C-a

    Move to the start of the line.

    -
    C-e
    +
    C-e

    Move to the end of the line.

    -
    M-f
    +
    M-f

    Move forward a word, where a word is composed of letters and digits.

    -
    M-b
    +
    M-b

    Move backward a word.

    -
    C-l
    +
    C-l

    Clear the screen, reprinting the current line at the top.

    @@ -9918,7 +10065,9 @@ forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    -
    +
    +
    + @@ -9947,23 +10096,23 @@ another line.

    Here is the list of commands for killing text.

    -
    C-k
    +
    C-k

    Kill the text from the current cursor position to the end of the line.

    -
    M-d
    +
    M-d

    Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by M-f.

    -
    M-DEL
    +
    M-DEL

    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    -
    C-w
    +
    C-w

    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    @@ -9974,20 +10123,22 @@ Word boundaries are the same as those used by M-b. means to copy the most-recently-killed text from the kill buffer.

    -
    C-y
    +
    C-y

    Yank the most recently killed text back into the buffer at the cursor.

    -
    M-y
    +
    M-y

    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    -
    +
    +
    +

    8.2.4 Readline Arguments

    @@ -10007,7 +10158,9 @@ the C-d command an argument of 10, you could type ‘M-1 0 which will delete the next ten characters on the input line.


    -
    +
    +
    + @@ -10054,7 +10207,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.


    -
    +
    +
    +
    + @@ -10065,7 +10221,8 @@ Next: Bash Builtins. +See Bash Builtin Commands.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. @@ -10081,21 +10238,15 @@ init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    - - - - - +
    -
    +
    + @@ -10109,7 +10260,7 @@ constructs (see Conditional Init Construc denote variable settings and key bindings.

    -
    Variable Settings
    +
    Variable Settings

    You can modify the run-time behavior of Readline by altering the values of variables in Readline using the set command within the init file. @@ -10135,64 +10286,60 @@ the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    The bind -V command lists the current Readline variable names -and values. See Bash Builtins. +and values. See Bash Builtin Commands.

    A great deal of run-time behavior is changeable with the following variables.

    -
    bell-style
    -
    -

    Controls what happens when Readline wants to ring the terminal bell. +

    bell-style
    +

    Controls what happens when Readline wants to ring the terminal bell. If set to ‘none’, Readline never rings the bell. If set to ‘visible’, Readline uses a visible bell if one is available. If set to ‘audible’ (the default), Readline attempts to ring the terminal’s bell.

    -
    bind-tty-special-chars
    -
    -

    If set to ‘on’ (the default), Readline attempts to bind the control +

    bind-tty-special-chars
    +

    If set to ‘on’ (the default), Readline attempts to bind the control characters treated specially by the kernel’s terminal driver to their Readline equivalents.

    -
    blink-matching-paren
    -
    -

    If set to ‘on’, Readline attempts to briefly move the cursor to an +

    +

    If set to ‘on’, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is ‘off’.

    -
    colored-completion-prefix
    -
    -

    If set to ‘on’, when listing completions, Readline displays the +

    colored-completion-prefix
    +

    If set to ‘on’, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. +If there is a color definition in LS_COLORS for the custom suffix +‘readline-colored-completion-prefix’, Readline uses this color for +the common prefix instead of its default. The default is ‘off’.

    -
    colored-stats
    -
    -

    If set to ‘on’, Readline displays possible completions using different +

    colored-stats
    +

    If set to ‘on’, Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is ‘off’.

    -
    comment-begin
    -
    -

    The string to insert at the beginning of the line when the +

    comment-begin
    +

    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    -
    completion-display-width
    -
    -

    The number of screen columns used to display possible matches +

    completion-display-width
    +

    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. @@ -10200,44 +10347,40 @@ A value of 0 will cause matches to be displayed one per line. The default value is -1.

    -
    completion-ignore-case
    -
    -

    If set to ‘on’, Readline performs filename matching and completion +

    completion-ignore-case
    +

    If set to ‘on’, Readline performs filename matching and completion in a case-insensitive fashion. The default value is ‘off’.

    -
    completion-map-case
    -
    -

    If set to ‘on’, and completion-ignore-case is enabled, Readline +

    completion-map-case
    +

    If set to ‘on’, and completion-ignore-case is enabled, Readline treats hyphens (‘-’) and underscores (‘_’) as equivalent when performing case-insensitive filename matching and completion. The default value is ‘off’.

    -
    completion-prefix-display-length
    -
    -

    The length in characters of the common prefix of a list of possible +

    completion-prefix-display-length
    +

    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    -
    completion-query-items
    -
    -

    The number of possible completions that determines when the user is +

    completion-query-items
    +

    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than or equal to this value, Readline will ask whether or not the user wishes to view them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 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 100.

    -
    convert-meta
    -
    -

    If set to ‘on’, Readline will convert characters with the +

    convert-meta
    +

    If set to ‘on’, Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an ESC character, converting them to a meta-prefixed key sequence. The default value is ‘on’, but @@ -10245,31 +10388,27 @@ will be set to ‘off’ if the locale is one that contains eight-bit characters.

    -
    disable-completion
    -
    -

    If set to ‘On’, Readline will inhibit word completion. +

    disable-completion
    +

    If set to ‘On’, Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to self-insert. The default is ‘off’.

    -
    echo-control-characters
    -
    -

    When set to ‘on’, on operating systems that indicate they support it, +

    echo-control-characters
    +

    When set to ‘on’, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is ‘on’.

    -
    editing-mode
    -
    -

    The editing-mode variable controls which default set of +

    editing-mode
    +

    The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either ‘emacs’ or ‘vi’.

    -
    emacs-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    emacs-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and @@ -10280,46 +10419,54 @@ sequence into the mode string. The default is ‘@’.

    -
    enable-bracketed-paste
    -
    -

    When set to ‘On’, Readline will configure the terminal in a way +

    enable-active-region
    +

    The point is the current cursor position, and mark refers +to a saved cursor position (see 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 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’.

    -
    enable-keypad
    -
    -

    When set to ‘on’, Readline will try to enable the application +

    enable-keypad
    +

    When set to ‘on’, Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is ‘off’.

    -
    enable-meta-key
    +
    enable-meta-key

    When set to ‘on’, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is ‘on’.

    -
    expand-tilde
    -
    -

    If set to ‘on’, tilde expansion is performed when Readline +

    expand-tilde
    +

    If set to ‘on’, tilde expansion is performed when Readline attempts word completion. The default is ‘off’.

    -
    history-preserve-point
    -
    -

    If set to ‘on’, the history code attempts to place the point (the +

    history-preserve-point
    +

    If set to ‘on’, the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is ‘off’.

    -
    history-size
    -
    -

    Set the maximum number of history entries saved in the history list. +

    history-size
    +

    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not @@ -10329,9 +10476,8 @@ If an attempt is made to set history-size to a non-numeric value, the maximum number of history entries will be set to 500.

    -
    horizontal-scroll-mode
    -
    -

    This variable can be set to either ‘on’ or ‘off’. Setting it +

    horizontal-scroll-mode
    +

    This variable can be set to either ‘on’ or ‘off’. Setting it to ‘on’ means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. @@ -10339,9 +10485,8 @@ This variable is automatically set to ‘on’ for terminal By default, this variable is set to ‘off’.

    -
    input-meta
    -
    - +
    input-meta
    +

    If set to ‘on’, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The @@ -10350,17 +10495,15 @@ locale contains eight-bit characters. The name meta-flag is a synonym for this variable.

    -
    isearch-terminators
    -
    -

    The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see Searching). +

    isearch-terminators
    +

    The string of characters that should terminate an incremental search without +subsequently executing the character as a command (see Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    -
    keymap
    -
    -

    Sets Readline’s idea of the current keymap for key binding commands. +

    keymap
    +

    Sets Readline’s idea of the current keymap for key binding commands. Built-in keymap names are emacs, emacs-standard, @@ -10378,7 +10521,7 @@ The value of the editing-mode variable also affects the default keymap.

    -
    keyseq-timeout
    +
    keyseq-timeout

    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer @@ -10395,29 +10538,26 @@ decide which key sequence to complete. The default value is 500.

    -
    mark-directories
    +
    mark-directories

    If set to ‘on’, completed directory names have a slash appended. The default is ‘on’.

    -
    mark-modified-lines
    -
    -

    This variable, when set to ‘on’, causes Readline to display an +

    mark-modified-lines
    +

    This variable, when set to ‘on’, causes Readline to display an asterisk (‘*’) at the start of history lines which have been modified. This variable is ‘off’ by default.

    -
    mark-symlinked-directories
    -
    -

    If set to ‘on’, completed names which are symbolic links +

    mark-symlinked-directories
    +

    If set to ‘on’, completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is ‘off’.

    -
    match-hidden-files
    -
    -

    This variable, when set to ‘on’, causes Readline to match files whose +

    match-hidden-files
    +

    This variable, when set to ‘on’, causes Readline to match files whose names begin with a ‘.’ (hidden files) when performing filename completion. If set to ‘off’, the leading ‘.’ must be @@ -10425,55 +10565,49 @@ supplied by the user in the filename to be completed. This variable is ‘on’ by default.

    -
    menu-complete-display-prefix
    -
    -

    If set to ‘on’, menu completion displays the common prefix of the +

    menu-complete-display-prefix
    +

    If set to ‘on’, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is ‘off’.

    -
    output-meta
    -
    -

    If set to ‘on’, Readline will display characters with the +

    output-meta
    +

    If set to ‘on’, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is ‘off’, but Readline will set it to ‘on’ if the locale contains eight-bit characters.

    -
    page-completions
    -
    -

    If set to ‘on’, Readline uses an internal more-like pager +

    page-completions
    +

    If set to ‘on’, Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is ‘on’ by default.

    -
    print-completions-horizontally
    +
    print-completions-horizontally

    If set to ‘on’, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is ‘off’.

    -
    revert-all-at-newline
    -
    -

    If set to ‘on’, Readline will undo all changes to history lines +

    revert-all-at-newline
    +

    If set to ‘on’, Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. The default is ‘off’.

    -
    show-all-if-ambiguous
    -
    -

    This alters the default behavior of the completion functions. If +

    show-all-if-ambiguous
    +

    This alters the default behavior of the completion functions. If set to ‘on’, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is ‘off’.

    -
    show-all-if-unmodified
    -
    -

    This alters the default behavior of the completion functions in +

    show-all-if-unmodified
    +

    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to ‘on’, words which have more than one possible completion without any @@ -10483,17 +10617,15 @@ of ringing the bell. The default value is ‘off’.

    -
    show-mode-in-prompt
    -
    -

    If set to ‘on’, add a string to the beginning of the prompt +

    show-mode-in-prompt
    +

    If set to ‘on’, add a string to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., emacs-mode-string). The default value is ‘off’.

    -
    skip-completed-text
    -
    -

    If set to ‘on’, this alters the default completion behavior when +

    skip-completed-text
    +

    If set to ‘on’, this alters the default completion behavior when inserting a single match into the line. It’s only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters @@ -10506,9 +10638,8 @@ completion. The default value is ‘off’.

    -
    vi-cmd-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    vi-cmd-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a @@ -10520,9 +10651,8 @@ sequence into the mode string. The default is ‘(cmd)’.

    -
    vi-ins-mode-string
    -
    -

    If the show-mode-in-prompt variable is enabled, +

    vi-ins-mode-string
    +

    If the show-mode-in-prompt variable is enabled, this string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a @@ -10534,9 +10664,8 @@ sequence into the mode string. The default is ‘(ins)’.

    -
    visible-stats
    -
    -

    If set to ‘on’, a character denoting a file’s type +

    visible-stats
    +

    If set to ‘on’, a character denoting a file’s type is appended to the filename when listing possible completions. The default is ‘off’.

    @@ -10544,7 +10673,7 @@ completions. The default is ‘off’.
    -
    Key Bindings
    +
    Key Bindings

    The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command @@ -10565,10 +10694,10 @@ 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. -See Bash Builtins. +See Bash Builtin Commands.

    -
    keynamefunction-name or macro
    +
    keynamefunction-name or macro

    keyname is the name of a key spelled out in English. For example:

    Control-u: universal-argument
    @@ -10599,7 +10728,7 @@ and
     TAB.
     

    -
    "keyseq": function-name or macro
    +
    "keyseq": function-name or macro

    keyseq differs from keyname above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key @@ -10625,22 +10754,22 @@ the text ‘Function Key 1’. specifying key sequences:

    -
    \C-
    +
    \C-

    control prefix

    -
    \M-
    +
    \M-

    meta prefix

    -
    \e
    +
    \e

    an escape character

    -
    \\
    +
    \\

    backslash

    -
    \"
    +
    \"

    ", a double quotation mark

    -
    \'
    +
    \'

    ', a single quote or apostrophe

    @@ -10649,35 +10778,35 @@ specifying key sequences: set of backslash escapes is available:

    -
    \a
    +
    \a

    alert (bell)

    -
    \b
    +
    \b

    backspace

    -
    \d
    +
    \d

    delete

    -
    \f
    +
    \f

    form feed

    -
    \n
    +
    \n

    newline

    -
    \r
    +
    \r

    carriage return

    -
    \t
    +
    \t

    horizontal tab

    -
    \v
    +
    \v

    vertical tab

    -
    \nnn
    +
    \nnn

    the eight-bit character whose value is the octal value nnn (one to three digits)

    -
    \xHH
    +
    \xHH

    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    @@ -10699,7 +10828,9 @@ insert a single ‘\’ into the line:

    -
    +
    +
    + @@ -10711,7 +10842,7 @@ bindings and variable settings to be performed as the result of tests. There are four parser directives used.

    -
    $if
    +
    $if

    The $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test, after any comparison operator, @@ -10719,7 +10850,7 @@ extends to the end of the line; unless otherwise noted, no characters are required to isolate it.

    -
    mode
    +
    mode

    The mode= form of the $if directive is used to test whether Readline is in emacs or vi mode. This may be used in conjunction @@ -10728,7 +10859,7 @@ the emacs-standard and emacs-ctlx keymaps only if Readline is starting out in emacs mode.

    -
    term
    +
    term

    The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal’s function keys. The word on the right side of the @@ -10738,7 +10869,7 @@ allows sun to match both sun and sun-cmd, for instance.

    -
    version
    +
    version

    The version test may be used to perform comparisons against specific Readline versions. The version expands to the current Readline version. @@ -10760,7 +10891,7 @@ $endif

    -
    application
    +
    application

    The application construct is used to include application-specific settings. Each program using the Readline library sets the application name, and you can test for @@ -10776,7 +10907,7 @@ $endif

    -
    variable
    +
    variable

    The variable construct provides simple equality tests for Readline variables and values. The permitted comparison operators are ‘=’, ‘==’, and ‘!=’. @@ -10796,17 +10927,17 @@ $endif

    -
    $endif
    +
    $endif

    This command, as seen in the previous example, terminates an $if command.

    -
    $else
    +
    $else

    Commands in this branch of the $if directive are executed if the test fails.

    -
    $include
    +
    $include

    This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from /etc/inputrc: @@ -10817,7 +10948,9 @@ For example, the following directive reads from /etc/inputrc:


    -
    +
    +
    + @@ -10929,36 +11062,21 @@ $endif

    -
    +
    +
    +
    +

    8.4 Bindable Readline Commands

    - - - - - - - - - -

    This section describes Readline commands that may be bound to key sequences. You can list your key bindings by executing bind -P or, for a more terse format, suitable for an -inputrc file, bind -p. (See Bash Builtins.) +inputrc file, bind -p. (See Bash Builtin Commands.) Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor @@ -10966,77 +11084,68 @@ position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.

    +
    -
    +
    +

    8.4.1 Commands For Moving

    -
    beginning-of-line (C-a) - -
    +
    beginning-of-line (C-a)

    Move to the start of the current line.

    -
    end-of-line (C-e) - -
    +
    end-of-line (C-e)

    Move to the end of the line.

    -
    forward-char (C-f) - -
    +
    forward-char (C-f)

    Move forward a character.

    -
    backward-char (C-b) - -
    +
    backward-char (C-b)

    Move back a character.

    -
    forward-word (M-f) - -
    +
    forward-word (M-f)

    Move forward to the end of the next word. Words are composed of letters and digits.

    -
    backward-word (M-b) - -
    +
    backward-word (M-b)

    Move back to the start of the current or previous word. Words are composed of letters and digits.

    -
    shell-forward-word (M-C-f) - -
    +
    shell-forward-word (M-C-f)

    Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters.

    -
    shell-backward-word (M-C-b) - -
    +
    shell-backward-word (M-C-b)

    Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters.

    -
    previous-screen-line () - -
    +
    previous-screen-line ()

    Attempt to move point to the same physical screen column on the previous physical screen line. This will not have the desired effect if the current Readline line does not take up more than one physical line or if point is not greater than the length of the prompt plus the screen width.

    -
    next-screen-line () - -
    +
    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 @@ -11044,41 +11153,35 @@ of the current Readline line is not greater than the length of the prompt plus the screen width.

    -
    clear-display (M-C-l) - -
    +
    clear-display (M-C-l)

    Clear the screen and, if possible, the terminal’s scrollback buffer, then redraw the current line, leaving the current line at the top of the screen.

    -
    clear-screen (C-l) - -
    +
    clear-screen (C-l)

    Clear the screen, then redraw the current line, leaving the current line at the top of the screen.

    -
    redraw-current-line () - -
    +
    redraw-current-line ()

    Refresh the current line. By default, this is unbound.


    -
    +
    +
    +

    8.4.2 Commands For Manipulating The History

    -
    accept-line (Newline or Return) - -
    +
    accept-line (Newline or Return)

    Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of @@ -11087,68 +11190,50 @@ If this line is a modified history line, then restore the history line to its original state.

    -
    previous-history (C-p) - -
    +
    previous-history (C-p)

    Move ‘back’ through the history list, fetching the previous command.

    -
    next-history (C-n) - -
    +
    next-history (C-n)

    Move ‘forward’ through the history list, fetching the next command.

    -
    beginning-of-history (M-<) - -
    +
    beginning-of-history (M-<)

    Move to the first line in the history.

    -
    end-of-history (M->) - -
    +
    end-of-history (M->)

    Move to the end of the input history, i.e., the line currently being entered.

    -
    reverse-search-history (C-r) - -
    +
    reverse-search-history (C-r)

    Search backward starting at the current line and moving ‘up’ through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark.

    -
    forward-search-history (C-s) - -
    +
    forward-search-history (C-s)

    Search forward starting at the current line and moving ‘down’ through the history as necessary. This is an incremental search. This command sets the region to the matched text and activates the mark.

    -
    non-incremental-reverse-search-history (M-p) - -
    +
    non-incremental-reverse-search-history (M-p)

    Search backward starting at the current line and moving ‘up’ through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    -
    non-incremental-forward-search-history (M-n) - -
    +
    non-incremental-forward-search-history (M-n)

    Search forward starting at the current line and moving ‘down’ through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    -
    history-search-forward () - -
    +
    history-search-forward ()

    Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11156,9 +11241,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-search-backward () - -
    +
    history-search-backward ()

    Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. @@ -11166,9 +11249,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-substring-search-forward () - -
    +
    history-substring-search-forward ()

    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11176,9 +11257,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    history-substring-search-backward () - -
    +
    history-substring-search-backward ()

    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. @@ -11186,9 +11265,7 @@ This is a non-incremental search. By default, this command is unbound.

    -
    yank-nth-arg (M-C-y) - -
    +
    yank-nth-arg (M-C-y)

    Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, @@ -11199,9 +11276,7 @@ Once the argument n is computed, the argument is extracted as if the ‘!n’ history expansion had been specified.

    -
    yank-last-arg (M-. or M-_) - -
    +
    yank-last-arg (M-. or M-_)

    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. @@ -11215,9 +11290,7 @@ The history expansion facilities are used to extract the last argument, as if the ‘!$’ history expansion had been specified.

    -
    operate-and-get-next (C-o) - -
    +
    operate-and-get-next (C-o)

    Accept the current line for return to the calling application as if a newline had been entered, and fetch the next line relative to the current line from the history @@ -11226,65 +11299,59 @@ A numeric argument, if supplied, specifies the history entry to use instead of the current line.

    +
    fetch-history ()
    +

    With a numeric argument, fetch that entry from the history list +and make it the current line. +Without an argument, move back to the first entry in the history list. +

    +

    -
    +
    +
    +

    8.4.3 Commands For Changing Text

    -
    end-of-file (usually C-d) - -
    +
    end-of-file (usually C-d)

    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    -
    delete-char (C-d) - -
    +
    delete-char (C-d)

    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    -
    backward-delete-char (Rubout) - -
    +
    backward-delete-char (Rubout)

    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    -
    forward-backward-delete-char () - -
    +
    forward-backward-delete-char ()

    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    -
    quoted-insert (C-q or C-v) - -
    +
    quoted-insert (C-q or C-v)

    Add the next character typed to the line verbatim. This is how to insert key sequences like C-q, for example.

    -
    self-insert (a, b, A, 1, !, …) - -
    +
    self-insert (a, b, A, 1, !, …)

    Insert yourself.

    -
    bracketed-paste-begin () - -
    +
    bracketed-paste-begin ()

    This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating @@ -11298,9 +11365,7 @@ mark is active, Readline redisplay uses the terminal’s standout mode to denote the region.

    -
    transpose-chars (C-t) - -
    +
    transpose-chars (C-t)

    Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point @@ -11309,39 +11374,29 @@ transposes the last two characters of the line. Negative arguments have no effect.

    -
    transpose-words (M-t) - -
    +
    transpose-words (M-t)

    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    -
    upcase-word (M-u) - -
    +
    upcase-word (M-u)

    Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor.

    -
    downcase-word (M-l) - -
    +
    downcase-word (M-l)

    Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor.

    -
    capitalize-word (M-c) - -
    +
    capitalize-word (M-c)

    Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor.

    -
    overwrite-mode () - -
    +
    overwrite-mode ()

    Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only @@ -11359,75 +11414,59 @@ before point with a space.


    -
    +
    +
    +

    8.4.4 Killing And Yanking

    -
    kill-line (C-k) - -
    +
    kill-line (C-k)

    Kill the text from point to the end of the line. With a negative numeric argument, kill backward from the cursor to the beginning of the current line.

    -
    backward-kill-line (C-x Rubout) - -
    +
    backward-kill-line (C-x Rubout)

    Kill backward from the cursor to the beginning of the current line. With a negative numeric argument, kill forward from the cursor to the end of the current line.

    -
    unix-line-discard (C-u) - -
    +
    unix-line-discard (C-u)

    Kill backward from the cursor to the beginning of the current line.

    -
    kill-whole-line () - -
    +
    kill-whole-line ()

    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    -
    kill-word (M-d) - -
    +
    kill-word (M-d)

    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as forward-word.

    -
    backward-kill-word (M-DEL) - -
    +
    backward-kill-word (M-DEL)

    Kill the word behind point. Word boundaries are the same as backward-word.

    -
    shell-kill-word (M-C-d) - -
    +
    shell-kill-word (M-C-d)

    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as shell-forward-word.

    -
    shell-backward-kill-word () - -
    +
    shell-backward-kill-word ()

    Kill the word behind point. Word boundaries are the same as shell-backward-word.

    -
    shell-transpose-words (M-C-t) - -
    +
    shell-transpose-words (M-C-t)

    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes @@ -11436,88 +11475,68 @@ Word boundaries are the same as shell-forward-word and shell-backward-word.

    -
    unix-word-rubout (C-w) - -
    +
    unix-word-rubout (C-w)

    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.

    -
    unix-filename-rubout () - -
    +
    unix-filename-rubout ()

    Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring.

    -
    delete-horizontal-space () - -
    +
    delete-horizontal-space ()

    Delete all spaces and tabs around point. By default, this is unbound.

    -
    kill-region () - -
    +
    kill-region ()

    Kill the text in the current region. By default, this command is unbound.

    -
    copy-region-as-kill () - -
    +
    copy-region-as-kill ()

    Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound.

    -
    copy-backward-word () - -
    +
    copy-backward-word ()

    Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. By default, this command is unbound.

    -
    copy-forward-word () - -
    +
    copy-forward-word ()

    Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. By default, this command is unbound.

    -
    yank (C-y) - -
    +
    yank (C-y)

    Yank the top of the kill ring into the buffer at point.

    -
    yank-pop (M-y) - -
    +
    yank-pop (M-y)

    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is yank or yank-pop.


    -
    +
    +
    +

    8.4.5 Specifying Numeric Arguments

    -
    digit-argument (M-0, M-1, … M--) - -
    +
    digit-argument (M-0, M-1, … M--)

    Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument.

    -
    universal-argument () - -
    +
    universal-argument ()

    This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. @@ -11534,16 +11553,16 @@ By default, this is not bound to a key.


    -
    +
    +
    +

    8.4.6 Letting Readline Type For You

    -
    complete (TAB) - -
    +
    complete (TAB)

    Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash attempts completion treating the text as a variable (if the @@ -11553,25 +11572,19 @@ command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted.

    -
    possible-completions (M-?) - -
    +
    possible-completions (M-?)

    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    -
    insert-completions (M-*) - -
    +
    insert-completions (M-*)

    Insert all completions of the text before point that would have been generated by possible-completions.

    -
    menu-complete () - -
    +
    menu-complete ()

    Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list @@ -11586,17 +11599,13 @@ This command is intended to be bound to TAB, but is unbound by default.

    -
    menu-complete-backward () - -
    +
    menu-complete-backward ()

    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    -
    delete-char-or-list () - -
    +
    delete-char-or-list ()

    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to @@ -11604,64 +11613,46 @@ If at the end of the line, behaves identically to This command is unbound by default.

    -
    complete-filename (M-/) - -
    +
    complete-filename (M-/)

    Attempt filename completion on the text before point.

    -
    possible-filename-completions (C-x /) - -
    +
    possible-filename-completions (C-x /)

    List the possible completions of the text before point, treating it as a filename.

    -
    complete-username (M-~) - -
    +
    complete-username (M-~)

    Attempt completion on the text before point, treating it as a username.

    -
    possible-username-completions (C-x ~) - -
    +
    possible-username-completions (C-x ~)

    List the possible completions of the text before point, treating it as a username.

    -
    complete-variable (M-$) - -
    +
    complete-variable (M-$)

    Attempt completion on the text before point, treating it as a shell variable.

    -
    possible-variable-completions (C-x $) - -
    +
    possible-variable-completions (C-x $)

    List the possible completions of the text before point, treating it as a shell variable.

    -
    complete-hostname (M-@) - -
    +
    complete-hostname (M-@)

    Attempt completion on the text before point, treating it as a hostname.

    -
    possible-hostname-completions (C-x @) - -
    +
    possible-hostname-completions (C-x @)

    List the possible completions of the text before point, treating it as a hostname.

    -
    complete-command (M-!) - -
    +
    complete-command (M-!)

    Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell @@ -11669,32 +11660,24 @@ functions, shell builtins, and finally executable filenames, in that order.

    -
    possible-command-completions (C-x !) - -
    +
    possible-command-completions (C-x !)

    List the possible completions of the text before point, treating it as a command name.

    -
    dynamic-complete-history (M-TAB) - -
    +
    dynamic-complete-history (M-TAB)

    Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches.

    -
    dabbrev-expand () - -
    +
    dabbrev-expand ()

    Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches.

    -
    complete-into-braces (M-{) - -
    +
    complete-into-braces (M-{)

    Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (see Brace Expansion). @@ -11703,35 +11686,29 @@ enclosed within braces so the list is available to the shell


    -
    +
    +
    +

    8.4.7 Keyboard Macros

    -
    start-kbd-macro (C-x () - -
    +
    start-kbd-macro (C-x ()

    Begin saving the characters typed into the current keyboard macro.

    -
    end-kbd-macro (C-x )) - -
    +
    end-kbd-macro (C-x ))

    Stop saving the characters typed into the current keyboard macro and save the definition.

    -
    call-last-kbd-macro (C-x e) - -
    +
    call-last-kbd-macro (C-x e)

    Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard.

    -
    print-last-kbd-macro () - -
    +
    print-last-kbd-macro ()

    Print the last keboard macro defined in a format suitable for the inputrc file.

    @@ -11739,94 +11716,72 @@ in the macro appear as if typed at the keyboard.

    -
    +
    +
    +

    8.4.8 Some Miscellaneous Commands

    -
    re-read-init-file (C-x C-r) - -
    +
    re-read-init-file (C-x C-r)

    Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.

    -
    abort (C-g) - -
    +
    abort (C-g)

    Abort the current editing command and ring the terminal’s bell (subject to the setting of bell-style).

    -
    do-lowercase-version (M-A, M-B, M-x, …) - -
    +
    do-lowercase-version (M-A, M-B, M-x, …)

    If the metafied character x is upper case, run the command that is bound to the corresponding metafied lower case character. The behavior is undefined if x is already lower case.

    -
    prefix-meta (ESC) - -
    +
    prefix-meta (ESC)

    Metafy the next character typed. This is for keyboards without a meta key. Typing ‘ESC f’ is equivalent to typing M-f.

    -
    undo (C-_ or C-x C-u) - -
    +
    undo (C-_ or C-x C-u)

    Incremental undo, separately remembered for each line.

    -
    revert-line (M-r) - -
    +
    revert-line (M-r)

    Undo all changes made to this line. This is like executing the undo command enough times to get back to the beginning.

    -
    tilde-expand (M-&) - -
    +
    tilde-expand (M-&)

    Perform tilde expansion on the current word.

    -
    set-mark (C-@) - -
    +
    set-mark (C-@)

    Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.

    -
    exchange-point-and-mark (C-x C-x) - -
    +
    exchange-point-and-mark (C-x C-x)

    Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.

    -
    character-search (C-]) - -
    +
    character-search (C-])

    A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences.

    -
    character-search-backward (M-C-]) - -
    +
    character-search-backward (M-C-])

    A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences.

    -
    skip-csi-sequence () - -
    +
    skip-csi-sequence ()

    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is @@ -11836,9 +11791,7 @@ stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    -
    insert-comment (M-#) - -
    +
    insert-comment (M-#)

    Without a numeric argument, the value of the comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if @@ -11853,107 +11806,85 @@ If a numeric argument causes the comment character to be removed, the line will be executed by the shell.

    -
    dump-functions () - -
    +
    dump-functions ()

    Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    -
    dump-variables () - -
    +
    dump-variables ()

    Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    -
    dump-macros () - -
    +
    dump-macros ()

    Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    -
    glob-complete-word (M-g) - -
    +
    spell-correct-word (C-x s)
    +

    Perform spelling correction on the current word, treating it as a directory +or filename, in the same way as the cdspell shell option. +Word boundaries are the same as those used by shell-forward-word. +

    +
    +
    glob-complete-word (M-g)

    The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions.

    -
    glob-expand-word (C-x *) - -
    +
    glob-expand-word (C-x *)

    The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion.

    -
    glob-list-expansions (C-x g) - -
    +
    glob-list-expansions (C-x g)

    The list of expansions that would have been generated by glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, a ‘*’ is appended before pathname expansion.

    -
    display-shell-version (C-x C-v) - -
    +
    display-shell-version (C-x C-v)

    Display version information about the current instance of Bash.

    -
    shell-expand-line (M-C-e) - -
    +
    shell-expand-line (M-C-e)

    Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions (see Shell Expansions).

    -
    history-expand-line (M-^) - -
    +
    history-expand-line (M-^)

    Perform history expansion on the current line.

    -
    magic-space () - -
    +
    magic-space ()

    Perform history expansion on the current line and insert a space -(see History Interaction). +(see History Expansion).

    -
    alias-expand-line () - -
    +
    alias-expand-line ()

    Perform alias expansion on the current line (see Aliases).

    -
    history-and-alias-expand-line () - -
    +
    history-and-alias-expand-line ()

    Perform history and alias expansion on the current line.

    -
    insert-last-argument (M-. or M-_) - -
    +
    insert-last-argument (M-. or M-_)

    A synonym for yank-last-arg.

    -
    edit-and-execute-command (C-x C-e) - -
    +
    edit-and-execute-command (C-x C-e)

    Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke @@ -11966,7 +11897,10 @@ as the editor, in that order.


    -
    +
    +
    +
    + @@ -11990,7 +11924,9 @@ history lines with ‘k’ and subsequent lines with &lsquo so forth.


    -
    +
    +
    + @@ -12021,7 +11957,7 @@ for the command word from any successful expansion

    Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default Bash completion -described above (see Commands For Completion) is performed. +described above (see Letting Readline Type For You) is performed.

    First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are @@ -12152,7 +12088,9 @@ complete -D -F _completion_loader -o bashdefault -o default


    -
    +
    +
    + @@ -12164,9 +12102,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.

    -
    compgen
    -
    -
    +
    compgen
    +
    compgen [option] [word]
     
    @@ -12189,9 +12126,8 @@ will be displayed. matches were generated.

    -
    complete
    -
    -
    +
    complete
    +
    complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat]
     [-W wordlist] [-F function] [-C command] [-X filterpat]
     [-P prefix] [-S suffix] name [name …]
    @@ -12232,27 +12168,27 @@ should be quoted to protect them from expansion before the
     

    -
    -o comp-option
    +
    -o comp-option

    The comp-option controls several aspects of the compspec’s behavior beyond the simple generation of completions. comp-option may be one of:

    -
    bashdefault
    +
    bashdefault

    Perform the rest of the default Bash completions if the compspec generates no matches.

    -
    default
    +
    default

    Use Readline’s default filename completion if the compspec generates no matches.

    -
    dirnames
    +
    dirnames

    Perform directory name completion if the compspec generates no matches.

    -
    filenames
    +
    filenames

    Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names, quoting special characters, or suppressing trailing spaces). @@ -12260,21 +12196,21 @@ This option is intended to be used with shell functions specified with -F.

    -
    noquote
    +
    noquote

    Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default).

    -
    nosort
    +
    nosort

    Tell Readline not to sort the list of possible completions alphabetically.

    -
    nospace
    +
    nospace

    Tell Readline not to append a space (the default) to words completed at the end of the line.

    -
    plusdirs
    +
    plusdirs

    After any matches defined by the compspec are generated, directory name completion is attempted and any matches are added to the results of the other actions. @@ -12283,118 +12219,118 @@ matches are added to the results of the other actions.

    -
    -A action
    +
    -A action

    The action may be one of the following to generate a list of possible completions:

    -
    alias
    +
    alias

    Alias names. May also be specified as -a.

    -
    arrayvar
    +
    arrayvar

    Array variable names.

    -
    binding
    +
    binding

    Readline key binding names (see Bindable Readline Commands).

    -
    builtin
    +
    builtin

    Names of shell builtin commands. May also be specified as -b.

    -
    command
    +
    command

    Command names. May also be specified as -c.

    -
    directory
    +
    directory

    Directory names. May also be specified as -d.

    -
    disabled
    +
    disabled

    Names of disabled shell builtins.

    -
    enabled
    +
    enabled

    Names of enabled shell builtins.

    -
    export
    +
    export

    Names of exported shell variables. May also be specified as -e.

    -
    file
    +
    file

    File names. May also be specified as -f.

    -
    function
    +
    function

    Names of shell functions.

    -
    group
    +
    group

    Group names. May also be specified as -g.

    -
    helptopic
    -

    Help topics as accepted by the help builtin (see Bash Builtins). +

    helptopic
    +

    Help topics as accepted by the help builtin (see Bash Builtin Commands).

    -
    hostname
    +
    hostname

    Hostnames, as taken from the file specified by the HOSTFILE shell variable (see Bash Variables).

    -
    job
    +
    job

    Job names, if job control is active. May also be specified as -j.

    -
    keyword
    +
    keyword

    Shell reserved words. May also be specified as -k.

    -
    running
    +
    running

    Names of running jobs, if job control is active.

    -
    service
    +
    service

    Service names. May also be specified as -s.

    -
    setopt
    +
    setopt

    Valid arguments for the -o option to the set builtin (see The Set Builtin).

    -
    shopt
    +
    shopt

    Shell option names as accepted by the shopt builtin -(see Bash Builtins). +(see Bash Builtin Commands).

    -
    signal
    +
    signal

    Signal names.

    -
    stopped
    +
    stopped

    Names of stopped jobs, if job control is active.

    -
    user
    +
    user

    User names. May also be specified as -u.

    -
    variable
    +
    variable

    Names of all shell variables. May also be specified as -v.

    -
    -C command
    +
    -C command

    command is executed in a subshell environment, and its output is used as the possible completions.

    -
    -F function
    +
    -F function

    The shell function function is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are @@ -12405,22 +12341,22 @@ When it finishes, the possible completions are retrieved from the value of the COMPREPLY array variable.

    -
    -G globpat
    +
    -G globpat

    The filename expansion pattern globpat is expanded to generate the possible completions.

    -
    -P prefix
    +
    -P prefix

    prefix is added at the beginning of each possible completion after all other options have been applied.

    -
    -S suffix
    +
    -S suffix

    suffix is appended to each possible completion after all other options have been applied.

    -
    -W wordlist
    +
    -W wordlist

    The wordlist is split using the characters in the IFS special variable as delimiters, and each resultant word is expanded. @@ -12428,7 +12364,7 @@ The possible completions are the members of the resultant list which match the word being completed.

    -
    -X filterpat
    +
    -X filterpat

    filterpat is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching @@ -12445,9 +12381,8 @@ a name for which no specification exists, or an error occurs adding a completion specification.

    -
    compopt
    -
    -
    +
    compopt
    +
    compopt [-o option] [-DEI] [+o option] [name]
     

    Modify completion options for each name according to the @@ -12479,7 +12414,9 @@ specification exists, or an output error occurs.


    -
    +
    +
    + @@ -12602,9 +12539,12 @@ in the examples/complete subdirectory.
    -
    +
    +
    +
    +

    9 Using History Interactively

    @@ -12615,19 +12555,15 @@ It should be considered a user’s guide. For information on using the GNU History Library in other programs, see the GNU Readline Library Manual.

    - - - - - +
    -
    +
    + @@ -12657,7 +12593,7 @@ the value of the HISTFILESIZE variable. When a shell with history enabled exits, the last $HISTSIZE lines are copied from the history list to the file named by $HISTFILE. -If the histappend shell option is set (see Bash Builtins), +If the histappend shell option is set (see Bash Builtin Commands), the lines are appended to the history file, otherwise the history file is overwritten. If HISTFILE @@ -12680,7 +12616,7 @@ The history builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the -history list (see Commands For History). +history list (see Commands For Manipulating The History).

    The shell allows control over which commands are saved on the history list. The HISTCONTROL and HISTIGNORE @@ -12697,9 +12633,11 @@ The shopt builtin is used to set these options. See The Shopt Builtin, for a description of shopt.


    -
    +
    +
    +

    9.2 Bash History Builtins

    @@ -12708,9 +12646,8 @@ Next:
    +
    fc [-e ename] [-lnr] [first] [last]
     fc -s [pat=rep] [command]
     
    @@ -12751,9 +12688,8 @@ that typing ‘r cc’ runs the last command beginning with and typing ‘r’ re-executes the last command (see Aliases).

    -
    history
    -
    -
    +
    history
    +
    history [n]
     history -c
     history -d offset
    @@ -12774,12 +12710,12 @@ and the history line.
     

    Options, if supplied, have the following meanings:

    -
    -c
    +
    -c

    Clear the history list. This may be combined with the other options to replace the history list completely.

    -
    -d offset
    +
    -d offset

    Delete the history entry at position offset. If offset is positive, it should be specified as it appears when the history is displayed. @@ -12789,39 +12725,40 @@ end of the history, and an index of ‘-1’ refers to the history -d command.

    -
    -d start-end
    -

    Delete the history entries between positions start and end, -inclusive. Positive and negative values for start and end +

    -d start-end
    +

    Delete the range of history entries between positions start and +end, inclusive. +Positive and negative values for start and end are interpreted as described above.

    -
    -a
    +
    -a

    Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file.

    -
    -n
    +
    -n

    Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session.

    -
    -r
    +
    -r

    Read the history file and append its contents to the history list.

    -
    -w
    +
    -w

    Write out the current history list to the history file.

    -
    -p
    +
    -p

    Perform history substitution on the args and display the result on the standard output, without storing the results in the history list.

    -
    -s
    +
    -s

    The args are added to the end of the history list as a single entry.

    @@ -12833,11 +12770,18 @@ used, if filename is given, then it is used 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. +


    -
    +
    +
    + @@ -12908,19 +12852,17 @@ as explained above (see Bash Variables). The shel the history comment character to mark history timestamps when writing the history file.

    - - - - - +
    -
    +
    +

    9.3.1 Event Designators

    @@ -12932,31 +12874,31 @@ position in the history list.

    -
    !
    +
    !

    Start a history substitution, except when followed by a space, tab, the end of the line, ‘=’ or ‘(’ (when the extglob shell option is enabled using the shopt builtin).

    -
    !n
    +
    !n

    Refer to command line n.

    -
    !-n
    +
    !-n

    Refer to the command n lines back.

    -
    !!
    +
    !!

    Refer to the previous command. This is a synonym for ‘!-1’.

    -
    !string
    +
    !string

    Refer to the most recent command preceding the current position in the history list starting with string.

    -
    !?string[?]
    +
    !?string[?]

    Refer to the most recent command preceding the current position in the history list containing string. @@ -12967,22 +12909,24 @@ If string is missing, the string from the most recent search is used; it is an error if there is no previous search string.

    -
    ^string1^string2^
    +
    ^string1^string2^

    Quick Substitution. Repeat the last command, replacing string1 with string2. Equivalent to !!:s^string1^string2^.

    -
    !#
    +
    !#

    The entire command line typed so far.


    -
    +
    +
    +

    9.3.2 Word Designators

    @@ -12996,17 +12940,17 @@ inserted into the current line separated by single spaces.

    For example,

    -
    !!
    +
    !!

    designates the preceding command. When you type this, the preceding command is repeated in toto.

    -
    !!:$
    +
    !!:$

    designates the last argument of the preceding command. This may be shortened to !$.

    -
    !fi:2
    +
    !fi:2

    designates the second argument of the most recent command starting with the letters fi.

    @@ -13015,42 +12959,42 @@ the letters fi.

    Here are the word designators:

    -
    0 (zero)
    +
    0 (zero)

    The 0th word. For many applications, this is the command word.

    -
    n
    +
    n

    The nth word.

    -
    ^
    +
    ^

    The first argument; that is, word 1.

    -
    $
    +
    $

    The last argument.

    -
    %
    +
    %

    The first word matched by the most recent ‘?string?’ search, if the search string begins with a character that is part of a word.

    -
    x-y
    +
    x-y

    A range of words; ‘-y’ abbreviates ‘0-y’.

    -
    *
    +
    *

    All of the words, except the 0th. This is a synonym for ‘1-$’. It is not an error to use ‘*’ if there is just one word in the event; the empty string is returned in that case.

    -
    x*
    +
    x*

    Abbreviates ‘x-$

    -
    x-
    +
    x-

    Abbreviates ‘x-$’ like ‘x*’, but omits the last word. If ‘x’ is missing, it defaults to 0.

    @@ -13061,9 +13005,11 @@ If ‘x’ is missing, it defaults to 0. previous command is used as the event.


    -
    +
    +
    +

    9.3.3 Modifiers

    @@ -13072,39 +13018,39 @@ of the following modifiers, each preceded by a ‘:’. These modify, or edit, the word or words selected from the history event.

    -
    h
    +
    h

    Remove a trailing pathname component, leaving only the head.

    -
    t
    +
    t

    Remove all leading pathname components, leaving the tail.

    -
    r
    +
    r

    Remove a trailing suffix of the form ‘.suffix’, leaving the basename.

    -
    e
    +
    e

    Remove all but the trailing suffix.

    -
    p
    +
    p

    Print the new command but do not execute it.

    -
    q
    +
    q

    Quote the substituted words, escaping further substitutions.

    -
    x
    +
    x

    Quote the substituted words as with ‘q’, but break into words at spaces, tabs, and newlines. The ‘q’ and ‘x’ modifiers are mutually exclusive; the last one supplied is used.

    -
    s/old/new/
    +
    s/old/new/

    Substitute new for the first occurrence of old in the event line. Any character may be used as the delimiter in place of ‘/’. @@ -13122,18 +13068,18 @@ The final delimiter is optional if it is the last character on the input line.

    -
    &
    +
    &

    Repeat the previous substitution.

    -
    g
    -
    a
    +
    g
    +
    a

    Cause changes to be applied over the entire event line. Used in conjunction with ‘s’, as in gs/old/new/, or with ‘&’.

    -
    G
    +
    G

    Apply the following ‘s’ or ‘&’ modifier once to each word in the event.

    @@ -13141,9 +13087,13 @@ in the event.

    -
    +
    +
    +
    +
    +

    10 Installing Bash

    @@ -13154,32 +13104,20 @@ non-Unix systems such as BeOS and Interix. Other independent ports exist for MS-DOS, OS/2, and Windows platforms.

    - - - - - - - - - - +
    -
    +
    + @@ -13210,7 +13148,14 @@ reporting script.
  • Optionally, type ‘make tests’ to run the Bash test suite.
  • Type ‘make install’ to install bash and 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 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 (see Installation Names).
  • @@ -13218,7 +13163,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 Makefile in each directory of the package (the top directory, the -builtins, doc, and support directories, +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 @@ -13262,10 +13207,10 @@ to do them, and mail diffs or instructions to 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 +by a program called Autoconf. +You only need configure.ac if you want to change it or regenerate +configure using a newer version of Autoconf. +If you do this, make sure you are using Autoconf version 2.69 or newer.

    You can remove the program binaries and object files from the @@ -13274,7 +13219,9 @@ files that configure created (so you can compile Bash for a different kind of computer), type ‘make distclean’.


    -
    +
    +
    + @@ -13300,7 +13247,9 @@ can do that on the command line like this: is available.


    -
    +
    +
    + @@ -13340,28 +13289,62 @@ Bash for at least one architecture before you can create build directories for other architectures.


    -
    +
    +
    +

    10.4 Installation Names

    By default, ‘make install’ will install into -/usr/local/bin, /usr/local/man, etc. You can -specify an installation prefix other than /usr/local by +/usr/local/bin, /usr/local/man, etc.; +that is, the installation prefix defaults to /usr/local. +You can specify an installation prefix other than /usr/local by giving configure the option --prefix=PATH, -or by specifying a value for the DESTDIRmake’ -variable when running ‘make install’. +or by specifying a value for the prefixmake’ +variable when running ‘make install’ +(e.g., ‘make install prefix=PATH’). +The prefix variable provides a default for exec_prefix and +other variables used when installing bash.

    You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give configure the option --exec-prefix=PATH, ‘make install’ will use PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +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.


    -
    +
    +
    + @@ -13380,7 +13363,9 @@ or a canonical name with three fields: ‘CPU-COMPANY-SYSTEM&rs values of each field.


    -
    +
    +
    + @@ -13397,7 +13382,9 @@ script. A warning: the Bash configure looks for a site script, but not all configure scripts do.


    -
    +
    +
    + @@ -13407,29 +13394,29 @@ Next:
    -
    --cache-file=file
    +
    --cache-file=file

    Use and save the results of the tests in file instead of ./config.cache. Set file to /dev/null to disable caching, for debugging configure.

    -
    --help
    +
    --help

    Print a summary of the options to configure, and exit.

    -
    --quiet
    -
    --silent
    -
    -q
    +
    --quiet
    +
    --silent
    +
    -q

    Do not print messages saying which checks are being made.

    -
    --srcdir=dir
    +
    --srcdir=dir

    Look for the Bash source code in directory dir. Usually configure can determine that directory automatically.

    -
    --version
    +
    --version

    Print the version of Autoconf used to generate the configure script, and exit.

    @@ -13439,7 +13426,9 @@ script, and exit. options. ‘configure --help’ prints the complete list.


    -
    +
    +
    + @@ -13457,11 +13446,11 @@ that is enabled by default, use --disable-feature. --with- options that the Bash configure recognizes.

    -
    --with-afs
    +
    --with-afs

    Define if you are using the Andrew File System from Transarc.

    -
    --with-bash-malloc
    +
    --with-bash-malloc

    Use the Bash version of malloc in the directory lib/malloc. This is not the same malloc that appears in GNU libc, but an older version @@ -13473,17 +13462,17 @@ which this should be turned off, and configure disables this option automatically for a number of systems.

    -
    --with-curses
    +
    --with-curses

    Use the curses library instead of the termcap library. This should be supplied if your system has an inadequate or incomplete termcap database.

    -
    --with-gnu-malloc
    +
    --with-gnu-malloc

    A synonym for --with-bash-malloc.

    -
    --with-installed-readline[=PREFIX]
    +
    --with-installed-readline[=PREFIX]

    Define this to make Bash link with a locally-installed version of Readline rather than the version in lib/readline. This works only with Readline 5.0 and later versions. If PREFIX is yes or not @@ -13500,255 +13489,276 @@ the installed version of Readline in subdirectories of that directory 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 ofthe 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
    +
    --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. +compiled, linked, and installed, rather than changing run-time features.

    -
    --enable-largefile
    +
    --enable-largefile

    Enable support for large files if the operating system requires special compiler options to build programs which can access large files. This is enabled by default, if the operating system provides large file support.

    -
    --enable-profiling
    +
    --enable-profiling

    This builds a Bash binary that produces profiling information to be processed by gprof each time it is executed.

    -
    --enable-static-link
    +
    --enable-separate-helpfiles
    +

    Use external files for the documentation displayed by the help builtin +instead of storing the text internally. +

    +
    +
    --enable-static-link

    This causes Bash to be linked statically, if gcc is being used. This could be used to build a version to use as root’s shell. -

    +

    +

    The ‘minimal-config’ option can be used to disable all of the following options, but it is processed first, so individual options may be enabled using ‘enable-feature’.

    -

    All of the following options except for ‘disabled-builtins’, -‘direxpand-default’, and +

    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
    +
    --enable-alias

    Allow alias expansion and include the alias and unalias builtins (see Aliases).

    -
    --enable-arith-for-command
    +
    --enable-alt-array-implementation
    +

    This builds bash using an alternate implementation of arrays +(see 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 (see Looping Constructs).

    -
    --enable-array-variables
    +
    --enable-array-variables

    Include support for one-dimensional array shell variables (see Arrays).

    -
    --enable-bang-history
    +
    --enable-bang-history

    Include support for csh-like history substitution -(see History Interaction). +(see History Expansion).

    -
    --enable-brace-expansion
    +
    --enable-brace-expansion

    Include csh-like brace expansion ( b{a,b}cbac bbc ). See Brace Expansion, for a complete description.

    -
    --enable-casemod-attributes
    +
    --enable-casemod-attributes

    Include support for case-modifying attributes in the declare builtin -and assignment statements. Variables with the uppercase attribute, +and assignment statements. Variables with the uppercase attribute, for example, will have their values converted to uppercase upon assignment.

    -
    --enable-casemod-expansion
    +
    --enable-casemod-expansion

    Include support for case-modifying word expansions.

    -
    --enable-command-timing
    +
    --enable-command-timing

    Include support for recognizing time as a reserved word and for displaying timing statistics for the pipeline following time (see Pipelines). This allows pipelines as well as shell builtins and functions to be timed.

    -
    --enable-cond-command
    +
    --enable-cond-command

    Include support for the [[ conditional command. (see Conditional Constructs).

    -
    --enable-cond-regexp
    +
    --enable-cond-regexp

    Include support for matching POSIX regular expressions using the ‘=~’ binary operator in the [[ conditional command. (see Conditional Constructs).

    -
    --enable-coprocesses
    +
    --enable-coprocesses

    Include support for coprocesses and the coproc reserved word (see Pipelines).

    -
    --enable-debugger
    +
    --enable-debugger

    Include support for the bash debugger (distributed separately).

    -
    --enable-dev-fd-stat-broken
    +
    --enable-dev-fd-stat-broken

    If calling stat on /dev/fd/N returns different results than calling fstat on file descriptor N, supply this option to enable a workaround. This has implications for conditional commands that test file attributes.

    -
    --enable-direxpand-default
    +
    --enable-direxpand-default

    Cause the direxpand shell option (see The Shopt Builtin) to be enabled by default when the shell starts. It is normally disabled by default.

    -
    --enable-directory-stack
    +
    --enable-directory-stack

    Include support for a csh-like directory stack and the pushd, popd, and dirs builtins (see The Directory Stack).

    -
    --enable-disabled-builtins
    +
    --enable-disabled-builtins

    Allow builtin commands to be invoked via ‘builtin xxx’ even after xxx has been disabled using ‘enable -n xxx’. -See Bash Builtins, for details of the builtin and +See Bash Builtin Commands, for details of the builtin and enable builtin commands.

    -
    --enable-dparen-arithmetic
    +
    --enable-dparen-arithmetic

    Include support for the ((…)) command (see Conditional Constructs).

    -
    --enable-extended-glob
    +
    --enable-extended-glob

    Include support for the extended pattern matching features described above under Pattern Matching.

    -
    --enable-extended-glob-default
    -

    Set the default value of the extglob shell option described +

    --enable-extended-glob-default
    +

    Set the default value of the extglob shell option described above under The Shopt Builtin to be enabled.

    -
    --enable-function-import
    +
    --enable-function-import

    Include support for importing function definitions exported by another instance of the shell from the environment. This option is enabled by default.

    -
    --enable-glob-asciirange-default
    -

    Set the default value of the globasciiranges shell option described +

    --enable-glob-asciirange-default
    +

    Set the default value of the globasciiranges shell option described above under The Shopt Builtin to be enabled. This controls the behavior of character ranges when used in pattern matching bracket expressions.

    -
    --enable-help-builtin
    +
    --enable-help-builtin

    Include the help builtin, which displays help on shell builtins and -variables (see Bash Builtins). +variables (see Bash Builtin Commands).

    -
    --enable-history
    +
    --enable-history

    Include command history and the fc and history builtin commands (see Bash History Facilities).

    -
    --enable-job-control
    +
    --enable-job-control

    This enables the job control features (see Job Control), if the operating system supports them.

    -
    --enable-multibyte
    +
    --enable-multibyte

    This enables support for multibyte characters if the operating system provides the necessary support.

    -
    --enable-net-redirections
    +
    --enable-net-redirections

    This enables the special handling of filenames of the form /dev/tcp/host/port and /dev/udp/host/port when used in redirections (see Redirections).

    -
    --enable-process-substitution
    +
    --enable-process-substitution

    This enables process substitution (see Process Substitution) if the operating system provides the necessary support.

    -
    --enable-progcomp
    +
    --enable-progcomp

    Enable the programmable completion facilities (see Programmable Completion). If Readline is not enabled, this option has no effect.

    -
    --enable-prompt-string-decoding
    +
    --enable-prompt-string-decoding

    Turn on the interpretation of a number of backslash-escaped characters in the $PS0, $PS1, $PS2, and $PS4 prompt strings. See Controlling the Prompt, for a complete list of prompt string escape sequences.

    -
    --enable-readline
    +
    --enable-readline

    Include support for command-line editing and history with the Bash version of the Readline library (see Command Line Editing).

    -
    --enable-restricted
    +
    --enable-restricted

    Include support for a restricted shell. If this is enabled, Bash, when called as rbash, enters a restricted mode. See The Restricted Shell, for a description of restricted mode.

    -
    --enable-select
    +
    --enable-select

    Include the select compound command, which allows the generation of simple menus (see 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
    +
    --enable-single-help-strings

    Store the text displayed by the help builtin as a single string for each help topic. This aids in translating the text to different languages. You may need to disable this if your compiler cannot handle very long string literals.

    -
    --enable-strict-posix-default
    +
    --enable-strict-posix-default

    Make Bash POSIX-conformant by default (see Bash POSIX Mode).

    -
    --enable-usg-echo-default
    +
    --enable-translatable-strings
    +

    Enable support for $"string" translatable strings +(see Locale-Specific Translation). +

    +
    +
    --enable-usg-echo-default

    A synonym for --enable-xpg-echo-default.

    -
    --enable-xpg-echo-default
    +
    --enable-xpg-echo-default

    Make the echo builtin expand backslash-escaped characters by default, without requiring the -e option. This sets the default value of the xpg_echo shell option to on, which makes the Bash echo behave more like the version specified in the Single Unix Specification, version 3. -See Bash Builtins, for a description of the escape sequences that +See Bash Builtin Commands, for a description of the escape sequences that echo recognizes.

    @@ -13762,9 +13772,12 @@ Read the comments associated with each definition for more information about its effect.


    -
    +
    +
    +
    +

    Appendix A Reporting Bugs

    @@ -13773,7 +13786,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 -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. @@ -13799,9 +13813,11 @@ the template it provides for filing a bug report. bug-bash@gnu.org.


    -
    +
    +
    +

    Appendix B Major Differences From The Bourne Shell

    @@ -13836,7 +13852,7 @@ The Bash history list maintains timestamp information and uses the value of the HISTTIMEFORMAT variable to display it.
  • Bash implements csh-like history expansion -(see History Interaction). +(see History Expansion).
  • Bash has one-dimensional array variables (see Arrays), and the appropriate variable expansions and assignment syntax to use them. @@ -13851,7 +13867,7 @@ is supported (see ANSI-C Quoting). locale-specific translation of the characters between the double quotes. The -D, --dump-strings, and --dump-po-strings invocation options list the translatable strings found in a script -(see Locale Translation). +(see Locale-Specific Translation).
  • Bash implements the ! keyword to negate the return value of a pipeline (see Pipelines). @@ -13907,15 +13923,15 @@ which expands to the substring of var’s value of length (see Shell Parameter Expansion).
  • The expansion -${var/[/]pattern[/replacement]}, +${var/[/]pattern[/replacement]}, which matches pattern and replaces it with replacement in -the value of var, is available (see Shell Parameter Expansion). +the value of var, is available (see Shell Parameter Expansion).
  • The expansion ${!prefix*} expansion, which expands to the names of all shell variables whose names begin with prefix, is available (see Shell Parameter Expansion). -
  • Bash has indirect variable expansion using ${!word} +
  • Bash has indirect variable expansion using ${!word} (see Shell Parameter Expansion).
  • Bash can expand positional parameters beyond $9 using @@ -13944,8 +13960,8 @@ to negate the set of characters between the brackets. The Bourne shell uses only ‘!’.
  • Bash implements the full set of POSIX filename expansion operators, -including character classes, equivalence classes, and -collating symbols (see Filename Expansion). +including character classes, equivalence classes, and +collating symbols (see Filename Expansion).
  • Bash implements extended pattern matching features when the extglob shell option is enabled (see Pattern Matching). @@ -13955,7 +13971,7 @@ shell option is enabled (see Pattern Matching).
  • Bash functions are permitted to have local variables using the local builtin, and thus useful recursive functions may be written -(see Bash Builtins). +(see Bash Builtin Commands).
  • Variable assignments preceding commands affect only that command, even builtins and functions (see Environment). @@ -13993,13 +14009,13 @@ physical modes.
  • Bash allows a function to override a builtin with the same name, and provides access to that builtin’s functionality within the function via the -builtin and command builtins (see Bash Builtins). +builtin and command builtins (see Bash Builtin Commands).
  • The command builtin allows selective disabling of functions -when command lookup is performed (see Bash Builtins). +when command lookup is performed (see Bash Builtin Commands).
  • Individual builtins may be enabled or disabled using the enable -builtin (see Bash Builtins). +builtin (see Bash Builtin Commands).
  • The Bash exec builtin takes additional options that allow users to control the contents of the environment passed to the executed @@ -14022,12 +14038,12 @@ searching the $PATH, using ‘hash -p’ (see Bourne Shell Builtins).
  • Bash includes a help builtin for quick reference to shell -facilities (see Bash Builtins). +facilities (see Bash Builtin Commands).
  • The printf builtin is available to display formatted output -(see Bash Builtins). +(see Bash Builtin Commands). -
  • The Bash read builtin (see Bash Builtins) +
  • The Bash read builtin (see Bash Builtin Commands) will read a line ending in ‘\’ with the -r option, and will use the REPLY variable as a default if no non-option arguments are supplied. @@ -14063,7 +14079,7 @@ which specifies the behavior based on the number of arguments.
  • Bash includes the caller builtin, which displays the context of any active subroutine call (a shell function or a script executed with -the . or source builtins). This supports the bash +the . or source builtins). This supports the Bash debugger.
  • The trap builtin (see Bourne Shell Builtins) allows a @@ -14096,7 +14112,7 @@ function has been given the trace attribute or the functrace option has been enabled using the shopt builtin.

  • The Bash type builtin is more extensive and gives more information -about the names it finds (see Bash Builtins). +about the names it finds (see Bash Builtin Commands).
  • The Bash umask builtin permits a -p option to cause the output to be displayed in the form of a umask command @@ -14137,7 +14153,11 @@ shell scripts.

    More features unique to Bash may be found in Bash Features.

    -

    B.1 Implementation Differences From The SVR4.2 Shell

    + +
    +

    B.1 Implementation Differences From The SVR4.2 Shell

    Since Bash is a completely new implementation, it does not suffer from many of the limitations of the SVR4.2 shell. For instance: @@ -14185,9 +14205,12 @@ only for certain failures, as enumerated in the POSIX standard.


  • -
    +
    +
    +
    +

    Appendix C GNU Free Documentation License

    @@ -14661,31 +14684,27 @@ to permit their use in free software.
    -
    +
    +
    +

    Appendix D Indexes

    - - - - - - - +
    -
    +
    +

    D.1 Index of Shell Builtin Commands

    Jump to:   . @@ -14883,9 +14902,11 @@ Next:

    -
    +
    +
    +

    D.2 Index of Shell Reserved Words

    Jump to:   ! @@ -15003,9 +15024,11 @@ Next: , Pre

    -
    +
    +
    +

    D.3 Parameter and Variable Index

    + @@ -15213,11 +15237,12 @@ Next: , Pre - + + - + @@ -15261,6 +15286,7 @@ Next: , Pre + @@ -15279,8 +15305,8 @@ Next: , Pre - - + + @@ -15354,9 +15380,11 @@ Next: , Pre
    Jump to:   ! @@ -15165,6 +15188,7 @@ Next: , Pre
    editing-mode: Readline Init File Syntax
    EMACS: Bash Variables
    emacs-mode-string: Readline Init File Syntax
    enable-active-region: Readline Init File Syntax
    enable-bracketed-paste: Readline Init File Syntax
    enable-keypad: Readline Init File Syntax
    ENV: Bash Variables
    keymap: Readline Init File Syntax

    L
    LANG: Bash Variables
    LANG: Creating Internationalized Scripts
    LANG: Bash Variables
    LC_ALL: Bash Variables
    LC_COLLATE: Bash Variables
    LC_CTYPE: Bash Variables
    LC_MESSAGES: Locale Translation
    LC_MESSAGES: Creating Internationalized Scripts
    LC_MESSAGES: Bash Variables
    LC_NUMERIC: Bash Variables
    LC_TIME: Bash Variables

    R
    RANDOM: Bash Variables
    READLINE_ARGUMENT: Bash Variables
    READLINE_LINE: Bash Variables
    READLINE_MARK: Bash Variables
    READLINE_POINT: Bash Variables
    SRANDOM: Bash Variables

    T
    TEXTDOMAIN: Locale Translation
    TEXTDOMAINDIR: Locale Translation
    TEXTDOMAIN: Creating Internationalized Scripts
    TEXTDOMAINDIR: Creating Internationalized Scripts
    TIMEFORMAT: Bash Variables
    TMOUT: Bash Variables
    TMPDIR: Bash Variables

    -
    +
    + +
    diff --git a/doc/bashref.info b/doc/bashref.info index 20ebf243c..4b5eb14fa 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -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, 26 December 2021). - 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 26 December 2021, of 'The GNU Bash +Reference Manual', for 'Bash', Version 5.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 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, 26 December 2021). The Bash home page is . - 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 26 December 2021, 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.  @@ -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. + + +File: bashref.info, Node: Creating Internationalized Scripts, Up: Locale Translation + +Once you've marked the strings in your script that you want to translate +using $"...", you create a gettext "template" file using the command + + bash --dump-po-strings SCRIPTNAME > DOMAIN.pot + +The DOMAIN is your "message domain". It's just an arbitrary string +that's used to identify the files gettext needs, like a package or +script name. It needs to be unique among all the message domains on +systems where you install the translations, so gettext knows which +translations correspond to your script. You'll use the template file to +create translations for each target language. The template file +conventionally has the suffix '.pot'. + + You copy this template file to a separate file for each target +language you want to support (called "PO" files, which use the suffix +'.po'). PO files use various naming conventions, but when you are +working to translate a template file into a particular language, you +first copy the template file to a file whose name is the language you +want to target, with the '.po' suffix. For instance, the Spanish +translations of your strings would be in a file named 'es.po', and to +get started using a message domain named "example," you would run + + cp example.pot es.po + +Ultimately, PO files are often named DOMAIN.po and installed in +directories that contain multiple translation files for a particular +language. + + Whichever naming convention you choose, you will need to translate +the strings in the PO files into the appropriate languages. This has to +be done manually. + + When you have the translations and PO files complete, you'll use the +gettext tools to produce what are called "MO" files, which are compiled +versions of the PO files the gettext tools use to look up translations +efficiently. MO files are also called "message catalog" files. You use +the 'msgfmt' program to do this. For instance, if you had a file with +Spanish translations, you could run + + msgfmt -o es.mo es.po + +to produce the corresponding MO file. + + Once you have the MO files, you decide where to install them and use +the 'TEXTDOMAINDIR' shell variable to tell the gettext tools where they +are. Make sure to use the same message domain to name the MO files as +you did for the PO files when you install them. + + Your users will use the 'LANG' or 'LC_MESSAGES' shell variables to +select the desired language. + + You set the 'TEXTDOMAIN' variable to the script's message domain. As +above, you use the message domain to name your translation files. + + You, or possibly your users, set the 'TEXTDOMAINDIR' variable to the +name of a directory where the message catalog files are stored. If you +install the message files into the system's standard message catalog +directory, you don't need to worry about this variable. + + The directory where the message catalog files are stored varies +between systems. Some use the message catalog selected by the +'LC_MESSAGES' shell variable. Others create the name of the message +catalog from the value of the 'TEXTDOMAIN' shell variable, possibly +adding the '.mo' suffix. If you use the 'TEXTDOMAIN' variable, you may +need to set the 'TEXTDOMAINDIR' variable to the location of the message +catalog files, as above. It's common to use both variables in this +fashion: '$TEXTDOMAINDIR'/'$LC_MESSAGES'/LC_MESSAGES/'$TEXTDOMAIN'.mo. + + If you used that last convention, and you wanted to store the message +catalog files with Spanish (es) and Esperanto (eo) translations into a +local directory you use for custom translation files, you could run + + TEXTDOMAIN=example + TEXTDOMAINDIR=/usr/local/share/locale + + cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo + cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo + + When all of this is done, and the message catalog files containing +the compiled translations are installed in the correct location, your +users will be able to see translated strings in any of the supported +languages by setting the 'LANG' or 'LC_MESSAGES' environment variables +before running your script.  File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax @@ -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,11 @@ 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 + 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. +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: 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 @@ -883,11 +977,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 +989,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 +1008,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 +1104,46 @@ 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. + Expressions may be combined using the following operators, listed in decreasing order of precedence: @@ -1024,9 +1178,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 +1193,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 +1212,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 +1281,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 +.  File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features @@ -1210,15 +1307,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 @@ -1281,7 +1378,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 +1387,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 @@ -1328,7 +1425,8 @@ been shadowed will become visible. 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 +1446,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 +1461,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 +1487,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 +1499,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 +1521,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 +1586,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 +1641,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 +1665,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 +1680,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 +1720,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 +1778,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.  File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions @@ -1708,7 +1805,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,22 +1831,39 @@ 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 @@ -1940,26 +2054,72 @@ 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. Backslash is used to quote '&' in STRING; the + backslash is removed in order to permit a literal '&' in the + replacement string. Pattern substitution performs the check for + '&' after expanding STRING, so users should take care to quote + backslashes intended to escape the '&' and inhibit replacement so + they survive any quote removal performed by the expansion of + STRING. For instance, + + var=abcdef + echo ${var/abc/& } + echo "${var/abc/& }" + echo ${var/abc/"& "} + + will display three lines of "abc def", while + + var=abcdef + echo ${var/abc/\& } + echo "${var/abc/\& }" + echo ${var/abc/"\& "} + + will display two lines of "abc def" and a third line of "& def". + The first two are replaced because the backslash is removed by + quote removal performed during the expansion of STRING (the + expansion is performed in a context that doesn't take any enclosing + double quotes into account, as with other word expansions). In the + third case, the double quotes affect the expansion of '\&', and, + because '&' is not one of the characters for which backslash is + special in double quotes, the backslash survives the expansion, + inhibits the replacement, but is removed because it is treated + specially. One could use '\\&', unquoted, as the replacement + string to achive the same effect. 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 +2130,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 +2185,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 +2243,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 +2343,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 +2356,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 @@ -2245,7 +2416,7 @@ characters must be quoted if they are to be matched literally. 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 +2425,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 +2434,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 +2456,14 @@ of the following sub-patterns: '!(PATTERN-LIST)' Matches anything except one of the given patterns. + 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 +2486,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 +2503,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 +2766,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 +2826,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 +2838,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 +2890,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 +2916,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 +2952,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 +2982,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::). +  File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands @@ -2835,6 +3025,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. +  File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features @@ -2857,8 +3074,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 +3179,19 @@ 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, 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, '.' 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 +3205,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 +3238,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 +3294,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 +3498,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 +3596,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 +3604,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.  File: bashref.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands @@ -3406,6 +3634,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 +3699,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 +3788,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 +3815,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 +3858,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 +3931,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 +4065,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 +4176,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 +4234,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 +4378,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 +4560,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 +4669,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 +4683,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 +4696,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. @@ -4616,6 +4864,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 +4928,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 +4959,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 +5010,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 +5251,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 +5288,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 +5300,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 +5353,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: , + 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' @@ -5141,16 +5412,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 +5488,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 +5566,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 +5720,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 +5736,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 +5762,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. @@ -5882,8 +6157,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 arguments, unless -'-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 +6216,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 +6268,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 +6284,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 +6506,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 +6532,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 +6547,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 @@ -6402,7 +6680,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 +6759,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 +6774,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 +6814,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.  File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features @@ -6523,9 +6835,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 +6883,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 +6950,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 +6962,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'. @@ -6764,7 +7077,11 @@ startup files. 25. 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 iteration variable in a 'for' statement or the selection variable @@ -6848,14 +7165,14 @@ startup files. 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 + 48. When the 'cd' builtin is invoked in logical mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail - instead of falling back to PHYSICAL mode. + instead of falling back to physical mode. 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name - supplied as an argument exceeds PATH_MAX when all symbolic links + 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. @@ -7040,6 +7357,30 @@ 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. +  File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top @@ -7093,19 +7434,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 +7575,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, @@ -7582,7 +7923,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 @@ -7662,7 +8003,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 +8052,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 @@ -7745,6 +8090,18 @@ 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 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 @@ -8438,6 +8795,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. +  File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands @@ -8849,6 +9211,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 @@ -9578,9 +9946,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 @@ -9613,6 +9981,11 @@ history file. FILENAME is given, then it is used as the history file. If not, then the value of the 'HISTFILE' variable is used. + The return value is 0 unless an invalid option is encountered, an + error occurs while reading or writing the history file, an invalid + OFFSET or range is supplied as an argument to '-d', or the history + expansion supplied as an argument to '-p' fails. +  File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively @@ -9897,20 +10270,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 +10322,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 @@ -10009,10 +10390,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 +10404,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. +  File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash @@ -10135,16 +10543,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 ofthe 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 +10569,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 +10581,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 +10615,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 +10674,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 +10683,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 +10737,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 +10746,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 +10776,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 -. + and from +. 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 +10903,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 +10937,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 +11055,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' @@ -11252,18 +11676,18 @@ D.1 Index of Shell Builtin Commands * :: Bourne Shell Builtins. (line 11) * [: Bourne Shell Builtins. - (line 270) + (line 274) * 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) +* builtin: Bash Builtins. (line 108) +* caller: Bash Builtins. (line 117) * cd: Bourne Shell Builtins. (line 44) -* command: Bash Builtins. (line 130) +* command: Bash Builtins. (line 134) * compgen: Programmable Completion Builtins. (line 12) * complete: Programmable Completion Builtins. @@ -11271,75 +11695,75 @@ D.1 Index of Shell Builtin Commands * compopt: Programmable Completion Builtins. (line 237) * continue: Bourne Shell Builtins. - (line 85) -* declare: Bash Builtins. (line 150) + (line 89) +* 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) +* echo: Bash Builtins. (line 257) +* enable: Bash Builtins. (line 306) * eval: Bourne Shell Builtins. - (line 94) + (line 98) * exec: Bourne Shell Builtins. - (line 102) + (line 106) * exit: Bourne Shell Builtins. - (line 120) + (line 124) * export: Bourne Shell Builtins. - (line 127) + (line 131) * fc: Bash History Builtins. (line 10) * fg: Job Control Builtins. (line 17) * getopts: Bourne Shell Builtins. - (line 143) + (line 147) * hash: Bourne Shell Builtins. - (line 187) -* help: Bash Builtins. (line 331) + (line 191) +* 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 211) +* read: Bash Builtins. (line 488) +* readarray: Bash Builtins. (line 585) * readonly: Bourne Shell Builtins. - (line 217) + (line 221) * return: Bourne Shell Builtins. - (line 236) + (line 240) * set: The Set Builtin. (line 11) * shift: Bourne Shell Builtins. - (line 257) + (line 261) * shopt: The Shopt Builtin. (line 9) -* source: Bash Builtins. (line 579) +* source: Bash Builtins. (line 594) * suspend: Job Control Builtins. (line 113) * test: Bourne Shell Builtins. - (line 270) + (line 274) * times: Bourne Shell Builtins. - (line 349) + (line 359) * trap: Bourne Shell Builtins. - (line 355) -* type: Bash Builtins. (line 584) -* typeset: Bash Builtins. (line 616) -* ulimit: Bash Builtins. (line 622) + (line 365) +* 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 414) +* unalias: Bash Builtins. (line 743) * unset: Bourne Shell Builtins. - (line 422) + (line 432) * wait: Job Control Builtins. (line 76) @@ -11354,9 +11778,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 +11802,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,21 +11818,21 @@ D.3 Parameter and Variable Index [index] * 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) @@ -11446,20 +11870,20 @@ D.3 Parameter and Variable Index * colored-completion-prefix: Readline Init File Syntax. (line 55) * colored-stats: Readline Init File Syntax. - (line 62) + (line 65) * COLUMNS: Bash Variables. (line 202) * comment-begin: Readline Init File Syntax. - (line 68) + (line 71) * completion-display-width: Readline Init File Syntax. - (line 73) + (line 76) * completion-ignore-case: Readline Init File Syntax. - (line 80) + (line 83) * completion-map-case: Readline Init File Syntax. - (line 85) + (line 88) * completion-prefix-display-length: Readline Init File Syntax. - (line 91) + (line 94) * completion-query-items: Readline Init File Syntax. - (line 98) + (line 101) * COMPREPLY: Bash Variables. (line 254) * COMP_CWORD: Bash Variables. (line 208) * COMP_KEY: Bash Variables. (line 237) @@ -11469,29 +11893,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 112) * COPROC: Bash Variables. (line 260) * DIRSTACK: Bash Variables. (line 264) * disable-completion: Readline Init File Syntax. - (line 116) + (line 120) * echo-control-characters: Readline Init File Syntax. - (line 121) + (line 125) * editing-mode: Readline Init File Syntax. - (line 126) + (line 130) * EMACS: Bash Variables. (line 274) * emacs-mode-string: Readline Init File Syntax. - (line 132) + (line 136) +* enable-active-region: Readline Init File Syntax. + (line 146) * enable-bracketed-paste: Readline Init File Syntax. - (line 142) + (line 158) * enable-keypad: Readline Init File Syntax. - (line 150) + (line 166) * 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 177) * FCEDIT: Bash Variables. (line 316) * FIGNORE: Bash Variables. (line 320) * FUNCNAME: Bash Variables. (line 326) @@ -11505,15 +11931,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 181) * history-size: Readline Init File Syntax. - (line 171) + (line 187) * 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 196) * HOSTFILE: Bash Variables. (line 448) * HOSTNAME: Bash Variables. (line 459) * HOSTTYPE: Bash Variables. (line 462) @@ -11521,18 +11947,21 @@ D.3 Parameter and Variable Index (line 18) * IGNOREEOF: Bash Variables. (line 465) * input-meta: Readline Init File Syntax. - (line 189) + (line 205) * INPUTRC: Bash Variables. (line 475) * INSIDE_EMACS: Bash Variables. (line 479) * isearch-terminators: Readline Init File Syntax. - (line 197) + (line 213) * keymap: Readline Init File Syntax. - (line 204) -* LANG: Bash Variables. (line 485) + (line 220) +* 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 +11975,15 @@ D.3 Parameter and Variable Index (line 27) * MAPFILE: Bash Variables. (line 540) * mark-modified-lines: Readline Init File Syntax. - (line 234) + (line 250) * mark-symlinked-directories: Readline Init File Syntax. - (line 239) + (line 255) * match-hidden-files: Readline Init File Syntax. - (line 244) + (line 260) * menu-complete-display-prefix: Readline Init File Syntax. - (line 251) + (line 267) * meta-flag: Readline Init File Syntax. - (line 189) + (line 205) * OLDPWD: Bash Variables. (line 544) * OPTARG: Bourne Shell Variables. (line 34) @@ -11563,9 +11992,9 @@ D.3 Parameter and Variable Index (line 38) * OSTYPE: Bash Variables. (line 551) * output-meta: Readline Init File Syntax. - (line 256) + (line 272) * page-completions: Readline Init File Syntax. - (line 262) + (line 278) * PATH: Bourne Shell Variables. (line 42) * PIPESTATUS: Bash Variables. (line 554) @@ -11582,37 +12011,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 288) +* 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 294) * show-all-if-unmodified: Readline Init File Syntax. - (line 284) + (line 300) * show-mode-in-prompt: Readline Init File Syntax. - (line 293) + (line 309) * 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 315) +* 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 328) * vi-ins-mode-string: Readline Init File Syntax. - (line 323) + (line 339) * visible-stats: Readline Init File Syntax. - (line 334) + (line 350)  File: bashref.info, Node: Function Index, Next: Concept Index, Prev: Variable Index, Up: Indexes @@ -11628,7 +12060,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 +12109,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 +12122,7 @@ D.4 Function Index * dynamic-complete-history (M-): 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 +12130,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 +12160,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 +12170,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 +12218,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 +12226,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 +12349,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 +12406,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 +12423,138 @@ D.5 Concept Index  Tag Table: -Node: Top895 -Node: Introduction2813 -Node: What is Bash?3029 -Node: What is a shell?4143 -Node: Definitions6681 -Node: Basic Shell Features9632 -Node: Shell Syntax10851 -Node: Shell Operation11877 -Node: Quoting13170 -Node: Escape Character14470 -Node: Single Quotes14955 -Node: Double Quotes15303 -Node: ANSI-C Quoting16581 -Node: Locale Translation17840 -Node: Comments18993 -Node: Shell Commands19611 -Node: Reserved Words20549 -Node: Simple Commands21305 -Node: Pipelines21959 -Node: Lists24891 -Node: Compound Commands26682 -Node: Looping Constructs27694 -Node: Conditional Constructs30189 -Node: Command Grouping41760 -Node: Coprocesses43239 -Node: GNU Parallel45142 -Node: Shell Functions49443 -Node: Shell Parameters56650 -Node: Positional Parameters61063 -Node: Special Parameters61963 -Node: Shell Expansions65187 -Node: Brace Expansion67310 -Node: Tilde Expansion70033 -Node: Shell Parameter Expansion72650 -Node: Command Substitution87779 -Node: Arithmetic Expansion89134 -Node: Process Substitution90066 -Node: Word Splitting91186 -Node: Filename Expansion93130 -Node: Pattern Matching95679 -Node: Quote Removal99665 -Node: Redirections99960 -Node: Executing Commands109530 -Node: Simple Command Expansion110200 -Node: Command Search and Execution112154 -Node: Command Execution Environment114530 -Node: Environment117514 -Node: Exit Status119173 -Node: Signals120843 -Node: Shell Scripts122810 -Node: Shell Builtin Commands125822 -Node: Bourne Shell Builtins127860 -Node: Bash Builtins148789 -Node: Modifying Shell Behavior178898 -Node: The Set Builtin179243 -Node: The Shopt Builtin189656 -Node: Special Builtins204566 -Node: Shell Variables205545 -Node: Bourne Shell Variables205982 -Node: Bash Variables208086 -Node: Bash Features240720 -Node: Invoking Bash241733 -Node: Bash Startup Files247746 -Node: Interactive Shells252849 -Node: What is an Interactive Shell?253259 -Node: Is this Shell Interactive?253908 -Node: Interactive Shell Behavior254723 -Node: Bash Conditional Expressions258237 -Node: Shell Arithmetic262814 -Node: Aliases265754 -Node: Arrays268374 -Node: The Directory Stack274383 -Node: Directory Stack Builtins275167 -Node: Controlling the Prompt278135 -Node: The Restricted Shell281085 -Node: Bash POSIX Mode283679 -Node: Shell Compatibility Mode294715 -Node: Job Control301371 -Node: Job Control Basics301831 -Node: Job Control Builtins306827 -Node: Job Control Variables312227 -Node: Command Line Editing313383 -Node: Introduction and Notation315054 -Node: Readline Interaction316677 -Node: Readline Bare Essentials317868 -Node: Readline Movement Commands319651 -Node: Readline Killing Commands320611 -Node: Readline Arguments322529 -Node: Searching323573 -Node: Readline Init File325759 -Node: Readline Init File Syntax327018 -Node: Conditional Init Constructs347556 -Node: Sample Init File351752 -Node: Bindable Readline Commands354876 -Node: Commands For Moving356080 -Node: Commands For History358131 -Node: Commands For Text362924 -Node: Commands For Killing366573 -Node: Numeric Arguments369606 -Node: Commands For Completion370745 -Node: Keyboard Macros374936 -Node: Miscellaneous Commands375623 -Node: Readline vi Mode381307 -Node: Programmable Completion382214 -Node: Programmable Completion Builtins389994 -Node: A Programmable Completion Example400689 -Node: Using History Interactively405936 -Node: Bash History Facilities406620 -Node: Bash History Builtins409625 -Node: History Interaction414354 -Node: Event Designators417974 -Node: Word Designators419328 -Node: Modifiers421088 -Node: Installing Bash422899 -Node: Basic Installation424036 -Node: Compilers and Options427294 -Node: Compiling For Multiple Architectures428035 -Node: Installation Names429728 -Node: Specifying the System Type430546 -Node: Sharing Defaults431262 -Node: Operation Controls431935 -Node: Optional Features432893 -Node: Reporting Bugs443411 -Node: Major Differences From The Bourne Shell444605 -Node: GNU Free Documentation License461457 -Node: Indexes486634 -Node: Builtin Index487088 -Node: Reserved Word Index493915 -Node: Variable Index496363 -Node: Function Index512260 -Node: Concept Index525770 +Node: Top897 +Node: Introduction2817 +Node: What is Bash?3033 +Node: What is a shell?4147 +Node: Definitions6685 +Node: Basic Shell Features9636 +Node: Shell Syntax10855 +Node: Shell Operation11881 +Node: Quoting13174 +Node: Escape Character14478 +Node: Single Quotes14963 +Node: Double Quotes15311 +Node: ANSI-C Quoting16589 +Node: Locale Translation17899 +Node: Creating Internationalized Scripts19210 +Node: Comments23327 +Node: Shell Commands23945 +Node: Reserved Words24883 +Node: Simple Commands25639 +Node: Pipelines26293 +Node: Lists29252 +Node: Compound Commands31047 +Node: Looping Constructs32059 +Node: Conditional Constructs34554 +Node: Command Grouping48898 +Node: Coprocesses50376 +Node: GNU Parallel53039 +Node: Shell Functions53956 +Node: Shell Parameters61247 +Node: Positional Parameters65635 +Node: Special Parameters66537 +Node: Shell Expansions69751 +Node: Brace Expansion71878 +Node: Tilde Expansion74612 +Node: Shell Parameter Expansion77233 +Node: Command Substitution95099 +Node: Arithmetic Expansion96454 +Node: Process Substitution97422 +Node: Word Splitting98542 +Node: Filename Expansion100486 +Node: Pattern Matching103235 +Node: Quote Removal107843 +Node: Redirections108138 +Node: Executing Commands117798 +Node: Simple Command Expansion118468 +Node: Command Search and Execution120578 +Node: Command Execution Environment122956 +Node: Environment125991 +Node: Exit Status127654 +Node: Signals129438 +Node: Shell Scripts132887 +Node: Shell Builtin Commands135914 +Node: Bourne Shell Builtins137952 +Node: Bash Builtins159413 +Node: Modifying Shell Behavior190269 +Node: The Set Builtin190614 +Node: The Shopt Builtin201215 +Node: Special Builtins217127 +Node: Shell Variables218106 +Node: Bourne Shell Variables218543 +Node: Bash Variables220647 +Node: Bash Features253463 +Node: Invoking Bash254476 +Node: Bash Startup Files260489 +Node: Interactive Shells265592 +Node: What is an Interactive Shell?266002 +Node: Is this Shell Interactive?266651 +Node: Interactive Shell Behavior267466 +Node: Bash Conditional Expressions271095 +Node: Shell Arithmetic275737 +Node: Aliases278681 +Node: Arrays281294 +Node: The Directory Stack287541 +Node: Directory Stack Builtins288325 +Node: Controlling the Prompt292585 +Node: The Restricted Shell295550 +Node: Bash POSIX Mode298160 +Node: Shell Compatibility Mode309433 +Node: Job Control317462 +Node: Job Control Basics317922 +Node: Job Control Builtins322924 +Node: Job Control Variables328324 +Node: Command Line Editing329480 +Node: Introduction and Notation331151 +Node: Readline Interaction332774 +Node: Readline Bare Essentials333965 +Node: Readline Movement Commands335748 +Node: Readline Killing Commands336708 +Node: Readline Arguments338626 +Node: Searching339670 +Node: Readline Init File341856 +Node: Readline Init File Syntax343117 +Node: Conditional Init Constructs364605 +Node: Sample Init File368801 +Node: Bindable Readline Commands371925 +Node: Commands For Moving373129 +Node: Commands For History375180 +Node: Commands For Text380174 +Node: Commands For Killing383823 +Node: Numeric Arguments386856 +Node: Commands For Completion387995 +Node: Keyboard Macros392186 +Node: Miscellaneous Commands392873 +Node: Readline vi Mode398812 +Node: Programmable Completion399719 +Node: Programmable Completion Builtins407499 +Node: A Programmable Completion Example418194 +Node: Using History Interactively423441 +Node: Bash History Facilities424125 +Node: Bash History Builtins427130 +Node: History Interaction432138 +Node: Event Designators435758 +Node: Word Designators437112 +Node: Modifiers438872 +Node: Installing Bash440683 +Node: Basic Installation441820 +Node: Compilers and Options445542 +Node: Compiling For Multiple Architectures446283 +Node: Installation Names447976 +Node: Specifying the System Type450085 +Node: Sharing Defaults450801 +Node: Operation Controls451474 +Node: Optional Features452432 +Node: Reporting Bugs463650 +Node: Major Differences From The Bourne Shell464925 +Node: GNU Free Documentation License481775 +Node: Indexes506952 +Node: Builtin Index507406 +Node: Reserved Word Index514233 +Node: Variable Index516681 +Node: Function Index533173 +Node: Concept Index546957  End Tag Table diff --git a/doc/bashref.pdf b/doc/bashref.pdf index 50b64fbae5b2045fe6516b54da269560bbae3aaa..ba71927e6ece62b8d4c98e37789d8c3ce7bb1953 100644 GIT binary patch delta 536933 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 z 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 O;c`?00y-wTRQ~}dUH$B} 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

    J-9w^Tk>F!6+ z3EwLIb*{1^qlSn_<;Ip&eC=+G!Fpn_sR!EtjUYR8W zrhh$So@r&SCU}cpG#-C?rhpZ9#ZZOkN$_#)Kmb743Aehu*>zDcdp%wumxr=RX5ck%nYXlEvSCio9v$mnzDmTW7GY9h6oodmyzeinJDYgU+5ZBLG^uC~r#mg7<2Sk~8riEuh zF;DVa(=Ye)t03njMAOs` zYVdSJ^tf~;crGK3E`AaIzFZwuCtZn58L>=ZVGOe9gOQq<&IduUf&epeu=Q?Vf4$%T zVe5+~$x*%rkYG4iv^}`06Mkh1!6?HyE0vIzH0HbSDeCr)jDZ{m=ru?e>SNnNYgSs-p`Tl29$;f3jt2xPZ53}k!n+23J zIpbVA(gQJz$jANpx~SY=>$xWF7`-vK3KGY^#2u{j=fL&31 z?4`XzYQ9v-@Q^-YBvEZ*@!^k;o$EhyF@KHGUBvl`6{W|y4{m)Dc0X6%>1X&;f2Bku`c zGR5Cuow!U+?u(Qy>X-+XtUc!~mBI$>w%n3?u^hT%+)0{{wy}@@betonj7EBgOae1M z6l&4$YyKo*oS5msvqMLfWKed}&<8$|qL$3{*dF0wdR~~oZ?|6;U%WK(_z_7CZw{{L z*CORs;BN$MFt)VE&fkf7MH-CYoq$DK%7<bxO+w0!(9`-0`&IizM@mdV!NI&3n38wAdJXx-BMnST?zB4OmF+3+{aX_b2YqFW6e~^I{X=?CgPvQ3Uyf$c#NW(t@9H!+3!%oi2 zAbj|ty((hg&qAUM5U>YFS3rM_x4|3Z`Y;}?JiS77RJI^ftC)?hv$qNqKQ7*kC^-y$cRaX7rDVNFgZ*>CgLVT^TAeXVj z)`w=H1VPMq;jHNLCXr_-rQlQ^%ow(M9xIZ`ejx5N`3l+F&)#B?M51LrL~zp^?{mOev**64%J)39lcop(H|{k&{~w$ahF%Kfu(7{|-oeEZmPOdRSMj1~y3ztrIJVm+^GPaR(!!*0HTkLa4OsXz%!kM{ljX|2OeU*{vmZSF)bCiDS3F4g zX6(+rO7vqF28`BYGtADZoD}&;nW$@Osyqd}!Q9z*Z`cSK&Vrj>PvU;`q$)$wu+yok ztC)c)*;VcuA<9rgW8V<*L4}wccbcz1oeXyt|EmQP#svTG*K)3uyI4>f;1HgE%*OED zR?j{P1`K58^5)UKDg1z+>R|AL5=2uZAGyb_bOkzogqqa2<z#f!dH?CYy_+Xy$I|s(G}O=M2i=&1F36?=3Gnst{ON~qbqizipUUzz$3DtynotRQ6Y;ahJn-usY`6Kf`5%(~*# zEn-cO2w(sFJ}c1_^o3(9lJ(f;n|Zm1Lc5$=Y&v|F_~sYy0u^KGI~J1-YbtziYxq&h@dk4O z<64_`_Svqh^wZlF;Ed}p8C8Qp5Ic>pi9C5h4S&B;s8EH*xN@>&g(pJw#5+4_BwGy& z{BF3j@a>@jI_6ABVs*~R+MC6}gEP{Azm>dWasJOhXCwH+XhxJ0m+=H~Vk9x7iX#<7 z_AO?CjBsu>uVZL}r#S8l7!#w{cy?q5$m|LW!z&@LOqt$KrTnYK-5KeS5bg9e_zYo^ zTH;=V3HuqSxxWn1$dsXSMW3QukwvcMJIB;c38%=K;~&S3C7n67&GD0xm+ zn3`FJU3%H6zrTirT$HdP2U z;Em7Y$!ohjomD)L&56aY=$YjkcD23TJP>U}h+pPn08d+dUmV}Ol%^CqXG<=Q0} zp7Z#vw$rPMzuS@j+BOA`I*)w@d7AfIt1uebJA0zrZI9D!FC`mMuw!H*Jb_S0_{weO zR{?0x>=X%!*Y2co0JC2xImmGC@xv5Ka2#<`enD3}Vr41(X1s>5es`7ES)@x%E3n8* zV$e}&=osHw24D6TW%=zB$Am?U-3hz)h7aa4;b;I%ACW;oo$+s|x|#t3acW|F67k9*+Fk zA$muLcLabpvk;ZHdTpk<1_bvnEuhjz)Fs?X=K8^Ah0k>&p2oYWR~atPAe1*`yrzL` zGAP~Ez^;gk=z>ElryaDjRtFCZ1&aCtw!S_`7f+JdPcA*d8CNoRiRLckz1DQq2;}>s zkhIFRo_8cw8e^qmClUj5M<9GHqr+N=Yc;M(a=2Wmu2+L^O&U^qBawpNDG+vYBSUMn zr&vH6s@vKN#|ofPuU^eKSzj8g{i62ddbeF|_ny~rsTDPk6NfdV7gdc$ktH=LM&-~i zopnV*SBSB7c-VpXX74VA4)X z^%O^JgmS~$_UdZMF(iJrfj$*Gq;+R2C5a|iJTB#jpcG}?a)KQO@U}sZJCT(E2Z{+q3ca5P@j&F& z+uC}aUDQ0nHS@ukRK9FMS^qptL(J(-p;rP-*E>o7E zxR;=MY!M8;vTXvK^${6`wi#il+hm32d{W>;crgrc%U}8}m$<12_~oTw@5^o-cv3>r zWPSk||B=CYp#v((fwZQo{^(y$B%~${hx-iUtTW@22=#CEum=Fj(Qd&Ya4=0&1>4l7wOBO*JOsX zjd;IJep}?e*t9yuMgN|tYbx)BEcIwM3L(5l`-PGnPNvUh+f7r+hG`vtoZB(0B<5Gf zGZgaMk~l_v!NHbwTN0PWc7>kO=-yvo%Re|gl&vxH6gUPHIbU3x!4xCW$xaXBEixrv zGF@;@b>y`(iO+e-{aZOF9~kFd6yBqfS+ru05ydVaiO&H7D`DMlK9#AaxLU>;gMrZ4 z3s;f@i?XsFovr$|C);%;@P~`tNlGWcR8c&#PuqcoG|4qSHGQSMPZn}X)hSYw0*$&I z=QNB+0%+PKA2ZjumAILWF9Kuz8RjhzE$J+4emTXUXn8z*)c$tmD^)=PVm+`gHU*j;lg5J#fy z`zZB}OKjFG7@Vp^c}r-hoW<-dJ;P2p1MYmF9pZ~aw9^=q4a;QDo3W3f`C_N2i=PL@EB7_5VSxpNtBN1O^+v zX&#L8zidu?$ zR1G9X>d<7|mo*%QKkZAsbNK^Mk2^Y|}<_?tLiu#5tP8{6{^^Ekq-zz9?hyM`yT zTqv6}%)k3m**0qd%Rv}^kAha3!s|&kpQ19jySJ%qC#FUev7O2I!#aLST{)}QD_yW$ zcebC!qe+l@g;zC=oPVn&Gb_Gn&`sggh)Pc+2an?}2(QC;W?%Ar%3FyKDzS4)a_|AnI*N)H#W5OMJo2Ur^k!< z>#B|m$-HHa7Fa~~^kh-d6mEd+(^OF97GtizaDPRqs;rGrQhmv(Teh$%CS&K@@iP+1 z`SJ@b~6nLol$Ig>VEfd61YC{9XjwF1Q ztW7E-LO#>3nKEf^qnt5gA6B}F(vubKP-$unq6!wjB)jhqav^G2fg(Oh!PT=1J6fci z6na*A`=wVqCtq?DPnPuTs8%7A!Jg6|WSbjF1(plr^#h>*@XDBA(VBc@^4R#752xIr znsDj&dZ3<;e?5=FLx)=AYCvl?Cj`_s)GS?dtPA-#r z&u;f9JuP*0d`{-OU#!{$okc^!bM}wDga+G(rIp&L_qgE0H`=o8Af70fs`TTRe{3_N zY!QEy$@vQ8k*yfT?sP8{F07ZkVQmi2w>liZ$R(u$Ir@5KR%fW& zq>=X3H%;GiKQm9j09ssbz#=2L3NbN!G_q(D-TAv>Vn^6}Gd@a+21|K`Z!RVrF%T#p zR1CAWFs%AJ7E6z9n2?G@k3iUI5?!zZ5BS#w%mk!|Tp}h3jE<1H_x* zn?5%B4*HXFDeVD23nqmwt}-}acUmvBR@r5;KabyEIehePIQkz*p^Da{n$~VSI&fM? zZCpK*vW#=(SZxLQ?}zbJZ40ez7GTB}-ADR@Z(Y;pF3+{P)NWd>_Zvg7Nm}Bxoe!ar zhn)Z?9hx4znM0EtE6Z@aRYjQJ$Uc9K9HlxLfUV3c;zuIY5WOD-S?a6;wTYLc{47wA zrd2R+*}YcRnkBG0>rK-CMe}$X1cU_X(0^Op{}=NLHR4`=Wrds~gQ%38E%Q%QnSZ2p zbi~Zr9?t$M+?W)GR~uEkFcsFgQ7}FPYU20V@9!TdxIiK$AXYba6d#*1P~<=(Wq~~ z_sD!k>e$nMU4JemWiU%*>@ZkfMgG^V&JBtlfBThkzROwO?~}DUqGEnIW7BqB46N#B+^grEC#s(|nAgpMxa~mqK_Z{7;f;I$AmBrCuh2j2wY{((VxY0*`iSm+Xo^&c8_3Jg~%`Q>l9UBKVM^d zwN$^|OMh*0EySVm(9$$>LZ}cfX9N(m&tF3E3pFk^psgLMK(Lz>3h+Y-1;wpNOisNM8L4+WXh31zHQUZP7EoEC zxHYvV`lN#9q{?iSnfDZg1ru<|T6pd@qwT{c#3vnL;(Y5N#F`r+k|2|ryLaj-O6eOR zLWU*z0nr7&I~CIJ*^C9OPE$^Y28H65ag(A1jCf%7I-Le4MS%Uijk8WVUwn_BID*}D zuW#X5sNm1tmAPHeCX7bT;0y;D(L_MP2ZS;cP4t z&WkEr%pAA>jlUvWLo$6i5r^m#d^9uj<=EDZiQ@sp&eC(x*N0=#41|8at~hvPpWsM} z`P{eMMvGiOV4%I=2Ec!#bfTOWi?Gp7r!oSstZiorZfTstR+8)EK~Frp0zQmBj|trBXB>Z zBcP9qZh#~$U54XJU~e{ODESPSC8iR!MslbNRD(}HE-#`ybi0`fS-I9<_656 zUK3}FI|8`m$t?biI^~_#FRvFWj+AV?kpZilQfzHG%2(gDwJDRZq^iD)$#>s>+omqi zrFqjg%Ed!*H-On#t2m0661<5iztUe%;~K9yHY$WT9XKgE^%60S(Z5@c`0!MfX+$|E zjc`mmw1Bhsci>Ex@M(;FX$5j1?g2LRKgBT7){KQ8MaV{mfwKP61^Gv#FLCR-I3a=B z_?TLyFY@LFy+Fia=axCb(c(j2--rUUxJ@Ia-?3ZrFJ?=A3OhLj+t!cNUGb(eSxC2(Ss(E8D z4%WT-<4SwpRqlcnG>sw5rSd9M?AF+YJ-+6e@Y$u6#*CMHD7=7wYKEp0 zTPLPIiLAV2YuyD02f*3!?kqIHL@S)StqHz!E@jkKMq{!%-dHQQgxXeI-~-?h@HS>} z6i`bStA2To7wHn081-gSxd8SyEx9rq1@Q)XG95>zBKt8s1s{0PA}O7L?%9N(;kbPD zmf@44YUq|9BYc)K5)t7U+3Dh?RfVYS8E5gb!T9U~CPQo0eLKENMk5%X1=ctu1TSv^ zV9H2A&woT14xeDdpb^?BZK8dxh}$D>>SHW72)Eu#?(xZ3ly5E31OYr*zgo>x8H=C@ zo%0`~#o@pb=8tzRSgA(^a75_|SVmdH0jB;R+L)kaY*gU~SqR`ML#AQ7oc3}uzu-W0SuV|9+qFLXWK`3qal+sE<^IK4 zT;AlxB}@brPZGvCC1B5 zL&>gqG{{FtZZ;s%;M39;jwUk@?UlhpEAQCS+#Q{X7ehu0y_k06H9mp*xv&-pLH4`_ zJfM)Go2KFp_Y;Q0jm-s^3Ax&Sgl1?3w#xqYR3XmPJeg^hrvvgPMN{R~=k}_kRb^J= zC@@P%ooROOgCH$g-p2kyTc5S&6EZ>}Gso;M{6K!>@4q@d40CMU!U(wS!N45>KW}|W zg>3*Q&_QnUXjA>vzA5nbr-kPVIr+R~jsP++5+b`i)MyJ2AqIEP>B;$M$E7}>S<%7DwSTYL6j*=2 z&<5W9Y>m<)5q3%cGCkr~x%l?=iG)VE&ISE0z#MH{T>uvSHJZ8BywpQtDp(=luK6HR z$A@u7MUpX1B?gePI*3 zY<_gz>Ftci|MDu@joz+n;-f7owYCco{;}3jl>m@%BJR!8k^3zXv!a5@?M5Hg5dJ&F zVI=|!d^SNaaiWln`nnil>|(1}deFrDO3jdA?2((x)KVnm+BQn!FQC*X+7QC@T<2ha z#GXk0pi2=h)P^H3cNmOsrPyd5J0d|C`8Ncpd7DlHr{D|20!8h~fWNsSqkU1``2~jG z{vi9WN}v6|iXcw*|KlsXtaItG)rS0=+dJ?|y}>aViP)`zw=vXBTO*~E?>3L2;C*~E z(K#@_kXsycoe%J}k|N;oTxgNb!4!|(<+-) zq@Q$Nms9`#_)=YFX71KFW2bm?xtaIsz@}hGlPzC-FB9haxg7tI3h^YVZ+lR+USzdi z)MI8qSN564@`>ZjZA>wv3ss#iZ1rBN5hK8d%gBg!4c>;l3NN#h*=#FV-#3Dsu+VMw zYcDe95%KVbJvawoLrIjKp;z-=RAdpd7|Of&d4&Y_WKK4q3dt2$YDor;a<`7_=b zp{wV|s~Y;V#mU&Zvc_mvd^&py!)a=eweGyQTd~N9?{0G?UX%KNTxyGm-)*8~894idKbxjWX_d00RH8W9D54EisKub{c!UFXruD z-{w^U3_JaPJuk+CpAq-vSFlphplQXJUCLP33;l7GEP0iDE^g|PA$}4;SWAV7$4^a1 zMJr0s9{4P1_G3ppobbZ1#xo|CLy$Y5YQ6GjM%Dl}(joG;W79lGdq=3eHlso>LcJS_ zaj7B(si#%(<68!ji?Y?RD(K4_G1<7JaO&{%B(NdCOkVM_B=8sqa!RdyvRc_b+ueo> z_5#cHG?E2IqXSV{8Bn1XqbaBb={3iYp$FluA`#j%X(1%e{s?|tAtZf`D3Zi%^H9!P&a_>_pZn=7P0ihq zt&pjt`GJ3xAdGGFwiDLydZw|IRh)zE>VwRdy-_j>=+xyH}zlt{ljIF`-8CN#;1T1a1c^lc$`$VpG`NG64{tF(5Kx^Dn3{ zLyKa!9Z|ypj|n&gL%ATcnQR2C`y9j`OFf0r9xT)}@xEdrC8%rad$S!TpCSwK`{5fM zYie8yM8;ZJg-zBbas^mk0b2}~DXPM-KXeG$1p^jwzUPH>uP@)J(6_L%<&=Vv2v-3S z-FR~}xGZ>H`$&&HXUDEa3ZS_lz8_N+Ek~^ECH&-%@^a09quJ$luf|~i5%jo7AvtV` z*}ZtVV6M0@;9N=SgYxG6=U&t>q+&5>xV{!|#>J`48#cny!Md_;jLR(Ez)aWf-ySd= z?{|XtCQMS>!o!iw&`?RW#WARMc8{URCdtc}UN7AJAb0Tx!4cfEFkl~=!lgDLP568| z&fD13dZgcf*5qQl;A#Si-5DdTbZN>Sg<8zJ7F_dRCMOcz%%+zU4wXPo?$wNbL?TCd zsdUMeZm36E@~r)7&~SNcvFWDft8o4v9e(AMKhWdS_Ko=*Xn{c(8cQCfU5C9wtC5WK zUnVC$t5u2Crfd1?EC8Xc&nBF{-DanCT>nDTYmNYcZKwV1gwZnKs$#^BD>t*+=2bGr z%3-7Q5cztm>6R!InD)pCZ+p?aKu_c7D!N<~ZG2Wwk~~AbHKRL6zxG#Bt_dxwFU|XhaxImot1?KiPJTF2MgbV{QGNRz}fq+WU^_lMm>r3*CsfKT--}+o_rGemHPNkFIZ-7&XwpC4l*A z>16t2kD?+160yie2$iBmrzzm9V+aZc-XE4kl0nyz2|zMTM;jmd*jOkCnAQFWtvO*u z;#$ITwjf9zY=O&Y#Y4@tX|b9xC3ts?iX@q}zRagWJ2d@51n}-h4sX?Ftka_0aHk6t z;Qke9ogGi%MkOr{@t9%-9$z5gZ3GTQgJ}u`!Pr35Jki&u>y-g!J0ZZC`~+@%%AfC# zIpAX*1yt-oWje=}P`L#e(xDg?azs=<(?sd!6+k#yi>3bn{Q<=L1k5bin7C9}Bej;R z2yGoh9$x0O+yV2YOvm!+ic7{IH`D{ufNG&RpR5_wirFBOhCzhz@;5;MjO0AX*?9){ zTDCdS>ptg+kb1&P`67C3tl+%_*=8Cgur^Y@0WFnsZlG{wTA_l*`<>r!GsYQOtLlPu zzQ?p9oaqzua)K79O>MQ0<_y|Z58QmJH?U6A$$sg=&3`SW09ViaF^U4a(n*}!XG8H) zmzV@ET(lz~dxnbRG%L`>+G*GH)L;!q{R>>BR=)VHUV0eX6Al|UE65jB$lBR=)`Wem zfYiX+SuzuFqJQ*|OO_MBP?Dw78wu!BbBFDDKM;cn^aw-FV(?}Dv9a%J78EGpjaIrn+tc#JB|skA@IQWdrpZ&AOX5nNeV z;z3Z3AXJWt{Z|eqYzBNVLyZHNS$QPH02|icuU+YI#_+Msu~Ra$n37*c-I$bd2fz%= z`x4k$(YNB!b7fvm*jj}*mnRmI{Byh2}$ZR0Y9z^!@#?M6a2 zqiKA9uTrW)t%9Xe#aWy2s6S&U%w$L{zO0PmOw~5o?C5e1l5)U|2lwIrXW?R3>8K6k z&=g^O!WOPo*B|#;-S2|<+F}4FZ0)PTwok!-08smO)7<~!U5@|#l?uYel(s(r_CH#u z_1LYp`)xz!vB4S~$4QcMR%ndyV7EO!uy9rfr+_gOADzHh1L^B~qOsmmh6|kLQ3MPq zIJu-@lX@*qSq%^1FI5k1$26=%OJi?Mwpx&&7eo)fx4TkJnY-8kPd%faZou=2KH7G9 z-)xZF_I6%s@y%psuMdFlG;RJR3{b>8!rIG^H^}s`b0VtFbmm~GyUOS5Ar)i!c)zi^ z@3>@~EuI^J@Z0wLSebWANkCHFo1i`9o3Y6S?`JM@(lS1Jkgs|hjTaJl{}9$?9fnM~ zfjgtG=ut4frg=ShhhxEW#}jA(3G~2p`}viRdi!V3%R|S`>_gp0i6AxM|u(z zR~hoEq`RZ;af3whf)fgsCO~soIi?TJ_z+SE->pbAJJiU>eGIxaFv{<+Lw=8M3nN5C zg-BE&Du^KFH4^uAD1%mE4gFLnMcy$fVkCpj7D=i|?DAATjhlsGz3Cgp;`EeCl2Am60;B9666vfnHYC22Yl!YjhB>)?9%6XEqccc3>GN; z&;|7)Q{ju}X;7yWM(FjytYmDLv4_3ajNVm$xJxa!U)*JI0jL<0{+hg_xbkq`PF*e% zsV(a?&Sdk7kU?M}iS6y?R|e7vn1In@!4QGc&kLM7CUVv41!8#6fJi2Kc0{HXhqAI$Qdk z4q_Zzxn#S1NZ_eTXEIPv)rb~qZ{UF%K=M~kO~VrKja5$up-Zs}q_lAY-o>LKSq5WS zoDZ(g?`^4-&ak+!W;MHBq>4Pos2SEse0DauRppHG0k>R#t0GMZ$%HVu% z2nIh%OnNE5!9HS>Nv?XXQ8TCozjJHG0DftpT!&w8+#MUA#5+X+koX>Nt|V`2CR3%E z0i@WNZ!~8l{7;t|0pQlLDGAAp1hU{FYK8-|7TNUhOqo_Pm=LEK!6fm4wkFYe&9sCi zXcv||fK6~#h?QU-C-MMKtWDMMJ{mzOFTGg15fzN(UlI!{k=G%!RalT^+XN{B;CQn> zH(Z1x87Hzhm5K&6ICWtrbfn)MS@;CPzp5a=zTreuuXa0Y`a#5SgJZ_Omc2w;bD%!5 z!DBwVEVV|PppAw{!NZXp$FN9KCwk)dw$=JwfcFJZ?OYtN%)URgfg6mW-O-#C8EiS8 zpXb9tmtmw@6c$-6TjXgU-ZZiPzwk?U1HvQ+cSc0PaupVYs-!F)p|U*gdy45e+p1eQCd9Dd6~I z@-&Ofu`pe|J=_XoG@3+>Tq@3Z7f?qq6HDY}rM3=r6~)B&4O?eK$|NfV3Ka?^v)B`w ztjR)b=FAKFHBj_H(L7H0W09frH%zEw#1(M=bxw0lpwv_zgfe9#yyTC=J}EahK!fS9 z^R5N~{HmPh-Zk_lS8Eiw9FLY(qn^6hKjfZk=JC4}$MyB(O9-K5jT{c%2pfN~16T9E z0i$?!6Ch$_IiMn|YDHZ)byQ@2(@*U%H}&tqS;bekajiCgyY_C7(9Vhnm@uG0jdD1R zhu48mo>;;}+{>K%PY1)H zal&X*iI&DfH4FC?n$=6d4sL5;idti6JcCw3OcD0kVxQ&cf0@{&@rEZHh(SCyyFD4# zU^I)Sukym%Qke>!F_btvXpBmDWPA8kl^ZGC9lEvbM8N7LP)?{SnhDSD0NNsknpcf$ z<(n+*=u>na=dD#m_Gi?oxAeW8r@2~9RC-P=US`;s@{V;q2tX|;F>k_c8%?5)my<-) zS0~MP6~z{KT!WtO)A_aBYo?*Insy*pDhY=dQVA-^9D0Jrnq!}7r0R~eps8j3K)rc= z=^+D4sVFq2>SSj;8XOg*inR{vTn%+fLCyKHETjK~U>c4Ifz`;aS9Nb%ssTF# zj|aKW@q_f5YfUI6`SlhiTas6|MRe=CV`^Bj`Q`b?yc>vl?e%93V7GoNWc>qHb}+qM zAA3fBbQm^`H!-S*q`^Sm7}!OQma{wrw5p>X5)C7}S0YbPsf)L`;1qAtfBe4u*L(3+ z@9ayvio+i!ewqFPSk&-n07h)mTs`aKerq1Qwz8mPtq4!TzoG=F81Nx{EnZ#(6J1N% zcoLA4@u7MH9PJMYQ0<1}?I*bcb6M*@7-O+Q_cBsQ2n$;{-#{UQuRXs;UChmmaLSsI z3q2cY44F_EE<+KNu@844r^B9sU%&pw8ueze`kU*x~hc{0OvajTq@#Sv?^bVXd z$9xmbUxxS0QD(Y-50Rep(P#kszZ=n)h3ce?Y52*9|2d!p1pXKnL)HE%Z;Q<4iJg7V zOwW`f-Lp!W4AleGoae>WsCO>8NqE8{5mb139C*iVEWbPL0jK-&Zl^rrhpdr~cJ+Jc z7jG&zygfLK#fu4CO_J`>jQuHeBXr=)2(C~_636A2@9ux#OePQn+Plc6#2Y!l1>S%q z;m@_3B(+BdkPtlMBfH{Lg@Tl!6pJedjO$r4kAo_&rHD5iU$ZI5n_Xv`Gp)IMJJJ8D z9d0r!Ke_82GI}d4{@wqBWk-7H4Al0plo3K51uv=gXV3v)w;2KQqE${Q&q&1WSm$GR zy5dz~)?BppaBaow@LGx%rk- zD$#z%)e~y6R|=Wlt$lt;o>y+{#bZ1GUc~LY5IpvUxx2evp3fs2DRSZo7|w2uQTp3z zm9OK7pAP`GrETw`W`(EL%NS;k_nxaP`i!5JT0}_e9_>?}^2zsqvxTs^2D}tU}6w#aZ)}6jyq@PxgjA^DnNWnaenA+S2=VY$t}3 zW_iehGjUypsCj6RQafhJm{wNun`vU4O&0laLHSsuK>bxoWgRx!t%amYvUbe1BmE`M;XtJK4w~aEiEW5E%>)j zUtKED;ANQPx9J{_V{nB$@g2*v^>v3jy9xO4(2c$_e9Mb7eM2eEt^DOL{vj+ggj0LR zQel;qnr0EQ9z_B-4Je}p5$neiM$6?BGuD%B^a(Fq7e%{r2^RrolG$J0{e41p>ye-) zc5P;sF-sN7cwB$MpTDWGMQ|KIAvZ;`ioO^UeDLbN-s3u{A9|X{UL+6#8;*Is6CJqw1g@)SZ z3sn7v1@BzLIy)Vo!n!YXdJg|-YaSp(X{>^v07vRhivS@{nSvRadk>CY#SA8Z{|G%k zPe&a2PXaX8w_Qo1#~D%adg%%_)zD%?NB;MC5S2IQrZU#r%~|U`g72azFy;AqM(T0l zu;?c$Qjmj4V4ul^4=9A$Em8<6*pKEF`Z+GJGd1$J`CV@aYI$C zSqfR{(B8~APC1>tFT|S4jYR%&ogpst02$1z;jtNn3`D6IM!XUcHTv+P|F16LOM==w z$hGXLSb?O5VQK;MEvZ3cGR?|g-~Op@AU+*;Jo7bb!bEw-fq^oh6eP?j_A>~-s$z>q zUB3KcG={V|2^}cisTmko4_iQ3ydh9!JCgF0=W|Oxkv4A4hfl+eBMgqd0wj(eVXvjsVP2`5h zhn)at$MDff63sZYcf;91hjM2=F!$vAR6f3`H`HEvas&&W_j#^m4toI1vilWLjh!7q z#Wf!~_10Og=B9-T%YJlcg`Md$p3ma}#0(`6b&Br=jsi8`8`nPODm=SrX;Ne@uk6JH zwz2+;Rl6C<^g)LPS>_z~F$|90Y8fO~W*xskVOa}vaWmOIj{cC5cA^cgH(OM@#sZ9X zS*i8rxVBwzr?%at2?OAzR@TQfT9|#pG2f~-Rt|-GUuuZj_dlH~vDD%a^=)RW(yb7z zbHjXPIhrE}9*uj$?s%NvRWc`O(x$0`uZkh9UN?rC}w(x+6 zj{FUstUiZW9}QNTfS zbBZeqp5;Ff7St*;wg!A!GVOH>e67iP35F>satDtvE&!zGVB>*CX;Ga>Sw2b7_mgWc zyfA=X*d&Ad#{BKsUtk4H{v|`qF_B_TVO60OLB{>n5|Pr`?g%V)|8wFs27_A;M@~nb z`k$nvpT*+ep24IaFsZq|`Y&bJTN&Z?_x%0$R%ww?xbDGSU%u?QmAg*kxb>0N&W7DM z(IAr{OhDjwJ-!y$CsR~@hL+g-VW9R<=M!CFx`H362{PdVNmTJ;j*lxY%f4O}c1ji- zsb5m`F>%lKyrxV}a_L>gfG(P!{E`9H!EKvHX`WI9OyM-kbFoZvf}9#RAjFx+cW=oh zYUX*iS%p)dh#S>;OS% zpY}{q(!m3BSKb7jU}!r|MB;>G`t;%$)>SV$#D==`_fzHO`M_@x zI-^pSI1FI^$!TzoHTwVAL;R<5FtLW==HyC3&Zj`+W@Uz9lry)tbhRR4Vdnln7V$dD z4!GP1{;#!jhucwfDrn@u!ywb{jctSUb2cB29^C?-s-~uF&7h;&O}{?^6NlSF?k1Ka z@HfMQQ&wV;A5wlt#THKe>hiH{2RitedM=J4A(b6u;F``lV4Cis=&M)OkqnxW#F&^) zdEsVg_aMp*3CJR$0q5aS)1mzXN&tuvN@rRQ6`N{+4zpzZI+eH_rEwz8a`BN$cu4@3N(plD6-xD}dYaZ0(m)M!s&L@F z#L$T_48uPoo^(BxKd(%(Eio|B+SYX*+C&lExWS7^@{p3HOLW7LDK6 zRL7Tg%4*O)`?Dal0xv7Q6z>fc=vHq~`5!8|gkU=z(0`D7vb|sSgK8^S^1XKop-%N&ZK@gV&Yi_fzYvuLZd+6l>O7g#Z|+p_ zIKIi;d_Fu2BfQC2I|1OvFy8p#$*^8Gy1kD_Fzvq{555OtcH4Tp3>YYP?SC)wn_3NGkN%mr9KpVjXq-v9 zmd&caTJvXZ8GLg}adl?t*IGOVeuOqE4lgJ?fn-zWQ%l?{zW{3A;j(!1GJm2f&!3;q z;p)w#)j~$qFd3Sf)?|Xl~ z35#hbTkZWl`~ctg5zJirei9SBY_VEhIW>qQIi$Sotg{KP6W(9#|Au42$uPzMn3wc{^<>`$%}9>l}B%(mRJVJN^?PT2@wtq}5Vfdt~)Q zd&0ylc-ein#Uy85w=+L}_m?;ekIT+Z16ruiJ66g{fLX3%xGlN$MPgS&JqAn8N>rmx z2|}Ui^kqnPcS->;Kj34z;mZ3WJwJ5W&m-6}cy&**>()Jo$6d@k%g5c!UneMANzI6` zA{!exuDZBqFJVwY^cWu!sPl3ryD-$7;Gnboxr#1S9rh>q>IJ88oX+@(?Pk|io^)BV zko0+003JSYfq5H-vf*>W;h}{$cNUvt|J8WfxpfB~f_=QdVayZo7P3!(kz`$WI=BQ$ zmBm^*aYon3Q!#caky^r7ut1>i;CmTiAGy*YmZ(JjwP4$iSF08~&At7H`TggScRnyM zgw{9)D+>K@KUonP;p9(f-fT^&OWStz+xg`*z|24D(1o{$7C-j3nwbi=-{KJ&_{TC{ z0PbQG1aRl1{b(;&+QY2>FY26y&m9<7pn!fqpL9i^5rb$0{0 zK2y)10IxTD)pqTmHB&e)X}>7i>TZsd=*cl!$e~}_4NC-UPHWH%lIwLQNU&fTl@o0M zfG}$v6KxtF9M}Px)0|T6u>k#tG&{gHFoont$=J)T8}G=(#(^yFB2ec*EkaAFUqiNw zmv zP{Y#&%`IW4<50AS@^DIeq&EQ`{1^yIVQgFgh=_lunY}dD)RZTuPWzfYn6WV^qV3o}*loZ&_pO%KUDS%H8I`r%eX?kzQJCBX0{mV#kAs7@f&i)WsED{b?6-s&3yM znCgjXMGXg(=`JLjwW$AaGDA^4NijcpH{yxmu)7AIWS%prR>2t8B*I~N^VC!-KvEEZ zpP)})y9sIF#SBYkW*DyxP_5p}vLRHuL%E!sGmHu~(Weq>tW$jHg*4jNn}D6a9THf2 z`K4HcNWLxi1edMvII6dMLy!OpCl2~*jYDQ4`GERMTdgS=4n)C2!fgk?Fg4I=mSX)IYQqIW%&r^U6j(sOjP$SC ziXYm#%U01-Z(ZZ3>Ws3{e%vYA{{vi0+pcMy9bF?G{3s!&lpfKEL2?;v-N167nd z*zXWcltzS#amnKH%Ntok<8>)I{EqLhSlt!`7$@quLv5b#^F(?|_yFC+(1karx|@F0 z4*2f%qpBgGG7xPAj>~(hj9I1csC;tvW^(ALie<4*E!efrA`fFz00q)I_26q@Ce%Uf+-y zq{C+y!$V6SC2AMJ$Ku=~*2y0xOt1A8`6x-P4`@69bt02SBuCGVCVqFl-9?QA;BZ`c9y9<4s0qJYC5 zx|3Q!d;w7`Z_r*Kp~I{E=;!Kt0%dj7ETeG4x7WmFjkUFogF9ZiEe8vzMDyuZIHEZt63viyTE1C>a z7PVL_-ci?j})Vw76%AS|Bf-DIsE%Tvoq6GAG&hN9_$i?XLtQ*W2?@tfS^A%GVszptp7^a*X~+2= zT-_1y&G|XK85Sx*ynBE|S}I0n>XCrA4bk7=(UI$pd+fhI3OPe*@xbMC{c*et2KDCR zqFL^mA>c4*xIoj~og({ORLTRExx^kl~FQx<5a|jyyt{ z$V_`fl^1)d5>vNl;;s@X$y4-T!&Fwv5RjWEo*?R+%LNzXr>bj|gPSb30o5YTv)S6h zDkH{piLCWFWE$wcEX_uHqd_VF=*KMu z(!7fV#aXJ;Q`KjpJP<+}Kjyp&A77e*p)wy|p5rNS^OMs1CUtnr-=QB&FhmM>2~6I`qlKA4#!CuAN^>HPbqNLoQn}_9nN#)}Cr2?44}l&C;o+ z+NB}Z2DTeeXJ<`4aZ1d@ONdK=EaBc?5E~JQ&3&k!U|=@Ww3i2{!jNoAO&^x&Ito51 zL|AmwBpWwM9gAav%Y5kC80zusA!Upc*Kj25W-+D4YY6$ZJracPEo$ zOHEnXM5sej^r3UseXdz?S?*x4(NZBMH&j@mHtM#B>Y-dlG$$7RBrFQo`wlzakY|?X zCDIMblCn+$W{l%{CGtTDpY{vmaL_m}&0pe)m4@q>-ci7Bm^l`J7lRO>lVAU*@@s^m zEQ1Zm6Tngq%NgM@7}Lr9gl?b`wj*s(22uJlnz+*HAG$>v10~=Fst(gk$+Em?4@L-0 z)@0+WGgaG=-(K>fA(|a3L-t#&3j8H~Z3onh%DQ|1;$@>e%r{3s?pXLHvLwgKT`i&Z z`#JYy?i6aJ5R(D0jN*b$A$Wb;?3!bKvL1IvU5Vnn;#wM*I{eS12Ziv*(_mj`t$FVcU4dFNHe$@-s`L7w zbYI|pnL~0Wh5x(d5*ri1AzA6g?@!V4;fr(WZWmBFJ0Ale-!Zh>sn6gTa?NzW=JGsK zYO_EL1+AKbZ;I#@5jBwoVP|{tQ2Bb}qL*R=q46E;6XTdw+4r=)b$8vNNABT)h@ebL4NGbe9@O z#hPP9&FTLPbAAyDHBhl_=$Sl2As8Bb$6$tJ6Wm2brNnSQ%o7?};Yn6}dyZS;D5!@w zXD4mPO-^KZoN4J&eps3G4$mc5%Kc`jgOCZnn9Txmy?RO4ZSu2obw_Fd$vTP^csS}8 z0rL}Ie<2zZ&r;pCMO(*wN6n{K!J4*TvW80b;^{!-`|tyV42^m(e> z3Z&tweI<~3^s+pOW<4@$cXn-xZiL*lR`vo3z`QH}m+at7V~zwvOABlPqXism>((B& zAp7qc?w4vntkB&S28jn0|M3Qn1X>3@B8FC~roTlt(yd|eY5477#Z$rXD{e+~)M=vn zGBWr(xbJw9g)LLX^)*znSE)y>Vb!`pu|%lS3$SlKl=OxEly%zchtIOdl$05mmcoLjRN28K#?D#Wgj5Nqd$s zQ`Zf&ZJ*hBwe$N}D_~lsgh&a`*8Ueh%;}o0Xk*&YP(8V*(@|C0ZvjyJjT_QDw_WX% z)^EX&MMrjbh$sfYp?x-wWxi;=ELC^b1|hlAgt$%x;>G@rV8#uuXceX_^b0UW{*%CzEO$IShQwaqr*3QCXjrv zf2$K-*TAjRo^jzSFd2xK(l>k+CDd?^vi+1?LxVTK(9CusXg?Sd3@fQETh|zca1(OI z$MS^#kn}54Ao@ioyoj}xIDR+q5LogB7G5wSA=mau$N^;L;#e-2bwWl}y4Te@ zE$n9Gf%oDeNS$-75y!X)iK^poEXMD}FxN;zV%w^KNxtHC3z_({gpgta%oFFr$?aU=HE`tSec1TOL4 z7a;^0)nB&T`~YkXZe?$02CW}tNd61w`d9YqVhaWU4)aWR)ZD}wu6B0>>bG)>bP`f$ zI%-Ntl_qD9I)ys#!QF#s{nv`p27U-1qq7@R`b+Y39_8Y*zG1D|y4+HG4zouyAm4H< zo*?`7oO$=$$<092;P}AdeJodr*4=f}&l1Lf!?#vMxDEivhghsuG}97d#z9rlUpn`b zwFKleLqhv(3~Wb)g|Z|p1P?GsotuL~XPznT^z8qxH7VzRn937F`duuERbx>TQ{$mfT z0TG;6ehM(9mjf9HpOREOi%#1QeTff&)F!QK@+99dl-9z6?oPC-6PVt?^h|H|7_NoV)NY{2sJULz~`3v<#?bnvo1uM>-=yA%JkqkG)dhb_BMs zbtHH$wtb1?Ud2o;H*vk3-l~D-`TC(}?#%D*4t!}3#(#n@oB1bQfCKk9=PHnCO^T^z z*~i+{F|K3SND&n{;>HCP2AeQXQ9m2|b`4+)58|5NE?rChx41tK z=+|ng%`N4&o@wZEPWI4_OC!Zvs%)X-EK!d439vS-~@UE0H<*jj}Kjjp_2P zj2hCA962GqmCHQ~ZZ0ht;4`3q9+tnlo=-(+8o?d?ukZ2!*)zc(rfV-{2Zv5mcBPLS z^`mEFoO$M&@64N;DoeXhv&=1e#xT5gm<>2{L~p7a(`cnX@FDAj{&A=)!DnclIRMbM zMeg*1YnZDg40G&~C+1Ji3f-g}AM~=Qi(zg+9TJy&#NJY^xM%i$u}g-7ho-QNaFzpV%zMZUd8uYt>7)@*z8q zf>B{o;4ORE2ocju2-~Ez@=wj$6%SyQdaq3Gt%+{ss~#Cg-&ZH{De8cLZMJr`rIBad zTg0g(`IZ6G~6-!eWtFpeE)ttCq`a8=qu{jeYmDF0Ot-8)N>B)fFe+UYd+1$%A z7Z5Am?vAMz_>$JhLCnoMFaw?0kqn%Mk}%ad8TI0n_~+i-D!_EZ2{Hr(bqnC=-4Nj? z%4lJ2kSv`nKYaf!ok@{mpH;;i^=tnKvo>W~QnSRI23uAg9u4-(^o$EM}Xr(y1EPwr== z`S0=k#CtJH*bDqGcuV`jD;5AjgF^M!Z(cxw>1IfNFukJ|>V}setJ~!uOZ3SE3opr> zaegR9wcOWGZW{~cf-Uqtj`x1qw2;VP)+B%LDg8~`L-? z{vQ~&`{71>fBIFa8?e3l=<3yPJJrXtO-i2d^(IOrRn?Ullb~%hI60sxj{umhTzVJ2 zPJI+T|ESICfgZSX+Q0k+B@HtiH}tOpA96cH6@ugWGCv458+M$2d~i zCd?pXRG!^0IJ$2d&Hn=tffJDbTU30X3rP)#!JdpgY`YgQ+!qZP>(fG(jwl2!ehpnfVOgv4fRqUoxZSd~c4~{ge*Q(;2v`*<)tgf(C$4Sy?*R@l0 zV9C7B)qwl@Sml(t;|OSrVA>VzdS9FsuUFC5F;CIqzcN)p>|8EADi!s^_HEt4GDQJA zo<38|MjiQWbL!@Pc;1bY1`F2aNc-~Z@$S}g^0cZaq+5S~4hru0dSZD|HTjb_hI@_L z{n4aRl(%now9(I{Nn&lKpkK`zxHua0E=qLp_rcG6M6J`r7+1VLSIhI@XBl#p%j|DX zKnNG#TtaszOQNB8s^`{^^%n_*BZR&y2DQzYQu;j zuNgoh09nm;E7gAXc=0&g3Ah3$Rfyb!EA$D*V?!+;L9@c}+g*uk><0NA43NX4^72*BS2lC?s=9s)D$6 zR7w5xSh`y;40-enYKCYxb6tIv+aKjV=h{M+mMRyCE7@aTc^A>-;Fz(rT?z7p5bOm_Qn?Q0i$?_P&{JoOB%P zfvhYsbJ~%hFK^CyHXaat$HEc6d6*sTh8>W@NjW#T=wTLSUUiRJL^Z@QfJ4Kox%@Jq z+AX&R(c-5gQ63l^-xCXtpe6nnQSZPUXuvEB$F^;3Y?~X~<|f(L&J)}A#S}1OTnkMkPfp9i8u34395Mj`o96QQ$C+V`;AMed4cJ?8&84K{VLY^kkPw&7h7}N@)3gqvLE|Kz6iR*+ZS@mgp^rAG3 zKd-wM<~o{Jeb@{<7-rU_6xf0v8yvMuS?IJEYZa{?V&`r8+IlHMDM5<4C8U6c{p2L1 zu7?XCEH;J+)95j_9{OpM6l?N`p*o>W6hl@F4x%-Cg*1G_TEm1Aet5{5fDWR{(=Q&6 z?$2#V1^{M%>MuopKpryBbIc<}ph92yxeXz6gkKEqDyA{xtvh1l9GFmv#GD$PY0ijk zrdgwF@EP9x*dpqUJ2hqR!^k#`8I$d~sH+lHq7{gj5hA-f^bg8rkNorOXWbUNq~wVV z9U2_Qwz~4ouNHSl`GWKbG9w@zRCp($9p60`0bsYUMs1!-*zHR^WTLF_(10_`X9RwG z5PG<-gf5toxzS>0Psm3fZQF|rd|ny9i-C*o^>kLw@f?RsI@szOdNZYT1{e6~yo7O~ zC458u|LVsKmSc{Bp`H$uZmC)YlFGy|FXfZMJ? z1<=d1M@at|^LLPLy;V~;$4%jAi#C^E;dk;%1gG?wY-IA~OdQUqTR|g#pl78eh$mG= za@V^Z(DTOnt3fqVePH`09Qg#tQGgxzG(bvv#L$xhjipcnr_63Hq(b#eb{=aG!=&Oo z)J+uvAycqQCTaJ{CDv7lUa8Cc+>M1y9_WS-DHC<5l6)v5_ok06|PP)q5`H8LK|1v1B%ZVXdvIjs-qI)CXgE1Q;L=m94@k|U zNjf=o35T6;CR3n-)U`@XsP>wJTZcF3NL_We@q!gIGhcKMHxRbBK();WRGBy#Ml5!G zElRW9+-5;IlKJ!`R!zJ}vv=b|xD&pg`Gb}tc8GlTcfGwrf*YVqc_zp`CU>Nq<9&Zh z7eA5k;V~9B-Ks;3_Hi&D`kmgq1N^1~D<~-=(ff+fHpG;+-Dwt!!fbJAX5?09j|)b{KVB zsBZ%?$Knyq@%^l6zbbUDs~qVhi4b7wV9A?IgC6GN^L3yCR0V95^P!2BKVUUbTum)| zkaK82X!`c1g_AmhVAw^o_yp(Np1p$CedTU(C;hrOM?v)zCP-y)sgRFkhIpQQ-ce|G zr+7!=yo{uzGZeppacr|Dp;5w6o7{<2qeap>KtQJD4|GPuegZz@Dh z-101C2rS`Ta7Qdqd!hfBJz6OFRWoVZY5LAb=jL{{b-4T6?`qINah2NnA925KXWWqi zT^S3gITvBmcaQ=PWpnhJ-y7F_Gm;`2>l>84BFV*0D1#4}WJ@S`z%k_$C^*3Y!9bC_ za*_O=GG7W9ZS(}n;Cw-(@VO-oDgno>xwJx&lSD-#(xJ-$I_05jpeIV#XG(=nddK1* zC~_AjzDl+cE=h2uT+Mu3>82({tDDb;5ko>}Ft@+WmXU_RtZKOmbiL@|cXlefI4(@^ zT4Ka5O+GkG(5xs3;7|S~@%!;ZTa`vlC#4XPV2Bsn69-=tK7(Afyt!_;FQp-^!{fim zn#bbKSsnNB9lZdAV1Kq%UHzX|as(zRWvDtP=KoG-Uv&pFO^~M`dP1`@m3VDFbi*&qmMo6TVAZ*f(387BST z+1@;YmUT0z)u@>dP@IlVf_`b}|Nc(AAP0;*o1Epo-pHnXFfJ9lcsm3-1y|*G%4bT; zZ044aq9%CN7;K8ph~ESNh?ZTu2) zF);*Rz$Jeute4n6^DHTQPn}Pwu0^?-+Uurz1 zBOABDjn;Fb`DpAvCag=RfP}u8wu`RlcnOXhT0xQ$4;$J^r} z%`ov$LBg2m==^%m>hHO+_dk{wPeUM^ccp6CkpTKGuCkd$`nJY$5>e=_&OHnq8PGO& z+>N~6Y;$W~9yyjaDp)EF>+SXYo}G-h{1i1#xDRcTDWBb5`x{KlN$;?g+}S`YOlA83 zQluv0%a66>Rvg&+LlX~DqLGhSzjD+Sl5FPUW~j2jTW(IkGe0tAUcmJi&F$U=WF1Wb}w2Y5L6}r z%p7&KWSe6+;ZGXoH`d2Ohw29dEhyU)T{4G_m~0HN2)gi!vCPjw%HUiqjT6->e$NRBu#@3 z9h9T)N$mMGFiw_V)mi&Cyy98dRGc#IL^zK1_`L>7J9w}N!|loF)_W#Y`=~6U+x81i zjUo_R%nvyAx8jkM_^@#D=%ptHK;`FJES@zyq|U>_oP_iH^g)272iOW-LLI`O04jH| zG2IT&)0U(1q~aw1_*G`sk=nxpsxQ$X6mo;Y_Yg971G8Lv{Z1>HWDdj+SmEJDqmesm z>HFD3t^(Yo8tC=PJvpgU2;yvL2ZUbZ5rY>;3|Arl^wOG7mzjkmBYOfIfi#U$>2$Gd zpMqTB_0Qz!)Wr7Sk|4Y>0y$ACEg$ zi8g1;MWS01BKm^$$(ZM9lDp`%a~+chu;pXLhfCFYeS+PqfM5T`xK1W;m3wEPtL|C8F@~BPNS)!rgUHX zV~CMwdeLVw_fn~OC|>9qr5G>A$YX*%l2@K%t-(!t8F%c*uANm`O2*I^-E@b~+-iI+ zCoiCPC&(irWvj>HKbg?F1GiUiDI~kTqR`OuqTLuI?b>^hkxmbTeW6s^t#4f(GRj4i z5EeM&n3w>U++*u&X@`T}DdB6?rs!B;SXg&<)VJ71qp(o)!6R{~jf1!vWu1lym$bOL z0&}`0n}n5zbE>y+uUDataF|?gZOnmEfY3u{8vDB|D?46j-Xk{Ga;`%x)BaKom3 zH*Op)#An5reOr5{SHywVQk^x(l^QW)x*K^1{+ZEzjDMI)CV!@s%{--p3KHQ!XR&`Py zn<(1EL2X`rAgje8m0vfI%B(zw+NqCrMA8Ud6=Wc20h7yJh6VZ*+i(4%GCrzvLvqb z$jOf|q+&*-PW3nWm_g;#URUvtWF;CyQ&oi4p>t$n0W39AzikeV7T9{)k(KXqVqGc{ z`~3X{eI3wE#bTGG1FfAVFhKQx%8AlQXU*|Kn1Cun#lyNj5UR`lbYVIZOAe#CW)6Ky zz}I*A6OEMgqjzCM^wSBRi~q?>yk{{eljW-W)Ni@eoQXSI-!PVG^A-cGpscrD=;JnV z;`h1?ZrZ;jhN%>Wy^+|y{jeRs_orIf&Kg&UC+pZVdNu7Yun%v=Bf$4}`Ba7|roKr~ z*r*tQyS;*TtXg#&bw*|g&z7&`Srz=V@P@VAMOJkZQAKY`{%5XKTH@PGMiY%EBG;N+ zde#NU`bkO?6GtiIqwej@Z3u`(;W45-whDt+{~2#=s2#%et>C@4F}Kz5E;em-AfOH{ z4rAc|_O81QW_Vpt?rgatI4pqhA75|fTj{0$g zm2fxZ`gUnbLPBtgo~Hb{0#0^cOwZZu2uhti5Wj_(X47i^P2iSdu=vXorhj1+bwgVW zX4}9XRN6hJ`<-v;z7cQfFCMor3%kP?(>m-<@p&XVN4Z(KCJ^@PxP~jXK8bnJylq#D z{ZnFur@7K`x2L{$3DIvizh*z5%5^}NhCY?^kxu!03v%UXUv{%l(QbX2`gO&6HEJem z8z~A_uZkN`R>oS-+M)h0Iw;e}a%nvkML4lEA>IJ2H$1V%q6Arj*nMJ;nv=cLuiv7zCNFhWZtZkdsATwJD^*>p!P0rt7E5g(c zwu?5i+C+7{a_nD$&nHb=atYuw9R3hTz2=Osem?7tAGk%Gny~t>}}Fe zat*v2n-sj2iWj$J@YB&{-`eyz44f`;J}e>$5RGk#)bB#4jL@34gUb$!cg;u|a$sxl#__Q#MQ=%jd8W6{y?s_QBdn(( z)2590jrY9>{s&6&0U{8o@jzPZ5@j{R#0rpzWnV$93PQx}K`ZK`6A8@hY~xX8J%zjh zr!G+yfHmz!`zAP%UEy@e=jP-0^rHI^a9(AzyS)Otu`(ThO1-o;Wok1?cx|rdSjHZm zg34H8%U*tfb*IIM8@o^Xo^~3X1d$i~Ll)N;S#`pDc`CGBxa`{KY7YTZXY-y!xB)~= zV|OSXIP|Qe+Lz_TYyaw^ts9!HJ#zOpE|PF4E1RK>yg}Ahku;pK<(j(!<@imU1A;bt zWD%7;mfS*m#Na#>P4q$?9%v@2+<-jku>PMo00)MT0N&vHT(S7K43^ zIgNwfG9jjn6Fl;TYY);Zu<~<~p$njYqr?G0%IoV(O8;{$F`n-21#Vy@x=UFXf@y=| z^4g=?7>F2KV>Gx`XRsrghHTaFFL?f6;yR69^5V*==uaWkoM6QRBCM${0BV^N1t;{uFyUtn*; zp6YtU4B8_i-Y$J3kx`qarl63_IuhUf{TMNc)U(n06cRNxMPpIi$|-3FtZmO66t)cu3GoCoUDn>_go7x!S&y zZX$lw-4o1H#3VVD3Ie_+`v4xmDI;P-h%AVx&qZ>8t;XPes2mrYRr^i2nZ@F$LI3k< zbauI+ZFX`CAmxXRY5SbKJv}mQ!w-vv)*3m|0UgRLrwqS$uRk4~6I^npHnR(~T`t_Q z0y3!YB0RA!Y)WmwCDn_=E}hWpjl#OLGHM&25w0bDpj|*A<*>enKrLPql zeyK9IusjOcW6yS*quH68fU?m5mY3d)a- ze;?D+2(PZWl@inH{;e{m9pX|EnWBN8!)k>oke!;t3*aG;0Ooks`uZD^D;-vq5LD+E zjRJZ+;TU!8ge)?{uQ?4xmIfzzt{A_f;K%;W5Jy;8(!u;b>%d&LY}}{!3U&?8mp-h8ikdbn82Vp?g5Vw|k3F z_)?{ZTfem#4J;Bu5TVU035O$wo_(>Q!k@t6bVSEPytPS*(#e%ir=m$;qCMk+@A*uX zL;SmCkR?H7S)r;#zV?3RY?>s3HrQr6N9B4HUb>(YN)X2qIX&*q6SyNx$!rFb3KB|LFL zLdF>K3%XREf{iMnqlkilSL~H{=_xwzNc|1hXGMMSJayU}E>GX<|ru2&`32?u{i|G^9zngO^*NNn82Q)ftnldSQ&Lzrg zK;*R8mtwJ`dxYNmq|ePwS~;Y?>K(1!&b4n#9bvKrOMUJ8P!!NjbGjZ~b))?lkw8bh zUgaUucZ+R0-1qQl>RY1T%{?i6@v+$%OJWb5h(gZtuA&X@6A@`pG6(=?MGO+_KxBq= z0C4c%Q0!HQsn|A@x^zSmkc1`D>{7#7An*CND7!zYqQML8)6C}k2$w5wkdH;ErjvZA z?NEqoTjJ;kH=tXM9>1evem4RXPw)SfCBT#=GW369BKKsXGt1B%D`6>{WuXu3D|+|1 zsQlEKf~4Ya9@V(6{;h9D*Mqk5x>kEK3H(H-AlqlZsK<;Wh^Abg#Sb!wYPqGo^X_+K zkaK`dl+qX)vb)lI@48Gq=n^&g)N2SCEzXQE&Gxa6nyUN8aezg$9_t19<=44;S&oc< zFFfZtlT1go{D&GQ(PY_w{_7<`Pk@?M;t_nR!zZiz-S(eyi+A(x3nUBSr@XMJ7;fxtdo9Q$dfhS)#N^KVZ4QWaE zT_3h07#oaFG~_q%@Yeq;ls z^4Tx?T!khCOXqIvZA-+_%x}RxfjfKnUQ_9T!8w|QU;E;?IYPJy;mx98-l1x#?M{fA zw9;>BvZOe8IQ1xkQV5}@1;MW|KOm`a)OpeedwvkW!DY&rlM;NHm$0V{@B*>8;ob}j z{+@Nutd|!q??%R|Z1Oaa9r|f0I-(^MJ44GG69ESiI#O431V)OEiX|<&clPSse^C!s zm*aAxgY^yb_t~}eUWvajn+Ten|521k4NE3TBl5^$_%!;il^e67|!V~&Z!yoP#F%9x_r_Gp}pP&wjrr9%U z(L~&&5T8Cr1ob4*IfQX41)#kiy>iXRnZqTkI!@IR?_^}0ss5>*g*nIdt)kr+hLigp zRb6y&DfKGw9!?B}IgD2UpZZwP=5xrlYg^UL^`2-r zzW?5j?d^LuJc!V$?ai=gYMrgw&?{D%TNNc-{f`1E24-pMt7#NpUY39z_~il+ug3xd>4RmuP4GPPJ+8{^6Kc{g8>y{ zlpr^+$^W=lj0;56_CJE+{|-%xrg%nrrz12WbnK8{{kARmAxA!&5Gj_zJU2`F-iH6# zGZYH@)h27BL=c+zo-%Dl!>2nDN+r9g18AFY!>Z=^r5Iv%?(Jts-8(NiYpw)E^rgll zcw+p{3V;EmEzyQ=dH}G2&Afe6X3}2iRZZ8As;u0fe=_rXRQr*d3(2&RVOrdI5ucYt zw)vVZ5ola$)s@^>CtDz$8A6KeJx1=G+X=lgLeoPnbOW_l2vspQM*|%?Jxx55L9IC& z8I*Yu=WG$+u^Nr;hTd+WVWCWa#JLC{efl6kQnmxqf5y!3Jbv6*WX6W5m)z68Y0rYt z)9pNX)p$?RuhT@$hD|Rys$P2QB3OP%t+ioW`=#1$H1Rj#uUGh`UeA;kTvtez5lHJ^ zSF~(CGyCrs$qdzRJ5*sGC+6n(%ruoV(B7?(*HgB)~bCnCBkFD=3itTP`+?H{5#*(T{1l zF=r^_Xj~a{V_nOf8f6+F0yjAB2%fw|dq{xo*Pa;MxaFbdoLxT%$zpNIy_tQ zW}%^yV#yf8(0B*6_UAd|^-RfQCrLfg2Se-l=1q^pt&!Xiz6piD=>fw#Y7-H3xHqtr zU(5Vu5*FpK%6LfQ2hVWRnxsAV+OBS_D2M+oaT<2jLeW}srWZua!41~!Lv#KDW8LUq zsB^6ZBhi2n9sAQ$fXV30uVy9O66gixml+E<8Pl)7SY=s<(2(4lE zBN7>L?Sl6F7cufF?qKi(G|&7|cv!#|?(ud}PP~-rqsqV0R%DdwbDfg`%H@m4#VD*S zmL55Gvco27a1XxMaLGdnUb5V+VFWhhGCgn_=9FJUKkQ@-?4QItKY{Fkp#XW5eUBpO z_KEp{W11FGa^IT==p9ypI$43g#%`u^KRmvX?CeemSZj~kuku+8XOP# za!$O;2%CUIKnf>9Wu?ULX5P*4>N`*6wrtm%(8QpSr4AK)l(07V zPRzOUc^^j^5DgpiOcDpCd(cMbb$q%bE1OQyMrY)O3%)_l0|< z49z!k0-?1>Eyim(`?zSroDZZmO@b5tBE~TpTUqtRUe)BGLVXn%yAiTUU5(!JAP}*k z%m)4Ixs47TTTRFXqIZc@{Be68+)|dLb42#D98UeP{!Cp-Q#Xhq6isHuH@(#2#`P<#B+im5R8R0$v<% zGCe0O2>Gd!@-v(pNbX-XC@JVm%66)#LIcIIH2=}HA|g*II|^^)*FMc>LC7(V;{zNC zt{Wk}&9}K(?2?B3oY8|R#oldZ^gA!oU=g&8;sux%&(#l~D8SgueO!)z)PNXd<3$NA z%Omm6kmN!Bj*}CD7*Q-vt-R$G?AVLH&B#1VoQaDKA1;k|ZW>CEBP<=ePk`u;N-x6} zOh#W=m)ApCE6`|}X)rs%=BWf-%zO{a>_`m|Fw7t_LxlOu>eX~lx^4!hg*kD;`$%Wq zit)aHS>N*37vQ|d_WalBrc1#zf;iX$2a7{B3%EkW`!iDKy7ZeoNe zLge-`Sb@?<>?ap^)PwJ2gER7{&WDmAA_>Y3$U-q&;WrRY?q8VP0AGxL??3|?6lZ!q z+Z{{Ld0)QE5KKH6LF*I)K|DZCjazsX;+aYc+oZ~uvNvi7^dL#!Mk|ndr6}5<4Nw^& zET&820JbV0+M-zo!boLUi%IL6P&!VYqdLr74WGpepawC25id{jS^S`9KOMHge9!xA znbjuHL0W>Smmt#Wh*haf(P8$c&W1?5q4zB$A(7`HXHB^j1`Z+Br}Hb5l-g~C?E|&MwL4|EkD#y``tT10mnJ-XKBJrE>WMLI%dZB&8 ze{X-VQ{$@JCSlBU^sFO=6&%^E?s?ZVs&K*zZ1v!lu_G;-f|B)D?XE^!yv6cKj15uN z1N`RH`dUH9(`gku&KH3nEKn(nf7m)JtPRd(@8j^<1Cxi0&1et)m`?KRScMPZDQ!Mk z*TEj$4=0kRuk0G>24Y+ktr}TISG%j8`V-n0uLg1`^Jn2;9E3+2EbZs<{Y`w4ye53Y zM4hJ2!H`Hmj7ELo$GW0!U3 zP8;fu!^vXi$DEw(d-Zx?7VieLJ{-^?$$!0d44zItR}9SQ{2MGUFQ;lz+o_A^dNVr7 zD|0KRw>j|-=e@>ABL{&)3>;Y{f!0xRC=l5ke`LNW@B`(G72Y-BEFZv0E=}TZ0>+mH zn*THSQEP`j^AGT$^#1XaEAXDT%67U9yZzFE8AbH$YdVevJCO6y5yj25_cB>wc%qe@ zSo3SvDm>>;!9Fy#{8^7q1~kw@ptZw?^P!G*cK7i<^i9foqcpFPTWxjt2i?xve0kL6 z4BYgCOKgW=>|w|4PMU!SAp-dTyJof`>7TKuL~kw4sFiZP;I&;yY9`v6+1);LV%QKOGSzvwN)Jf?$pr!X1l0xz1)v7`&j7|<=LF@Z!CFFEigceskT3hj9Dl5l zd|MU!jjZMgHSOaTpDs}-*v zJ$gnM^c)LP+*H~{oH_&W5eJ!BrtA^GV%5d1jvaN<6e*ByB_7hdfj~!d@7whaL1Z&O zK2J9|HEcW8;7z(^H$)QR_qhLaFZaazsUXJA_iE6$_IhXlSqZ7p>5a*~sD62^&f2cN zmh@Qkwg`c|f#uX0l}68#{qMeeuJtyMs4zK{B6R!6ZeO|)w@(Q$^h*ucAv1>w-RIz| zq4%gNylDL#+TO#=Iohs`%I)hh$#Sv z*(Z881+((I2!@W-2%z@u_~n=iGmFRZ{&zc=>U?2Z}b`LguBca z$QE2+VTJk#;a73V1LnfAH?4LjE>!Yfw?=uyrg^J$!CBDMnvP# zK?BDbzC!SadrQTlXRV83k8l8sCY7tPZn4SvKO}T!=K~R7y|IvD-8hV+ufV90y4K&| zdz|pQh!sh&7-kMjB{N9y>se--?j@kd(ZE+4JR^EDO(U8_6B;{hojhA&yBYmTKW>L6 zDwVK9k6+^qBZfR}RnqP8>BkZ8sfz<&lbVD=IRyye$CAo|U%w(T%Q>w(A575oJRDOG zR;jbS=8+U#eR{}HJg2Ao`@+nQouA%NEbZUX%L=c39^5YRWk7p`pvnC7@)@WkkN*14 zS_uP;g)L1a7YrSoor5#YI17pv(5>AVL-d=eb(jN72r!j!UNGO`lxUp-W5CkK_FdJ_ z<6VBy3a4*R%uZS`G~AX<#mtf4g^uGUKpH0%a+0(~dnuPsuwgabA2`k$e3chn{IVJh z0=}MN(0T}&uYYCV{IlQw+})IAVHT1Voiy;GD3Iz>$0n_Wq}0~LfLTq;EQ`~g3bggp;gH9-!P z$!dGjyx(8W2^dkFrcS#83n5X>EJpBFDKInLtq1�j8H&_$?&a%~!Ee<%a0y_}~7l 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

    3ySoDJ|rx(X(B2zl)oYu$gKTi#Kqe4J09Wk~U9 zgHyU<0tR>tFk=GJ9&C>QiBk!WFOJBm4I;+49b0-%a5=wFJAo(tLh;0BfJ^$O6C{C1 zdjoYG45P}2V?GqY-hFv?rf=iIk#vrtg^inff!kS67b%}&sq9@YAClcq?diDu=F*I;oj&8#DU_vd_9-uy4Xml^yvImOJon0Ntg9GQdKH7) zo*|`#{2i@aqcqkhic{YCZRfM9p6wTZw%gdqa+SY?vjKqMTAfU7oOhVEpMj_gV6idvgblx%ZZvC!9+ zW?~s+S+>kc07fEA=vI&1@G$tahk-KHn=a)geQ1wY6Hrp{z9^e6h|7Arr`gpqFzW~2 zqTQ~2g@k`-yGk0rwz#%U+QZ4UVT)y-+!3*ivW;L$1P;{n?Vu(Sa9vcbMmP+uXWuc+1!4 zdW%fh@G?=?-Xd4+^_~dmEjX7Kxd_40%3F}|NKG=0otp3lMzbnjo->D>7_2mf|GfPV zX;%V9be91c1r(P`i3Saq{j3KF0yH_7;lczdf6Z7;Z`(K!z2{fBz#e2^rKP^9J+&#i z3+%SQqRp-CfsvV5h-?`moyOQdzcZYXEXitO=d{Sd5;+{sym|9TC0q#j3m1i0UQbJ ze{t-|-4SuY)nw~zaDqC&umwpswGW5bYU4Fm$>*~WzA3z#KXGV&a zr=ez(P&1hXVVqE?WwY7U+G_t%wUxT9IjV0W6`%ZH;3vdzrU|EckS+W$4#Je&yjw=n zvsQ0*79Av=->TV?!|vCvH5pj_WNGLYe{z?ezH3_EeCGz5YU`Z-$_rbq2q=83cpGKt zUD1zO>$;|y$7Py%oKwI#jF9jti6{(m!FAg;##CV6gW(_3Fh^kC`%kpTIrxO+`eS7v zK$3-BnzSX&jkd#q=8kN6kzm+x2w}@R*arTNuq8z_fDKnyyjHP$MXv-Kf8+r) z8b$pY5PL?g8)LU>Gh)=+^AY=>P^!z~Vh(i+U*OQ&OF0zf%%LbNrX0e#(ROHq92zYm zoN(xf(=zmU{Rvc&9MT9)5Gr(pP~p3xSIBtj16RQp)jjksCQUh1N#e|#S93;AI3t-e zMaLQ0b4E@%BOMSq0g*FjiVss?Df8LA?Te-mNiC{fo38qrU>f81L>ZNMp7 z)EW`$cC5BEW7o>gMF_#^_TrXga=p-zZ!YdgnR9c=o;9u$a93_DDJP8yYg}W(1h37z z#)PL48FApWD~o*Cm0;q!QW6>QUC~e1QK!^9OV$dqT^+!>D*dCnL+VX?7&hw7yX)6p z7{W=X3hvaf>r~NqYB=pwe=(=-9l!>10) z=ibulb7{O%x3{f+^!3wjq>!(a$EbiPw1aGqZ&4>(JD_YADjLym#59Eg zrYQ`KXn#a{8Sghmn)HUm5Apnkvvn0_$QUfe?duIr$X0Wd}vi$ z+xWMwDzzE*!@uWO<{u}Bd)WAvO<{HW~OX>wk8eWLJe8q{gt83(uq@Kmvh!qng*2`5rjv*yDv9%Syf zTiG8n!og>>o_+`=ebEocE1fqDFQWT3o$aE3qagYPyp3kYX_6O!ONll%) zppc79>>P+42ckf22V#dw=QRrwmU|f_L5`P&$opF#uq&X|e?c-E)uQs`srN~hZDZy- zMYt|0!kAnct6J+n+^+l$E}1!SFB7qAeP40w8ikGf*k9p$Ss-auP%rolH>?>rcA!4c zET61X%|unoecO^Uva&zmKKekPT#NxMa0#8O78))dFQ5>fkHQz*U@Aq?gMe2o#6fgA z0COie;N%1cf3zFm;FgmV;`0a!G@XM2>^Lj5AZa>A=A?~AFtAf`S!qg`HpECk0p@X!S-t5Ko8B zPwE3>boEV7u;RiGQdK*yqT+EYa9O?F_HMrpH zYpY?e^|vfWz7O#jVRvxzhRG55zO9d+@N^r1uQ60H#U9PRvd8~+_16W)9AYkpF~=_4 z2uk4suC}|qZOggrVj0Lh=?v)*4?5BR53~SM3zxAt1{47>mqES)6qkq91uK7*SWA=R zHV(eeuW;p%$WQD| zDK?LXxv9tf=A(Cal9yhYtsj5Ku~+nBO--L>blZ1yDlMK_8@@Atab&2j5TQC0{~ z#M$5jQlk~h`3fS+gFKD^ zw>7Vu%g~!@4NIH{MVdIpPoYR^^%iWWr6-%M@J3iwYc4P@yw=E`u}O>Rg&uag*+ZBe zK;T9cm)_@XntIY`xvPIIQrLHv25I3OKtifd&@NVI{4{(a&BBAi$;H-LyXF%=gx!OW>PH+sQ zkrlFDcxL^)#X)~wifgW=IW7dlfmlj3^dH{42@duC{^z>Op$sqAUwY%z0( zQKRMa7AHXh5EeWqqmUBeSR2*x$+ia=0VfQ1dO0k6V^8n==@ta&(G;{Te5MY4bNF>pfGn5$oic;hzM=kT7k zA-r{(XOKw2Cb67pb1~|mpM7-EMDF(wcekgRdzg9vNQsCj6p0XCqn>*bE&Rz^Hq$a& z_Tb~JKp*2KaW4HwkTY5T$!_t5Ng>Ui6~5>m`P>e?l%zk}%WUGdh{+?@o_{1DW5)UK zYQhPFEX;pgB)~PKdsy>M1jjN-o$e2$sksKI{|_2UNCr_HvoFdqCECI;p;=2KB7-DR zINSIBDgcoOq8QKaIt`+<2(oNR17L1DFEf7q$@eSdSLex;-cq&d4i)O*Hc?M}tq{g0Rz-4VXA8MZb1 zTj4_!O?Z)6QB17>yp*KeV1x$X z=ow3cG8%>zYnbD3o;C{-;$rA^Sk47dQtf~7sAl;Z9IFfxDmwj2LpL!(a<;ozO0*qx zoNaTfOVx9A!V~6SV5_|kym;l|@v8Ft4X(DKl>jMDxOm}U=~R;0TC-F`1mN)`7u+C# zY)KvxbT)NOc4_M*vL1y0PO-jq*nE{vqP5SqS=q06cwv-VM>)G|a3Zf+GU9>pHJ*Q2 ztr}Ow3e84c4mff8r2XF(z{+(1ey60VPV>n9@eNlRBu{+ZQ=kY*-O)qhr2g!%*{`3XmINq;wPmG7D{ZeaKITt+q~7!)uZcRp#=;UzM|d}=Z_A-r`CpkbO;L%ZjM~bTGw{~ z{2+84DXP<0FIFQ}xJb=f7q|^~&;%};zw3D2Tx6c~#jiT;lf`P*(tPWunmB(9$9f-? z<#P8Oy{Bt?iC=KK!G3rOslLFU?bn97*S_nwt#|^46T4w-+i<2c3n%E*T9UHfbb)#u z7P=6GrR(eMH6Vl<1y-K;?BMI4?58mt5vO4AzOnZVIFb(|5R^NRY-;LP=ozv;BBTdN zQ||a9mT7AeJh+Xn+%P`CHMD<{Jpqp>;XQo72)#uKG7IBnO z?})0CLs3rBXmM4x`t2HnqB0NCsZIRu6WpX%?+?&TrsD-heO$AZLn}F1T4mb&rh*$4 ziCn`wm$5ho6ag@oQFH+m0x>t2F=_)T zf9+Y_Z{xTTf8W2tKp(0cR;nmb64l2`x5X7bpx6u0hx@=W7Htb_%dR9RoBzJ^MVWGx zO@h7^MSzeT4awomZ$3z?RSJJe&y!l4)%x%uC2GH2ap&{jJ}BXffiVs^zrXwN zr@t1(N~KAi)@pUP375KSRzF9#J9`>ke}5C_c^;WR-^5xM(e3eYuwBE%f3%(B-lwJ= z+irUkXIW`fr1I+K*So)e_;fc3P-NK~B}LBXqLx>pmPRKk*DPw=4Xz*KH3;Xrkwy9? zEz%$3KR}~Umh00NRZ^~El_#p;HU8C(yW<%r*DA8ybT^ra&Ii}GYoYgB7!rB>e+U{$ zi)h?A{`PQF6p`JZWq90Ro6>jQe|Cf{tCPyqaAewDM33*?w(XYWtxQrWn@0-0}gSa}VY-5em?eEs;j22$|OBz83{B zVGkfkKozEpeh_BM&0Kp(546V=f0A08XgHrvHwxBr%|{YHoy$G$kW;6M6h#2UfnAS6 zw!YhSXN5wCP06rEPIQrb_K)A*f0B#<60#Se z1z-rK_xe&%51mKsw9px_<9LdIdlhG?N{T9*TaC{fC|M&um(EvKNt&9sAFocbQh9dU zJ6^kSdq?orI*m5{@xWv@m0qx?7JKUS!X$XEO2Bi+hf}(Q{p$JQ9K;KZjyeUWu!F;J zkZF$#_6zK>evx9=Yjp0EUzYZdmh~2BStH|$z_R*exXZnhc9>t$D?nDmswO9 zc5c5HyQms+z*UH2k!b}COLD6g(afT!V0I&gN_ zxfMK}$!%EBNDcHp+&+gbYKLGe>OunJ4Bg3% zBNtjo4oj~=rV^0Z0}03z8-!ZnA@qi;2IvLygkIe5e-gdw|L}blb`N&lAOG8!n^zKZ zu|vwLBuHZCe=`+uP)8`AS}JvkvdA&Gf1h2qCLgMN>XKtt9CoptWUVA}&$a=~a-_!P zFNNdNLI7i^C0Lu+3~0j_E|XmW+NkR*1F(=$;7f?)TKo#>6OxTwieOHNWTP0#Kqe$} zMNT3tz}4fLEuGbjYwESqGLoTlNz*V8BtuV-3_UUqf3zHx_os}Rqm$(f01On%FSJnWNcJ=elF;r+a%*zS+_co{!oIUYYA`zE}SZ{Ln`07gK$ zzba{SD0s;Xyw0T>2CK^F6Cdc}5>jZldlwdyuu=*OToA zs9F$c3hqHr_kYVG-4bH#086&R7Z9n03oa<3UAN=@iO2TDvbwIJ!d+*X*eol}MIM?u za0{hq!#&C&&~9DldN>qMvP|5!!^k~KV9-uCPQ2_q_d~`FTLzCS5s=k@5tx-a4DG#V z6PscQ_bL|301KqU<_Zb7@mJpQyEmt7zT)Tt@lY`yaDOzz0}`(BfHb;==>QK%v_iBp z&+8utqzL?Y!2^;*Jm@N?Sol&wuk%doq9u_bWo8$mcvE1XccN=H4qM+|F6X+a;7)Pc z+x4`7?3PcCf;U*W%>E!-TK*b_*CpuAgDsdw?)%sc<1H*@x%qwZwE_T;=2K4oZqc?$ zl}-1?KYxb#R*REV>?E@)L0ldPfs@juNQ|-!OJ!7&7iJ+!p>^VE_OO7?cZaL85SwF< zLVg*bX5g`;k+Kkro%an7cT`02Rgo#d-5-bE`5XV0a?{caqsfvA%8v8}M_f2k?B~o& zHj=rHnsxxt@qTiXg>-ME8YtzWhaIUj%6gjH6Mv?$3hC*9j~x~O1tSz0EH@sZ{?&=< z0IWC`3)^6W5T2Fs%Pqna)RvSwdljDM0#ANXg# zX}%zx^e49#c!3;wQgG+zpLWx!KTX2^`cbOXtV&FNRi&QnR^X9k*9TE1PwEo(Rp7(A ze&r~hI}X?v4s*SzlvRaVMtAKO4U!NbX#_mHgz(?qaU;B$kjQSvpc@%&VZ;${>=B+j zaPaghPmzgNjDE@jCrfC+uYWDl`u;I;L>O;k=*PFVp5BFE0)_I`Z~pP@^^GSW z)B1^&BIGHl`Ha-ONF$Y`OzOV8uh(JsP_BiZ-{UNXe+sFX^O>0_Uxg}(RK{<=ztTle zwRcUs2L`ev*w$U&w2%ByeSatqUELh`(f#(@iWh(DW7}2-MA7rcj--Ms5)>}#LszwO zT=I_)i%TT7tE#!gQWHl8NYCNd7U>14Ip}Z%zM$keQWC(&YTbJVZImD-t1!_hqD(}k z81&QMoorCdZ<%l4Lj~=X3d%LE`Wlwa;qx^DrNKjaFIrKloinK|AUF9c2dxxIa)C() z9gcs%7nqzQCCbqpBC&^wF@-u7tja`bB1Tc}>aq(-`I~U(4gG&NtVAhBic38@3^q$ZDYUVM6i+*KXvUFA;i zaALEQXrR)_X!Ar`9rOiS=SVN8J=KDBtag8K{SdYO|2KhT6kE_Wd?a;-kxb$Zg7B}z z8(d5c10ayHWe$a!5qlhn!d=<*VcFgv_tl{vxOx{xa;Zf9cj3REz^R0W7yM55cmSHU z2_7K|>=_@hzeJ!(BRB;e)BBI*;ftqi=}G`kv&4a)^W{8B3a3+Q#XzW8NHl4%^p*1=sb;VL2%E05{* z&u?#j{cskO8c;#;5R`z_|f-ucs}YQe+}PE(ZAsAy9yWj-mEG~qXbmrifH=Q5>1}Fni{7Bgk)=Z`6!9D#-v@>4b*| z23gm?$11Hhyz2!66_bgJX_OG7|LIMxrhXoo!V~h)boKW|M^YeaufBh-2d^yKO(brV zMJe6}Dz=FareR_e_7z@|I&2zr-|BviOl^6;ma?-g!3w@o;N3m)kqDw^?cuUIECwrU zBBRvhaG)bQ7~z@7qE%Gn`9<}aG(ELupxNsZ%{h&W;Mi5nINKF~{ISS`%A+jtUc^2J zAt-D_$ksxEQ%tS>9HW1_7^~|!hCRcn2N#R?ClCtrZ0ULmddqT1O_b!x>>iho_~}f2 zs|%>+p%euPK~%fcDF|>lKrb~4Qm#mharExfaW&UUCBiRs1KXC zZb|J{k1gd#o}*2260alxs2GZcJe!7q-?kM70d1jn1gCC}{7^Y}N5W!CHn8i+jwOhl zc!vf8h9csuSH|gSP`zfvk5us-<=VF5i_2XLQhVgx2awW^+g^&Pa9#@!e{iu4w)C7~ z9eS4`Z5}9ZPj%cuNH7-X%rV8=j)HJ7NbiX4ROjxbIMUb^B`yKgL@-vNN9M@hf5;V zY4B}Zv34f7bg*V=BouE&X3if}7K23XEag?-5zZ({?XG{$h7DJRsQ~ET&JJCATQtNR z!nCm$4KcN2L-cukPqyV7KDd=zjYleeig*Id)NmQ2$T-{TYuy|>-WZxsVW?w_#1TuS z&{1q=QDQmzN3r+rFXt?&7zKLjbGhk)lzzOW_=3Fs_vq9)w6%#R50)Zucx^ckCLrL{ zC!+scHtT=uIW-M$K%d%gm+N#81~SZ*df_VdoGbPBGyrSv+Y)=;eR<2(B8^L-a-@9n zlnNcgp9Ymu5>EO?AUtC3IO%m9+6jhl z+uGGzQ}7Wp^PX~AV6IC^qDe;iycGWJq@jlzY>0oph~6VvEFJP_fTk`T(B}{iJHAJ1 zzv{sIn+gdzpm^}~NCAvad|^AYBk1kSm>OVqv9p56kr|&^ZjY4y2VOg}<4oa^)?_BQM+9+!4D@attTvjt(WV1 z2NihLN&BOPh*6g1e9s-dYjw_SgYlXNYg2%tY7{0trr<({@R z`!Vd)8*x%;%`oXI6}-LUzWe2YAcJM-B`L5`+VZ5k=P$^c^F! z=8uLzvwLx?mif@phj3~Wlnjh?a9?4u06X*jUr6Y`PR!W$2+F`^>+M}F-3R{AvVOU9Ojd!v6C zjNmlzfo*Br3epTD>-+j}5IhB!7Wl5kD zwK^O3ATU6a>Ec=Vda*zO8}U_M^B@w?r1J%w(B{QMd;Ozen%W4M@-=D4SfK^pNb!m4 zb<{hSNn$0=S{#!uW3oRNQ0Nx3aRz_68;YHOcvz(^Hf;SCy%NP6r|x|2Z}kHW@u1N5H65U@J{k~*gZ5e0*oi1?iLLEt~v5|Mppu4%6*-T z9hVpt2QDFqa*>evB7$LvX4u@9n@SKhyh9eX;k}Z#<^sxGq{(7;zj6-Vy6=CB2;+up z(ooE;U5e_Q?<{emXh4j+vfJWJ&7^D*2J?7BlM*wLa>qNHhJko&35&MsT)$2|F2GQ$ zW_W&SW-6!Z+KimdOjUxo*8KX|;o#9%)A5;k+I$oR8O_%<;m>E<13UDx&i!y!bjJOP zsIci1YZ;wS+)pM@7}8_I6L5dLhk|cB>b|v!ZGYx$GQBu;a;G5NNa29xhnLlZ!s(As}y@46Oek@&UE znKX?c*3hPd$Im|`o-0;%@mYoaSTA%MZB*4Nk zfeIdq06Q9l0T6#3b0~j@}CE3Nl^AO;0 zfL?41CMaiL?SYgc0{?P-fnc2U1+V-_7H#RxRgw6w!b5|w@FyNgdNQ{)d6YowY;2_C zi+|xEz~KPBG`F3i95sYguy;ZgD~3M4OU;gS{RusjK&%R7Ze){YDh~oTGMDkJ2NMD_ zHRtv0E&5K4-^XZZ%LE1D4lEtNm+@aOl+O=@D0}~K1a{D?|QZg3WxCOj?{p#(z4=dwlEj(J9%JGp#w#X_ zopXxVD2Qyr03nCi9~$1@Qm26<_B4NR8m@5k&Oc&TfJ4DXu=mxsL)r9pJ$QR42XG|5 zLI1M9TL?XizN``x8&UWT`)YB+Lg1C@e8VDR8*uRAp=zqG99(pRAPA<&C*iHBz75um zMRaRDT&6y{^>jOOfm@BM&ul=1>%l$Z7l@-xMYL(uv;z(KO+(|u{8f&15J-PzItJ1} z!Uc6D(|Ggh&AVskT?1ljqI{Te0S1&c2{3kq0-sxjw#N>h8XLMBz1qd6-7^PRA&YW3!G2a2myyo|> zVJFv{s;Ump z9Y0?;^m}HRqDW!`QIgm2`sK%^bxQEr%oB|&FL%Uz=DHwL$*qo3~p)la6uYHC(ja|mAJL-mO#Rm zh7Mhe5#$Tlg$7ER-&d@^rtbGNMCSyM_?LvC$@5fbXX{#}doS$Lcmntzjx;g|*I;;nm_ZUkXmk~-n z$l!O3x}twrD!TxQJ;_h&9<02xh$Yr)#APqf;Id44yuyL~^n3*P>WNm*FEb*9hZ-y- zor8tK!`Vgm_E)PHXq@QxmJP@DxH>1o4PAFqqg2*o_a3%`rj{ z=E(SWc4`p(kp&=VF^OzT-~gfHnUh37x}^miwMh}@y0{RJ9rY?8U#gs(I@Jf?639+*BY@W5t|^CW$w?2h_^>~p3eJV*f^yuJ_Mz4S55Og5b1 zjcmj;*c-XDv3aRyHlPK$R`772S>OBg?!!M8;kS{o)RzJk9G0VlT7J)w;YEIPUrxD# ztr0Zu`j&?J3JWkf9A^};aF+6Bm>gAw!x(?D@YjbiBypLW&{>>FHB0iBl~}lBCM$vr z7jC9`I!&j^p9R{L?yb49Vtk(KxNv1r!8nyeG6i7Yhg=x=x^4Sv_9h6Zy&K}WJA3$6 zEUQynwDB|9`PVT8S9Bg zpQijY9Jq$P4|^?!PjC2Tywlyc-M)X?JSFd&qeK!th(?M*fl@Qqg@J9!n9;qFK;eB? zRhxECQ#CW;wKD1qQ01g|a27&(sFy>m1f7fm!az^R)S8pvoHH&8nhTHWPMbj4q@s2X zxtXz3WVM;wS`SuiToj>f3@12tV8n;KlyU_a4pf?B!^BmLb3r9kyePv}T5o^JU6Umj zLH!0)lf|i-#kKo#T|+Ka+p20RQxI{zJMsp}&sG(M$YM3F4^0WSIsLsXtS%0`jHQ zf5vo*OHi5|Qd}x6XUs7)&*y*lUHj0Luzfgt%CK$C8=ji5&sY)EpvruMDvN|pP5=z- z6YOBhJcEQFy#!#GdKHi_0hk$64`5g#>H}sza`EW4I%zk@bS%Ffcn1CbNau^Kb=an} zE&D5iV*(x+)Ga^HU^E4!}rop?Qg zFWk6mn@M_Hxi((-paQ?G+|kFC1(CsC(Q2`^Aj4oF0p9tON1A-80|%ov#@VZLO30@z z@8@SaX!GQfm}1#IGU$JGNZxPT9+yEWR=#J-FHlwF4k<&_exuT%@WcO=Nf-@V74>aQG<4I#+fS4 zgw-3FQ}rfu{ylzIfOl3#-cEs&XNh<6vk8xaU8T~oP5hs8PG0Dlm;17$I}Vatq9saSu*tpB&DodV7-<5&Kd#rPL~Pw-b3yBQZtCtP9Tw3rqT#>FI@!6qu| zs>7~aQ-M>m`S8kDHwTD#G(-hdIVpTPlncYt!l#@z!olT#poezY*|SYRpjlP|Vvi*M zV@d#KBW4?=p_^bAy3YzA{JG|57N+b{#P$R6AqedmFPh}56dn8GAx1lXGDqz;!X#IIpn+HSobOSleh_cYE; zK^?dR+RaX3VNaL*rwh*72d!H2{D zQiR`=2&YUb0%dx)$ec1`D*xHC6SG>qV&Wu~my>Ogjf_5CX5_m?c42f%02145+yd+uNHA2n zuPyv1tV&Ho-M-o*#hr)57%HuG!cV;>aSlW#Fo^RvUsOdJiBoQ;(u3|hGxvQkleV)* zKEM&Mqwl>J-nMS7beqLSsHGHu=Sx9dl4Jekf6<>4RKrV1U;`Gq7)aqvF%CoUEYcvCgGeHg@+4jZkJtO>JDKlG%N;x6rA^JfvEO2>&`~an`IM?Z zUs^MoEq+uH2`y*J=aX?qI%yZQ*j~T_^xjkpJKBG-Q|xQ=dn{CEYLXdU-c(~hyf7^a zV%-S1z)R7Uh03Es2zO<{3^bNSSdODPgPGP55ev4914v0Gg=ZH<44jeyY^evDQeA83 z(oPnb+}2JCtmsucP6fK~Q~(`M1<1gr3Itp$*ZJ4zAdRCq%dd2>-i+GUYJj0t4LVQ* zNmqa7D$+U>uCE%ss7B|$YG{VE0N+ImOvdhjv`$e^AMXAGzMd* zcCs$$<9d9>uuwJc$XZVcaJKY`4< z+AVxO0aScK)e{FuIP!PK5gV=_%s36W16_X{2I%7WrHi}6LpN}@@Dx?`#9VC$xS(d@lNkcd*YV2g6T-P zI75g^+|5SvU7$O66&F;5696=RF=gGl2!o*Q(EA7t<^YGuBH)Wg-5O`9&<`vX`iy@U zuuWsj#}?rN!db%D;11ma22n&skzXUjBV2oy!-kt`5#?9Vz}Ov&D1+UCdoRu@Qy(v| zw~ZIzuSF`p3bJ*SsSqt_TT*4Jugx3h0&aZ7mU%KS^lbn-&IZzJ8%Ws(*mh+SrG*H* z)x!)~XmUOL@*#y6PjcoChCE+F(yo8!uLmrs)`ZnMZ?+*qndMO|^s8`uTcxRvRFYof zJsz=2tYH0tc{&vqw^VpYWE!b7xpw9+M&CHeu5?+Xv$WDzx`ZK*vowspko?Tf^^awK zR;k-;b{^WPAq;`mBkO}Z?zrLD4`;YA+c+~C#_A)>*Lk+ORxJ+w9;b21a0-8v^9m0# zh|2A-s){;nf%C@B0%1eJ(_SVAy{>1{z-VqoiCbI zGOZUyae}c)USSjM;Fi|L!V>bf)ZrkKUxxl^C?V|z+}a2Qf$=cjfn1MMx1_fc!_`n3 zp7CH+x_Ao&kRbD|2!=6*;cI+bunDb z^Xz6t2n;e>liYJTd^~uEZ(_ZSvV2LPSJ~nraCQm;Xi#x3+e#ETeo=pfA{fk5In=GO zE~n*~=2<&LZmzDbXE&}O6sGifa0ie*iWSY>)PHv)kx0l#lh;?m!~H8oE`iLlD9y6a zaUflw_+L2dhOh0({tLk$ab)fi!=J+k~Ar6DpttlLlx8x5lsBS7=`S8D;m_bR~NjPCPe|W)W%0 zp9Pb!5KiAf*^4Y>aEh=`7R&)FSjc7}&Y z%-FCe1BlKRDKuPP24LcY2jqU{v#BQbb?D9YT!1*xKLLEVW^jMA1QhU{(b0_(IBu=B zr+#YP2@DBt2_(uxW0n~zCpKV&^68G9B&B+tzUDLK;b63OEXT?6D7g@Pg;XH6G|o8> zMAPO8mJc;&S#Xb!vCDFdOW9oi!w`p*vU?&pOw+YAORr<}Rt{_}C-hZQj)9Gk4Kb*( zaq%MzcG$ua2fTlJf7&*{#+ii^E=h`vcTK~P4CC;cg%W{VxLtFhH4o@#i3HN&X*wIK z`DjGVHL9G0KQugnLXYxtsTLcc#}9Lo57sTNrVU4j$^tfKk{%c0Cb&s=Kiafj|G3wR*R2krMV21;fi)^+a4wM zY?s~fL)98Kz*sl#66D%gfpYy=tQi`0riPLvXx2WgCdxess4Gvz8rY2oxffUlq)=R5 zE4oz|9LJ6a{kAV_mkWl5Qj$YaPRH@9?<#XU^ZIb7!L$*sVyF!|&@+%@^rxKGPG>e? zdVsCSo{7IY4|>{#duSDHkUKl8;o;U&fh@U{fwRd8q1# z!5nVK6?aY#Xh?j6c~hz)U6jWGP7tw09LjW^a<+p!D!mRL``LDuUDqHa!#tko7uUlc z)dz&S8}@~IWPOE}28#16>D^{^r6V0G^UrmUKgoYU280>P&^M0$FAYiw8;0+kh}FRN zH}__&?y&~<_KoWMZ$)HJ-!RSh_qF+S-_hF#_T~3)1-IV54>$@$T^pvD#nxPP@ zgeB)XzVHkN;~stbnJG9ZWjcslHr%D;?gf7WO;f=Y1|D8wFfTW5!=4A$6ejbEB}CFZ z+b_#T@?CPn4a6MXv&7jw^6@RM>*)27i$gV)&kkbeNAlBJ-2qTUTTaW`m$_c;`^hEB zI*S;bg)YKbvf1BwJFrs!y+lN*N?$*My-IY!z_X>+_~Q#ZiahxLp&#l^>|qC9_S=83 z^MgoLlot$9!rkbn<&8jU;T|@Y)LCj7+9HqykJ&hY5r3;3D~c$Kmm9LO7v9sb_>6S6 z+_0=5rf{^t?a7g}yjAt(1;~3--09UH9m&cJ#ynX_FLUIIAjyC#gx+&GKjf>_Gj8at zPy8xd{|Lc}sxs~`0a~-Jzws(3awva1#n=8Bm98b~f={@)%jeuN)G(islZ7!(s9v3} z;wV$=pFo#Q+etDoFqOT2y56?MWVOY^aI=P64#oJ6&!&{xgWo<64Vt8y-vU(lZslhB zfFi+4r>o1M=HY%CFVhI2GY9?r3iwAEInGR$vxemM-d zE!%2j$(7`60`!mX42P6OtrTziRveI}NP0M&&)*DBY&iTUHaXv2d`17yEYy@XH&&B3`KP7d)+q{on9gFi&e|C4VQYy-Ryo|n+Yu=aB54|(ieZZve>~cI!-P8!Mh{>MbVQm( zhq5WVVkmdCRyFjO1On@QadH$Nk(_1mD@_zVZK?LbZ_>FCQ!B)HWETY|h+QvPxM2dD zEMvQpK99wY22&Q{6OK92XjgURcBqjZl}7unb@PR%cM9nDXS(>d`oM+W7T1->YB(;j zM>i6=mjaC7f2XE6fbhZRc=UGf%r>8zZDv@KC~vlpD6+QOEg85>nM}3cS@rI;fYEY? zCL?9kHukEpVK}zEh&*&z&_O>jKK8Osl{Jt~Ldxx~uwg z?JR|6MYIFE4K3D8ELNr>>dN8LH8|$ZVd{%pLc!qQf1#rp9$gx6Xg6E9AA#*k9}enj zN0SsZret{3U(V;cvT~J~!uVvDo0gUX*TD&E`DIrICPLhgw#k-aTx>8H#!|3cxX|tN zMYOVn>Ck`2Wr(#VdLI`L+g-Uo{OePH`TWsOwsck^gIJj)jAx@>kx=X|zra}{S)PxZ zN6Npve||fT|FU#Ss+l&UNfg^P`btCOR!`_V`%x)uG@-A(S-g~(9(SnQhjTG3ou@g& z(RiLc#|UQh?3nlQ?@I?siNn#Icq7Rnl8gV1m3dZx zc$Ko0r(xjwZOmDFNK#q=oM|x}Khj6h9WJNR2I!%usiDQcIw}jwS4+uC7{hY2B*TCu zf5n+e<*58)d#QJH$e5S#!;24sbqojaToeaDWtQ;q@c6s}QS(HE5Y>5v*5H0= z=n*!>gPJBONI`PJ6ok_iWXU}ZF&p7uhkEIw=*q?4mtP=SS(J~90r0`i3&3YWa0!=n zluRw?vZ>SM*n&PSYVcUlX67Tr3ffWEf24Syvn^b+BbQ%Colw>Xkn3`F(fh;BmjMx$ zR2CjAnrg<<#>X2I5JsLa}m9VojgmNm$ui zeZo(^Y1@#nC+@ap+tN%^AnKdvU@tfjoUk{?B4X(XsKvO_H%|cIkc{!JCxT>Ye|XD@ zrNPOCts+PoE}hH7Fp=d!q?*{@GVmq@E!Xrbpv+QgWGen;#rL>SbN%9pRkN$$99#Ry z#960xG%&}`apf*XUlTV2^cgn*pRpOV3j4uvs=e zEF<&8MW|B=>C&eKz*$i8+WDh(Ojv+a{Tb_Qx@BfP862Q&=yO-1ej5jdXGnR?kp<+E z5%|QfSNvFA>yXiplXR+QnPgsQFmigvJy$*31+QmZB8kB4Ri#NrD!s#!e}&eZR*`<| zq69*18Ok3Oj0&(p5mc!!A!-*s~GoL6)T;FAqIY9m5QP24EzkPkg_Y|4x;c- z7tJS{sjH@BOBV7x4ZQvT(?9@@ToBGlLV~*@9ww@$8mgkEkEU(nqVKCi<6#Ny9_!&{ z8Yo;FdNt*2jEH+`#R*P{e32#}C3>Y5 z4b{=LBwV?(Vd`3ke-JprR`UcL0r{fw?NQ^Q#uD&D6U%NEH4w}*FjqZG^Rq&VOX5az zz|DuI?aCdb7fpTA-Yo=8Li`D}5^>4JR-Cj287J?t6WhWQn0F*;)^*TV8>dP+|M^C% z8fuVpM~&aD?daK>$JIcVxv{Kq7y8Z$=kZv&O_R_bl32Kaf34H9WQwX(X2$7V*>Ahb z!5^QMVZCr38Z`1@{|9b(UzYQi7r>e<)n+3#gxU1g>xrA5OEvhcsf3(U_AR|UqDtKIVAXH zI(z0=e|e)Y(}wiZCyJ0o$qdg|YRG)1R?hQhl1(6ZTzzBPl6Q7(jj%2UNM1U8gq4EK zA*PQZV(4iG(-Z!s;yx!(JMQ|y?Q-VfB8lsjWEw)(ETvbr9M3(xEA69MYcZe0vUbo{ zCqlt6cF#@(P2rn33KBhAl$6p;D)D?#nQM>jY2^BS?iD;?Gh+{)09*gRAGG@)SK{2% zTpo)4=(;0|MM%mLE&@|{M@j;pux=xKiH04;exQ+s5u9I_{1Nu!XE>8a;TtOVUA3`} zn1h2r-E>X=4%pMfy=~sY^!ONCl0Gm;{udQasvnoJKn4|;LKOoO0x>n0A@~6*f3+CP zj@vfyzF*;6WnjhfrB`lAngl4CqDZ%=BnPe~uZ7BzD#_XI-)DwH$&^=#9Rq<691cgr zdC$;d#o;Gb8DAwzu}r6{&Hjd4Z1=Dt;KREc;pjpj3_Z$McQ?PjjiQy{EaRD2-EDnV zclqjL@Oo$3q3G73QYuJatV6A%f8ceq-C=2!xjF&v(Dy zyt$hMh@`wwQlxw?YV3DU04-UV`A5ZFu&HN4zTkwT@kq$>cd@rWS$0MFxFk z`W=BoLnmGwAlj;V3vkSX{|=4IZTz&gf`E9YA`Cgxbm8LV8>k@2e@F`*G+0ZrBl$G11aD@RqK`p`7VXTtiZddk1*t8Uo2$%grj+NG`Ls91i)+mJ0B{B={ zNp9L4`tkU&geb63zq0{@$J;}_!Har#GIPo7%Z2zou|W8CDQ1OWI?`iSF6TjwLqbQ(ovE$fN-UmV&cM@Q8#_l4L@Qksg-9c+*wm0Kxv`^%aSlV zM^lx(Lp57kDO?%|@cYUU9job5)S9Z@nR^Pdq1>3NdRnJCfA|qqF=u{6SFQZ8z@60< z0n`;&)4E*8c5e~1;9XdR+;`|sYYg0sJ=CHF;%tdoh>u51)TYawtNnNbhhvGx)kT0N zArON`_D<0Lb#bw!+Un3lsk@+4zTDF6BmGhh3$?EV+ZQ470^_%)vVe7Fq|Ka+08HH_ zq4tkVJ9lQ=f6UUn0Ies#MH=o`XC)HXr4jPGv=T984&co&6#JIUiQ9StNW2Ayczu~n zK4ma;kkKzgGiD~WPK2S9gUfs0J#&Hv?BK>oLv?l8UqZlCcjB<{C6UH*Rz4$!5TBY1 z8eqYtTC#{|Q}pk~6v<}8q+m&!ooA*bTq;Mpy>X6~e@PU$+@(!ZkHD5zDir{1o2qK? zvq!&)%Os}y0ut1uqNd4)k|hLK`vD&{Wrs?LjVwW_13O;wsp62p?wNQWhx z(Zk^VXbe_z%SxTPzNt?Zr+F04QIWo@Uiv-f%}8`74hJ2xzjJf>3MavlqDUlgYgFAec6 zA-)xlnUv9)$Ja<5dgKdl#Z#tM=D&;0Sc#G#WtznO_zL8OP&ZSkiUi zmDzv3rNC*;gF6v2eWsw0EDh~QDbbuN~0V-%o@z|0uL?W0e-;Y%RX4nJR%l&-Z zsAFL$t_>T()w8g{KYPyG>1}z^fq%{vN0KBgi;q*t_UfXb6UOCy2!8A|ON4djOt@-?ewfnbPTG?}rQRjq|`)I}*$am$5ho6aqCf zmqDHa6ag`pfr$nwf4x{ukJ~sBz2{f>kb?|FT=7F9HODmav4hM`Fx@+YMJ5N?mTe_& z$&lnu=HG7>iD0MDXK_G+JmWS*pxp{rDoXz4dNEjo;qA z;La`t!?0)h`r*Yt-p28QM=Xs}zIfR7T|I0TpMtx6c5L%{e;GjEy z+)(F-qRgrFW>d69xm$)pB!&lE$>ryVpI^Lr=mLm^xG_?+ybLwzhbp3&iA7=*<5E$y z`}}Zht7EaofyYyeHA^CJ%_ZY8*}n(-WteCc*smIDXa2cfhCEp30KkTNR!d=mzuXu5 z+>J7bifhh{e^4-sE~2SmWW+=wz18Ye8~{3U{AUzLO`eaj6Nz93;!j{6M#>rdymi zJGEg0Zk$am3Gh)fj$TE?V$bY-)wE^ym_I`mw>s~ge`N#HO%rMPVWbY)>?`siFX?q# zSC8%wpoVSy8F6)R?FN{J*6RX$kx|&|7zHuFXhcm;qh8^c;7sd|IPZVGe|Y=P4{s(X zA()b>w`_ok2OwCagQsPj1X*2VD~t_$u24?F{!3DTS>PUvXV;Fb!=Cx%+6|o!DTmR- zNI7f}f8`LHkn4zFnF)F8uxCCop|R5$GIFJv zM6Z1^eyLXTJp37qLaB7%$tdF}D7Mu1#s9em7=cr5T^*>SXz&Ru4iG;rg${BCY23uY zFPTecXq6qBidx_Yjp*gf+Hi`bp2`R}Y>SEcf66WuhF_+p$T?GSXLALzNU{h%8$k9o z|La>-Z{}gUC+1^_b>8IllijqK+Fjt^umfB*h>KDd7j1FDSrIPKS`iZTa=Du^M@~Z^ zgkQh-_)t$xRU&tDYzS>f}^zD)dJ9-BaHEtVOUcr-i1^*3s ze}xv#S)W%^QTw{v4;q)DSl^I)@13C?$?~3&204?rw@9i-UU->Wq-#9oDWs(+=@zN^ z;YEUynj{zV1%c7dPnR;yPr^lRdZ>Vcq)zrAAKVaBYbOj=;Cg+i`NOh$F zBD1;Idaa)Io*0(O4kVb>ly_UAlCie2e`y>mF(|fy2)m|tK-eWfc4at-z*)WHtizu9 zl-?ORozgoHnNvIudq=!`m}p=5jBAYw5^+&HHEh;M-x$BQo{4|#bWZprnhEqe;Nt!! zD!Q}@65>n{XqS{lu$lSi+G}KdTe;+k?Q0xOK~=`)EKRNiBr$K^LL`10laygXf2o_9 zbT)sENzUr;DQ7jMoMRA3AbD;J+gs0sJ$5=rATUeQQRQulU6~zjU=Z2$Q}@mF0n+6$ z-~3Qfv)@t~*!-W%+6n5~e9ZrD{DJy^TF@Xx#47Fz!Rcy2i)RX299_=z$)6u?ULljx z3c)k8dJG!wP=ZZ3l*FXvL5>{oe+v%rfb`})WbC&V8I$((7<#%y#-vw}i3a5-eEMNo zDiW5AWodXvwuu;f3Xe+#?d%uLJM z))!J*rK)KPd-lXGnBDP^W7>QsKa4PbJCE`9R8lUUKy3grncGsYWaKHSL^^gcSSL`6 z;YDXz}7(lJq8!D;uUq$f>Y z`x)xq82EOq^L4(lLyWDow@L<)D0?vPCNu$5=J4L+&AKjDUH!toe~esJ7=%B)V*eGr zBLzqkBSD9!OoRWKTMlO(_ROblIYv&0dIzI1EFoTe`dC-HIs;DFO^*NFb({S2E5}># zqj1LhLu0x~F+q%dkT~l-=K%$Io+qP}nHYT<)Np5W0=ESyb+qUhu z`}VItyFdDz!l|myRwN9hVPVA)(8Prp5(?=wp_I-}-t32hlXi+G((wg`_pR@b$TaTyd=CAb~7%F9MPfk* z6z+DVI#PyzasZg6_B_U1!_j{KwA=k5-%fmI%kZm3@#s1N@sEHP!{L-8s}ep=*18Rz@+98VLTwM?Z$0 z@b3-(Yrx_7|1onAPOh{7JP;ZHj*Y`n%l+p!3@4Qmy|>Cxm{`SYMfVms0}h!KT(LM# zQ&Z{-%z6rj_ZH~cf1QouV)oZ73`oy+EQGMf-1+(}yr23ko?c~ zY;X6Qnp6EHK)jS>}% z@y#FCh3#C7-xc>ziQAX!CHJ__voD1>68>s zGjdi6GUcqFXimTHo+I2ol0jt!Cc;l+fbD1mQEP1)AML{jg&Bz{c)%`xbWqi5e72cP zgulyZ<&mtX_K5XO!6pD%tN0H~ZrpXSXu=dJGlB+X+guGhZ%twlfh#BomR0pN22qE_ zWMX1J=zyxj?k`$V=qWaB3M9^~e}jzN;svSxgRv%B1c8n(ps97MSZ|^VZGbs+UKpM& zqC@KCWGz>x_@2ESauQVqevP?9cm&UqBi%_rp<}QlB30l3H2~nim6Xc(vR1~L&-7`V zmfF>VQgvrq7dkJ^kia6BkpN;T^WQ|=LczuNvIh#>vH4hn(^)ae2> z#v4!<<4F*gRtcQ_vDbYyUuttRUd+Q1DKz07B45r_HytZ9LB* zr#20cz7tYtj7XI{^hTCaA zj|w>)p(NAh$}liX5<3NyUnd$K7*Nivv zS)G$ZgEYc!c^l?*6#s9^WYdUdyEaREh|VPm#Q(GoBoCoY9JK z5_|%t%hD*Tv25%ZWT_KQ;7K#?G0UUX?+Y+WVN4~YJHr3VjXlV75e!C{O#gJT&oglgpf3Fj$IXsguiHHB+@?wTg9G6d~{wKz!#qk zd8f#)&oz7*9cj^3US!+TC3+Nql4VJyfYa?4qo_a(4{RUQQq50o`MUQtcJE>>kO43+ z^;Xc>w4|WTZ9;6?c~+hQ+HUq)Y3jF2C7y{1o;$hn4D!f}H&$zwvM02Bp9tYfUH+Xa zKUOf2O#tnktTyzt9fx)2@IA~IQEIo!BRH8jMr2wuceE~1VIn3zA`fX`EJtt6_3!Ru zo)CYBde2N1&rBP7x6K!Vq-%|9UIzfxUQ8xutiC6rMT3E?yRn4^3?^QH7b0cQrBR*S zP=zp?nV8xTu?J>hRO606s`CpYa`UdY0BDEBlHCAB%iWO zF-RG&o;;+6_4T8l&ExpsWhC<<&lVG(Ve%E|qNi3_+_Rw5 zZQP7*n?h-vQTi&m{VhQ|+9Fy>{qKRMwtvzI-Ik}jd*G6VG4BrNMhCDCzjK<5V$~20 zKVAK=qugCnqj<$ugO+3S1x$k}b#cN;rygGL>VD>$P;a&9dSkqK6U)*r&DyasZkzhe zMh}s`sEj=hexUtQc1%x8qNlW&zz#I+Dd>8WB)v3`$ZQKipLYY-B2Rv^k+fQZ))Nlb zgj#V|k9NOO9Xf7|&luoT9504txn$;{|l}0WH1vv)GAv zgfv+dzO6DPwLm)C`$|}LqEqpxj`rca$F&bUnHJ>vH3?vkkMx3ZXAg(;Q24L!JFMNt zvNs2W<~S*1mcuqatJWu2DPnTlq@yHjZrD$yJ1s+prisyfsV|sj$m$d+*VBt`VF_ou zC?XXCMK&m&KL_#w=6Yv^qxsT6^(3=z@Tj54m(7KGCA?%fNlz-nq>=MmYM2dxUAuvSwv^ z6J+|^vkBpcv>C(E%FCO0RSu7F@o4@K%W@PQeSQz|2aw>>*qixjfTqb%(vzcya#geB zx^MIZ1><{*`Z&6SuDP=QAK+#t?L-WGNVn*hHUg;SU*MsVdvqM824V2Fk8Uy*1f3}g z+I;;XTLEbk*{yN>(;k?0IYgum(<^6^v`MVjb{!ixZ{F;-T=M(S-k8x95A$T##CcE} zyJ13Ku!ERz`}zfQ`aa+dgG0V1aO6e#p}@E-GSm~Y$NM~Jk=cO;CE?2CNuax~LGnI| z@B?^a?PpuzByAp@4@km3c=z;9YUrAg@!G%K_50mM{QY?UBJKeYIjE656#c{wQ#YV0FjK?3j>TiC(Y~M?1tDNyrAt^82ziqkH zGGuw)#mQsrkf99dzul8<^F1ut`?3}c@Ae9q=-5L9Hs&5h9T&Y{5~VZE>U+X+XxDuF zOI<%2@M>3Rsjezx1rP_L=E+<15OOhAPE$~`ZhVn4l2;p;d1a+>E@Gb=PvM0fb z#u?D_0s)^QibW<$=CjO()&7u0`=&wX-7%~Jjl=~vZltK56fa`CY~X3AOMf=gIj_%U zzO*e45DURz1_!|g--Zf<`6pjAZP>!D+ zEWv6$ynwqnaBRfaSiiUAysoZPzB*Sls$VoJVie!%|2gCx=qF)wjlzTMr9-EI<2a=z zoSGn1q2*bXu+4$=aG2*b70ogxn%j{x!EB4KVJDh%m}cBU1ma?|!OqF}uCsUhYG4=* z?VBf-I&Zpr0&0^e6snDt-MYCA;pc>Zt*9gVvz=`19$lruYxvmt^cyfN|ui$ z?)N?MxdW+9aK`JSdjhIX7t(5D=IbRKlJH(ZZ3Tajsu*}gfIFXq!Xyby#gsJ**Xd%?kNFtFzlke=6?DdqBY@hLA`B4F_?Hjr0gwZ=X8Qf3qUw`43DkCIG2}Rl&c{*j^zo3^x~Rn^sA#&Y-BW);>;f8YfTGFSs#Dd=`>sC@GtVi-s4}i9gkEjlI8OZ5z8wY5y)Schk04(=~ zZz6b~e^xT!au|_K2$ry4P-VS+ySW7pp}WGSU2~1Bw&@Tv0XI?^htQH57!FK-b6rVx z`~i{Rv3?IqI3che3>!aKLFMX+mQ7KY_@RwfWY_ZR`k8mL8E+#}%QZnYLE<9K)1oHN z8bAfS3tY~j9E0ysaeWXG%pvn$G1sVGwIN_HavQWStDD@E=sw>dBKxnj3>W`s0t5-3 zdULnxqW-Qx&LK&S8FW5jZ!3AeL%s$#@y*07byg3mC`^uxX$-sGE(aB)I#UlAHs@SE z$q>_9c2*DRTt~|ZYHW`{JLucHlLnH<2w+4GVv=24C|ob3pnkT06!1to1!_Me`tjku z5!NRv5ZotvvZeMUtXr_V!9GV(-H!^TIfO6E`1|pAy<5BU6Ci)p9YZUHInsG1f5FrL zS74DHt;Q{u9PZK_E%6%4HZJ)OFT>JmH%TT)Ke->145jv13|XTd-m`CJS%}eIGvK0B z!RUr^H+?5JbpSRg}0h?bS zO>eujz36=8ElqXSzd+EB8TJaR7`Tdk`4?9ct;18X79nIr!ysJQjfp|t9R%};aJMvB{-Yxi7CFetf zsB~vdDXdu@sZT3eTG_fDohz?P`97_~+weMQi*|+a=RLBRfuU&v0RPu;53_G}lGCEm zAv0`J*4yu!hwtGH4Qh_%6ma_F6I*aQ1NgW&$ZI!`YT~<0tlT>78_1k0olLl%o7^y; z6*XwThg{Dm}N_UJ+)-2;2Ay!dZ)wv zh{D=*aW0p@lL1)Mgjtc!@?(EJEJiTVgm-qNmhjul{YfqrN?$DA28g86;dspzji$2= zpZTOFUKSVuyw&BbZGoZPCca{J)yL4dA-_v z6@RuC5ai9uizz{b{`GIr7}l4Z3hOyDWaE7DTkOwMhwNrn_*AX-pwJA3mTf`k81d4* zmCLMlj`D3)679`)mBx0y|3aY|f3^MOYOu>wk!+yOdzC?=Sabq;sk6`HYX>9r;R9yh zH9|W4oXNa#g;TFw<_f+!&3{*HRv}POdPE06{2;!OB;Wl{apL@+;>604cApDL4Jg5~ zaoCc$=>!auuv^p5R9dnXX-0wAxk%TBwTurlYy{a9Hxxf#6sBqu*; zfI@;2AcRd4bNk59@x7r&4e5%hbVNjAuD^`2uDy5*_if(Bf-P42JF@40y?mX$R}yJK z&B}L)(ao%iYMj0w40zQ`d+5(I05nx(D1S`aRcIUy*f#BSPJ_P+s$c^RPRuk{Rwq+# z!|EM_Vbao0e+9g~c3_d-eo)E9Cq@fHMU}tnV0X~l}$616wpK-N*k05dJqfqA4?jHI}!P>`NHI}~a+1HyELKKz`0HQhQKYGyT zk^T(dKg;Wyqm*(Wg|2V40?f%qaLMWC;NM32It+eiGI8~J$YEJc^oy1M^7V7cs`_7+uh= z@yEtQe1EvBF)?kI!e+fq0fs)l@07n?d%KP2jEucx`J4XN%E8>M&(Q+kmYj+{P4}u( zJ;91=EoU!wcH{zI90cDlihLOmNGL;l<+R8hfjJLpW_0)ni480Ik+mVXa|FQbo=7}e zx0hFSn>MH#FPN^ER2V*8^e@7QF8deD*_I@Z$R;?K)S))4qiW(c077ZmSrQDFZ1uen zqzJk9VZ6qaVEH}qKUf*jdOuySyDd_W6MxVS@vmwLUt*r0C1-YdIkV9)R@7mH3r6)G z8t5BptR_VO+@~*eQwEsb4k(V`Q|aRWVUg;bF(ezcS*bxte&a?P2Dh!^+tVZ34k{0Z z7%uu6!$cSK9rjNQfN6>*s&y#}Pp`%v(Vg3dEs5)@%8z>7xZT65s(To0nN#=kQ3a>O z#TuI3EdJ{rc8G)m#TCh=&7Xb8FpAMb2K*m7S>4b~_Uevx3^6NaG!!Wj2{9%^m_Nk+ z`p`xt&~{fbeFk|TNM3Y};utO*tHUwG)~a`0=rDidfIX5?0MiiaOqKWY!BRHC(JN4R zO&Y`oh%EL(15LP(W4Ipek>6w7d5DJ8{Hsa6<@=YJbaQ_PrY^+?;6>RZ%#;2lLrO}s zt>7*TO$Y9)RsiK%nij*aJ%w)wL&xPvTrMON^Wkd1iGns88y>rQnw`-LLhaY=B_-E> zO{2mX&Xfmf00uBsnLiPKrh+{MRP`W%4YwIhkNv5GpqxV!bS3tQlf)BTbTvE??G|J> z!OSWmtcwY_Xz;Kk!RfX{WUv4uyC^$kiOkd&3zAd>$#jybD=q|SqQR}Y4Xu!z&2VrF z$i#IG+x8Q1-!7u%iE;Lv;a#Wjf4K)XA8=xY+WL{h0l>f5rg}Q{MGC)tQHy4k@i zNgq?phb{r9AOB__Q=iA&A%y*?Nb3Rj7vv(O4PVoVkVf|xeklw}~AOzKgZ>HnG8@fhZ)9@{LQ{5_86fAyfr`oQr zI%oTk#{Q7-#x}Ou$jq^jVo1QNL__g;rFNO~{`ny0MYd@mJhVzY7)ky{*Zn!7?-$7^-ino8)Fj;EG*7WZ!>lc<(C{BwJl{5!#w{eUz)Fkg<(EBm9@+8K15w-|Kn zN4YJsAF^369Z@Z z0Hz?|*Be9<|8Wk6P=^)8JHt9J3tq-(Aj4pk@P$<<;~A75k6627n8c0C%uHdt(moZ~ z-JP!_M%ps2dR&g0iD0Wq!eMXF?XjckUg6@Nzsh(!G=KNhK;DyCj>fk~;78Yxi`cwW z7bGm(42E4u+}B*tFFl8_?>4CCkc&G9Ai!>u!j4vGrQIk~&?wsppW;_cb>nVT{aGF$ zI!5$zss-+*EGLLhM&K%q0&)hO$Au95Xvp=J&9h^|WGRgaft@+VV35+H%e>1`HI`Nu zyjHU6Lw2mDaW2e@8CeEx8zD&l99)8oFAFI-`94UxqD2bE}Agz8^3{(bDsDIDC5an(+{QUhmSk~T4 z*-kVSdI?C-S~a^-!NS@-W5_3cK!w=4tDIXv?t1!1;?#zJcI5kkjzi#27tapGrv2>}%Zy2odQSPm#L3J9w%L=< zzR~*`= zE)zt^exUBK{KstSv9F;9dyWfbsUXPdpz$MI_#`!RMeM$LUdb?DKr$Fl?LAU@XZ*i; zdV8XZ_+jA%#!X+E?mwfe1<_>|~f<49ZNRVkV)+JBC znXsi;2!lXjbc$1lAz5Pod(){>{8S#>fQ z-7thTHa_NRS7br`EXfmW7mozDPushfaUxf@#BuVy-96%xJL&>$dB+Rxbie=T^FZ}D#pDdSO4VBc+DI|zVJ07|oFJpg|nU+jg@ZN4Y?ksquV+1iz@%GGV1REcQE zZOfyNzaOSK6kP9KYyJ^(>L!i!Gpet0UUTMdt>6{~_Si=08~XM;d3}X~%^-r7u`8#O zF&B07s%@LwB(bg8xnkf&vhMAL_^w}XT=+GHJSX}m?#^_E4A78kL*A`t^GbDuzaYOU&?$}umr>q;(j<;>LD&z+#_4Ei`@cg*fj4t{v48O{ zg|r43-Q~B{KO5*@`551b0lW)u_aJD%(fK~D<8pINU;lYz=8M{sy6Pi{AUhF}@ZkcC zZncVWp`pp;O2EC>a&$KY6wX={DwhDC-CSP{J!8)1Nj<&7wg=z!M53_9*@7~Pxz$f% zn;jPQwZA~}@Q>E=F^F(4I@z796C5_;Mg%-OQ^ZV}a1LudeUk^e1XzaKEfmbi63eM=8D`)y~K5Cn4?)n|*0xPmiyV zLK~mV+m9;cXe^7X-WcZN^(zC+^HP`*&nh&L3M7@L00LZk$TjT2^JpKNPeiuo36?7q z0Tcb~(7ZBGf87l(IMe^Kh~j9`&MloH2>Lp65xNTt@DY6gFyom@`Lt9xK<+tIe(cMF z-I#F_gvd(gnRU_itH_k~5ZjFGcPsq;8rf;u3R;X($A~AozfP0KgB-pmQQd$L)LC&) z`NzaEhz)4}_I$m6$#Y1XF?(df?=CoGzfA`d*DV-$guww8=$F3rQgbE6W;4oj87KN@dkU; zt)vg9@58WyKj z!;{$irobaoMAhbTrx}&7lQNly@E$iQB+kxRh^9gSOawL}=fY>k7#)p~C~N!hI>Kve z1Dss#X(Q`_gbC2oV8TtvPdV%O@?BvD9-=8G_-W+dpY?>wB^g5&KVh9oW`Yh1JUWXguwPM0joLmaXF-869}&iBt?pl2KyhN;rfpxKHx5_1<7o< z&o5+Z*+`(grF=0EAH^E`Vygg52)=ZVjM->_M{6&`gS$-wnOcScCgFtw3-d?_ej`=% zW5DO{w?J1I-kIU7craEdXo%&CQK`nLZD|)NA>pXA54`pgzs?IM!7IWFH4Q6)rjUA? z-rwlqSZ{b!TMTm^r+6wJvCY;rZ_Ou5v8xaj{1Nk;kUlxOHC25Rz2Rb%L}(?1EXgYX z<{p0WUGf9wkuH*!L3SVMeYqf7GwwKwFKZmqTVVn{bKbS*nl#&%`k1s#r_r+2EEs)M z)yli`0Bqh z7UC6#GEWLNVTwfZm*xWKL}bW`Z1MttE|AQ#+!=V}^dB6uzct}4aF-$t7gNfqR<}fV z1}b@S4>iaNF)N5sGasziN3B?Hs!HPg+#8wBLCwRa4YB7a;jFx=T z;V$4!BctwY$ux)6jw`A^da9HG>;Z+F;tn-2nN1G4k0;z}bsMiIZTlq<>@I4pB2$CE z!W^t*pe*LVPa?TEhyl4Utx}}I8CZyB1Ix?;m!+ru@r`9F6GFCpff_ zSdO>^A!$hI2CE2lygW6{-C>>Ks9nrA*viFz`Y$dh6OV)P)Aa&V?2v~{G zGxnG|e*yUun0q-(nJYDF6GdtwNs5v_Egc1wKbYZhk^!`O@+Kmn5M0K(+e^9;n`XM# zZPKiNRu*;(W1>rtpcdUca|zlF%KWsHA2;&MHla9DJMWL}yL=YHw_;Rzh7M716+%1w|`z)AP+JB2{SVSmx^3`wT8XO&*D2F*=^e4n+R8x~SU88dXBPgBVQInn+Cqf|@Akm#e3 zdRuN}>_dg52PEbJ*!`$2qRVjh>{jJNqp+!#Lj9-|^c;-Gg(WEDMt(L1?Z=({Y1h}- zxX}l&Hb(VP_kwlhxeCJ(6lXY{f+ z_n4@V#>U_9afc+rr=Z0zCC9WUW|#kBb14aIqG+n`w&uzLP~mEW%%p22CRz=MbvOWt zhQiMJF6YFBpry14b@)qB!3Mq}J_M$K#^+aP9@+VGU`OoiV4?srRr1EU7d&2!Ns{z+mCDZCm|-IIp!cXcwC#*v7t%TmBL`3T2GD^rQaV() z3|j%dsY3K=5PSMWK>BH1(&;1E#qCOK!;EQMaR2@Pn6lZ_Dz)DtYNFuD737Qz4KY&301ySt2t1lX%{bok}JSqj=`^rh*)0-}|WG`!XGkF9-4+KHZT*LkhF!8Q5 z3c}izV*fTfjweF*GX4pt;qlA+NL7W9zfQA2(^M*Ijm*GHn2G8KvYbV0qQb(+wSS1S zcyqSvUC>J_dTM-{avG5|N0L!2u40|UvKs(HT0YrrdS{i@pv-zU?YacN(f96@ z*k0JF``PAGf@hLYJOOZ?y|rAjL5h>A%{H;}+xK74G7rwwl{kNsce<4WUv2c)V_zk# z=6sX>A!hH#2Dr;_20B#9Ds-Qpj8%>6;l{sXt;NMl)QoQhb`L+wvaiiPN5tb%>gfT} zU@MlwLW06EM?!a}U=@!on{7faraE5()MwnB+MoW`{JlutbJiDVkEQk3bXygrnXWC5 zfKiMGV+kt(j-9Nh2|?7*GCSZ>D+)V9nD$Cg4y~N7r1i*w?}knSUR|^`8BPS%c7oTC z^|Be48%xo$Fw(N$R1<~kitO2Ngf#>R&*yYu<^De$gi>@VUIdDE-Iwn+Z+I^yz!XG@ zvZUJP+GE?D8XcVOf=)cTIE6rhD3a=aKtlKk5uHkiZQZF)#z~dM;sX8Mi$KpJH{T}k z3v+$v07bF=een{Pca`WRdt~ga@tXrlmKgs!rTbXVYiw&drS%&l!FsdcXTw`PAC;~N z6OI7;vGEL0!xldB5cd19CX0*TTKV99v3?v>7g#c>c!j;ypP~P_7c42lhWwvU&Gp}L zKvYmxCZ_*ij!%mQ1&0Hmg})%x`$!i$pM|l>*ZgfW@OO>!lLA$%KWOH*79Bz_YaR_=4QqFIq65&#QTY;Of*E7saMIWT>imsE&AR@XW#j~%y4w2Mk+;} zxOK?${p6Ue0ka@y9A3UQ?^wG2xDb8t*2Rx?1LV+@Bt9Iw{c{7PezCA!vt+Uw43ws}*jIKJWjav6PpaRH z3w)q^*xhc{H#Y(T$3;F2?K1ti40=3mg_W6%2Ld}Uro2(I4!z4$)si#OS%N}MNKjq2 ziw8-wX4qWI3w39(KNe^Bw=&ysdP{*IjUCG@sBi2va-aPRejL zKXi5J1V`1>&iEP$8A)o)kzc*7H%si_@z?L>L10rt7B>Vmd)%aLhxWvF_tVdN{2i6x z=H)O;PZajb>- zb%(!@u*ukiUK{DaM(BjO-@6nd)sHhwS-L#oqAUO8sqS5>T&#Czt$WYaFB2zDyzM;X z_*dEWr(^<#VNtyz@I6*Sg&|G72Z9*D4pk%61_NIhzv8&ZiuYGUFa0CN0&iwH_I8gp z>W@0{$pH{P0^3UtyKMgLr8<0@9$C#TV=(#WAAsR5yWJ&6{J1Y@WOMN-y}nhvt$WQ7 z0uzaUEanRoI_D7k6YYhLgX6~GuL3;(bP<%g>~*RBs$qB!@$39NSOm!6=AH?&5t{r3 zI9rI!O{<%sA_rY!OHXB0D{#V=RB%YR(6kW3726u9Ql?k{@+5^1FBd-hQW|;hf39s8 z^Y>(H0>)dy$t9WDBuBizZ&5!SmdD6;HE%FvN-q%BEWd#ZqRaUUN`=hz@;7G>uYs?^ zojr$UdUG)3U2QH64GfjKEMOR9-3Ryv!#{+mYpuhETy2Di@REk(BhH0*l@Fd9 zs@fc6#>CKHf5>sMYb>sjxfev8ss*4CKZ?d}yyNy9_ziA`%>~j}{`L)u1#Uff5;ksL zQZ}ZS#Gejok(%3LGB|6`?;ojx>F4TZUUYN5lJj0&K?EhkjoMxdl;5LNK$Gg8k-K4=r;~0^ZVNdlmu^)cvE-^@#=9>-#8Jm zz*TXphcI6#5tB;=XR2A>h5|^+j|^fYXC$V(#n>&_)_x7jMQ;ufv%xu2nByf-kVH}* zwCji|3Ixkz1f?prQ=>Doi)IYes{3^0>8n5xz1DK=LC9v+nZc?L^r5jZ)1Enw@?_V8 z!g)R7%V#G*gV3}nMv|#3gj&gYu~4u;QGsAKLS&k<+30rvOd^^)`v5dQzpQQ1os?FM zALWFNU?Lp3&cLlU(i#E&<>YMoJ6WSHeFx7x+n@&9}$Ue(Y`Ua&u_n_j@iYX_Z{#pNBHZzl?YN2ClX1z16bT(J>~0-SIE7N;gr= ziP)s?P{b&ca;wT7eF26ejNl~izV2khfCP74d7=2`H>9{e(BD3KDg>^#YA+bW{^8?P zlD);80+UvyF{^?}q>n$gqx8H#USDzwZf*6*^}eI_-tP3u3339y(b-kinQ|(iKWwxE z_YY?lgj6sZ5Uz+HWK@X+?TvI7!!`Xc3!nT1+=HCCkn!Eg-2p|CDs|Cex@?PSlkh!+tDa7REd5T9;Y&2B+j_eO#z`T@q|V)Lx9&ht$wsF>Ul340U- z?$7mp%uy%M7J!Rqy7*UU;ah19OU2DtAkXVX@Kr~vOCADeVp;K<#%8==pdl?)+({@# z6A!|n#UkE}Rd(}@Nv_F>_3Kf$QN0a2HM{aUNO{~kH8P|aHhS-ol*8JnAZ6el>3?C* zdA7(__soWt6opCKpj(f&`+Z?JQItEHam0uo&>*8tFMzsAjb>b5u&+jtIwlo;9h|M= zj-kQ|3_6#H7q{_9X6KhH4*#-b{1yJTpCSuB&mZ7|Ed=2UY;nKo=r%GK1@%;Bs}q8z zLZJfKo~l@#6WXR76lEuu4P{(sNSRQ5YlX!n#}W|rTyVVV47HPpBkD%VUZraN7HpHs z6Fe@0IKWfqsa91J_1xXpRKnRj{(=4~A2!cydkB-QHl&jykupW^=nKaj9<5UiQ;$wg zy$@;N)oe~TW?)4~?X4ocb=woOinh{-S(t=xGVxZCH+=dMKK!OjctvkA-D1<|~zJ zpA~krR)#ewSEMy5t=$QJ6S8QLmD4MCHGkzLKOi}4udB~lj3DMp`Z9e8(XHD@Ccf|w zki4d2aBBN#9x9(34{=;q6dh*s))yR+87bZog#|ZvC}Qp1$kL$XsT#s^P9<{6dZH%y znJaf~?gz9%S`<&8<8diuK-$#yzjy(geKdah8-*QtjK;Vw2Pmd4B-vKw%?zB-zmbl! zB!EWNJiF8yljlzEah?&RA**!BkcMT5q`Pz;ynQsj-wJxPhGn%K#Dn^}1~UB0hBWt#I%GgSGUjh2Y+PKe+=J@8&s=y1lt zbhfRHGXV!8oQHrbLgKc+!FwyQWc*ATv1{E>?UhekGr#rlvz=7`EA`1H0NnD8?Eru=o25Y+Tf2OcL79Y)I0jK)Mwd1&^z0VoVx8nS zbS!KUIN4>5UCk^k!H#|8BkIasxv#(7SHD0Z)Y2|=)-;F>Mq1OpW2Bj@Bar8nnNU#(R?y&4cu^UdB2HEn+{y@2SXnR?cOVRa}(OLJ4q(d+2yd zctYj{KIQ|T`J@3h%AA+xi)=WUT}FdPtIOokFfw-%X!AKqm zgEb1HNfVxfb>U>=(Be-Ui=)EW;W6cgFHSW{q$=Y+3bDx50-J2_vQ(DJnC3IfZIsuD zUY04iXAeOMmJ{}*O;y_c4=b~wfq!rH_=n2xV-Yq#p`LIS0`UR)nydPJQ*!EeN$9F$ z_)rL(y+z`K%I5Y4sc5*(ix^|FXp;H5jZ~bqb6UiTm?U2*6?Ca!x@2k<(0J3?-7?(m zJ>tQ7)tUx>3DC1opv6wGpM_3}_R0r7`^b+Q&-Zw)a<8_cen!AgJj)IN(kty0;jQ4; z3nlT*0-1dxMR%uQbzFzT?GN_%JzZ@POQ&xx;8gjsbGwI1?8&3@6B5LC#T{?TBh%;H zLmNNFx>b?1QI^zeXuiCcSj){nrNqiW!fO8N$M^R!O!1Y~iez$U9Mq)ePoXwz0y)Xd z%|u7|Vi%D>D1h9`emVSg=OKI9X+zDiV{i#$3{88f67pR77b?FY_DM>XK%BMr#CoY5 zpaTZ7*k!54c}qFQHFrD5y4O#29(<`W+far&(kQ}m`y#g{Fny?oaHXq|Lg!Mtq_UMd;1qQ`BC zTuyTWL}0&~`tUzE5mMJbp9DD}IL96ufIV!OFUr3-=kSY2Tdqe-g-%j4xnN_N7uu9w z>O>3^_Xvt_u_TQ>nGDZ~MnGwb_DImdZgtRQ{}qu-xFDxKqP}1&Ugr?x8i6J0GvU;x zCxqa1HsG5wOb+*Ig}*A_!rwGyAh;B}0HzHDO7kdgUyvlGXV!S#Xz!p6#7Z{-psxj} zd?;mi~d5w8G{*uKN4*TL|)(-#y7pGjbhe0;Y;=Q|7dmcQ($WlSFp>$EogFD%fW; zf+cY~xMASkiivna6__G}%^?aHU`f-^Iut)_MZFU*nmQt{KTC;S`YL`z+WnN6=9YU$=FcTQOIM{Qyl&!L#>Y#9|{ zLLCU)vg|J=60%GFv)3pD@`Kboa6vp&BnJ*dQYx}Ov^d7Y2|b!5h#crI(02^=Q{6%{`p75 zT004ciIQWg=UD<8u4)co~urFKF)X35>^Qu&r(0(!+z2i;2qU$SbxOqeFPh3 z)n)u7F~b=fyz)q}krV9iQ?}_rd-8$t%-}{13JsM*Ub~W(nvjFwzH}HIk(qkl`XqiC z6|H`(6iD}exS#STtCSTy6~VkZO}X;AIZ0~8L&w-Fd2iGGVk840&1az_qH@zZ#GMS? ze5xk}LQ%n5ZQ2b4fE=sET;}yuJjz-zS%47gL*8#Gn>fO}Z4E8^N)X_nH3W_t33jU% z<15SlYK$yOz}RrWPg27{GQ(|AVA@=*IKe5QNtgRVVzAYg`0O>5rvSS~>#g|0UT_K1 z=5Ouaa8P>o{d^@OD&^8(F?~Xx2i_&6al^;xzv7%&{?oCps-z`!kmi<@YZ4hYy)8E}y zKIbcblNso?2&c*CsJ{8ge^@28%8SaZM#cf{s}Xh934&dY)1))VHz~95*%;} z;6_Gz=zTl{Bsy%{=E2%#B9xi&FL9#F>m9kQeS94|ybAihPnPB5WpYiPC`8vV>k#nt zNVAfT;e-YL6SF%8XEVWqaRwd%N%g<>gLZ8T%AeW27S9mRW9}LxUh7pUAt_Xxh3c9h z==X-&09}DF;?Qm!iuDD?$sn|iECnm$$C6H>891^AK+swDoUgEx_!C=QckPtq-dm>u zJ6;zbakY=+3(rp`^kphKo~s+OozPfW!UxICJCaEjE6q>&j(;@pbsTgq$dPdnz^k>O zk&5Jk#yBT2Y;!KL67N@=!q&;%UY`d7Z)OyGD$fc@U3lA?TuqGi6k4=~kj z6o_OtZZ~1ZsA@jQitbn=zt6-?PbEj4MByj^?P2FA3^3&1LWrO8h>LoX9Yx>$utBwI zjsYS*CxRZs0;t^SC60g16=JZXb84L@<>1jvX#=sYFN@CuYIMoxf32W1ELRMIRlWPF zeCebOyN;p)SV8*9$LN;tfa5)kWNqnBxWLW~Y%F(BAOG_Em1x0IEHBelpZ$n|vC zwGO9Gy6OskCCTZu7K%SCXVA2eEzGbYzV&Ig@lj^1W(%|_s}PLcQB5mDc91YEGtS=K zDgc43_ktu79XPdvQuSH8>SK%^XV1F@FyZ(xX@wc2$38fn1`)^=P>j9>h+Z=*DPQo&(Z?G&S?(?>oj=xfk1z~=_<{ZNB8{1l#>4%Zhte=InmE$= zL8k}S?p{!#og3aAOw*du$1XSx0FpxagvxsB^9xe>OCjp3r9bG&fRk2?y$ZJ6xT?TU}7aDcN7-RlHq-yb%hrN%kUNj9z)uW&~H$@3CQDuBc(_Kaq$%^#GpT6&ON`Q{tgT=T9sI5fOaW(3} zfQ#czz;)mjHaZzf^~@OvKVXmD2#8{TMXz<;9d2pEh(Q`-X&~*3L~BK;VUzokfP4(P zl{St}&}JsUhK3^|(4ta|+3hp@N)0+xD%1kswYv^gPR!j&QbJx`2rPpcMf*-%=B;6C z5M)8ZHw|hYl4`R;eJS_?IQC<<1WinjB5hYfT{|x%+65Xu!kn=zwr~8%-z}SdD_=m$ zSVO8Irwvr|j91{kgA<405dI$z=fIr_pe5Vbwr!go+ji2iZRd;Kv2EM7ZQHi_?%a86 z{zRSHd(}GH`qCz?4O16ZD&Kvo#?MasuR1bJ8j)AL-)Ft6AU5(HYpoBD2Rz#OPIpmU zY_JJ#Z?UBu!O#NmX_AqfpGp9R;QuB;CHUAQ2OaXty!wOY>@Bl|P z{A~UJfSFZ%Nm7Ba!O>EQTp_6txj8st7-dcE%v~&qSXfy8YoP(t+Pn6+?Z|$s`u(Gq zBGd`2S;SF${zo--h!z1N2c18Xk9ljtbgC(EQV>qRzPhS$)G;x4Fuz;cUY^)^Nk`636ZQGZne@uKr1f*YvO1S$9HJ*X-rf#g4V}Q7;ptb}b<<5sE)kok$QMU8s6$7}I?ALuRCpBBhMa10vypldPAxz! zvlK&E=|3>kk+xvaB=wetNC#F<&=83x6(YC`TQ|ZrNs$1#z7f2#ZBxyjCdx=-X*0&P zh;qIFUlwB!XNb)9X{4-1J}KnFjiNoibMdrlvVNFg^oli`Iuisr$_WOE25VV|98U%A zHd&k5fw1&UWNas4+ax9{gfT2jj7|)_nsK*&LCLY@8#BuKrcOanF;+^Ay}-@JeyJ6X zK&5G2EM~ym@(Q?U5n3bZQgTJ~HpZq!M%v&Wzm8DdYnmM89x_G)@|6E}v**2Fj9lV{ zYSB3Kou(XR03_^sMdZ5`r@kXNK_5dANUd#bpXB+UJmA6;;9)(AMglb2>~2^jJBA^4 z!7dl418MqeJ16#%m*9>JC-6KP5TFVy6Iv0}L2ZC(l~Gz5cMChL_&Ob=vFf>ao3*rY zaJ#ha>e}*#I^!EENXU35XX1J6jd7C){7rY}&o|+(i-YOGMSZl69z$v_#V%kMEOwEaVe@5!}aP0dVvZ!u1EyRLm)9KPEAsQkoo5CX!jK1apK zu)S-#S5~Re&$mV9XloaPZP(evMFAn|3OPP>YpZ|9rC^RejW?SEW<5GhH~esG);4a5 z#sALW|L14xVE#?Po$lB6)n(oL+o1XF%>wXk-N~Ba+-BKNq;?Lpbr>Vafq3rSg~iF&?pH%so;;7qf6>R&(rr_0Qj zdXmKQrrYJ#&k2m%6oyhkJlWz^9w8MK!4s6+=2fJ-jXg5cc`2l>2 zM<2goFsrjfM`Im1?gq~6Uh zfppOj%O0J&Q!S72N(qr(X!bKGS?u(>b@pumg&s@KL9m3m%~v2-8-QB|%*kz|qZjNQ z4VgOaxRVYrok$6I&N5)((@8ToKmN}yn~JYG{$96HupBCGE~J)IrgM46;vAAk%B<;nYO2IfEdflr&ME#L+r1U?eI?jq~ zq`=p}hVj==Lt&5?IiQ^b;eVR{z@!ohMi)}45*BsQBx1T)6F~*4umA#AI$Cj_msJb; zBwvfwhC&37g?xCegCLV1ITvr%KMwMTHmMlL(`a1nX$n8Xu-txL=x93I;k^ckNA&X1 zfPKgc`6?eo2(PH%=Xn3+xp(l)*A-6Ie`}$LWXK5WGSxIC(CXwqP32(`W|n_gg)Q#Y z7=_L5Rq+T%AYeI_sROQ=Bn^6E!Q?+l13tfISUNyO!g3<<4@te3Zd@ikP_#_AjOo-% zyCHXG%}XbTD_+HEA4fn7AQWu)Bp<98)#x%OE%b00(nj_VATSV=flh!|rX0Z-KAd7d z{rFFRq<6cW^bd?>D@)ORP{nBvGR^m^Ru1CnrnUQPo1X$R z78r?LKrmE7psKs-(7{7`+9Hb@5r6;G1}H=cql-INj5Vzw{c-qskDf|d{KX8C>XG7tSDaR6i<0cXyk+LCz1Ei~ z=I@$Z9S%P{#WA*Mn;2dHT=}cqzht~+nnTu|T~wfUSnVT<;7iSWi_LK)S?D!x;PM|K zJw3)tG@A_6{u~HG4yX?P#3d0#C?h&}h=MU~v=S1(`2+SSfI!HH^5$bPCf}{xenj#3 zkE~@BN2b>`mQJ`a^p|_w>vMB&sBV5LhZ%1H7e7AkEt`5azf9SFT30g+0-uS`?=IdA zJ!yX8{GZ?B>;Q$^0HMRmp!{H9rljxwJYRk7j|Y{{3YFsCbPGtUk4u=6|tE z_`&Ahj(~nf_47VQEkW&K-@D^$XQCwC;s+UOB=!$Fw-$-(>OV^NV8*O4L>2es()8$z z*Urpw9{H81U=F9CVcDRyz%@HX{}`LYeJu&QqcnZE3arRL+}FaK9YmXB7ogCo zcnZdrF=GlJ!d57kL_eYW0b{NoZ3d!a>)r$AzM}6ApSI(M*fx879{b$_f*S#G_>)OV2zZ=aQ+|ho9NQ_jB z$@iyAA+ApZDRrr;6+)0X==To}8YcADkXXDf7WJXzhgGI3FiXo{|1$H!+>tH$7R1Dh`eV%viy zg-eYQF*@`7R^Rsm*~S6iOG~qkLAiHGkfq5b{_I8u&Z>h#8>5RTayHNCqp!%XX*Xl- zWKId-74(B``*u6?B$k)OuPXM=b-P%195as2$Y`}BFoK<60A zhnJOC*rq7~zG4%``OadWhqdN0|#b=Mo2`B0-s!guV+dA_cK_^kdKJ_ z3@6-@+->XS{tFWn=7HsAhavuK^UMpGJJ-3S(Pm0Zg~wzh!;ms|LNfBFsc-;0jb`Pc zELzh`t~X>Ajp9JWmY69vG|Xs6cO^|*>xAplk_Su74{mt?`(-&hEct;brURzJD`^^l zoiP*J7bBAmF{+2sYX|6lOKo6JB%OMM-aI@5d|o7u->oJH8>!Gvg1(94D_1Kr7YYRH z3aR##bflFu6pjTM?Sewi-_i7hMswqzG}@+Id>y{9anl1yy4K%%2XP!4-j7zbRi@&8 zNr$x3?g`JTp|k`{rE!VWu%ON4x>9XG^N;ami=D&_ZBTC+lt>?v4521wHMKQP!=hT| zJ_FOzGd&WwedH~^*xrgd68hZ5{6`)1i2Ici3&};kN8 z2j83yD_OZwd1KwxhpIZ?Lr9VUh1LRh>l9SOm~nnX6y2;*`2uBwux58Uo&GogPNsk^ zr#dyD7k-OXzWjaP>Q<8KR){}{6Xgw7WvQI-`O|Jr;lGw`G7uMe2#pc~3!@_W?$Y2^Z8JKw6+Di^yza+|Gko;P4h;2!=Nnn={P-BAsjte|^2% zs~Jc!W`;C>>t!F;%e`Sf@+~%YK=Yh%rG-2O6!LbDGxtvO2BD;yldJuoA8wmvH4 z)g-=10+u=K`O<+Q7ThZ5#p;Q_LS()~-ekLv=riLvG^OU_{NsctE`N-WTn&h&lq!bEi-97^K)70KNvM#7k{yn#7PyQuL?q$@zJ@_ z;T_OK11ACjL+(q>NAU3L;9+@LN=y%Jfx*sD&Dd?Y9(=)SWgJF@Dv`+MBu+;Ah8 zCQyO(_xte6zjI&TEU5wG2>uKq1A#M{=)449AU!eBUO;{-_?1;{iqyf_)j1%&U0$qO zJrI7FqL6n{@+K%Pmh2mBy71Apg&5d)Y~n#d2oO1dd3r|!CC-DH&>zH>?*`!lM#P%S z>-{mv?fpccVSY2~1pnI&|AG?mgPx)VxCieb1*=!K=(2JW%Ab96P!70!tl)qK|1>aV zNfBs8K|azuda8drBsnGm;+0nJ1riFwvtzg z=2&={D~z>cTwATxybl=mJ$|cls3?J)f%yOa8lUEDq)-!FuP~SI{0+mfoORd;J&qGt zd8A&JwLq*bL(=jcS5E7NsCq0t?J{})K!RV+@^k~Glui(G!pg~&!B}mmisnzXYA{j- zM18IRYBDa>qQQZysZLzS3R;#YH&P(56%O9oTXEY&;xj3C?TFlfGqtC;!uAQk*U=Af z?cFVMv{*P5vUAW4x@nA%PsKyYZ|7{+^>O?}afN!Kh2vpVBe5Gv{ymq?E+@KVodK)W zI+FvD6m2jWf5jgioBd-YCK{=fKm_Xqpp%Ac8rnvaP94&iE5@I^7eX4wVHHJ_94MaX zzso%x<2ANRygAeJW1A8j9V1=W6v&o{&D(rB2}Lx zMUC<)W9rq%^dEX)k-^;XTZlgAds%O}vaXksJHdsFy{ivl93>7i05G{<&2_Q>G-493 ziEob#S4nR76t%+S;_UIdRsK8xhec8T?!Z|F*TZ09(z>NjmTTptO2J^MR#I*usPfQ| zXdYaaZriz4`Q4H5Rej!lELJ2#?Ga~#_x#Efmm8I>=V4%zv#6vY*JE6y!z30Ca8w`x z8-Z?E zzu`KQEa?*VJqN?c@_0h{J=wZUfwY;-lpy2;pxmk}aYbC>8({~b!x}`$`gSFQ*7x90AFeZ7xD}&>+3kurLze_3-zJg(a*5Kmibff; zGHEmGDHUWtPRsE2Xq~xS4X=;XlWVKZw&CZ00bpS|oU@SZrHP&xS_HiBcrS3O54Gl@ z&h;>V60vl~0TMKPGFC$8zz9*O?Mw}TEa?x$*pqaLTS_E?e>9A5ix7a2W?u({7ElX~ z6eCfB0<;b3l)#PHqx7<0y*ELY9k0-;LAo~X?n%^@g!lVnrR8Q>c9uU0P8?$GA&-4^9zm1M;$E+ z?qgd;^M(e9GsSS70q7j61N!V8iPPudl+)FZN9@RKlj{%kH{>oT=ilelc>xeq5H6-v zp&k%)V2=OQjn!IOiJNW6ey_E0m0jo)riKwgMBJZs?A%$d6%P&U)B+}r&3G_4%=wZb zMK%h4z8&*Gj4GpK417pHng4DOee;Jkh`-)w;5F)#=+wq(1iE0Ztsa{S`ey-t!}!|} zP@JR_y8>MwKfY+y9%Bnk$CY8*Y0HCd&#!xkpI2+?0JH9RWr*`_uR>L{uWI@VO6`ww zi_Q+ulJPJr`h+~zOL)W#cEkoe3B7yhR5@tXK<9E$g8OFyf}e*A1;lQPcqGmX|0I2C z6aQl4dg}|&e;wV#Fd}=% z4RCjmS+@}ZeVssewrEl4o_i5}}=Gv6+JJhV}gz43LWuzl& zFnf{^5>hrBq;sH#f4@+ilFjv$G>B}=vXr?R0J4riR-?gWGZ17#0{FxIVKIO4Sc<$$ z#!2r>rF^M6X4-C}wu60_3VF;044+h0U*@i5sS*9|`mA&Br-7ycm zCMk5Rhk@sso(r723G18o<2KH$tV17kD#-P0CqId|HLPNd8U?StEBJ^XxCk^&35&pp zfbHz+XGR~fmM~IlJT9!5-U6!7lD16bWHHk!n)5M&yJ}aU82*yvMqCt>>K;qpq9fAJ zk@U^^>ydt<$_`R!@UCF@*(Z{sV*LTCuUJbf52s2ViDk9gj=PFSAe%KdzS_X9rV@8~ zY~-WTl6wT3-8{Fa32$G<^5<6Y+P-jo01nLKHS?t0BptQ}QW!Gyw8zE4kv9(|35R~e zU_BTUCY<3SAe#lbBl_{p<)$_K9FD<`wa527)RTx*5L#K0%>2hh+k9xD)^xff^gAF+P&QZk=O4@8$}j5Z)ilTE-5 z?L3h08fzJmU&`pJ$;y-^9zur!5P^&VGrtb!zw86;ZjBTXFHVxtkAtoi{rP zFAf-5O{HDTA|rl$?f25yf+EO6Z!~$-AS0pi%@7}8hYQJ z<|jnib=>Q8Q$z%t)o2%sW`>$QP8m|sY?7d1u5j2@=^_W;ukwi#=ZYBxG~|6i6b3&Z zb-TNJO#svA0Kbm%t&c^P3@_OUwMlYyx>Ek#MiBENh!kVU2+3d+3>b%%ck~`<-)khx zfO)^97w!;wi9or-@m@eA=%{*Re!^G!cP$6;wUYOKVwO%M%mC%$O6XS}n0{NR%5xTz zsFV!TD6(=4^|j-jsPp;^0FL3E4HJfq8OaAfodm~B10lR9Crp*KS9WaH3qrP}9-*RW z&T#DT=@hKjPGskfY#$xMp;T>*RdYgv^8Y6#Jc>kFpoK2%w9bl~dT-K-#&eI$EbZ`V@7B9hqX}YPE z38lp~mfgK%wC<#mhZFLsiV#i>5+kg)fi361CuAB++;$xM4D}lpypg|;?c66<*2Xmg z%*foFxJMJgxtEr(fOZUR8W=2&cK8;eRfcHK;HgGa}f4LNRp#?ul<2fVxocy_pGs_?CXryt7CxNUtGG+_1QRcY=y#qzid z&X*}$V|y=^4##$V#c@7pf;&c9KGO6_6yvzk)QcAZF`T+6Ax(}w_8u};9>2?f1^p3K zlhiGo+gGo-wrkM4wc@zmBW6 z?;1!{qBXa72J{c)+nJHcQ$erS(pd+evWn^v{GoR>weq&;{-831D>G9i8j$VG8C@X= zhzYF$;6<}~W!=Lzi983|@p|ZxsdS;N6+uON-@DDOaXBw&EwdM`+0M6yyVN+lD6KiyMR|%(5o3wtnB`#$^2d*7*x@bx+>bE^7$j&SAC1D|If+ zYxyLio9gcqHrnZ%LTVfak}A={R}H%P@Vb8j82;G``d;)_Rz7&H)URdQcwf5KeCDFn ziIGY*c2@!8DIYU>f?0P~Mc`~maY0zvb-#1$Ucqgka{c>Z={9?+6F&EBQ@nWOG7}!x zs=Qg~er(!Aj~XA|;XNi>^z1VNo9g&^nj*~a5x$$Ewn81y zeJ|1X!|UbC++^+hIC8@Qjn+=)%FXKw<2$!pg3hk?zYen5 z&g_CQaDJZ0xWOuCU;nVPfzpzicXuJeV%VEX=u zOvWqjqOfCJc7nHk;>1dJ2{kJn<=TsL})_PrJf~amI1A@lr9aW}v1+Bw$`v z3Op*@aabx3JOZo-D7&G|$>CBP7JI9J^3G?ahRo2hK;Ho4-f7^#vn1Xh4ZGmMfqD_t z1C(I%pf+x@%QCxc0V5tAa~y zNdNd_mamLD_=}Y=I8TXMk0k!AdKFw6o`$l8dTljjZ|U=q4kWVPgm25#LowFSWBEYi zjP`6N&w&|PE-CPwonc14$nzi?r>?U9t})fjNr z79BJE-mT9*LDej4%3I1++KWKmz`X~jJ#$lZreLy02KfMfMQ#0qnHwD7+^wz2X2u0$ zhkF4s!({3l+f=n1&Yr>?8higT*Y)4@2ApsxRwwx@&`<*9Ey0~l(koW`0coBP~m zonw}2(j_}k`DY=;o%!jjwGlzy5;J1_+cCW@q>-y-sxx8Jzd#o`9msGgNiG}NxWbpA zq)0fn)lm;?A+CvKlm@93s|h|z@vFV$D^vPu2ob80m>#*~uIhL>dt(e1n*;E8S1A1?pf_1{bZ1+=3|5~*yIVWsL*S?f&fT0QCc)Il7MPZ?+i5K=An&}WyJ&tB zEfiREa4++M!Tuab1toXz%0F{yHn*+(9yLQ3=XH8#zFn!r;wxw5ufX13Jgx)Vs)N=G zoh?fNhwHO~KEU)WAj0slCNd_IP=t;3BdIEN+n>aJu;D(po3`w}`{E{D$cts`2Qi3E zAFpMkdV^%gbTJUMc;pyX{GVqL40in+ozf0{{{w{Li-%k4?ml_be=gJJ_ucM<&n1Eg zM%X19?xL|&OVYZL?auag zOjrvxh!1qf6y)>xba7wJ%!?eNl@zhPXlYJ@IzsdEmJ`#t3u3tR6I%)Z^n83KN|+Y; z>}Ny0PZvvdp-NGO%zIGBp_lTYNk96|{}>oycUgZB*H$!e-y+g5_h)wX5)oS$1kk33 zlFXdFEf!zx`^yI!F)r>U=tFMq3*+f_Vx;mXOH2~Ydg@~|X$`n;Yr>gs-kp?R+v((> ztT`mLWw+!f?;Ba}FYcrPh;Ap`t}OEjYghS@u$s0FVr3$Eiq}(#F4HYjJLx+ zgI1950;r0iV#txy`C}!qtEU`anu5W&)`yH3aN|w#=OAtz-)5)V$c4%W*rX`(QXDoJ z2*ZuL?yUvZIskp?FgTg+%NiT?xi2ih204BkorT?{&3yB>y%`UH$)Lk`B2sj53(OeT z4mNv54&*Uw;WUk=xu$7g#77R~fy8eiu*1K3C5d~&QQY=D^|u0hRPFnIt3<8_2*;Rc z4J`fMaXJ!;rp`@c+*|O45X=ZJQ46To?MT!g}oy@^7hH?=m`G_|JW?k5w zh?wMYn}%IR!JJKj^UzvdBLPB8RQub^R>qKiXX~`6*wFA zL)sFkVPV$$fmI^6lAYzq!xSzc8IvKfATkTLzgUtE&odYzQ8U4pVloh!ssA2_z-@M8 z^b9El%?l)Qc&16G_TEe@ONxJO;u(Z?VL+%B(fJ3aOCSEYxkW{2hH9Mz=(Fn4?}sJ! zN(d{MyCdBJWXr@_Tp&}Naq7)ffUSfmae1{V1SCv@N;A;luA6|oud5(|MhV0ki(}AC z=(|+VHpfLG6{*j^D~XFdMN*rW<1tbU>5uCma0%1obw6K0tC=I3G*eHbR1VNS6BN_M z&aCN9z$2K-#4+6|nv2Ugwl-98X-F1O?@ih-BsOFK3rrcbi1nR7`vvC)kEE#c3p>q? zL%xUWnv3yLk}MaH3873#qdR=^dOEC&2G=AGFTRPuy060+hX$PNxcQjdH=hKpkfsYv z>}HmJ$8(z(Xdh^BJ+@@F-z*%{_)!ZyY$Sg3%_G4y4`>MQ5|lz3C|Gw}8)~pfK@%HB z6w(WTy;WFn;K7PFmpeas-+;1Fr0MfdTMZS?^Db zYozK{Jh|qsoN{Fmmje&@%7|0l4wOrp_iwGhZ0&m z57HO<)Xu@XdmGBu{LL-GpWo>a$_o^VvN_%4i3jlH`z&6K+!xP1_kjf39ZV zz(XH6Hdq0b-U^YbbA_z3A!zT>H?|8*@LA#E(Nt8g1cedQ(pEA=>jS$Q){slmR#Yp> zi1MWl7CmivX68K1#i%M-C52@KJ+$k=;d(ti$7QSu!Bbj?w_SFK^v)FKhV9i)i^bw& zhvz|W6W`&hHqm&H&KZ?n#!eOBL<8hPt8T?EQ9?3tL|-j=);&GxQCtx#2FSnjR654X zTGOKb`&uY{;CT=lo7F}UOWCMlDJQiR))x9;b+QfV?@d}obQb~@9P){4WspWAVdGU1 zG%9kf$!m4gpcIp6R9ohPYuwbvrc=DWnDBE<8#k%zD+u3$;eOq5C|(P|Ve6>5+n62c zxj-!dOBjuCL~c+XWv&d8kbzs@;gZlm`3N4C2pQ=lwU#2OavOH}0{?=|$WX!<)5QSw z$_9qFO*&6XFnXi>!KWW{M;N&D@%9I$B#$-gcel4(<2(}e#(N7aHkZ-e%WuoZz&k0^{yaUp!SS&`A3k^!1*I?s0^|J%Y;U2rbk z<#G>yjXaL$Ow7xH#y4&Lk$- z{B)pIU!$~S>kZ5-Jq)1e!xlPu?G~JOJ^5SO*Lq641Dibw2h9!9g2<}Y&VWq)nzarx zZp&})4^7II;{jw9N%!}BkCQXptNP0g0&f}|6i^YHZerIMJ*VeJwqXQ*@yqG|>FFrgeTDVZR zw)S~0hv2j29fEn{lQfY(!eb5pHnlmmk|f1J6fSx19j>{@s_7gp7h?Wy6tGrltj0Qo zszrmUGpAP0X`QK+vUyvXiR@nd&1;ZqfFJm%@h|}ZmNK6!Q565Yxx6i6IMtO=$&xm@ zOns1Ql5sz2BSqn^UeLw>PUf!04ScO;HXguVGVO)jbJ~!o*zXf+5m#z@dtkn{3Q?y1 z%_)8DfnI_6v&4jm;6q_!03&YQ-Ypfnur% ztw>c*kM3XJUFJa%oOLT$<7#e#Q;*ZzZe&j2FH}xT2UObQQl9p4#99y>TX)W_x6e0-kFS>BQ>`H2Y$emqL_`_qvAp^f)9k`&qDC_*S==w%gIKVmTca8u0HOd|{BDfa|_tgU)Mg zBC?#5Tvy(8vRQgA*lp~yp?n&S&Wprvt{e&>o60rBYlaG-^)?^jr47>YO&V?rFHzE`YQMjc?8-|>K#^6|w4DZQrLimh2wp z#y`B%Nu{Z*U~QL!K5;PYk20pdmtAv+68HYQ2kRU<_PcP{T=>_}S|6w{75lk?TAPbp zv0oNh;sq9f{;_eZ*rNW)6ier#;cz)DCWa2Z95Lp|HvW0$8^z+H@j6Qy|3e5*dqF~V zAM-EY;dG2`qjh7@I&v0buCTW~!Su-myM^cq6i z7nGRBumDEVZ~Z$Od5M`6oxk2L5;Q9Y-ze8Gzqg)%3@oT#gZlc`*$ch??}e#E=^?6L zJ>U)BfN_!tU+kjQ25yvia(teby*e?o^!sRY;8>w56{RyusV{C5@WI*06SIv{|;Z zBIXi+WIwDlk=8HXoiuuDmytw0EmLjU{Agy_r11cs5A%<`%~ti7zeN=uz~5OV~F8Ld$m zGa`$49N#pd7G%?tpL<928X}1)JH(OkH)b24=p!&PLUaxBZy~`@z^kC_kuT91PWhrg zQ&;rAwzTkDSojySZ0r!mSFKyNAjLNp^wo@jtS=%!OA8T#1vLG{uJp3kk*oO2a=wzQ%Nnx`lH$e zVLPLwBA}x+NLOMPu$FNrv(o`fnqJ#7tC(RiytenZ`8Ly2Ag%j?#wn!;jXIjprhMsq z@#)ZlRSH!%AnbIPwv+hu%wR9m3Cc=X}PEYEJm%mk^XLqr`!Ju56|l3OG79al03?0654 zG|_!-klq$%uUzvf>&B+1BR~k(HD}&tURX#&Y$>3TXcFfMjO4l!kkmQ?9BZlo{#08P z!svA%#sW=`-nvtXf@r`_fO%CEyELK6uVy-Vhp&=aD^`q|5E$iHL4Cl&o}LnE-SV6) zOExG5U!L;ed{9VxkUTbSr8I6A)@bs!yF4ySVviNBpBew0proaz-MA*u*gl9ePcln5MDXazPgXV^ zxm|)K1R+4xXdIB(Gc^EAyRPd2+Iv@%A^{exauSRoV52mX*wPuZCnW=LYtxK9CO#=5iJRmV?T4~P=v@4Q(d@G_6s8ZcHlyF`Kziea6|buvv7+%Y*w z=st~>S1hLPlln7o@S2g3*gVc#`Lt8%X)ZAdv){OP>&MVUr5S(&{C&7o%5Y!i5&T1Y zL6_ifh_>~3WVywcv95@Fb5E0l((~}upZoLcLByKtq^CreEqj8Lxo=2fGBi4{9Xi&` zp5JrKQ}lS~h@TUDat`|BTWx3%J+6@@pF?f2V81`)W=BZj_*GVGIYHiM{I^jn28xog z-&FiUSSm$}{Ye0?k#HWzU{G8(3`;14=!t0j0mn6}9<=wlOeh6dwy#cWd8*C)oEC@t z3PFFS+A0{JjOBgkih^No<_ud<8z@x$a#TTPGnxH_pnQWOeYDbIl6Yx-Xh%?Nv@8{$ zLRFLURaPgB`3Dmv@h&kt5b!LBaPU??@LbK4wUm}QX<)!{D|+!bOw&i&^;EWKnLJ~j z17lsvC4)hEuVcWX*f~gA9ukY3*%%sv>zMc(r7SvzPSJ9HS|-4BK?OZcWeRT={2SPX z_z+pIYE>^Y$Y59Z0ow5*?A{_rs}mQ&_#-5O`keU(MAD@r2dU24tGWe*skz7|uj^%p zt%}3Qy8*y@W@5YFxovY0M$&He*(?nrIX_SgY$CFYCkUuBc`@>b2_wfHD%0JfXHnO& z16pIoK_bR;TE$&F-ea%SoPm#CaWKC~V}+%zot7|L28;5&n#nSY0iF2Ve$~%JDF<08 zXVNnesSqz;X9adkIm47FivjCJqpFYR?(Xp4djVYE0ev{*fI5zAL4@l~0M*aKqoEn2 zqMdW4_Hohi4VO+TDJhn(;iHqU9R}jUEiPTXgYtqca@huH(iJ31qg2AHFH>PgqF`?I zH|W{>r9$gQDzw+ITJAtcTp68ONz3JwY2=qLsB z>wH+jo^yHi(EuX$!HugCq?V9$znxSJWh3|4G?Y|_ZQdi0q z$!`yABbabx&$+w?Nra-F?VrSiYQ6N{*5!>VXv7i*#@6UzMv#ieY?LS>=3d-`8XEc~jyuMd1KrsZ-Q)Q^T3O z^sD}TVRqvIO4hPA+p0Ey-wZ3)tZ8y?!=PGmlKa>kP*v@knaHvVw@RC_Jb(=7p5l~w zRFr?!44Fs+eOeg7?pYUvxw&ry-s<-J+6+gW)}Ep7WPS6#>gPq1$CyBH6?>-Bl^**u z-lf`OtVTN?OZ|yEB^DTjJ||p_#0Q@~8_`-GMBN}q@4+dmkAqq4Ra84h+i_s3o_@|8 zu3fVPm55DR<*iO z)M%DxEZwZo$qAv*qLdR$@^0u0Y+KwVlxupfJp>8q`sRIJihR-d3-~2NXw)OoC6BB1 z0MOUgy`05@6neW3>~axtzvpLiQ)}(`sa%IaQy{2&wQEK-=ruHcA9m~-MG7wgA&kLy z9(S!FjKvRjGK(gidP;T{`=?Vjn0{poL=SDsQNMJ*_ZQy{rIiDB!Vr$9&IpC52!*07 z3}lXHpJCdyQT77F%bAEuTsu`m{5@^)O+rkro#qVw)ou1^b>0P3OOGTL^e4O?Z$Ph) z`=@1$RJkUQv?J~>uY0;dz!}F?W9^5jmVRt{P1Kd)>6_oiMZ!_VCJGq6l6>3E1g7r5 zrKko!W^^Ut{z!(jPzmd(Hd?);D4%uo8TGhP6HHDWo2=#aBnk50Wri;R7j*X@T1TQY zR}_zIBi|zOLPV`>_KX$$^D1f@cM!VMUEtK+ru^@hW(VR*XP+0_`Lixd>uW^!!+19pBb-}Txq2XiPwO~5^9GCs86G05hr7Uq~_A6mD!nD zW)?|OfYM_Iqdyy)1DAQ3p=1DE%xb7Dh%=O){h zyHH|zEh;$f@3KvQBfC*L=$qP#3EPDnu7D)B#}JzxRaMSaUt~yB^G;Lel-~0Am?R%_ zSGtLCps&9d5ghOcB$H)3_;7hhEy@0NkOGuEgX}!HdJGWUO>D`$Hx46a-R)V+EFbXP z9`#{9tjT0`&3q3)1zNoU${6;XdZ5!)_=9PACnl-&hAoku9?qJVqY;Y1c*NADe6YBn z6&6-kvZV^AAQC62Q52W5q9vbRYg5(RV+arKD0~D`NjhMLP}{v}$xBQpGxCZAjtn*d zl}Ot%{N%G>iRuMu%fV*Z2GZ?ejvAu0g8h3}y(B*#_MHhpa@mI*3bXMS#3umKJ6A6A zS`cr~6QObrolz}2xZ0?Ir|5`n#j$4^&pVH6PSJu8%csM!p7w}NcA;DvCQi;@0|WkB zU1jRw!Qc?6s}Zxx7&mkat;w} z`Xxa77i$!0__J%OsrV1A;q6>4es;`gv?g#wB?=$Foh+JF0;-lEdUjOTp@pbaGcgArR)MI%3Q}ak8zzo+-uIQAI z(1Gp(5rZV+tK~~uU7@%aqJ(fty1^l(U@vYOz8^FEe&(sj1p0JQ^!9Hq1U8JUc|xKl z`Ct?PAHhI?6O3l63GoppeB>+6_1}2Bj`|212m1)MWD05Ke&<>ETKFT+W%VSuqDRB} z-KldOga4?x64L+`me;FJ_^sZPcj>BDr}Y##b4#y6lQF_EOUevqlXSIwoobnDlL+hkkOO!|KsVMqB8-OuHht4Y}>YN z+s?%H#Ksfbww;M>+sVYXlZl=D=e*}z|6Q-X=+)i3s(Tk!6$Hc)3eHV?IW`R6!>>(o z!m&&~@bzXmH&g;?dE+TN4oFIB8Uh7eQ}E?#ofV_Uqx8_;A|5FO zT81hMB961e=3o zn_)!&g$TDF*jVWAdn_+#HB1Cgt0w$HAay!&;vwh~`$$jx6UWT+c%Uwg>d+qu*c_hK zVGv|28)!iy;D_VK6wyoDl*_qP$-8Co`%yzhwe#-kfOJYuDdQ(2e}KrSGb){amnb*> zxg#Fc7TRg;%>d1?byxZ`^dJ(S#4E^T1Vwn`>@3Rfm9^J^db|n8_N|j%msSE0U=X}O zRys3F%xjJWDTECkOi*W>#v%Z{NX0Q}5cOvj-OElU02JnfGZhc1<=NvP6U}aL zdktFkmwcXRoAVmhf{dQ+RoOrYKVMy@`m>H{ri7Ua8UEl0xY1Ee z&uMrC_Lh`;+>{(5;8=Gv&&5;( z>Hix}fH5NSQjK8os6sy5Y~O#7no+kdq8O2W|CeYE@X;*nL$dAmCDo(0paV{SwESJa z6bpDF_;#1I=Ue&G{>1V?>HYYBPG{EtHCW{0PG8`Lp#j$X(v9D2$M_Fz%xFsu%s^p6 z9f5eSw@&8tThk|3E9k!gJJ!C}#@4yNK=pXP^g%>&b2-CtPyxqImO`I!`Iwd1_h9)v z^q}lrQe`b}?ApFlxT?55BtQ`Sc|v%(Y^`_f(ti8?p6QC0aUL_ZFd4eNd6}xYdFV1M z5+b^)WCCu?Xv*T;y?)GSR+7J~d-T*)HTsu8-P(Js*-4ljuph{DzFmLcItXqlol=T! zd5Y-0%^DO zD$VyMYqa7%*o8{a$K;_I3br8P<%-TcSnAlcSJ@1&T3b|2n7-GWMde`FMtdlPqn%LY z9$~V}IqPimjHc%$iaMug@|A&0!*v?EQDq}}YOnwE;B4umI=HQwg&l&3dzu8Q`#Z8` z{|u=95v{FmlqE^E`JC5VZm5m`NDU_0>C)w`%7xTeov)zl{hecETo)i6Dz9U*s8e>@ zCplTPq*FL4=^ z-g%<^2z4)?p-Is`xCA*3Tbf*PW+-wfs{>3^c<~2$`yIcxJHzPePn*G#%-&n| zJ#hyh=DGo53p6jd?>&ecDK^gHelHUJ0baxasKIf06bO~!=bHQFW;3fgXyJ=Rgzi-_ zz1H=^i&E(gf{NgDxD&=h+8$D5>bYOe9FG1uNy-QMX=mMJ9ahqM|J2iVXqF;- zX(;U}AW;iyQr0lLP8t}0)LiLZK}N~tx!}WQPtl9D0N3HX4$*9}LTMTz@qPRreoo{Uz4o8b-BOY@HGG>lLBKzDUr+GK znK}&*uor$qD?<3aR_9Dr$46PL_r~RbSX2`HC7wC$BC6m{|MuyOBwxf*ET~f>GKw?g zhkU|>45_)o!{)#M{%h4#q+0_skNx%t1sdrWVPVqZySCr>gAof|Aj}8>0$8>m7gsE2 zzM@U!CtP=POEQW(eCX}p=RojEv|-LocX7~lWcWLb)BYLsQ=&@}*RX&bR$b_^V>3SS zVR3P!Ax{&9K84g|Q!rLCimrJcM(e3D)WwX8%oDGLv}S55l{aLv0QZZ1ClIz;XR`OH0z;%9W@)M`j`nrvXP2jGWf+L*w&YQp#7ed<0>T zV|680NGJPMaCv;z17J)wTESzym^WdqbOvzYzBt^dEWGV8dq8_;Ys*cudoa+7mLoDS zVT2nqmn>yoz8(ZXyeL2Kfsv)sB?EE3YbHC(%4Y<^nXUqeqJE#_raerO# zm#kM~b+1^)FrfdnS;VSH7fh(~F+KA)StcN!BATsf(!Q^T&1}$wB-k$XuRYDZJ)EX; zs@vUEzUTxe6qoEVI*R}I=l)?i5c19k;<*pvL7Wj(PN5ZZEoU;4{yAe`65)&RdMOM9 zVA)FtPS*Z_7MnoA&Y9lYB}GOUJT;rM*rXvX0k$Fd4fKC@F3_0iG!C(lDJWxeg_F5OdBm0OFwLIQ~UWh&7k>JfW10yAVkjFk}*X6OwcX zH`-5b6@V%w@-5LN}SbtL2#Tl-2nRHr_)GC)LO~&xn*cW-cv2mgdh1 zy$sXAwA}`3iL6gE#Yp9R?!f7BPW^2a3DbQe0K;!m% zQyDrZD0fz}XL0zA+FgnH#w6^bh-(__Kq4Ppc8yAcJ|nBT5Gz-8@=Bvzec~v^4Gms? z3+M)hIhvGN8Nq?r%y$s0j3)(0g;H=FZ7~m9Px96URvQUI_m$tEk$sf~PQiAM2`b9N zGbUq+=(t*YX1yoRJTScCF`ls2j(r$rsDFtJLLQ;1hh1j53oOM0Jn6Wv$DWJe_e5iC ztp6FW$1Un8J-1Su6BiHx|I;v9*20lt2vjsBGRUU->75F9+5;R+mM8e5xUdnqJYA^; zHqUdAr$D7#fhjjD)#{H0@g~_!fG7fElRftpCb5LSpC+PKHZ*P4pS?x4lOlQ2`rv*Y zHDYiXkZ zzz6^SGg9^LiT<(A>ygIOr+4>4iJRvhSkSA^BYYc}Ywp4$iYCM1jq&@c_4`s3hy6W* zSPTkro<^w51R<4g%)<@gry)9+Zn1l~$kq#va`!Ad^b#I#t}i;(?mu`0Rw_2_b;0^HrNl`OtHA;rcrM=E~7sShd6^#8u76er4wH zgDm(4%J^kz`|P?Bf!Q=hZne-IHU3)bjFO2^UI>_#4Ku$StEAaRd}?Ki2ll2BEIaBh zZABL~UXz(AYB;H-zXkii#IbEqOoW`=L{}`Brgna=Fd~!1bg&_tf zfxBuCiXsrz?xyBu?|T8?zhsJWzTa44LG>lD=D*EcT%FC0?f)}M-w^_X1mk8)z9U8l z<6un(rT%Z-XdO9+qjr?uxw^9)O$2xh6>eVh7Uw%gWcKz@i3&a3e^TeLjmm>B$UrPF-(GHWMj%DF{dx|j_v2Sfat!Tb2KVm$Phcx zx5J_G-5-@oK>Q&6*v_2k9AuP1!3!M(1-1{oSq6rBHkC{d;|DF3o{uDa?^{@qBt zmj_Rywz&$bV`+S!;OFs@64FoyZQL$RLFravf*b*5IC&}w7HTN}_S6M@k`>|B#!1Ia zU9MkLaJrlh{vmt&o@wH$bSjqAXz-vbfuNSxhh4%+dc@SE>wY3lDg;t`l6I=N%~kpn zif0ax)@9U#%4d|WcJ73xPwUIlQ`Spaa9`_dM7ua3DJD9BE~Tp@aAC2(*-I#+(dXLR zWrTy;CC2Sv4SzPGM|VNJxXAS{$n7r+o$~_gk9k6HNx3pf(@EUeJNlG{(IFhRmgT?! z8l}<)3V-eKXWsGk)HoTxc~C0V*!fv*dTjVN{Lm=o28iQQRf+2Q;NIgVYbMN|d*^ zH98Ne#dv-a*eH=8Q^E{~GSm>M3rs7ZPPjZ!!vXHP$Xla>?{TBH4lpw>gInH8n+GNu zB6(5Fip}ZaAdVKC#09;swzOtITsu-ojD7~E))B(S!b!=Snm7NcOSa;mwg~|P=kR#y zEMlyC`5BgG@792j!*$<20X8+gtREj{a-u}}Vrh|tHb^WoyOiqfjX=2>n>N{CAARFs zkbG{BbqSXTi3ljn*@T93hb3jb`>N@#m()}y!sLXk0o2!0UEXq2N;il8^!o82RPaC17l_^+ma@#Y zPS6Hez95Tb>Y|}EM847mUPJO>xPoLwK0Ol%S)-oNu_UB9h<)O;7cn}VHEWi#siLBB z9vhk^=4b~qqsvR&BHzY9*!*>ggb*0-*SqNDLDxRjwC>~H)2Y9zliV7&X{gp7B{^)a zszHITl3dA^Gp(!+Q{RKc<{~X!22wxQ!nc<3McS$j?SQ1;YcznP>*x&D!lM)^V<=fD zegr3-(;gh@I_XPirYmK(Z_JE>QDvel7&@@vDl~QPnTVPxs8?a2+r@zm7AG-5Z>8+6 zuh&~cMW9Y{#}24Z!wS;Uzw44mJ+tM<1zGf-We=Z40@%(6a<4vK-F=5_X7 z-JS`5c*7~G;L2Jd3y7B2f6 zPx_`rcwqbVj**=6*$g6>vvV4S&%CG!XQ6@EO3pE1J^H=g7)FK3+S-vH^e@|3AIvze zB&4CS6%{&UMyi@}zvgkBp7Q=4x}>3+!^iy3hx0!6qJYa?`koLRBIu`EPDu&xcJG|4 zt@&+HrD`@LobdC0B!T|sI1p0@P(wKahMEFWTFNlf)448gve}XT-h_OShv| z=t{A`uO#>#anj2BeKgaP#cp~Bx%MkurE0G)$o4ExGA~PEe6^s*=%S>Ac?cD%aXteo zt3lV?8}-Movxs3^!J7zT??C?On6$(5w}1Dqr6k z8|d9!+^U5eb#CNb=EG?F*|*%bVW1!X;;*LuHrfxynCUjb706YDac{ysmA{M!r}D z5-x&!6UcrqRMZtbMcaJAbvo(>p8V;&A&{B{DbRXMacMA`MpsCt`AgZ2i#>}r%e&;a zkI*IVNwf=u6%vZd$Hd{^vaY5NS3ueA%-Yn>!t9;}aW2FPru21Jdhtg{n8VQ9b~w<# zfDiq0>aq(Mj9n~WK1Cf&5W|`aQA3k;+WBd3)-8QQ^C$fA#^T*}l`5jn$H; zL;gp@+@62IwYlB`O|Y4BegFo- zyU|tDe|)%GMp@q@2+6aRz(L3X4g_(x`bR0f8{=1SKtA8}54#i4!1qe>UxC2;qR&vo z1E2VEAZn0fJYx0E>sVfz2Vw=?)N*c@US{jZxiCuYL1NT|>G85^$HtZsm(o(L?=S(RX+3>E zV74!&%u!eV&kCF@h|bZ{M6CTeNj}I_CY-8uB)+rGppMKSh+-xwk9XCne(f>B4!Gy$ zi^M&|G)$-D&b(Cn4j*mgF`DH-xA7!d2#(@yYR5Si#M(v;Dw36Qfa3@rCGC&I036~lbYw2MAH zIE8`8u*Ia3cMxU7i9ZkT``dNV%_JNw53&8`3WktWVD0mZhn)ez;KAR6YH=^(0(Uek z9*Ep2;) zdZgObD{%XM^TKq*SN@4Zq+J#8(2*uuAZ=5eYQl>_XTy8pD1NixGW!=AVs$$67APX( zI+aRA|IEEzY42{-CGo;ij+Vt&E;n%=5;uPCIQ5UiC#^#VqN!jY=;;oT4`FabgyeUfFtpyS)eUy3r0{4d0EM^rd?y=X?vggGJO@9}}NO zGSBqV`@N-E5$>O!o=zrw?Yxe(FmOrS!4pXhkI)J-}MWHr(K7@ixr{t7DhQfazn*V z8b+hZTgw|E;WLT&yx>;rjGW4D#VRQJ#DS3|S>37jqZP}VP~M&?1N$MV3s8NuKHyp_ z;qub>XZf2n8)gWq|GN!qDU@Yop!D4(x&a>Nc50WDF>R#N*7mfdQGX%LT$=9#0ej zDQUHu);WTi6-SYmo`!};&Qw4Pm0U%`cpK`lHKIJdo2gS@H;;Mi?S{nUm*uU2IP5oH zHwdp`3O3oF9Y_4YBy*|a6QH<(y(Zqf9A%Ix2;Z+pqeo|~OJav?HVH}Qp|QXvmbT#g zC-u~>Zm!4>6;{Q4+*k0R8o;>qQE8}_FGfu7Kl)sk(CgLOYVTK)?V4;#hzYnD&J-Tr z5lYX|wg#V-9}YK5;*P!$F9b|$ZE2sMyB}oa!_yN)Y#a2u+c;#c$Cv$t!iMkxRcorB z_(jwPys{6M*bS<1KKvgtV3EWcw)%dgM1I%nHxlXSW+SB= zq2JzFdX!Bm3~OLy6MZtGfi3;jGaWgo`xlN-EN|cLH#d6S_ox`9 z33x6cp#l3E%8GFk83uoph7=Ga+oFQe{&xGTxwlFhT0|6bYP+0Wj3{-~TOnY|>%yn3 zWjq}=ywr?zqY%Lo3T3yg+r@rUhI;zD9?kFxB7kQq2`{v5n67b7+W;BUKf_VFqx_bS zJn^Gw4mdS=5;Zem5#^r~Zbo@>w^b`JS3z!e5=o{fYJn)xoq-cshbrBZceJ&NLRnAH7a6%=V%sJm@8knKD4JgIowd3~k#$KjM8JLVQr_D?Q zQ@-#mD1_7^SrFq1x74?<(E0DP8QscOX4@0D=KPeUdDp~rAuwEdTD9)~_fJX=N2Ak7 zdzESs??n5-Y{5FrWLr^9WLVZV3}@E>ZazaeX}C9Gwj*~j>N?nGo`2fX-(lG(?vs%s zU}b@Fm+EV#It~nR+y*p)x4C!CB=Lcx_;odF8GT(75sW5eXy;6TzeM0R#olwDB*Bku zb<+KYt_f!8T`Vv61qQ{5d@LrMQL0YdC8nEcrhs~mk=QQ_GhS}&D8?F6PwOigb<3{s zv)c%P88kxEYpwv6h!(R0*?Q>*9iHEc!1`lu8CDK4y@!lKl)nz1uumAGjp}u&*W!3_ z5q=h2#-8?Wt!DWa+pT6?h6~jE`nowQhP7RYIe!i*?+Bivz!J>FwlLH%Zpb*ko-9^fK@{nAIrifKU1OV$;MdA4(`K1}OO1-W z*7E$?kne?SLtbOHUeC2IQVrC(-op?A6adbvjc$swE@c+lF)QgA$dd67jH}x-v0nNfFZDnAYa^|o@El314*ej9hC~H0 z2$3nN38X_YhQn=&?X{=vGEo2s<%%|-D>?P|?z2#>viy$E^C{>{={T|n_Oksfd-~3;}xM_x|oL)PT)7LPLxh5|o zcGEpaoqx&it^WW{rU(1~Uu2!@f29mKIRBfFNek4Gi$DB7C*nU6C>(63;c#l2F@kBz zrg75XbHs!K55z`=w$xMxsrbxmU_LD-ja=iFGk^yip_!&p{SPf>pLawZ>FZ%N{VxjD zM)}g}>pOij%ga*?gx>FC0uNUb@Dxy^HMy z(2cqj-t+O)twJ5&SCGTrAZ_G46Vrb(dx#g^3G+N)Z2f)nkm*)X;Q8Y}Jd)=BcqG;T z&m&J#9Awc5qsnS7u(o`wG;)}GU^~qC%hCn&Tg}_pE}7Gu>TBZ0KAVT22s|0xM`lJv ze3;{Ir7`n{>7&&Www<>ffTx_NFld?g?BmX1$qDjK*O3M)5(9BbK7$HcDfUjd=L-p> zeG*R1C!qXy{Tb(pj-iwbMj7gpp<*N(j>7zh+@@ig?NCkj(HG*3Ni1;y4F1HXy)DC@ zn!Ei|H`-ud-4qGkjFU~DEP>Oxu$^FpGFfSaQIMsb^00CPWwXh@z$&oOBfFa|(M0ZA z$LYINrSGndkj;y~D;gbp={Y;TA;pHp6`)S_NR#jRxe#IOAhouMkZDa6>)GAcHitW- zOAfX1`c?2HsdNmeqgW2b<%m#6E|}TOxgb!|$q5lkeV*q+1|@A&xzNDH`tjmNSdn&< zNa>rDO*N)*0rQP~;G@qLApzt`;tU9Pl)xJW0d%{$8|0oGnA&MguownAlY(uW_?oL_ ziF9z)@9gjG!)`Vnps-RDRi5kBUXg>rFBhy{9xl}N{@A^NAQ7kv$HYj?XAOnmL)?@G z-Tk*ccX#h-rSR_AHpeo}*a&%0TQgW}_2EYo*sXn@M z2t=Q-rkJZ5pd-5FV$mWqAZ0{PNSSyG)ia2S`@j1EzK~UA@>F*iN6GTZ+De8piwVN;hiXB1 z@bd$-P6Wp0{L2!KGfCL3Bk9Q$`uuL(#Q6*6lddHFK3{`i&WXr9wIrCw2C3nH@gS|HiCSi zNh+Nf!hj$FzlKGsfQ^g~F9bqJTwfQGILm*Uydna(D69zwv<~tlT&p&vu8>;ZG)}I= z`=Q>9Ko|U`tL;GXf`DqqfqmLZqXYtQJv?*N2v)};KD^g32Q{mS%Pv#d6ZMQ(+WJ*C zv+dK5q6w-GR6G1qMPh8?Xx{MQ9z)TvQYS9Fyca)J`MI`FL~;cYa0<1ueUE`#{Qn;H zp$ldS<|cr>a)bc8U{#-;`; zetU{dAy45a3*!6w6A|AYu2iv?v^5zI@@B@nS7E^;$^&Mereytx>CYV{)Dbd*XB{Tk z%_#?W35{GwfZ=TOY+C<-N;u%22k4l=oErcbFV&F@rUE&P$Bt!m%fBQvA0*;CfUpdT zZrJs2@HQ}&a9_4SWi=sPR30d&KarCt`aeBaW--1{LJKXdf-##oUngk`j&8KVS5*HH zWM4>>0h%GA&a>W>kq0i-vHYA*!xSwe6eufx>J(H6IBr8A_;JZQ^S}Zl*~M&}&++67 zgT)ce7it|=*i+b0p%|d-cIV8Qc9xPcoNeXUF@ev0o!T^nCEc&hwVtbiFT=TY z8?uGHg#4RBcuHNIbLCJMz1K;+@0_^1n!Zu-GEAL{^qiAPP8Fv~zruORsWg?V$=-CN ze&Kp#ch4L|{DSoJ^9;Pv#AEIG*wPp}`NOng2@tm2;bDwY8I(H=RXBDm#TovS7HQTiBFS<67G zNfJ$Xm!dUb{|o6ltNHX}i!g}WSSur>PC-0KtI!n5H>edxD}NL3;o{z~#U(P;(bcuB zJPf7(A#et*vNP3b#8Fx&KYr_kkpykAhip@JycL5lgzxB<6f#4`4E9DrEF8h)Lt76b8nKCuyN5C##dskhIIMvV3k_mTuglyi{v&iJU|8D>pXL~vjc0hiT;)XR6J=_P0ggN0>YTb;X zG+FVzJ}9w14w~EQfVPb2qcp-12F*;+DP>yE5~E&+{^#NBuBPdxhZ(G}nGlpO*da^) zV(VQ{vCEeF@5ZK!| zrtZdQL*h6D;pTP8Db#@&UNVOh7d^GSeY(+jk?n9jVmk%4#m1D)1>7lmCCUR9ng$lh&SULV<&!UU$kxtaTf1}ubH73<@c3D@x%ORBIhykf8eo+Vs0HdAtlVg3MC(3 zs5aqSN7_%$D>fP8ZrzUA1lu7q60x<;$>@b)oCN-?bgp6~OpOTaJjWbD-{SSjBuMf7 z-KGhEaEH#K;elGq1}e59xuUOIqF5wZ@Z<3TEz@+xC1~aZx1H+s8jOhN0v?oXQ&F~a;NRW4m^4S_WYh-ctP7`rezl<1p#P+hYdICr)IxsU#gHfb z=NFMD>KvI4N_$&V+WI+==T=}62+xyFOCH-WLHk0#kuS-3Sn_1tAxtr*VZwKvFf`W% zLcW-T`^2MHwah)zu=0}MdIx*qeK0p5aj=ueE%bSO#{^YJ$NagqXYM))#Py5g97O!RePW~sZkURHq>={vJu_5_?}f3~PK4Fu zbs;37ECuLMbf6_Ek{yg1Wu+)z$}XO3zE-)TxW!deNB-(PaTN-ZM3k#FQR6oPOT0KK z>pI;nUnb@Wtb5eKrOTz4BHJvF3ksVAKCw{LrRp7r-w`#tu#2R>gK{T*qe?nr?U zyjGhM<_b9GhY$B0VXohMPy!jj1HbS$8bXy(qJA|SkW=O9h?M>qWN;cnQ3P-mUqj*t zXd``J53kqWB1Us(q-Xj1CzbmHQ6dlK<=nhR1AB9}+`=SHgMPRtK1|-z}rLqdN^MHfT$F8Q?(%tjQ=4{lo(^IuX9u8%g(66YL*l@@E$KtGG z3HbvhGl3rk6^RWJ{QL32)(9WRT-{YgMV+&(#AMLn`JNb|e7u3Z$b?Cal_tNDoq5&! zc)V&@Q{pZ5931ecaU{kprV)}sN>Rs_?8HbPc!`4$vuS6J(>xhsCLI2*shl=|^D9IX zWZUfS%#T}yh)@jN9FtU>mUTxS<-_P-jyXS0jJcP5S}GfQ2@{QF@N^5JJP!RnLYi^+ z`N9xOo;cCGZ9`iC$!%x|#c_}wr7==%!n0-vwg~PN&prbrecn6)nWn5xt8s%mB#@H_ zSUrv$=oJxcSHCC)+cjdAK&g0dp-f)FVljW;yGt0V{I0Dc+lX|Efv2{D5XCS-%{e~H zMlGB!Ul<|js`=_J<3tTMVwNUQ#6+hk!yU-VToZ$PY`+h}dN+vk-hH1UZZjWiX(=)^ z1l>(ntoe3!j6i?!;n$=#z+DI$4by4`43~k>dXAk4bUru5@XZ`E2t_vQ!&eVjhKcRu!lcARm~7(HXY&f`infzes?LhOgEP2ZZ??+I^i-T=#@rt6vlGTBaWMhVKF|bO{mleo09KcDe|zsCQ8=7*K-A}J6`LEJU_-5EEz)!{4jB= zH)U3qOrESfLoi5lSzx*v#Z5LB*GpJD^)B5R za$wVYufhF#t^)>(akr^FEZaTrAC>2~Di#@Wh)8)*<}sY)df$o0&JwTxofAUCdD|GJ zTvbTKE%_@XOx(cUFn^}dg`KYiP@ zqxs9?>vC0azUOWqR&@KY@*4VGO+GL!z1>n3r$;}VEIx&PffxwuvRv&bmax=)_n zDawUtlY1z6rg%|=L>${nS{OhGL><2a_rPPXn7DTslE>_h=0BR;hrWB4n14%Xio&r_8S1Z{*tRWInKk8t-WYWmwTE}KKEL0$jr!6c&)O_Ij83nkc5pL;r3eH3c(711 zK_SJwz8&W{|8i0M9A003?;>d-I4>QH#Y3+F#eH`69TpjX9<6&9qo0@R{}{8Wg6Dt& zH%Ppa_{k~&S+-q33NKPO`7sm2y3?uJ%$cm;of$&xO#V^FTe;x#b)~;OT}iR(q~n!R z)XxIEpXH=KvJE$k{EdJ9Ss$u}czGnv#a!JI=8vNYPs|^pO~B>-gNob=PiS;OD!rQi zR{Z_2F+t$hmdryLm&q!4T=0-Fi#46ITMl zNpD#Zw#xPMGC^rc?5^H+Zma!+o2QHvXa)1s1VNx3h}X(GKamV43p=8f_ zUYFK-p5F0e&agK7?H>8VW1%o6jZM=&$rE?rIZiYOK{z zhBg6!Z=g-ANEN=f=9<9f5HzCetyl$LPKw5LdZlo@@@Yc5vOJB5qw|}>;&amLO2K3& zIXp=Q7>TIuly2HGq_OKS_WTHFq*`~2d*IM&tQO$VVqMP5qU$)(tK~_*yzI45>h=0M zso_0>I#mj5rj>fIzbj zOhoUO^RHjXVhUg+yG_KoJ1B5BMa6uD!c1r4inas*kO*P=n7@RnaKb%7{$K@+!o;dT z=I5&=B0P-LP3$bZDn zx#j`QR`D~VxTOga5a8_ffYK}HI55ReWk=`JW>0S7NW5Br=nhfBE3C9=O|RH>Bu01$ ztcuA9Ng?9Mf2IhcFfv233pdc{#9@G3u~8Z(yz&!pE%sm-A0!D|e^QBIjh3RlNZ{oVl9AUYE} z;#HxC)B~#c;gC{f%AGrqkQ|?!h0esC@X+!%PA+6?S9}27op}m~WN`fl(B&R^Drr-v ziUAHZ_^AjyZ%Nh6qE)kYtL4Txq>Y;iL9d2A)mQK25I428U4Wd#r;M3I{LK)8g6p?6 zN0Rf5ErbA5GpY0?GGfH2OhX_voOY+s2ns(3dY5ztId)idX(LU!mbH&YlO(*fpFSUf zM{+cwki13H{;BqSO#J zwV4u!Z~yQ2HZXfEtYooV4vkcP&=LDm!va0_xqI_5<67&*FuXyt=P?R579_z3(1N5} zUSGtG^vf7kD@Zhsr93O%brRY&hOHk!+^n+k|BDrHrw2|#{l@@gW&dB@;}$JBheJvD z-czmi^3=d(?T2|=C53?B3kIEQo#n0llh4DLRpEt+oD+RaJSF%tPKl49AS)4Ki9|d^ z6Onon|ERRQnq^xsJ0>(g-YM@FZ`zASPH!E^FGCBk71?iFxw7M(x|0&ei}h+-U#hvI zB#M%wd#;V2Y>Cl2zWqK9fioVP(UsbjT<_vDSc*$#6l#TLcJnm-vaDn!oJY6Mz6RmH zAX|A-;_GD(_uL6aBM}94H>|sQ?c$o6{{WJK!NTNlq_i`%B@O* zDnQNU0aEktb22X1m}(&m_zJV&TnH;AdQ&q9$>@C<1~YmZevmi=4ODc(ip63M^Ko4M zXtoji=-E3(wu@h=>JknF)xalWKCM;+m<=EAxI#P}yPxOqs|--|WdJSK>%&p4#7SFk z?IAbyWYwC+nbPGRu=m>P&gmnPLSL83tBRC?U71*=L;A^9kDz5Jk{3gU)qG{KBHU{? zU&xO0A6?uG@y1O%4^kJxA1*#u;h!GAjYhhK_fHmgK_}2PYAAwfUu+I&y zJwEZNV6?Mwkn~vB^ew++3(;b-wGk=-7KU^VXmHf6Do(pAEmXa2+p6Qd5T>m8OA`oP zxR)a4kPX%Hrq}ZyB}~LU#!o{6m3oW8Oc{BPNqLbZ^gmJ&>c=M?z}K%h4ErXB@LFyY z!aKNti(?K)V76w8&QBs)F4Ut%^#xwgW7FK@!XRTv6a{6l*S_Pn5idIX6w|4iPD^d* zSZ~EnVuDE+#7K_GbR2mL(rx6^XBmOVoM9=uZ8+K!T}vxF zFJ~8W4`mst z8k-5{^8i7YJGWtV^jd^;yxCXLHu3$Fo~C>6QvZ85^)zoTf~uR433V=I@i6gDo~H2YYiz<;x?dTX zE7s_3=PNm#%9OjE?rU%>{Ro19(&1jD^5G>wWzY8la}7ES_k*w zeYS~9-F@0cdGnt2z#<6FVXoITJey;*HTb132ye0vdN_H%{(1#Fs%(AL!xO84}X) zIFRfax7G028De_yETHd>3G2LAU%!lZnUJ*L7=OJ`sY{B{+PW*x8v0EZ@|zg!;23l+ zNw*rxUs?V8oOF@gpJ>7ND`>tRezOHamSGyt3^*(pXY>peLHPzd- z;F0<|WRlM8pGRlJ3~gOfUhM=;+Xp+Nk#hTIphr_xs;@^R_i)Jxup)xK1o(e)m?jgJ*vYYTQ-|S4J)at zob9;{#?NCr?LA;M0999-h*YtyI=r$d=g?FU{a?FEQ~AZ&oss6Mmp^}cM2{2tkvy)) zV(V32J&@YawvF5RV zQBfy@p7kGgy!Qc&Sy&7sW)}RdA}3t+y~$j9mDK0(iS-w)=It-~wO^4{36-d4Mve-G zgqyb46JxIHnJP$~kORQwLQb+747YyvX8r3?a8Hkz z-XvJLIZHU3_i*8dZ+xnYa7HKyY%__o<34e z<@$FAhi6z9%#HO=)&pW;ONM7wEppyT+ZcO5ZOh@;)3PxRHuo2cJT{xG<`cAX1WiXO zAt+t2*{GYt3YM?yU;oMqj?2-3iSVd$I)PB;ttJBcfNJH5(WiHc*_ zC5O<*2;M??AeN-rKlv9f2xS5iPDBj6fqXLt~60-j_0v^W?JZ`JTK%EM=7r zz;)aX{_$vHL>kT&oKSU85zIC{70gDm3fkeB+V<_}D%uEliY-9?85#!VvuW5nJ{CF+w$J@Xjq{dd0B}F#*K&;dc1o{+>)j_Zs+M29h-^!o!6znWNf*U=FO22|Bd> z0=$ww_Cb{@brUhbR>H($w8s`P?y}^-KsV^oincC^6Da@)afp8OUaNq3yss!7_&ZE~ zoATH~71Y}^G&^I0ca%<@)s)Q?;&33opgZ(qGD+%qYZ#2<6a9!naw3SrPx4+Kde$f& zYlRm+f01Q22*Fm!$2gSS#UA={Y<&NpK9K%kmuBoj!@?+uhphkZOyBWfE@jUZ2ZtQdZbz`j2Pd`nY!#dFao?8?zdqDXooBdJ8mX=BtD!BS| zCM*sqV1%w+E=x`rZgqyLDv`7z_0UjgtWIi!dpwNfzM~FJLI;t5F)JlQ1jfVyt)6B# zqc*&YQfl(y?hYkt4aJh8b#Z*n@8)Zl`9X8D|1^Esm ze~^&#n^z8@zX+)ExjH7hgP{p7TOZnEDU0wtR-4h07}<(sYI4dm6kplVPNX6j7E-8u zL*&`l_))4|Orv=m8v|hIB(Cf+P5AxY!3x>1!q7DWmKBHG(!DXGG&6VFPxzS5ZZ!<_ z@9lDO@|!%&B};1ChV>&cl;&L;9n{+my)Pem))QH`l2mPLrN6i=Ivp=v$D` zU~gE@iGAP!+hK>O)Qh^oY`z2( z>h+t&zbpM5V>_aI#&_wP_pUNO6XNJV`|b0gZfrx{Ph~+cQPlLsS5cG#w=F*QCHz1= zRUDZo53U%HT*=ZArMT?;_@Do~V4(cIS4n~YHeda`>!P!Q!#~?Mj9|PpizJrfa%*#+ zg@w@gUSDhhiNPmm>=lDY)BIT>GeHVa*}XNKl+=L!LccH3I|Xaq8EW}B)%-{J=ohef z$zmO~^e-B^I(=cC-n>hyt6Yd1EjFxBE=w4-;{R;6YtsirGVy?U2ZM{`yA1v;dLJ7X zH@Ram#>%j@Ugd_>?&0eGEK#eC{26k}azyceV+8&iQ=v?wpB*5hsb&UZCaRc)==cw@ zxQL4G)4StrV4fa?j_~jghFU|Z4seF%P73eM?saPkA7AbMiq>uMtt0sf#TYMHf*Ud? zHoToDf{Wj$XI z?4tQN+bCep`0T9=&lsiS2bc>H%Rt-q383Q!9!F;8_MhWsIiyhs|hw zQ&cwmKgYH)>wDl_%eTOB)Ig@y>H~0|!fkzd^SVYe^PL-lWUQNh1turXY9FG|(lUXs zVS^fg4X7qj`&=I7=q{sflvgfkP}Og-eGH0&i;#%9IZU_$y#GjJ{!Vt$W^5TCoC&YN z9j+Ct^#3i{mhy0}&-MF;;=P~^9mvI(0wbct5R*Y*dGn|Ex4B~zr^kY;-4!&!i%%<- z{Lq2f6!n@n2tYE1fsgX-h8T%8h)vJWRIcmOhnX(e`n^u6AL;-e!Qacy=A)jgK#xiVJqI>3oiFCi>FT^>u1J$c%42A6kn`0A5o&fT zgkfrsX~ACDBY!>+XNW5HF<()d$+$=(D21g#-uv-gZBLXQM$MPzM8x&S6>6j_A*-FW zd<@|Z_%15lx5Gmg&ChvqEW@%xYJYJeI$CWRtL`IwR{|FHXa*4T-ktV_g-X?&_e~2C zVF)u8|9xAQ_xBynyJ7g+)7qi=qD=%N|E=x3?Zx_VKE%lgkR$1k&9A=l_8!li5mojF zVee_N`>4>2$bD$X9&l1~OFpB%uGwX&h|tnIu3R#io3v##D@LK?9x+>^mAr51h*2>S zJWJOo8z`?D1%BP3eq=n%r$)S|h+%R)Gbp&~;Mnj9XiBmbsulj1#U%)QM<3p7&}DK` z+vi2#l+5Rva7&|qNDguU%O+=xp>2PG3^Nd4M2v-9G2?wrF*QpSW&Jc9Xiujr_B6d< zTppz99w;S4V&XVK(8NOX>k2P}@CJ4mxrR%mSvkPV8sWymRAs4QJHL+Br8Jr6#ey^c z(^`kqUxn?GHMOa5pF}Y;{x_{I7>vm zPZLR6AT+O0GM|%jeJD<0Th#cMef!M%E^ZnB=YJ6UIE5MF((t$$f@<(M&|JL#@2o6i z+zP%IG&q{m1QPM~T$-=u7jtt*@TnJKk?mA8(Wn7ZNzu_K<9}Cz&vu> z*Q!D>6nQkPr@pgXVfe9JM2RjHh3O&WoQsNzJ+tOZ)q2A>RX9b?F9!ah-Czf%T()kD ztDZl0o}0Nt-KWRqT%ccg038_l^IOY3^=%PB<2kJ>MiR2c=j+u@wrw2%4IRjsJvCY+ zA}Wh$IdC^j^6+{16u_;!r;>}Ju=IAD3YW)6RD^13pMCLEVYt2>z)GSCPs+bTCXq|U zgY)Z%c!N5LPLixL5!?27JB|Qio_(hIF>s#OIWdG0iq-Itdw2zi4&F`dAh8 z>Bp%^;~Qj_pi%HvI8q8tcA=a5g-CsK*1C>kr2p!*H{{s(rZ{t_6dbVFxZH1zEkZqnPe)OXP{EsVs+%;t%jFoXgOD>;|7gF+Zj&;=aO$0Z@i@k3mhe1S5LU;$Pqoq*o~#1R!29;6y+3;qV!7*A*0+2@2+ z1?wtAsmVBua(zDmLq7WqA!_jLNd1gF6`yuFSs)ikT@^QwoFNOA7LGqc^9?>?n5&SQ z&7X-TI_A}v!uq{~cCqVH51X8jg4iUGkUTEM#z0XC9YRGt60uU4LG!;UeMdRwU}@oh z6Agpj%u_#>Qvf@*R`?~ej$~OjBqGXPPPX~tqHZ#;xV*7XVs_=47twfzTBZX8ZwJL& zcpfdCgaxB^?>?>0Op(80ly%atFJ--ShV8`{iJbqG)U8ERI8+-EeS=v@z(GXC2}Fw$ z$~?ko#7F08{$_!xvB)Ei+gGZNToii-K_t>N1eR(Dv{TC!VV0i`pEXdFXgU#CW~5|OiPPm%SO%9?UwNOSp{rEzG||@JO$YC8WKv)e>TtVTzbULY6*f%tx3$T z8;J$g8|Z{+YQDhYS;nmk9j$oU)eQf5qE7G?yfqIO0_&H@)2*mi75V|sEx*?*8Lqkt z2PwlZx*r^uT79~y2Rs6$Afa8c;7dUNUV0~JL#qC*{fT#TKa$n+G2v>2*?=G32p0Xw z9qIXcqwgJUM|&u z{Og#9YbmyN!A1cU>?HN6$QUqWe!rBEn69@%n8CKkZ;@M9EZ3LHQf3PCUkm|l2|L6B z_wIs;CMaQf{L0WTmq&`L;TB;`Te{{F=XaA?>#h{J(F^_2AQ6^1U?M1td>Q60^8bS! ze$;;;fq`IFkTmtY&8P`+O>s@-=g3u6r}QUX*sT&H-`Whg`3^h648IS#p-6SLW@1=A zW#BS`>aphZ%DHXSg7>qs3m(LXC|lwoh`}KRtt!d#5E|ZBYb~M`ONNBX9Y47!CXV^2 zP)yX?oY_UV0)~8&_Mi^^8jGk;OAyt<#jfCy!iG$3~numcZHJlND4FWwe^=tFe7U;H3rkMahRB=Y-x%# zG9^=kcOvK3^d#%qZ@CFLM)`@j%m=u$LL2VxlqT;{UJ9sMdh!Xb#{i>39aPa0F9zF^ z;a%-TIw?h-NN1ib+#sU16joZ!B)VGO^GiVH&n%qp5w;U}-J}xmXl={uaY-sp$w9*Q ze2Mi_PCNDXeC!<;B4hxk?;yB@Z#d!3!-8FqZ)70r;GX)<{hutE$@EGVoSd`?)8v0| zqX=eB43~kf^=uECwUT*azgp--8U_EdG%0U=6Cf*QM1wzfF9vDv+U4Rwa=ndLcimQE z%8^-riKyHw=h^+SKshP$a6FjSYMiu0GT<|c!bOw4Q$Nx&af12rYP8Eo2F2qMEK6O; z&HIk7#8ZSU3`iBEn*@IHa#@+ud}WUUq|N$PFa~l^3Dr#rBnr4ECWumSw4gSaGD-zo zER+!bi-_Gr7NA%lRw#sV2L%kmc?brW$&2{b3!W(^nb7&kPI+2plUWm zQG~O8Ui=Me(z@{(h4gY?{kG{V3VeN!$U18WDoOzef5`~Xz5jB-R<@Ct4ZS+UVGrVo z4Ii2*+gGzXka!N`CZR5rJe^Sj1RNXyVhX73DoOzday&rrwR%6=*?2_(i&(UGK%UQLMrr}p=?+AzG-~eC z8(V!msQW55hRkpU=QR{{P|)2P0b8%R`)+70e^vdU@?U4=mhU6pPcvpJ!Dn+(QziDW zgB@PWMm=SY`e5h_>;cTaQAhgvg=k7%A&!A3d*%z(0rq&&5T+d$7)cUREy11V(fqKt zIZipYaEJB`hpJ5h+`*i_00ZFqZCybRPw=%msJ|*}-BT{gf-_RH z_N_$SvvYm>Y(Ovn!oXRLBAsEsWc_222P zR7>jqtDZ1ioQ$0{{Z*~>c`OwQ(rpkuX*4Q9*7()qowODE*KPb>NKL?GWZk#M);4+t zpf1bz%jahT@bpbNRsee%&18u~S1aOg9yjckOi;kkJ`5E#=hY?Y_kodc(WFGvv29K+Mrz7|+n(FsM<&U%fO3~*8OQH%OnVy1IFml@ zrc!@D9zGrRrotV1y&$1to&-M};LzJhY&!I1NhU>du``DsrVb*08-L!t0bgZGnk*W+ z6VsCuye+&T5p@(b-3?9EK{$4^bzl2c^G!|vx&n_-6>(|sZ*RLGwYV}%y`;D@-}-%T z4?4-OOBe;>=P?k*`z2woUJq07WljDFFTVg`yCcrrEF5q;OD8>v*ZbulK=Q5#7%gCN z-Uoy01{dWt`-^FXTD5pk~l5lHl}*exPrlAa$w6w8au98Gv z#BbuD<+FAwCt!6gVRBHDN>-W;G$^*>G|}w z{8Onoo&(!wU?q0x_@9g|^qb8Q&cE+aZ9yOmOF%+}%EL`(NICSh-nU!VR4?%Jyr_i0 zoDpV-P38fdT$$Kc`Gf)R!Wv+qe_1=Dw)Tyl-PDeL`Js*cNKq&|gfHYCD}3Ka)%b@l zZFgiJ=@&WlwzkRtRlYKU#{S1(c(^il`(PL(T8QnPH`;Ff0tcVQrQxV_{7)9)Abn3t z+N6+4SY`gU>1u7IIr4PQ>C6qe&XR8vqA{p{A6w%WfVsKjAVQ0{r_1OJh9?2-NJ5~H zj$GFne|`m!IC~G=(I4lW3*j$5I=N$ioO*X5N#mtH*1q}UDlmjx{}cZUVyf-qNBr7s zUijz!m=HPM$a3zux|@i!Wo*f4lLP%&ORf-7Akflc3-YFaey>U#M-dcO*ZuqB-@{qN zdGL{5Br;z_qIIX@f`u2M(ohbFMl)7XS_r04(-1g?$f^fLjVWQfragdZcsbs|pBec2 zs<&XYxUkUe7;}kxb58xm;75Xk;650F*RvzR*XKlR;z)FXQmPr@AoT(w^u@{`OOi{! z3(ntuwTahfp4OF?6w4{%f25;xJSJ3 z7Q|}c^>?_8p?KzF+Omq^fNOgk;@URs0>R5S&+1(D)$$6ySfmiP!6_qq3yp2&^_fJ) zips@R)Te!P4fv4RzW)H`filM&nr3;k)T#u*N|r3C_3O+Erpp{D3V~700meY|dL}aX z#oabGbTHhCeZpQZwh0LCCcpS;6Y)7Balpd{V>y^aRG&hHhsP?+d_Gvz4*@bbQrfAP zZVs)@$ac6S*3~Aa$F`G?oj&-$w^Qu0@@*@B`kTc8VvL*RtpNiyi?9+&q)%YFY@L*q?doy>e9t$jHOcSM?z68^RbM&bp19kg}xWZ|Dnr>8(aW= z$??IJ>idX(*ve;}2cJC1Ty!+~K86q`%9B*atUOtfr3$M5d3R2%(PHlE4AdBV^@Lf0 zPXh0Oh1kcZok7D;5!B7rLR_ioSsQhg!eg0$=K^hQ|Mto;rQ8a}__W`CH@S!LzQcv^ zrnMFB^uEb~EF}DHx_F-zER$sk=q15`{bR1pne^BE%KC-Rp7uxeY8>p_9sFu#n2AaC z-)yHps!fcW%&P?jx%e;FySLz0reO;XcC^#R_~daKlt3j+!!`v{@Eh*&?!}tz3wxn% zqx?yp_gsxYlcsnL8Qy72bsr1$qk4XV@^Meo0$ooI*$%3BDtu<(+7&5-lLI4gV3^;b^xFdJ* zLpM8Mg-J9t*{6X_$A)imcaFfHq`|p@ja-tfs~~L1+1nk;XH=^DVR-+I@ym*}5HG22 ztmuJI9dRVpJOM;RjXEEmUoZf3j1G+9bvHjdA(s*F*5V8uaO|tV38|QJA>d57b%dhm z9620uM-S$F7zwJ;V$$gQ$qeLk#RJM|yD3zWeQdIT>x6%#@n$=1^sD|6cCf7?Tk#r1 z9SB22s@*JH3x-UhOK#|2V4D1JD2+NqgSLmU&=n?pg3Ch*8m@=eItdzulvU%*=|O85 z8SLfC8F_Rd)IT^_NmyE2fU-M9R=#2ODjaE;z4-1xe|vKJ@pw;Mlc7}(fqqi;JMT|4 zQkOdC9ICu1wRjHQF&rM}Kyia$p%1N=Nf1~LhbDF)jsh}Y5Su0oz#P30HehgqyLT){ zs{d0i1zv3F2XRV6XccbGbQTfq=tbQOC9=abk0Uo{26MDLWwg#IcbZEvs)utb?}Auk z7kjLPmZ|#?(M1^~fq%qnykJ@ui&zLIwIXVfSLx9%O>L??A^!csyY7AApnl z84rw4kkMjCt9!PdD6wZWj&QO9ugh9uYMm82oFEV!aN3Vj!FHh(>+#Q$rsv*5=vM!Z zjuIBG$(OJf&o^vGU=DYl)pD%x0>o5^uQuvfG^uW!U$FS3xlE^!{g|%fHsvj}R>QTK2(Xav$6g#l|5Ad}m1|bj0@V-BW3@vwQT}Ig zO7B^!(@TAT{QFQbbv&z*n3r8VSe=F=W1sz&!JvH16;dG1ve#?eL4!4i6C`Smjgs4d zXp`UFTO8a%<0Yb|+Z+y-5NRry3pNO=CerbETzN&o9&9b~WhYR=h_SK~62i7pz1&T< zvWDV>fox<^)6>OShxjjwsMeLy|E>656-q1cH}*U7hj0s5s=Z*1MtY&GUxfzpj1}Y7 zDGG9T#niFM3R4Lo%(q!J5Xk%esm7}yRU&tPgrP8Jgn@No#eaCDLe1S{Xd3D5^lb^n zGIgSFC4Xuq_`uA%C)3#?QKzUsdhivH8@D~zvo7b%ar^#PU9db=Q(U1UsJQw_yx;j- z{TL6?LeAUrpKZds0pW{e=oRz%D}Nwju<~*-ea<`!CPlkv%KqDR59sktGX)OXn#Vfv zedo5IkP*F?gou=0Q&Rpme~&rc%&sQKmtA~`paLQkw5~I}^~3(LR8nnW2X^e~=RQc{ zQ>}Oh3*3G(Kwl!L$OuI`_bWGB|5Ac6F3WB#%knLV! zXN0b)EZwe%FZCx&0r|L9lpM$_L=N7^0o+^D1qoMNAf9MdutT@!BFz~LhE}DEzpq%! z=TR9lNgXFPyS(CBp75i#N-M`vmKQk1J=@Hgd{Rr4XkYS%(M$8N@+FZAbg+s#>#~G&&?3b1sa-%iADdAv45=&`wykt z5|fF6iWSKi9ws#>oIhC}kb2#V?RgGS_@|AjzAqymO7<3$koavnP&)U(z8`ev#ZdYa zqI9+c5lSK%0`LgR&!g!|pBA@@pZZ|V_qi3ET8av+2pA2p&F2BH?Po(|gmO*Mm?{NB zCprW1{^1M&5Vx6xTpC6U9P1%QEpiv_f&D8S`|tZIEWmo4z-M*f$Fz zg!}=Pom(kMJtI6dO(|Dyz{i%}%5{RRcvG@YO-%MIJ$#NH9WJ_?5|-bNXKbQ$6eF*{bd~)B&cPJ3EK%_ z3>B-}qr9F`=Bh_ye#Y4DZ$k_p4k}%csBv9*Kk8Xq!@5$d5E0Ek6E(^@@59^^&#>++ z$q|)vPr0Zv^W!;c%sZV=a8E!I$r~>vBi;`LacevsOxNW+2OU zRkbDh6}^(9%=CXvG7t3;N6@!}Ub!>qk)FC>o5@h7HS7naUp$b-Brf$HVJ`ov}>OlBu(aNGMUKmjnA#VzwxV{D=Yg#m4HX>pB5ZHw9nM*b{;o@jaPEp4gq0C zOjkH^BuwwA>+NA-*h6N=UdrBz`hFA!=P#70cqS>j=m}>pRsV*^f&A9GnuFL$DP%4w zbnHe>;v&cuwl-E;I+K73@^*`+7njtVQt+-$GjzjOh4T$3XY#|IRRAUdeX7oBB%$>2q5^x-xm_?+e!1FjElJ0Tp!83WhSoa z!_+A&LcH$sK#JU)OVd5gbx(Jg%Z;+(0ng;`BAmyt8UlOVs=3XMM^^p(y^gvnh5vjB z3)Qg)MZx_r1hm1T2mX2>9INQsUHbQ{ofr&XfA>O`%IcK!!H3I4B9w( z|4sJwc6KS1uaE3X?T+9xn5T|?#pzvst@OVhCj9@AsE-pvEJJo^CPWGSwX`u_=jf{) z@FamD@(}iE?|8y->7}_%iP;=X+cJk1AvV<`hNJ#P&f5z^xT0pLs zH(>$kX?ztgZ6K4xm|hlqJ*?;fx~S@)KJt=|3jxmKi*3gMHRq}$1K3pw$!{Ef7jp6{ zjcxREANSbVy=iRoFLeIG+kvELTUSVeranUB4tG^%^DLIq7@3?e*`iFp;+fLUZB}a3 z$`)S}P*?+?{NnzANu~>1xv0AGXTIv?7o80;zG~URxfI#f8r+{D zOb&`LzV+0Qv30{=j{Q>8z0wRbue4Q_R{aP;D$5mm5>Q_zkN&mNLL3?*+xR`(u*2`xH+cvYB$}>n9>(M03cd$oGK404*=S@}#rs<6&qG1zbW}~w_s1_L z({$=s-miO~A+L?v5#CXV7#s$lQ4 zArayWcrsxg{7yf1f54yTs39Z$W}#g2nS*m{-zKqCj@RheCJT%k@}7TZyKKlN70`7#d?utJa5tn6|ZfK8Q?3Qk*bi1cc)^VZRB=HSw_TWnX*~L1$6O3y zc5;s9q%?nL#${R3k`|lv`r`Y`p1-l#mw_& zWl01!)}Vub>|{)7c`KQalo+bKcNJ+m$jlFl5h#TPp<;luAg8#ykg|58SA-utVaPDo zNlpueW>ugs)`;m%`0yv7!j)A&N~yt*rA#mMx~Fjq|Ec)wSgyYmdyt&*y5W*_rR67H zy!K@)CSyRxl-?npnv2cHom_i>57wk~o0Sag^$qpH>a0>uNl4YJ*>{Gh5)y?&-p|J{ zIX`>Qrd1RDrG|_6Kgd5-P^1|7|kgM5N z8TbgWCsD)g!m~vPDnB1En|y@UF2~&S5&pS?5a=gQH-y&m`5OsYVmDi>1|9#fs^;hi z{?%(OQ!v6UMD*(XjbIJi23SW^ybjWBgfMJfB(3I62vBeT^B&@N(i_UgU~<|1Hs~oO zQ{QltU6xpIo8NOt_35S{=9F*$TY83w+o!$N-XN<)>2RKc$AL^Y@ZJPiZ#UL!GK2je zQz|atpTp9CiBY~3_kEtKrKEMpp=McW?aPpB|A7+;sf`u<;P{6kkvT<|7|Gb>9ifN} z36_XwMjISi~P9p(~#nvtTA zh~^STNO&lu20`0|xA1GsdwoI8SIVPV@_AXO;1JrK+tUp{`{U;-u(rRe|Er-fk5RAX z4A@YEsT=d>A$^m>zXm36eZ4ht3}1UfN7}5!t0ary<42;PzdaFsVjhLRkThfhh^oXy zK7H~5+29XGPtCM0i77y;vufSh9Z1yq~XwuA?64{7SKHlX`*UqP3ia}AA0 zHW<)IWGdz>)JWk)BqAz)hpmYF>3Xv1Cf}iuU09%nXSWBWe+1{gNU|0QYM2?mD79Z! zZ64~inTK&K(+mB%ARKlD(HlO4@>#_we&3QTAJ+Ue?S-jmA&Z^tDA3bMl;A9_qb^O# z(L5pVw>S|XJoRfG;vqII@oxSea*X8J{h@cos-lZ(i}-cz=_p-*PX{BFDfu&uAAb|) zY5AV!f+>b0m5b}acim=0N4`%p7(v%Jd0GX+O0M8bZH|JKiN;v5xn=@lI3ZZ5l+TeW6?irYg;4=u?)*TYoN;s&xI zld9PUO2Y$Tx>g_`*_-e{AxaXH#g3fd83PADP^jXxAg)tAkoF&wdnITR<+FNmhx!D2FFbhFJ!bE~CS3ci}QS!G)8cW~6 z508pX0hC`IZBl8y^i_f+LhVK2X6&c!F)5{)>ZpE0+i${v#7Qgu2Zb#H+(j z%uzATywELJrFh{Oq+ilbjSpi@;=W~zaj8N(xO3L@%Nx;hm-=(oB$`PE9POo4Fz`UZ zqbYq8>0YD@-T5^HIApkHL`^U2{g?RpV(1o1rU#NXVK=;523rT+Vy|sOg$Tezzx2v zNYNRvZlNH$EVM{TIxUligdlnBo)IVyX&W z#{`17?SJRzI`T{#&Y^Lm$_rJ0LCEZAz+@`ldG>zB_bVoKk%p#}?a9yyKOo_|7n`F) zXlaqou98+Ahs2r4F8^GM5c2YTZE>D)Ss~)E$KBs$Uh!Pq2X$Ad9Gm+zwyU0y@B1SB z44Ve2kOkTxPCy2!2Mb~YmC8;Dxev9F? zat;-UB)ihAhv^}Qu_8+-BwN}RKYIoAMmRg!ko(K%P^XdLD)JkQ@HNKX7J#=Th>Tj1 z17OLj(jAV+qSs25UP^p65^D=kp?~9~k^6nmhs*IeyQ)Q20T+jh{@MU$47Wn+8fSoh zfWxDJONP>Ow`vRxXppMejs9(XiJ{}Z4?(r$G{orE?*z@<%^Wv~v<_`O3y&%F>-_})_bip_4pj*Agfsn?&fY&N~=6)~Nv>&*ej>){O0kGb0??h>c7 zn}_N-0k7UZfvoG>-vu(*pe=0GSR+9Px92n~&Lg#TPy|f`&=3tjk>afxLN)?e5cp3n z5rpwzt>mnwdDP7NgE))WgQ{x1LeBRI^6xe>7U_tfZ{R|E(%{j%`}#>v>ES4F)z-wf zco*iac3bJ_poPo7mYugh_SeJiDV)yJqSo>{?;4$3jUJUQu`YB~bGa9%YU4l~+GS&{ zwwP$qFPVsz*$lY;tLvb^XAEuX;Qrnpf9Upe#3BxGa>k6Bt*>g4+!|awaFLdnCv{3F zOS;iTH9ap{CE_?l-diI?M?QB_T#ouCQ`i()VDgaG3}TXt+NNZmM`*WZ&$oYCx7N!` z7Lwu;TCcijJz$B}tYFZ3Vu*n7QGEF6^apu?cVpCg`i8w4{a6C`_K;jBzwdOp)x|lr zy|vKVC0C^mqAyDp_KP+x8zOgOJ>CQaAypP_niRfMc%A#kI4;i*bSq>3*(9B0^rD~k z7)!SB{`zwH^fdPz`;sp4SGUj?#75i>ZR-i(F-0+tj2S z^=3^Ws>R+?;As|*`_lRIfz~%nk`jJlYv3 z5rEQ|9Z}|?fBaPD8Nd*zNM;Vp`x}Lh{=rGkmAY?lC*Jo`2IKjI?Q_TOg>rG->$r&z~0Na*y z|89SscP{^do@R{yO;4inBQf56>OrO~*_Bcr+yyC992v5w*l^xymLNiQ;AJ#B6OtRa zcIRD-5E0S{KP|OML_xiN8UMX<`RYoth3W*(aG=tK#;;ZUQQCYL$2sUs6rFw(N2FL{{uP>UXRBSKRCXP@thk8YTROgm_D7tOJcJN3>-0#N3UmprSVYao!9Hayj|*m1 zyJ<~bZm z-o(PSG3-SHNpmHGV7+y$m>{10FBH;3-=9VkWu>H2vx*CO%%v{oa6>L3M)*$kBKq6> zQJF``vcho^^`ufL$yrgzzfgq_p4t}^`#|yA8NcgLq6xR3^y6`qZYtE6#u+oC;TyZo zv)zz$#1;z{or`xGhVm`ijNg^$wZ=3`tZIj0S0grp;VFP=-0lmTkeR{c=P)C~U>Fi+>0mg9EcSxIFz>VSe#CZk z0yet5A}9;x#>|yBo2M|B4;WaJ-yk&zED8D_^(-_mJO~J?=IiRlCVm2^5HLE;8g6(c z)4F4F)l8Olb7+cNzR`0*Q8QA499q$ri7p`Zw*X<_^| zBs=((VbV`u*w7l1q=z?2Ns71#dVvFTetWMGAv;ocd(ylp zQ|UMAl^%c-jw+>WXQ%~>E5F8j;)VZM$!1CDP{Xb3L^gH~kLJMy6N&AxJTqdx8OY}-T0+c0iqV|e!==5HwW*qE!bR8?D4r(gd~r!l<6rdC@fl8z$ZwQ zLv4d~3mM3jp^9%?ub@m2k!w6~M0( zLKG>ox6DETsqbMw?`=jhyiP(D^k6heg5V9RXdPj%BcwaW9YM|8^A<;^lo0?3y5Ja)XISb!a9iVeS1nhj6w88<#7-AmD0KB3ffuQX-DsndQ!&Iu*=vcn zNyUHO%|^yd7l6V}dEE?gudQsqzM#!BZltu2--Lp*Vi6Q+8R@A1gy13BK}-1|tc)ic zAd!ApoT2tj9K=g|&}3S+$BWNdQwr|h&hjUEA6~PW+rlz)lj@HnJv9ycj*WX=uRnV- zwuM|lm>|I&N-gh;S%U4sPx)N<@LGJ|E$g)71E@&|8Cgb_Ks|W<41*P^e?a;xyyy(? z1^^eyzQXH5an9jDWN?<;B7b-MpSY@3_$g@FH`7_5xv`z2W&0fQsEWF5C%WXUNu>!Z zvkXpcq^wLGjXK5zJ(XLgoaFj}>8Z{DRzjeWmHCeIdBnVe2t5(yFwL$`qC;jloa_Hb z!#M?4!bR&gwr#Ux+qR94ZF@%@+qR94ogLe@ZKHGld+xba^I_E-?`w^@>Z=)F#>~e{ z8e7Ww^{p3xD)ve8puzGc9!kw z2>7^*)|y2dONWZE>!-jnJUc}m+VCI+*sK5bo0}MoGWXFLCY)}36Yb#2Fx+7rL`qAk zc8D`^>7z(0{i02hruwVD6pVc`r8cAL`gW&ZLB`CttMR=<+LZ$poAxaA_f|DMa zJYbOM>8~cQpWtlRBY;wuJ;M-8>KM(omp)TCVzRlr+eLdTEp+5oTj{k^7om^@;O|lf zzq7t;kC?o&1SM4&#~9&t6%BQ&^th|~($^gJN9BaHp!9{`9yx;aIaB>gHD&&^TAMO$ z5nAzeG*A^Cl4i`^6L!Ub#qG-J)iH%2s(f&u_@#TuK3_NVei7lG?4saZ+ z2=k3HQAD0kTwN(ZdgrIF$@_ExC_)2}UOb<@Yv1Ue|FB^g%Z8<$sPk`eSptmoAX+eU zV?n{so^JKXf35i!M-i8@^*t^k*BfpJ=#j|I&}cN}P3zXsNp@y!BeWcK8EmVSfg1Wt z7^}Z%1;Q90lA^y5s!l7CX;yJX8Bb!O>79;uE8@p<9x3m%`@jBso+WkwXiafNCO<>w zU_^%EaB42R_P|Y-7j5iF@9Vms2ql_`n!rbb4vR0A|am-Tk5G8J%US%Hq;)? zRp$~zB#VDAfY$2IiIUkG;J^3Ahv%FZK0CZ77(#11<>~k-8vjU+#lcTt7Iw!%wi#oa2qn&oV5nF&w)ZoI1!E z`?aTt8${)Ac4t|w=MjCcuNnlkv6n~_<}IW1^XV@FPsC&x)+n^0l4fvdM!P#05M)pP z?lZgniURmIzOK*IRb5L2Nu$HB$p?2o5-|zGRgcO=3H9BN)I?Nzt%1Ohjw~2|5H_T$ z`J?liH($m#2#ml7-Q$kWm*f6~V3Y-bbj!z)p=)6;AL^88IC`zDNb$LhWedDVG0W*R zRp7Y0OH17VHHJIieO1viWA!4gN7KTKLsc767Xh=Jj?(%6uC6IY53Hi@S>@)GL~C4S z?Ww6;|3Vu(V7abED!8gZ1>6tL;J$7)cesLwL%f_kZ~pEvqRA4a@7AIy-XpvbIk{Mw zbK1x%eQ`latA8BXftkqJot=87C*ao0^i-D#OlYErAs5O+S94$vs9qv=W41VO$*SZ&WM@MDc<<)RM zvHaDlplHdALUW(;k3A)gLR(m4-wg|-W0PXEsfF2LtUjrKV9&l6S_m{To+su>2;WUQ zon;UbBc0eCniHIjnKgX?6zUg1&%jl$4b^|OzTfl%1x4HFKJnhnhFaw^v&5aDP2ut* zC`~6DJ!?r>edPUB0Qxo9!$ieHJSwYKn#2qA%HS$bpbNyGc9{E6E^;J%Dh!V{DAugV ziySY;hNFYKnBzX$PPHF>nKJoLNHtdr9RAxOWq!dQXmK9n<0*}IKNdqkh$XRL+0gh# zOx=UtzsT!NyP;#w-z*0_*3UE2cd7o%(lI{4g0ku8qX(N;y72xItWpt)czXF6d#Yx1 zIP$@;>{%#aM@)7{FPt`_L#*2MSp{ef!N4{NcuU}z?q>JAI1|PS9eWBlSwv)^%t2ub zjDG=BMn=iAIr`%r!AKflVFasqMof*PLPe-XC05oPUUwO1lOA@1X$j;-w7KDr|3VTC zn;_Nc8r(1ivEFZH8P-*p<&rb_l?1D#R*oVzT8?*dg^&=YPpqOce{Na;nFaVtte zXcim$X5~mlE6vnHePx^I$u8{;C!8v|X?EkEonv9Kvg6JL_Ot>rt?Y>k+*{~c^$$?u z5F9J0PO<4XxD6{nk6X&pljLCtyp#4wl0t`-39GaHAzK>8Zs-v&*;BDDv#`k~sURir z<)M}Wlk=R@336gm3)OCUJOr9L*|JZ6YU*hG>G{g+VcMo6lYuM!=>m?x%ZJsQw@crk zcGfaIq`a+{*rNVqQL5VWq(e+e3Wx9%j_^DJ_rf36+VCN{JOHXY{9 znEXmc?k^-j54)!gNwT2D{~vwij^b(b^hI^LR()Ry41nPHqbF&|2%Q84#f+RHLZr5T z+Qcd!nR2}Cq=PtkNR93N{`XH99p}<-Lk29SfK{<_=2ogfS^{^!7mVJFQL0=Iy9Hcm z+kv(5kmGb%|1 zoLo}qX=~YI`EqmWfCu0n=H!7Gdpo%=PvBo-EU{+21s}s(^AHTn2FRN@!e3MtasR)# zs4~TXW)WbE3BTdL?hor;KLuEtg#a{ZOu5|`VZuNTH)A#<4N6_w)w-YQi|ftv2h8-* zA+~=%H_LwDkuS*E_%tGMvgPQO|j;)pvOke0kWVlzuo8R0K^Rr`TQ62;bl@Sv?f zFrcXAf#VR`5zwBIJi5?{>%B@u_X^kKeqN4$cA&CJ;{P!lk0~7 zroR2^pKF_zK1b0<)hNV*dci0S;jVs^geU^j=ZYOH2s}{jWWI-ENMQpHny=60cQ>aI z%ggfz7Z!nta~YJ$BN1Uy>D+fAXr45Py>+Yz2#<=XlO$~mn&7}fKD)i~FOyaf(OYYu z`Jj{eW20a&2ZifT`jv36^vR^xQ4>M{Iz)!P9O~b-PSaWBzrPmXNrWEBAh$FM7!Hjm z_32%T2(x=SaSmC=){ZUw-Fw&75b{B6k0Oo8-=sVa#z+#uFt$-s(-8)%kKG#eP+T)N30F#_Ngq=l&ioc;IN;M zH;B5X)ovpcItms_3|+fRFOZVlqoY3`BeXr{UP`3vA@0ppN^+D-i-w==As!M{Tznff z{zf|LtjS${kVaN*1kog?CzBxy1bOvwI=gL5Zst`>Y|M#mWl|(iyGR0%5yuxXH?WE< zJ;@J%yM544P4XVn53WoZUnLnE2iAkSGZ9oLjMnP8FLoG1%pK9aA z@S=+C=1IqoPW{QKJEhMvBqIA43){S8r8dq*IrTF{uK;t^JPHt{|P|K#7Yq> zfLYWGLDdd7nJ8Qx@UW>LdX&T{mEnWDHs!i2aGg57)E$MP=#k15w+R}NYtKMHt0pvh zJ!Xy+SHFWfbTY}_QBY$P6UER4Lk9omZc-aVt=Ag#oCM^bUM@c{Y?=RVNYi9JE0>cu z&Y0YG>wLnv>B?&fiSCJ}k}ht%W$^fwOr>r5{1(5KdK9NMYSH$nk+;WYBm>E6Ywaz| z=-JcxwlGl%N&uQoTmYwQ94IDR>G^$uThbp$q;1FuD^m*wRT-#XU*0;q!`>%F@Ya8a z-0+#$)(?>FGC->iR1FrPWUai!og{}y-uLsAJ3%@MEoONF#_W}d%qxWBhKGSdM!)RI zj7bwBh_&EGj56}nOC=c5?A(()`b$4}drI?OU0gev$4C}UqxamzNroHfk8FfO`&vry zBz3p?ngoWqn5lhX+R{6PsXCa%ZXPSurxAyU6$4^*|0!9S_MUVquWT-kELG}Xs55$k zW$>ob<-(RJ;;WU%R{qzPI{xQ$^OwcbA>&h*=f)qiA~W!T8~*|k22(ujh)_F;XcZ4P zT1Q8tzeZg56ls1Qu@$SM&ph~#F34`Cv9@Iw*aV4D@{w6 z0PtB&E+p*YiohSUS0n?CHo<0@^`H6wG5sTU-))K~923P5m)_$FKh}Mf?1|xZgOlXF zYjrnjGtZ{qzP=xy%haP|K#;&PfI7g+3kgl$O!kXI4Eobm6#16xaS~zJ)2z0l9_W8I=+?Fp#H;ReD3+?D5fo2j#;`G zwO}o={o=-`){0TamL7oHnWkvm+Ez5`yYFkzcGrEfE~^Qe5~#H;fHBsTdc|$mW5g#N zc6vXPKVqdu@~iV618>}pA5Oq2uYWQhas4W65^3YY`d@n$iJEX{)it&txmw^RX*f^Q z<>NncTbVBj@%`C4dH`@_a`D$YmD#`6WsZ^PM$7E;cO`?QAJC-*XvhDTN#sf2KLbNg zhp2@<0KgTW=RfW$&76cx2dyZ%AyNLE8dxEBM;o(cgf?PMXg{FD+#vbmz?MqD5Xh+B z!ZEMfFqQVz*H&lO&@WUId^e29WslgmBFfzZuCeS>In-eG+N|xm)5ls3n@{2`)Q}okAZwBk@%e@$*`w>}Sus&q81+17)N);+TkZrvVx-o|L;Q#ZO(&$SM zW{1H{uA*x~e<{K|aW6i?~#Vh{Z|N^2(#KG_046U(!w9l+)K7Zxc~fA+8KI8rTJ@*?gV#Ec%k{M=js zQS*{)5C(iNff`m6Gs3HSu3^B(9fn43>D=DP6}U=s`NQ+@arUT2+$m&MeuJ!<$yNL* zWm;D^$o47Z*mrk-(gPU8G3Ctz*d+P3*s!elFWjuX&Gib2M38~o5g|0m4Z{QAIiPED z72C3YH=Y(g1;*~KqKWi@Sm_kI*t{;$uTzEC@}k1ghZrSN5DLahMWubQJl>7C7+P73 z52kS6%q!L@tbo4L!32yB?Tie1`zR`DJsohJm2Ys0`1BD*_jao?78tIJi27;EK1#MR zya&kzM}(X8yhmi}Iq#tF35g^y1Ms(JyD8}g{^|V4GgbkM1&qD+jUwRR#A8d@Xy~Cz z?7Iek{;FM_+b!K_8O~b4e**jPXdU(*l-)Mya{^6;WLUiLfdL1Ip@TULhR!=TWv$*B z2VFR-1aPqzOkv}WsXS4sYO|RQpBm5h5lT42Nbm|1s#om_cfr#5T8SbP1Nf8n#45rH zC>sUDpXZ`cz(8^2u}!3Ss5*@y&d*3N{`yW)V~SRJG|zrtA8y0@2k~($v&8xp_@^@B z(SOaoyau4mb3=LJYA@^c6cK_kGk;Wpx~x02iZe`1sL(XDQN4%+S;iREfkmU6=`ddr zb0ZPlK(FcyEQgSj!UO6t0C$~{(Apof43G?|5x}!`e@SW&kSIlYVivQmPlrx%2iY7S z6?5+2y0D&Ol;2@@;W0_LKml)VuL&T% z!z3P&961X!-T}M5fxA$*`Su$D&OwikV-ov= zpx+1d>u&wy+U4Jqoz1kj$^DXS4)%{CE_b#*cC`d&Je73pJ9@^b@bb?Aa%T|584AGq(jg^yt;HD+#_1;@ z10D7nEt?lOEVma2j5N8-n9x%%zIK}E?mo1MAC7ff-eATeXpOw&dK37ld=QV7bV<#< zTjyB)rBnk$)=I2L1E7{|Phv@7k-XU4LmPHdIESR?V9`Mgi~ zDA0u#)osp;x*a#8hZgp2QyoB{DS-icWET5Bzb3mr^M3>Uq;mQb;$lp8y2!_Hq4jS0 zYf@JmZ*=Lz`Sl3QTsTX(e^WP+7kM-Se)T3Ev}@h%RTj7+10)csD@`LMGaPOubS9n z^gR?M-@$5H?L>Ih&!9V(=&k$H+k||d%h+wOdlmFHCqc4YG|x+ z_Zp+K5U`p`H>pAdoc#pL7yJUD&hsW6-fdKEC4JR}b_6~8_sR+iVSyPiGVi=+sejSJ zLA=Px0Ivle4}!+MS+0<uY{UV3j*Kav)pNtc)C$vZ@3%>KB#L^Gbc~^Kv z#F6|GLlz#;g>y~e=oc5dPSY$;Lf7=0xWHi}l}nunS0&BW{GC$LL$s_K$CM{)n zfICjpWl(`R3v*V_3O5r9xNIwzHew~>kj3P5k0%UEjey&*j0aDv zn1M6CofOs)ckGngQcQd&31f}K1{WqYdTLaoh*%7!ZjwrksqksEI;&}EvxTcZoH|ch zm{ntB@s_WGOt2<%(+WmT;b8>9snPca07RIauV3a`G^PnY5C@E4W6W(7AYnt50b67~ z?_}y?c-HT)xrMf=X#U6YhJ*rl?64>rCzj6hL)lHEw)WUq@wp&vAGK%mldHrku?D1{ zb`r=5&-LK8q?W{VxqRPuq4^= zW*4$1K@G3@LI6K6*PoC5L*R{PUck>eL;dT^_Gh>fa#wgC;Nw9Eg>hiXD$bx#EoYX4 z%!kzwtU=mMGANfe!6|>wntcGUNYf{MYAt_%VUtO~s%MU(m%I%}?u*+b>QS!8AWyD} zCAR@x54s-&nzY}+D9awqEkd3Ui*|2sm%@d~d{4BQHAvH>J;IKG-QXA+z6A|i{7K>- z9D^Az$}>SnxmaiPQBGMR!V&6HfT-t!?A5ov^2zE1Ib;e6UVPsz9P9<)rkYBW;6VY& zs;!9n#9sh?il5su5r}#TXQ6?}Oad5<9iIg*X6Rha+L^ zR-^MGnK3wu!97Cd-_KjrxN(3nCJWRB&c#5{Q$V7Djr6yJdGynLlA!zJWM!QTfn<398}WG?1i8oi>+aOs zTEvq{E4INArXuCCIePbl#qA-$v!iGJ#LofZH!lp$9+>6zU zz=+n7AB;Y#j$;F;(Q`(UtIwF=I3Lrao!^%qwDJqgFQPPt<>1U=<79v?nxIOOD@XLX zdP4R(?$H0BVf?}y=Y`mgK4Hdy{x1H6YqPtn^9rz7z*fk7qkO?}Cu!MJ0{3b_ zo6s?wd$Y%pF$2c&?CVyTvv)aHK#$g@nJFc|e3^^wQn>>7G7K#oWNqsH-5txLhawLM zKfg8+)hq?Vs5|8>#{#>-JH)0Z1hd%Gq$7AHwNLeo&oT=8z2cO>n<$lH$|BP}JQ%*8 zh)|$SKGw9^zx%X_a(Z0EI<(mC(KN}9Z4)5A*wfWjK}swGJ+?-la7G}I z3X$kSGP;1L$y*kE?;+(J;i+)psoV*WnyY)bhHx$60%|0Kf8ZC_9f90J*y4K#vU>b$ zH`16flck~YE^w_+fs#Hk#gL1I07)Jqkh)g-nEWFB zy{-dSS1#v0e`+xtxsBSQTY0FX`R{C?<&eG<3B;SJMM!hv%N*?C^Ib|r1SrG%hs{)A zZ#e+MHO^D1G?G<`_Kc~7or5L>3+2P7v4r7l5~MGM#(K~#7`e3iV1vf6Z7-Cb@FGTQ zj8Y&g&Cbl97&YbVTgf)?**)jB_S;#aM^cze{2TUlD6d~QxJi%UJe~AR@CvQ)#{vny z_r;rE!u<#0orl#_1FqhEgJHlcd3v)nbv(S6EJ4LjP~Lu0^5*_3H{NZK)SJ1sIAel*iC)< z?F2Ll0CI!af%$E;3p??^9>)35xHrJ-{B1VIXY-jK~L#+G45sEaBKd>LMwQ^ z`8+3L5q)5#Wgfs4E_Lcd>lL$isFu#3ckzVepl60Vu@9;=*R<@~tXFf2# zwP4?8tmRKFsF}Kf>^mG$&4KwVFOzN_Vo@_Jl4U$nJHQ8iFnDHMS^{=CweBHSR z2uz^eU7_vh|RM`^#793;lTM_4zXY?b_TzRTua+j z88IE@N3rpRu7Va0K;vwplo;p-_Z{6pXY`rUrY`Obt3IDDr*4{0Ur$Pmw>Q8$8INn# zW0UV;4!{n+hqxw^xi5EtNO@8zFo!;QH7GtKBi22ytt2r+_7{5ILjjkVwa{1t?Dt@^ zljL#)`5opy>==mLe#e%YupBnOb!q>4q)`m+i&F4IRX6{Z!xH~W$=VQ5lGoXIj9^*M zat#dOWr14#X!$L-Cb;Fis^=3v$P?DS4iU_}*1CUOD0zx2|zB1XtD$1(-aG#qee% z$34Zh*@cHNs=hU*szS%}2Jk+KRN{HA6k$L0w6AAwzmj+GyL8d1Qf~7BxRCPKK^*%T z72b#;_lBr8cCH_;DTN~BvI#Q>vXT4zIsrdO5I4Iae*iyk7vI2dAoY50Yc}Su8IPT9 zYnQyUI-m-*KVmVaBuc+EWIO<|t+3)6z1@n(pT`XsVVM^0;C!itpxVoW9bPJ5KxGg; z#;JgfykAC1tA~k>5OxGGNv$hr>Nh@t!{n16y~C!$jk)1^K|xl+v)cwq4=1)wTV#=t z*N8Uy!wyoM2}D;oiIC*;`TSIWy$raBeO1Qd+a&LK3|gcB^`lJ1fu06W+FIlpNv0m4 zXKOlXwWHvs81yHc;#9yfao749#v7unF1s~o?Uzc6l=8tP=6?#dB8Z%Eg~OmSUhqPYw6cb%IGCVhTo8H03DKOfns#a362DO zh&$GviBo+*7xl8I=>PU`PXlzk*I2eNA%#eliZ@rFV9g$J50)6;WgYxXTm*jSF~f@a z(+^<3jAm)wcbWqFglXe}#h2e)^t0X(a|`HB8ekPYn*rA%Xb1%&%4K#)%Gvg5P{@kS z{F>nBqMcRwjCK*3=pum8n&M9xG)BR{MEC+vatvE0xj>tdflSwJ8xR7n=QE?%7NjId zGA%`#j#oCrN%3ElTpW6S<@P(#3;%S2KVI|6B|b4Ea0ec#>D)Ft(@M zgKf5)OKh;HV({^HXZ+n`fr$k|tiGg(;sMEx2}pOP(sM)!=i<_ub7eaQMoydsx*fg> zn7i?>T)ugch#{^R@wA@e{lr-b7;zO#GI9e$?=4*&j82~@s2mx@nk9bcI*O^ZFVUpO zj9krV%xAz|XUKxQaVQGmodzyH+Ie#ENn-|R3tEU*J!X_)eTN|rQnd~|8W%RVRe^DV zD)SZ`G9}_s5Z%2O|Ku2@^`A7x?zY7t@g`$$g;n{I#cg(aoUd<=m<3eexJp|RN z3W*yInrjn1U*XKH1j($lOPvVAS=TJ9&&$giztpUg+jn0&^+5F9(gvhR_^~_JH7?*q zvzfW%1zXLudYMkG;drsJ@`LH)hLpJFyz5*#7MjvI)JG`)LUCrv0`tRiTz9K)v1x_c zVV3FFi7W43jUi7`krkeyR~8gvV0>lJq{u!+f|#`cc;fFT=HMx$j)oAP*Xw^?gETH{a$CA#*$TOlcQT5D9>-Jr7ICi{A3I_4fbtZm zv@*eLn2IM=3Qf*Pv;936{_-ooUb- zPIn3lGVQXP=g7{OXA)XkA?uYuCQGrjN67n4b$*2?l5gqof%hb`_J_ZBbbDa)d7{y@ z?i#kBvgt!o#DFeCCGo~R(i-;&*chn2PEMPY?P5z57I=*?H>~w^@g^FB&Ub$2X>Pna z2s`?*<07|nLrN8-f2x836++doMi@CZLivVJOXqY zayd`lXxGXd(o$DMHoD*~LFa9u+jzp><1eW&7w_8UQskf3l8yC`cVPUh+;|M{)`Qoc9xf~UXM0(Qkqx9e zYr-I}-J!Ft6WS{w296#VLfj>Dlf<$z1Uw8H$ySBWCM8K@-E_=%qGy(@B=0aRCV3enw?w+0GU)0c)igB^nuKTnIED&`+;( z|7O233c0k;`{EapWkY;9Tvvm=VATwB>|Ex*%XOBgR|K`OL2b@O5HdPX{t@8R?aB)) z)dwWtFI+!-E%g4blzQW~x~3~>dso#IvI0hg_1)!84|Hy%%POPJYId;%a0IN!COY6H z{erArU-q}EF`O~cDDbfw`XI{eCNTQDHv;(euJ0}RZh$wudmbQ7&EaB$$up>P z^zZeMR6QzoHlR-BaZw)AEb!3?#uX$LQkE91aB5ZUqKDkxm+~7DAyJ1voMrsuDgX5c zG=nM3An{1&z-@T303Qig3N!FQkKs8FaigJttj#vvIcF7tJ4St z?x}tuzS8C|F=)w=?>@Q_NV?jtCd>oJb{%k*KddayrhQ_zlJfp0<*8(%XEMet$G<=z z$_sm2I1^ky(#B9sZe$^BT=K*UYH0wWzstms)YQ&=IhJ?J=mTr)iabUDg@gz!i^ExCHJ~pe5kKncT^k!sgt6|iL~6z7~acHWHb=$ zyhYZETU!8R^iY_?B9(4=A7eW|9I&rvm78N4N1LEm)rKzq+!4^LcqRzE6=+iM5eq?> zbo@a?nh0xY`%R#A@`sQ)$0zvyJIQbOXYlvBKsh*L+tTY=F^Lyt3($2M*j1N4^bVmX z4c|IgUT~1OIyH`{t)lr)5VUD=$wO)vGONuE^elk6l1}B($jZpQIYd3wyvVE4mSDXf z7@x#rWlguA-D>BG3dFYnb?$!p0R;#183xleo-bfj*p?h~`qDO7%9AQ$8`r^9ePXz= zk>U!%nFblB%y~kk6`Jj=)o7FedTF&Sk4fegy9|jF2H|4MSpi0R(iO{bBCx5Z?%}(P z>klAumO6w<%9?)qH3-v}m>&Y(d7r~l)D+JaCcIGkm-L*j({p_nL=j#42*T0ab7W-v zzQ#oFiN%0$We=g3;CA636s)oNMR0?;*YTRjA&!`k#GPr(yII^kQ0dtjkB@gPNrf@k9Pr0Qf$(4 zuX<4EckwCZ`iKdJVxur=XjrMA*qZi=D#@7)cb=-0<7Lz|4~S1r?O3eH%#1@0dSQP( z3LJfuB+5NX~m0EI;0CZ3|B61+~Kd5Hb=ml z8Ljjc9&V8X02IjiAv(XHkn*S9_rl-mWWP9OVPpil@XEo&$vJWEz_29SatMDM7$ApY z`&IE5tZ2D{+XYmZ<#}4{w6h>}_0P(miMMAwNmnXY!I9C z2m?O_4_^y47>hmIE6z@#K=>6KV@RQmnc*t3yCPtq;3z@r94{oG7Yyd5U-@h~lnxb0 zIKs5G7FEU*a^fpyv8DanG6Sr#WR&AIlr46d5#Nq5J9AHXf5Df zzKg*`39ZPSh6qlZ=6uFDO@pzh!xWw#PeeqfsEIw+FGcXBM+AZqv`B>pEnV$b#9T!> zg5zG&y5`dwwPCH9O`C_s{{d9jZ#y7z8B4x}Ixsx>!|P6E!;J#YGm}JD z7jw2$O}?_iH;$br2#?SYe%Cv$gE4y9*o;$S;2bkBAtc2@M~E_m!n>IHoHgX2XDMAG z!WEw3vvsJFaac1+{b18evJN{fH(#rQG@$O!_z@op!XBHe ztIU7t{`41{!dNzIa`CXT(Ck;?P0YAv6Jy(=eN1{xjl0T>xK1_{+yza6y#YE8e%4y< z05vSwP8JRWo>$?*HJKW#{4vVWr{^kB39w_{9~)F*^nXn8*#V6ar;(6Cu_j2}O8Zm! z79WrTZeU~0gHvE&havo5n4B?Upo`dPZSGE>bJ3s_1KpxH*u5|-WN=HQy)ww)!hXX9 zSSAqxjFx4aaNlA$wM>`A`YX9Mss6NCJvekTHtUqrp;&I?pS@75Z5gY!5WZt)g1NPb zi&ac3ay@bM+ko}hKjC?l2og9xG$99*O``N*zbTyVS1#4AdIjw%?Tg}n*9t-fcCte~hbc}DokLx4lWG>Fo`Cu3U|+>1ueHC2k=kbOF9f)#@lq8TVW^e^bS znW|vbt{n!Oyv3&F0ez_Zx|94&)3sl*{zVu4^Z6d1-Ub{J;}A_a|E*>c@Z3fSc)JHrt?op7 z{Uu(O3Xo4sH-3ej{`c|c#tq7gs?WuW0cYZ&T|Rm<`tE!?AVh+jDb9!(I4+1sk@0a> zo|i0AkyVHuCp2ah=AE;A=ZRJqS&Yp=@h}PJ_nbx<97Jh!KXePdQwX&Vm91m-c?nTU z((CUj4bgOb+Vca3gHl@Z2#XWJ?;=5>i-&H&;&F_x_ALNU3%jlbUVPt z{eAX1Uudf)H{;&s8IT8U`EMjBm_(ZjTLzCIg!zE2rA*)qszgSl39c`5^@al-sm!`V z!`}NWE$;4-Rk6F9ljkXgTCMjIkx1Sv(`E3oj%*wAB%D~h)9Bzg)8gEsJNRY5>Y9KA z%JOae6ox49RpN7Qz1VVvKX* zT)JMqPIxCP+YHNb5kLA>hZlBfVHOQ*|JEz6s!Ly7=8DkOI3l;3req*r5?<r{;mhw1L_xITcy$9{sG4D$B-hWj=Ac^N z(deScZ(}8I#39JZBJngFa~`g?A(AX>NZrb3rQ-Y!160IZM#oIi8!5zZvJ(FtC$Vnu z))I;Lb5o0#kwT(D#P=-w+b^t>nL z33)fC2YpEu%iEy))`K)O+_j4tX6-s5>+v*&3$fF+cTv8;es43^3v^iUNreD4{cQFK z%6%TDOY+V26&_AG`jw$>T}UMeLma31h>VE=j|T)mGdqly7+fgLmIV+6)yjO(WC1`2 z8*{b&{^vKrMKhwtq;}CbT9GIpaD)@Rk1+ztrCcx%a|+y_Wuf+>xi7uF!CT?h+>hLVLGk^B(zMd>=l|O#qHEp zqtwp!0v=z|yN zd@;b2^O3TRIg<5Nk;$$bQ3ugK2ycddxiCRe<{36P3_|Pd zjXIE~>^Kjj_yb^tM;kI>98C&DPori0vvx^DntGKRV$|V7Z6-Pi^OZ&kFVnQ1)lkM? z%vvdg^BYkL7L~S51Q^MjDIBQ)>i`^)*C*+yc$4EC2zzEVw8L}Y35?FoWeBAo5O-(m zuRAFAfPfZ*!zVwhfe^x&8dZS=x|J#1CIA~{S9J0c1OV>aaia+RiCR=Vc1u8yOxwvv z6b{At`4|Q%9>P&NB;xgRbI|tYw$q_vl_COu0zC6Qjw{d1<6ATAr5{u-(E!ln)jL zRgUr%wEOR+5iDonQhu^7_+MW8C=PtDz3HEWzih4~y{d-mG>qJ}O$Lce=}`#_oF%Z5 z%1vPLRJfV0Do5XlBA6PQg6RqfPCs1JCkff)?aQ0vc#9Knq0;9{5k0DUJ{lVY9PQ8R zq<{k~>8bo25>9(av^Z(!eQ5!ep$T%9PBGg(ixCW`08kbDyIfaK0I-$R>uOJiL=noJ zOA$)T^-LO-v3+!$ItF%%yb$!sDWMXdAIk+aRjernJjjJPG*i}s?2B4} z|9oU_%o#D=$0tH2)(!&_5`^2j32Rnpi?Tn)fG$thumm#`gx`|`@!J9q*BwE2ptbOD z?vO4$3MK_jwUOLa>mLzQZHkrHdckm-uf{-J;(mG34dd)F=7;WJJ-F~HG!zA@0RT(m zXeq>=S4nDCI$r(8t>@^&eN|6Jhi-qxtyWMsZn&?rEceeU(AUmn7Zz<8A?GX7I2Qf~8WCw$+go%cP z!D^aqC}5nT@EW7K@rWJ3P7C|Y51e!Of{R>mDUE0X1&eD!eSM1YmE01#1c1rHD11h+ zq`o7y&Wvql6Tw@9;xy-`?G2PMn>ShG%m|h-3iZbJqKEhP`FC{~?h0-JEG3bDm*n)t z0uRrl2?#p-x>ZNZ;+aognMfR}fCFKIuajYUm7ZJWL%8c&PgXCSBdsU`o3EEN+0Jrh z@p~V9+WgLY0=R*mK9ObDfP^cDS$;jdGI|7~6D07^{Bk8pcyj)EdfP6y!O0Vjn4XT; z#Y{2Dgpnh#WQwnwI)bqNmk|;2E7+3oN=YpEKqk9*DT)6kR=f)Gm+$8AcT%P784I&r zFyc6Nzc-YExY*9(uXqJj>{#4FKVW)+$b#es7ICVj?(9 zCnlt=^-SFB`{bjfczVdmsY8n50F-4Yl$;YtNt`4;(+`Hu;VZW3AQbP5o1Qg@SNO5Q z2Dbi<%&d0!IOM!;2aw*B2i8P1;Q^)Fh9|U^7Gc}L-8yP>bxkDFXiiJwoLP47VTo`J zaAu#gD(!V6TW&*OZoq4XKu7@}rL~o|W#Gveu2-$^-j>QbCO2MJ_?*;>vA%sOiQ3ZB zE@^cAmcq@Iy4>gK#SaJy(NDzx{>!l@-;-dZUtd7)gOTa9&0Rv{!9hUwNlpBJ{C~6K z80pwA|8WBSwvQKRP#6eMc|ErODLZ(Ds#4aW&nV1Sde_?(Pz_aSLw2 zCAbE6mlGtoySqcs;1=8=xVyVU@ZtUL{buf+xqoNX`O&BPS+(t{s=e!+Ufr$sl1y^nucBt-Cu4?EtWS=2lj2e*3N=R zI+lTl+9jLEWtOA_DH}jYh`kqAa3uk$-=E3S=+~K0Te7sMg$r3Zg_;O-^A@%~@HOGUmB_EV}w4zI>=5U}F@5CMDEsvH8pH6M# zr4_K%pA>T;ZiI9pc4@iS76`F+?4!cO!14L^;}qb~YiPov(41~RCu{Z2M2l02=`;ch zMm7-;1qPfVJt|(tb%@*+zeo_h^3&eM+E0DC9JJwat1>`1K#|T?v&I{mXH=4qj!IbY zeK3+xr-l=>MCu~PZ@$3{UUTIQHc_e1#_*;sInJk$5RADzp9qoFDdD=V(ijZLG6ghC zozmO`w?4DY`~T!##Mi3r9+GALj_W8EZAv?67_{}RJ054s!-Uo$imeB6>f+xs+j`aYL;*) z)&1iz5K1DHl|H6gC_^^LT_nhUJCuri(2#ly^%LNZfoLJ%7^_)qVs9LBSw4FFGJe-L z@j$3_T$ba|eslvBRzXkBqp7CT3t!0_JDwFW!?TQj9fo$~1}V6yy(M2~t1(cdTEbHK zrMb4I+b&VkF@>tQSvi+HQ!)vCUpgr^jkZ&vZIM{fwDhe=_QkiYW&@fBNr6xl>dciQ zQxdR8-$ww8V$d_7j9a{URo3OcxQdAE^Ad~w+?2%9>iFzf?cEHIX>6br{)_lQs^U5x z^Cx_{j>yYPqVzBm1lMt~kF+Sayyz%=H`w##oqy7URzZu16@l;ktDWJI7p>U){FJzD z*4Sc~Uc2!&jQHvsQB(b{fh-|cp@^nEFiyevPMxGMjQ$lF#p`UfueGB#brA%1j9?K^ z07fwCS!2w9vTN+orRhUP)mY1Sr?2)a?#5jRj<^}%K=g4icpojJ*8?)jC{Ss)YcUHE z+z2xe$&H;s8r&5s28IHSdqC4TWPPWgn^g9+2R&^!&u~`h&NqGP??wl9SQ#A_%nZ7C zqN^##7Zt)kEz2k+Z}|Rp(MCCTWc|x@R}#@MDQc$-!?`fU7rGn+q2X=cL0s3%EiYY9 zUJrPl2OxMd2eSn`+G;Ua^{{i?Vka<5KbXDv&OjntT zfgd&(s5T4E(CFTt8IcnFLEcQI%5bl`VeLhaE^CmN*RWEy^7(e!yJkBH`?bAuLX~&5 z(WS((X`diF@d`<5nS#BqT2tH+m7&Uy{t$#+U=yrnnK~d-HmqPWesf-e|JZ1=j9ps|oU$slH16GA!&2i08FUwU`fSGK7v9$EB>^lQ1yWxtnX4`ripX86 zK|{T*jZ$ltAm>vLX~OF^RnE&*{Z?Q_D0wV;e(4!EAK*p$loYRoZ2X=%=0KY+iaA;& zXV;%h^i~PIV5lMbXb}-N*r?25=(lCj2KuynW(jP(ds0Y&9S(K8o`%)|8udt>sPy_7 zPwj#5F8Ionwow=Fh)c!dhaO(o4yleFdq&JSmzC5!sB-2LU-07HI@=!oLyto%pHPDI zNg~ZBK&W3+*`JV_3Y0!viTxfM<@eaoX)oHYnCA9eA6lrCZ7-`1_!iW(y)Tfmg#4s+ z8#-Qk?--WhB!+%Y``~r%LJS~WVI`V3DU&pKF%&9weOI*Q?u0VxAuf1XPPBeG=*_fa z$HDZvMk_IHzn=<)vjF?xN zlqW2;%8cQ)8GAOvxmh)xj z_5b1(s?GoO%3Mp*@O9ivLs9og`Nft5{)lW$Pg`%-^kTbRfz^cUR?7Yl$8M|no$R}b z0T&O^7qQuJBJO{OfZz|)`#A4vG13LaE(u`(o`OX98|9xzl$1v|8M)I2>$F6WiO0fv z;vcXRna7>7-e96rUazW}df3YdK$QM*Dx{33 zL)Ra(+0xS7`uo(5*oL zH|$6pXkWMPWYmbL={wGDop5`Se<>8?0Oq}un~WORz6jAI8c^A9BPJ+YK+F;H!!!4U)&v}^(V(Q>%_eszPtGrUa5_tDr^ z7Ie1J_bwe?zBrDxHTOqyV`hkC!O}bIO z06&TXu4pP8+}=t622b?w+&f7MID3#wUYB8agJ@ng)P4^#LqfDj);>i<0;QIq!MFfP ztW&KDc0cK&^KIm9cD2HTMPvJNk*8?@Yb;Em6OPGmbZyeY-&hPW=I?n2yTOO|yrae` z!#xl^xiN)gWc$jo=$QNLy zI7Q3tcrUH7KIx)5wxIw0G`+rXCqdrFH@WXp)=1|1J`AJ14~`C`)#rq=f*GJeykLLM zBhwRWP}07y(Ry1HUV(`P$|ikxci}35K0UN)OjWZv=z%j&Hof&*<7m6iCo1gw#?}2` z#ar8XA0NA7z34YaJgu4ZGj5XPAeJ){ZkyP0^~#}!wQevHkapI07)np6Mn*4-?cI+k zaTrFfAl=6y0{LZ=_m(~;8UrwO9^rCcthX+y8HulPaKs;ku3K>K*DyEpv)#QpqK~CQ z*ea;Lr@%28W;5>Zj}RVlB%MeytvY0*8QFq$I&%omm~KLgIKj%i<)od~)yG-U194kY z8hzw1x6*iCldLkFH`*V@ZHp6qRL{-XBL#wmp{#{d{~X4b@Co(*H|Z5K0Yc=K|dd;!e+Z4Ey=~>b7&Q`DJ>#d#p4#^N^nkR zrQsRz^@-msd7OX0!TO(>`Ovn8U7yjTTUaA?r832s<6Yx(Uypr)b-s(}8@K3hf{AU> zetkqT2Gx%FSZwH3`T-QGWd56N$XEP!3e%TKt9`J%_if_im%~**E5wc)n%9#*b2{ZY zZX?5($Lx0@h=D(VMw{Vi92KbPfBx+MY1PIPU%YbW+P=Jo-EU?p=djGrPHPmvE1MFZ zQ5wklbwb00PjDi*gq1jTN@&bCql(D(!a}er3p~o*%ks`TR{%WhX2iGD`^!mU+jZ`^ z=dp;Coq^4^DVHF%owqX@?_a2f^*;W3c{?LEikJ(661(g46iACsc9&MB)w}1_22xBq zCi)^IgWJJ!4L|R;D!f%Tv9EPn2+lSQoW=tfp7^5?Fu~HxOrN-QTiXFSR1*Y>U!*s> zI6Dgt`5?gb-L6FhsMIxdxR!>K&ruexpX-Ru7d@8N2^;U9dJ&idelZTvlG61d(_)5; zWDSrDD;}A&}#aFOp6;?Qy6SBJM3Y zV)IZ>qi`-L+~}Uyt>S#w1Ca{d2!Dt4z|M*PRs?*2Y~h0Fi#q%)-Yk;Q${C2F5*qe6 zFOPCt*+F+M!awhY>T{EtDPatPwT#*Kb4&x#ra^z)TY|*mDe@x^B8%9);X5c!JpWs| zmMre4g$=`x@R{y2E^ei8){hY@>RPNn^?nSla!GvTRB;{UmTN+a$~}d2GyD^(@?>V; zgie6{jl-F8;jHibH%W&S*-U(_Dru~vl+^U78jg>Not0A#Z{2+kts`yrN_qniYwVYT zJ{;y`snF&HB3Tns3hbZW-rc4u9+is2WIf$;vv|)4TOtT7ogG2W@_+He&h;vyp6kdb zP(bB0eISX=G&J~ck8(`xlD~+qw;{kA6eu~ZOxs(k+QLIawTtizwc1m zx^`ci(R}W!Hn#76Y}pG+VRu2M!_sO05{@zPYgpzt!Jztdr0vIK?Dpm}aS@h;F8g)4 zNY(r+@+fy+?W#u^`I;cw?&M8=t9c+aq%?E z6fWRVZm3JjB2+{UcDmS%X2*(Yxek3ubNYguI+JZGYW9Ii;&g2r4Brr~ZG+wKAcoOXFQ+#l77Su|Bt`&zBW_ zk-bM7)njPZwFK3hX2T7pw_?WyO0c>HX{Et=`|&by3o?ZC^`D@=hUmJ80y*_`e_~<= z`$1;8^-HBO@N_Ou!U!e{pO1(71*p*i15qy;`3pA^o$q#r7PoHgvXc!jdvsXfL*qPIW3xCAGG;A1TF+Wm$hJ*2qr6!5Jw1aGj?kuFAAaOG_a&R8s1r zLe;BXaYS6BsU)_7y&}Wt(fR4M<#92Ud)(pjaO|P)@%ifUo3Xti(3Im&6oD`_td^H# zR}SliH;ajpzor(cr%_wD@cHiO^5*oG#vJJIZtZB+_U(E_a#&B>?nDX)p0D+#jAl|X zneCXF*CIqFJ_STQuHgK(IB}wMT@D%4QazED;H1;-ZAGN)Zq<-2A;f0M5gF7LLltT!b9ZN17WAF5L%!Nud*vDsErz-+p%lVv@-)2HRpg)KCer2sG9_ww$e zoiS?-0`t=?eV#C@|^Qq zmANg{NlttWT@(&i{YB$&DkS;v`$Zr#$m$qp{QCP5|=XKAI6ubk^ zu8>{qyqsAi5A-@S&$P~tvaYvXCZ3U9s=S;VgAY5t>To~Y=WGp^-p2;nMz$T>V&d%% zy{jbU@v;jf>u(K=r0W^2{}g<4t$D8Q_-f_EWA@E$vnzg_Wog|HcM+ zgf?p-6_=8efzc5=A5^M+|q6Eyk2|M0n1x z0!j<67Gy#+$Q$EAdi<}BMc7(o6M{jm7#q@MK)Aur`d>XeY%wFk%uvlp|NTQHR5NIY zH|AKl@``T=s8Sc0_a{PZ_*>d{LPNe#|93Mqw(-=(u9eww<<7vq4A0ftaio+=^5~PN z=y*iCI-N#6&&ABzf6jr_sv77_=-Qnnx~;{*QC5A zBS|Tiz9XI_B5YM-I$k^JhmjC7afWiNQ2{0oC@`8Aj$-}pZ2C<)_G1to(AeN5G%)S;k_s&Fs2t&{mc4pf+?WY`!h zixu0JJ!xiiW7b>c0c+fKjiDjLRzblx8(r~P@XL!yr3XOY=gY|f#pRjJ=(ps-3xv;&Z7Df#`x+dgAmi1DO(gwSc^(T75(cEk;8! zc7aeWy9dnKw);uE7k&?zl?e^AEin?=1xXjdTLu_DX}sV3dF#LFwHHL=1=N%i%8El% zMQ8`nxaZrLbECUQXUfL^zVUFb9#) znGnz4dAuqijx{OEJ0hJvvaUvg3N;4YQx9LXZvV_VQg@tid%Ao~S#hlJ%o$28E!f=> zOy8o)M;Sc*J*;oO#U3?Qv z_9rsPmzp)`~ZFD$U>#y-5c)xMVQB2q863!vpA-h1eg*!&IhBt+GfhXV$fn`HB!5`#^ zu^^omF7lIuN`3Fx$uMhWryW#VYi1YT)-zUB^h~l%`jdNRpO&jDXpfp^ww2(|<=raI zb>dO6Xu;F`xrRt#GDS;KIo+0ry=m%hW>nLN4i0S2E2qp6Uudm3hM8_6uraX+4mX0T z?a@L=M|~2S$9#i2b3Z5h&!YT4o^&M3k-)P8_&nHs>(_J(GQ=mU^+i;->ps$~)S>3q z+c0tRmX^cfCs~2ozlr6{;+9xCEy?O!lK~^0zR845dQdmQX9p z<(sH`+$R?ktyt9I_}f?_3}4(rJiaFI&W%BB#%Q@(J!WuHFaXHP47>7r9!@+% zevc{Rk0Z^8{ZN}9_|Uaz=}owd>=~9~?-T2N1>UHW^j1BrdB){Iipku=_O~BL7LB@w z71NTwDuNL}Kst>jQ}bjLlK=tiCdJJ^$TFOIVz%45zG$OM%pzS5P5=HwjHg^Uz-F?; zD(0H@6}Ov*8;NI}0Er4_s261(N!%}2fUQ6#+H`QxFzAG%ku}iC7S}O@8+QvP6hnZ; z3mbQdLagjYGbn=4Y*4`oQ4G8vL^j|NK$aBF<6DXAN&LUR2mUWWT5O&amRRzCAO9NK z1b%;obq8$6ifK-1=qX187j!omLobj-MiGoxJH0X${BEFFRGpiA`aS~PO~M7;nZodN zby530r;XnFh0y^Pl`KfPn3JzWjMwT&$6UyTpPEq#XYFkZC<%vjc`8=W3ECnQux=rRH6;#C~AYjok?;bT5S>LgPO#gp-qdc5WqD!JE;;g1uc{REW# z6I_%jG|<>zVz@CEr~BKc=4FfxdmEe;N{oXjvxEI38wll_-|8ZP5yoTT1*8t!D1rb- z1dR1D-h9cot53^#;s3BIYM+wskJm58f6?jyklKgk9au!stuVvVC3J{aEKeUXb-B0Dv#CvHbKpG; z2(W{~RM5`D3CHF7N6QA$ z&Of;qTBDeZEPoB_@S7{u87nz03J4rVJyIxop}jEfqqMhkXq9#wZgT^UU|&8&Qs0d7 zh;@gXf$YS*w}nF#{X4FFMfC1kHjXG8{tAZBzFegq4$Vmj)*MDEL>oS#j~3D;dfM}h zZ3v7j!7yqvj7SooX@g>@jqgs0{NN~G(m4Nu#}_ta)GQvw_E;)lLs*!y1m8%S)iDK{ zFNyy;?j1+@jzjMSREuUB^(YbA>$a7?A>UgdmnCSDMi9bwE5JcO?$i6(6TS#nXH>J* z_~B+`x=cj(lsHH}m)S4;jUjxe!UjC#xCyDONG&ZrAsLL-G& zeW*r#pMZXu@DLxy)kHVIk7Ob2=Jmp zRQ>q4%Z<4PC8eShL+f<>_3H!ajmr$8W-^qeyp&|Gp^HDba#A>Xn0CA+9^C1^LN* z)!|$XxAZ(j9}7g#8QXKYtOaqotz-Hel`r)Am}Ow8I3p1--=inw?5rcHvD+hRu)_-N zN)7=H)^lyi0Y!j%PEq-3qw2|FMqN zNl(b-OA)-?SO>8+&^-K?ND_Efjp!&9F!$mkcJ+F}8Q6sBjBP5z;&Pw}#%LTtp^S1$ ze4mj~YrP&?aibj;LQS~Q-QCMCIBU)#v6`BWsNw1ougmpP^Z1DKlhNWzX>KX=nmQTo z+7OD;ai)GBohSa7_H`TXuoAi|LlC|j8T@V}1&fsEtmws)C0F>Fy1rTBy`HaVJS(ye z4H{11o`*_1kp-=b$q+Z5eU|bm^=&0^LT2+Gm_ibNMx5tTtlj(RK9^tGKA~r}<>iMa z*t$L$jOX4~*L0gFb}fZO!?KyQTr3p9*R@t~yFcm@J$RB{+j`w~?ZCc5>CCSfV>IRE z(bIjw2d=dh*jb4S5e1Ad*ys5NY*mVQ1UmUaPIZ>>eL+_VrS&h*>GeDqLL4!Jq4nT4C_0b-jvm5GKTQ9@>^Bmj2Ml>*$9fcdxS3xwsYFXQI zUD{cLU%9(3W(=~^VY$A8Ev}jvmo%(=Dc)adsaSxu z*|863h=;`I7+0&^1V3&{vBwq5qohof_tAUm`=l_7qOh`PsZm;E0IZHphzl;kOAzDg zW~Z8ubqZ{vw^w%U2zRyj=Uo@zHpwk3z1y;&1&#LDo+?j1>%e4%l>KZgeKhcChx37$Y9+*@V9hELi zPM|{AcEic#Tq)-)Q8w~>mj%y91OcB>4*f0*Qbbl_n6mDB$v~WBkMBLr#0eYDz);7; zB2`RnB?_CVEU0LOzFEk$z$&x$_&~AQAn>>oe!c+U|A_OwstMxY->W0`cj%0A$}WeS z_!yN~`$9h&-TZIuY>YC#i=jygAmkzA9rFfyk$WO7hi87ssBoS zO^r1^oS@C8REUd=C?dh;9-(hZTTxpd5ODIzTWE_Q93QF7OcD0F?p_>jBa{X7EOY=M zu8m;c+Y!-(N}J1ceJTitw(~aBc-v~m-cy|__u@+yTWdqM5U*Ywzan?-*Y!V^En5}Z z-WLsh3Gsn%Fxw_2zmG1evA7(YdhhVWIQtie$@!9A>FeUYOfc*;D$ZWXa_FjEpPOLB z2r60YNr3iE=Rw1W<_y=4j4vLujW&R>)enz_POuM-S?GPL(7RtHBPBr5_@~ZSQ;5*x zYLM^j@e6TMK6nw=;0|9e-=$B}C=cC#Auco^_xb+xa(k?n_;DFBg3$JZ>uoOf_qxPT zzNEF@5gi@AbcF3b`#*?YeXm>XMrFN&;|4PZ#?|cC_djfs-k@y5#IOE&zdUdo5fzG! zn>{(!`~zmP0~{PZaGI&>^q!UnonJFF$(1#5GL?4zazpCp;=|PuzN>2}!kxxbsp*0- zVMx{QJd&_1o#h>KI9bdLtZcSt^B6il(bF)87C zapIJbi#z#lc0-K8ASTfa*L z4Cjce8PN;raH)qIhilJ{?cf=yhuuP~;2u_A)FnE2fRhH4uGJUE#x}m4Rv&gx{Euo;)MW(jhxruZ(?EITX^D(t!zJ2Rtk z0V;Lc?iVvihdN~2VD1=cWpwkJBj|KT%e!#GOrgDCZ!CVM``{IBse!<{lV}9A8)gj_ z%qM1U$G^I^^OdK%QFWE%P89^PeF#H4ZKF{qfbr|DMYAP!qJ13Y(EYP*@RquGcmMl} zy5hRJyw$Iz;lMW+*_0pnrP)A`>vl+Az-~a33w5dfrs@%g3SGIrJIHp&{=oI&tLOlaMlRnt z5cx-|#@O6ckOWi|k2vAXsvwLT_vbcyRS1u(SLmVq&OQg|8E*V`;ZcBV$*4 z;{sMcTMY}>qCz9?>-g=0xmys-KYz<&$#p19naL8T@c4Nf#>|j}LJ|B>9d8M2Lhb8Z zZi2c08puVF#cplCn6Mr`%@wasemHsk#Y~%oL=ikx&2CBd4vT$<4dx`6kTnkCj^hyF zv5<;kVaf)@_LwZ-)yMcbRSw!`w8vv*4cANMffRH%sTnl352IJ7_7($>SzO`RZ=y=5 z;JPN$Fg8dtIl+~6%gXMffb{5$;OngQu<-WB0S?|YP=c}5lk8RS)lgivGI(}lHFO2-ugfS6l|-}$>f~jg4JTY z3ZMC7@2|w4M=}#ZmQ_FR8e#76mBuv%3`cg%G9w)u34f-XeLlm;}}mA zYRQ8ju-r3x1I-{uVyNKorqZ~AVj5t?Dye>>#+Pr)ofbqcYZO^J+_- zgNC#JqV>lGP(;iDzam(r=Fyo4Ci%L1$*4r--3J1)pSB(DFC#Rv!b;GMc}izksnyLO zsAxyf<61J4W2L@`iYbY(r9=(9h`TYL@vMr@qe}Zx!F?*}+uDaX)c(G~`zSrQ1D|(Z zrWW((G#A+A&@eCg7}nQ4XvlaH0l{crNrnAhoQ8jn2}xA~cFe%p_f zt>I!4TeOw*E|xN$s&Gjw>{LI6b{r^LEi%yYoqk;^`E)nE#uQ#=3wJy8V{O{>kBc>+ zML97cy!$tBAoW4YpVIs4)eKC4+(LH2BbHM}mIO@^EM09p)RYXJVI}RqeLzDdBaL4Z z2K_ch)Ordm?RV!6hyCaoGz6a%K!D$sBYam5l!YpwNGu-|Z_$|Ix!X5W)2%7<3)id{ z8Wz?6lHsAmn=v+$B~8ogNBwT@Gr&jF_l!DQTf?vDe(!CL1|sLf9?|PI4tYyxaE%^O5psTGlv_546D!|+Xn;w?CAZTmQ$SojG*Tv)Awwikdj)X&G(T& z@3c1mH?1Ski>jpgncYajqZNM&Ra~oGRIlx11K57QBunD0N~UgDwvU{HmRFaO^O0ghPTm~Oh(3O9N4F-G0KpmI1lRr{fFB1M zka}xwV7miZ-L|}Rh|kUfo^CA@?fg-W;q+10=kJ@3rjFT2r+@7jq}2~YT9Dg>bLh$f zX<8EK?S?NYc7lghdtx5`X$N6~ipa;L5{-&0jv-GruG?etG|#qUf!;16?YNeHY{_0Yo(H}^?f#b@Tz z%i@6RZ0yxiK?%OG^e4v@Og^qRUi?GtxGnIbGy;X_?XI-+uszqYl!uM7Y9vro@V=3S z5fS`Rd8Zy-RDLohJ$UmmsyQxUvVg!xFCA0Yn367ukg^avy|b897g1S9Qiu+ZUH>~z z<`WB?Ye8ECrkXJ$odhV}XkhQ0PHH|5^Sy+WkqJdT!j4>4g!@}J@QGp(Zws=*%Xu~C zm{=B6>1C+|A-kcz{014M2-(B?ujd3%pV&B)4MpJTlD~rB5h2+*ll?+r|M`n$`DnsM zwD$9=jZe+?gXG5n-wl38<>;UbS364?9pns#{|>1kkYf1#aPQG~wxso8Im(dpgUCqg zp>H%}ZHK0~=@Hudl)PqvyukP{OcDaCg1b7 z;A)T7H-m%34FXFY9WWsa|Mt8l#Tit(3-@J{x0zg*`oY1Dol|ns2`Wy_{9?l$RIb}Y z;!s{To02&)&D#jpn>B@sb-`!Om{UHVRniXL7^GPSyBu~%FqSbWV#))nzx?vG{As;S zZ73_9)Y~bk^@UG49ju~|AkO$ZtwOa3@%Vb#sQ%!!vhTUYxnmCWI2V5TAlXRia%M#$ z{mqs!r=W(yNq(x&ye}becHPwas$pc|bIsQImLZ-?2ZQv84gq$)%Ne-0f@42;J5SzQ zT{+IxMQby^mM8s-aw7I?I!hvzVStXf13Cg4PGgTCO@cicD@o`v#V&%wL z-V67EK*A#8%&Chbhvm9@+gZ%Gh_OcVAmV}2x~#94<3POY0}L8)NBD6&7#A|2dt)KB zTwW=aW_q2wgk58DvGz^T8F4{*Nv!lr}W>J|tp-@IF*Za{0|zI1YDm3V8Db&12+Nqr0cawC37EM?LRf%A6~J&h#W*8rrX(GoHOt=?{m30?I*<5%$f5v z`x4RMjC8z_Cm~j#aP`lZc|D();*-_7l4Df3BI{M0gQycAjF zsXMqnw%)hzW;Wwa7SW;=E1gqj+uby?-VgNO?Yi|)5DW$Cl2$^hGSt{3YZ5TjQFSyF zzDYGuEY8J)rR(^fCC4QeD+DIA6t*hj3iYFHsOCwvhY^(Mb)$bKjutW}GLBYw`5Oc# zGRY^i)eX$rjx^;{<#0v#P3ck3d?qApd@=L>tfi*tZ;9Yw2Rn~%&Jg* z_WMat_x0``AT^OxSDISg&jx(&tx#N`RbVEsaZrGcmQJsfz^a&*g}Y~l-sct+fjWkT zi_>_IR|3UY0QV`FX}{o9#6VvUXnVWZ!?u!7o@dc799dr0C!T6$5x;wU>9n)7d8_@o8S$w~~`c^wMg<-TK7Bhc*PjcBX;Rx8<_R^qE z0D-gn?ANnC2A^=BauRW8aK9jFBY7f$Vf|Jhn_(OgcZdfCV!TN2h0pv}pqk+vQU2Az z^FK7I|DkdI4~^-+HGnC`M$FeubcWTEI+w-}>Q&HA=Agp4x<`4ACIS9pxx|V`*6*bS zwnc}dJfbjz2$Xchd35qOoJnUSG)8U(9ky6x?#H~N=hjqJjjcu#g{2h_TAE9<9-Z^% z$~^J%+U0zuhpc(0bWME*a+i2>nanwSp6Z-q9BEmnazm0SBY=I1WRR7iZP`o=eZQo* z#Tem!>S;KQb}*m8nMoj-_Q+x0Y`G&>neSU;Lj12i-+He=sf=N5aWbJ_ zif1ACrhD~!M1q8LueT6gzxI{-r^Lc>ncZ6HY4X_J&&5Zef6e>TU#%TK;7N5wPo32% zi$_cI>#fHjQv%&^i$Pb?-u7u5D}OgwOB?IGjbch|y+5)$J6n!#1=Lyp(q;Vn@&<15 z5{g90QnpsaemQ<}rem@4(?P(uVgjSA6a&RzJzw**;3#f=So(d6muQu64@H>R|&{ z;A^^fJ@J}IcHg|@gpQld1w(Z}^)rVcE|*xtt~YVswFq!~%pv%L>@=P8`of!Vg}*$j zmj>SC$d%zZmxm}JP+{BHJw$#{fIfL{ZtC`9Ky7J2@Q(38jojn)4S*5^S+cDT`$TRq?elQBwamCB~Zh%=8wg1(wU7 z`@B(=nY#d`sKdR1mr?;yQ2Ra_8%5fmfifw)hLDRIX2^W$;4I3vJw*6*s6Q z`_Ch>AL^Z;Wqc(me&HDL67v6C6;U4X${fn~)@}E@5Nbd)%6A$Ty-L zppK{DtEklmvXVTdR8u5BIU{etP|#<}kcT*Lb{AdhutRuOk# zEU*kbGdpkRXAOazjWT|9dDurvVu`jxyK-v9d|Ze|EbMOV-6d+yMqsWhs&V|0I)t-eBKbcJV50iw89CjW_@=M=7ETHqt{l|+K z?A-tSpcRsb?LRWBf6jfEo3Q>l_nqN;^4EkUm8za5=yS!df5q2YJX2_`qmYfr4`sBV z^oT#LVv+KLfZzI3oZ1^|Gd5mv?a-^iKf$oE0ipVhMg473kNBQ#TsmuTZRb@@=jHIR zvhk_!;=HOPDqPiI=W_>f`{Q9GssMgG|G0(S&071+w|UUaNkY?t9>8CE8* zyINJfJOW@XB;15Fx80oI)_vY^+%Z#j0{ilk%|6A_2dq*a9SkB=ePgB3eWfa|P?}?d z7-2`RBV_oQ|8)wvV>s6WA0x|R@%Z(?hJZF4LFI2Y+#g9Vkr5ueSo(06j(Z++93r00 z5BnS}TAM@Yf52c5ml>bFc1#%~0m z09Tc@5BSB_!d}Bnf8<`c6gdx$yABOo{x(nqj&sj}xd^$U!mE4!tpy>y+8Et02OvlT zXP$ynSV!lE1qxe+YLn4p9NXXin9X`=ue*;_VR7Rw!DmGjrif#*$!?3wn0{tCKUiziN*&8(F80o$TjYsD zxcg3oe*W$<@#~$^k?O^g;Eh4HBv2DQ&O0Z_Mc5FHh^`k#o*3!FznkP!n^54fI?!SW z_rxFO<2+Y$SF>5|qZ31P*F{J0g_ii1@ zyLBXFQc06bfTNjln^o(gqDXe*zv!(Ai zu%~G1)055*6|RP>gqII=Lp-6zt0aV3w~7;R$>yEOZ-~ye301gWAF@8=%r}dQx^;^j zMBeoLi5=#2)^CQj=ps9`6 zaY;YgJAIf4Hr)A&Ou;*?Ir5HSW9Fw59(f0uzJpAsA}CYOd~5_6h16X3PkcB!Ix|-V z7)iJ$%C0KxaI`#lHw|_d2Mr{5Lld|*_z$tcK&+b24t7&;--{!!mk>h{nWJbTnb3hX z1lcrqn7CPwp^5ETOUz~gGMi${4@T)w)NYX?DXd9rw4ZY$PqPhU4CaBg#m@aWMkVKj zBY%Q=kXB8UB}9V27CnFBZCQ6LPm|4mC6{?-$27jGZw8WbJ_SHK`m|791AcQK{ z65uF1_nydi;N^Af{!02HD@r=De-cx>i{a5>f@@IpkuDeRJHfZ&O6@Qb*Q2|MN`JOE zX~U@&xcI23jEe@oHd#nDB~ws_r71|UW^tTum5lah*6twsY6;$lmkhnni2}|)gm|A! z3m9iebYQbb9w);K&+8$|U1y!dzc9%xtN~78F3vlFaNg5xJ7*zZ|8Rkouu+ks=~U(A z;+}%QL`YES{Fb~MEaw#nf%@j4@b#dczq+`F&;NpLN8@eYhMrAsY@LkFUgQb!@)tk6 zjgs&NFFf=F^;`#s!=wn=mnCBG_vK)GR+vpt=G)vlT7^I8CTw}uZ{n!foJ$2H9{UjB zUZ%d|+#xF0--K7;-i1ema$pSfx!CuEGw`3f=_HJ2dHQ+#f_fAjYKAxtFf%N7F%>`Q zq=p5e6(!4@Z*;3Z$Q&V8xIrD1Fz}@u9?w)Sff!Z9{Xg@K2K9iZKk0&cO4UKvm^~m_ z6RoU+hT(~n`U#S{Z;nE%^|b)k@~ySQJXZ$hQJ$jP^oMUjlz24G=gnl(NDkdyW>Q4c zvq&PtNuxeP8_)TK!njyLd)74`u^cY=)f_fpx#=;+&logcCvPZwIAEw!Svk1tmOZ2$ z+g70!Q;H_Mm>_HBq`PYyHd(E>&rz*1toxSYt)u2VR*WqaOv(t1izxw~sL#VuYlQpH z2Zo>MI@wRaTd4~^yIK!sp0R>Kl$3_0%qWjU#fj*m#=7v)cFD&-TlBi4Uopb}QnsiF zK}MsLb7$^f72b0mF?~!khi>0D^zR~y*6khF=l^lX_a*PvR#IhVy(*7QO)RWZs6Sr1 zW=UdJ>$7p-$W{umPb~m6=$!k4!cTiV(eB{YI4jE7I%1_sF(1{dS*^hlJ!2qK9(ZUP zn;7>gCR(kskDTqWxD)2v@~Yl?kvJ*=L2BQ+hbCr2SgwjYb2ZIBj7$gh@UQkNGygBP z-U2AjrfC~Zf(KY!gS)%CySux)J8Wt7Tn$4;qW}~`oQvzl|fGmQ-a01SGh&$`m6d&#^pH~(=`TXI~t7RwtaJ#<4L{uP( zyn{^$PEV;;|8}VQ4*<8o;GsOr>6eTK$DibD&mzoH8gDFJxm>g(Zzc%mms@U6H4uMP zvyk2^<(~x^ZfOk+|2klXq@yJYAwtS6_gofeGg!zR_wj@b3@-Vc!&j3}oAb`Q5>jT< zpy~S-f(!obbfp19fhTrw666Gf$#DU~|17ej{&1Ahc$4jt{gRz@QVQXKl$n(YW@#QZ zb+JSf{N>2I54moOfrwpKH_BlKGM@ZQS;<-QX*^z5f-gIn5#dOMAa&USu{3=pS`xZg z8|==-H!IZ$`9$sB){$MC#w@bk;)(B>VZ|o-gkQG;=&gm%Fsv4HdtJO;Q8f$cSf?sumz+!p(M&!-HhHW$50t4q$H_`&%oXt1^QzP2$289#`tfMeXCmZ2Loc8ieT7d6@QGQc z{t_1vbo#-LU=_xO9aJLB(!VLkC08GGcm%<3%d%w^FKx|LzU0P}{npIj3bTmv7u@2P z1ah(bwhX$6!UjKjE_^6f8zp=~GMY$+jp#H8&UjbmZLZIy^%YmXX@Cp3jJk8T8^}HW z208AyC;lwSvu!X_VUHy}5z@E2N&~q(fX4axy9p2+$awEP0S**->>8jg-HRydIb7`^ z@O`Akul#S+iUY^a`I<1+;IJCj14$oNvC6n~8zDz(xrq4ek{K)h#}UATeEPK&;Q9Ps zi)qUdH7#qI(^bu|Z33i@$}+*s*RnHDXv1U&xhm4EZUGD^R3(XK4w|s^&B0+8Li!BW zNQ4a>>(DghnV{8Z+i#vXqD%0R>SV;<77dF^OVk4C?e+BzU?tbY0;hDpB#;yCbBrUm z7Gsc{yFpoP@68%M?1<(=zm3*Y>M8sJ^i|~l-qx+L-kK_W;s^Jh7FGO@<&%m1zm`u~ zBWT!fjO@u@DZWtyWg~T4k=7onrs(MDV@JrgDu*@hyo26ya8gtgPjN4oVk- z5=_|oTGv*B7I{QIP-TI}H;<6(jmt zWE4iJ|IT0~PlHa~1KIk7c@XXm;}@k|rvbST_t)A1lA02k*&$Yl_CBOg61RAW7UqFb z7!=0I(6SQ-l&(mnl`LlL1O4Stu0h6s4N{^uw*RKN`8QyD&I&)F;19ZUVIdiwH;SyR zG*rm#oEMIqO$`=;Usjs*Sa3mOL(12Cshv43SuNVB8VJ*vHzA6)Vfa8*sO}<3ZWIPB zc`IaU3rMu3N6%wXW3l8p%M6p^Irc4AxlCamRq5jiAfqs)re!Ua%~Vq(1v!q`kZ`WE zQb1&ri7f>fV8KNKQD7kyoN-*nc>H+Sr;m0xaxkh&LF2nlSZ{0eou*UVRQWkfBm!N^ z{&FBJptl_g7Z-ZVNl+*a!XIp`Hr!qJga=h!`gD7hCZ+FlT5rjKy0hW?f*AX|G@J^l)_d ze5nSm7mqe0AjC|%C$ne2-}Cr=%uXVFw6yy?Jl@W}DL>ct5GT01CtqCf^AzLPUfN6z zEzk}k_i$kxdNL0esz<%Bb$Z0n+0X37#MtA{0{2Xxbssj0?Ymn0x<4>L&W{O2v1#GB)(d3i0@cOTX_OTv0c<05ZHF$^DXVosp;;+HSm>?j^-|Fa z41}$_YPPf_f{I(5{KoO-<<^9-w+Z$tB_1J1bd6|N-x}ZGDD9?}8>OgwHEsDdkr0BP zfwBtJ+Z<}HVPD4k($=gEjL*8*eqpL10*AAZfMBItxLl;?x8%=QC-?YLf6ps$L-)8}G{}8OmdSNr?8Sw5}&C zD7ma|m;bV9*w05>ljHJ2WRf4zQQsHKL&WF>J>$OhW`D46Un!~5v&~1d}1yaFw31;UZfqkn%y#cWe@uG}E zQYfgDSwlb{keU3zt6P~_%p!kHW3+WhtV7p#$x`nLsfhPcPFaw4Yi#_6!yoqmCs4Qg ztn}0<6uaaKEIiQjrPM?9a*V|E0B%R**`K|WC~<7SDZl~b)UbTUWq%gqs_wZZIeJn# zSl#6i9g^ER3jIO<09&;bkFcq=C!=u44TWLK1}C3FUgL?1^0KDIQR=6~gIO)cQ{^!oicAdBVI|$ng!QGd$X^R@cpi%~e2$aZJlY*{d0)bD7l&|}#tblx zwLyr9FEnSD*ZVvI{RDTiLGy}?xE_-?U)uM*##6TC3Q@Jvd!n2kyb8XEMUY9`*2If& zHf`nJo@*sz8_uqa)odFY*&grdm=+eKy9BToDW;9(N~6MOXQjQkJ>-`8(u$&2za`0K02OGnqwd*v>k-XAB*Q=}9+0d7(O1q7BpHJbw==OefbfYP^1shED1HU|E z8uStaJxR?;UXqv~+ahy?^TDJC>4)=iK5({7{`Li&JJ*c=W=l47#`>QRP`&H~8|TXI zDX3n4f{zpU@;}r+#Eoh|qI4>_Y@S>IIU&dbG$nZ}`Im&uJT1f0sc1O$|01e>9JuQP z?Tf6IOuCm9!6A5uSi8Bd$6iQONql@SrpkzNn!64IE+Z%%h8ozB8(D+2b+>!?jG4-A z)04bcpK|(jBQ=4v?HBIxBi{yFF+mFE$9{tqXao4eT4TuW)i1hj$mZO~(HRB8@ETIy z7!vvT=dQFxwu=zi-sgJt%(RV(=yIF)zEa@tU6{(mKRSI;0wY2e@Mv`ex-C=K3Rn9V zjd~#%e6R3|aPBPjI@EtSy+A^hTJpA?a=|F)6uJ zO9GGfOQB~}W*hY+a*B3fR{Q7t{_53(maV_>l6HDFO)K2MR?4D~XeF~>7bL|6)AMSF zWG#=cFbYbBQgop+-_E(qh+WA;6;4>DOer7m{xBM9ofTx8o0ukCNZQ+nhj90?w@n1- z3jXLh+{Xn*i=mjZmPpvKFZ5QL?dQJ`bCrHIORLm-@%CHodG+d9+B}(BX-Yh>LLMI= zeV&cgB^t%nH04=Z$BrOP&Zjvf;UGzHWwRJ|R@7Q5pH?C^U*9B{aY|5c0xf&XrB=g- z3|W`b{i$cl!bj+6Ip(nf97%eh-TB*&=l+4ay8D0%c(8}#fq(c9L}BJ+P8Q7ihVqZ~ z@DrU-0?#sZ?N^5WwH|^uU`*s?IGAw=*I|f)PR-hBSHA^cJVR*Z*%BgC#yZ(F3jn=C z=X@N8gfkl?7vdv3W9#|$xo`NK_tWztHQvNAJUb*f$vxv~lUCFnKY-~g16!f|ACD2o zEfNr7db{oA>h^rlwKo@ z`E{*LyS_P5cMg{CTXXqF_w&}sG0dM>h!Y}l(jAw$IGqs@3>h=5Ehc_c8%=xnbSHf= z_7ho6v=t>ZDnkt5FHs+?PDOlQ%XOcj4)ZCEHyQ5fccd~rmcmd3wnq%!_jdXRD1V?O z%}&rj?}FPp2MVs|R;TA!x%=Z#*L?yx@evOx<7n*+mlp}|c2bc@1j(kGdh<){iv6U2 zdKGO_I&5g`6QmNIfE|bBC~YjBBPf2CXRO(^u{!^xNW-o4V(JZ6U=TA`<=y9yK&s77 zLy8WkXm^EG9ERMM5@Lo}N(lK+?8N+Uk&!ZojEh9R_Mz{dR=Z zEP{v>x^!1+u`qCF)^nD8&?CEuJ~|%Ux9S6Sa1Bpx+xqz+J03zyyBpgFR9%eG7zEM! z2)tvny&hTRQD)@P14!FzcSK2DAdMsj0CY=Rm=Q?gIFn>Tz)LiYj9lC*4!kb1yCi7E z=DAV+;%P!MM`z&K=8#fse~KfY(XfXl5#ym09At(!S=6DssH)O1J$Ps497XX9g(%C? zO6bxhvG!7j18&mY5r8MR+zVTv+?oTk6>gI0k%W@F&q1WRr`Ube*v*fKtq?7l$2BSO zX6gm4g|@gT`$S2F?=I@f0yJm7d$8*C=Hh(e6t0McF&yDB(Z1~c-DF@C4PPr^Ig2iI z#1I#}DMB#;)oaSnsI`tJ8=Cy!u_0c4G;mBRw6I`6*zSN?cfq!Y8WaU;iUm7D+6{`M zi6b6TToXxmZRhV>Usl0_oeb`~^uaJkrdw1rAk2Zex)>P4P%JnnOuU45= z#hk5?F5kn5L`}Hnn}v}d>m6!*QL8t!C{Mw~1`HvJys~pQ&)&J?^z@)?GgoO*tbWe8 zpshG}v@JIsjvY5&Kd`ka5Y%K#9*ftAiw$C7!|JkgPv54rx)>QJdsbnqOjBzoyXEuZ z$??Yb{pO@gTh=PkatXes>31kyE*V0wcsbH3H9@|1gFGvAf*Z6+8&42X``nT7V@EB(##&TCC`(63 zp(R%IH7dFsGV{&JPLN6ilGD7*FBkNsWh@6**bj2@Q@`aB_T5@6vmY5!A*Vu?98*V!= zfz9Xhq_TRHJq~!O>QJ@w>s14UH-e@!M|%jfyrg>NA6XV2f07>e8s>F1GGm1%G>L#6 z{r(PYAf_UfbUF@OV1HZd3U5FO*D`p1;kokl*0*7kC#(Jm`a1kPa62jcL#PzKC(mVz zL26?*wbHksLG)8NrRF+qx!JmjiCeJ)OxzWB@3sJ>-82%_JYzP@gimr>nS@G+m{q9{M!a zWWgsVXM~q4DU+vGb)>#x#lAPdbt9I{t?&3DZ@4Z_8>^F1 znmubDfF+bi9U!{hYe>??&Rmc1$q{6Um{@4J7MW0qvEhEg9XfrzKbFch9=aS+iw~Z3 zI}ZOokoQ@U^|{bX;{}QRdCd-ZY~B0=9Zz-bTdJh0~?VfHuiypBLPxucqrJwS#B>xJY7l}yw4?G`KI-KNyd@pb$xkowYML^whXPqNp#Iu7U7|D#O%B*(jwT^jFQr7Z?J^`K|2W?EJZD#@#qYXS6Q;uvHPkG9cL54> zsN>BOaKc7PF1wK=Lpr+aQ52fwNp^v+&H2>+Bkb_sfX1%`&4nESCvO~bse``THHsBcW7Trq(!;^?Gf^krXuf_Al-9M&WIY@{ zVLK;5QcEPH|4D4?G+y!27T}f)BuT=lh^rY^yCT2<`y)_ke6)*u02lnEvWhAx2{zR6 z>0GwMYVM|Y7i?dR|064mzDL-eiS zK-%7Z0gO@Z35lgD(V%#cWU9+WsN;DqUx#^2oAa3d6fn~mR`N&4-g&R#IbUFSbFbGq z$5NIz0q3|b6Vc7;&bx!U{RqLdelKNIVGi!^0M{)BjSUluT*o@zzn?o&VG!ileF2DG z%z<^KFTGg6GgSQ4myPz^LD=Lg`2Z6CX&qmtdS{<-?D6J-Gq0odqjw+%|1^(BRvcV+ z;7)KLaJ;X7O!hvuPWJ|yl-xVueYtVTU-jn1+q=gr%7;plW+IpeT(dne__Wt>sB5by z?>ps+Fo2|(u$Yoj8xQQyV`u9@XJ#37*nmmCp;VSJB1wYTq(uq)nyhmck{QWI*l|($ zwd2KxBGXCLG3odahjCf5aDMYN!?Q57%R#9)FlOd-8sV;}9;6h1GiSU^mtI%lFnfCA zfwGcT-PyDKsqo}C^q?u^n#i#wvDpL5~ke`Y^`(_d1O=qi9a(aSSc>k7be(m~v0#?vj`%G4?WZj<-^_SD#XRz)rLS zZ?-DXqc~A4Cg^bXD~$KAu_#xZKi4O2{%5{7*?O8kSM0z`oh>-c$kkoIZq#?~?(|)@ z?75)|y=1>!4BKV$G`Nq%b)c9~Hc#t64SC zKmV)#)ohiJZro<3A7JV{k>mdp$n}kd^WQ=tU)hr{v;K+X%FvDZuSdT_KymB~wHS$L z#Hnoh*f}~aV$NEo9_pG=ZY?X8Ax{(W5@@%myR$$>5_Nz$yGRyglE%rErvhy@wz~V6Ur&F`D_BKG(_3A$xOr$k3_NR~pv>&lgubhb6 z=eAN*YPVoox5~$Znx5#pRype1xR$bVfYlCsS`7H|C{X$J8hyqCuVM!8ksEd}(y z4N@u!-(|{i(XJeoy;8`+1kiuA;v{X|<*VBK+T|pwzBzZ zKmj&v(|LQh_n$-|m<`ieebj?71Ie6gLorx@ONggR+Bh!8{8r}WaM<5uQz^2(H#0fcVmu&?n+$r!L z@^^vO{43B`8u+SViy-Ty&iZ2eHjU58Z7@`Tg>-w;57z@cNs9_P2oAgyqf;s(^pH3L z=uzN%6GH*AhIuN(KHj{?C<}ONd4CO$w0eL{%O-m zrj{2b90)g2$ML<(k8&IJQ5`fE3nIZKk<>B z)LHa$2mU=DRaLT;`PTAaKJPv_;G&JMUmY+0rA4!xd7_)c0h+N`gu>@r z;9X_%1`fA~;d5W}U<~{D-F)+)qx9N={i?YTG(!lpSc_72>4AU%C2>^#i8nnCA?kUSyllF>Tvlq%!rB<6VfE>$Zh249t`2A?p;*dV)=Su!N$+6_zrxzBZi0;MnC zUTCH-5kDP1O(rtc%8gr?U!ke@q7Y3vA&%Kzx|k=Ru2=G*;@c4nb#6E+AFyo27Cx$A z<;JV#A}z#pPP{LSr+QxuMXDK!Wg+u&m?f9z=BsEDfwcJ@xEoLVf>A2`76Z#hPb=$p z@-<`F0`k=sqWEa1FkfApw6%q~9dteBqUO-=j^5Zu%+*SWaEstHQJ*5Q)h@&dWw=@3 zjrj?HA=&4XCXR%tOe8j;?B^_kXmYRU_v9N@Gys%D9og3SgpKc8{xAFW81wkBVda` zY(oi}SgvURQ{oTM-1s-g^qA~dV0!j1-8sX0?8>HY9QBp0)DCUG>Ugjem2mP{m2efr z;ES)mEURCm37zX1JTQZBL>Udp=`unR_O96(wf4Vh8(h4HL`Gz;j=DK0kp^mm$fN4UO zf=Kk-v7R%AeTvKGV)8vj#=hQ~DQOiE0J_l)62p;eBE^vSGi)lR-F|mhqm53de>Xed z$ISI>y50fUWpMS$5xos73xjPF?GAqvp2R&aQqPC^h34pA^z0KNyc;$K6Fcc9i)}K@Z63N5LXgd2ay}9dd zi~Axg`lvN@sQ=TuVwPC=mWj5Bze$E>ktCN<(-Lqac&Nw!Rix>L8>NOO)FGwtg1R4> ze5DSKWQXQ$P>6PP&F#SXmBV=y*{z1|XpAOX4BkWKk{4-c7B*#BD--8x314Oxl`Ye2t zSs&ru3Y=ox#Fp~LWxRSge=Y#7AEDI)c7X}}t)ScJAZ7?ycj(ZqXTH9Js<;u}RV-83 z_rr7wV)_($<-U$$b?Whoia$=2ck=`03* zI;BGr%AYys%D#`6;ohgHGkRf;Rec{9Y@X5>mGc+r9Gr~{#-s9Zr@;*U!P(w>X&^h5 ztMt5VZG-N~yKN`0jar;99tef{{e*9_v&cmlr$p3B!LvWB)-IP{;*nSs8J8-P^^~_Wh7df zxH{S$tl=z2v*Ui5kf?Imdin)xAi+^`n!*)HC{O=#Ymg~#P+x`b4&egFQqoeeY zYO34(-pN_+d6x$4ZbU%i)+DzpbnR4z!?+i{e2(LEI0oMt(r;4j=KKSxxV+OKgAII{ zk=RJP%<9N<3wL$Qv{qk~N&+U?Y<&pA5>3X$LtSpscg#$WEu`xm>89v9_D7YU%C^&! z6!(Y9vMJ|N_+@up5jkcNe_yW_m$zn-gY9&048o|5}*; z;{<2<%9Knf3_%5K)RKw`9xX%er)X9dL({Dyqkix#j&*(RLEm8`7o4i8yyHk=xNd8v=(MfEgWOTw6C zkycRV?@udPezTZXz|Icc3{ExJH_(>)OI+y?4hE<)m#s@ts@-5@{$wzFV|M{KnRse=gKIhvl~4frNNFxl18QrR@q-szYUYH z7oT)xWtTgu3X6=_SCq>KIBg0-vaywk%a+2SGZ-o( zpQi&cSi;h~zhrDO$gQk}n=IS6gg#G%95$=o7vuS9E32D6+OGZChZX_Ts=L52np)%a zc60Z9+xS@hj}ILGg07nH?PlloH8~sa-Pir;{OT>{;bIm6;wq=3wcQ8!ac=zlH7M19 z#5MuOjlCtZDa#OD=f>9So<>)%a5NhqsLx+CdUFe9^lbdRpU(aIBGs$K)JIHiXzK~5 zD`S!Hqv?{QAxRe9654zs>Q`h-(t%fW66`h<#_+F|YLFCfc!M?G`MkOk_RR~J?4V?U zZ2eVqgR`AiP1cM&5!y)M`WWnH6zE7`wqBxj*YgmZ(wKOfW9qizmk5N36LH~ppgZTX zgb&~d^KXaC4h^gIY-0wlWAU0A>U$tZr<S?&H3QP z?0|_{vNC?8XE8xHCYV;^*}q1;KqdhXU12LM%`L5Fffm7$+AG32I7{m%E+&9U<^;Qy z7^9PcJa4ESEc3*DFyc)sKaY4UazX09KG2sJ{@4|wH@c&(*-8HHry0>z>vM^I{`Sj( zoxZ{0$8VGh8&yDm@H$;l`7&6htuquO2P{XlmrzFjFQ?bnZ#(Vk4^u!|T|GWv99{JV z@F`{8$1X3~{=*gM{)EDDfzRi68RW{Br@hy=Q~Ypo&Tm8c@OobT!2f=G-#)0%wxXI~ zW!nPQ?el`?{u11z%K`uKwZFdO<{))`O*Iyg1spavWJ>6eFsht@G)N%n|7r{WX~6#> z{%uYFKka|T3H-l-1OLPXp}RM>ln?0Iwx5hI;@_b0ZOJ%JE&4~f{>3f^64@qMcba0L zZ9H`C)A(#x41Ks3TYzNd(LrfuNttTf z**y}aeI2j%IH_T$6qQU-sRZhaF=^t5zJ?tVrM^F@oi)^@tO?q|i&dpq3kkPkR>aNg z3kxnq8p;>ukd)U8GbWXzm~4QN-5-=vW+ER0))Bw*JDBOE_PtWRWr{|0lqY6-cAD%H z%dT)10GG|xkHS?3F_yK=S$!IE-#4{IlrmgQ=Ng0C*iTE&B^+lYiwE`_kLRy{p^EEP zx-yn7)0kyTD6RsuD@!%@-MHn^#51EC6%}ecOV?IaVhQ8!8+myOOe9e4?5G~~MA5Ay zeDm9aiJr_{Ox zwu^d;@s)+jUbrm`h18$1(rQdkL`rg-FVCa0#IE1u5tCsnp^>-9vv!iQp3DhZ3%#Li z0eL!`yWBI$-L)$ShaiChijrgH?591_xw>*g77XwdmQWZ!o{=^{d6qv)-^yF)-i9&@3QU9aLZ2S{b|E zW3c!|ZcO^GZPLr%`MGL5tdO~6!{5ECwx4wDKggZC^u5_Qg|fUp$e(+`{rsm#CHWdMggJ@;S4dp&87HR z$?&rlWn<6E|2iuEbE|CpT>AeR_R93jVhj|P5h$(wA-hGuZ4;BlmKM-{&Lz|MOi)ve zCp(V*V8^o8N>nt@fC1^sA73b}Yj z<8dnQxZJevv)_v_pJ+{uXyKLCu7GX&ByiD+Tul_&Qyqt ztT+a~-!T5&mf=;*9xz*9@BBPf?|vn8>t>Djz~|{K`_BgOFW+tUOW>P1Z9D1w>$yI@ zpU=ZuXbCx%upfi9=l!rsdrpAEG}Ftli#W*zdL_DuB%5EGeZ}_T#gY)H$~KtQI?Q4m zY@B_h=tt#3`@zBd{cj(u-$`$M4meFQJM71&KhQ`s*|PumMgpJcl|%IW52rJ@w+(X`&e&o}{xXj|2YK?Ly&`Gc{fgROq==B*^jXN8) z@}{Uq6RBaJLAjTxHC;E$y|JykEm0xSaeE(pVJjMlYp1`BP z;fp>J+omZwytv!9_sjXPbstNN;5DZQtGry61Z}SLI2;^*oZ(bXj(B+==^xM(N}OLR zDYbL7;zNLLU#2Q`(Jq?GWxp0PY!n~#&AxmcWlrtmab8qnU?xr^o{Xs5D+S-O)!uz- z+34&-t*`ei!o9uGA%sXanEsr!?YSwHV8iF6oAPX?n=&XyA}!d>ez{PLwV9ntdqULP z`Ch|k3CneTzWphy=S!qTg#+}@h#L4W!;-|Ktw68(AH{kGKI~>bH=gdz0q!+@JgI$s zJnkN*Vt**bN6<{AHB+FiN3dQ^F{vy3m~CE!8Dn4v%tkn)crNfy4L&(+Frf=jo6*?% z*-B)?=q!~$V}8@8+`WX_PEfYB*dFqot}kAGpW!Lvn+zT$&X9T#t*00atuua>KAUgu zG;k?C$-N#NA=izsHvsU5VSm>NlSzt+0Fso}U>T9HPBy~N+dTf>v48CM7HznV-GJ65 z9=ab>=+%Khj~KfeN05N%UvU3Jt~{;{y$`d8*E%i$e(1PEL+<4YCN%$D_W7!f-fE1= z+3S79pUTk9AG>y9W`J|EjFxn^&3HIUTp+<>0jQ{v&XRz0$!poHu(!yCp4J65Wnz?Ao+p`zNULMtntv;q*S3sgg9|s+@i{03ps)%M6fYNv^S} zAn-j@p#*wG0g+abhHg;re#fTs93gmaLe?t#fiZ~Q)sCFKVoxv{S>!>c^h5V%pjR$J&e?5OU|@ValJbSl ziOx6DuNPuA=o0%5*h9n64j6c)IDNT!Hhuo-itCTNv%ofxRqJv`+d#1WUDbWx)zK0S z#bR)ifOx|G%@M2z;ySrT(=d)%dV4Dhfp&(IiMC>sP3dox^WTq zk|;5ZuS1|;`yVY)%iu{e1u->7dl1*V-bTmcS%C8XJ;JY|Cg#2E5_m*RpFkn8hxo>7 z`r}PZ=cwk3KfOGRH;l@v7hZDY;-;dF35hcYlaoZ0f1JN^bey7MQ=B0r(cT#elY^@@ z@!{(6!X|)b!31DD&I`A(BtRuzfo2-nXd6CN5p}oY*Ld#lt^WM|LKni^FqhmJ)9V}v zc~2TUg5)K-B$OO)0bEGTUE!^k?bhXe7(mI_8hh!nxP(t~WD3PPINxV5{$!<&VpCKw ziOScfXVXS@pBP_5VrlCX9TW3=t-PA}`<9odve+ z0U3KI@N9!6GUpWA^Zk*q0ZQ>EG}F-}$2?W6GsnLP(cc?^y|0S;TT2@~mM&OHJ`Ewi z&EYWra`g|3oz_$o%C%yp!@P9yYn(%gn652(6W$yVK*$?d{;R5WTF|0Yq6I$RY0(!J zPb<>k2UJ43FG_nwl)eC?88rdakF72LF4y~90jDD0TF0Inf6~nCgG49&#d>slbLEBb z3RT+%5S5N+HhM_=V0UyCHdX~`o$(=$!t2VEZ$k ziw{1sDWz8qD<->X_qpBI+xEbIZpoMT)fF(wVon zbocE$9AVhh>q!0Y1To``VilKd2$J=GCWR0Ej_xyZ3Om{A*S?v-2HZ8R|*!BGXpdDkHZ1aBzC0*F)>*t6Ue}oS320C*{>wt zzZ)FJYBKw53qJVy!OhnF|1x}vE#|Jw_s}>U%uN$rOcfGiObJsE8<&7`VFFvb5g?u~4(LJ~rQ(&HcyZcp6(h}hGC$FH@%@I zxpRu^xd+uUk#$CeF>f4rL{A8atz-HIN(PC8=kc3?!}w6IUNw>(NoQlcpFK5jSQn}I zubfgHA;>%Cp-AbD^hevlUWfp@-U zexF*AcrZC2v-$*k@7#PlA<$LT^Lgl+H*m^NZ$?l5i`~K2fL+A56 zv>eT#v>^H_QkS9G8onv^WOZwwGWL8@b46dbjIjYRfrZqpZ25>@=ZpK(<}xl}Y)j&r z%`coVA}$Ez8mAH$)e2%QK(hUg^wEW7_q}d%PZol9d8J5*5lGZQUyBqswiPyXC4l4) zaz$c{qd7n?(kAK~tp@h)qJJnuE>yX7=S$}x6~c6rrbtast|BBR{xzauhKj5;0K<5b zP;?VyAVFPFBI=XRUOvSOwY|%T&j~uxw$!hj8&vgjpmEyDP7Q?pKv8RJ3H_zwI?bpE z9uGTPu;qvLZ0^k3`bgS;b9}fS_h3>)wlVLciEG=P<51#1c@MQBU?|vng~>+~&xwP+ zUgR`~R(jlyw;)w7PG7pcnPgTGBJOTv1BHj6ZEEcI5K*AU86PF#$~CaV9$v z%!zzJL6FwW|0hAg=k15k6^bf3LhzpiP>jh}v0wj505xhy(u}rtLfsO@Zqs!Ri-}po ztiT4ta5+X4%@{e{Vu;CDAdvqxqkFQo!blzVFzuJdPl8%))q~jN2ic?~CyCq!6`_gk zKx`>nK8swX`>(-&j==y0yI?Q@7z|T6OFjm_%YY!|q0(twF|4rN3sVCO#}Xaks^i1f z;MFl840G_<(m^bz3FW*va-CZ72zFiLJB|nPi!(%bor(kMPju4{!0x;c6+mF=KuMr~ zz+B-A>9{8>-U0+f4%wS7Jger%gb*#AznXFhE4#xSjuo)Q&_A(kXC9jhW!>Oa`BJ(z zf@=SxFRx5(EQlb}sxqH7%)t|-7xj8c6(9@L%n%e}KAW`6$?zfjk`wRiMhj7<+e8ax zrHft(PIS-yMV_Y1jwYsG$L!ZP&18$6o>B&mOYDPv?j8hKh z>jMVKq*Lc2Y>y@Qjz0_L^5AF&*|3g1#$7+a8!3DdYR+b!Plp2(vU!8(2(Ag^%wYf(=!h-oEElSKXT?49uTNX=N=HG71)5nN(!>?xO1|Vw--`1 zbEfpH8t2r>=oPnE(1MQK-~BX|Awnf;L?QEjleA|L8Y!!16;Y-Hs+sYeIPdUa~Rf@tVZh+mOgd43Nif( ze~=-OCkkQ~V9|$GB`VH`QI3SXISgv;FL0`mK$6LWx|V|`k2yWms2BJfm4HDjIu{B3 z3ks!9RP$+5%@AvlBOMl>kfq88jz9ly^Nuw-tHDjkDlGQyFNB(8Y@S;$kP1(D_b-}P z&dfXoRo`$SFRm;I`p0$l^e<;6?1R^0ZBO?ws4_L8; zgAnOFqz{8IH3s=oD zP&sr0$I$a#&IDZ@v`s;BKq3;6;sFsRoZg9RCRr!0k|biQ(O?9v!0RglAsgMh_^P~R zMs4U^raI-L4mM9=HA1~;vt4=1tL-X!vS!-aF)cjg{<=S+bEQLH?M_Bv+nT2?&A#_! z_a0^Qf4~;{#K!mbE%LuVK30Z)UmQZ*kA%9w$Is&4;8oPf?iLTB1D@3Mnkn0!kf$hP zmplycYkYjEnQbo~oV=LS(B(#rmzLK~1o9>yO;9Qq9Ti%|k5)2Ov z3k(-b8;bUqAYLF7B+wNO(&@*LEkU#Y>OaK)uIBUK@;)~L`~G8KsZdM^CU`?Uv7Y}9 z(12+|*1?%z{kIrb(tig2cQLO2R_FS+7}x*Q;;I}ijnfFwWRWXv&|@k-Av(uC#}ZEWw5fHDR(7eLS93!n$RTE{H0cvlc!RNNk9T!TZbnT5hbt;+z*I-6dC5GD=CyL zfOA|X)7y1qyb@I1Q6S!JoCcl4QXa=PIeW2Cq6sy<6S)wb+;d%H>bE;ROX75L07L}U z?SGWWa&rdoACxmQUDTiBI*yGnTaVUEQ_rmPx1HIp6l`k3@;oO#Xr~2=-wms6-P`rd zb9sv!h_|p%GM5em4RX~7ol-BK*pA9O0|bm;V5ozR-sPpoN`|Q7dzzeMc_l;X5{y$f zaxw~qhlGsUu3I3&i%)O0q*MDT=eT(>_;o!3Kry{ z=rVLRQS8ip>!0rm38Uv|PpF4@>R0z^Kp8%z>y)b$aUS1+xa}j~@@di!sIxql&uWy& zTqmR_YISuxDTa7gCay*+?0f~6lCS6Oh@KiUorS2KpQ~wL0QQ{R7r1FYVYBU1o`Gb^ z!O_FNZZX>m)6d3J8?wYajLFV2#AMo6{Zm#KW})pz<~m1ltNGqAVQ+tqo!rm2Wj`HO zq$3Pf&3MfNh2D%5xQk9)2u;E-IbaEiBqjG!PIrVPqHx@{gi)6ykDclzU4FebIB(^@ zMKAOCt0fSbb}so}D!SuX+VKqTrfcC~aCekdIE4+wSR?o)_gQp`&k$vd$x#Z_pT|j{ z?%xr?&`cfIlE>;vKck)Qk-@MzRI|tGV-cl!k`{IX<8Md%6G)8EI^%cUR_x2iudFd9 z{Jc%GCuc}VE6>F-*k{ugzj%qnm`|ySyw-{7_J@V7UP0$$avwg3HL9E%ggbELhDmH4 z^SZJBKYYDobZ;@&w_ESpwr$(CZMVC&|HZCtx4X7&+qP|6XW#GrocBDR&bM4MGs#S{ z))>EJC1Yg}o)tR&oDQ<1OmWrq%c3*bXIyU$ERcTQf5+Ne4o=}Zq!0mqUXLSdin3-y zR)^=u4iMh*@KX~3vOSxC8v^r5S&faO_l1EdXa28q_q~&jE2k$b*T)~*!fa&{{O_mN z5)OdJ9xu_%UpU&swN-Saa-2y7lB^nZGA-h)_z)6GNyjND4?L?P!i)D(}j zLGIEgAUOo}iJ=C_zvmev$>C3_>l(V1qaQNmnypp@_!xQgxO!mtwI8@q<#|&~>Q>n#QsTfE8}g%VztocN;IwsnpD;<~T`K zlJ{gQ0KV-2)NfM&K`zZ)%&8VcPtx0EoZc;E@QgFAE5jp}Ygy9od(v>truH;a7{=PLb z)W295NaOE_Ivkjw-hjrkd=yRGhJ>Z%OBF5F(KA5v!sGUbapXo}nZh(#U>#Or+vqES zr~FN>rxcBz%@Lz0ZKtOYy+ajQ-A0;jD2{`Ljr8*3dbaREkU1d0X|91nho%lDDJkh= z+Av!BFNXj}QLV-*%g>lRfkW-2mF$IckI5XNN*Rb`m8*Q%%iJ*DV%Dg(HLS81!RASp zeF^hd&Kz8=+Eu|7cl%B17nsPEm7uuGY_ZJ0I@n2_YixqoWMrs}v>)f&Sv+u(eA8PZ zf0-B0TwJL*I*vSD&~C@=Gbw8h{o<_j!2gWc=R5}J-$6HMbXtX3?SESK;G^3esddW0 zs)v1W-m+l0Q>~8<=|TL$a3=wVv&1HKWR?qFO&5Qak18?SY9ZM6HE@6?o8SI5l6#Sa zYFwzo%z2s=Z*Az+hb&RD7}llING86pNu|g2_E0UuIw2epAED?gazJPpkwzSvMQrZi z5WxvR4q}IG1d3^I5e#0}5!52i;1t*-2)uZ1s+PrJ(UV;TV3dWSP z(f>Eg`lH~14G{H!azt|M_d#-VU+>oy{j;m>JuNNXbX4Go7eT=AAA~Dl&%g|Mzw)hj; zSE_`sTum}0?Yy@1pKTo>3BjzQy4^pM%Y>lGo>lR8Z_BbOOz143aGmYLS&sLY`0N1D z7heZq=QX7j-alMd(%2EqUh}rv6F`;^K^jLh_8O5K=J$#VB2$oLA*G^3(NJZKfM0m4 z26_^35Ds0)&+rH|esgtNy7x(!9FzlEGyS`YBO~)nb~m%})QvLZVBy(`pio|j15&f% z7Q2Y37x`IgLv9;;PHVNR5h}#mG+c6&lD251ir}RBM4O5J1t=o^?%?1ImC(i^7QB|3 zUpH8K7=Cb$$evF>VD;SqsNE#wAKy?Vl^yYmYAjjX{a490MRQRy2S% zEVE%;W)Mj8BvR#xZ+V9i>PC>vLu27S_DfwiKwVHkX9p(^aRl+?xtD8ycER*|l&5Wz^w zFJ7et({K?Dqhz8$aAu)6g#*AWVMrb8hp_HE^!m1L66Wu&lnBOQU|OmbN$F^W+fQLx z1u8dAFi!H+I`mPQ!&>7nwolyal*Ak3QHrvFrkZebW*cDrjFKKiLXb4>zPU&%dH~hK zr(Z@*51|)`Wu1%Pp$q7mu99MD?Qc|~HJVWb%V40m>_YTVY+@+8ngAXYRZMRbNGTf= zdRYfu+~tqv*4xM1kN$@JNKEBQ1_;i}NL{kNi0@dm7Ra? zTWVFx0HVS!2A+|Wu(?5PWB-AaQSkQ8mb?bAn5G8N;JOwt=lS_g{lT&)uM3Rqt8+$! z$Cj~_>&T-T9>;%TZKT$yiD0+(xed9wk}sxdp}T+e_f1-vw3+djYNu;37ee?))7+0e z9dX(9@(0!aiVe!Y{_59Gy~Z6iNuFTiQgsNgb`)D}-Y3WCE|^7~yt%bGiWPb!t19Iu zcdm8Ce@Wp7g-+ps;!fkV;S1sfm|Wp18p*=P4I?Kvf5ct`V$UH|2^22mI_RrdVdJHD zl$$Iu%kF?(gcd3Dz5H9&+K(GUtPY|B%T!_h7VMhGWWCQv4gua9tvk$ee$p zne%Tna})vVJs5nB(rfk|QNcA0BR%c}u|sbebsWiGuzA`qL>(!AK)h1=V5BU4Mmf_N zrd8t_vu`buj^-+Ykmm-4Kf*A(nlGl9`E@9_^v`wc>DVQtH+}3$ztpwDucMhcvj~XE zD@!7`m=c;Aq=K1_ei?0PZ4Xi}UHd&|dZ?Q%ZH)sWwp+YEg=s2K-4Dm9gMw%(;*-Q~ z2&LB0`nP%fBJ(7-xmy3!VdW?eWe19K`^*k9cw(vquy88{pg=hgC6(QR8IMq= z>Ef+wv~O}8&fI&nT8?lu3&|(Ty^WyM2!}KfwKSPIH8sWSZ}$(O$JVj-qUy42(k?hM zS+U-D(rifMso5oeo_vosIno8%5sQo){wwEj7A{@1Zn76uXy zgzyQx?0XCQpkQUHK!xltA8)LiOJbPF7JRqVGUV&5qTjyfa&T@Nj*c>40;UAU8Slf zG&R@Pei2_PyWx3SsH?ZpT@{v_7G*CcD`WfjCz1<7utN1rs}Ca+%As|U^{P`j#8xE9 zZXVGTB@=`7nl=gmnNpk4y{t)dNkF2hzZyaU`XdmbBB7I|1;HuRwXO97fX#Rb`H^Ba@R|Q#kzr z(v|L_pt0;8^T}+<(E+uZI%}vMXtnPO2DMKU}0tsAjD{OvJ_K&^N-zPYd2dkMQHt#m35|iJ;nTYCJK%t)KAKzcEJ$<}~e)Z@)6zt1{kisV;M7w+;wr6&XvztZog8qiN4nl440 z`5xA$KT7F2vQ6w4W3FX*YWBO3NUu2>`%4!)dp2r<-;;kT(WVZ6r>fj2Bw4g3$4g_5vYYR*>1QD-awz`+E)o&@CKSRz2VR2jW0Z|^5%^D%1RR2 zJe5+i#>1c*y?X=qcbzzwy5mnhNv}BA3#kyDgs9@>1Z0ECc}954JT<0 znQ}R3rNTzkC4E&K&`Qf%mT=xa!46 z-kNxXTv;RGN$NnT^ZJ*t}YO<16B@q_X3lv)1E&FU1_fQbKWWq{WOvx^=;+^u@YC1u1` z@DrY$Jz2|jSQOFdZ$VG3~>X$f5JjSUe+n;fff;aGUR&FElf#SXUZ0#zU4P(A2 zj{&Ant<*kd=S3jy-MV7Q+cGcUY7~dgeY*D4M02-FytzgB^}Lw5P+iAEzS0!VGj8bO zH4^vUmAHI}&lmKMexC_-PBr$&_@G!Eu8*W(E5ke=K2fo5si!mHz@0c%>3EIOt;TU2 z&ftM}BsQ}%n+KkX@aqxyxN-CuCRUkvuK+?x;A3#D1*Yc{3b-S}=k^AIeRVxh)wEI3 z`HwrTT>sRxejU~=YtY_D*gZsu=_}#fM=1MojI+X{&nZ z(SaqDDkagjko6%NMsl=#>MO<2tBT|6g+@uzQWYE5QM@gl(&X#G9V~FWv(0qz*QG@c zSH>N38%K04=_%kg>+CP4bD(-psCi|IyG-3xRr#h;9yxpa!1@CfWtMqp;Vubxhpt%8 zb`A2i)k8TajuoWA^TMeXhk9(4{Qwwg=<-#%!w#UWCU-?W0w7SaEyv+yA9MVY_vQUj z!^kpo5-oq&7UytgpIFBP1ncpD9l*~>PobxoRm;crcTY=gvK(qrr zLDta$$h^Dis4>z|Nl~f@WjGGLTDdyTh9#;ks=oU4Y{p+)+O!Qfi1P_eGJp+w-vTTu zDCPv}=zMcT#ObeGOE(x6-y9PqpTg!T%#MQLxzE5WZh8CpW=0grdoV%~#>I&TSyNxjdEl`BgMqMb29CTr85uHy8C$g%L57Ify~tG7|^#Lod9}(RAvwqL)S%_VaKSn+^^b2_KJCT(aJ&grd%~6Y4S;Up&TtkdQk;<_A1mjDoIvd1$Y!T z^YQLMf@C|kdU!wRm6HG4^{oyoqWiVwl@wxM7yvs|D_}Etd%my7lJh74J0ux3>qtf4 zH-D<@gPvQHG1iFCZo-6=c#Ke)``8m!mga}c5uNtUg{-lUa98q5{Ehr$HC#YY{~Y@< zn_di%`RiVW@lELv&1LZQypSltc(ON^m+P!|#22`p6%d zv@BD&Fv+)79c9{*C}~eJx0M`3rULg}XcZnw-yRFFwAlLM^%Unb{&! ze|leuI%zt}6nu+_C2f1<%ck_2QUIGpSEZ`*nbk$@O{Qe(r3F)4f-Lc|2qSMXs7lt()^we?X6IYNL}g83%ss_awB3 zdoXSU++P8H99D~hiJoB<$GMIyS&998fzAxtv92X`ub;KO1`}#{d5%;EI{V{9HrerT@Oyv=8{nGa1 zMB)bnzJTE#`=U}e97P3@PG^%1M`?cb&W$~aEDv<9*61duwjDm@MZ{grpFxgafvGxI zO)oiFoj%{UxfCNa1T^WJA&P>wE+c<4l$N=@_^J<>nCR?y&ct0?bO5V1W-BJkST0ii zRc=cbJvq4DuY59=S0P_w;0cOz7;>|zx|$yxGOgx6pH?31+&2gU{$4*{9}wSSJJPoh zVjs9fz9r(n&NkHWT=k2JH0P60!R^1j=u)?G{0N0x8g_Q6H9lL@Xcv}5ox+c*A2N8Zh7G4sq4 z^lqH_pw$ioIp6be%g~+;;GS)KZ$%fyX!i!rN*k_9U7!HX&IZjr ziy?tAOFTc9P=Zvq-kJLVKybk$8k{Q^w9_x#D*WVBPiY$d-+*}#h4KqFw{(gIK7|R1 zNwgUCO-;A1Ro6GEjYI?fv#L0E1INtZ#^V&U{FW2TH`wO>xd;-RhTiy__UQG1@D!QH ze*r#~8PH)$-S`(2wR?pVF)X1|-*+g^S>HAHCu+GCiWQ?bE>6=IiGLecrd0iaObS_X z{=ZiI{Z z+;40shC|37%yZQPT*tre_vN_I{R@?w23siWQXnhB{Gy9{whG6+12(c@7*SCiWiSXL zkPM}+$S}5bIWSd-G+ErX0+W*=2pc0rUU>+=b{ZOyV`%~dmFKPZ?#2$ zFcH9L5eEy~iq;yftFLSe=!+U#tUuo!h7#25OS?fiE(91UIcO1dv8~M!h%ne<5}28T za`{9N)n5kAt0CYR(?8M)QU<6DT06g3r`!oumZ;@W*;ZZp4Ma&~0_Yr_B{+)>d{m8Y zQhHiRn0$0<{sgmBOPhV{N;`sxL$L|9#u`Ak6zH!+qDJ#;(Mfl)-~VqgWkv`&g7v8i z787c)nCd(76INxV_@W&o*c`(sw%7!Sm<)*+0X;NL1`)bE#@xFR8dN?2Rf-@5x71at z(JX0EEe*s#x{51q%C3-=<57ZaG{uGkdl*(1`2JP*T(w#ncLr2#&KOblOo4!wX0|!UfS2I6;o88TkXHG90 z?zuM`*$ywMH9OsJ8v=e$&lUDRNr(q#&aYcvCpY|jpO3G1Dmb$9V&7HU9_$VMX|=t?DZ`8#}*|L2K1a5)V^xw)#+ zcm1U^2qWoBC3N?R)P}JBL;S{$XC4hNAPkbvX&`^J~$o=){LFOo%) zsi0Nq#jE(SUkS5J86+s+GKA^%TxnolCe1ES_*e6sVzPt08-(MulMJ9{-O4buOkT~F zpHLe$uF_x5$3OvmmvPMt+)@OHpFmK4`jNPtTltOkw5>ntTy?2_e2$~PtFESSeC*D~ zUUDszaDzX!Ucq;J;=5t!2tgoE z?^m%)r`qkbra`YEQ-jw$RqH_7Wr-kb^%r?3b`XcSn<@OFJ`S+sWduw?-Ru;Oq3E+? z+XI-qrFlxJjL;~16-_LgA%1${D5dXEHndT{)$#>0&D8&W-(GyrV9yd zI|3SEH`@TijsTE4yz@5|FzWTIzl<(#{=xf-n0fh$BHMSwZI+T8L-6VrPrNz5_0gDa z75v-<{XVE!9T&ood;~6mZE=WS2_4VF?auxnU)+XYUDmeWLl!6x`=O+qlh&A>FFPf9 z>x3_UC0%)juqN0zac9}Wffx8tbHj~^Wf>jSa0po+(8BB~; ztq=S(+6m#-6WJUn;8}MsE1V4`FI7#}H;`NFwWp$GlKvu%+b_Mx3&Mm9BHq(yF(Qy0QtdBFYNo5&ig zIVqw`lXpzN$P4wf*JYxn>3MREH`6)sxAub^Wz970pC>B?Hp2?eZAls|9&o>5rb?$lU1*0<%)v>i55d6e40 zct$#IuJz>YnZfSe%oJ8px%I-Z&@Phcg8NglErR2*1aWTrw{>{ED>dGbfj7sN3HF~+ z@ej#lmy1t1WK@?9rz=cIo0b&5``wY055)~{C4_EO2>lSR)Lj%?qY;)ys&P)C2cRGO zPr63`q+XgQ@^KlQXA^e&K66%eh>&BfQC&)ZEq0}k!YBMb{bW`S;-73&vdPWh^jxH4 zrA*v)68t}F2C{s0ejSVtw3G72NfmT$Ff23uyq*YG+E6U+M#oxdp)R>$ho!u7%DhW4 zPT0a&zcFfd^lnua7wk$Gqcgw58Zx$BL!uEogCT)gAv& zlA=<`yiDf#2ROmGbMrsnl2AdI*#4_$7@7ZI{iAqETD_%_!)#UEGdn4FYD)M^?fd0-XvCc&Jje=ia$wL2oQ+S zv|NN}ADJM)8#|b#f`-jz`Og@j1yedvqL~U*VW&ZK;tf+sp_3sJh|t))*8Y;{VWtQ} z#Cc#qOaRHCU#giPkb?5qwvG|(Xts{XUZgNU%ecyQL;Yj;Hg$m%wvjA(e5?DqHqy3^ zccRIl;`o z=y(u%ZT^HS_Znl4p{kI2kWQ*|Cnm&Q3E9A{qXNuzK(WIT@&N1>(CCV5$6$`^84u?D^o0$u`- ze*v_f)+WT~&>IxQbS8%)Y)@&o9oP-Y7^>)|$6%Q%T19Id8~Isa8~M=~g&&B*9QkI6 z!M7AH)QD)<_%1k zx$Owgga5j*kqCx1qZB21HJ4lO3aI|k00_tI+7wgh=zO63iQ2YLF&j;~pbgH7;P?By zyBiSb_WN1sfcmu&3jloHI^V|B#P;~TJ%8WaxF){8mgMHFWFGnYW~?m0JzccC2wZGe z7Z_~+ylh=~M}NORZ4mHBt=!rhdjfyR+X7z$(W;f}15;6gm;%qol(8y;^jmPY7X?CyTTEkfVlfCCzCeLcy=li?77<5Zm@#ue2Ft5g}^UnziNEh zz?(_CJ`NR>&hua+q)Bww1R49yvtT2oEIR88okw|l+@_e$e}zCU^ChZCaG75;A}wfh zB3volFfPd7OEv3oOf^R1oz`(W=8K3yFM|44PE)>-w_tMb9qkQs#CsjEV zPgZ-Ao(|J)|61U?VV<@UWpKND7`|^AlY1=fJZE}uyZ?@Ok0>g*mzJm;3$@kf_K9=q zN6xPG2qG)!?w6p=s5J~_E2kq+{fI!{5{tEN$jKURTjyp=<;@kDidfdISG;F5YpdfK z+tSVSW{$?;Vam#1Ak6`|v)>}--XqD7SL*3Y{X!?GBbQmIUYf6U@x;)q+y6txQ~6z; zT$)vDX}!_7AOGb=rz|WdwA~e__U0Tfd2sfC zr35R7QnjZM&j40f&*ZD&aZsPvMS*6f6v4#sg3}N&}pCQ096gC@Rll?2OGT z9VJl4k$y7=JA|^y3T>L`&9$8M=s-Lqg-?be%NLLOP@V}x4WLTG96dVMULN+> z0-NKkzjwGeQgFodOK^!RI2ol%;ReTg3})D@o-En+CLm~P7Iz_WF!*b_7#8s@i?`edd%(8k<=h`v%+{4|uc6@W|agsOa$vg+QS#9@8zM11#F6MLe z2^~4&`RwodxQ{uQ;Gs9z4vpjSxhD2(E;Z`W{RZ^-ynTJe-p(lG?$PP4_`N=2?SSY? zbi^v^{hUnLZ-UGlR_O(bbq4gl*bn?=o7(ULbP9bJH6NopP9| zc)T~Mbgm*il^=WhW=_1=VEdAe(KO)}Ra?LN7b}0Ia^{+5QFAj`CH3Kwtwreqj?)VY zcgqKqTnm{pH-=i?`pIU+#q2}8cN0}x0bpfK!`LZ(^^%MOH51V(dG%awzu*|IO){E~ zZsx~pDm@Lad)h8-OMa+$EltKker^xj!-=CQGjo$tjxO<#N1+DeG`*u!Z=q(h?EKRI z67nlf(yqjMM$Ffi#^XL`aZ|;)q*`Mrd;{wIlBOm8$#$|jab4YnBQXQxlG*vj0pM1k zEEA*$)N_Bo!Pb`N%F?FNmcCiGIVsCWvy#?^uvJ=VTPJp2F{hjEo~hkw;%s+>iZSMU zh&NF+G+0I3g}JQXW2UU2w3eN(?8;8I&n;smhHAgwT~dUf-&J61mDjAi zRRURa6254n>ON8`9Bp;0T@%@@258#W@a3^8ADGs-fw5MbFW-L>obyULuRcH5+qj{w zlIHO$>!?uMI&LhRrf<~XT?wJB(UG}e%5WdCbjzNnomB0p23>BxB5UE5?qH^)J>c6b zc^kF}eQv{07P#JsKMl3%e*1)-ai{hRJn0DidbNYoLb!os2rV{wHzoTJ08?vc*Zr?b z;$%&Qe1steW=f@bgdwA6WMX3CWMX4tVPc|VWTRkYq@aRkkh3=xHF7Z{q!i_5W@P?f zE~$QxFmgZ3E}c zRye>*$*jqzgNf86oECX}GZy^(=rG7H;&Eit z6lQ5-A_c=j!F;DnLY}3V9Z^7dEmVw6(x~hKWh8Rqu6=Ko>2UO}Lb(cV9|8CzBM6^* zLAbOyu~I4MBr>y`4>z)Q0rS?h8s-W% zFiGg<=%{8SXH-O#gdMBLV!ljtxXt;>`Y7}XDC4GdGzpG`y4E7Zb>liweJ#!~5eV?I zrT6{A424DRy)BpMk6&Vj%4&vapW6?9msC}z8S8{Y3bp`BN&K-<6j=N`Ef@F~=l8?m zW&65135@uBE=A8L^8$cU*^t5)R6u`=XQU@9&lu|JX&{Bcmzd20A56o?_ zv9kr=X&dt$NJF%dFpraU;JsL-lkIMk?@` zWC+xubS70{bkQgoM9r*5Dl8l@&nQJCOo}iGY*uq&baG=L*{xV&iEbO>(@SA=N4B$; z9_1h>fu@DQ*ht#tV?NQdq`}c{qp)16JfWgs?9=AM|*2LaacW>@9vs zbMCn&L0A{WLuSxR#X7EVn{8jCy9t^1fltG9XQgT zgm}zyQPqfkQV~U6(CHtPiPvKLn-8CkDfRqPBkGV>hlM@3_)h)|+p7Y{z!qp72y*kJ`ZM zvx2iNIohwb?GrJzAoC>i1VS3j2^bkr0>+Q2lc}X1hugZYpf2ULezHuan-RT}LA9pP zMu#bZhwgqvL2M2Azi+m!)*(za7d|dJ7KM7V90&k2y&2yWY&VOgO-GwA{bP66C5J5A zhhuonx(aR1L!jE!;9z=d_pXyQ94N+#hPe(q38u-u|3^#rmMi~=s^Vgduud|vhef}OTy^IltWb1@P9M}l z@g(4*|7sE$eznGRw5J1a*qRhReu@hMgV|PqfoHWYEyyPcYc+uUS319{>lITP;Yy4U zKlw%6O>rl|hD41z0mN<5Cx5;X%1Qt8Kumae56|elU)t-NGsio#+3W4C?q9odz^{&- zw@1#<=5`r#UbF& zgv74+z8IJ4iyS=p?lg=v>bTlX-bqy|^(m|Yh=ZW&ZrH?)--O^`tB6{NJUnkOwxKpV zI28EHhn|W<{AMV8-|N+a21bJKS&Bj95PVk>%a5yC(v&})47-6ND1OC7Jp{vV>ZU~J z=W<|+V{kmj?{c1}G31H7rT~V6xwc8&qxY)g}Gv{Tru$e`vx%b7GMP^Gs$yRIpjUMw})E(~{ zh}^a%#sN0qI~wBxzAtZYnIWJDeD55aXhE-XkVx>8W#|e1MpqkQhED(Mv|d232GLF7 z!Yu9~!Fb6A`%QL!tmj;d-KVjK5?{PaW8pqRRM z_2h04^TeH;QMBLbC@NoXU;whBm#!;MKu-aR_5;&>TTtAg17T%pXieC6<1_|c9aG=N zFcRT~Fo?$HA<3b{!GY-?5`r0v^w}{t6<4z7QF?7kY`b+Mr*dPZKNl$viH0BcpF~)0 z4$LXuF`zBtK3j+kOmuegM$=XOURAxlQr9j|?jg1xX(Ff6epG7)#sHP+>a#B6_BUKn zmG_O#7Yj@m)G5s)Oz@0csgkJ8&fUIWwD;iXCvOy-i`^!%D7*}RJoHJZ9436G4qq31 zlCzx@NjfDts)bbKEm0=unut}F(S8Z2&$RGlU-9{zU?c9tjj7(x=xsPJ+_|~O#+w9b z{0aK2zFgyBO8GG|pA6U%&^GXE`w4sDPk%7nukB&KZZb6+cysJC`1?r~FmVH+%~cP* zK91|z}Eteo!Uht>CjhP2Ob`Cc9c^l^{ec8c8KVKj4i-&^vLv@8_RIg}b%ayIZs zoAEkR0M#Uwx)n||KLuvL8&c$Y{jWc+L<9Lzt;jQ*ljqY3#TFoLL927KPi{^F&#wBA z0dIy>`gt(|-0U5`FE$6~^7=OgB_HHx+|tJq(QZV6`?KNQX3p>74pSE{!?e}S83r~g zisxdQNNNKY-H4tz+0q9UDTULIgUo7=%n~D7--p{pqlKEFoI^6r8f09~NU!AE@;@&; z(9Zh-i@152n7#lf<%h!8_@FfQBhEXRXJRjTfMo~xF96q@@{;>r1M1NDN`OPvmInUB zJCp%w5X}veOHCXmXJn9vx&qV>0Yclr(T86r>Ssi1yqa|k0K$dv{uX97utW>9(Vcsn z;PvnbxviDDg3EP52>9VEAS&qhJ#=|;vbTj#>9wI+c^QB!C}1z(NJt#iTEP$z_gi4E zC5n_S&(Nz__U$z!;4okxm_fCxzK`3i^WDtz-74-#x>>qjEkTc1tH?A}vg`TF{{6|EAtgG|Cd>2yl}EJh z{I+k|Hy_|Rg+g+nV$*0`fQD1GY7}7$o$DCWwcB+(-p&yuWDQYTs(3B*DJP$UAU5iEwrPoAAy& zq^g1CB@D7Ox%cF|08IV9#)DVf;^v;IX5%BVA(Q&ETeNua?d0(C!On$4@l)zO_p@yG zn_y_l5sE!*Zfzyc)DQJXfXM{R`+wv$Tk6>p3=x2xlU)y*LB-1JpDzBFhGx(p)L|lI zA!PbzRkpWx`Hz)_kdaUsnnB9W-2Okv`adX2sKYD9A;!Wi!pO-YB*ZQzEG8n%A;QJM z$|Wiy$}G+*#wyBB`2X*M_#Yp=|0}22SyPF;AgBRknci`@8m_}1vI;YoD)v>4^D&L{ z-5Tp_$&K^YkDE&-23;Kq>NhLW+IQvtzk);ppopkSF{z0{uql8cvMBzLk_!fc{)rQe zmscuIWOd0(3epo9(#t{JjiaV;TPyoB{mK9HP|519H3Y6GkzM6n9d97L}O#M3K33+EQF_4n6fApa}^L@yyG z$bccjD$H;%e=Py3&~nzZ9oz!siZ`6@6lXf%osbjAyqC;@=b-fnb`^-b&rT7fq)*JD zCZH9n^4EqS2PT+BA4n_o_3a3PzoP>pE(pplBV_=|E+r>KOc2U0X&RWyE-EM7w10yk z_N2cSjQ#0F}Q?VQb@HmY;AlR}gSmUG)zCsvK5$u$D7qIR)$JWyA!>Zud4s z+q5S<{x$T*yV|5kHq2{|bWwkg%f|zGC{X&14h*;2E=Jq!mwx^M9G# zKKBP#d4{){o@44b@STh=@l0+sosEXFt}$H2+V2y4f2H=(IZF!_aA+WF_j1>QUxJPF zVL8C-f^hWV&0^N-E`d+|#k&L|*`>8C&6Rn3Z-lb^ljh09!hjD9m~8PtWkfO|H=Y!Y zVgf|HnM@Lxd}Hp6@Ezm6X3+l*WY~gj@3ot4{rt2>XBB5AI2Powd@Ztaq_NZ$evmb} z%mls0aSWH*#B5K2%EB{=e5I^2GS=ibw;LJ>zakpe4NEt>lQKRSOe1A_pvxgJ45su^>O8MI4Y zVly4PR1&zvthyS%d+AMr8`BK7!VFFxz7p5*3_dQTE!>&eY11=Z<1jVoyc9d7q|rxu z;u}yLBOS=2upAs@4mu68lD7C?C*p)V+DCYXIb=FdY=l_>INSIJHz_7I!W}sx)3fe; zjrj(#l~<(?+Ss0c!%K*dAaTdcPXeW`Dj7>yng>W+!qy>A;f|toh+Z;IkM+g_hsej zMK@j;9JaIrfb;4(NKFhHw=1(yUu4punaz~vzDA+w9i z#H9qmg+PD1%Oh(;GG*ovpEfLb+zv*Ml30FWr4Ov(sXFe;e9Y#MotC5}^8nE*RVgW3 z+zk$}LrFBfV%6xy!*6)6Bp=jsh)v_)kakAfq$vLVTQ*fTkIA)!z?GAk+a=egI31Xt zNp6fhLu(glfsaXn<=6e7i-M{O1;>Nx0_&6Ic})}Y1z~ZGHR#o#%Z#H{HSq87EAryp zI`~Qoatxd)I75=Uu0a>5On>AkCgkIff71X!H{J}4s9HXhzW?bW1hI zphP@ak8roV2I2{K>|v;$y@c>8-640&{5KH;L2F@K`D-xmVNJ*#QVj&Kh`&kPg2=6G zjlwi}>MmGA`|yorv-a6Cyn$n1kWoq`rFAI-m5g=5_42qNo{=s{-O`W!9Q-j&3`ha4 z^ie@UgYDsWsMNS1ylXOPO|7yIjFd<`LQxc&dyt&cm$Y>ctg*mmbSL3=k2G086ybV= z&7#i8vPc6OVmVpCD!Z(8I)mtzIl!jOWOkuqIqkt#j3RCYV)MLHT8t7=7AEl&ZbEqc zO!z2b+4&55q|G6i3Lk-fh;M4H6ifi$F8X5-rf8USVIfe*cubVa(%fR9PT8mt(RkVd zLg4Cu9h6NayQ@Z7Xo}B6CFNbyRl}c;8)a>gDmWyn&kTf>=uc&CiNKamf5K;a3!W?` zEJ#EtZf7qnNVT46PG=aYC`?+E3{y?yEG_>Es{rcG;VD27cLtX)S; zYwSrQN$aTgx409#y3;Xd9`^Y&WS`sVfhShdPoCuK<)Zs2<&Hgld6?`*#foLJJ@pw7 zJA`chkUw;GCw{6rhm@&XAYkvr@RY z&Eypz<@S4SL1K+;jt;heUspVFV|4X) zF|<)|^Dre462rFGlXX|mcww`%$M5r#|5%de6SzRtw#f5IgKXTJ- zU%kI5-&~8u;)v&TZRwv?Bq_hJ+b8Qd;X(h;{>puD!DU>()N}5?DsE)1hq}QTj5o zojWwMqMIrhC;`L?YZoiTzKvd)edgA6iTc7@!<4rG%~l+B78km+(zLE1uWDJC?+!@cATw@6d#R){)bLsXpUrsgh$*4h=;?~^7< zRYCEQ=s6_Jn$I4a31nL7l_JYBT{pHAeCY?+vFnw*{e*KG>Of=hRx*TYTPwlVcwNTH zqFFteFG|Jz4JSVIjlgPochi;p=Q0*=K*(5#I{|7(`H30BoX{&o7C?^8>#jJr$UQ=s zjPU|s+#_wwqRs9BEYKH3hb!czo2RI(4~T{2Mk~QX2+vcXnyNzMRRDiuht<`h!oo=;m;Sqm1lFUx}r(sv?WeULB zIi)R^+|}>)aml?W6Vue|O(&srV>E6}g>>u`TdGRC8)~)a3-AW4Xr{Dfk>UNHUDvue zG6(7GzSl^6pW;I*jeD)7H|APaVX#u9M}6ObY83Td5gI&kWQGf%jb!Em9#9(ROH@!S zW=lakF?Y~RMo})aOyeGFmwr{Ko700xnrJRw5c`wQVj8}m)lTwM?e-rnyLgbm(qI$1 zuJtuu{OGDl`u_OcfXyqZjPXct28fd+YxX3XN~}Y!<)_fz9rq0Qymd^W>m4A$>{VAQ z1iw9tklFE%*c-or4`!$aRQBYsTd8TCuvge23ujDq9+m$<4VlASyCb~JjYovh*X%h! z#ag3_$!h-Dk-GV_yn}j)!~tR7tq|6)Ns3_$HvX91r@ixumWNxNLTY~n3D~d&8s#v= zP}C(`R!<0n-7+|*=BHm;|9L8@LrdhR|TpUnR;N1uK9cAE7bx zxF#fcaYS1C$-bT>3bE5cV`RE%Nh6Gur>N&~!3YIiug^U5(t|UVRID0vzm3IcdhO!# zApJJv#<^G(t6%1opa}1ab}Qwpz(AUFERWKCp6Jmq$$fOr>DD5#_+h2QC_!@Md*g=A z8{!Vz@5Y98W_Y|tSZbtY8hwQ&dCrA0t%Z-Rq%zk_!BrNe5K_jJQ1 z_S|LZo9F0oLOM zDuPUFxY;mlUo?;G_H*IMgTn|y;T&_vnY#T{O)}rlcP5&<@W4^344VF2aNrp;rV{>l zQ^PGP+?cr{cAFwkgmr;GKY>)>wZu*Ci9m=JkuH1JT<2x0+QHiFll?L>L!v;cqyA{8E~CdUbmk8 zl|{R{ZhJthUtjM^h0zc@&GM^BL2iE7h2Bs29K=Im&quCe(RuY`(*lot1Dxz-OQO+$ zEXGYSuX|)Gbpf#(dT?sX_`BXCNsI8Ovh)9n>XO;NTeMzJ64kAL@x?FfBq6-sv*zem zaD-T4o@bUtpNYAG?hmVdMk@>sS12-5IdxPoMS@q_0=Z}Dr`JnWaHzd7pzS#M#Z6!O z9y}wFz6wzMmTrX#vUMfc^Mv%Zkd&ZkJ%r51ecxNijI_K+KytChHTSK%fiIOO8MzJNO#cm z84S;nkPQ0#W^OdhD27`aL}{kKXdk(IcTZDY8RFi2Mj0d(^{38)`AcY-RkS1inoFVe zRFgu>pleZev;6N(-(>vI8fIoy-_ppM<{%kIh}b6;AQ<1$D)7F zVo&{&9xqbkgUj2pna!J})C(*JIZwJ0{3&9L0#ecrG#Ya}>5elf z#+)u=G}v{-G1t=0|2Bm~{4zf1{9SU3LeK($4YL!c!Za|KmVgIH05n=q8oC|TfMj5A zzQ_gKCq<$G$8+f{ODf=jCYYB_zgY&&dpvtKA2ZI)B)1bo3ds%4=)^c#9LP5X2qxV?GZ)hjo646}HwTfg8oT9-HAAnRz=uXtz%NBT zv+$Vzr2h>*RF%JG^8tRM^AqjNJQo~21^)kmMlfbiWGNkwI;Out=eZ}U8_d}QxYbfP1RaTFrl%0i*l2RAKN$6J|P)5{DSj_UOGhPphibe zJz3^Mb4~$^0JMp&NnU(p)E*rbL=gCAfd7_zJec%@(K=DW^t`OIaR7Y=Wue(IP?&z= zza?Y-`Huep0-^@#3_%z9oB&HOCk7^gbKy}NbRR(f9rjKvoyDV~8nIg=81`CEW4>%( zuC)yjwP{BAM3&21Uzw7GbrM{$2ydRqYm08hv>Q!1!o!JXSG5k9X#Y1@1F`PJ#Kk{+ zF*g^-q_3ka^nsN%Ar7r`PgsbTby(f#$q*v+SNatV?FUu+Tfn1 z5cJHgr%W+AT<8CEz3!6uBa$;T`t|5l$#(rb z{-q+Rs}F#wve;i`{xMxpvO*r-);G9_J&u7sg;pm3fhw~l&cv>pgW#q^OVOdP(G-loQ#YT M)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 +(70\),)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(93,)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 +683 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390 810 +y Ft([time)46 b([-p]])h([!])g Fj(command1)e Ft([)j(|)f(or)g(|&)g +Fj(command2)f Ft(])h(...)150 938 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 1047 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 1157 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 1284 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 1394 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 1504 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 1613 +y(redirections)31 b(sp)s(eci\014ed)f(b)m(y)g Fr(command1)p +Fu(.)275 1741 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 1850 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 1960 +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 2069 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 +2179 y(Mo)s(de],)j(page)e(105\),)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 2289 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 +2398 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(77,)i(for)e(a)150 2508 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 +2617 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 2727 y(these)31 b(easily)-8 b(.)275 2854 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(105\),)h Ft(time)150 +2964 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 3073 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 -(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 -(is)h(terminated)g(b)m(y)g(the)g(con)m(trol)h(op)s(erator)f(`)p +3183 y(the)c(format)f(of)h(the)f(time)h(information.)275 +3311 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 3420 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 3548 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 Fr(subshell)p +Fu(,)f(whic)m(h)h(is)g(a)g(separate)h(pro)s(cess)150 +3657 y(\(see)g(Section)g(3.7.3)h([Command)e(Execution)h(En)m(vironmen)m +(t],)g(page)g(42\).)41 b(If)29 b(the)g Ft(lastpipe)e +Fu(option)j(is)150 3767 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(70\),)i(the)d(last)150 3876 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) +g(when)f(job)h(con)m(trol)i(is)f(not)f(activ)m(e.)275 +4004 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 4113 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(66\).)42 +b(If)30 b Ft(pipefail)150 4223 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 +4333 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 4442 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 4552 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 +4661 y(v)-5 b(alue.)150 4846 y Fk(3.2.4)63 b(Lists)41 +b(of)h(Commands)150 4993 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 +5103 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 +5230 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 5340 y(ha)m(v)m(e)32 b(equal)e(precedence.) +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(A)29 b(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 +408 y(alen)m(t)i(to)f(a)g(semicolon.)275 548 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 +658 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 767 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 877 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\),) -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 +(\(see)150 986 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(112\),)h +(the)d(standard)g(input)f(for)i(async)m(hronous)f(commands,)h(in)f(the) +150 1096 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 1236 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 +1345 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) +1485 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 1594 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 1734 y(An)30 b Fm(and)f Fu(list)i(has)f(the)h +(form)390 1874 y Fj(command1)46 b Ft(&&)h Fj(command2)150 +2013 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 2153 y(An)f Fm(or)f Fu(list)i(has)f(the)h(form)390 +2293 y Fj(command1)46 b Ft(||)h Fj(command2)150 2432 +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 +2572 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 2681 y(in)d(the)h(list.)150 2886 +y Fk(3.2.5)63 b(Comp)s(ound)42 b(Commands)150 3033 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 +3142 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 3252 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(37\))h(asso)s(ciated)f(with)150 3361 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 3471 y(plicitly)i(o)m(v)m(erridden.)275 +3611 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 +3720 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 3830 y(in)f(place)h(of)g(a)g(semicolon.)275 +3969 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 +4079 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150 +4283 y Fk(3.2.5.1)63 b(Lo)s(oping)43 b(Constructs)150 +4430 y Fu(Bash)31 b(supp)s(orts)d(the)j(follo)m(wing)g(lo)s(oping)g +(constructs.)275 4570 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 4680 y(replaced)c(with)f(one)h +(or)f(more)g(newlines.)150 4847 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 +4984 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(97\).)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(47\))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(70\))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)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 408 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 518 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 628 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 737 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 847 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 956 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 +1066 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 1176 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 1310 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 1420 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 1555 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 1665 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 1799 y Ft(select)46 b(fname)g(in)i(*;)870 +1909 y(do)870 2019 y(echo)f(you)g(picked)f($fname)g(\\\($REPLY\\\))870 +2128 y(break;)870 2238 y(done)150 2398 y(\(\(...)o(\)\))870 +2533 y(\(\()h Fj(expression)e Ft(\)\))630 2668 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 +2777 y(\(see)22 b(Section)f(6.5)h([Shell)f(Arithmetic],)j(page)d(97\).) +39 b(The)20 b Fr(expression)h Fu(undergo)s(es)f(the)h(same)630 +2887 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 +2996 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 3106 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 +3266 y Ft([[...)o(]])870 3401 y([[)47 b Fj(expression)e +Ft(]])630 3536 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 3646 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 3755 y(Section)37 b(6.4)g([Bash)f(Conditional)h +(Expressions],)g(page)g(95.)58 b(The)36 b(w)m(ords)f(b)s(et)m(w)m(een)i +(the)630 3865 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 3974 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 +4084 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 4194 +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 +4303 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 4413 y(as)j(primaries.)630 4548 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 +4657 y(curren)m(t)30 b(lo)s(cale.)630 4792 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 4902 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 +5011 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 +5121 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 5230 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(70\))630 5340 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)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(c)m(haracters.)41 b(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 408 y(\(`)p +Ft(!=)p Fu('\))j(the)g(pattern,)f(and)g(1)h(otherwise.)630 +543 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 +653 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 +763 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 +872 y(meaning.)630 1007 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 1117 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 1226 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 +1336 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 1445 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 1555 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 1665 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 1774 y Ft(shopt)d Fu(in)h(Section)h(4.3.2)h([The) +e(Shopt)f(Builtin],)k(page)e(70\))g(is)g(enabled,)g(the)g(matc)m(h)g +(is)630 1884 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 2019 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 +2128 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 +2238 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 +2347 y(b)s(e)c(matc)m(hed)h(literally)-8 b(.)630 2482 +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 2592 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 2701 y(regular)i(expression)f +(op)s(erators.)630 2836 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 2946 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 3055 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 +3165 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 3300 y +Ft([[)47 b($line)g(=~)g([[:space:]]*\(a\)?b)c(]])630 +3435 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 3544 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 3679 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 3789 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 3898 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 4008 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 4118 y(only)c(matc)m(h)i(a)f +(literal)g(`)p Ft(.)p Fu('.)630 4253 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 4362 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 4472 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 4581 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 4691 y(quoting.)630 4826 +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 4935 y(w)m(ork:)870 5070 y Ft([[)47 +b($line)g(=~)g(^"initial)e(string")h(]])630 5205 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 878 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 987 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 1097 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 1207 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 +1316 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 1426 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 +1567 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 +1676 y(order)30 b(of)g(precedence:)630 1848 y Ft(\()g +Fj(expression)e Ft(\))1110 1957 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 2067 y(normal)e(precedence)h(of) +g(op)s(erators.)630 2239 y Ft(!)f Fj(expression)1110 +2348 y Fu(T)-8 b(rue)30 b(if)g Fr(expression)g Fu(is)h(false.)630 +2520 y Fj(expression1)c Ft(&&)j Fj(expression2)1110 2630 +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 +2801 y Fj(expression1)c Ft(||)j Fj(expression2)1110 2911 +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 +3083 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 3192 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 3404 y Fk(3.2.5.3)63 +b(Grouping)43 b(Commands)150 3551 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 3661 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 3770 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 -y Fu(Placing)30 b(a)g(list)g(of)g(commands)f(b)s(et)m(w)m(een)h(curly)f +150 3948 y Ft(\(\))870 4089 y(\()47 b Fj(list)g Ft(\))630 +4229 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 +4339 y(subshell)33 b(\(see)h(Section)g(3.7.3)i([Command)c(Execution)j +(En)m(vironmen)m(t],)g(page)f(42\),)i(and)630 4449 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 4558 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 +4668 y(after)e(the)f(subshell)g(completes.)150 4839 y +Ft({})870 4980 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],)49 b(page)c(99\))h +(named)e Fr(NAME)51 b Fu(in)44 b(the)h(con)m(text)h(of)f(the)g +(executing)h(shell.)84 b(The)44 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 +(37\).)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(105\),)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(76\).)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(37\))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(47\).)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 658 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 767 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(22\).)75 b(The)150 877 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 +986 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 1096 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 +1235 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 1345 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 1455 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 +1564 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 1674 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 +1783 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(47,)i(for)c(the)i(description)f(of)150 +1893 y(the)c Ft(trap)e Fu(builtin.)275 2032 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 +2142 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 2252 y(to)31 b(ab)s(ort.)275 +2391 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 2501 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 2610 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 2720 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 2829 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 2939 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 +(exit)h(status)150 3049 y(of)h(the)f(last)h(command)f(executed)i(b)s +(efore)e(the)g Ft(return)p Fu(.)275 3188 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 +3298 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 +(imp)s(ortan)m(t)150 3407 y(when)j(a)i(shell)g(function)f(calls)h +(other)g(functions.)275 3547 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 +3656 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 3766 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) +3875 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 +4015 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 4125 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 +4234 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 4344 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 4453 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 +4563 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 +4702 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 4812 +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 4922 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 5061 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 5200 y Ft(In)47 +b(func2,)f(var)h(=)h(func1)e(local)390 5340 y(func1\(\))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)390 299 +y Ft({)581 408 y(local)46 b(var='func1)f(local')581 518 +y(func2)390 628 y(})390 847 y(func2\(\))390 956 y({)581 +1066 y(echo)i("In)f(func2,)h(var)f(=)i($var")390 1176 +y(})390 1395 y(var=global)390 1504 y(func1)275 1636 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 1745 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 +1855 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 1965 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 2074 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 2184 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 +2293 y(b)s(een)e(shado)m(w)m(ed)g(will)h(b)s(ecome)g(visible.)275 +2425 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 2535 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(54\).)83 +b(The)44 b Ft(-F)f Fu(option)150 2644 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 2754 +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 2863 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 2973 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 3083 y([Bourne)e(Shell)h(Builtins],)g(page)g(47\).)275 +3214 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 3324 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 +3433 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 3668 y Fs(3.4)68 b(Shell)45 b(P)l(arameters)150 +3827 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 +3937 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 +4047 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 4156 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 4266 y(page)h(54\).)275 4397 +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 4507 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 4639 +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 4770 y Fj(name)p +Ft(=[)p Fj(value)p Ft(])150 4902 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 5011 +y(expansion,)25 b(parameter)f(and)f(v)-5 b(ariable)25 +b(expansion,)g(command)e(substitution,)i(arithmetic)g(expansion,)150 +5121 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 5230 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 5340 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\).)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(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 408 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 518 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 628 y(Mo)s(de],)h(page)f(105\),)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 737 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 867 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 +977 y(arra)m(y)38 b(index)e(\(see)i(Section)g(6.7)h([Arra)m(ys],)g +(page)f(99\),)j(the)c(`)p Ft(+=)p Fu(')g(op)s(erator)g(can)h(b)s(e)e +(used)h(to)h(app)s(end)150 1086 y(to)e(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 +1196 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 1305 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 1415 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 +1525 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 1634 y([Arra)m(ys],)j(page)e(99\),)j(the)43 +b(v)-5 b(ariable's)44 b(v)-5 b(alue)44 b(is)g(not)f(unset)g(\(as)h(it)g +(is)f(when)g(using)f(`)p Ft(=)p Fu('\),)48 b(and)42 b(new)150 +1744 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 1853 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 1963 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 2093 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 2202 y Ft(local)f Fu(builtin)h(commands)g(\(see) +i(Section)f(4.2)h([Bash)f(Builtins],)h(page)f(54\))h(to)f(create)i(a)e +Fr(nameref)p Fu(,)g(or)g(a)150 2312 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 +2422 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 2531 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 2641 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 +2750 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 2860 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 2990 y Ft(declare)46 +b(-n)h(ref=$1)150 3120 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 +3229 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 3339 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 3448 y(w)m(as)h(passed)f(as)g +Ft($1)p Fu(.)275 3578 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 +3688 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 3798 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 3907 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 +4017 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 4126 y(Shell)43 b(Builtins],)j(page)e(47\).)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 4236 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 +-5 b(ariable)31 b(will)g(b)s(e)f(unset.)150 4426 y Fk(3.4.1)63 +b(P)m(ositional)41 b(P)m(arameters)150 4573 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) +4682 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) +m(v)m(ok)m(ed,)150 4792 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 +b(parameter)e Ft(N)g Fu(ma)m(y)h(b)s(e)150 4902 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 5011 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 +5121 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h +(Builtin)g(Commands],)h(page)f(47\).)68 b(The)39 b(p)s(ositional)150 +5230 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 +5340 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(19\).)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)275 299 +y(When)27 b(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 +408 y(b)s(e)h(enclosed)h(in)f(braces.)150 596 y Fk(3.4.2)63 +b(Sp)s(ecial)41 b(P)m(arameters)150 743 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 +853 y(assignmen)m(t)31 b(to)g(them)g(is)f(not)h(allo)m(w)m(ed.)150 +1000 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 +1110 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 1220 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 +1329 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 +1439 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 +1548 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 1658 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 1767 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 1877 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 2025 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 2134 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 2244 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 2354 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 2463 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 2573 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 +2682 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 2792 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 2902 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 3011 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 3121 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 3230 y(they)j(are)f(remo)m(v)m +(ed\).)150 3378 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) +3526 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 +3635 y(pip)s(eline.)150 3783 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 +3893 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 +Ft(-i)630 4002 y Fu(option\).)150 4150 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 +4260 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.)150 4407 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 +4517 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) +4627 y(\(see)31 b(Section)h(7.2)f([Job)f(Con)m(trol)h(Builtins],)g +(page)h(113\).)150 4774 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 +b(is)g(set)h(at)h(shell)630 4884 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 4994 y(Scripts],)g(page)g(45\),)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 5103 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(90\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)f(\014rst)630 +5213 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 +5322 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.)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 Fs(3.5)68 b(Shell)45 b(Expansions)150 458 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 568 y(sev)m(en)j(kinds)e(of)i(expansion)f(p)s(erformed:)225 +701 y Fq(\017)60 b Fu(brace)31 b(expansion)225 834 y +Fq(\017)60 b Fu(tilde)31 b(expansion)225 967 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 +1100 y Fq(\017)60 b Fu(command)30 b(substitution)225 +1233 y Fq(\017)60 b Fu(arithmetic)32 b(expansion)225 +1366 y Fq(\017)60 b Fu(w)m(ord)30 b(splitting)225 1499 +y Fq(\017)60 b Fu(\014lename)31 b(expansion)275 1655 +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 1765 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 1874 y(w)m(ord)d(splitting;)h(and)f(\014lename)h +(expansion.)275 2007 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 2117 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 +2226 y(expansion)g(and)g(command)g(substitution.)275 +2359 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 +2469 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 +2602 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 +2711 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 2821 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 2931 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(99\).)275 3064 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(37\))h(is)150 3173 y(p)s(erformed.)150 +3369 y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 3516 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 3626 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 3736 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 +3845 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 3955 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 4064 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 +4174 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ) +m(t.)275 4307 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 4416 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 4549 y Ft(bash$)46 +b(echo)h(a{d,c,b}e)390 4659 y(ade)g(ace)g(abe)275 4792 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 4902 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 +5011 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 5121 +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 5230 +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 +5340 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)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(to)34 b(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 408 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 518 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 +628 y(as)i(appropriate.)275 764 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 873 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 983 +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 1119 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 +1228 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 1338 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275 +1474 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 1583 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 1693 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 1829 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 1939 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 2074 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o +(ew,)o(dist)o(,bug)o(s})275 2210 y Fu(or)390 2346 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 +2547 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 2694 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 2804 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 2913 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 +3023 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 3132 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 3242 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 3352 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 3487 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 3597 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 3733 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 3843 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 3952 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 4062 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 +(k],)150 4171 y(page)34 b(101\).)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 4281 y(`)p Ft(-)p +Fu(',)e(`)p Ft(+)p Fu(')f(is)h(assumed.)275 4417 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 +4553 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 +(wing)150 4662 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 +b(one)150 4772 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 +4882 y(assigns)j(the)f(expanded)g(v)-5 b(alue.)275 5018 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 +(unquoted)e(tilde-pre\014xes:)150 5179 y Ft(~)432 b Fu(The)30 +b(v)-5 b(alue)31 b(of)f Ft($HOME)150 5340 y(~/foo)240 +b($HOME/foo)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(~fred/foo)630 408 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 576 y(~+/foo)192 b($PWD/foo)150 744 y(~-/foo)g +(${OLDPWD-'~-'}/foo)150 912 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 1080 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 644 y Ft(~+)p +(y)f(`)p Ft(dirs)g(+)p Fj(N)p Fu(')150 1248 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 +(ed)h(b)m(y)f(`)p Ft(dirs)g(-)p Fj(N)p Fu(')275 1421 +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 1530 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 1640 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 +1749 y(ab)s(o)m(v)m(e,)d(when)d(in)h Fm(posix)g Fu(mo)s(de.)150 +1957 y Fk(3.5.3)63 b(Shell)41 b(P)m(arameter)f(Expansion)150 +2104 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 +2214 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 2323 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 2433 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 2576 +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 2686 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 +2795 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)275 +2938 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 3048 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 +3157 y(P)m(arameters],)e(page)f(21\))h(or)e(an)g(arra)m(y)h(reference)f +(\(see)i(Section)f(6.7)g([Arra)m(ys],)g(page)g(99\).)42 +b(The)29 b(braces)150 3267 y(are)j(required)g(when)f Fr(parameter)39 b Fu(is)32 b(a)h(p)s(ositional)f(parameter)h(with)f -(more)g(than)g(one)g(digit,)i(or)e(when)150 2965 y Fr(parameter)37 +(more)g(than)g(one)g(digit,)i(or)e(when)150 3377 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 +3520 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 -(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 +Fr(parameter)42 b Fu(is)34 b(not)i(a)150 3629 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 +3739 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 3848 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 +3958 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 4068 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 4177 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 4287 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 4396 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 +4506 y(in)m(tro)s(duce)i(indirection.)275 4649 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 4759 y(command)30 b(substitution,)g(and)g(arithmetic)i +(expansion.)275 4902 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 5011 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 5121 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 5230 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 -(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 +(the)150 5340 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)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 Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p Ft(})630 +408 y Fu(If)30 b 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 518 y(the)31 b(v)-5 b(alue)30 b(of)h +Fr(parameter)37 b Fu(is)31 b(substituted.)870 661 y Ft($)47 +b(v=123)870 771 y($)g(echo)g(${v-unset})870 881 y(123)150 +1058 y(${)p Fj(parameter)p Ft(:=)p Fj(word)p Ft(})630 +1167 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 1277 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 +b(parameters)e(and)f(sp)s(ecial)630 1386 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 +1530 y Ft($)47 b(var=)870 1639 y($)g(:)h(${var:=DEFAULT})870 +1749 y($)f(echo)g($var)870 1858 y(DEFAULT)150 2035 y(${)p +Fj(parameter)p Ft(:?)p Fj(word)p Ft(})630 2145 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 +2255 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 2364 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 2508 y Ft($)47 b(var=)870 2617 y($)g(:)h(${var:?var) +d(is)i(unset)f(or)i(null})870 2727 y(bash:)e(var:)h(var)g(is)g(unset)f +(or)i(null)150 2904 y(${)p Fj(parameter)p Ft(:+)p Fj(word)p +Ft(})630 3013 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 3123 y(of)31 b Fr(w)m(ord)i Fu(is)e(substituted.) +870 3266 y Ft($)47 b(var=123)870 3376 y($)g(echo)g(${var:+var)e(is)i +(set)g(and)g(not)g(null})870 3485 y(var)g(is)g(set)g(and)g(not)g(null) +150 3662 y(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(})150 +3772 y(${)p Fj(parameter)p Ft(:)p Fj(offset)p Ft(:)p +Fj(lengt)o(h)p Ft(})630 3882 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 3991 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 4101 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 4210 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 4320 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) +4430 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 +Fu(are)e(arithmetic)630 4539 y(expressions)30 b(\(see)h(Section)g(6.5)h +([Shell)e(Arithmetic],)i(page)f(97\).)630 4682 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 +(o\013set)630 4792 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 +b Fr(length)h Fu(ev)-5 b(aluates)35 b(to)g(a)630 4902 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 +5011 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) +(and)d(the)h(expansion)630 5121 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 +b(Note)40 b(that)g(a)g(negativ)m(e)h(o\013set)630 5230 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 +5340 y(with)j(the)h(`)p Ft(:-)p Fu(')f(expansion.)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(Here)43 b(are)g(some)f(examples)h(illustrating)g(substring)f +(expansion)g(on)g(parameters)h(and)630 408 y(subscripted)29 +b(arra)m(ys:)630 628 y Ft($)47 b(string=01234567890abcdefgh)630 +737 y($)g(echo)g(${string:7})630 847 y(7890abcdefgh)630 +956 y($)g(echo)g(${string:7:0})630 1176 y($)g(echo)g(${string:7:2})630 +1285 y(78)630 1395 y($)g(echo)g(${string:7:-2})630 1504 +y(7890abcdef)630 1614 y($)g(echo)g(${string:)e(-7})630 +1724 y(bcdefgh)630 1833 y($)i(echo)g(${string:)e(-7:0})630 +2052 y($)i(echo)g(${string:)e(-7:2})630 2162 y(bc)630 +2271 y($)i(echo)g(${string:)e(-7:-2})630 2381 y(bcdef)630 +2491 y($)i(set)g(--)h(01234567890abcdefgh)630 2600 y($)f(echo)g(${1:7}) +630 2710 y(7890abcdefgh)630 2819 y($)g(echo)g(${1:7:0})630 +3039 y($)g(echo)g(${1:7:2})630 3148 y(78)630 3258 y($)g(echo)g +(${1:7:-2})630 3367 y(7890abcdef)630 3477 y($)g(echo)g(${1:)g(-7})630 +3587 y(bcdefgh)630 3696 y($)g(echo)g(${1:)g(-7:0})630 +3915 y($)g(echo)g(${1:)g(-7:2})630 4025 y(bc)630 4134 +y($)g(echo)g(${1:)g(-7:-2})630 4244 y(bcdef)630 4354 +y($)g(array[0]=01234567890abcdef)o(gh)630 4463 y($)g(echo)g +(${array[0]:7})630 4573 y(7890abcdefgh)630 4682 y($)g(echo)g +(${array[0]:7:0})630 4902 y($)g(echo)g(${array[0]:7:2})630 +5011 y(78)630 5121 y($)g(echo)g(${array[0]:7:-2})630 +5230 y(7890abcdef)630 5340 y($)g(echo)g(${array[0]:)e(-7})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(bcdefgh)630 408 y($)47 b(echo)g(${array[0]:)e(-7:0})630 +628 y($)i(echo)g(${array[0]:)e(-7:2})630 737 y(bc)630 +847 y($)i(echo)g(${array[0]:)e(-7:-2})630 956 y(bcdef)630 +1084 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)s(eginning)e(at)i Fr(o\013set)p Fu(.)630 1194 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 +1303 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 +b(It)28 b(is)g(an)630 1413 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 +(than)f(zero.)630 1541 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 -%%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) +1650 y(eters:)630 1778 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 1888 +y($)g(echo)g(${@:7})630 1998 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 2107 y($)g(echo)g(${@:7:0})630 2326 y($)g(echo)g(${@:7:2}) +630 2436 y(7)g(8)630 2545 y($)g(echo)g(${@:7:-2})630 +2655 y(bash:)f(-2:)h(substring)f(expression)f(<)i(0)630 +2765 y($)g(echo)g(${@:)g(-7:2})630 2874 y(b)g(c)630 2984 +y($)g(echo)g(${@:0})630 3093 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 3203 y($)f(echo)g(${@:0:2}) +630 3313 y(./bash)f(1)630 3422 y($)h(echo)g(${@:)g(-7:0})630 +3660 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 3769 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 3879 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 3988 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 +4098 y(than)30 b(zero.)630 4226 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 -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 -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 +(arra)m(ys:)630 4354 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 4463 +y($)f(echo)g(${array[@]:7})630 4573 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 4682 y($)g(echo)g(${array[@]:7:2})630 +4792 y(7)g(8)630 4902 y($)g(echo)g(${array[@]:)e(-7:2})630 +5011 y(b)i(c)630 5121 y($)g(echo)g(${array[@]:)e(-7:-2})630 +5230 y(bash:)h(-2:)h(substring)f(expression)f(<)i(0)630 +5340 y($)g(echo)g(${array[@]:0})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(0)47 b(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 408 y($)g(echo)g(${array[@]:0:2})630 518 +y(0)g(1)630 628 y($)g(echo)g(${array[@]:)e(-7:0})630 +902 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 +1066 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 1176 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 +1285 y(parameters)h(are)f(used,)g Ft($0)g Fu(is)g(pre\014xed)g(to)h +(the)f(list.)150 1504 y Ft(${!)p Fj(prefix)p Ft(*})150 +1614 y(${!)p Fj(prefix)p Ft(@})630 1724 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 +1833 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 1943 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 +2052 y(w)m(ord.)150 2271 y Ft(${!)p Fj(name)p Ft([@]})150 +2381 y(${!)p Fj(name)p Ft([*]})630 2491 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 2600 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 2710 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 2819 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 +3039 y Ft(${#)p Fj(parameter)p Ft(})630 3148 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 +3258 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 3367 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 3477 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 3587 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 +3696 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 +3806 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 +3915 y(last)g(elemen)m(t.)150 4134 y Ft(${)p Fj(parameter)p +Ft(#)p Fj(word)p Ft(})150 4244 y(${)p Fj(parameter)p +Ft(##)p Fj(word)p Ft(})630 4354 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 4463 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 4573 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 4682 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)630 4792 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 4902 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 5011 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 5121 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 5230 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 +5340 y(the)h(resultan)m(t)g(list.)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)150 299 +y Ft(${)p Fj(parameter)p Ft(\045)p Fj(word)p Ft(})150 +408 y(${)p Fj(parameter)p Ft(\045\045)p Fj(word)p Ft(})630 +518 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 +628 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 737 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 +Fr(parameter)p Fu(,)630 847 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 Fu(with)39 b(the)h(shortest)630 956 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 +1066 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(al)34 b(op)s(eration)g(is)f(applied)f(to)630 1176 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 +(the)f(resultan)m(t)h(list.)61 b(If)630 1285 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(al)630 1395 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 +(is)630 1504 y(the)h(resultan)m(t)g(list.)150 1677 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 -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 +Ft(})150 1786 y(${)p Fj(parameter)p Ft(//)p Fj(pattern)p +Ft(/)p Fj(str)o(ing)p Ft(})150 1896 y(${)p Fj(parameter)p +Ft(/#)p Fj(pattern)p Ft(/)p Fj(str)o(ing)p Ft(})150 2005 +y(${)p Fj(parameter)p Ft(/\045)p Fj(pattern)p Ft(/)p +Fj(str)o(ing)p Ft(})630 2115 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 2225 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 +2334 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 2444 y(expansion,)25 b(arithmetic)g(expansion,)g(command) +e(and)g(pro)s(cess)g(substitution,)i(and)e(quote)630 +2553 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 +2663 y(Section)c(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(36\).) +630 2804 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 2913 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 +3023 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 3133 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 3242 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 3352 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 +3461 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 3571 +y(follo)m(wing)k Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)630 +3712 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 3821 y(instances)22 b(of)g(`)p Ft(&)p Fu(')g(in)g +Fr(string)29 b Fu(are)23 b(replaced)f(with)f(the)h(matc)m(hing)h(p)s +(ortion)f(of)g Fr(pattern)p Fu(.)38 b(This)630 3931 y(is)28 +b(in)m(tended)g(to)h(duplicate)f(a)h(common)f Ft(sed)f +Fu(idiom.)40 b(Bac)m(kslash)30 b(is)e(used)f(to)h(quote)h(`)p +Ft(&)p Fu(')f(in)630 4041 y Fr(string)8 b Fu(;)33 b(the)f(bac)m(kslash) +h(is)f(remo)m(v)m(ed)h(in)f(order)g(to)h(p)s(ermit)e(a)i(literal)g(`)p +Ft(&)p Fu(')g(in)e(the)i(replace-)630 4150 y(men)m(t)38 +b(string.)63 b(P)m(attern)38 b(substitution)g(p)s(erforms)e(the)i(c)m +(hec)m(k)h(for)e(`)p Ft(&)p Fu(')h(after)g(expanding)630 +4260 y Fr(string)p Fu(,)28 b(so)f(users)f(should)f(tak)m(e)k(care)e(to) +h(quote)f(bac)m(kslashes)h(in)m(tended)e(to)i(escap)s(e)f(the)g(`)p +Ft(&)p Fu(')630 4369 y(and)36 b(inhibit)g(replacemen)m(t)i(so)f(they)f +(surviv)m(e)h(an)m(y)g(quote)g(remo)m(v)-5 b(al)37 b(p)s(erformed)e(b)m +(y)i(the)630 4479 y(expansion)30 b(of)h Fr(string)p Fu(.)40 +b(F)-8 b(or)32 b(instance,)870 4620 y Ft(var=abcdef)870 +4729 y(echo)47 b(${var/abc/&)d(})870 4839 y(echo)j("${var/abc/&)d(}") +870 4949 y(echo)j(${var/abc/"&)d("})630 5089 y Fu(will)31 +b(displa)m(y)f(three)h(lines)f(of)h Ft(")p Fu(ab)s(c)f(def)p +Ft(")p Fu(,)g(while)870 5230 y Ft(var=abcdef)870 5340 +y(echo)47 b(${var/abc/\\&)d(})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)870 299 +y Ft(echo)47 b("${var/abc/\\&)d(}")870 408 y(echo)j(${var/abc/"\\&)d +("})630 551 y Fu(will)36 b(displa)m(y)f(t)m(w)m(o)i(lines)f(of)f +Ft(")p Fu(ab)s(c)g(def)p Ft(")g Fu(and)g(a)h(third)e(line)i(of)g +Ft(")p Fu(&)f(def)p Ft(")p Fu(.)55 b(The)35 b(\014rst)g(t)m(w)m(o)630 +661 y(are)45 b(replaced)f(b)s(ecause)h(the)f(bac)m(kslash)h(is)g(remo)m +(v)m(ed)g(b)m(y)f(quote)h(remo)m(v)-5 b(al)45 b(p)s(erformed)630 +770 y(during)35 b(the)i(expansion)f(of)g Fr(string)44 +b Fu(\(the)37 b(expansion)f(is)h(p)s(erformed)d(in)i(a)h(con)m(text)h +(that)630 880 y(do)s(esn't)45 b(tak)m(e)i(an)m(y)f(enclosing)h(double)e +(quotes)h(in)m(to)g(accoun)m(t,)52 b(as)45 b(with)h(other)f(w)m(ord)630 +989 y(expansions\).)50 b(In)32 b(the)i(third)e(case,)k(the)d(double)g +(quotes)h(a\013ect)h(the)e(expansion)g(of)h(`)p Ft(\\&)p +Fu(',)630 1099 y(and,)i(b)s(ecause)g(`)p Ft(&)p Fu(')g(is)f(not)h(one)g +(of)f(the)h(c)m(haracters)h(for)e(whic)m(h)g(bac)m(kslash)i(is)e(sp)s +(ecial)h(in)630 1208 y(double)c(quotes,)h(the)f(bac)m(kslash)g(surviv)m +(es)g(the)g(expansion,)h(inhibits)e(the)h(replacemen)m(t,)630 +1318 y(but)23 b(is)h(remo)m(v)m(ed)h(b)s(ecause)f(it)g(is)g(treated)h +(sp)s(ecially)-8 b(.)40 b(One)23 b(could)h(use)g(`)p +Ft(\\\\&)p Fu(',)h(unquoted,)g(as)630 1428 y(the)31 b(replacemen)m(t)h +(string)f(to)h(ac)m(hiv)m(e)h(the)e(same)g(e\013ect.)44 +b(It)31 b(should)f(rarely)h(b)s(e)g(necessary)630 1537 +y(to)g(enclose)h(only)e Fr(string)38 b Fu(in)30 b(double)g(quotes.)630 +1680 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 +1789 y([The)23 b(Shopt)g(Builtin],)j(page)e(70\))h(is)e(enabled,)i(the) +f(matc)m(h)g(is)g(p)s(erformed)e(without)h(regard)630 +1899 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 2008 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 2118 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 2228 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 2337 y(the)h(expansion)f(is)g(the)h(resultan)m(t)g +(list.)150 2513 y Ft(${)p Fj(parameter)p Ft(^)p Fj(pattern)p +Ft(})150 2622 y(${)p Fj(parameter)p Ft(^^)p Fj(pattern)p +Ft(})150 2732 y(${)p Fj(parameter)p Ft(,)p Fj(pattern)p +Ft(})150 2841 y(${)p Fj(parameter)p Ft(,,)p Fj(pattern)p +Ft(})630 2951 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 3061 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 3170 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 3280 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(pattern)g(should)f(not)h(attempt)630 3389 y(to)e(matc)m(h)g(more)g +(than)f(one)h(c)m(haracter.)630 3532 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 +3641 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 3751 +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 3861 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 3970 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 +4113 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 +4222 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 4332 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 +4441 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 +4551 y(list.)150 4726 y Ft(${)p Fj(parameter)p Ft(@)p +Fj(operator)p Ft(})630 4836 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 4945 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 +5055 y Fu(is)j(a)h(single)g(letter:)630 5230 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 +5340 y(ercase)g(alphab)s(etic)g(c)m(haracters)h(con)m(v)m(erted)g(to)f +(upp)s(ercase.)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 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 408 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 573 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 +682 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 846 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 +956 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630 +1120 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 1229 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 -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 +1339 y(anism.)630 1503 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 1613 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 1722 y(the)31 b(Prompt],)f(page)h(103\).)630 +1886 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 +1996 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 2105 +y(its)31 b(attributes)g(and)e(v)-5 b(alue.)630 2269 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 +2379 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 +2489 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 +2598 y(page)31 b(99\).)630 2762 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 2872 y(rameter)7 +b Fu('s)31 b(attributes.)630 3036 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 3145 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.)630 3309 y(If)k Fr(parameter)37 b Fu(is)30 +b(`)p Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)g(the)g(op)s(eration)g(is)g +(applied)f(to)i(eac)m(h)g(p)s(ositional)f(parameter)630 +3419 y(in)24 b(turn,)g(and)f(the)h(expansion)g(is)g(the)g(resultan)m(t) +h(list.)39 b(If)23 b Fr(parameter)31 b Fu(is)24 b(an)g(arra)m(y)g(v)-5 +b(ariable)630 3529 y(subscripted)24 b(with)h(`)p Ft(@)p +Fu(')h(or)g(`)p Ft(*)p Fu(',)h(the)e(op)s(eration)h(is)g(applied)f(to)h +(eac)m(h)h(mem)m(b)s(er)e(of)h(the)f(arra)m(y)630 3638 +y(in)30 b(turn,)g(and)f(the)i(expansion)f(is)h(the)f(resultan)m(t)h +(list.)630 3775 y(The)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 +3885 y(as)j(describ)s(ed)e(b)s(elo)m(w.)150 4089 y Fk(3.5.4)63 +b(Command)41 b(Substitution)150 4235 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 4345 y(Command)29 b(substitution)h(o)s(ccurs)h (when)e(a)i(command)f(is)g(enclosed)h(as)g(follo)m(ws:)390 -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 +4484 y Ft($\()p Fj(command)p Ft(\))150 4623 y Fu(or)390 +4762 y Ft(`)p Fj(command)p Ft(`)150 4902 y Fu(Bash)20 b(p)s(erforms)f(the)i(expansion)f(b)m(y)g(executing)i Fr(command)h Fu(in)d(a)h(subshell)e(en)m(vironmen)m(t)i(and)f -(replacing)150 3475 y(the)40 b(command)g(substitution)f(with)h(the)g +(replacing)150 5011 y(the)40 b(command)g(substitution)f(with)h(the)g (standard)f(output)g(of)h(the)g(command,)i(with)e(an)m(y)g(trailing)150 -3585 y(newlines)e(deleted.)64 b(Em)m(b)s(edded)37 b(newlines)h(are)g +5121 y(newlines)e(deleted.)64 b(Em)m(b)s(edded)37 b(newlines)h(are)g (not)g(deleted,)j(but)d(they)g(ma)m(y)h(b)s(e)e(remo)m(v)m(ed)i(during) -150 3694 y(w)m(ord)30 b(splitting.)42 b(The)30 b(command)g +150 5230 y(w)m(ord)30 b(splitting.)42 b(The)30 b(command)g (substitution)h Ft($\(cat)e Fj(file)p Ft(\))g Fu(can)h(b)s(e)g -(replaced)h(b)m(y)g(the)f(equiv)-5 b(alen)m(t)150 3804 -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 +(replaced)h(b)m(y)g(the)f(equiv)-5 b(alen)m(t)150 5340 +y(but)30 b(faster)g Ft($\(<)g Fj(file)p Ft(\))p Fu(.)p +eop end +%%Page: 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)275 299 +y(When)33 b(the)i(old-st)m(yle)h(bac)m(kquote)f(form)f(of)g (substitution)g(is)g(used,)h(bac)m(kslash)f(retains)h(its)f(literal)150 -4047 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e(`)p +408 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e(`)p Ft($)p Fu(',)j(`)p Ft(`)p Fu(',)f(or)e(`)p Ft(\\)p Fu('.)64 b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g(b)m(y)g(a)150 -4157 y(bac)m(kslash)k(terminates)f(the)h(command)e(substitution.)72 +518 y(bac)m(kslash)k(terminates)f(the)h(command)e(substitution.)72 b(When)41 b(using)f(the)i Ft($\()p Fj(command)p Ft(\))c -Fu(form,)43 b(all)150 4266 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 -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 -(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 -y Fu(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5 +Fu(form,)43 b(all)150 628 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)f +(paren)m(theses)h(mak)m(e)g(up)f(the)g(command;)h(none)f(are)h(treated) +g(sp)s(ecially)-8 b(.)275 762 y(Command)22 b(substitutions)g(ma)m(y)i +(b)s(e)e(nested.)39 b(T)-8 b(o)23 b(nest)g(when)f(using)h(the)g(bac)m +(kquoted)h(form,)g(escap)s(e)150 872 y(the)31 b(inner)e(bac)m(kquotes)j +(with)e(bac)m(kslashes.)275 1007 y(If)e(the)i(substitution)e(app)s +(ears)h(within)g(double)f(quotes,)i(w)m(ord)f(splitting)h(and)f +(\014lename)g(expansion)150 1116 y(are)i(not)f(p)s(erformed)f(on)h(the) +h(results.)150 1316 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150 +1463 y Fu(Arithmetic)25 b(expansion)g(allo)m(ws)g(the)g(ev)-5 b(aluation)26 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g -(substitution)150 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 +(substitution)150 1572 y(of)31 b(the)f(result.)41 b(The)30 +b(format)g(for)g(arithmetic)i(expansion)e(is:)390 1707 +y Ft($\(\()47 b Fj(expression)e Ft(\)\))275 1841 y Fu(The)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 1951 +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 2061 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 2170 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 2280 +y(Arithmetic)31 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)275 +2415 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 2524 y(Arithmetic],)32 b(page)f(97\).)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 2634 y(to)f(the)g(standard)e(error) +h(and)g(no)g(substitution)g(o)s(ccurs.)150 2833 y Fk(3.5.6)63 +b(Pro)s(cess)42 b(Substitution)150 2980 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 +3090 y(It)d(tak)m(es)i(the)f(form)f(of)390 3224 y Ft(<\()p +Fj(list)p Ft(\))150 3359 y Fu(or)390 3494 y Ft(>\()p +Fj(list)p Ft(\))150 3628 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 +3738 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 3848 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 3957 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 4067 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 4176 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 +4286 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 +(\014les.)275 4421 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 +(with)g(parameter)g(and)150 4530 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 +150 4730 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)150 +4877 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 +4986 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 5121 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 5230 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()p +b(alue)150 5340 y(is)36 b(exactly)j Ft()p Fu(,)32 b(the)37 b(default,)h(then)e(sequences)h(of)67 -b Ft()p Fu(,)36 b Ft()p Fu(,)h(and)150 3782 +b Ft()p Fu(,)36 b Ft()p Fu(,)h(and)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 Ft()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 +408 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 -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 -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 +(ords.)150 518 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 628 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 +737 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 847 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 956 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 1066 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 +1208 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 1318 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 1427 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 +1537 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 1646 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 1756 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 +1866 y(argumen)m(t)31 b(remo)m(v)-5 b(al.)275 2007 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 2214 y Fk(3.5.8)63 b(Filename)41 b(Expansion)150 +2361 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 2471 y(page)d(66\),)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 2580 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 +2690 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 +2800 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 2909 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 3019 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 3128 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 3238 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 +3347 y(c)m(haracters.)275 3489 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 +3599 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 +Ft(dotglob)150 3709 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 3818 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 3928 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 4037 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 4179 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 4289 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 4399 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 4540 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 +(70,)g(for)f(a)g(descrip-)150 4650 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 +4792 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 4902 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 5011 +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 5121 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 5230 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 5340 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,)p eop +end +%%Page: 36 42 +TeXDict begin 36 41 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(36)150 299 +y(so)32 b(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 408 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 518 y Fu(option)i(is)f(disabled)g +(when)g Ft(GLOBIGNORE)d Fu(is)k(unset.)150 710 y Fk(3.5.8.1)63 +b(P)m(attern)40 b(Matc)m(hing)150 857 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 +967 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 1076 +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 1186 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 1317 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 1469 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 +1578 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 1688 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 +1797 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 1907 y(and)k(sub)s(directories.)150 +2059 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.) +150 2211 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 2321 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 2430 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 2540 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 2649 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 2759 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 +(including)g(it)g(as)h(the)630 2869 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) +(range)g(expressions)f(is)630 2978 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 +Ft(LC_COLLATE)d Fu(and)i Ft(LC_ALL)630 3088 y Fu(shell)31 +b(v)-5 b(ariables,)31 b(if)f(set.)630 3219 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 +Ft([abcdxyz])p Fu('.)630 3328 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 +(cales)630 3438 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 +(t)f(b)s(e)f(equiv)-5 b(alen)m(t)630 3547 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 +3657 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 +3767 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 +Ft(C)p Fu(',)g(or)f(enable)h(the)630 3876 y Ft(globasciiranges)c +Fu(shell)31 b(option.)630 4007 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 +Ft([:)p Fr(class)t Ft(:])p Fu(,)630 4117 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 +(de\014ned)e(in)h(the)h Fm(posix)f Fu(standard:)870 4247 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 +870 4357 y(print)g(punct)g(space)f(upper)h(word)190 b(xdigit)630 +4488 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 +b Ft(word)630 4597 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 4728 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 4838 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 4947 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 5078 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 5230 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 -(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 -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 -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 -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 -(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 -(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 +Fu(builtin,)i(the)g(shell)f(recognizes)j(sev)m(eral)150 +5340 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)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 +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 408 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 518 +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 692 y Ft(?\()p Fj(pattern-list)p +Ft(\))630 801 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 970 y Ft(*\()p Fj(pattern-list)p +Ft(\))630 1080 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 1249 y Ft(+\()p +Fj(pattern-list)p Ft(\))630 1359 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 1528 +y Ft(@\()p Fj(pattern-list)p Ft(\))630 1637 y Fu(Matc)m(hes)g(one)f(of) +f(the)h(giv)m(en)g(patterns.)150 1806 y Ft(!\()p Fj(pattern-list)p +Ft(\))630 1916 y Fu(Matc)m(hes)h(an)m(ything)f(except)g(one)g(of)f(the) +h(giv)m(en)g(patterns.)275 2090 y(When)26 b(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 2199 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 2309 +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 +2418 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 2528 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 +2638 y(when)k(matc)m(hing)j(\014lenames.)275 2782 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 2891 y(the)29 b(patterns)g(con)m +(tain)i(alternations)f(and)f(the)g(strings)g(con)m(tain)h(m)m(ultiple)g +(matc)m(hes.)42 b(Using)29 b(separate)150 3001 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 3110 +y(ma)m(y)31 b(b)s(e)f(faster.)150 3319 y Fk(3.5.9)63 +b(Quote)41 b(Remo)m(v)-7 b(al)150 3466 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 3576 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 3831 y Fs(3.6)68 b(Redirections)150 3990 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 +4100 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 4210 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 4319 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 +4429 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 4538 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 4648 y(in)g(the)h(order)f(they)g(app)s(ear,)g +(from)g(left)h(to)g(righ)m(t.)275 4792 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 4902 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 5011 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 5121 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 5230 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) -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 +5340 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)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(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 408 y(Shopt)f(Builtin],)h(page)g(70\).)275 +567 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 677 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 786 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 896 y(to)e(the)g(standard)e(output)h(\(\014le)h +(descriptor)f(1\).)275 1055 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 1164 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 1274 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 1384 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 +1542 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 +1701 y Ft(ls)47 b(>)h Fj(dirlist)d Ft(2>&1)150 1860 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 1970 y(\014le)h Fr(dirlist)p Fu(,)h(while)f(the)h(command)390 +2128 y Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)150 2287 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 2397 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 2556 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 2665 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 2775 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 -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 -y Ft(/dev/stdin)630 408 y Fu(File)32 b(descriptor)e(0)h(is)f -(duplicated.)150 577 y Ft(/dev/stdout)630 687 y Fu(File)i(descriptor)e -(1)h(is)f(duplicated.)150 856 y Ft(/dev/stderr)630 965 -y Fu(File)i(descriptor)e(2)h(is)f(duplicated.)150 1134 -y Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 1244 y -Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In)m -(ternet)h(address,)i(and)c Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s -(ort)630 1354 y(n)m(um)m(b)s(er)23 b(or)i(service)h(name,)g(Bash)f +2884 y(describ)s(ed)j(b)s(elo)m(w.)150 3080 y Ft(/dev/fd/)p +Fj(fd)630 3190 y Fu(If)h Fr(fd)j Fu(is)d(a)h(v)-5 b(alid)31 +b(in)m(teger,)h(\014le)e(descriptor)h Fr(fd)i Fu(is)d(duplicated.)150 +3374 y Ft(/dev/stdin)630 3483 y Fu(File)i(descriptor)e(0)h(is)f +(duplicated.)150 3667 y Ft(/dev/stdout)630 3777 y Fu(File)i(descriptor) +e(1)h(is)f(duplicated.)150 3960 y Ft(/dev/stderr)630 +4070 y Fu(File)i(descriptor)e(2)h(is)f(duplicated.)150 +4254 y Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 4363 +y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In) +m(ternet)h(address,)i(and)c Fr(p)s(ort)j Fu(is)f(an)f(in)m(teger)i(p)s +(ort)630 4473 y(n)m(um)m(b)s(er)23 b(or)i(service)h(name,)g(Bash)f (attempts)h(to)f(op)s(en)f(the)h(corresp)s(onding)f(TCP)g(so)s(c)m(k)m -(et.)150 1522 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630 -1632 y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 +(et.)150 4657 y Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)630 +4766 y Fu(If)41 b Fr(host)i Fu(is)f(a)g(v)-5 b(alid)41 b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c Fr(p)s(ort)j -Fu(is)f(an)f(in)m(teger)i(p)s(ort)630 1742 y(n)m(um)m(b)s(er)23 +Fu(is)f(an)f(in)m(teger)i(p)s(ort)630 4876 y(n)m(um)m(b)s(er)23 b(or)h(service)h(name,)h(Bash)e(attempts)h(to)g(op)s(en)f(the)g -(corresp)s(onding)f(UDP)i(so)s(c)m(k)m(et.)275 1915 y(A)30 +(corresp)s(onding)f(UDP)i(so)s(c)m(k)m(et.)275 5072 y(A)30 b(failure)h(to)g(op)s(en)e(or)i(create)h(a)e(\014le)h(causes)g(the)f -(redirection)h(to)g(fail.)275 2059 y(Redirections)f(using)e(\014le)i +(redirection)h(to)g(fail.)275 5230 y(Redirections)f(using)e(\014le)i (descriptors)f(greater)h(than)f(9)h(should)e(b)s(e)h(used)f(with)h -(care,)h(as)g(they)f(ma)m(y)150 2169 y(con\015ict)i(with)f(\014le)h +(care,)h(as)g(they)f(ma)m(y)150 5340 y(con\015ict)i(with)f(\014le)h (descriptors)f(the)g(shell)h(uses)f(in)m(ternally)-8 -b(.)150 2378 y Fk(3.6.1)63 b(Redirecting)40 b(Input)150 -2525 y Fu(Redirection)35 b(of)f(input)f(causes)i(the)f(\014le)g(whose)g -(name)g(results)g(from)g(the)g(expansion)g(of)g Fr(w)m(ord)k -Fu(to)d(b)s(e)150 2634 y(op)s(ened)d(for)g(reading)g(on)g(\014le)h -(descriptor)f Ft(n)p Fu(,)h(or)f(the)g(standard)g(input)f(\(\014le)i -(descriptor)f(0\))h(if)f Ft(n)g Fu(is)h(not)150 2744 -y(sp)s(eci\014ed.)275 2888 y(The)c(general)j(format)e(for)h -(redirecting)g(input)e(is:)390 3032 y Ft([)p Fj(n)p Ft(]<)p -Fj(word)150 3241 y Fk(3.6.2)63 b(Redirecting)40 b(Output)150 -3388 y Fu(Redirection)31 b(of)g(output)f(causes)h(the)f(\014le)h(whose) -f(name)g(results)h(from)e(the)i(expansion)f(of)h Fr(w)m(ord)i -Fu(to)f(b)s(e)150 3497 y(op)s(ened)d(for)g(writing)g(on)g(\014le)h -(descriptor)f Fr(n)p Fu(,)g(or)g(the)h(standard)e(output)h(\(\014le)h -(descriptor)f(1\))h(if)g Fr(n)e Fu(is)i(not)150 3607 -y(sp)s(eci\014ed.)40 b(If)30 b(the)g(\014le)h(do)s(es)f(not)h(exist)g -(it)g(is)f(created;)i(if)e(it)h(do)s(es)f(exist)h(it)g(is)g(truncated)f -(to)h(zero)g(size.)275 3751 y(The)e(general)j(format)e(for)h -(redirecting)g(output)f(is:)390 3895 y Ft([)p Fj(n)p -Ft(]>[|])p Fj(word)275 4039 y Fu(If)g(the)h(redirection)g(op)s(erator)g -(is)g(`)p Ft(>)p Fu(',)g(and)f(the)h Ft(noclobber)d Fu(option)j(to)g -(the)g Ft(set)f Fu(builtin)g(has)h(b)s(een)150 4148 y(enabled,)h(the)g +b(.)p eop end +%%Page: 39 45 +TeXDict begin 39 44 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(39)150 299 +y Fk(3.6.1)63 b(Redirecting)40 b(Input)150 446 y Fu(Redirection)35 +b(of)f(input)f(causes)i(the)f(\014le)g(whose)g(name)g(results)g(from)g +(the)g(expansion)g(of)g Fr(w)m(ord)k Fu(to)d(b)s(e)150 +555 y(op)s(ened)d(for)g(reading)g(on)g(\014le)h(descriptor)f +Ft(n)p Fu(,)h(or)f(the)g(standard)g(input)f(\(\014le)i(descriptor)f +(0\))h(if)f Ft(n)g Fu(is)h(not)150 665 y(sp)s(eci\014ed.)275 +805 y(The)c(general)j(format)e(for)h(redirecting)g(input)e(is:)390 +944 y Ft([)p Fj(n)p Ft(]<)p Fj(word)150 1149 y Fk(3.6.2)63 +b(Redirecting)40 b(Output)150 1296 y Fu(Redirection)31 +b(of)g(output)f(causes)h(the)f(\014le)h(whose)f(name)g(results)h(from)e +(the)i(expansion)f(of)h Fr(w)m(ord)i Fu(to)f(b)s(e)150 +1405 y(op)s(ened)d(for)g(writing)g(on)g(\014le)h(descriptor)f +Fr(n)p Fu(,)g(or)g(the)h(standard)e(output)h(\(\014le)h(descriptor)f +(1\))h(if)g Fr(n)e Fu(is)i(not)150 1515 y(sp)s(eci\014ed.)40 +b(If)30 b(the)g(\014le)h(do)s(es)f(not)h(exist)g(it)g(is)f(created;)i +(if)e(it)h(do)s(es)f(exist)h(it)g(is)g(truncated)f(to)h(zero)g(size.) +275 1654 y(The)e(general)j(format)e(for)h(redirecting)g(output)f(is:) +390 1794 y Ft([)p Fj(n)p Ft(]>[|])p Fj(word)275 1934 +y Fu(If)g(the)h(redirection)g(op)s(erator)g(is)g(`)p +Ft(>)p Fu(',)g(and)f(the)h Ft(noclobber)d Fu(option)j(to)g(the)g +Ft(set)f Fu(builtin)g(has)h(b)s(een)150 2043 y(enabled,)h(the)g (redirection)h(will)f(fail)h(if)e(the)i(\014le)e(whose)h(name)g (results)g(from)f(the)h(expansion)g(of)g Fr(w)m(ord)150 -4258 y Fu(exists)f(and)f(is)g(a)h(regular)g(\014le.)41 +2153 y Fu(exists)f(and)f(is)g(a)h(regular)g(\014le.)41 b(If)30 b(the)h(redirection)g(op)s(erator)g(is)f(`)p Ft(>|)p Fu(',)h(or)f(the)h(redirection)g(op)s(erator)g(is)150 -4367 y(`)p Ft(>)p Fu(')36 b(and)f(the)g Ft(noclobber)e +2262 y(`)p Ft(>)p Fu(')36 b(and)f(the)g Ft(noclobber)e Fu(option)j(is)g(not)g(enabled,)h(the)e(redirection)h(is)g(attempted)g -(ev)m(en)h(if)e(the)h(\014le)150 4477 y(named)30 b(b)m(y)g -Fr(w)m(ord)k Fu(exists.)150 4686 y Fk(3.6.3)63 b(App)s(ending)42 -b(Redirected)e(Output)150 4833 y Fu(Redirection)23 b(of)e(output)h(in)f +(ev)m(en)h(if)e(the)h(\014le)150 2372 y(named)30 b(b)m(y)g +Fr(w)m(ord)k Fu(exists.)150 2576 y Fk(3.6.3)63 b(App)s(ending)42 +b(Redirected)e(Output)150 2723 y Fu(Redirection)23 b(of)e(output)h(in)f (this)h(fashion)f(causes)h(the)g(\014le)g(whose)f(name)h(results)f -(from)g(the)h(expansion)g(of)150 4942 y Fr(w)m(ord)28 +(from)g(the)h(expansion)g(of)150 2833 y Fr(w)m(ord)28 b Fu(to)e(b)s(e)e(op)s(ened)g(for)h(app)s(ending)e(on)i(\014le)g (descriptor)g Fr(n)p Fu(,)g(or)g(the)g(standard)f(output)h(\(\014le)g -(descriptor)150 5052 y(1\))31 b(if)f Fr(n)g Fu(is)h(not)f(sp)s +(descriptor)150 2942 y(1\))31 b(if)f Fr(n)g Fu(is)h(not)f(sp)s (eci\014ed.)40 b(If)30 b(the)h(\014le)f(do)s(es)g(not)h(exist)g(it)g -(is)f(created.)275 5196 y(The)f(general)j(format)e(for)h(app)s(ending)e -(output)h(is:)390 5340 y Ft([)p Fj(n)p Ft(]>>)p Fj(word)p -eop end -%%Page: 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 -y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g -(Error)150 446 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g -(standard)g(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g -(standard)f(error)150 555 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g -(b)s(e)f(redirected)h(to)g(the)f(\014le)h(whose)f(name)h(is)f(the)g -(expansion)h(of)f Fr(w)m(ord)p Fu(.)275 712 y(There)f(are)i(t)m(w)m(o)h -(formats)e(for)h(redirecting)g(standard)e(output)h(and)g(standard)f -(error:)390 870 y Ft(&>)p Fj(word)150 1027 y Fu(and)390 -1184 y Ft(>&)p Fj(word)150 1341 y Fu(Of)h(the)g(t)m(w)m(o)i(forms,)e -(the)h(\014rst)e(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j -(equiv)-5 b(alen)m(t)32 b(to)390 1498 y Ft(>)p Fj(word)46 -b Ft(2>&1)275 1655 y Fu(When)41 b(using)g(the)h(second)f(form,)k -Fr(w)m(ord)f Fu(ma)m(y)e(not)g(expand)f(to)h(a)g(n)m(um)m(b)s(er)f(or)g -(`)p Ft(-)p Fu('.)75 b(If)41 b(it)h(do)s(es,)150 1764 -y(other)27 b(redirection)g(op)s(erators)f(apply)h(\(see)g(Duplicating)h -(File)f(Descriptors)h(b)s(elo)m(w\))f(for)f(compatibilit)m(y)150 -1874 y(reasons.)150 2096 y Fk(3.6.5)63 b(App)s(ending)42 -b(Standard)f(Output)g(and)g(Standard)g(Error)150 2243 -y Fu(This)33 b(construct)i(allo)m(ws)g(b)s(oth)f(the)g(standard)g -(output)f(\(\014le)i(descriptor)f(1\))h(and)f(the)g(standard)f(error) -150 2352 y(output)d(\(\014le)h(descriptor)f(2\))h(to)g(b)s(e)f(app)s -(ended)f(to)i(the)f(\014le)h(whose)f(name)g(is)h(the)f(expansion)h(of)f -Fr(w)m(ord)p Fu(.)275 2509 y(The)f(format)i(for)f(app)s(ending)f -(standard)h(output)g(and)f(standard)h(error)g(is:)390 -2666 y Ft(&>>)p Fj(word)150 2823 y Fu(This)g(is)g(seman)m(tically)j -(equiv)-5 b(alen)m(t)32 b(to)390 2980 y Ft(>>)p Fj(word)46 -b Ft(2>&1)275 3138 y Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g -(b)s(elo)m(w\).)150 3359 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150 -3506 y Fu(This)26 b(t)m(yp)s(e)g(of)h(redirection)g(instructs)f(the)g -(shell)h(to)g(read)f(input)g(from)g(the)g(curren)m(t)h(source)f(un)m -(til)h(a)g(line)150 3616 y(con)m(taining)h(only)e Fr(w)m(ord)k +(is)f(created.)275 3082 y(The)f(general)j(format)e(for)h(app)s(ending)e +(output)h(is:)390 3222 y Ft([)p Fj(n)p Ft(]>>)p Fj(word)150 +3426 y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g +(Standard)g(Error)150 3573 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s +(oth)f(the)g(standard)g(output)f(\(\014le)i(descriptor)f(1\))h(and)f +(the)g(standard)f(error)150 3683 y(output)d(\(\014le)h(descriptor)f +(2\))h(to)g(b)s(e)f(redirected)h(to)g(the)f(\014le)h(whose)f(name)h(is) +f(the)g(expansion)h(of)f Fr(w)m(ord)p Fu(.)275 3822 y(There)f(are)i(t)m +(w)m(o)h(formats)e(for)h(redirecting)g(standard)e(output)h(and)g +(standard)f(error:)390 3962 y Ft(&>)p Fj(word)150 4101 +y Fu(and)390 4241 y Ft(>&)p Fj(word)150 4381 y Fu(Of)h(the)g(t)m(w)m(o) +i(forms,)e(the)h(\014rst)e(is)i(preferred.)39 b(This)30 +b(is)g(seman)m(tically)j(equiv)-5 b(alen)m(t)32 b(to)390 +4520 y Ft(>)p Fj(word)46 b Ft(2>&1)275 4660 y Fu(When)41 +b(using)g(the)h(second)f(form,)k Fr(w)m(ord)f Fu(ma)m(y)e(not)g(expand) +f(to)h(a)g(n)m(um)m(b)s(er)f(or)g(`)p Ft(-)p Fu('.)75 +b(If)41 b(it)h(do)s(es,)150 4769 y(other)27 b(redirection)g(op)s +(erators)f(apply)h(\(see)g(Duplicating)h(File)f(Descriptors)h(b)s(elo)m +(w\))f(for)f(compatibilit)m(y)150 4879 y(reasons.)150 +5083 y Fk(3.6.5)63 b(App)s(ending)42 b(Standard)f(Output)g(and)g +(Standard)g(Error)150 5230 y Fu(This)33 b(construct)i(allo)m(ws)g(b)s +(oth)f(the)g(standard)g(output)f(\(\014le)i(descriptor)f(1\))h(and)f +(the)g(standard)f(error)150 5340 y(output)d(\(\014le)h(descriptor)f +(2\))h(to)g(b)s(e)f(app)s(ended)f(to)i(the)f(\014le)h(whose)f(name)g +(is)h(the)f(expansion)h(of)f Fr(w)m(ord)p Fu(.)p eop +end +%%Page: 40 46 +TeXDict begin 40 45 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(40)275 299 +y(The)29 b(format)i(for)f(app)s(ending)f(standard)h(output)g(and)f +(standard)h(error)g(is:)390 442 y Ft(&>>)p Fj(word)150 +585 y Fu(This)g(is)g(seman)m(tically)j(equiv)-5 b(alen)m(t)32 +b(to)390 728 y Ft(>>)p Fj(word)46 b Ft(2>&1)275 871 y +Fu(\(see)31 b(Duplicating)h(File)f(Descriptors)g(b)s(elo)m(w\).)150 +1079 y Fk(3.6.6)63 b(Here)41 b(Do)s(cumen)m(ts)150 1226 +y Fu(This)26 b(t)m(yp)s(e)g(of)h(redirection)g(instructs)f(the)g(shell) +h(to)g(read)f(input)g(from)g(the)g(curren)m(t)h(source)f(un)m(til)h(a)g +(line)150 1336 y(con)m(taining)h(only)e Fr(w)m(ord)k Fu(\(with)c(no)g(trailing)h(blanks\))f(is)g(seen.)40 b(All)27 b(of)f(the)g(lines)h(read)f(up)f(to)i(that)g(p)s(oin)m(t)150 -3725 y(are)k(then)f(used)f(as)i(the)g(standard)e(input)h(\(or)g(\014le) +1445 y(are)k(then)f(used)f(as)i(the)g(standard)e(input)h(\(or)g(\014le) h(descriptor)f Fr(n)g Fu(if)g Fr(n)g Fu(is)g(sp)s(eci\014ed\))g(for)h -(a)f(command.)275 3883 y(The)f(format)i(of)g(here-do)s(cumen)m(ts)f -(is:)390 4040 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p -Fj(word)772 4149 y(here-document)390 4259 y(delimiter)275 -4416 y Fu(No)i(parameter)h(and)f(v)-5 b(ariable)32 b(expansion,)h +(a)f(command.)275 1589 y(The)f(format)i(of)g(here-do)s(cumen)m(ts)f +(is:)390 1732 y Ft([)p Fj(n)p Ft(]<<[)p Fq(\000)p Ft(])p +Fj(word)772 1841 y(here-document)390 1951 y(delimiter)275 +2094 y Fu(No)i(parameter)h(and)f(v)-5 b(ariable)32 b(expansion,)h (command)f(substitution,)h(arithmetic)g(expansion,)g(or)150 -4525 y(\014lename)26 b(expansion)g(is)g(p)s(erformed)e(on)i +2204 y(\014lename)26 b(expansion)g(is)g(p)s(erformed)e(on)i Fr(w)m(ord)p Fu(.)39 b(If)25 b(an)m(y)i(part)e(of)h Fr(w)m(ord)j Fu(is)d(quoted,)i(the)e Fr(delimiter)33 b Fu(is)26 b(the)150 -4635 y(result)33 b(of)g(quote)g(remo)m(v)-5 b(al)34 b(on)f +2313 y(result)33 b(of)g(quote)g(remo)m(v)-5 b(al)34 b(on)f Fr(w)m(ord)p Fu(,)g(and)f(the)h(lines)g(in)g(the)g(here-do)s(cumen)m(t) -g(are)g(not)g(expanded.)47 b(If)150 4745 y Fr(w)m(ord)26 +g(are)g(not)g(expanded.)47 b(If)150 2423 y Fr(w)m(ord)26 b Fu(is)c(unquoted,)h(all)g(lines)g(of)g(the)f(here-do)s(cumen)m(t)g (are)h(sub)5 b(jected)22 b(to)h(parameter)g(expansion,)h(com-)150 -4854 y(mand)30 b(substitution,)g(and)g(arithmetic)h(expansion,)g(the)f +2532 y(mand)30 b(substitution,)g(and)g(arithmetic)h(expansion,)g(the)f (c)m(haracter)i(sequence)f Ft(\\newline)d Fu(is)j(ignored,)150 -4964 y(and)f(`)p Ft(\\)p Fu(')g(m)m(ust)h(b)s(e)e(used)h(to)h(quote)g +2642 y(and)f(`)p Ft(\\)p Fu(')g(m)m(ust)h(b)s(e)e(used)h(to)h(quote)g (the)g(c)m(haracters)g(`)p Ft(\\)p Fu(',)g(`)p Ft($)p -Fu(',)g(and)f(`)p Ft(`)p Fu('.)275 5121 y(If)21 b(the)i(redirection)g +Fu(',)g(and)f(`)p Ft(`)p Fu('.)275 2785 y(If)21 b(the)i(redirection)g (op)s(erator)g(is)f(`)p Ft(<<-)p Fu(',)i(then)e(all)h(leading)g(tab)g (c)m(haracters)h(are)e(stripp)s(ed)f(from)h(input)150 -5230 y(lines)33 b(and)f(the)h(line)h(con)m(taining)g +2895 y(lines)33 b(and)f(the)h(line)h(con)m(taining)g Fr(delimiter)p Fu(.)49 b(This)32 b(allo)m(ws)i(here-do)s(cumen)m(ts)f -(within)f(shell)i(scripts)e(to)150 5340 y(b)s(e)e(inden)m(ted)g(in)g(a) -h(natural)f(fashion.)p eop end -%%Page: 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 Fk(3.6.7)63 b(Here)41 b(Strings)150 446 y Fu(A)30 b(v)-5 -b(arian)m(t)32 b(of)e(here)h(do)s(cumen)m(ts,)f(the)g(format)h(is:)390 -600 y Ft([)p Fj(n)p Ft(]<<<)46 b Fj(word)275 753 y Fu(The)29 -b Fr(w)m(ord)k Fu(undergo)s(es)c(tilde)i(expansion,)f(parameter)h(and)e -(v)-5 b(ariable)31 b(expansion,)f(command)g(sub-)150 -863 y(stitution,)f(arithmetic)f(expansion,)g(and)f(quote)h(remo)m(v)-5 +(within)f(shell)i(scripts)e(to)150 3004 y(b)s(e)e(inden)m(ted)g(in)g(a) +h(natural)f(fashion.)150 3212 y Fk(3.6.7)63 b(Here)41 +b(Strings)150 3359 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 3502 y Ft([)p Fj(n)p +Ft(]<<<)46 b Fj(word)275 3645 y Fu(The)29 b Fr(w)m(ord)k +Fu(undergo)s(es)c(tilde)i(expansion,)f(parameter)h(and)e(v)-5 +b(ariable)31 b(expansion,)f(command)g(sub-)150 3755 y(stitution,)f +(arithmetic)f(expansion,)g(and)f(quote)h(remo)m(v)-5 b(al.)41 b(Filename)29 b(expansion)e(and)f(w)m(ord)h(splitting)150 -973 y(are)35 b(not)g(p)s(erformed.)51 b(The)34 b(result)h(is)g +3865 y(are)35 b(not)g(p)s(erformed.)51 b(The)34 b(result)h(is)g (supplied)e(as)i(a)f(single)i(string,)f(with)g(a)g(newline)f(app)s -(ended,)g(to)150 1082 y(the)d(command)f(on)g(its)h(standard)e(input)h +(ended,)g(to)150 3974 y(the)d(command)f(on)g(its)h(standard)e(input)h (\(or)g(\014le)h(descriptor)f Fr(n)g Fu(if)g Fr(n)g Fu(is)h(sp)s -(eci\014ed\).)150 1301 y Fk(3.6.8)63 b(Duplicating)41 -b(File)g(Descriptors)150 1448 y Fu(The)30 b(redirection)h(op)s(erator) -390 1602 y Ft([)p Fj(n)p Ft(]<&)p Fj(word)150 1755 y +(eci\014ed\).)150 4182 y Fk(3.6.8)63 b(Duplicating)41 +b(File)g(Descriptors)150 4329 y Fu(The)30 b(redirection)h(op)s(erator) +390 4472 y Ft([)p Fj(n)p Ft(]<&)p Fj(word)150 4615 y Fu(is)k(used)e(to)j(duplicate)f(input)f(\014le)g(descriptors.)53 b(If)34 b Fr(w)m(ord)k Fu(expands)c(to)h(one)g(or)g(more)g(digits,)h -(the)f(\014le)150 1865 y(descriptor)e(denoted)h(b)m(y)f +(the)f(\014le)150 4725 y(descriptor)e(denoted)h(b)m(y)f Fr(n)g Fu(is)g(made)h(to)g(b)s(e)f(a)g(cop)m(y)h(of)g(that)g(\014le)f (descriptor.)50 b(If)33 b(the)h(digits)g(in)f Fr(w)m(ord)150 -1975 y Fu(do)c(not)h(sp)s(ecify)f(a)h(\014le)f(descriptor)g(op)s(en)g +4835 y Fu(do)c(not)h(sp)s(ecify)f(a)h(\014le)f(descriptor)g(op)s(en)g (for)g(input,)g(a)h(redirection)g(error)f(o)s(ccurs.)40 -b(If)29 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)150 2084 y(to)31 +b(If)29 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)150 4944 y(to)31 b(`)p Ft(-)p Fu(',)g(\014le)g(descriptor)g Fr(n)f Fu(is)g(closed.)43 b(If)30 b Fr(n)g Fu(is)g(not)h(sp)s(eci\014ed,)f(the)h(standard)f -(input)g(\(\014le)h(descriptor)f(0\))150 2194 y(is)g(used.)275 -2348 y(The)f(op)s(erator)390 2502 y Ft([)p Fj(n)p Ft(]>&)p -Fj(word)150 2655 y Fu(is)40 b(used)g(similarly)h(to)g(duplicate)f -(output)g(\014le)h(descriptors.)70 b(If)40 b Fr(n)f Fu(is)i(not)f(sp)s -(eci\014ed,)i(the)f(standard)150 2765 y(output)30 b(\(\014le)g -(descriptor)g(1\))h(is)f(used.)39 b(If)30 b(the)g(digits)h(in)e -Fr(w)m(ord)34 b Fu(do)29 b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g -(op)s(en)150 2875 y(for)35 b(output,)h(a)g(redirection)g(error)e(o)s -(ccurs.)55 b(If)35 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)37 -b(to)f(`)p Ft(-)p Fu(',)h(\014le)e(descriptor)g Fr(n)g -Fu(is)g(closed.)150 2984 y(As)f(a)g(sp)s(ecial)h(case,)h(if)e -Fr(n)f Fu(is)h(omitted,)i(and)e Fr(w)m(ord)j Fu(do)s(es)d(not)g(expand) -f(to)i(one)f(or)g(more)g(digits)h(or)f(`)p Ft(-)p Fu(',)150 -3094 y(the)d(standard)e(output)h(and)g(standard)f(error)h(are)h -(redirected)g(as)g(describ)s(ed)e(previously)-8 b(.)150 -3312 y Fk(3.6.9)63 b(Mo)m(ving)41 b(File)h(Descriptors)150 -3459 y Fu(The)30 b(redirection)h(op)s(erator)390 3613 -y Ft([)p Fj(n)p Ft(]<&)p Fj(digit)p Ft(-)150 3767 y Fu(mo)m(v)m(es)i -(the)f(\014le)g(descriptor)f Fr(digit)k Fu(to)d(\014le)g(descriptor)g -Fr(n)p Fu(,)f(or)h(the)g(standard)f(input)f(\(\014le)j(descriptor)e -(0\))150 3876 y(if)f Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)40 -b Fr(digit)33 b Fu(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h -Fr(n)p Fu(.)275 4030 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s -(erator)390 4184 y Ft([)p Fj(n)p Ft(]>&)p Fj(digit)p -Ft(-)150 4338 y Fu(mo)m(v)m(es)e(the)g(\014le)f(descriptor)f +(input)g(\(\014le)h(descriptor)f(0\))150 5054 y(is)g(used.)275 +5197 y(The)f(op)s(erator)390 5340 y Ft([)p Fj(n)p Ft(]>&)p +Fj(word)p eop end +%%Page: 41 47 +TeXDict begin 41 46 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(41)150 299 +y(is)40 b(used)g(similarly)h(to)g(duplicate)f(output)g(\014le)h +(descriptors.)70 b(If)40 b Fr(n)f Fu(is)i(not)f(sp)s(eci\014ed,)i(the)f +(standard)150 408 y(output)30 b(\(\014le)g(descriptor)g(1\))h(is)f +(used.)39 b(If)30 b(the)g(digits)h(in)e Fr(w)m(ord)34 +b Fu(do)29 b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g(op)s(en)150 +518 y(for)35 b(output,)h(a)g(redirection)g(error)e(o)s(ccurs.)55 +b(If)35 b Fr(w)m(ord)j Fu(ev)-5 b(aluates)37 b(to)f(`)p +Ft(-)p Fu(',)h(\014le)e(descriptor)g Fr(n)g Fu(is)g(closed.)150 +628 y(As)f(a)g(sp)s(ecial)h(case,)h(if)e Fr(n)f Fu(is)h(omitted,)i(and) +e Fr(w)m(ord)j Fu(do)s(es)d(not)g(expand)f(to)i(one)f(or)g(more)g +(digits)h(or)f(`)p Ft(-)p Fu(',)150 737 y(the)d(standard)e(output)h +(and)g(standard)f(error)h(are)h(redirected)g(as)g(describ)s(ed)e +(previously)-8 b(.)150 927 y Fk(3.6.9)63 b(Mo)m(ving)41 +b(File)h(Descriptors)150 1074 y Fu(The)30 b(redirection)h(op)s(erator) +390 1204 y Ft([)p Fj(n)p Ft(]<&)p Fj(digit)p Ft(-)150 +1334 y Fu(mo)m(v)m(es)i(the)f(\014le)g(descriptor)f Fr(digit)k +Fu(to)d(\014le)g(descriptor)g Fr(n)p Fu(,)f(or)h(the)g(standard)f +(input)f(\(\014le)j(descriptor)e(0\))150 1443 y(if)f +Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)40 b Fr(digit)33 +b Fu(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h +Fr(n)p Fu(.)275 1573 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s +(erator)390 1703 y Ft([)p Fj(n)p Ft(]>&)p Fj(digit)p +Ft(-)150 1833 y Fu(mo)m(v)m(es)e(the)g(\014le)f(descriptor)f Fr(digit)k Fu(to)e(\014le)f(descriptor)g Fr(n)p Fu(,)g(or)g(the)g (standard)f(output)h(\(\014le)g(descriptor)g(1\))150 -4448 y(if)i Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)150 -4666 y Fk(3.6.10)63 b(Op)s(ening)42 b(File)g(Descriptors)g(for)g -(Reading)e(and)h(W)-10 b(riting)150 4813 y Fu(The)30 -b(redirection)h(op)s(erator)390 4967 y Ft([)p Fj(n)p -Ft(]<>)p Fj(word)150 5121 y Fu(causes)39 b(the)g(\014le)g(whose)g(name) +1942 y(if)i Fr(n)g Fu(is)h(not)f(sp)s(eci\014ed.)150 +2132 y Fk(3.6.10)63 b(Op)s(ening)42 b(File)g(Descriptors)g(for)g +(Reading)e(and)h(W)-10 b(riting)150 2279 y Fu(The)30 +b(redirection)h(op)s(erator)390 2409 y Ft([)p Fj(n)p +Ft(]<>)p Fj(word)150 2539 y Fu(causes)39 b(the)g(\014le)g(whose)g(name) g(is)g(the)g(expansion)g(of)g Fr(w)m(ord)j Fu(to)d(b)s(e)g(op)s(ened)f -(for)g(b)s(oth)h(reading)g(and)150 5230 y(writing)33 +(for)g(b)s(oth)h(reading)g(and)150 2648 y(writing)33 b(on)f(\014le)h(descriptor)f Fr(n)p Fu(,)h(or)g(on)f(\014le)h (descriptor)g(0)g(if)f Fr(n)g Fu(is)h(not)g(sp)s(eci\014ed.)47 -b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 5340 y(exist,)e(it)g(is)g -(created.)p eop end -%%Page: 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 Fs(3.7)68 b(Executing)46 b(Commands)150 523 y Fk(3.7.1)63 -b(Simple)41 b(Command)h(Expansion)150 670 y Fu(When)33 -b(a)g(simple)g(command)g(is)g(executed,)h(the)g(shell)f(p)s(erforms)e -(the)i(follo)m(wing)i(expansions,)e(assign-)150 779 y(men)m(ts,)e(and)f -(redirections,)h(from)f(left)h(to)g(righ)m(t,)g(in)f(the)h(follo)m -(wing)h(order.)199 913 y(1.)61 b(The)38 b(w)m(ords)f(that)i(the)g -(parser)e(has)h(mark)m(ed)g(as)h(v)-5 b(ariable)39 b(assignmen)m(ts)g -(\(those)g(preceding)f(the)330 1023 y(command)30 b(name\))h(and)f -(redirections)h(are)f(sa)m(v)m(ed)i(for)e(later)h(pro)s(cessing.)199 -1157 y(2.)61 b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5 -b(ariable)40 b(assignmen)m(ts)h(or)e(redirections)i(are)f(expanded)f -(\(see)h(Sec-)330 1267 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g -(22\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h -(the)e(\014rst)330 1376 y(w)m(ord)31 b(is)g(tak)m(en)h(to)g(b)s(e)f -(the)g(name)h(of)f(the)h(command)f(and)f(the)i(remaining)f(w)m(ords)g -(are)g(the)h(argu-)330 1486 y(men)m(ts.)199 1620 y(3.)61 -b(Redirections)25 b(are)f(p)s(erformed)f(as)h(describ)s(ed)f(ab)s(o)m -(v)m(e)i(\(see)g(Section)g(3.6)g([Redirections],)i(page)d(35\).)199 -1754 y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Ft(=)p -Fu(')h(in)e(eac)m(h)j(v)-5 b(ariable)25 b(assignmen)m(t)h(undergo)s(es) -e(tilde)i(expansion,)g(parameter)330 1864 y(expansion,)49 -b(command)d(substitution,)j(arithmetic)d(expansion,)k(and)45 -b(quote)h(remo)m(v)-5 b(al)46 b(b)s(efore)330 1973 y(b)s(eing)30 -b(assigned)h(to)g(the)f(v)-5 b(ariable.)275 2132 y(If)32 -b(no)i(command)f(name)g(results,)h(the)g(v)-5 b(ariable)34 -b(assignmen)m(ts)g(a\013ect)h(the)f(curren)m(t)f(shell)h(en)m(viron-) -150 2242 y(men)m(t.)39 b(Otherwise,)27 b(the)e(v)-5 b(ariables)26 -b(are)g(added)f(to)h(the)f(en)m(vironmen)m(t)h(of)g(the)f(executed)h -(command)g(and)150 2351 y(do)35 b(not)f(a\013ect)j(the)d(curren)m(t)h -(shell)g(en)m(vironmen)m(t.)54 b(If)34 b(an)m(y)h(of)g(the)f(assignmen) -m(ts)i(attempts)f(to)h(assign)150 2461 y(a)j(v)-5 b(alue)39 -b(to)g(a)g(readonly)f(v)-5 b(ariable,)42 b(an)c(error)g(o)s(ccurs,)j -(and)c(the)i(command)f(exits)h(with)g(a)f(non-zero)150 -2570 y(status.)275 2705 y(If)33 b(no)g(command)g(name)h(results,)g -(redirections)g(are)g(p)s(erformed,)f(but)g(do)h(not)f(a\013ect)i(the)f -(curren)m(t)150 2814 y(shell)d(en)m(vironmen)m(t.)41 -b(A)30 b(redirection)h(error)f(causes)h(the)g(command)f(to)h(exit)g -(with)f(a)h(non-zero)g(status.)275 2948 y(If)26 b(there)i(is)f(a)h -(command)f(name)h(left)g(after)g(expansion,)g(execution)h(pro)s(ceeds)e -(as)g(describ)s(ed)f(b)s(elo)m(w.)150 3058 y(Otherwise,)39 -b(the)e(command)g(exits.)62 b(If)37 b(one)g(of)g(the)h(expansions)f -(con)m(tained)h(a)g(command)f(substitu-)150 3167 y(tion,)i(the)d(exit)h -(status)g(of)f(the)h(command)f(is)h(the)f(exit)h(status)g(of)f(the)h -(last)g(command)f(substitution)150 3277 y(p)s(erformed.)55 -b(If)35 b(there)g(w)m(ere)h(no)g(command)f(substitutions,)i(the)e -(command)h(exits)g(with)f(a)h(status)g(of)150 3387 y(zero.)150 -3585 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)150 -3732 y Fu(After)i(a)h(command)f(has)g(b)s(een)f(split)h(in)m(to)h(w)m -(ords,)j(if)c(it)g(results)g(in)g(a)h(simple)f(command)g(and)f(an)150 -3842 y(optional)32 b(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g -(actions)h(are)f(tak)m(en.)199 3976 y(1.)61 b(If)24 b(the)g(command)g -(name)g(con)m(tains)i(no)e(slashes,)i(the)e(shell)h(attempts)g(to)g(lo) -s(cate)h(it.)39 b(If)24 b(there)g(exists)330 4085 y(a)h(shell)g -(function)f(b)m(y)g(that)h(name,)h(that)f(function)f(is)h(in)m(v)m(ok)m -(ed)h(as)e(describ)s(ed)g(in)g(Section)h(3.3)h([Shell)330 -4195 y(F)-8 b(unctions],)31 b(page)h(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 +b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 2758 y(exist,)e(it)g(is)g +(created.)150 2989 y Fs(3.7)68 b(Executing)46 b(Commands)150 +3209 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)150 +3356 y Fu(When)33 b(a)g(simple)g(command)g(is)g(executed,)h(the)g +(shell)f(p)s(erforms)e(the)i(follo)m(wing)i(expansions,)e(assign-)150 +3465 y(men)m(ts,)e(and)f(redirections,)h(from)f(left)h(to)g(righ)m(t,)g +(in)f(the)h(follo)m(wing)h(order.)199 3595 y(1.)61 b(The)38 +b(w)m(ords)f(that)i(the)g(parser)e(has)h(mark)m(ed)g(as)h(v)-5 +b(ariable)39 b(assignmen)m(ts)g(\(those)g(preceding)f(the)330 +3705 y(command)30 b(name\))h(and)f(redirections)h(are)f(sa)m(v)m(ed)i +(for)e(later)h(pro)s(cessing.)199 3834 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 +3944 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g(24\).)61 +b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h(the)e +(\014rst)330 4054 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 4163 y(men)m(ts.)199 4293 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(37\).)199 4423 +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 4532 y(expansion,)49 b(command)d +(substitution,)j(arithmetic)d(expansion,)k(and)45 b(quote)h(remo)m(v)-5 +b(al)46 b(b)s(efore)330 4642 y(b)s(eing)30 b(assigned)h(to)g(the)f(v)-5 +b(ariable.)275 4792 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 4902 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 5011 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 5121 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 5230 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 +5340 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.)p eop +end +%%Page: 42 48 +TeXDict begin 42 47 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(42)275 299 +y(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 +408 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 +548 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 658 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 767 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 877 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 +987 y(zero.)150 1191 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h +(Execution)150 1338 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 1448 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 1587 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 1697 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 1807 y(F)-8 b(unctions],)31 b(page)h(19.)199 +1944 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 2053 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 2190 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 +2300 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 2410 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 2519 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 2629 y(Builtins],)37 +b(page)f(47\).)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 +2738 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 2848 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 2958 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 3067 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 3177 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 3286 y(message)k(and)f(returns)f(an)i(exit)g +(status)g(of)f(127.)199 3423 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 3533 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 3643 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 3752 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8 +b(.)199 3889 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 3999 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) +4109 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(45.)199 +4246 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 4355 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150 +4560 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)150 +4707 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 +4847 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 4956 y(the)g Ft(exec)e +Fu(builtin)225 5093 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 5203 y(in)m(v)m(o)s(cation)225 5340 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 +Ft(umask)f Fu(or)h(inherited)g(from)g(the)h(shell's)f(paren)m(t)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)225 299 +y Fq(\017)60 b Fu(curren)m(t)30 b(traps)g(set)h(b)m(y)f +Ft(trap)225 434 y Fq(\017)60 b Fu(shell)30 b(parameters)f(that)h(are)g (set)g(b)m(y)g(v)-5 b(ariable)30 b(assignmen)m(t)g(or)g(with)f -Ft(set)f Fu(or)i(inherited)f(from)g(the)330 2941 y(shell's)i(paren)m(t) -f(in)g(the)h(en)m(vironmen)m(t)225 3077 y Fq(\017)60 -b Fu(shell)44 b(functions)f(de\014ned)f(during)h(execution)i(or)e +Ft(set)f Fu(or)i(inherited)f(from)g(the)330 544 y(shell's)i(paren)m(t)f +(in)g(the)h(en)m(vironmen)m(t)225 680 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 +789 y(en)m(vironmen)m(t)225 925 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 1034 +y(b)m(y)c Ft(set)225 1170 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(70\))225 1306 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(99\))225 +1441 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 1551 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 1713 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 1823 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 1933 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 +2069 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 2179 y(the)g(command)225 2314 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 +2450 y Fq(\017)60 b Fu(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225 +2585 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 2695 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(43\))225 2831 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 -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 +(and)330 2940 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored) +275 3103 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 +3212 y(en)m(vironmen)m(t.)275 3349 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 +3486 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 3595 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 +3705 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 3815 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 3924 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) +4034 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275 +4170 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 4280 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 4417 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 4526 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 4636 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 4837 y Fk(3.7.4)63 +b(En)m(vironmen)m(t)150 4984 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) +5094 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 5230 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 5340 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 +(parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)p +eop end +%%Page: 44 50 +TeXDict begin 44 49 bop 150 -116 a Fu(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(44)150 299 +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 408 y Ft(export)c Fu(and)i(`)p Ft(declare)29 b(-x)p Fu(')36 b(commands)h(allo)m(w)i(parameters)e(and)g(functions)g -(to)h(b)s(e)e(added)h(to)h(and)150 2765 y(deleted)21 -b(from)f(the)h(en)m(vironmen)m(t.)38 b(If)20 b(the)h(v)-5 -b(alue)21 b(of)g(a)g(parameter)g(in)f(the)g(en)m(vironmen)m(t)i(is)e -(mo)s(di\014ed,)i(the)150 2874 y(new)31 b(v)-5 b(alue)32 -b(b)s(ecomes)f(part)h(of)f(the)h(en)m(vironmen)m(t,)g(replacing)h(the)e -(old.)44 b(The)31 b(en)m(vironmen)m(t)h(inherited)150 -2984 y(b)m(y)f(an)m(y)g(executed)h(command)f(consists)g(of)g(the)g -(shell's)h(initial)g(en)m(vironmen)m(t,)g(whose)f(v)-5 -b(alues)31 b(ma)m(y)h(b)s(e)150 3093 y(mo)s(di\014ed)26 +(to)h(b)s(e)e(added)h(to)h(and)150 518 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 +628 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 737 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 847 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 956 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 1088 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 +1197 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 +1307 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 1438 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(66\),)h(then)e(all)g +(parameter)150 1548 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 1658 y(command)g(name.)275 1789 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 -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 +(pathname)150 1899 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 2092 y Fk(3.7.5)63 +b(Exit)40 b(Status)150 2239 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 2348 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 2458 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 2567 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 2677 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 +2809 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 2918 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 3028 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)150 +3137 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 3247 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 +3378 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 +3488 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)f(but)h(is)g(not)h (executable,)h(the)f(return)e(status)i(is)f(126.)275 -776 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f(during) -g(expansion)h(or)g(redirection,)i(the)f(exit)g(status)150 -885 y(is)c(greater)i(than)e(zero.)275 1014 y(The)38 b(exit)h(status)g -(is)g(used)f(b)m(y)g(the)h(Bash)g(conditional)h(commands)e(\(see)h -(Section)h(3.2.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 -y(All)40 b(of)g(the)h(Bash)f(builtins)f(return)g(an)h(exit)h(status)g -(of)f(zero)h(if)f(they)g(succeed)g(and)g(a)g(non-zero)150 -1471 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m(y)g(b)s(e)f(used)g -(b)m(y)g(the)h(conditional)h(and)e(list)h(constructs.)50 -b(All)35 b(builtins)150 1581 y(return)e(an)i(exit)g(status)g(of)f(2)h -(to)g(indicate)h(incorrect)f(usage,)h(generally)g(in)m(v)-5 -b(alid)35 b(options)g(or)f(missing)150 1691 y(argumen)m(ts.)150 -1878 y Fk(3.7.6)63 b(Signals)150 2025 y Fu(When)36 b(Bash)g(is)h(in)m -(teractiv)m(e,)j(in)c(the)h(absence)f(of)h(an)m(y)f(traps,)i(it)e -(ignores)h Ft(SIGTERM)d Fu(\(so)j(that)g(`)p Ft(kill)150 -2135 y(0)p Fu(')c(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j -(shell\),)f(and)d Ft(SIGINT)f Fu(is)i(caugh)m(t)h(and)f(handled)f(\(so) -h(that)h(the)f Ft(wait)150 2244 y Fu(builtin)24 b(is)h(in)m -(terruptible\).)39 b(When)24 b(Bash)g(receiv)m(es)j(a)d -Ft(SIGINT)p Fu(,)h(it)g(breaks)f(out)h(of)f(an)m(y)h(executing)h(lo)s -(ops.)150 2354 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g -Ft(SIGQUIT)p Fu(.)42 b(If)32 b(job)f(con)m(trol)i(is)e(in)h(e\013ect)h -(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 2464 y(page)f(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 +3619 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 +3729 y(is)c(greater)i(than)e(zero.)275 3860 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 3970 +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 +4080 y(page)31 b(10\).)275 4211 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 4321 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 4430 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 4540 y(argumen)m(ts.)275 +4671 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 4781 y(tion)c(3.4.2)h([Sp)s(ecial)f(P)m +(arameters],)h(page)f(23\).)150 4974 y Fk(3.7.6)63 b(Signals)150 +5121 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 5230 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 5340 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.)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(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 408 y(page)f(112\),)h(Bash)f +(ignores)g Ft(SIGTTIN)p Fu(,)d Ft(SIGTTOU)p Fu(,)h(and)h +Ft(SIGTSTP)p Fu(.)275 549 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 +b(alues)31 b(inherited)150 659 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 +(e\013ect,)k(async)m(hronous)c(commands)150 769 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 +878 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 988 y Ft(SIGTTOU)p Fu(,)h(and)g Ft(SIGTSTP)p +Fu(.)275 1129 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 1238 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 1348 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 1457 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 +1567 y(Section)c(7.2)g([Job)e(Con)m(trol)i(Builtins],)g(page)g(113\))h +(or)e(mark)m(ed)g(to)g(not)g(receiv)m(e)i Ft(SIGHUP)c +Fu(using)i Ft(disown)150 1677 y(-h)p Fu(.)275 1818 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 +1927 y(Builtin],)31 b(page)g(70\),)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 2068 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 2178 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 2287 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 2397 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 +2507 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 2647 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 2757 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 2867 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 +2976 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)150 3086 y Fu(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(112,)h(for)e(a)h(more)150 3195 y(in-depth)30 +b(discussion)f(of)i(pro)s(cess)f(groups.)275 3336 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 +3446 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 +3556 y(decides)31 b(what)f(to)h(do)f(ab)s(out)g(the)h +Ft(SIGINT)p Fu(:)199 3697 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 3806 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 3916 y(itself)7 +b(\);)199 4053 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 4163 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 4273 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 +4382 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 4492 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 4601 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 +4711 y(complete,)i(for)e(compatibilit)m(y)-8 b(.)150 +4961 y Fs(3.8)68 b(Shell)45 b(Scripts)150 5121 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 5230 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 5340 y(Section)39 +b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(90\),)i(Bash)d(reads)g(and)f +(executes)i(commands)f(from)f(the)i(\014le,)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(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 408 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 +543 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 653 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 762 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 872 y(parameters)31 b(are)f(unset.)275 +1006 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 +1116 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 1225 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 1360 y Ft(filename)46 b Fj(arguments)150 +1494 y Fu(is)30 b(equiv)-5 b(alen)m(t)32 b(to)f(executing)390 +1629 y Ft(bash)47 b(filename)e Fj(arguments)150 1763 +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 1873 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 1983 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 +2092 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(47\))h(are)e(retained)h +(b)m(y)f(the)h(c)m(hild.)275 2227 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 2336 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 +2446 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 2555 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 2665 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 2800 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 2909 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 3019 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 +3128 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 3238 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 3347 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 3457 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 +3567 y(will)31 b(w)m(ork.)275 3701 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 3811 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 +3920 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 4030 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: 47 53 +TeXDict begin 47 52 bop 3659 -116 a Fu(47)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 +11593,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(113\),)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 +(101\),)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(151\),)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(145\).)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 +11634,2062 @@ 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)25 +b Fu(mo)s(de,)i(the)f(curren)m(t)g(directory)g(is)g(searc)m(hed)h(if)e +Fr(\014lename)32 b Fu(is)26 b(not)g(found)e(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: 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)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: 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(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: 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(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 +y Ft(getopts)h Fu(can)h(rep)s(ort)g(errors)g(in)h(t)m(w)m(o)h(w)m(a)m (ys.)51 b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d -Fr(optstring)42 b Fu(is)34 b(a)630 1011 y(colon,)g Fr(silen)m(t)h +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: 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(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: 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)630 299 y(Expressions],)39 +b(page)g(95.)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(95\),)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(95\),) +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: 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(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(70\))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: 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(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: 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(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(99.)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(116\))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(119\),)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: 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(-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: 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(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(70\),)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(99\).)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(99\).)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(97\))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: 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)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 +(\(see)h(Section)f(6.7)630 3215 y([Arra)m(ys],)47 b(page)c(99\),)48 +b(one)43 b(of)g(the)g Fr(name)5 b Fu(s)42 b(is)h(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 +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: 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 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(76\).)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: 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)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(97.)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: 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 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(54\).) +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: 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(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(34,)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(34\).)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(116\))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: 63 69 +TeXDict begin 63 68 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(63)1110 299 y +Ft(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(47\).)150 5207 +y Ft(type)870 5340 y(type)47 b([-afptP])e([)p Fj(name)i +Ft(...)o(])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(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: 65 71 +TeXDict begin 65 70 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(65)630 299 y Ft(-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(105\),)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(99.)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)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(42\),)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: 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)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(112\).)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 +(116\).)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(151.)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: 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 +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(105\).)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: 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(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 +(153\).)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: 70 76 +TeXDict begin 70 75 bop 150 -116 a Fu(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(70)630 299 y Ft(-)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(66\).)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 +(66\).)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: 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(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(112\).)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(151\).)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 +(109\).)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: 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)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 +(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)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 +b(If)27 b(not)g(set,)i(Bash)e(attempts)h(to)1110 1682 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 +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 -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 +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 +1110 3271 y(tion)38 b(6.6)h([Aliases],)j(page)d(99.)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 +3381 y(in)m(teractiv)m(e)33 b(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(54\))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(77\).)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)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 +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 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(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(77,)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: 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)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 +(138\).)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(44\).)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(90\).)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: 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(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(142\))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(103\).)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: 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 +(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(104\).) +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(37\))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 +(105.)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: 77 83 +TeXDict begin 77 82 bop 3659 -116 a Fu(77)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 +13706,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 +13737,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) -h 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(103,)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 +13753,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(115\).)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: 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(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 +13777,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(70\).)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 +13798,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(47\).)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 +13817,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(70,)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 +13835,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(70,)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: 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)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 +13859,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(47\).)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 +13877,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(109,)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 +13894,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(109\).)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 +13905,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(92.)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: 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_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 +13930,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 @@ -13623,7 +13951,7 @@ 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 +b(ariable)37 b(\(see)f(Section)h(6.7)g([Arra)m(ys],)h(page)e(99\))h (whose)f(mem)m(b)s(ers)630 2673 y(hold)c(v)m(ersion)h(information)f (for)g(this)g(instance)h(of)g(Bash.)46 b(The)32 b(v)-5 b(alues)32 b(assigned)h(to)g(the)630 2783 y(arra)m(y)e(mem)m(b)s(ers)e @@ -13635,10 +13963,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 +13978,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: 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(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 +13999,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(70\),)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 +14008,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(142\).)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(142\).)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 +14025,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(142\).)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(142\).)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 +14054,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: 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 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(142\).)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(142\).)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 @@ -13768,25 +14095,25 @@ b(in)f(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)f(starts)h(with)f 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 +2844 y(Files],)39 b(page)e(92\))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 +(105\).)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 +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)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 +(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) @@ -13796,7 +14123,7 @@ m(en)h(if)f(it)g(is)g(subsequen)m(tly)630 4366 y(reset.)150 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 +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 @@ -13807,9 +14134,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: 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(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 +14196,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(153\).)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 +14221,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: 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)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 +14306,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: 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)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 +14371,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: 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)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 +14399,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 +(70\),)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 @@ -14100,7 +14427,7 @@ Fu(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36 b(1,)i(Bash)e(displa)m(ys)g 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 +([Arra)m(ys],)g(page)f(99\))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 @@ -14108,7 +14435,7 @@ y Fu(An)23 b(arra)m(y)h(v)-5 b(ariable)24 b(\(see)h(Section)f(6.7)h 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 +(de],)50 b(page)d(105\))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 +14455,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: 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(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(103\).)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 +14474,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 +(66\).)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 +14493,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(54,)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(54\).)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(54\).)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(54\).)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: 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(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(66\).)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 +(54\).)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: 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)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: 90 96 +TeXDict begin 90 95 bop 3659 -116 a Fu(90)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 +14645,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(66\))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 +14655,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(70,)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 +14673,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(116\))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 +14690,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(105,)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: 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)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(104\).)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 +14720,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(93.)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 +14731,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(92,)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(104\).)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 +14755,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(70\).)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 +14770,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: 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(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 +14784,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(93,)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(45\).)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 +14804,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(93.)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 +14845,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: 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(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 @@ -14597,16 +14928,16 @@ y(id.)62 b(If)38 b(the)f Ft(-p)h Fu(option)g(is)f(supplied)g(at)h(in)m (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 +%%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 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 +14965,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(92.)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(112\))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 +14977,1343 @@ 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 +(103,)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(77\).)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(116\))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 +(66\).)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)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(151\))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(153\))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 +(99\))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(44\).)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(44\).)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(44\).)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(66\).)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(77\).)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(66\).)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(105\).)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(47\).)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 +(70\).)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(77\).)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(47\).)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: 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(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: 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 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(66\).)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(97\).)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: 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(!)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: 99 105 +TeXDict begin 99 104 bop 150 -116 a Fu(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(99)150 299 y Fs(6.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(70\).)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(97\)\))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: 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)390 299 y Ft(declare)46 +b(-a)h Fj(name)150 432 y Fu(The)30 b(syn)m(tax)390 565 +y Ft(declare)46 b(-a)h Fj(name)p Ft([)p Fj(subscript)p +Ft(])150 698 y Fu(is)30 b(also)i(accepted;)g(the)e Fr(subscript)h +Fu(is)g(ignored.)150 831 y(Asso)s(ciativ)m(e)i(arra)m(ys)d(are)h +(created)h(using)390 964 y Ft(declare)46 b(-A)h Fj(name)275 +1097 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 1207 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 1340 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 1473 y Fj(name)p +Ft(=\()p Fj(value1)44 b(value2)j Ft(...)f(\))150 1606 +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 +1716 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 1825 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 1935 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 2068 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 2178 +y([Shell)j(Expansions],)h(page)g(24\).)275 2311 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 +2420 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 2530 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 2639 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 2749 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 2859 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 2968 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 3101 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 3211 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 +3344 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 3453 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 +3563 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 +(references)g(the)f(last)150 3673 y(elemen)m(t.)275 3806 y(An)m(y)h(elemen)m(t)h(of)g(an)f(arra)m(y)g(ma)m(y)h(b)s(e)f (referenced)g(using)g Ft(${)p Fj(name)p Ft([)p Fj(subscript)p -Ft(]})p Fu(.)35 b(The)27 b(braces)i(are)150 3331 y(required)f(to)j(a)m +Ft(]})p Fu(.)35 b(The)27 b(braces)i(are)150 3915 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 +4025 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 +4134 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 4244 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 +4354 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 +4463 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 4573 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 4682 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 +4792 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 4902 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 +5011 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 +b(the)g Fr(subscript)150 5121 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 +5230 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 5340 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 -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(of)h(0.)57 b(An)m(y)36 b(reference)g(to)h(a)f(v)-5 +(of)h(-1)g(refers)f(to)h(the)g(last)g(elemen)m(t.)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)275 299 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 +408 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 -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 +(and)c Ft(bash)g Fu(will)150 518 y(create)d(an)e(arra)m(y)h(if)f +(necessary)-8 b(.)275 659 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 +769 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)275 +910 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 1020 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 1130 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 1239 y(within)30 +b(double)g(quotes.)275 1381 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 1490 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 1600 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 1709 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 +1819 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 +1928 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 2038 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 +2179 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 2289 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 2399 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 2508 y(should)k(b)s(e)h +(quoted.)275 2650 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 +2759 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 +2869 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 2978 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 3088 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 +3197 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150 +3449 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150 +3608 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 3718 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 3827 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 3937 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 4046 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 +4188 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 +Ft(DIRSTACK)e Fu(shell)150 4297 y(v)-5 b(ariable.)150 +4503 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150 +4679 y Ft(dirs)870 4817 y(dirs)47 b([-clpv])e([+)p Fj(N)i +Ft(|)h(-)p Fj(N)p Ft(])630 4955 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 +b(are)e(added)f(to)630 5064 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 +(directories)g(from)630 5174 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 +(directory)i(in)f(the)h(stac)m(k.)630 5340 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 +(of)e(the)h(elemen)m(ts.)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)630 299 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 408 y(uses)d(a)h(tilde)g(to)g(denote)g +(the)f(home)h(directory)-8 b(.)630 575 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 741 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 850 +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 1017 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 1126 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 1292 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 +1402 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 1568 +y Ft(popd)870 1706 y(popd)47 b([-n])f([+)p Fj(N)h Ft(|)h(-)p +Fj(N)p Ft(])630 1844 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 1953 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 2063 +y Ft(popd)29 b(+0)p Fu(.)630 2201 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 +f(the)g(stac)m(k)630 2310 y(and)e(c)m(hanges)h(to)g(the)g(new)f(top)g +(directory)-8 b(.)630 2448 y(Argumen)m(ts,)31 b(if)f(supplied,)f(ha)m +(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 2614 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 2724 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 +2890 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 3000 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 +3166 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 3275 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 +3442 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 +3551 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 3661 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 3799 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 3908 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 4018 y(sp)s(eci\014ed.)630 +4156 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 +4265 y(of)f(the)f(directory)h(stac)m(k,)h(and)e(the)g(return)g(status)g +(is)h(0.)150 4431 y Ft(pushd)870 4569 y(pushd)46 b([-n])h([+)p +Fj(N)g Ft(|)g Fj(-N)h Ft(|)f Fj(dir)p Ft(])630 4707 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 +4817 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 +4926 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.)630 5064 y(Argumen)m(ts,)g(if)f +(supplied,)f(ha)m(v)m(e)j(the)e(follo)m(wing)i(meanings:)630 +5230 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 5340 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 +(stac)m(k)h(is)e(manipulated.)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 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 +408 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 +518 y(stac)m(k.)630 680 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 +(righ)m(t)f(of)g(the)h(list)f(prin)m(ted)1110 789 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 899 y(stac)m(k.)630 +1060 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 1222 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 +1332 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 1441 y Fu(fails,)h Ft(pushd)e +Fu(returns)g(a)i(non-zero)g(v)-5 b(alue.)630 1577 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 1686 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 1796 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 1931 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 +2041 y(of)i(the)f(directory)h(stac)m(k.)150 2285 y Fs(6.9)68 +b(Con)l(trolling)47 b(the)e(Prompt)150 2444 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 2554 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 +2664 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 2800 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 2910 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 3072 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m +(haracter.)150 3234 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 3396 y Ft(\\D{)p Fj(format)p Ft(})630 +3505 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 3615 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 3724 y(braces)31 b(are)f(required.)150 3886 +y Ft(\\e)384 b Fu(An)30 b(escap)s(e)h(c)m(haracter.)150 +4047 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e +(`.'.)150 4209 y Ft(\\H)384 b Fu(The)30 b(hostname.)150 +4371 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 4532 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 4694 y Ft(\\n)384 b Fu(A)30 b(newline.)150 +4855 y Ft(\\r)384 b Fu(A)30 b(carriage)i(return.)150 +5017 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\).)150 5178 y Ft(\\t)384 b Fu(The)30 +b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 5340 +y Ft(\\T)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.)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)150 299 y Ft(\\@)384 +b Fu(The)30 b(time,)h(in)f(12-hour)h(am/pm)f(format.)150 +456 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f(24-hour)h(HH:MM)g(format.) +150 613 y Ft(\\u)384 b Fu(The)30 b(username)g(of)g(the)h(curren)m(t)f +(user.)150 770 y Ft(\\v)384 b Fu(The)30 b(v)m(ersion)h(of)f(Bash)h +(\(e.g.,)h(2.00\))150 927 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 1084 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 +1194 y(\(uses)i(the)h Ft($PROMPT_DIRTRIM)26 b Fu(v)-5 +b(ariable\).)150 1351 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 1508 y Ft(\\!)384 b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i +(this)f(command.)150 1665 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m +(b)s(er)f(of)i(this)f(command.)150 1822 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 1979 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 2137 y Ft(\\\\)384 +b Fu(A)30 b(bac)m(kslash.)150 2294 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 +2403 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.) +150 2560 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f(non-prin)m +(ting)g(c)m(haracters.)275 2717 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 2827 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 +2937 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(151\),)j(while)d(the)f +(command)150 3046 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 3156 y(session.)275 3289 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 3399 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 3508 +y(option)i(\(see)h(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)j(page)e +(70\).)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 3618 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 3727 y(sp)s(ecial)j(to)g(w)m(ord)f +(expansion.)150 3966 y Fs(6.10)68 b(The)45 b(Restricted)h(Shell)150 +4125 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 4235 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 +4344 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 4454 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 +4587 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g(the)f +Ft(cd)g Fu(builtin.)225 4721 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 +4830 y(ables.)225 4964 y Fq(\017)60 b Fu(Sp)s(ecifying)30 +b(command)g(names)g(con)m(taining)i(slashes.)225 5097 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 +Fu(builtin)e(command.)225 5230 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 +(to)g(the)f Ft(history)e Fu(builtin)h(com-)330 5340 y(mand.)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)225 299 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 408 y Fu(builtin)e(command.)225 548 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 687 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 +826 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 965 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 1104 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 1243 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 1382 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 +1521 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 1695 y(These)g(restrictions)h(are)g +(enforced)f(after)h(an)m(y)g(startup)f(\014les)g(are)h(read.)275 +1838 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 +1948 y(Scripts],)25 b(page)e(45\),)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 2092 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 2201 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 +2311 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 +2420 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 2530 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 2640 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 2783 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 2893 y(as)h +Ft(jails)p Fu(,)e Ft(zones)p Fu(,)g(or)h Ft(containers)p +Fu(.)150 3148 y Fs(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)150 +3307 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 3417 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 3526 +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 3670 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 3814 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 3957 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 4096 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 4206 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 4345 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 4455 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 4594 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 4703 y(non-zero)31 +b(status)g(is)f(`Done\(status\)'.)199 4843 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 +4952 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 b(where)f Fr(signame)36 b Fu(is,)31 b(for)f(example,)h Ft(SIGTSTP)p -Fu(.)199 2174 y(6.)61 b(Alias)31 b(expansion)g(is)f(alw)m(a)m(ys)i +Fu(.)199 5091 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) +5230 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 +330 5340 y(undergo)30 b(alias)h(expansion.)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)199 299 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 +Ft(!!)p Fu(')h(to)g(`)p Ft(!)p Fu(')h(are)330 408 y(enabled,)26 b(and)f(parameter)g(expansion)g(is)g(p)s(erformed)e(on)i(the)g(v)-5 b(alues)25 b(of)g Ft(PS1)f Fu(and)h Ft(PS2)f Fu(regardless)330 -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 +518 y(of)31 b(the)f(setting)i(of)e(the)h Ft(promptvars)c +Fu(option.)199 646 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 774 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 883 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h(on) +e(the)h(line.)154 1011 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 1139 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 +1249 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154 +1377 y(13.)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 +1504 y(14.)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 1614 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 1724 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 1851 y(15.)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 +1979 y(16.)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 +2107 y(17.)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 2217 y Ft(function)28 +b Fu(k)m(eyw)m(ord.)154 2345 y(18.)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 +2454 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 2582 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 (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 2692 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 +2801 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f +(timing)h(information.)154 2929 y(20.)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 +3039 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 +3148 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 3258 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 +3386 y(21.)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 3495 y(`)p Ft(-)p Fu('.)154 +3623 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 3733 y(ev)m(en)g(if)f(the)h +Ft(histexpand)d Fu(option)i(is)h(enabled.)154 3861 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 3970 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 4080 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 4189 y(command)30 b(name,)h(and)f(so)g(on.)154 +4317 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e (an)h(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g -(error)e(o)s(ccurs)330 1620 y(when)38 b(no)h(command)g(name)g(follo)m +(error)e(o)s(ccurs)330 4427 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 4536 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 +b(alue)31 b(to)g(a)g(readonly)f(v)-5 b(ariable.)154 4664 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 +(o)s(ccurs)330 4774 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 +(other)h(simple)330 4883 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 4993 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 +5103 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 5230 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 +Ft(for)330 5340 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 +(readonly)h(v)-5 b(ariable.)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)154 299 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 +432 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 541 y(in)m(v)-5 b(alid)31 b(expression.)154 674 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 806 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 +916 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 1049 y(31.)61 b(While)32 +b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5 b(ailable,)34 +b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p +Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330 +1158 y(parameters.)154 1291 y(32.)61 b(When)28 b(expanding)g(the)g(`)p Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)h(pattern)f(con)m(text)i -(where)e(the)g(expansion)g(is)330 3604 y(double-quoted)i(do)s(es)g(not) +(where)e(the)g(expansion)g(is)330 1401 y(double-quoted)i(do)s(es)g(not) h(treat)h(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g(double-quoted.)154 -3742 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e +1533 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s(ersist)g(in)f(the)i(shell)f -(en)m(vironmen)m(t)330 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 +(en)m(vironmen)m(t)330 1643 y(after)31 b(the)f(builtin)g(completes.)154 +1775 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) +(ts)h(as)f(ar-)330 1885 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 +Fm(posix)f Fu(mo)s(de,)330 1995 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 +(when)g(pre-)330 2104 y(ceded)31 b(b)m(y)f Ft(command)p +Fu(.)154 2237 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 +(the)h(bac)m(kground,)330 2346 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 +(or)h(previous)g(job.)154 2479 y(36.)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) +2589 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 +2721 y(37.)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 +2854 y(38.)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 2964 y(quired)30 b(b)m(y)g Fm(posix)p +Fu(.)154 3096 y(39.)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 3229 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 3339 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 3448 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 +3558 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 3690 y(41.)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 3690 28 4 v 40 w(DFL)g(and)g(those)g(that)g(w)m(ere)330 +3800 y(ignored)30 b(when)g(the)g(shell)h(started.)154 +3933 y(42.)61 b(The)21 b Ft(.)h Fu(and)f Ft(source)f Fu(builtins)h(do)g(not)h(searc)m(h)h(the)f(curren)m(t)f(directory)h -(for)g(the)g(\014lename)f(argumen)m(t)330 1121 y(if)30 +(for)g(the)g(\014lename)f(argumen)m(t)330 4042 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g Ft(PATH)p -Fu(.)154 1258 y(43.)61 b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g +Fu(.)154 4175 y(43.)61 b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g (the)g(e\013ect)i(of)e(setting)i(the)e Ft(inherit_errexit)d -Fu(option,)23 b(so)f(subshells)330 1367 y(spa)m(wned)27 +Fu(option,)23 b(so)f(subshells)330 4284 y(spa)m(wned)27 b(to)i(execute)g(command)e(substitutions)h(inherit)f(the)h(v)-5 b(alue)28 b(of)g(the)g Ft(-e)f Fu(option)h(from)g(the)330 -1477 y(paren)m(t)37 b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c +4394 y(paren)m(t)37 b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c Fu(option)38 b(is)f(not)h(enabled,)h(Bash)e(clears)h(the)g -Ft(-e)330 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 +Ft(-e)330 4504 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)154 +4636 y(44.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h (e\013ect)g(of)g(setting)g(the)g Ft(shift_verbose)28 -b Fu(option,)34 b(so)e(n)m(umeric)330 1833 y(argumen)m(ts)f(to)g +b Fu(option,)34 b(so)e(n)m(umeric)330 4746 y(argumen)m(ts)f(to)g Ft(shift)f Fu(that)h(exceed)h(the)e(n)m(um)m(b)s(er)g(of)h(p)s (ositional)g(parameters)g(will)g(result)g(in)f(an)330 -1943 y(error)g(message.)154 2080 y(45.)61 b(When)43 b(the)g +4855 y(error)g(message.)154 4988 y(45.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i(alias)g(de\014nitions,)i(it)d(do) -s(es)g(not)g(displa)m(y)h(them)f(with)g(a)330 2189 y(leading)31 +s(es)g(not)g(displa)m(y)h(them)f(with)g(a)330 5098 y(leading)31 b(`)p Ft(alias)e Fu(')i(unless)f(the)g Ft(-p)g Fu(option)h(is)f -(supplied.)154 2326 y(46.)61 b(When)40 b(the)g Ft(set)f +(supplied.)154 5230 y(46.)61 b(When)40 b(the)g Ft(set)f Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h(without)f(options,)j(it)e(do)s(es) -f(not)g(displa)m(y)g(shell)g(function)330 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 +f(not)g(displa)m(y)g(shell)g(function)330 5340 y(names)30 +b(and)g(de\014nitions.)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(47.)61 +b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)m(ed)i +(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37 +b(v)-5 b(alues)37 b(without)330 408 y(quotes,)26 b(unless)d(they)i(con) +m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result)g +(con)m(tains)i(nonprin)m(ting)330 518 y(c)m(haracters.)154 +663 y(48.)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 772 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 +882 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 +1026 y(49.)61 b(When)37 b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m (hange)h(a)f(directory)g(b)s(ecause)g(the)g(length)g(of)f(the)h -(pathname)330 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 1136 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 1245 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 1355 y(the)31 b(supplied)e(directory) +i(name.)154 1499 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 +1609 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 +1753 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 1863 y(not)d(a)f(history)h(en)m +(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 2007 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 2152 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 +2262 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 2371 y(found)i(in)h Ft($PATH)p Fu(.)154 +2516 y(54.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m (ok)m(e)i(the)e Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p -Ft(v)p Fu(')f(command)g(is)g(run,)330 4847 y(instead)e(of)f(c)m(hec)m -(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 4984 +Ft(v)p Fu(')f(command)g(is)g(run,)330 2625 y(instead)e(of)f(c)m(hec)m +(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 2770 y(55.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j (Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330 -5093 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54 +2879 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 2989 y(con)m(v)m(erted.)154 +3133 y(56.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m (k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f -Fu(and)g Ft(-f)f Fu(options.)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 3278 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 3387 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 3497 y(c)m(hild)31 b(that)g(exits.)154 +3641 y(58.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m (terrupted)h(b)m(y)g(a)h(signal)f(for)g(whic)m(h)g(a)h(trap)f(has)g(b)s -(een)f(set.)40 b(If)27 b(Bash)330 764 y(receiv)m(es)41 +(een)f(set.)40 b(If)27 b(Bash)330 3751 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 +3861 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154 +4005 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 +(after)330 4115 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain) +g(it.)275 4304 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 +(en)i(when)d(in)150 4413 y Fm(posix)d Fu(mo)s(de.)40 +b(Sp)s(eci\014cally:)199 4568 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 +4677 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 +Fu(is)h(unset.)199 4822 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 +(enabled)h(for)g(the)g Ft(echo)f Fu(builtin)330 4932 +y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 5121 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 +5230 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(eatures],)150 5340 y(page)31 b(160\).)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)150 299 y Fs(6.12)68 +b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150 458 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 +568 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 +677 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 +b(compatibilit)m(y)j(lev)m(el)150 787 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 +m(ersions)g(that)h(is)f(incompatible)150 897 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 +(features)i(and)e(b)s(eha)m(vior.)58 b(It's)150 1006 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 +1134 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 +1244 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 +(ecial)150 1354 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 +(o)m(v)m(e\).)275 1482 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 +1591 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 +m(y)h(lev)m(el)150 1701 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 +(vior)g(ma)m(y)g(ha)m(v)m(e)h(b)s(een)150 1811 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 +1920 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 +2030 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(not)150 2139 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) +(els)g(carefully)-8 b(.)150 2249 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 +(t)f(b)s(eha)m(vior.)275 2377 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 +2487 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 2596 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 +2724 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 2834 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 2962 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 3072 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 +(ersions.)275 3200 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 3310 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 +3419 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 3529 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 +3638 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 3748 y(v)m(ersions.)150 3895 +y Ft(compat31)705 4023 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 4133 y(no)d(sp)s(ecial)h(e\013ect)150 +4279 y Ft(compat32)705 4407 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 +Ft(")f Fu(causes)h(the)f(execution)h(of)g(the)810 4517 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 +m(ersions,)f(the)g(shell)f(acts)i(as)810 4627 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 +(list)g(ab)s(orts)810 4736 y(the)31 b(execution)g(of)g(the)f(en)m(tire) +i(list\))150 4883 y Ft(compat40)705 5011 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 +(t)810 5121 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 +5230 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 5340 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 +(strcoll\(3\).)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)150 299 y Ft(compat41)705 +439 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 548 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 689 +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 798 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 +908 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 +1017 y(considered)30 b(quoted)h(\(this)f(is)h Fm(posix)e +Fu(in)m(terpretation)j(221\))150 1188 y Ft(compat42)705 +1328 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 +1437 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 1577 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 1687 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 1797 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 +1906 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 2016 y(within)30 b(double-quoted)g(w)m(ord)g(expansions)150 +2186 y Ft(compat43)705 2326 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 +(an)g(attempt)h(is)f(made)f(to)i(use)f(a)810 2436 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 +(\(declare)g(-a)g(fo)s(o='\(1)810 2545 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 +2685 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 +2795 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 +2905 y(fatal)32 b(errors)d(that)i(cause)g(the)g(shell)f(to)i(exit\))705 +3045 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 3154 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 3264 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 +3373 y(this)150 3544 y Ft(compat44)705 3684 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 3794 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 +3903 y(mo)s(de)k(is)g(not)h(enabled)705 4043 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 +4153 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 +4262 y(prev)m(en)m(t)c(the)g(exit)705 4402 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 +4512 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 +4622 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 4792 y Ft(compat50)f(\(set)h(using)g +(BASH_COMPAT\))705 4902 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 5011 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 5121 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 5230 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 -(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 -(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 -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 +(duce)e(the)i(same)810 5340 y(sequence)31 b(as)f(in)g(bash-5.0)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(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 +408 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 518 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 628 y Fu(option)31 +b(is)f(supplied.)150 787 y Ft(compat51)e(\(set)h(using)g(BASH_COMPAT\)) +705 897 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 1006 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 1116 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 +1250 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 +1360 y(statemen)m(t)c(can)f(b)s(e)f(expanded)f(more)i(than)f(once)705 +1494 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 +1604 y(command)30 b(can)h(b)s(e)f(expanded)f(more)i(than)f(once)705 +1738 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 +1848 y(more)c(than)f(once)705 1983 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 2092 +y(than)30 b(once)705 2227 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 2336 y(more)c(than)f(once)705 2471 +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 2580 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 2690 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 2824 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 2934 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 3044 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.)p eop +end +%%Page: 112 118 +TeXDict begin 112 117 bop 3614 -116 a Fu(112)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 +16405,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: 113 119 +TeXDict begin 113 118 bop 150 -116 a Fu(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2526 b(113)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 +16433,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(66\).)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(70\),)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,9 +16485,9 @@ 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: 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)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 @@ -16133,34 +16547,35 @@ b Ft(wait)c Fu(w)m(aits)j(for)e(all)i(running)c(bac)m(kground)j(jobs)f 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 +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 4244 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 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 +%%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)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 @@ -16208,14 +16623,14 @@ Fu(',)d(the)i(string)g(supplied)e(needs)i(to)g(matc)m(h)h(a)f 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 +(7.1)g([Job)e(Con)m(trol)i(Basics],)i(page)e(112\).)56 b(If)34 b(set)i(to)g(an)m(y)630 3663 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 (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: 116 122 +TeXDict begin 116 121 bop 3614 -116 a Fu(116)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 +16643,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(54\).)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 +16651,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 +(66\),)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 +16690,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(119\).)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 +16714,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: 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)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 @@ -16368,9 +16783,9 @@ b Fu(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 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: 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.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 @@ -16444,13 +16859,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(151\))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: 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)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 +16919,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 +16931,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 +(54.)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 +16944,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(127\).)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 +16953,656 @@ 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: 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)870 299 y Ft(set)47 +b Fj(variable)e(value)630 439 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 548 y(use)k Ft(vi)g Fu(line)h(editing)g(commands:)870 +689 y Ft(set)47 b(editing-mode)d(vi)630 829 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 938 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 +1078 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 1188 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 1297 y(b)s(eing)30 b(set)h(to)g(o\013.)630 +1437 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 1547 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page) +g(54.)630 1687 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(ariables.)630 1857 y Ft(bell-style)1110 1967 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 +(termi-)1110 2077 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(If)36 b(set)i(to)1110 2186 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 +b(ailable.)51 b(If)33 b(set)g(to)1110 2296 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 +(terminal's)1110 2405 y(b)s(ell.)630 2576 y Ft(bind-tty-special-chars) +1110 2685 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 +2795 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 2905 +y(Readline)h(equiv)-5 b(alen)m(ts.)630 3075 y Ft(blink-matching-paren) +1110 3185 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 +3294 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 3404 y(default)31 +b(is)f(`)p Ft(off)p Fu('.)630 3574 y Ft(colored-completion-prefi)o(x) +1110 3684 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 +3794 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 +3903 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 4013 +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 +4122 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 4232 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 4341 y(default)31 b(is)f(`)p +Ft(off)p Fu('.)630 4512 y Ft(colored-stats)1110 4622 +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 +4731 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 +4841 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 +4950 y(is)30 b(`)p Ft(off)p Fu('.)630 5121 y Ft(comment-begin)1110 +5230 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 5340 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 -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)31 b(is)f Ft("#")p Fu(.)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 Ft +(completion-display-width)1110 408 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 518 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 +b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 +628 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 +737 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 +888 y Ft(completion-ignore-case)1110 998 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 1107 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 1258 y Ft(completion-map-case)1110 1367 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 1477 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 +1587 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f +(completion.)85 b(The)44 b(default)1110 1696 y(v)-5 b(alue)31 +b(is)f(`)p Ft(off)p Fu('.)630 1847 y Ft(completion-prefix-displa)o +(y-le)o(ngth)1110 1956 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 +2066 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 2176 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 2285 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 2436 y Ft(completion-query-items)1110 +2545 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 2655 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 2765 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 +(to)h(this)1110 2874 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 +2984 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 -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 -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 -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 -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 +3093 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 +3203 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 +3313 y(zero.)g(The)29 b(default)i(limit)g(is)g Ft(100)p +Fu(.)630 3463 y Ft(convert-meta)1110 3573 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 +3682 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 +3792 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 3902 +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 4011 y(that)j(con)m(tains)h(eigh)m(t-bit)g(c)m(haracters.)630 +4162 y Ft(disable-completion)1110 4271 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 +b(Completion)1110 4381 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 +4491 y(to)31 b Ft(self-insert)p Fu(.)38 b(The)30 b(default)g(is)h(`)p +Ft(off)p Fu('.)630 4641 y Ft(echo-control-characters)1110 +4751 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 4861 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 +(to)j(a)f(signal)g(generated)1110 4970 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 5121 +y Ft(editing-mode)1110 5230 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 +m(ey)i(bind-)1110 5340 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,)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)1110 299 y(where)29 +b(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 408 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 +565 y Ft(emacs-mode-string)1110 675 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 +(is)h(dis-)1110 784 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 +894 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 1003 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 +1113 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 +Fu(')g(escap)s(es)g(to)g(b)s(egin)1110 1223 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 1332 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 1442 y(default)31 b(is)f(`)p Ft(@)p Fu('.)630 +1598 y Ft(enable-active-region)1110 1708 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 1817 +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 1927 y(page)d(132\).)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 2037 y(the)23 b Fr(region)p +Fu(.)39 b(When)23 b(this)g(v)-5 b(ariable)24 b(is)f(set)h(to)g(`)p +Ft(On)p Fu(',)h(Readline)f(allo)m(ws)g(certain)1110 2146 +y(commands)37 b(to)h(designate)h(the)e(region)h(as)g +Fr(activ)m(e)p Fu(.)64 b(When)37 b(the)h(region)g(is)1110 +2256 y(activ)m(e,)g(Readline)d(highligh)m(ts)g(the)g(text)g(in)f(the)h +(region)g(using)f(the)g(termi-)1110 2365 y(nal's)c(standout)h(mo)s(de.) +40 b(The)29 b(activ)m(e)k(region)e(sho)m(ws)f(the)g(text)h(inserted)f +(b)m(y)1110 2475 y(brac)m(k)m(eted-paste)37 b(and)d(an)m(y)i(matc)m +(hing)f(text)h(found)e(b)m(y)g(incremen)m(tal)j(and)1110 +2585 y(non-incremen)m(tal)31 b(history)g(searc)m(hes.)41 +b(The)30 b(default)h(is)f(`)p Ft(On)p Fu('.)630 2741 +y Ft(enable-bracketed-paste)1110 2851 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 +(a)h(w)m(a)m(y)g(that)1110 2960 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 +(single)1110 3070 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 +3180 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 +3289 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 3446 +y Ft(enable-keypad)1110 3555 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 +(application)i(k)m(eypad)1110 3665 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 +(eys.)1110 3774 y(The)j(default)g(is)h(`)p Ft(off)p Fu('.)630 +3931 y Ft(enable-meta-key)1110 4041 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 +(mo)s(di\014er)1110 4150 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 +4260 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 4369 y(default)31 +b(is)f(`)p Ft(on)p Fu('.)630 4526 y Ft(expand-tilde)1110 +4635 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 4745 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 +Ft(off)p Fu('.)630 4902 y Ft(history-preserve-point)1110 +5011 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 +5121 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 5230 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(.)55 b(The)36 b(default)1110 5340 y(is)30 b(`)p Ft(off)p +Fu('.)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(history-size)1110 +408 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 518 +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 628 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 +737 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 +847 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 956 +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 1066 +y(b)s(e)c(set)h(to)g(500.)630 1219 y Ft(horizontal-scroll-mode)1110 +1329 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 1439 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 1548 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 1658 +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 1767 +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 1877 +y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)630 +2030 y Ft(input-meta)1110 2140 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 2250 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 +2359 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 2469 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 2578 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 +2732 y Ft(isearch-terminators)1110 2841 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 +2951 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 3061 y(\(see)38 b(Section)g(8.2.5)h +([Searc)m(hing],)h(page)e(118\).)62 b(If)37 b(this)g(v)-5 +b(ariable)38 b(has)f(not)1110 3170 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 3280 y(incremen)m(tal)c(searc)m +(h.)630 3433 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 +3543 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 3652 +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 +3762 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 3871 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 3981 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 4091 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 4244 y Ft(keyseq-timeout)1110 +4354 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 4463 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 4573 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 4682 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 +4792 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 4902 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 5011 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 +5121 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 5230 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 5340 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 -(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) -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 -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 -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 -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 +b(alue,)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)1110 299 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 408 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 +591 y Ft(mark-directories)1110 701 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 810 y(The)30 b(default)g(is)h(`)p +Ft(on)p Fu('.)630 993 y Ft(mark-modified-lines)1110 1103 +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 +1212 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 +1322 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Ft(off)p Fu(')g(b)m(y)g +(default.)630 1504 y Ft(mark-symlinked-directori)o(es)1110 +1614 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 +1724 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 1833 +y Ft(mark-directories)p Fu(\).)37 b(The)30 b(default)g(is)g(`)p +Ft(off)p Fu('.)630 2016 y Ft(match-hidden-files)1110 +2125 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 +1110 2235 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 +2345 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 +(b)m(y)1110 2454 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(')g(b)m(y)1110 2564 y(default.)630 2746 y +Ft(menu-complete-display-pr)o(efix)1110 2856 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) +(pre\014x)e(of)i(the)1110 2966 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 +3075 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p +Ft(off)p Fu('.)630 3258 y Ft(output-meta)1110 3367 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 +f(c)m(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 3477 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 +(e)h(sequence.)59 b(The)1110 3587 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 +3696 y(eigh)m(t-bit)k(c)m(haracters.)630 3879 y Ft(page-completions) +1110 3988 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 +1110 4098 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 +Fu(')1110 4208 y(b)m(y)e(default.)630 4390 y Ft +(print-completions-horizo)o(ntal)o(ly)1110 4500 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) +(completions)h(with)f(matc)m(hes)h(sorted)1110 4609 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 +(screen.)1110 4719 y(The)30 b(default)g(is)h(`)p Ft(off)p +Fu('.)630 4902 y Ft(revert-all-at-newline)1110 5011 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 +(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 5121 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 +b(By)29 b(default,)g(history)g(lines)1110 5230 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 -(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) -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 +(across)g(calls)h(to)1110 5340 y Ft(readline)p Fu(.)38 +b(The)30 b(default)h(is)f(`)p Ft(off)p Fu('.)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)630 299 y Ft +(show-all-if-ambiguous)1110 408 y Fu(This)29 b(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 518 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 +628 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 737 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 +913 y Ft(show-all-if-unmodified)1110 1022 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 1132 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 1241 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 1351 y(tial)43 b(completion)h(\(the)f(p)s(ossible) +f(completions)h(don't)f(share)g(a)h(common)1110 1461 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 1570 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 -(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 +Fu('.)630 1745 y Ft(show-mode-in-prompt)1110 1855 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 1965 +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 2074 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 2184 y(v)-5 b(alue)31 +b(is)f(`)p Ft(off)p Fu('.)630 2359 y Ft(skip-completed-text)1110 +2469 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 +2578 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 +2688 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 2798 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 2907 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 +3017 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 +3126 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 3236 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 3345 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 3455 y(is)30 b(`)p Ft(off)p Fu('.)630 3630 +y Ft(vi-cmd-mode-string)1110 3740 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 3850 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) +3959 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 +4069 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) +4178 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 4288 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 +4398 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 4507 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 4682 y Ft(vi-ins-mode-string)1110 +4792 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 +4902 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 5011 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 5121 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 5230 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 5340 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 -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 -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 -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 -(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) -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 -(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 -(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 -(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 +(sequences)i(of)f(non-prin)m(ting)f(c)m(harac-)p eop +end +%%Page: 126 132 +TeXDict begin 126 131 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(126)1110 299 y(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 408 y(the)g(mo)s(de)f(string.)40 +b(The)30 b(default)h(is)f(`)p Ft(\(ins\))p Fu('.)630 +577 y Ft(visible-stats)1110 686 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 796 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 964 y(Key)f(Bindings)630 1073 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 +1183 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 +1292 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 +1402 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h +(do)s(es.)630 1541 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 +1650 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 +1760 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 -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 -b 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 -(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 -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 -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) -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 -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 -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 -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 -(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 -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 -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 -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 +(and)630 1870 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 1979 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 2089 y(comfortable.)630 +2228 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 +2337 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 2476 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 2586 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 2695 y(Builtins],)31 b(page)g(54.)630 +2863 y Fr(k)m(eyname)5 b Fu(:)42 b Fr(function-name)35 +b Fu(or)c Fr(macro)1110 2973 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 3112 y Ft(Control-u:)45 +b(universal-argument)1350 3221 y(Meta-Rubout:)f(backward-kill-word)1350 +3331 y(Control-o:)h(">)i(output")1110 3470 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 3579 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 +3689 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 3798 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 3908 y(output)p Fu(')29 b(in)m(to)i(the)g +(line\).)1110 4047 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 4156 +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 4266 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 4434 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 4544 +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 +4653 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 4763 +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 4872 +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 4982 y(recognized.)1350 +5121 y Ft("\\C-u":)46 b(universal-argument)1350 5230 +y("\\C-x\\C-r":)f(re-read-init-file)1350 5340 y("\\e[11~":)g("Function) +h(Key)g(1")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)1110 299 y(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 408 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 518 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 628 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 780 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 889 y(k)m(ey)i(sequences:)630 +1041 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630 +1193 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 1345 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 +1497 y Fj(\\\\)384 b Fu(bac)m(kslash)630 1648 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 +1800 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s +(ostrophe)630 1952 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 2062 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 +2214 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 2366 +y Ft(\\b)384 b Fu(bac)m(kspace)630 2517 y Ft(\\d)g Fu(delete)630 +2669 y Ft(\\f)g Fu(form)30 b(feed)630 2821 y Ft(\\n)384 +b Fu(newline)630 2973 y Ft(\\r)g Fu(carriage)32 b(return)630 +3125 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)630 3277 +y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)630 3429 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 +Fu(\(one)i(to)1110 3538 y(three)c(digits\))630 3690 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 +b Fr(HH)1110 3800 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 +3952 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 +4061 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(In)630 4171 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 +(are)e(expanded.)37 b(Bac)m(kslash)630 4280 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 4390 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 4521 y Ft("\\C-x\\\\":)45 +b("\\\\")150 4712 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs) +150 4859 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 +4969 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 5079 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 +5230 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 5340 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 -(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 -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 -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 -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 +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(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 408 y(noted,)i(no)f(c)m +(haracters)i(are)f(required)e(to)i(isolate)i(it.)630 +555 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 +664 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 774 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 +883 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 993 y(starting)f(out)g +(in)f Ft(emacs)f Fu(mo)s(de.)630 1139 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 1249 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 1358 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 1468 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 1577 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 +(oth)f Ft(sun)g Fu(and)1110 1687 y Ft(sun-cmd)p Fu(,)c(for)h(instance.) +630 1833 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 1943 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 +2052 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 +2162 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 2271 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 +2381 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 2491 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) +Fu('.)40 b(The)1110 2600 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 +2710 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 +2819 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 +2947 y Ft($if)47 b(version)f(>=)h(7.0)1350 3057 y(set)g +(show-mode-in-prompt)42 b(on)1350 3166 y($endif)630 3313 +y(application)1110 3422 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 +(set-)1110 3532 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 +3641 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 +3751 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 3861 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 +(sequence)h(that)f(quotes)1110 3970 y(the)e(curren)m(t)f(or)g(previous) +g(w)m(ord)g(in)g(Bash:)1350 4098 y Ft($if)47 b(Bash)1350 +4208 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 +4317 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 4427 y($endif)630 +4573 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 4682 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 4792 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 4902 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 5011 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 5121 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 5230 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 -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 -(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 -(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 -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 +5340 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:)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)1350 299 y Ft($if)47 +b(editing-mode)d(==)k(emacs)1350 408 y(set)f(show-mode-in-prompt)42 +b(on)1350 518 y($endif)150 677 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 837 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 996 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 1106 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 +1215 y Ft(/etc/inputrc)p Fu(:)870 1350 y Ft($include)46 +b(/etc/inputrc)150 1549 y Fk(8.3.3)63 b(Sample)41 b(Init)g(File)150 +1696 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 1806 y(conditional)j(syn)m +(tax.)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)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 +17631,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: 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 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 +17666,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: 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(#)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 +17678,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(54.\))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 +17718,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: 133 139 +TeXDict begin 133 138 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(133)150 299 y Ft(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 +17778,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: 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 (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 +17854,1107 @@ 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: 135 141 +TeXDict begin 135 140 bop 150 -116 a Fu(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(135)630 299 y(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: 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(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: 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(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: 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 +(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: 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 +(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 +(the)630 5340 y(de\014nition.)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 +(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)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned)e(in)i(a)f(format)h +(suitable)g(for)f(the)h Fr(inputrc)k Fu(\014le.)150 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(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 +(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 +g(that)630 4968 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 +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: 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)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)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 +518 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 +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 +Ft(*)p Fu(')630 5340 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g +(expansion.)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)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(153\).)150 +1697 y Ft(alias-expand-line)26 b(\(\))630 1806 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(99\).)150 1964 y Ft(history-and-alias-expand)o +(-lin)o(e)24 b(\(\))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 -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 +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(66\).)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(145\),)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: 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(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(138\))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(77,)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(34\).)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(77\).)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(145\),)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: 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(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 +(70\))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: 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)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(142\).)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)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 +y Fu(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j +(\014lenames,)1590 2258 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h (\014lename-sp)s(eci\014c)h(pro)s(cessing)e(\(lik)m(e)1590 -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(132\).)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: 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)1110 299 y Ft(disabled)96 +b Fu(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110 +460 y Ft(enabled)144 b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.) +1110 622 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 +731 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 893 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 1054 y Ft(function)96 b Fu(Names)31 +b(of)g(shell)f(functions.)1110 1216 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 1377 y Ft(helptopic)1590 1487 +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 1597 y(tion)31 +b(4.2)g([Bash)g(Builtins],)g(page)g(54\).)1110 1758 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 1868 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 1977 y(V)-8 b(ariables],)32 b(page)f(77\).)1110 +2139 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 +2248 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 2410 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 +2571 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 2733 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 2894 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 3004 +y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(66\).) +1110 3165 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 +3275 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(54\).) +1110 3437 y Ft(signal)192 b Fu(Signal)31 b(names.)1110 +3598 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 3760 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 3921 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 4031 y Ft(-v)p +Fu(.)630 4192 y Ft(-C)30 b Fj(command)1110 4302 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 +(its)g(output)g(is)1110 4411 y(used)e(as)g(the)h(p)s(ossible)f +(completions.)630 4573 y Ft(-F)g 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 3840 y(ronmen)m(t.)72 +(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 3950 y(whose)34 b(argumen)m(ts)h(are)g(b)s(eing)f +(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 -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 +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 -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 +5230 y(page)30 b(142\).)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.)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 +Fu(arra)m(y)j(v)-5 b(ariable.)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)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: 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)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(47\),)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(70\).)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 +(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: 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)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)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 +(to)h(the)g(default)150 3990 y(Readline)f(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: 151 157 +TeXDict begin 151 156 bop 3614 -116 a Fu(151)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 +18966,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(66\),)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 +18993,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(54\),)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 +19022,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(133\).)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 +19039,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(70,)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: 152 158 +TeXDict begin 152 157 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(152)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 +19097,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(99\).)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,36 +19124,37 @@ 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: 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)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 @@ -18711,784 +19164,863 @@ 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 +Fu(v)-5 b(ariable)29 b(is)f(used.)630 3007 y(The)34 b(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 +3117 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 +3226 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 3336 y Fu(fails.)150 3575 y Fs(9.3)68 b(History)46 +b(Expansion)150 3734 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 3844 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 3953 y(history)30 b(information.)275 +4087 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) +4196 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 +4306 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g +(quic)m(kly)-8 b(.)275 4439 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 4549 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 4659 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 4792 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 4902 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 +5011 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 5121 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 5230 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 +5340 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 -(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 -(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 -(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 +(ord.)p eop end +%%Page: 154 160 +TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(154)150 +299 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 +408 y(whic)m(h)30 b(is)h(`)p Ft(!)p Fu(')f(b)m(y)g(default.)275 +554 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 664 y(remo)m(v)m(e)h(the)e(sp)s(ecial)g(handling)g(for)g(the)g +(next)g(c)m(haracter;)k(single)d(quotes)g(enclose)g(v)m(erbatim)g +(sequences)150 774 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 883 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 993 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 1102 y(double)g(quotes.)275 +1248 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 +(the)g(history)f(expansion)150 1358 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 +(quoted)h(if)g(it)g(immediately)150 1468 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 +1614 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 +1723 y(Builtin],)24 b(page)e(70\))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 1833 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 1942 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 +2052 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 2161 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 2271 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 2381 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 2490 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 +2600 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 2746 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 2855 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 +2965 y(page)32 b(77\).)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 3075 y(writing)e(the)h(history)f(\014le.)150 3285 +y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 3432 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 3542 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 3718 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 3828 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 +3938 y Fu(builtin\).)150 4109 y Ft(!)p Fj(n)384 b Fu(Refer)30 +b(to)i(command)e(line)g Fr(n)p Fu(.)150 4279 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 4450 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 4621 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 +4731 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: 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 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: 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(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 +Fr(string)630 2132 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) +b(The)630 2242 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 +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: 157 163 +TeXDict begin 157 162 bop 3614 -116 a Fu(157)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 +(159\).)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: 158 164 +TeXDict begin 158 163 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(158)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(158,)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(157\).)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 +Ft(configure)d Fu(is)j(in)f(and)f(in)h(`..'.)275 4280 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 +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: 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 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)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 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: 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.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 +(later)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)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(ofthe)f(v)m(ersion) +h(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 -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 +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(99\).)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)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],)47 b(page)d(99\))h(that)f(pro)m(vides)f(faster)h +(access)g(at)g(the)g(exp)s(ense)f(of)g(using)g(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(99\).)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 +(153\).)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: 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-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(70\))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(101\).)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(54,)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(70,) +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(70,)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 +(54\).)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(151\).)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(112\),)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: 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-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(37\).)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 +(142\).)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(103,)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(116\).)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(104,)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(105\).)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(54,)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: 165 171 +TeXDict begin 165 170 bop 150 -116 a Fu(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(165)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: 166 172 +TeXDict begin 166 171 bop 3614 -116 a Fu(166)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: 167 173 +TeXDict begin 167 172 bop 3614 -116 a Fu(167)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 +20041,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(105\).)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 +(90\).)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 +(116\))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(142\),)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(151\))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 +20062,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 +y(page)31 b(153\).)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 +b(\(see)g(Section)g(6.7)g([Arra)m(ys],)g(page)g(99\),)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 +20086,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: 168 174 +TeXDict begin 168 173 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(168)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(99\).)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(97\).)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 +20144,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 +(33\),)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(77,)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 +(34\).)41 b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h +(hole.)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(163)225 299 y Fq(\017)60 +b(The)f(Bourne)g(Shell)1258 b(169)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(54\).)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(43\).)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(37\).)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(37\).)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 +20249,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(37\).)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(37\).)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(66\).)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(47\))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 +20270,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(54\).)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 +(54\).)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(54\).)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(47\).)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: 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(164)225 299 y Fq(\017)60 +b(The)f(Bourne)g(Shell)1258 b(170)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 +20307,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(47\).)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(54\).)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(54\).)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(54\))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 +20338,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(47\).)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(70\),)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 +(90\).)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(66\).)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(66\).)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(47\))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 +20363,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(47\))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,20 +20381,20 @@ 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(47\))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: 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(165)330 299 y(are)40 b(executed)g(after)g +b(The)f(Bourne)g(Shell)1258 b(171)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 +(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(47\))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 @@ -19879,30 +20409,30 @@ 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(54\).)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(47\).)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(101\).)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(103\).)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(104\);)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(113\))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 +20449,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(90.)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 +20470,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: 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(166)225 299 y Fq(\017)60 +b(The)f(Bourne)g(Shell)1258 b(172)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 +20504,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: 173 179 +TeXDict begin 173 178 bop 3614 -116 a Fu(173)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 +20586,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: 174 180 +TeXDict begin 174 179 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(174)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 +20680,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: 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(169)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +b(175)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 +20773,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: 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(170)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +b(176)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 +20855,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: 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(171)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(177)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 +20943,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: 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(172)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h +b(178)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 +21031,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: 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(173)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE) +b(179)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 +21098,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: 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(174)150 299 y Fs(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f +b(180)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 +21136,1242 @@ 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: 181 187 +TeXDict begin 181 186 bop 3614 -116 a Fu(181)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(47)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(47)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(51)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(54)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(113)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(55)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(48)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(56)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(56)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(48)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(56)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(145)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(145)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(148)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(48)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(57)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(101)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(115)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(58)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(59)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(48)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(49)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(49)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(49)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(152)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(113)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(49)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(50)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(60)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(152)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(113)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(114)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(60)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(60)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(60)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(60)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(102)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(61)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(102)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(50)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(62)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(63)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(51)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(51)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(66)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(51)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(70)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(63)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(115)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(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(51)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(53)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(53)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(63)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(64)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(64)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(54)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(65)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(54)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(114)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 +(:)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: 183 189 +TeXDict begin 183 188 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(183)150 299 y Fs(D.3)68 b(P)l(arameter)47 b(and)d(V)-11 b(ariable)46 b(Index)146 955 y(!)150 1073 y Fe(!)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 -b Fb(22)146 1327 y Fs(#)150 1445 y Fe(#)19 b Fc(:)13 +b Fb(23)146 1327 y Fs(#)150 1445 y Fe(#)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(22)146 +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(23)146 1701 y Fs($)150 1820 y Fe($)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)33 b Fb(22)150 1909 y Fe($!)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)33 b Fb(23)150 1909 y Fe($!)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)31 b Fb(22)150 1997 y Fe($#)16 b Fc(:)e(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)31 b Fb(23)150 1997 y Fe($#)16 b Fc(:)e(:)f(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)31 b Fb(22)150 2085 y Fe($$)16 b Fc(:)e(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)31 b Fb(23)150 2085 y Fe($$)16 b Fc(:)e(:)f(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(22)150 2173 y Fe($*)16 +(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(23)150 2173 y Fe($*)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(22)150 +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(23)150 2261 y Fe($-)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 -b Fb(22)150 2350 y Fe($?)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +b Fb(23)150 2350 y Fe($?)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -31 b Fb(22)150 2438 y Fe($@)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g +31 b Fb(23)150 2438 y Fe($@)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g -(:)31 b Fb(22)150 2526 y Fe($_)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f +(:)31 b Fb(23)150 2526 y Fe($_)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)31 b Fb(73)150 2613 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h +(:)g(:)31 b Fb(77)150 2613 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)31 b Fb(22)146 2876 y Fs(*)150 2994 y Fe(*)19 +(:)g(:)g(:)31 b Fb(23)146 2876 y Fs(*)150 2994 y Fe(*)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b -Fb(22)146 3248 y Fs({)150 3366 y Fe(-)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:) +Fb(23)146 3248 y Fs({)150 3366 y Fe(-)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)33 b Fb(22)146 3620 y Fs(?)150 3738 +g(:)h(:)f(:)g(:)g(:)33 b Fb(23)146 3620 y Fs(?)150 3738 y Fe(?)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 -b Fb(22)146 3992 y Fs(@)150 4110 y Fe(@)19 b Fc(:)13 +b Fb(23)146 3992 y Fs(@)150 4110 y Fe(@)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(22)p +f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(23)p 156 4364 41 6 v 150 4482 a Fe(_)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)33 b Fb(73)146 4736 y Fs(0)150 4854 y +(:)f(:)g(:)g(:)33 b Fb(77)146 4736 y Fs(0)150 4854 y Fe(0)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 -b Fb(22)146 5108 y Fs(A)150 5226 y Fe(auto_resume)8 b +b Fb(23)146 5108 y Fs(A)150 5226 y Fe(auto_resume)8 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -23 b Fb(110)2021 954 y Fs(B)2025 1074 y Fe(BASH)11 b +23 b Fb(115)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(78)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(78)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(78)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(78)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(79)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(79)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(79)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(79)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(79)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(79)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(79)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(80)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(80)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(80)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(80)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(80)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(80)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(80)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(78)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(78)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(120)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(120)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(120)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(77)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(81)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(120)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(120)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(81)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(120)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(81)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(81)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(81)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(81)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(81)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(81)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(81)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(121)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(121)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(121)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(121)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(121)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(82)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(121)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(82)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: 184 190 +TeXDict begin 184 189 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(184)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(82)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(121)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(121)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(121)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(122)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(82)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(122)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(122)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(122)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(82)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(82)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(82)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(82)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(82)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(122)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(83)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(83)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(83)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(83)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(83)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(83)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(83)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(83)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(84)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(84)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(84)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(84)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(122)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(123)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(84)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(84)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(77)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(123)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(85)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(85)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(85)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(77)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(85)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(123)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(85)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(85)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(123)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(123)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(85)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(85)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(85)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(85)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(85)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(86)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(86)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(86)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(86)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(86)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(77)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(86)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(77)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(86)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(124)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(124)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(124)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(124)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(123)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(86)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(77)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(86)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(77)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(86)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(124)p eop end +%%Page: 185 191 +TeXDict begin 185 190 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(185)146 294 y Fs(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(124)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(77)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(86)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(86)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(86)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(86)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(87)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(87)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(77)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(77)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(87)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(87)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(87)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(87)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(87)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(87)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(87)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(87)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(87)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(124)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(87)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(87)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(88)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(88)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(125)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(125)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(125)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(125)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(88)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(88)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(88)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(89)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(89)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(125)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(125)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(126)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(140)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(133)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(142)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(132)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(135)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(136)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(136)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(132)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(133)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(132)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(135)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(140)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(136)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(140)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(140)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(133)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(133)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)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(138)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(139)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(138)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(139)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(139)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(139)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(139)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(137)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(137)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(137)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(139)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(135)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(138)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(137)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(137)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(142)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(140)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(136)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(141)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(141)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(141)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(139)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(142)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(139)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(135)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(133)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(132)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(140)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(135)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(135)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(132)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(133)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(132)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(141)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(141)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(141)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(142)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(142)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(134)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(134)2025 786 y Fe(history-substring-search-backw)q(ard)k +(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(134)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(134)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(141)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(138)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(142)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(136)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(137)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(136)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(136)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(142)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(138)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(138)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(133)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(133)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(134)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(133)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(134)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(136)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: 187 193 +TeXDict begin 187 192 bop 150 -116 a Fu(App)s(endix)29 +b(D:)i(Indexes)2623 b(187)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(139)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(138)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(139)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(139)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(139)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(139)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(140)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(133)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(132)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(140)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(135)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(140)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(133)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(133)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(140)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(135)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(140)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(137)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(132)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(142)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(132)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(137)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(137)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(140)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(141)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(139)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(140)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(135)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(136)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(140)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(138)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(137)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(136)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(137)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(136)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(137)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(134)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(134)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 +g(:)g(:)h(:)f(:)22 b Fb(137)150 3929 y Fs(D.5)68 b(Concept)45 +b(Index)146 4523 y(A)150 4648 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 +b Fb(99)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(97)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 +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)20 b Fb(97)150 5006 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(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(99)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(112)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(157)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(157)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: 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(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(117)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(41)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(151)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(33)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(109)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(109)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(145)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(157)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(101)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(117)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(43)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(97)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(154)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(42)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(97)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(95)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(112)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(151)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(154)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(153)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(151)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(150)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(119)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(157)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(116)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(92,)27 b(93)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(112)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(118)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(118)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(92)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: 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(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 +22380,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(117)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(22)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(105)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(142)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(103)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(115)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(37)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(104)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(97)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(45)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(93)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(44)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(76)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(92)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(112)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(120)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(34)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(118)p eop end %%Trailer userdict /end-hook known{end-hook}if diff --git a/doc/bashref.texi b/doc/bashref.texi index 9e23f5867..fdfc50811 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -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--2021 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,12 @@ 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 pipeline 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 +839,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 +1042,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{;;&}. @@ -1018,13 +1130,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 +1149,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 +1172,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 +1291,48 @@ 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. + Expressions may be combined using the following operators, listed in decreasing order of precedence: @@ -1189,11 +1372,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 +1392,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 +1411,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 +1469,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 +1491,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 +1524,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 @@ -1506,7 +1610,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 @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 +1622,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 @@ -1565,7 +1669,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 +1691,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 +1712,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 +1731,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 +1744,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 +1762,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 +1784,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 +1866,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 +1926,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 +1953,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 +1973,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 +1982,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 +2025,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 +2091,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 +2121,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 +2156,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 +2170,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,11 +2185,23 @@ 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. @@ -2284,21 +2414,79 @@ 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. +Backslash is used to quote @samp{&} in @var{string}; the backslash is removed +in order to permit a literal @samp{&} in the replacement string. +Pattern substitution performs the check for @samp{&} after expanding +@var{string}, +so users should take care to quote backslashes intended to escape +the @samp{&} and inhibit replacement so they survive any quote removal +performed by the expansion of @var{string}. +For instance, + +@example +var=abcdef +echo $@{var/abc/& @} +echo "$@{var/abc/& @}" +echo $@{var/abc/"& "@} +@end example + +@noindent +will display three lines of "abc def", while + +@example +var=abcdef +echo $@{var/abc/\& @} +echo "$@{var/abc/\& @}" +echo $@{var/abc/"\& "@} +@end example + +@noindent +will display two lines of "abc def" and a third line of "& def". +The first two are replaced because the backslash is removed by quote +removal performed during the expansion of @var{string} +(the expansion is performed in a +context that doesn't take any enclosing double quotes into account, as +with other word expansions). +In the third case, the double quotes affect the expansion +of @samp{\&}, and, because @samp{&} is not one of the characters for +which backslash is special in double quotes, +the backslash survives the expansion, inhibits the replacement, +but is removed because it is treated specially. +One could use @samp{\\&}, unquoted, as the replacement string to achive +the same effect. +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 +2509,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 +2518,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 +2563,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 +2631,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 +2754,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 +2769,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} @@ -2641,7 +2841,7 @@ 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 +2854,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 +2864,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 +2889,17 @@ Matches one of the given patterns. Matches anything except one of the given patterns. @end table +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 +2918,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 +2941,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 +3255,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 +3322,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 +3335,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 +3409,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 +3434,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 +3472,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 +3505,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 +3554,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 +3607,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 +3727,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}. +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, the current directory is searched if @var{filename} is not found in @env{$PATH}. If any @var{arguments} are supplied, they become the positional parameters when @var{filename} is executed. Otherwise the positional parameters are unchanged. -If the @option{-T} option is enabled, @code{source} inherits any trap on +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 +3765,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 +3800,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 +3878,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 +4139,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 +4266,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 +4275,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 +4310,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 +4385,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 +4494,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 +4523,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 +4570,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 +4654,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 +4664,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 +4819,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 +4941,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 +5016,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 +5177,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 +5365,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 +5482,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 +5498,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 +5514,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. @@ -5401,6 +5696,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 +5761,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 +5791,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 +5843,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 +6108,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 +6152,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 +6164,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 +6225,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, @@ -5971,7 +6290,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 +6300,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 +6384,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 +6469,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 +6632,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 +6650,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 +6674,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, @@ -6780,8 +7103,9 @@ the same, but the effective user id is not reset. @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 +7168,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 +7239,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 +7257,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 +7495,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 +7524,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 +7544,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 +7552,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, @@ -7387,8 +7716,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 +7805,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 +7822,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 +7868,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 +7942,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 +8028,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 +8040,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}). @@ -7818,7 +8188,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 @@ -7926,16 +8299,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 @@ -8174,6 +8547,40 @@ 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. +@end itemize @end table @node Job Control @@ -8237,9 +8644,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 +8657,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 +8817,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 @@ -8553,7 +8960,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 +8975,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 +9020,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 @@ -8680,18 +9094,49 @@ 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 @@ -8808,9 +9253,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 ofthe 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 +9267,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 +9280,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 +9309,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 +9334,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 +9393,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 +9402,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 +9457,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 +9466,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 +9499,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 +9661,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 +9671,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 +9707,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 +9854,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 diff --git a/doc/builtins.0 b/doc/builtins.0 index 614524eb0..da25eeb03 100644 --- a/doc/builtins.0 +++ b/doc/builtins.0 @@ -3,11 +3,11 @@ BASH_BUILTINS(1) General Commands Manual BASH_BUILTINS(1) NNAAMMEE - bash, :, ., [, alias, bg, bind, break, builtin, caller, cd, command, - compgen, complete, compopt, continue, declare, dirs, disown, echo, 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 bbaasshh(1) @@ -32,21 +32,21 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS vironment and return the exit status of the last command exe- cuted from _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e does not contain a slash, filenames in PPAATTHH are used to find the directory containing - _f_i_l_e_n_a_m_e. The file searched for in PPAATTHH need not be executable. - When bbaasshh is not in _p_o_s_i_x _m_o_d_e, the current directory is - searched if no file is found in PPAATTHH. If the ssoouurrcceeppaatthh option - to the sshhoopptt builtin command is turned off, the PPAATTHH is not - searched. If any _a_r_g_u_m_e_n_t_s are supplied, they become the posi- - tional parameters when _f_i_l_e_n_a_m_e is executed. Otherwise the po- - sitional parameters are unchanged. If the --TT option is enabled, - ssoouurrccee inherits any trap on DDEEBBUUGG; if it is not, any DDEEBBUUGG trap - string is saved and restored around the call to ssoouurrccee, and - ssoouurrccee unsets the DDEEBBUUGG trap while it executes. If --TT is not - set, and the sourced file changes the DDEEBBUUGG trap, the new value - is retained when ssoouurrccee completes. The return status is the - status of the last command exited within the script (0 if no - commands are executed), and false if _f_i_l_e_n_a_m_e is not found or - cannot be read. + _f_i_l_e_n_a_m_e, but _f_i_l_e_n_a_m_e does not need to be executable. The file + searched for in PPAATTHH need not be executable. When bbaasshh is not + in _p_o_s_i_x _m_o_d_e, the current directory is searched if no file is + found in PPAATTHH. If the ssoouurrcceeppaatthh option to the sshhoopptt builtin + command is turned off, the PPAATTHH is not searched. If any _a_r_g_u_- + _m_e_n_t_s are supplied, they become the positional parameters when + _f_i_l_e_n_a_m_e is executed. Otherwise the positional parameters are + unchanged. If the --TT option is enabled, .. inherits any trap on + DDEEBBUUGG; if it is not, any DDEEBBUUGG trap string is saved and restored + around the call to .., and .. unsets the DDEEBBUUGG trap while it exe- + cutes. If --TT is not set, and the sourced file changes the DDEEBBUUGG + trap, the new value is retained when .. completes. The return + status is the status of the last command exited within the + script (0 if no commands are executed), and false if _f_i_l_e_n_a_m_e is + not found or cannot be read. aalliiaass [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] AAlliiaass with no arguments or with the --pp option prints the list of @@ -73,29 +73,31 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS bbiinndd [--mm _k_e_y_m_a_p] --xx _k_e_y_s_e_q:_s_h_e_l_l_-_c_o_m_m_a_n_d bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_f_u_n_c_t_i_o_n_-_n_a_m_e bbiinndd [--mm _k_e_y_m_a_p] _k_e_y_s_e_q:_r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d + bbiinndd _r_e_a_d_l_i_n_e_-_c_o_m_m_a_n_d_-_l_i_n_e Display current rreeaaddlliinnee key and function bindings, bind a key sequence to a rreeaaddlliinnee function or macro, or set a rreeaaddlliinnee variable. Each non-option argument is a command as it would ap- - pear in _._i_n_p_u_t_r_c, but each binding or command must be passed as - a separate argument; e.g., '"\C-x\C-r": re-read-init-file'. Op- - tions, if supplied, have the following meanings: + pear in a rreeaaddlliinnee initialization file such as _._i_n_p_u_t_r_c, but + each binding or command must be passed as a separate argument; + e.g., '"\C-x\C-r": re-read-init-file'. Options, if supplied, + have the following meanings: --mm _k_e_y_m_a_p Use _k_e_y_m_a_p as the keymap to be affected by the subsequent bindings. Acceptable _k_e_y_m_a_p names are _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_- - _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, - and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e - is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- + _d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, + and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d (_v_i_-_m_o_v_e + is also a synonym); _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_- _d_a_r_d. --ll List the names of all rreeaaddlliinnee functions. - --pp Display rreeaaddlliinnee function names and bindings in such a + --pp Display rreeaaddlliinnee function names and bindings in such a way that they can be re-read. --PP List current rreeaaddlliinnee function names and bindings. - --ss Display rreeaaddlliinnee key sequences bound to macros and the - strings they output in such a way that they can be re- + --ss Display rreeaaddlliinnee key sequences bound to macros and the + strings they output in such a way that they can be re- read. - --SS Display rreeaaddlliinnee key sequences bound to macros and the + --SS Display rreeaaddlliinnee key sequences bound to macros and the strings they output. - --vv Display rreeaaddlliinnee variable names and values in such a way + --vv Display rreeaaddlliinnee variable names and values in such a way that they can be re-read. --VV List current rreeaaddlliinnee variable names and values. --ff _f_i_l_e_n_a_m_e @@ -108,14 +110,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS Remove any current binding for _k_e_y_s_e_q. --xx _k_e_y_s_e_q::_s_h_e_l_l_-_c_o_m_m_a_n_d Cause _s_h_e_l_l_-_c_o_m_m_a_n_d to be executed whenever _k_e_y_s_e_q is en- - tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets - the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- + tered. When _s_h_e_l_l_-_c_o_m_m_a_n_d is executed, the shell sets + the RREEAADDLLIINNEE__LLIINNEE variable to the contents of the rreeaadd-- lliinnee line buffer and the RREEAADDLLIINNEE__PPOOIINNTT and RREEAADDLLIINNEE__MMAARRKK - variables to the current location of the insertion point - and the saved insertion point (the mark), respectively. - If the executed command changes the value of any of RREEAADD-- - LLIINNEE__LLIINNEE, RREEAADDLLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, 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 RREEAADDLLIINNEE__AARRGGUUMMEENNTT variable. If there was no argu- + ment, that variable is not set. If the executed command + changes the value of any of RREEAADDLLIINNEE__LLIINNEE, RREEAADD-- + LLIINNEE__PPOOIINNTT, or RREEAADDLLIINNEE__MMAARRKK, those new values will be + reflected in the editing state. --XX List all key sequences bound to shell commands and the associated commands in a format that can be reused as in- put. @@ -153,137 +158,140 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ccdd [--LL|[--PP [--ee]] [-@]] [_d_i_r] Change the current directory to _d_i_r. if _d_i_r is not supplied, - the value of the HHOOMMEE shell variable is the default. Any addi- - tional arguments following _d_i_r are ignored. The variable CCDDPPAATTHH - defines the search path for the directory containing _d_i_r: each - directory name in CCDDPPAATTHH is searched for _d_i_r. Alternative di- - rectory names in CCDDPPAATTHH are separated by a colon (:). A null - directory name in CCDDPPAATTHH is the same as the current directory, - i.e., ``..''. If _d_i_r begins with a slash (/), then CCDDPPAATTHH is not - used. The --PP option causes ccdd to use the physical directory - structure by resolving symbolic links while traversing _d_i_r and - before processing instances of _._. in _d_i_r (see also the --PP option - to the sseett builtin command); the --LL option forces symbolic links - to be followed by resolving the link after processing instances - of _._. in _d_i_r. If _._. appears in _d_i_r, it is processed by removing - the immediately previous pathname component from _d_i_r, back to a - slash or the beginning of _d_i_r. If the --ee option is supplied - with --PP, and the current working directory cannot be success- - fully determined after a successful directory change, ccdd will - return an unsuccessful status. On systems that support it, the - --@@ option presents the extended attributes associated with a - file as a directory. An argument of -- is converted to $$OOLLDDPPWWDD - before the directory change is attempted. If a non-empty direc- - tory name from CCDDPPAATTHH is used, or if -- is the first argument, - and the directory change is successful, the absolute pathname of - the new working directory is written to the standard output. - The return value is true if the directory was successfully - changed; false otherwise. + the value of the HHOOMMEE shell variable is the default. The vari- + able CCDDPPAATTHH defines the search path for the directory containing + _d_i_r: each directory name in CCDDPPAATTHH is searched for _d_i_r. Alter- + native directory names in CCDDPPAATTHH are separated by a colon (:). + A null directory name in CCDDPPAATTHH is the same as the current di- + rectory, i.e., ``..''. If _d_i_r begins with a slash (/), then CCDD-- + PPAATTHH is not used. The --PP option causes ccdd to use the physical + directory structure by resolving symbolic links while traversing + _d_i_r and before processing instances of _._. in _d_i_r (see also the + --PP option to the sseett builtin command); the --LL option forces sym- + bolic links to be followed by resolving the link after process- + ing instances of _._. in _d_i_r. If _._. appears in _d_i_r, it is pro- + cessed by removing the immediately previous pathname component + from _d_i_r, back to a slash or the beginning of _d_i_r. If the --ee + option is supplied with --PP, and the current working directory + cannot be successfully determined after a successful directory + change, ccdd will return an unsuccessful status. On systems that + support it, the --@@ option presents the extended attributes asso- + ciated with a file as a directory. An argument of -- is con- + verted to $$OOLLDDPPWWDD before the directory change is attempted. If + a non-empty directory name from CCDDPPAATTHH is used, or if -- is the + first argument, and the directory change is successful, the ab- + solute pathname of the new working directory is written to the + standard output. If the directory change is successful, ccdd sets + the value of the PPWWDD environment variable to the new directory + name, and sets the OOLLDDPPWWDD environment variable to the value of + the current working directory before the change. The return + value is true if the directory was successfully changed; false + otherwise. ccoommmmaanndd [--ppVVvv] _c_o_m_m_a_n_d [_a_r_g ...] - Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function + Run _c_o_m_m_a_n_d with _a_r_g_s suppressing the normal shell function lookup. Only builtin commands or commands found in the PPAATTHH are - executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is - performed using a default value for PPAATTHH that is guaranteed to - find all of the standard utilities. If either the --VV or --vv op- - tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv - option causes a single word indicating the command or filename + executed. If the --pp option is given, the search for _c_o_m_m_a_n_d is + performed using a default value for PPAATTHH that is guaranteed to + find all of the standard utilities. If either the --VV or --vv op- + tion is supplied, a description of _c_o_m_m_a_n_d is printed. The --vv + option causes a single word indicating the command or filename used to invoke _c_o_m_m_a_n_d to be displayed; the --VV option produces a - more verbose description. If the --VV or --vv option is supplied, - the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If + more verbose description. If the --VV or --vv option is supplied, + the exit status is 0 if _c_o_m_m_a_n_d was found, and 1 if not. If neither option is supplied and an error occurred or _c_o_m_m_a_n_d can- - not be found, the exit status is 127. Otherwise, the exit sta- + not be found, the exit status is 127. Otherwise, the exit sta- tus of the ccoommmmaanndd builtin is the exit status of _c_o_m_m_a_n_d. ccoommppggeenn [_o_p_t_i_o_n] [_w_o_r_d] - Generate possible completion matches for _w_o_r_d according to the - _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee - builtin with the exception of --pp and --rr, and write the matches - to the standard output. When using the --FF or --CC options, the - various shell variables set by the programmable completion fa- + Generate possible completion matches for _w_o_r_d according to the + _o_p_t_i_o_ns, which may be any option accepted by the ccoommpplleettee + builtin with the exception of --pp and --rr, and write the matches + to the standard output. When using the --FF or --CC options, the + various shell variables set by the programmable completion fa- cilities, while available, will not have useful values. The matches will be generated in the same way as if the program- mable completion code had generated them directly from a comple- - tion specification with the same flags. If _w_o_r_d is specified, + tion specification with the same flags. If _w_o_r_d is specified, only those completions matching _w_o_r_d will be displayed. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, or no matches were generated. - ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- + ccoommpplleettee [--aabbccddeeffggjjkkssuuvv] [--oo _c_o_m_p_-_o_p_t_i_o_n] [--DDEEII] [--AA _a_c_t_i_o_n] [--GG _g_l_o_b_- _p_a_t] [--WW _w_o_r_d_l_i_s_t] - [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- + [--FF _f_u_n_c_t_i_o_n] [--CC _c_o_m_m_a_n_d] [--XX _f_i_l_t_e_r_p_a_t] [--PP _p_r_e_f_i_x] [--SS _s_u_f_- _f_i_x] _n_a_m_e [_n_a_m_e _._._.] ccoommpplleettee --pprr [--DDEEII] [_n_a_m_e ...] - Specify how arguments to each _n_a_m_e should be completed. If the - --pp option is supplied, or if no options are supplied, existing - completion specifications are printed in a way that allows them + Specify how arguments to each _n_a_m_e should be completed. If the + --pp option is supplied, or if no options are supplied, existing + completion specifications are printed in a way that allows them to be reused as input. The --rr option removes a completion spec- - ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- + ification for each _n_a_m_e, or, if no _n_a_m_es are supplied, all com- pletion specifications. The --DD option indicates that other sup- - plied options and actions should apply to the ``default'' com- - mand completion; that is, completion attempted on a command for - which no completion has previously been defined. The --EE option - indicates that other supplied options and actions should apply - to ``empty'' command completion; that is, completion attempted - on a blank line. The --II option indicates that other supplied - options and actions should apply to completion on the initial - non-assignment word on the line, or after a command delimiter - such as ;; or ||, which is usually command name completion. If - multiple options are supplied, the --DD option takes precedence + plied options and actions should apply to the ``default'' com- + mand completion; that is, completion attempted on a command for + which no completion has previously been defined. The --EE option + indicates that other supplied options and actions should apply + to ``empty'' command completion; that is, completion attempted + on a blank line. The --II option indicates that other supplied + options and actions should apply to completion on the initial + non-assignment word on the line, or after a command delimiter + such as ;; or ||, which is usually command name completion. If + multiple options are supplied, the --DD option takes precedence over --EE, and both take precedence over --II. If any of --DD, --EE, or - --II are supplied, any other _n_a_m_e arguments are ignored; these + --II are supplied, any other _n_a_m_e arguments are ignored; these completions only apply to the case specified by the option. - The process of applying these completion specifications when - word completion is attempted is described above under PPrrooggrraamm-- + The process of applying these completion specifications when + word completion is attempted is described above under PPrrooggrraamm-- mmaabbllee CCoommpplleettiioonn. - Other options, if specified, have the following meanings. The - arguments to the --GG, --WW, and --XX options (and, if necessary, the - --PP and --SS options) should be quoted to protect them from expan- + Other options, if specified, have the following meanings. The + arguments to the --GG, --WW, and --XX options (and, if necessary, the + --PP and --SS options) should be quoted to protect them from expan- sion before the ccoommpplleettee builtin is invoked. --oo _c_o_m_p_-_o_p_t_i_o_n - The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- - spec's behavior beyond the simple generation of comple- + The _c_o_m_p_-_o_p_t_i_o_n controls several aspects of the comp- + spec's behavior beyond the simple generation of comple- tions. _c_o_m_p_-_o_p_t_i_o_n may be one of: bbaasshhddeeffaauulltt Perform the rest of the default bbaasshh completions if the compspec generates no matches. - ddeeffaauulltt Use readline's default filename completion if + ddeeffaauulltt Use readline's default filename completion if the compspec generates no matches. ddiirrnnaammeess - Perform directory name completion if the comp- + Perform directory name completion if the comp- spec generates no matches. ffiilleennaammeess - Tell readline that the compspec generates file- - names, so it can perform any filename-specific - processing (like adding a slash to directory - names, quoting special characters, or suppress- - ing trailing spaces). Intended to be used with + Tell readline that the compspec generates file- + names, so it can perform any filename-specific + processing (like adding a slash to directory + names, quoting special characters, or suppress- + ing trailing spaces). Intended to be used with shell functions. - nnooqquuoottee Tell readline not to quote the completed words - if they are filenames (quoting filenames is the + nnooqquuoottee Tell readline not to quote the completed words + if they are filenames (quoting filenames is the default). - nnoossoorrtt Tell readline not to sort the list of possible + nnoossoorrtt Tell readline not to sort the list of possible completions alphabetically. - nnoossppaaccee Tell readline not to append a space (the de- - fault) to words completed at the end of the + nnoossppaaccee Tell readline not to append a space (the de- + fault) to words completed at the end of the line. pplluussddiirrss - After any matches defined by the compspec are + After any matches defined by the compspec are generated, directory name completion is at- tempted and any matches are added to the results of the other actions. --AA _a_c_t_i_o_n - The _a_c_t_i_o_n may be one of the following to generate a + The _a_c_t_i_o_n may be one of the following to generate a list of possible completions: aalliiaass Alias names. May also be specified as --aa. aarrrraayyvvaarr Array variable names. bbiinnddiinngg RReeaaddlliinnee key binding names. - bbuuiillttiinn Names of shell builtin commands. May also be + bbuuiillttiinn Names of shell builtin commands. May also be specified as --bb. ccoommmmaanndd Command names. May also be specified as --cc. ddiirreeccttoorryy @@ -291,7 +299,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ddiissaabblleedd Names of disabled shell builtins. eennaabblleedd Names of enabled shell builtins. - eexxppoorrtt Names of exported shell variables. May also be + eexxppoorrtt Names of exported shell variables. May also be specified as --ee. ffiillee File names. May also be specified as --ff. ffuunnccttiioonn @@ -300,17 +308,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS hheellppttooppiicc Help topics as accepted by the hheellpp builtin. hhoossttnnaammee - Hostnames, as taken from the file specified by + Hostnames, as taken from the file specified by the HHOOSSTTFFIILLEE shell variable. - jjoobb Job names, if job control is active. May also + jjoobb Job names, if job control is active. May also be specified as --jj. - kkeeyywwoorrdd Shell reserved words. May also be specified as + kkeeyywwoorrdd Shell reserved words. May also be specified as --kk. rruunnnniinngg Names of running jobs, if job control is active. sseerrvviiccee Service names. May also be specified as --ss. - sseettoopptt Valid arguments for the --oo option to the sseett + sseettoopptt Valid arguments for the --oo option to the sseett builtin. - sshhoopptt Shell option names as accepted by the sshhoopptt + sshhoopptt Shell option names as accepted by the sshhoopptt builtin. ssiiggnnaall Signal names. ssttooppppeedd Names of stopped jobs, if job control is active. @@ -319,197 +327,197 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS Names of all shell variables. May also be spec- ified as --vv. --CC _c_o_m_m_a_n_d - _c_o_m_m_a_n_d is executed in a subshell environment, and its + _c_o_m_m_a_n_d is executed in a subshell environment, and its output is used as the possible completions. --FF _f_u_n_c_t_i_o_n - The shell function _f_u_n_c_t_i_o_n is executed in the current - shell environment. When the function is executed, the + The shell function _f_u_n_c_t_i_o_n is executed in the current + shell environment. When the function is executed, the first argument ($$11) is the name of the command whose ar- guments are being completed, the second argument ($$22) is the word being completed, and the third argument ($$33) is - the word preceding the word being completed on the cur- - rent command line. When it finishes, the possible com- - pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY + the word preceding the word being completed on the cur- + rent command line. When it finishes, the possible com- + pletions are retrieved from the value of the CCOOMMPPRREEPPLLYY array variable. --GG _g_l_o_b_p_a_t - The pathname expansion pattern _g_l_o_b_p_a_t is expanded to + The pathname expansion pattern _g_l_o_b_p_a_t is expanded to generate the possible completions. --PP _p_r_e_f_i_x - _p_r_e_f_i_x is added at the beginning of each possible com- + _p_r_e_f_i_x is added at the beginning of each possible com- pletion after all other options have been applied. --SS _s_u_f_f_i_x _s_u_f_f_i_x is appended to each possible completion after all other options have been applied. --WW _w_o_r_d_l_i_s_t - The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS - special variable as delimiters, and each resultant word - is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, + The _w_o_r_d_l_i_s_t is split using the characters in the IIFFSS + special variable as delimiters, and each resultant word + is expanded. Shell quoting is honored within _w_o_r_d_l_i_s_t, in order to provide a mechanism for the words to contain - shell metacharacters or characters in the value of IIFFSS. - The possible completions are the members of the resul- + shell metacharacters or characters in the value of IIFFSS. + The possible completions are the members of the resul- tant list which match the word being completed. --XX _f_i_l_t_e_r_p_a_t - _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. + _f_i_l_t_e_r_p_a_t is a pattern as used for pathname expansion. It is applied to the list of possible completions gener- - ated by the preceding options and arguments, and each - completion matching _f_i_l_t_e_r_p_a_t is removed from the list. - A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this + ated by the preceding options and arguments, and each + completion matching _f_i_l_t_e_r_p_a_t is removed from the list. + A leading !! in _f_i_l_t_e_r_p_a_t negates the pattern; in this case, any completion not matching _f_i_l_t_e_r_p_a_t is removed. - The return value is true unless an invalid option is supplied, - an option other than --pp or --rr is supplied without a _n_a_m_e argu- - ment, an attempt is made to remove a completion specification + The return value is true unless an invalid option is supplied, + an option other than --pp or --rr is supplied without a _n_a_m_e argu- + ment, an attempt is made to remove a completion specification for a _n_a_m_e for which no specification exists, or an error occurs adding a completion specification. ccoommppoopptt [--oo _o_p_t_i_o_n] [--DDEEII] [++oo _o_p_t_i_o_n] [_n_a_m_e] - Modify completion options for each _n_a_m_e according to the _o_p_- + Modify completion options for each _n_a_m_e according to the _o_p_- _t_i_o_ns, or for the currently-executing completion if no _n_a_m_es are - supplied. If no _o_p_t_i_o_ns are given, display the completion op- - tions for each _n_a_m_e or the current completion. The possible - values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- - scribed above. The --DD option indicates that other supplied op- - tions should apply to the ``default'' command completion; that - is, completion attempted on a command for which no completion + supplied. If no _o_p_t_i_o_ns are given, display the completion op- + tions for each _n_a_m_e or the current completion. The possible + values of _o_p_t_i_o_n are those valid for the ccoommpplleettee builtin de- + scribed above. The --DD option indicates that other supplied op- + tions should apply to the ``default'' command completion; that + is, completion attempted on a command for which no completion has previously been defined. The --EE option indicates that other - supplied options should apply to ``empty'' command completion; - that is, completion attempted on a blank line. The --II option + supplied options should apply to ``empty'' command completion; + that is, completion attempted on a blank line. The --II option indicates that other supplied options should apply to completion - on the initial non-assignment word on the line, or after a com- - mand delimiter such as ;; or ||, which is usually command name + on the initial non-assignment word on the line, or after a com- + mand delimiter such as ;; or ||, which is usually command name completion. - The return value is true unless an invalid option is supplied, + The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a _n_a_m_e for which no completion specification exists, or an output error occurs. ccoonnttiinnuuee [_n] Resume the next iteration of the enclosing ffoorr, wwhhiillee, uunnttiill, or - sseelleecctt loop. If _n is specified, resume at the _nth enclosing - loop. _n must be >= 1. If _n is greater than the number of en- - closing loops, the last enclosing loop (the ``top-level'' loop) - is resumed. The return value is 0 unless _n is not greater than + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of en- + closing loops, the last enclosing loop (the ``top-level'' loop) + is resumed. The return value is 0 unless _n is not greater than or equal to 1. ddeeccllaarree [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaAAffFFggiiIIllnnrrttuuxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] - Declare variables and/or give them attributes. If no _n_a_m_es are - given then display the values of variables. The --pp option will + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will display the attributes and values of each _n_a_m_e. When --pp is used - with _n_a_m_e arguments, additional options, other than --ff and --FF, - are ignored. When --pp is supplied without _n_a_m_e arguments, it - will display the attributes and values of all variables having + with _n_a_m_e arguments, additional options, other than --ff and --FF, + are ignored. When --pp is supplied without _n_a_m_e arguments, it + will display the attributes and values of all variables having the attributes specified by the additional options. If no other - options are supplied with --pp, ddeeccllaarree will display the at- - tributes and values of all shell variables. The --ff option will + options are supplied with --pp, ddeeccllaarree will display the at- + tributes and values of all shell variables. The --ff option will restrict the display to shell functions. The --FF option inhibits - the display of function definitions; only the function name and + the display of function definitions; only the function name and attributes are printed. If the eexxttddeebbuugg shell option is enabled - using sshhoopptt, the source file name and line number where each - _n_a_m_e is defined are displayed as well. The --FF option implies + using sshhoopptt, the source file name and line number where each + _n_a_m_e is defined are displayed as well. The --FF option implies --ff. The --gg option forces variables to be created or modified at the global scope, even when ddeeccllaarree is executed in a shell func- - tion. It is ignored in all other cases. The --II option causes - local variables to inherit the attributes (except the _n_a_m_e_r_e_f + tion. It is ignored in all other cases. The --II option causes + local variables to inherit the attributes (except the _n_a_m_e_r_e_f attribute) and value of any existing variable with the same _n_a_m_e - at a surrounding scope. If there is no existing variable, the + 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: - --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss + --aa Each _n_a_m_e is an indexed array variable (see AArrrraayyss above). - --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss + --AA Each _n_a_m_e is an associative array variable (see AArrrraayyss above). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN above) is performed when the variable is assigned a value. - --ll When the variable is assigned a value, all upper-case - characters are converted to lower-case. The upper-case + --ll When the variable is assigned a value, all upper-case + characters are converted to lower-case. The upper-case attribute is disabled. - --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name - reference to another variable. That other variable is - defined by the value of _n_a_m_e. All references, assign- - ments, and attribute modifications to _n_a_m_e, except those - using or changing the --nn attribute itself, are performed - on the variable referenced by _n_a_m_e's value. The nameref + --nn Give each _n_a_m_e the _n_a_m_e_r_e_f attribute, making it a name + reference to another variable. That other variable is + defined by the value of _n_a_m_e. All references, assign- + ments, and attribute modifications to _n_a_m_e, except those + using or changing the --nn attribute itself, are performed + on the variable referenced by _n_a_m_e's value. The nameref attribute cannot be applied to array variables. --rr Make _n_a_m_es readonly. These names cannot then be assigned values by subsequent assignment statements or unset. --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions in- - herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. + herit the DDEEBBUUGG and RREETTUURRNN traps from the calling shell. The trace attribute has no special meaning for variables. - --uu When the variable is assigned a value, all lower-case - characters are converted to upper-case. The lower-case + --uu When the variable is assigned a value, all lower-case + characters are converted to upper-case. The lower-case attribute is disabled. - --xx Mark _n_a_m_es for export to subsequent commands via the en- + --xx Mark _n_a_m_es for export to subsequent commands via the en- vironment. - Using `+' instead of `-' turns off the attribute instead, with - the exceptions that ++aa and ++AA may not be used to destroy array - variables and ++rr will not remove the readonly attribute. When + Using `+' instead of `-' turns off the attribute instead, with + the exceptions that ++aa and ++AA may not be used to destroy array + variables and ++rr will not remove the readonly attribute. When used in a function, ddeeccllaarree and ttyyppeesseett make each _n_a_m_e local, as - with the llooccaall command, unless the --gg option is supplied. If a - variable name is followed by =_v_a_l_u_e, the value of the variable - is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- - ment syntax to create array variables, additional attributes do - not take effect until subsequent assignments. The return value + with the llooccaall command, unless the --gg option is supplied. If a + variable name is followed by =_v_a_l_u_e, the value of the variable + is set to _v_a_l_u_e. When using --aa or --AA and the compound assign- + ment syntax to create array variables, additional attributes do + not take effect until subsequent assignments. The return value is 0 unless an invalid option is encountered, an attempt is made to define a function using ``-f foo=bar'', an attempt is made to assign a value to a readonly variable, an attempt is made to as- sign a value to an array variable without using the compound as- - signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a - valid shell variable name, an attempt is made to turn off read- - only status for a readonly variable, an attempt is made to turn + signment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a + valid shell variable name, an attempt is made to turn off read- + only status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with --ff. ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]] - Without options, displays the list of currently remembered di- - rectories. The default display is on a single line with direc- - tory names separated by spaces. Directories are added to the - list with the ppuusshhdd command; the ppooppdd command removes entries + Without options, displays the list of currently remembered di- + rectories. The default display is on a single line with direc- + tory names separated by spaces. Directories are added to the + list with the ppuusshhdd command; the ppooppdd command removes entries from the list. The current directory is always the first direc- tory in the stack. - --cc Clears the directory stack by deleting all of the en- + --cc Clears the directory stack by deleting all of the en- tries. - --ll Produces a listing using full pathnames; the default + --ll Produces a listing using full pathnames; the default listing format uses a tilde to denote the home directory. --pp Print the directory stack with one entry per line. - --vv Print the directory stack with one entry per line, pre- + --vv Print the directory stack with one entry per line, pre- fixing each entry with its index in the stack. ++_n Displays the _nth entry counting from the left of the list shown by ddiirrss when invoked without options, starting with zero. - --_n Displays the _nth entry counting from the right of the + --_n Displays the _nth entry counting from the right of the list shown by ddiirrss when invoked without options, starting with zero. - The return value is 0 unless an invalid option is supplied or _n + The return value is 0 unless an invalid option is supplied or _n indexes beyond the end of the directory stack. ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ... | _p_i_d ... ] - Without options, remove each _j_o_b_s_p_e_c from the table of active - jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr - option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option - is given, each _j_o_b_s_p_e_c is not removed from the table, but is - marked so that SSIIGGHHUUPP is not sent to the job if the shell re- + Without options, remove each _j_o_b_s_p_e_c from the table of active + jobs. If _j_o_b_s_p_e_c is not present, and neither the --aa nor the --rr + option is supplied, the _c_u_r_r_e_n_t _j_o_b is used. If the --hh option + is given, each _j_o_b_s_p_e_c is not removed from the table, but is + marked so that SSIIGGHHUUPP is not sent to the job if the shell re- ceives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is supplied, the --aa option means - to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- + to remove or mark all jobs; the --rr option without a _j_o_b_s_p_e_c ar- gument restricts operation to running jobs. The return value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job. eecchhoo [--nneeEE] [_a_r_g ...] - Output the _a_r_gs, separated by spaces, followed by a newline. - The return status is 0 unless a write error occurs. If --nn is + Output the _a_r_gs, separated by spaces, followed by a newline. + The return status is 0 unless a write error occurs. If --nn is specified, the trailing newline is suppressed. If the --ee option - is given, interpretation of the following backslash-escaped - characters is enabled. The --EE option disables the interpreta- - tion of these escape characters, even on systems where they are - interpreted by default. The xxppgg__eecchhoo shell option may be used - to dynamically determine whether or not eecchhoo expands these es- - cape characters by default. eecchhoo does not interpret ---- to mean - the end of options. eecchhoo interprets the following escape se- + is given, interpretation of the following backslash-escaped + characters is enabled. The --EE option disables the interpreta- + tion of these escape characters, even on systems where they are + interpreted by default. The xxppgg__eecchhoo shell option may be used + to dynamically determine whether or not eecchhoo expands these es- + cape characters by default. eecchhoo does not interpret ---- to mean + the end of options. eecchhoo interprets the following escape se- quences: \\aa alert (bell) \\bb backspace @@ -522,194 +530,200 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS \\tt horizontal tab \\vv vertical tab \\\\ backslash - \\00_n_n_n the eight-bit character whose value is the octal value + \\00_n_n_n the eight-bit character whose value is the octal value _n_n_n (zero to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) - \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the + \\uu_H_H_H_H the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H (one to four hex digits) \\UU_H_H_H_H_H_H_H_H - the Unicode (ISO/IEC 10646) character whose value is the + the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value _H_H_H_H_H_H_H_H (one to eight hex digits) eennaabbllee [--aa] [--ddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] - Enable and disable builtin shell commands. Disabling a builtin + Enable and disable builtin shell commands. Disabling a builtin allows a disk command which has the same name as a shell builtin - to be executed without specifying a full pathname, even though - the shell normally searches for builtins before disk commands. - If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- - abled. For example, to use the tteesstt binary found via the PPAATTHH - instead of the shell builtin version, run ``enable -n test''. - The --ff option means to load the new builtin command _n_a_m_e from + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are en- + abled. For example, to use the tteesstt binary found via the PPAATTHH + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - The --dd option will delete a builtin previously loaded with --ff. - If no _n_a_m_e arguments are given, or if the --pp option is supplied, - a list of shell builtins is printed. With no other option argu- - ments, the list consists of all enabled shell builtins. If --nn - is supplied, only disabled builtins are printed. If --aa is sup- - plied, the list printed includes all builtins, with an indica- - tion of whether or not each is enabled. If --ss is supplied, the - output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return - value is 0 unless a _n_a_m_e is not a shell builtin or there is an - error loading a new builtin from a shared object. + Bash will use the value of the BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH variable as a + colon-separated list of directories in which to search for _f_i_l_e_- + _n_a_m_e. The default is system-dependent. The --dd option will + delete a builtin previously loaded with --ff. If no _n_a_m_e argu- + ments are given, or if the --pp option is supplied, a list of + shell builtins is printed. With no other option arguments, the + list consists of all enabled shell builtins. If --nn is supplied, + only disabled builtins are printed. If --aa is supplied, the list + printed includes all builtins, with an indication of whether or + not each is enabled. If --ss is supplied, the output is re- + stricted to the POSIX _s_p_e_c_i_a_l builtins. If no options are sup- + plied and a _n_a_m_e is not a shell builtin, eennaabbllee will attempt to + load _n_a_m_e from a shared object named _n_a_m_e, as if the command + were ``enable -f _n_a_m_e _n_a_m_e . The return value is 0 unless a + _n_a_m_e is not a shell builtin or there is an error loading a new + builtin from a shared object. eevvaall [_a_r_g ...] - The _a_r_gs are read and concatenated together into a single com- - mand. This command is then read and executed by the shell, and - its exit status is returned as the value of eevvaall. If there are + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are no _a_r_g_s, or only null arguments, eevvaall returns 0. eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] - If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process - is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If the --ll option is supplied, the shell places a dash at the begin- ning of the zeroth argument passed to _c_o_m_m_a_n_d. This is what _l_o_- - _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with - an empty environment. If --aa is supplied, the shell passes _n_a_m_e + _g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with + an empty environment. If --aa is supplied, the shell passes _n_a_m_e as the zeroth argument to the executed command. If _c_o_m_m_a_n_d can- - not be executed for some reason, a non-interactive shell exits, - unless the eexxeeccffaaiill shell option is enabled. In that case, it - returns failure. An interactive shell returns failure if the - file cannot be executed. A subshell exits unconditionally if - eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take - effect in the current shell, and the return status is 0. If + not be executed for some reason, a non-interactive shell exits, + unless the eexxeeccffaaiill shell option is enabled. In that case, it + returns failure. An interactive shell returns failure if the + file cannot be executed. A subshell exits unconditionally if + eexxeecc fails. If _c_o_m_m_a_n_d is not specified, any redirections take + effect in the current shell, and the return status is 0. If there is a redirection error, the return status is 1. eexxiitt [_n] - Cause the shell to exit with a status of _n. If _n is omitted, + Cause the shell to exit with a status of _n. If _n is omitted, the exit status is that of the last command executed. A trap on EEXXIITT is executed before the shell terminates. eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... eexxppoorrtt --pp - The supplied _n_a_m_e_s are marked for automatic export to the envi- - ronment of subsequently executed commands. If the --ff option is - given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or - if the --pp option is supplied, a list of names of all exported - variables is printed. The --nn option causes the export property + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of names of all exported + variables is printed. The --nn option causes the export property to be removed from each _n_a_m_e. If a variable name is followed by =_w_o_r_d, the value of the variable is set to _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid option is encountered, one - of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- + of the _n_a_m_e_s is not a valid shell variable name, or --ff is sup- plied with a _n_a_m_e that is not a function. ffcc [--ee _e_n_a_m_e] [--llnnrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] - The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t - from the history list and displays or edits and re-executes - them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate - the last command beginning with that string) or as a number (an - index into the history list, where a negative number is used as - an offset from the current command number). When listing, a - _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to - the current command (usually the ffcc command); otherwise 0 is - equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, - it is set to the current command for listing (so that ``fc -l - -10'' prints the last 10 commands) and to _f_i_r_s_t otherwise. If - _f_i_r_s_t is not specified, it is set to the previous command for + The first form selects a range of commands from _f_i_r_s_t to _l_a_s_t + from the history list and displays or edits and re-executes + them. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate + the last command beginning with that string) or as a number (an + index into the history list, where a negative number is used as + an offset from the current command number). When listing, a + _f_i_r_s_t or _l_a_s_t of 0 is equivalent to -1 and -0 is equivalent to + the current command (usually the ffcc command); otherwise 0 is + equivalent to -1 and -0 is invalid. If _l_a_s_t is not specified, + it is set to the current command for listing (so that ``fc -l + -10'' prints the last 10 commands) and to _f_i_r_s_t otherwise. If + _f_i_r_s_t is not specified, it is set to the previous command for editing and -16 for listing. - The --nn option suppresses the command numbers when listing. The - --rr option reverses the order of the commands. If the --ll option - is given, the commands are listed on standard output. Other- - wise, the editor given by _e_n_a_m_e is invoked on a file containing - those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT - variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. - If neither variable is set, _v_i is used. When editing is com- + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, _v_i is used. When editing is com- plete, the edited commands are echoed and executed. - In the second form, _c_o_m_m_a_n_d is re-executed after each instance - of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as - _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', - so that typing ``r cc'' runs the last command beginning with + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. _C_o_m_m_a_n_d is interpreted the same as + _f_i_r_s_t above. A useful alias to use with this is ``r="fc -s"'', + so that typing ``r cc'' runs the last command beginning with ``cc'' and typing ``r'' re-executes the last command. - If the first form is used, the return value is 0 unless an in- - valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history - lines out of range. If the --ee option is supplied, the return + If the first form is used, the return value is 0 unless an in- + valid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee option is supplied, the return value is the value of the last command executed or failure if an error occurs with the temporary file of commands. If the second - form is used, the return status is that of the command re-exe- - cuted, unless _c_m_d does not specify a valid history line, in + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in which case ffcc returns failure. ffgg [_j_o_b_s_p_e_c] - Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b - is used. The return value is that of the command placed into - the foreground, or failure if run when job control is disabled + is used. The return value is that of the command placed into + the foreground, or failure if run when job control is disabled or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec- - ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started without job control. ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g _._._.] - ggeettooppttss is used by shell procedures to parse positional parame- - ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- - nized; if a character is followed by a colon, the option is ex- + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is ex- pected to have an argument, which should be separated from it by - white space. The colon and question mark characters may not be - used as option characters. Each time it is invoked, ggeettooppttss - places the next option in the shell variable _n_a_m_e, initializing + white space. The colon and question mark characters may not be + used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing _n_a_m_e if it does not exist, and the index of the next argument to be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to 1 each time the shell or a shell script is invoked. When an op- tion requires an argument, ggeettooppttss places that argument into the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automatically; - it must be manually reset between multiple calls to ggeettooppttss - within the same shell invocation if a new set of parameters is + it must be manually reset between multiple calls to ggeettooppttss + within the same shell invocation if a new set of parameters is to be used. When the end of options is encountered, ggeettooppttss exits with a re- turn value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and _n_a_m_e is set to ?. - ggeettooppttss normally parses the positional parameters, but if more - arguments are supplied as _a_r_g values, ggeettooppttss parses those in- + ggeettooppttss normally parses the positional parameters, but if more + arguments are supplied as _a_r_g values, ggeettooppttss parses those in- stead. - ggeettooppttss can report errors in two ways. If the first character - of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In - normal operation, diagnostic messages are printed when invalid - options or missing option arguments are encountered. If the - variable OOPPTTEERRRR is set to 0, no error messages will be dis- + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation, diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if - not silent, prints an error message and unsets OOPPTTAARRGG. If - ggeettooppttss is silent, the option character found is placed in OOPP-- + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in OOPP-- TTAARRGG and no diagnostic message is printed. - If a required argument is not found, and ggeettooppttss is not silent, - a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a - diagnostic message is printed. If ggeettooppttss is silent, then a - colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option character found. - ggeettooppttss returns true if an option, specified or unspecified, is + ggeettooppttss returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs. hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] Each time hhaasshh is invoked, the full pathname of the command _n_a_m_e - is determined by searching the directories in $$PPAATTHH and remem- + is determined by searching the directories in $$PPAATTHH and remem- bered. Any previously-remembered pathname is discarded. If the --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e - is used as the full filename of the command. The --rr option + is used as the full filename of the command. The --rr option causes the shell to forget all remembered locations. The --dd op- - tion causes the shell to forget the remembered location of each - _n_a_m_e. If the --tt option is supplied, the full pathname to which - each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments + tion causes the shell to forget the remembered location of each + _n_a_m_e. If the --tt option is supplied, the full pathname to which + each _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are supplied with --tt, the _n_a_m_e is printed before the hashed full pathname. The --ll option causes output to be displayed in a for- - mat that may be reused as input. If no arguments are given, or + mat that may be reused as input. If no arguments are given, or if only --ll is supplied, information about remembered commands is - printed. The return status is true unless a _n_a_m_e is not found + printed. The return status is true unless a _n_a_m_e is not found or an invalid option is supplied. hheellpp [--ddmmss] [_p_a_t_t_e_r_n] - Display helpful information about builtin commands. If _p_a_t_t_e_r_n - is specified, hheellpp gives detailed help on all commands matching - _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control structures is printed. --dd Display a short description of each _p_a_t_t_e_r_n --mm Display the description of each _p_a_t_t_e_r_n in a manpage-like @@ -727,70 +741,70 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] With no options, display the command history list with line num- bers. Lines listed with a ** have been modified. An argument of - _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- - FFOORRMMAATT is set and not null, it is used as a format string for - _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- - played history entry. No intervening blank is printed between - the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is - supplied, it is used as the name of the history file; if not, - the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the following meanings: --cc Clear the history list by deleting all the entries. --dd _o_f_f_s_e_t - Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t + Delete the history entry at position _o_f_f_s_e_t. If _o_f_f_s_e_t is negative, it is interpreted as relative to one greater than the last history position, so negative indices count - back from the end of the history, and an index of -1 + back from the end of the history, and an index of -1 refers to the current hhiissttoorryy --dd command. --dd _s_t_a_r_t-_e_n_d - Delete the history entries between positions _s_t_a_r_t and - _e_n_d, inclusive. Positive and negative values for _s_t_a_r_t - and _e_n_d are interpreted as described above. - --aa Append the ``new'' history lines to the history file. - These are history lines entered since the beginning of + Delete the range of history entries between positions + _s_t_a_r_t and _e_n_d, inclusive. Positive and negative values + for _s_t_a_r_t and _e_n_d are interpreted as described above. + --aa Append the ``new'' history lines to the history file. + These are history lines entered since the beginning of the current bbaasshh session, but not already appended to the history file. - --nn Read the history lines not already read from the history - file into the current history list. These are lines ap- - pended to the history file since the beginning of the + --nn Read the history lines not already read from the history + file into the current history list. These are lines ap- + pended to the history file since the beginning of the current bbaasshh session. - --rr Read the contents of the history file and append them to + --rr Read the contents of the history file and append them to the current history list. --ww Write the current history list to the history file, over- writing the history file's contents. - --pp Perform history substitution on the following _a_r_g_s and - display the result on the standard output. Does not - store the results in the history list. Each _a_r_g must be + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be quoted to disable normal history expansion. - --ss Store the _a_r_g_s in the history list as a single entry. - The last command in the history list is removed before + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before the _a_r_g_s are added. - If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- - tion associated with each history entry is written to the his- - tory file, marked with the history comment character. When the - history file is read, lines beginning with the history comment - character followed immediately by a digit are interpreted as + If the HHIISSTTTTIIMMEEFFOORRMMAATT variable is set, the time stamp informa- + tion associated with each history entry is written to the his- + tory file, marked with the history comment character. When the + history file is read, lines beginning with the history comment + character followed immediately by a digit are interpreted as timestamps for the following history entry. The return value is 0 unless an invalid option is encountered, an error occurs while - reading or writing the history file, an invalid _o_f_f_s_e_t is sup- - plied as an argument to --dd, or the history expansion supplied as - an argument to --pp fails. + reading or writing the history file, an invalid _o_f_f_s_e_t or range + is supplied as an argument to --dd, or the history expansion sup- + plied as an argument to --pp fails. jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] jjoobbss --xx _c_o_m_m_a_n_d [ _a_r_g_s ... ] The first form lists the active jobs. The options have the fol- lowing meanings: --ll List process IDs in addition to the normal information. - --nn Display information only about jobs that have changed + --nn Display information only about jobs that have changed status since the user was last notified of their status. - --pp List only the process ID of the job's process group + --pp List only the process ID of the job's process group leader. --rr Display only running jobs. --ss Display only stopped jobs. - If _j_o_b_s_p_e_c is given, output is restricted to information about - that job. The return status is 0 unless an invalid option is + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is encountered or an invalid _j_o_b_s_p_e_c is supplied. If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in @@ -799,104 +813,113 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... kkiillll --ll|--LL [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] - Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes - named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive - signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or - a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not - present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the - signal names. If any arguments are supplied when --ll is given, - the names of the signals corresponding to the arguments are + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to - --ll is a number specifying either a signal number or the exit - status of a process terminated by a signal. The --LL option is - equivalent to --ll. kkiillll returns true if at least one signal was + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. The --LL option is + equivalent to --ll. kkiillll returns true if at least one signal was successfully sent, or false if an error occurs or an invalid op- tion is encountered. lleett _a_r_g [_a_r_g ...] Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- - MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett + MMEETTIICC EEVVAALLUUAATTIIOONN above). If the last _a_r_g evaluates to 0, lleett returns 1; 0 is returned otherwise. llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ... | - ] - For each argument, a local variable named _n_a_m_e is created, and - assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted by ddeeccllaarree. When llooccaall is used within a function, it causes the - variable _n_a_m_e to have a visible scope restricted to that func- - tion and its children. If _n_a_m_e is -, the set of shell options - is made local to the function in which llooccaall is invoked: shell - options changed using the sseett builtin inside the function are - restored to their original values when the function returns. + variable _n_a_m_e to have a visible scope restricted to that func- + tion and its children. If _n_a_m_e is -, the set of shell options + is made local to the function in which llooccaall is invoked: shell + options changed using the sseett builtin inside the function are + restored to their original values when the function returns. The restore is effected as if a series of sseett commands were exe- - cuted to restore the values that were in place before the func- - tion. With no operands, llooccaall writes a list of local variables - to the standard output. It is an error to use llooccaall when not - within a function. The return status is 0 unless llooccaall is used - outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a + cuted to restore the values that were in place before the func- + tion. With no operands, llooccaall writes a list of local variables + to the standard output. It is an error to use llooccaall when not + within a function. The return status is 0 unless llooccaall is used + outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. - mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC + mmaappffiillee [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] rreeaaddaarrrraayy [--dd _d_e_l_i_m] [--nn _c_o_u_n_t] [--OO _o_r_i_g_i_n] [--ss _c_o_u_n_t] [--tt] [--uu _f_d] [--CC _c_a_l_l_b_a_c_k] [--cc _q_u_a_n_t_u_m] [_a_r_r_a_y] - Read lines from the standard input into the indexed array vari- - able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- - plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if + Read lines from the standard input into the indexed array vari- + able _a_r_r_a_y, or from file descriptor _f_d if the --uu option is sup- + plied. The variable MMAAPPFFIILLEE is the default _a_r_r_a_y. Options, if supplied, have the following meanings: - --dd The first character of _d_e_l_i_m is used to terminate each - input line, rather than newline. If _d_e_l_i_m is the empty + --dd The first character of _d_e_l_i_m is used to terminate each + input line, rather than newline. If _d_e_l_i_m is the empty string, mmaappffiillee will terminate a line when it reads a NUL character. - --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are + --nn Copy at most _c_o_u_n_t lines. If _c_o_u_n_t is 0, all lines are copied. - --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default + --OO Begin assigning to _a_r_r_a_y at index _o_r_i_g_i_n. The default index is 0. --ss Discard the first _c_o_u_n_t lines read. - --tt Remove a trailing _d_e_l_i_m (default newline) from each line + --tt Remove a trailing _d_e_l_i_m (default newline) from each line read. - --uu Read lines from file descriptor _f_d instead of the stan- + --uu Read lines from file descriptor _f_d instead of the stan- dard input. - --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The + --CC Evaluate _c_a_l_l_b_a_c_k each time _q_u_a_n_t_u_m lines are read. The --cc option specifies _q_u_a_n_t_u_m. - --cc Specify the number of lines read between each call to + --cc Specify the number of lines read between each call to _c_a_l_l_b_a_c_k. - If --CC is specified without --cc, the default quantum is 5000. + If --CC is specified without --cc, the default quantum is 5000. When _c_a_l_l_b_a_c_k is evaluated, it is supplied the index of the next array element to be assigned and the line to be assigned to that - element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after + element as additional arguments. _c_a_l_l_b_a_c_k is evaluated after the line is read but before the array element is assigned. - If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- + If not supplied with an explicit origin, mmaappffiillee will clear _a_r_- _r_a_y before assigning to it. - mmaappffiillee returns successfully unless an invalid option or option - argument is supplied, _a_r_r_a_y is invalid or unassignable, or if + mmaappffiillee returns successfully unless an invalid option or option + argument is supplied, _a_r_r_a_y is invalid or unassignable, or if _a_r_r_a_y is not an indexed array. ppooppdd [-nn] [+_n] [-_n] - Removes entries from the directory stack. With no arguments, - removes the top directory from the stack, and performs a ccdd to - the new top directory. Arguments, if supplied, have the follow- - ing meanings: + Removes entries from the directory stack. The elements are num- + bered from 0 starting at the first directory listed by ddiirrss. + With no arguments, ppooppdd removes the top directory from the + stack, and changes to the new top directory. Arguments, if sup- + plied, have the following meanings: --nn Suppresses the normal change of directory when removing directories from the stack, so that only the stack is ma- nipulated. ++_n Removes the _nth entry counting from the left of the list - shown by ddiirrss, starting with zero. For example: ``popd - +0'' removes the first directory, ``popd +1'' the second. + shown by ddiirrss, starting with zero, from the stack. For + example: ``popd +0'' removes the first directory, ``popd + +1'' the second. --_n Removes the _nth entry counting from the right of the list - shown by ddiirrss, starting with zero. For example: ``popd - -0'' removes the last directory, ``popd -1'' the next to + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to last. - If the ppooppdd command is successful, a ddiirrss is performed as well, - and the return status is 0. ppooppdd returns false if an invalid - option is encountered, the directory stack is empty, a non-exis- - tent directory stack entry is specified, or the directory change - fails. + If the top element of the directory stack is modified, and the + _-_n option was not supplied, ppooppdd uses the ccdd builtin to change + to the directory at the top of the stack. If the ccdd fails, ppooppdd + returns a non-zero value. + + Otherwise, ppooppdd returns false if an invalid option is encoun- + tered, the directory stack is empty, or a non-existent directory + stack entry is specified. + + If the ppooppdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack, and the return status is + 0. pprriinnttff [--vv _v_a_r] _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the @@ -915,15 +938,17 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS corresponding _a_r_g_u_m_e_n_t in the same way as eecchhoo --ee. %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can be reused as shell input. + %%QQ like %%qq, but applies any supplied precision to the _a_r_g_u_- + _m_e_n_t before quoting it. %%((_d_a_t_e_f_m_t))TT - causes pprriinnttff to output the date-time string resulting - from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). + causes pprriinnttff to output the date-time string resulting + from using _d_a_t_e_f_m_t as a format string for _s_t_r_f_t_i_m_e(3). The corresponding _a_r_g_u_m_e_n_t is an integer representing the - number of seconds since the epoch. Two special argument - values may be used: -1 represents the current time, and - -2 represents the time the shell was invoked. If no ar- + number of seconds since the epoch. Two special argument + values may be used: -1 represents the current time, and + -2 represents the time the shell was invoked. If no ar- gument is specified, conversion behaves as if -1 had been - given. This is an exception to the usual pprriinnttff behav- + given. This is an exception to the usual pprriinnttff behav- ior. The %b, %q, and %T directives all use the field width and preci- @@ -931,100 +956,104 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS 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 _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, - the extra format specifications behave as if a zero value or - null string, as appropriate, had been supplied. The return + the extra format specifications behave as if a zero value or + null string, as appropriate, had been supplied. The return value is zero on success, non-zero on failure. ppuusshhdd [--nn] [+_n] [-_n] ppuusshhdd [--nn] [_d_i_r] - Adds a directory to the top of the directory stack, or rotates - the stack, making the new top of the stack the current working - directory. With no arguments, ppuusshhdd exchanges the top two di- - rectories and returns 0, unless the directory stack is empty. - Arguments, if supplied, have the following meanings: - --nn Suppresses the normal change of directory when rotating - or adding directories to the stack, so that only the + Adds a directory to the top of the directory stack, or rotates + the stack, making the new top of the stack the current working + directory. With no arguments, ppuusshhdd exchanges the top two ele- + ments of the directory stack. Arguments, if supplied, have the + following meanings: + --nn Suppresses the normal change of directory when rotating + or adding directories to the stack, so that only the stack is manipulated. - ++_n Rotates the stack so that the _nth directory (counting - from the left of the list shown by ddiirrss, starting with + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with zero) is at the top. - --_n Rotates the stack so that the _nth directory (counting - from the right of the list shown by ddiirrss, starting with + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with zero) is at the top. - _d_i_r Adds _d_i_r to the directory stack at the top, making it the - new current working directory as if it had been supplied - as the argument to the ccdd builtin. + _d_i_r Adds _d_i_r to the directory stack at the top - If the ppuusshhdd command is successful, a ddiirrss is performed as well. - If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r - fails. With the second form, ppuusshhdd returns 0 unless the direc- - tory stack is empty, a non-existent directory stack element is - specified, or the directory change to the specified new current - directory fails. + After the stack has been modified, if the --nn option was not sup- + plied, ppuusshhdd uses the ccdd builtin to change to the directory at + the top of the stack. If the ccdd fails, ppuusshhdd returns a non-zero + value. + + Otherwise, if no arguments are supplied, ppuusshhdd returns 0 unless + the directory stack is empty. When rotating the directory + stack, ppuusshhdd returns 0 unless the directory stack is empty or a + non-existent directory stack element is specified. + + If the ppuusshhdd command is successful, bash runs ddiirrss to show the + final contents of the directory stack. ppwwdd [--LLPP] - Print the absolute pathname of the current working directory. + Print the absolute pathname of the current working directory. The pathname printed contains no symbolic links if the --PP option is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command - is enabled. If the --LL option is used, the pathname printed may - contain symbolic links. The return status is 0 unless an error + is enabled. If the --LL option is used, the pathname printed may + contain symbolic links. The return status is 0 unless an error occurs while reading the name of the current directory or an in- valid option is supplied. rreeaadd [--eerrss] [--aa _a_n_a_m_e] [--dd _d_e_l_i_m] [--ii _t_e_x_t] [--nn _n_c_h_a_r_s] [--NN _n_c_h_a_r_s] [--pp _p_r_o_m_p_t] [--tt _t_i_m_e_o_u_t] [--uu _f_d] [_n_a_m_e ...] - One line is read from the standard input, or from the file de- + One line is read from the standard input, or from the file de- scriptor _f_d supplied as an argument to the --uu option, split into - words as described above under WWoorrdd SSpplliittttiinngg, and the first - word is assigned to the first _n_a_m_e, the second word to the sec- - ond _n_a_m_e, and so on. If there are more words than names, the + words as described above under WWoorrdd SSpplliittttiinngg, and the first + word is assigned to the first _n_a_m_e, the second word to the sec- + ond _n_a_m_e, and so on. If there are more words than names, the remaining words and their intervening delimiters are assigned to - the last _n_a_m_e. If there are fewer words read from the input - stream than names, the remaining names are assigned empty val- - ues. The characters in IIFFSS are used to split the line into - words using the same rules the shell uses for expansion (de- - scribed above under WWoorrdd SSpplliittttiinngg). The backslash character + the last _n_a_m_e. If there are fewer words read from the input + stream than names, the remaining names are assigned empty val- + ues. The characters in IIFFSS are used to split the line into + words using the same rules the shell uses for expansion (de- + scribed above under WWoorrdd SSpplliittttiinngg). The backslash character (\\) may be used to remove any special meaning for the next char- - acter read and for line continuation. Options, if supplied, + acter read and for line continuation. Options, if supplied, have the following meanings: --aa _a_n_a_m_e The words are assigned to sequential indices of the array variable _a_n_a_m_e, starting at 0. _a_n_a_m_e is unset before any - new values are assigned. Other _n_a_m_e arguments are ig- + new values are assigned. Other _n_a_m_e arguments are ig- nored. --dd _d_e_l_i_m The first character of _d_e_l_i_m is used to terminate the in- - put line, rather than newline. If _d_e_l_i_m is the empty - string, rreeaadd will terminate a line when it reads a NUL + put line, rather than newline. If _d_e_l_i_m is the empty + string, rreeaadd will terminate a line when it reads a NUL character. --ee If the standard input is coming from a terminal, rreeaaddlliinnee - (see RREEAADDLLIINNEE above) is used to obtain the line. Read- - line uses the current (or default, if line editing was - not previously active) editing settings, but uses Read- + (see RREEAADDLLIINNEE above) is used to obtain the line. Read- + line uses the current (or default, if line editing was + not previously active) editing settings, but uses Read- line's default filename completion. --ii _t_e_x_t - If rreeaaddlliinnee is being used to read the line, _t_e_x_t is + If rreeaaddlliinnee is being used to read the line, _t_e_x_t is placed into the editing buffer before editing begins. --nn _n_c_h_a_r_s - rreeaadd returns after reading _n_c_h_a_r_s characters rather than + rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input, but honors a delim- - iter if fewer than _n_c_h_a_r_s characters are read before the + iter if fewer than _n_c_h_a_r_s characters are read before the delimiter. --NN _n_c_h_a_r_s - rreeaadd returns after reading exactly _n_c_h_a_r_s characters - rather than waiting for a complete line of input, unless - EOF is encountered or rreeaadd times out. Delimiter charac- - ters encountered in the input are not treated specially - and do not cause rreeaadd to return until _n_c_h_a_r_s characters - are read. The result is not split on the characters in - IIFFSS; the intent is that the variable is assigned exactly + rreeaadd returns after reading exactly _n_c_h_a_r_s characters + rather than waiting for a complete line of input, unless + EOF is encountered or rreeaadd times out. Delimiter charac- + ters encountered in the input are not treated specially + and do not cause rreeaadd to return until _n_c_h_a_r_s characters + are read. The result is not split on the characters in + IIFFSS; the intent is that the variable is assigned exactly the characters read (with the exception of backslash; see the --rr option below). --pp _p_r_o_m_p_t @@ -1032,25 +1061,26 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS line, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. --rr Backslash does not act as an escape character. The back- - slash is considered to be part of the line. In particu- - lar, a backslash-newline pair may not then be used as a + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not then be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. --tt _t_i_m_e_o_u_t - Cause rreeaadd to time out and return failure if a complete - line of input (or a specified number of characters) is - not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- - mal number with a fractional portion following the deci- - mal point. This option is only effective if rreeaadd is - reading input from a terminal, pipe, or other special - file; it has no effect when reading from regular files. + Cause rreeaadd to time out and return failure if a complete + line of input (or a specified number of characters) is + not read within _t_i_m_e_o_u_t seconds. _t_i_m_e_o_u_t may be a deci- + mal number with a fractional portion following the deci- + mal point. This option is only effective if rreeaadd is + reading input from a terminal, pipe, or other special + file; it has no effect when reading from regular files. If rreeaadd times out, rreeaadd saves any partial input read into - the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- - turns immediately, without trying to read any data. The - exit status is 0 if input is available on the specified - file descriptor, non-zero otherwise. The exit status is - greater than 128 if the timeout is exceeded. + the specified variable _n_a_m_e. If _t_i_m_e_o_u_t is 0, rreeaadd re- + turns immediately, without trying to read any data. The + exit status is 0 if input is available on the specified + file descriptor, or the read will return EOF, non-zero + otherwise. The exit status is greater than 128 if the + timeout is exceeded. --uu _f_d Read input from file descriptor _f_d. If no _n_a_m_e_s are supplied, the line read, without the ending de- @@ -1098,18 +1128,18 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS associated with the RREETTUURRNN trap is executed before execution re- sumes after the function or script. - sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [_a_r_g ...] - Without options, the name and value of each shell variable are - displayed in a format that can be reused as input for setting or - resetting the currently-set variables. Read-only variables can- - not be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. - The output is sorted according to the current locale. When 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 - $$11, $$22, ...... $$_n. Options, if specified, have the following - meanings: + sseett [--aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [--oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + sseett [++aabbeeffhhkkmmnnppttuuvvxxBBCCEEHHPPTT] [++oo _o_p_t_i_o_n_-_n_a_m_e] [----] [--] [_a_r_g ...] + Without options, display the name and value of each shell vari- + able in a format that can be reused as input for setting or re- + setting the currently-set variables. Read-only variables cannot + be reset. In _p_o_s_i_x _m_o_d_e, only shell variables are listed. The + output is sorted according to the current locale. When options + are specified, they set or unset shell attributes. Any argu- + ments remaining after option processing are treated as values + for the positional parameters and are assigned, in order, to $$11, + $$22, ...... $$_n. Options, if specified, have the following mean- + ings: --aa Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands. @@ -1232,9 +1262,12 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS plied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids. + --rr Enable restricted shell mode. This option cannot be un- + set once it has been set. --tt Exit after reading and executing one command. --uu Treat unset variables and parameters other than the spe- - cial parameters "@" and "*" 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 @@ -1372,6 +1405,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS ccoommppaatt4422 ccoommppaatt4433 ccoommppaatt4444 + ccoommppaatt5500 These control aspects of the shell's compatibility mode (see SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE below). @@ -1479,6 +1513,11 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS between AA and BB, and upper-case and lower-case ASCII characters will collate together. + gglloobbsskkiippddoottss + If set, pathname expansion will never match the file- + names ````..'''' and ````....'''', even if the pattern begins with + a ````..''''. This option is enabled by default. + gglloobbssttaarr If set, the pattern **** used in a pathname expansion con- text will match all files and zero or more directories @@ -1577,46 +1616,63 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS tution word expansions, or when filtering possible com- pletions as part of programmable completion. + nnooeexxppaanndd__ttrraannssllaattiioonn + If set, bbaasshh encloses the translated results of $"..." + quoting in single quotes instead of double quotes. If + the string is not translated, this has no effect. + nnuullllgglloobb If set, bbaasshh allows patterns which match no files (see PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, rather than themselves. + ppaattssuubb__rreeppllaacceemmeenntt + If set, bbaasshh expands occurrences of && in the replacement + string of pattern substitution to the text matched by + the pattern, as described under PPaarraammeetteerr EExxppaannssiioonn + above. This option is enabled by default. + pprrooggccoommpp If set, the programmable completion facilities (see PPrroo-- ggrraammmmaabbllee CCoommpplleettiioonn above) are enabled. This option is enabled by default. pprrooggccoommpp__aalliiaass - If set, and programmable completion is enabled, bbaasshh - treats a command name that doesn't have any completions - as a possible alias and attempts alias expansion. If it - has an alias, bbaasshh attempts programmable completion us- + If set, and programmable completion is enabled, bbaasshh + treats a command name that doesn't have any completions + as a possible alias and attempts alias expansion. If it + has an alias, bbaasshh attempts programmable completion us- ing the command word resulting from the expanded alias. pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- - mand substitution, arithmetic expansion, and quote re- - moval after being expanded as described in PPRROOMMPPTTIINNGG + mand substitution, arithmetic expansion, and quote re- + moval after being expanded as described in PPRROOMMPPTTIINNGG above. This option is enabled by default. rreessttrriicctteedd__sshheellll - The shell sets this option if it is started in re- - stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value - may not be changed. This is not reset when the startup - files are executed, allowing the startup files to dis- + The shell sets this option if it is started in re- + stricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- cover whether or not a shell is restricted. sshhiifftt__vveerrbboossee - If set, the sshhiifftt builtin prints an error message when + If set, the sshhiifftt builtin prints an error message when the shift count exceeds the number of positional parame- ters. ssoouurrcceeppaatthh - If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to - find the directory containing the file supplied as an + If set, the .. (ssoouurrccee) builtin uses the value of PPAATTHH to + find the directory containing the file supplied as an argument. This option is enabled by default. + vvaarrrreeddiirr__cclloossee + If set, the shell automatically closes file descriptors + assigned using the _{_v_a_r_n_a_m_e_} redirection syntax (see RREE-- + DDIIRREECCTTIIOONN above) instead of leaving them open when the + command completes. + xxppgg__eecchhoo If set, the eecchhoo builtin expands backslash-escape se- quences by default. @@ -1681,11 +1737,15 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS is the one-argument test of the second argument. Other- wise, the expression is false. 4 arguments + The following conditions are applied in the order listed. If the first argument is !!, the result is the negation of - the three-argument expression composed of the remaining - arguments. 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 (( and + the fourth argument is exactly )), the result is the two- + argument test of the second and third arguments. Other- + wise, the expression is parsed and evaluated according to + precedence using the rules listed above. 5 or more arguments The expression is parsed and evaluated according to precedence using the rules listed above. @@ -1853,7 +1913,7 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS NNAAMMEE, GGRROOUUPPSS, HHIISSTTCCMMDD, LLIINNEENNOO, RRAANNDDOOMM, SSEECCOONNDDSS, or SSRRAANNDDOOMM are unset, they lose their special properties, even if they are sub- sequently reset. The exit status is true unless a _n_a_m_e is read- - only. + only or may not be unset. wwaaiitt [--ffnn] [--pp _v_a_r_n_a_m_e] [_i_d _._._.] Wait for each specified child process and return its termination @@ -2006,9 +2066,15 @@ SSHHEELLLL CCOOMMPPAATTIIBBIILLIITTYY MMOODDEE input. Bash-5.1 suppresses that message when the --ll op- tion is supplied. + ccoommppaatt5511 + +o The uunnsseett builtin treats attempts to unset array sub- + scripts @@ and ** differently depending on whether the ar- + ray is indexed or associative, and differently than in + previous versions. + SSEEEE AALLSSOO bash(1), sh(1) -GNU Bash 5.0 2004 Apr 20 BASH_BUILTINS(1) +GNU Bash 5.2 2021 November 22 BASH_BUILTINS(1) diff --git a/doc/builtins.1 b/doc/builtins.1 index 4413c76f0..43d92a2fc 100644 --- a/doc/builtins.1 +++ b/doc/builtins.1 @@ -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 diff --git a/doc/builtins.ps b/doc/builtins.ps index ae11c5449..d2321e0f2 100644 --- a/doc/builtins.ps +++ b/doc/builtins.ps @@ -1,13 +1,13 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.22.4 -%%CreationDate: Wed Nov 18 15:13:06 2020 +%%CreationDate: Tue Jan 11 15:02:05 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 F2108 184.8 Q F0(accepts)3.077 E F23.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 F22.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 F23.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.649(,t)C .148 +(he current directory is searched if no \214le is found in)-2.649 F F4 +-.666(PA)2.648 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .148(If the) +4.648 F F2(sour)2.648 E(cepath)-.18 E F0 .148(option to the)2.648 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 F23.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 F22.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 F2A F0 2.5(][)C F3(name)-2.5 E F0([=)A F3(value)A F0 2.5(].)C @@ -364,2955 +366,3062 @@ F2-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 F2A 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 SF144 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 +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 +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.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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 +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 F1144 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 F1144 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 F1144 228 Q F0(List current)180 228 Q F1 +(an be re-read.)-2.5 E F1144 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 F1144 240 Q F2(\214lename)2.5 E F0(Read k)180 252 Q +(alues.)-.25 E F1144 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 -144 264 Q F2(function)2.5 E F0(Query about which k)180 276 Q -.15 +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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 -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 -F1144 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 F1144 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 SF2.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 -A F0(|[)A F1A F0([)2.5 E F1A 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 F33.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 -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 F32.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 -F32.868 E F0 .368(option is supplied with)2.868 F F32.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 F32.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 F32.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 F32.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 F1A F0(|[)A F1A F0([)2.5 E F1A 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 F12.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 F13.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 F13.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 F12.676 E F0 .176(option is supplied with)2.676 F F1 +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 F12.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 F12.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 F12.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 F33.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 F13.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 F32.674 E F0(or)2.674 E F3 -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 F32.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 F12.674 E F0(or)2.674 E F1 +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 F12.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 F3144 340.8 Q F0 .249(option produces a more v)2.749 F .249 -(erbose description.)-.15 F .249(If the)5.249 F F32.749 E F0(or) -2.749 E F32.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 F1144 400.8 Q F0 .249(option produces a more v)2.749 F .249 +(erbose description.)-.15 F .249(If the)5.249 F F12.749 E F0(or) +2.749 E F12.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 F33.481 E F0(and) -3.481 E F33.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 -F32.631 E F0(or)2.631 E F32.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 F13.481 E F0(and) +3.481 E F13.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 +F12.631 E F0(or)2.631 E F12.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 --2.5 E F1(comp-option)2.5 E F0 2.5(][)C F3(\255DEI)-2.5 E F0 2.5 -(][)C F3-2.5 E F1(action)2.5 E F0 2.5(][)C F3-2.5 E F1 -(globpat)2.5 E F0 2.5(][)C F3-2.5 E F1(wor)2.5 E(dlist)-.37 E F0 -(])A([)144 542.4 Q F3A F1(function)2.5 E F0 2.5(][)C F3-2.5 -E F1(command)2.5 E F0 2.5(][)C F3-2.5 E F1(\214lterpat)2.5 E F0 -2.5(][)C F3-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F3 --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 F33.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 +-2.5 E F2(comp-option)2.5 E F0 2.5(][)C F1(\255DEI)-2.5 E F0 2.5 +(][)C F1-2.5 E F2(action)2.5 E F0 2.5(][)C F1-2.5 E F2 +(globpat)2.5 E F0 2.5(][)C F1-2.5 E F2(wor)2.5 E(dlist)-.37 E F0 +(])A([)144 602.4 Q F1A F2(function)2.5 E F0 2.5(][)C F1-2.5 +E F2(command)2.5 E F0 2.5(][)C F1-2.5 E F2(\214lterpat)2.5 E F0 +2.5(][)C F1-2.5 E F2(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F1 +-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 F13.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 F32.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 F12.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 -F33.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 +F13.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 F33.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 F13.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 -F32.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 -3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15 -(ve)-.15 G(r).15 E F33.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 -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 F33.208 E F0(,)A F3144 698.4 Q F0 2.604(,o)C(r) --2.604 E F32.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 +F12.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 F13.055 E F0(,)A F13.055 E F0 3.055 -(,a)C(nd)-3.055 E F13.055 E F0 .722(options \(and, if necessary) -144 132 R 3.222(,t)-.65 G(he)-3.222 E F13.222 E F0(and)3.222 E F1 -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 F1144 -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 +3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15(ve) +-.15 G(r).15 E F13.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 +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 +F13.208 E F0(,)A F1144 108 Q F0 2.604(,o)C(r)-2.604 E F1 +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 abo)144 156 +Q .3 -.15(ve u)-.15 H(nder).15 E F1(Pr)2.5 E(ogrammable Completion)-.18 +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 F13.055 E F0(,)A F13.055 +E F0 3.055(,a)C(nd)-3.055 E F13.055 E F0 .722 +(options \(and, if necessary)144 192 R 3.222(,t)-.65 G(he)-3.222 E F1 +3.222 E F0(and)3.222 E F13.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 F1144 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 F1144 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 F1144 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 -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 F12.5 E F0(.)A F1(command)184 516 -Q F0(Command names.)224 528 Q(May also be speci\214ed as)5 E F12.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 F12.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 +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 F12.5 E F0(.)A F1(command)184 576 +Q F0(Command names.)224 588 Q(May also be speci\214ed as)5 E F12.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 F12.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 F12.5 E F0(.)A F1(\214le)184 -612 Q F0(File names.)224 612 Q(May also be speci\214ed as)5 E F1 -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 F12.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 F12.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 +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 F12.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 F12.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 F12.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 F12.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 F12.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 F12.5 E F0(.)A F1144 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 F12.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 F12.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 F12.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 F12.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 F12.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 F12.5 E F0(.)A F1144 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 F1144 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 +184 288 Q F1144 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 F1144 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 F1144 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 +F1144 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 +F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 F12.967 E F0 (or)2.967 E F12.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 F1A 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 F1A 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 F12.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 F14.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 F13.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 SF2.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 +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 SF2.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 --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-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 +-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-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 F23.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 F23.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 F13.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 F13.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 F22.775 E F0(and) -2.775 E F22.775 E F0 2.775(,a)C .274(re ignored.)-2.775 F(When) -5.274 E F22.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 F12.775 E F0(and) +2.775 E F12.775 E F0 2.775(,a)C .274(re ignored.)-2.775 F(When) +5.274 E F12.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 F22.88 E F0(,)A F2 +(If no other options are supplied with)5.38 F F12.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 F23.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 F13.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 F22.8 E F0 .299(option inhibits the display of \ +321.6 R(The)5.3 E F12.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 F23.148 E -F0 .648(option implies)3.148 F F2144 297.6 Q F0 5.836(.T)C(he) --5.836 E F23.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 F13.148 E +F0 .648(option implies)3.148 F F1144 357.6 Q F0 5.836(.T)C(he) +-5.836 E F13.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 F23.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 F13.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 F2144 -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 F2144 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 F2144 393.6 Q F0(Use function names only)180 -393.6 Q(.)-.65 E F2144 405.6 Q F0 .558(The v)180 405.6 R .558 +(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 F1144 +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(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1144 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(abo)2.5 E -.15(ve) +-.15 G(\).).15 E F1144 453.6 Q F0(Use function names only)180 +453.6 Q(.)-.65 E F1144 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 417.6 Q F0(abo) +(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)180 477.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 F2144 429.6 Q -F0 .909(When the v)180 429.6 R .909(ariable is assigned a v)-.25 F .909 +-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F1144 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 441.6 R -(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2144 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 +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 F1144 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 F23.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 F13.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 F2144 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 F1144 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 F2144 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 F2144 -561.6 Q F0 .91(When the v)180 561.6 R .909(ariable is assigned a v)-.25 +585.6 Q F1144 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 F1144 +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 -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 +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 F23.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 F13.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 F22.717 E F0(or)2.717 E F22.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 F12.717 E F0(or)2.717 E F12.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 SF2.5 E F0(.)A F1 -(dirs [\255clpv] [+)108 100.8 Q/F2 10/Times-Italic@0 SF(n)A F1 2.5(][)C --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 +1.748(array v)144 108 R 1.748 +(ariable without using the compound assignment syntax \(see)-.25 F/F2 10 +/Times-Bold@0 SF(Arrays)4.249 E F0(abo)4.249 E -.15(ve)-.15 G 1.749 +(\), one of the).15 F/F3 10/Times-Italic@0 SF(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 +2.5 E F0(.)A F2(dirs [\255clpv] [+)108 160.8 Q F3(n)A F2 2.5(][)C +-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 F1144 160.8 Q F0 -(Clears the directory stack by deleting all of the entries.)180 160.8 Q -F1144 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 F2144 220.8 Q F0 +(Clears the directory stack by deleting all of the entries.)180 220.8 Q +F2144 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 F1144 196.8 Q F0 -(Print the directory stack with one entry per line.)180 196.8 Q F1 -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 F2144 256.8 Q F0 +(Print the directory stack with one entry per line.)180 256.8 Q F2 +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 F1144 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 F2144 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-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-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 F12.596 E F0 .096(nor the)2.596 F -F12.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 F22.596 E F0 .096(nor the)2.596 F +F22.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 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 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 -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 +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 F12.808 E F0 .308 +(error occurs.)144 487.2 R(If)5.308 E F22.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 F12.807 E F0 .307(option is gi)2.807 F -.15 +F .307(If the)5.308 F F22.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 F12.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 F22.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 F13.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 F23.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 F1A F0 2.5(][)C F1(\255dnps)-2.5 E F0 2.5(][)C F1-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 F1A F0 2.5(][)C F1 +(\255dnps)-2.5 E F0 2.5(][)C F1-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 F13.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 F13.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 -2.866 E F0 .366(option will delete a b)2.866 F .366(uiltin pre)-.2 F -.366(viously loaded with)-.25 F F12.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 -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 F12.598 E F0 .098 -(is supplied, only disabled b)2.598 F .099(uiltins are printed.)-.2 F -(If)5.099 E F12.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 F12.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 F13.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 F13.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 F13.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 F13.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 F13.195 E F0 .695 +(is supplied, only disabled b)3.195 F .695(uiltins are printed.)-.2 F +(If)5.695 E F13.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 F12.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-2.5 E F2 +(exec)108 422.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-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 F12.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 F12.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 F13.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 -F .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 F12.627 E F0 .127 +(commands. If)144 612 R(the)2.627 E F12.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 -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 -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 +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 F12.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 F1A 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 -F12.522 E F0 .022 -(option suppresses the command numbers when listing.)2.522 F(The)5.022 E -F12.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 F12.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 +F22.522 E F0 .022 +(option suppresses the command numbers when listing.)2.522 F(The)5.022 E +F22.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 F22.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 SF2.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 F22.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-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-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 -F12.743 E F0 .243 +(viously-remembered pathname is discarded.)-.25 F .243(If the)144 220.8 +R F12.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 F13.115 E F0 .615 +(of the command.)144 232.8 R(The)5.615 E F13.115 E F0 .615 (option causes the shell to for)3.115 F .615 (get all remembered locations.)-.18 F(The)5.615 E F13.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 F12.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 F12.676 E F0 +(guments are sup-)-.18 F .176(plied with)144 268.8 R F12.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 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 F13.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 +G 3.367(sd).15 G(etailed)-3.367 E .224(help on all commands matching)144 +345.6 R F2(pattern)3.974 E F0 2.723(;o).24 G .223 (therwise help for all the b)-2.723 F .223 -(uiltins and shell control struc-)-.2 F(tures is printed.)144 256.8 Q F1 -144 268.8 Q F0(Display a short description of each)180 268.8 Q F2 -(pattern)2.5 E F1144 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 F1144 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 F0A 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 +144 369.6 Q F0(Display a short description of each)180 369.6 Q F2 +(pattern)2.5 E F1144 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 F1144 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 F0A 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 F1144 482.4 Q F0 -(Clear the history list by deleting all the entries.)180 482.4 Q F1 -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 F1144 583.2 Q F0 +(Clear the history list by deleting all the entries.)180 583.2 Q F1 +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 -144 542.4 Q F2(start)2.5 E F0A 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 +144 643.2 Q F2(start)2.5 E F0A 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 -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 F1144 602.4 +(ut not already appended to the history \214le.)-.2 E F1144 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 F1144 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 -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 F1144 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 F1144 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 SF144 84 Q F0(Rea\ +d the contents of the history \214le and append them to the current his\ +tory list.)180 84 Q F1144 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 F1144 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 F1144 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 SF2.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 -F22.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 F2144 184.8 Q F0 -(List process IDs in addition to the normal information.)180 184.8 Q F2 -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 -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 F2144 232.8 Q F0 -(Display only running jobs.)180 232.8 Q F2144 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 F12.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 F1144 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 F1144 297.6 Q F0 +(List process IDs in addition to the normal information.)180 297.6 Q F1 +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 +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 F1144 345.6 Q F0 +(Display only running jobs.)180 345.6 Q F1144 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 -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 +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 F2A F1(sigspec)2.5 E F0(|)2.5 E -F22.5 E F1(signum)2.5 E F0(|)2.5 E F22.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 F2A 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 F1A F2(sigspec)2.5 E F0(|)2.5 E F1 +2.5 E F2(signum)2.5 E F0(|)2.5 E F12.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 F1A 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 F22.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 F22.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 F23.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 F23.462 E F0 .962(option is equi)3.462 F -.25(va) --.25 G .962(lent to).25 F F23.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 +F12.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 +F12.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 F13.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 F13.462 E F0 .962(option is equi)3.462 F -.25(va)-.25 +G .962(lent to).25 F F13.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)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 580.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 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 F2A F1(delim)2.5 E F0 2.5(][)C F2-2.5 E F1(count) -2.5 E F0 2.5(][)C F2-2.5 E F1(origin)2.5 E F0 2.5(][)C F2 --2.5 E F1(count)2.5 E F0 2.5(][)C F2-2.5 E F0 2.5(][)C F2 --2.5 E F1(fd)2.5 E F0 2.5(][)C F2-2.5 E F1(callbac)2.5 E(k)-.2 E -F0 2.5(][)C F2-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 -A F1(delim)2.5 E F0 2.5(][)C F2-2.5 E F1(count)2.5 E F0 2.5 -(][)C F2-2.5 E F1(origin)2.5 E F0 2.5(][)C F2-2.5 E F1 -(count)2.5 E F0 2.5(][)C F2-2.5 E F0 2.5(][)C F2-2.5 E F1 -(fd)2.5 E F0 2.5(][)C F2-2.5 E F1(callbac)2.5 E(k)-.2 E F0 2.5(][) -C F2-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 F23.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 F2144 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 F2144 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 SF144 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 F1144 96 -Q F0(Discard the \214rst)180 96 Q F2(count)2.5 E F0(lines read.)2.5 E F1 -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 F1144 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 F1144 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 F12.5 E F0 -(option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1144 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 F12.968 E F0 .467 -(is speci\214ed without)2.967 F F12.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 +A/F2 10/Times-Italic@0 SF(delim)2.5 E F0 2.5(][)C F1-2.5 E +F2(count)2.5 E F0 2.5(][)C F1-2.5 E F2(origin)2.5 E F0 2.5(][)C F1 +-2.5 E F2(count)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5(][)C F1 +-2.5 E F2(fd)2.5 E F0 2.5(][)C F1-2.5 E F2(callbac)2.5 E(k) +-.2 E F0 2.5(][)C F1-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 +F1A F2(delim)2.5 E F0 2.5(][)C F1-2.5 E F2(count)2.5 E F0 +2.5(][)C F1-2.5 E F2(origin)2.5 E F0 2.5(][)C F1-2.5 E F2 +(count)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5(][)C F1-2.5 E F2 +(fd)2.5 E F0 2.5(][)C F1-2.5 E F2(callbac)2.5 E(k)-.2 E F0 2.5(][) +C F1-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 F13.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 F1144 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 F1144 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 F1144 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 F1144 208.8 Q F0 +(Discard the \214rst)180 208.8 Q F2(count)2.5 E F0(lines read.)2.5 E F1 +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 F1144 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 F1144 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 F12.5 E F0 +(option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1144 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 F12.967 E F0 +.467(is speci\214ed without)2.967 F F12.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-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 F1144 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-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 F1144 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 F1144 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 F1144 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 F1A 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 F1A 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 F12.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 -A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C-2.5 E F1(n)A F0(])A -F2(pushd)108 165.6 Q F0([)2.5 E F2A 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 -F2144 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 F2144 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 F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C +-2.5 E F2(n)A F0(])A F1(pushd)108 367.2 Q F0([)2.5 E F1A 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 F1144 +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 F1144 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 F22.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 F23.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-3.817 E -F1(aname)3.817 E F0 3.817(][)C F2-3.817 E F1(delim)3.817 E F0 -3.817(][)C F2-3.817 E F1(te)3.817 E(xt)-.2 E F0 3.817(][)C F2 --3.817 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2 --3.816 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2-3.816 E -F1(pr)3.816 E(ompt)-.45 E F0 3.816(][)C F2-3.816 E F1(timeout) -3.816 E F0 3.816(][)C F2-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 -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 F2144 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 F2144 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 -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 F2144 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 F12.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 F12.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 F13.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-3.816 +E F2(aname)3.816 E F0 3.816(][)C F1-3.816 E F2(delim)3.816 E F0 +3.816(][)C F1-3.816 E F2(te)3.816 E(xt)-.2 E F0 3.816(][)C F1 +-3.816 E F2(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1 +-3.817 E F2(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F1-3.817 E +F2(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F1-3.817 E F2(timeout) +3.817 E F0 3.817(][)C F1-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 +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 727.2 R F2 +(name)3.236 E F0 2.876(,t).18 G .376(he second w)-2.876 F .376 +(ord to the second)-.1 F F2(name)3.236 E F0 2.876(,a).18 G .376 +(nd so on.)-2.876 F .375(If there are more w)5.376 F(ords)-.1 E +(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 SF144 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 -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 .236(than names, the remaining w)144 84 R +.237(ords and their interv)-.1 F .237 +(ening delimiters are assigned to the last)-.15 F/F1 10/Times-Italic@0 +SF(name)3.097 E F0 5.237(.I).18 G(f)-5.237 E .875(there are fe)144 96 R +.875(wer w)-.25 F .875(ords read from the input stream than names, the \ +remaining names are assigned)-.1 F .517(empty v)144 108 R 3.017 +(alues. The)-.25 F .517(characters in)3.017 F/F2 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 120 R +.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E/F3 +10/Times-Bold@0 SF -.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526 +(\). The)B .026(backslash character \()2.526 F F3(\\)A F0 2.526(\)m)C +(ay)-2.526 E .488(be used to remo)144 132 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 144 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F3144 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 F3144 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 +144 228 Q F0 .373 +(If the standard input is coming from a terminal,)180 228 R F3 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F2(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 240 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 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 F3144 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 F3144 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 +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 F1180 192 Q F0(option belo) -2.5 E(w\).)-.25 E F1144 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 F3180 396 Q F0(option belo) +2.5 E(w\).)-.25 E F3144 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 -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 +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 F1144 276 Q F0(Silent mode.)180 276 Q -(If input is coming from a terminal, characters are not echoed.)5 E F1 -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 F3144 480 Q F0(Silent mode.)180 480 Q +(If input is coming from a terminal, characters are not echoed.)5 E F3 +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 F1144 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 F3144 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 F1144 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-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 F3144 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-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 F13.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 F13.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 F13.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 F13.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 F13.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 -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 F12.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 F33.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 F34.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 F34.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 SF2.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 +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 +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 +F12.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-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 F1144 -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 +-2.5 E F2(option\255name)2.5 E F0 2.5(][)C F1-2.5 E F0 2.5 +(][)C F1-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-2.5 E F0 2.5(][)C F1 +-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 F1144 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 F1144 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 F1144 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 F1144 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 F1144 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 +F0 .088(\), a)B F2(list)2.588 E F0 2.588(,o)C(r)-2.588 E(a)184 489.6 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 +(The shell does not e)184 501.6 R .079(xit if the command that f)-.15 F +.08(ails is part of the command list immediately)-.1 F(follo)184 513.6 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) +4.154 E(ed)-.15 E -.1(wo)184 525.6 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 +(xcept the command follo)-.15 F(wing)-.25 E .918(the \214nal)184 537.6 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 +-.25(va)184 549.6 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 +(non-zero status because a command f)184 561.6 R 1.112(ailed while)-.1 F F13.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 +(eing ignored, the shell does)-3.612 F .177(not e)184 573.6 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 +(option applies to)2.678 F .618(the shell en)184 585.6 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) +-.4 F F3 .617(COMMAND EXE-)3.117 F .642(CUTION ENVIR)184 597.6 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) +(xe)-.15 G .643(cuting all).15 F(the commands in the subshell.)184 609.6 +Q .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 F13.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 +639.6 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 F13.002 E F0 +(will be af)184 651.6 R .503(fected by the)-.25 F F13.002 E F0 .502(setting, e)3.002 F -.15(ve)-.25 G 3.002(ni).15 G(f)-3.002 E F1 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 +(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 F14.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 F13.154 E F0 .654 +-.15 E(where)184 675.6 Q F13.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 -144 490.8 Q F0(Disable pathname e)184 490.8 Q(xpansion.)-.15 E F1 -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 +144 699.6 Q F0(Disable pathname e)184 699.6 Q(xpansion.)-.15 E F1 +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 F1144 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 -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 F1144 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 F1144 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 F12.5 E F0(.)A F1 -(braceexpand)184 670.8 Q F0(Same as)224 682.8 Q F12.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 F12.5 E F0(.)A F1(errtrace)184 96 Q F0 -(Same as)224 96 Q F12.5 E F0(.)A F1(functrace)184 108 Q F0 -(Same as)224 120 Q F12.5 E F0(.)A F1(hashall)184 132 Q F0(Same as) -224 132 Q F12.5 E F0(.)A F1(histexpand)184 144 Q F0(Same as)224 -156 Q F12.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 SF144 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 +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 .651 +(on systems that support it \(see)184 120 R/F2 9/Times-Bold@0 SF .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 132 R .679(When a background job completes, the she\ +ll prints a line containing its)5.678 F -.15(ex)184 144 S(it status.).15 +E F1144 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 +F1144 180 Q/F3 10/Times-Italic@0 SF(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 F12.5 E +F0(.)A F1(braceexpand)184 228 Q F0(Same as)224 240 Q F12.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 F12.5 E F0(.)A F1 +(errtrace)184 300 Q F0(Same as)224 300 Q F12.5 E F0(.)A F1 +(functrace)184 312 Q F0(Same as)224 324 Q F12.5 E F0(.)A F1 +(hashall)184 336 Q F0(Same as)224 336 Q F12.5 E F0(.)A F1 +(histexpand)184 348 Q F0(Same as)224 360 Q F12.5 E F0(.)A F1 +(history)184 372 Q F0 .586(Enable command history)224 372 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 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 -2.5 E F0(.)A F1(monitor)184 252 Q F0(Same as)224 252 Q F12.5 -E F0(.)A F1(noclob)184 264 Q(ber)-.1 E F0(Same as)224 276 Q F12.5 -E F0(.)A F1(noexec)184 288 Q F0(Same as)224 288 Q F12.5 E F0(.)A -F1(noglob)184 300 Q F0(Same as)224 300 Q F12.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 F12.5 E F0(.)A F1(nounset)184 336 Q F0(Same as) -224 336 Q F12.5 E F0(.)A F1(onecmd)184 348 Q F0(Same as)224 348 Q -F12.5 E F0(.)A F1(ph)184 360 Q(ysical)-.15 E F0(Same as)224 360 Q -F12.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(abo)2.5 E -.15(ve)-.15 G(\).) +.15 E F1 -.1(ke)184 432 S(yw).1 E(ord)-.1 E F0(Same as)224 444 Q F1 +2.5 E F0(.)A F1(monitor)184 456 Q F0(Same as)224 456 Q F12.5 +E F0(.)A F1(noclob)184 468 Q(ber)-.1 E F0(Same as)224 480 Q F12.5 +E F0(.)A F1(noexec)184 492 Q F0(Same as)224 492 Q F12.5 E F0(.)A +F1(noglob)184 504 Q F0(Same as)224 504 Q F12.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 F12.5 E F0(.)A F1(nounset)184 540 Q F0(Same as) +224 540 Q F12.5 E F0(.)A F1(onecmd)184 552 Q F0(Same as)224 552 Q +F12.5 E F0(.)A F1(ph)184 564 Q(ysical)-.15 E F0(Same as)224 564 Q +F12.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 +624 R F3 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 636 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 F12.5 E F0(.)A F1 -.1(ve)184 480 S(rbose).1 E -F0(Same as)224 480 Q F12.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) +-3.455 E(ha)224 648 Q(vior)-.2 E(.)-.55 E F1(pri)184 660 Q(vileged)-.1 E +F0(Same as)224 672 Q F12.5 E F0(.)A F1 -.1(ve)184 684 S(rbose).1 E +F0(Same as)224 684 Q F12.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 F12.5 E F0(.)A(If)184 534 Q -F13.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 F12.5 E F0(.)A(If)184 102 Q F13.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 -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 +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 F12.961 E F0 .461 +(user \(group\) id, and the)184 186 R F12.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 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 F1144 666 Q F0 -(Exit after reading and e)184 666 Q -.15(xe)-.15 G(cuting one command.) -.15 E F1144 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 SF144 84 Q F0 -(Print shell input lines as the)184 84 Q 2.5(ya)-.15 G(re read.)-2.5 E -F1144 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 F1144 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 F1144 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 F1144 234 Q F0 +(Enable restricted shell mode.)184 234 Q +(This option cannot be unset once it has been set.)5 E F1144 246 Q +F0(Exit after reading and e)184 246 Q -.15(xe)-.15 G +(cuting one command.).15 E F1144 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 F1144 306 Q F0 +(Print shell input lines as the)184 306 Q 2.5(ya)-.15 G(re read.)-2.5 E +F1144 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 F1144 354 Q F0 +1.205(The shell performs brace e)184 354 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 366 S(ult.).1 E F1 +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 -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 +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 -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 +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 F1144 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 F1144 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 F1144 -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 F1144 +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 F1144 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 F1144 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 F12.5 E F0(.)A F1144 -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 F13.022 E F0(and)3.022 E F13.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 F0A 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-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-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 F12.874 E F0 .375 (option is used, those a)2.875 F -.25(va)-.2 G .375(ilable with the).25 F F12.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 F12.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 F13.105 E F0 .605(option causes output to\ +(tions. The)144 160.8 R F13.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 F1144 614.4 Q F0(Enable \(set\) each)180 -614.4 Q F2(optname)2.5 E F0(.)A F1144 626.4 Q F0 -(Disable \(unset\) each)180 626.4 Q F2(optname)2.5 E F0(.)A F1144 -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 F1144 184.8 Q F0(Enable \(set\) each)180 +184.8 Q F2(optname)2.5 E F0(.)A F1144 196.8 Q F0 +(Disable \(unset\) each)180 196.8 Q F2(optname)2.5 E F0(.)A F1144 +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 F12.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 F1144 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 F1144 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 F12.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 3.124 E F0(or)3.124 E F13.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 +(tempted without an interv)184 589.2 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 +601.2 S(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G +(obs are stopped.)-2.5 E F1(checkwinsize)144 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) +(This option is enabled by de-)5.597 F -.1(fa)184 685.2 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 +(ve u)-.15 H(nder).15 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(belo)2.25 E +(w\).)-.25 E 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 \214lename\ +s 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 --.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 F13.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 +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 .717 +(If set, aliases are e)184 472.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 9/Times-Roman@0 +SF(.)A F0 .716(This option is enabled)5.217 F(by def)184 484.8 Q +(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144 +501.6 Q(ug)-.2 E F0 .17(If set at shell in)184 513.6 R -.2(vo)-.4 G .17 +(cation, or in a shell startup \214le, arrange to e).2 F -.15(xe)-.15 G +.17(cute the deb).15 F .17(ugger pro\214le)-.2 F 1.082 +(before the shell starts, identical to the)184 525.6 R F1 +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 F14.25 E F0 1.75(option to the)4.25 F +554.4 Q F0(The)220 554.4 Q F14.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 +(are updated as described in their descriptions)3.154 F(abo)220 664.8 Q +-.15(ve)-.15 G(.).15 E F1(5.)184 681.6 Q F0 1.637(Function tracing is e\ +nabled: 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/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 +(traps.)2.5 E F1(6.)184 710.4 Q F0 1.082(Error tracing is enabled: comm\ +and substitution, shell functions, 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 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 +2.5 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 +E(19)185.545 E 0 Cg EP +%%Page: 20 20 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 +(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 +E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(extglob)144 84 Q F0 +.4(If set, the e)184 84 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 +-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)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 10/Times-Italic@0 SF(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 2.947(pletions. See)184 218.4 R +F3 .447(SHELL V)2.947 F(ARIABLES)-1.215 E F0(abo)2.697 E .747 -.15(ve f) +-.15 H .448(or a description of).15 F F3(FIGNORE)2.948 E/F4 9 +/Times-Roman@0 SF(.)A F0 .448(This option is)4.948 F(enabled by def)184 +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 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) +(xpressions \(see)-.15 F F3 -.09(Pa)5.018 G(tter).09 E(n)-.135 E +(Matching)184 271.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 700.8 R 3.52(sc)-.55 G +-3.214 F 1.02(That is, the current locale')184 283.2 R 3.52(sc)-.55 G 1.02(ollating sequence is not tak)-3.52 F 1.02(en into account, so)-.1 F -F1(b)3.52 E F0 1.02(will not)3.52 F .956(collate between)184 712.8 R F1 +F1(b)3.52 E F0 1.02(will not)3.52 F .956(collate between)184 295.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 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 -%%Page: 20 20 +(-case ASCII characters will collate)-.2 F(together)184 307.2 Q(.)-.55 E +F1(globskipdots)144 324 Q F0 .285(If set, pathname e)184 336 R .285 +(xpansion will ne)-.15 F -.15(ve)-.25 G 2.785(rm).15 G .285 +(atch the \214lenames)-2.785 F F1 -.63(``)2.785 G -.55(.').63 G(')-.08 E +F0(and)5.285 E F1 -.63(``)2.784 G(..).63 E -.63('')-.55 G F0 2.784(,e) +.63 G -.15(ve)-3.034 G 2.784(ni).15 G 2.784(ft)-2.784 G .284(he pat-) +-2.784 F(tern be)184 348 Q(gins with a)-.15 E F1 -.63(``)2.5 G -.55(.') +.63 G(')-.08 E F0 5(.T)C(his option is enabled by def)-5 E(ault.)-.1 E +F1(globstar)144 364.8 Q F0 .518(If set, the pattern)184 364.8 R F1(**) +3.018 E F0 .519(used in a pathname e)3.019 F .519(xpansion conte)-.15 F +.519(xt will match all \214les and zero)-.15 F .432 +(or more directories and subdirectories.)184 376.8 R .431 +(If the pattern is follo)5.432 F .431(wed by a)-.25 F F1(/)2.931 E F0 +2.931(,o)C .431(nly directories)-2.931 F(and subdirectories match.)184 +388.8 Q F1(gnu_errfmt)144 405.6 Q F0(If set, shell error messages are w\ +ritten in the standard GNU error message format.)184 417.6 Q F1 +(histappend)144 434.4 Q F0 .676 +(If set, the history list is appended to the \214le named by the v)184 +446.4 R .676(alue of the)-.25 F F3(HISTFILE)3.177 E F0 -.25(va)2.927 G +(ri-).25 E(able when the shell e)184 458.4 Q(xits, rather than o)-.15 E +-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 475.2 Q(eedit) +-.18 E F0 .576(If set, and)184 487.2 R F1 -.18(re)3.076 G(adline).18 E +F0 .575(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 +G .575(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F +(tory substitution.)184 499.2 Q F1(histv)144 516 Q(erify)-.1 E F0 .402 +(If set, and)184 528 R F1 -.18(re)2.903 G(adline).18 E F0 .403 +(is being used, the results of history substitution are not immediately) +2.903 F .662(passed to the shell parser)184 540 R 5.662(.I)-.55 G .661 +(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161 +G(adline).18 E F0(editing)3.161 E -.2(bu)184 552 S -.25(ff).2 G(er).25 E +2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1 +(hostcomplete)144 568.8 Q F0 1.181(If set, and)184 580.8 R F1 -.18(re) +3.681 G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 +1.182(will attempt to perform hostname completion)3.682 F 1.381 +(when a w)184 592.8 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 +F3(READLINE)3.88 E F0(abo)184 604.8 Q -.15(ve)-.15 G 2.5(\). This).15 F +(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 .967 +(that line to be ignored in an interacti)184 715.2 R 1.267 -.15(ve s) +-.25 H .967(hell \(see).15 F F3(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve) +-.15 G 3.467(\). This).15 F .968(option is)3.468 F(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(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 -(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 -(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 +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 +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 .486 (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 -(`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 -%%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 +259.2 R/F2 9/Times-Bold@0 SF(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 271.2 S +(lue 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 10/Times-Italic@0 SF(mail\214le)2.5 E F0 +(has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1 +(no_empty_cmd_completion)144 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(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(ve)-.15 G(\).).15 E 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 201.6 S .622(rd e).1 F .623(xpansions, or when \214ltering\ +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 -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 +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 .855(If set,)184 528 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 540 S +(pand 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 .528(the te)184 580.8 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 592.8 Q(ault.)-.1 E F1(pr)144 +609.6 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184 +621.6 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 +(are enabled.)184 633.6 Q(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 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 +(xpansion. If it has)-.15 F 1.473(an alias,)184 686.4 R F1(bash)3.973 E +F0 1.473(attempts programmable completion using the command w)3.973 F +1.473(ord resulting)-.1 F(from the e)184 698.4 Q(xpanded alias.)-.15 E +(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E +(21)185.545 E 0 Cg EP +%%Page: 22 22 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 +(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 +E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(pr)144 84 Q(omptv) +-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 96 R 1.448 +(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic) +-.15 F -.15(ex)184 108 S .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 120 Q(ault.)-.1 E +F1 -.18(re)144 136.8 S(stricted_shell).18 E F0 1.069 (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 +184 148.8 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 160.8 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 +(-).15 E(cuted, 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 482.4 Q(erbose)-.1 E F0 .501(If set, the)184 494.4 R F1 +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 F1A F0(])A -1.001(Suspend the e)144 604.8 R -.15(xe)-.15 G 1.001 +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 10/Times-Italic@0 SF({varname})3.24 E F0(redi-)3.24 E +.424(rection syntax \(see)184 295.2 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 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 F1A F0(])A 1.001 +(Suspend the e)144 364.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 F12.523 E F0 .023 +3.502 F .023(suspended; the)144 376.8 R F12.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 +5.022 F 2.5(0u)144 388.8 S(nless the shell is a login shell and)-2.5 E F12.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 +E F1(test)108 405.6 Q F3 -.2(ex)2.5 G(pr).2 E F1([)108 417.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 417.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 +(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 429.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 +(primaries described in the)144 441.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 +.695(accept an)144 453.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 F13.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 F02.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 -F02.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 +(tions.)144 465.6 Q .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 F02.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 F02.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 null.)-.18 F .379(If the \214rst ar)180 698.4 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 +-.15(ve u)-.15 H(nder).15 E F2(CONDI-)2.88 E(TION)180 710.4 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 722.4 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 322.8 S -.18(rg)-2.5 G -(uments).18 E .236(The follo)180 334.8 R .236 +(xpression is f)-.15 E(alse.)-.1 E(GNU Bash 5.2)72 768 Q(2021 No)136.385 +E -.15(ve)-.15 G(mber 22).15 E(22)185.545 E 0 Cg EP +%%Page: 23 23 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61 +(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35 +E(UIL)-.1 E(TINS\(1\))-.92 E 2.5(3a)144 84 S -.18(rg)-2.5 G(uments).18 E +.236(The follo)180 96 R .236 (wing conditions are applied in the order listed.)-.25 F .236 (If the second ar)5.236 F .236(gument is one of)-.18 F .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 F13.833 -E F0(and)3.833 E F13.832 E F0 1.332 +(the binary conditional operators listed abo)180 108 R 1.155 -.15(ve u) +-.15 H(nder).15 E/F1 9/Times-Bold@0 SF(CONDITION)3.355 E .855 +(AL EXPRESSIONS)-.18 F/F2 9/Times-Roman@0 SF(,)A F0(the)3.104 E .578 +(result of the e)180 120 R .578(xpression is the result of the binary t\ +est using the \214rst and third ar)-.15 F(guments)-.18 E 1.333 +(as operands.)180 132 R(The)6.333 E/F3 10/Times-Bold@0 SF3.833 E +F0(and)3.833 E F33.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 F13.108 E F0 3.108(,e)C .608 +(three ar)180 144 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058 F +.558(gument is)-.18 F F3(!)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 156 R 3.021 +(guments. If)-.18 F .521(the \214rst ar)3.021 F .52(gument is e)-.18 F +(xactly)-.15 E F3(\()3.02 E F0 .52(and the third)3.02 F(ar)180 168 Q +.485(gument is e)-.18 F(xactly)-.15 E F3(\))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 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 F3(!)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 F3(\()2.809 E F0 .309(and the fourth ar)2.809 F .309(gument is e) +-.18 F(xactly)-.15 E F3(\))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 F3(test)2.5 E F0(or) +2.5 E F3([)2.5 E F0 2.5(,t)C(he)-2.5 E F3(<)2.5 E F0(and)2.5 E F3(>)2.5 +E F0(operators sort le)2.5 E(xicographically using ASCII ordering.)-.15 +E F3(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 F3(trap)108 363.6 Q F0([)2.5 E F3 +(\255lp)A F0 2.5(][)C([)-2.5 E/F4 10/Times-Italic@0 SF(ar)A(g)-.37 E F0 +(])A F4(sigspec)2.5 E F0(...])2.5 E .682(The command)144 375.6 R F4(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 F4(sigspec)3.523 E F0 5.683(.I).31 G(f)-5.683 E F4 +(ar)3.513 E(g)-.37 E F0(is)3.403 E .609(absent \(and there is a single) +144 387.6 R F4(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F33.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 F13.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 F13.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 399.6 R .658(alue it had upon entrance to the shell\).) +-.25 F(If)5.658 E F4(ar)3.488 E(g)-.37 E F0 .659 +(is the null string the signal speci\214ed by each)3.378 F F4(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 F4(ar)3.41 E(g)-.37 E F0 .58 +(is not present and)3.3 F F33.08 E F0(has)3.08 E 1.214 +(been supplied, then the trap commands associated with each)144 423.6 R +F4(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 F33.36 +E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F3(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 F12.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 +(signal. The)144 447.6 R F32.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 F4(sigspec)4.651 E F0 1.811 +(is either a signal name de\214ned in <)4.621 F F4(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 +F1(SIG)2.5 E F0(pre\214x is optional.)2.25 E .666(If a)144 489.6 R F4 +(sigspec)3.506 E F0(is)3.476 E F1(EXIT)3.166 E F0 .666 +(\(0\) the command)2.916 F F4(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 F4(sigspec)3.507 E F0(is)3.477 E F1(DE-)3.167 E -.09 +(BU)144 501.6 S(G).09 E F2(,)A F0 .484(the command)2.734 F F4(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 F4 .483(simple command)2.984 F F0(,)A F4(for) +2.983 E F0(command,)2.983 E F4(case)2.983 E F0(command,)2.983 E F4 +(select)144 513.6 Q F0 .562(command, e)3.062 F -.15(ve)-.25 G .563 +(ry arithmetic).15 F F4(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 525.6 R F1 .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 -%%Page: 23 23 +F .622(to the description of the)3.122 F F3(extdeb)3.122 E(ug)-.2 E F0 +.622(option to the)3.122 F F3(shopt)144 537.6 Q F0 -.2(bu)2.996 G .496 +(iltin for details of its ef).2 F .496(fect on the)-.25 F F3(DEB)2.996 E +(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F4(sigspec)3.336 E F0(is) +3.306 E F1(RETURN)2.996 E F2(,)A F0 .496(the command)2.746 F F4(ar) +144.33 549.6 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 F3(.)2.68 E F0(or)2.68 E F3(sour)2.68 E(ce)-.18 E +F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F -.15(exe)144 561.6 S +(cuting.).15 E .96(If a)144 579.6 R F4(sigspec)3.8 E F0(is)3.77 E F1 +(ERR)3.46 E F2(,)A F0 .96(the command)3.21 F F4(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 F1(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 F3(while) +2.888 E F0(or)2.888 E F3(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388 +(ord, part of the test in an)-.1 F F4(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 F3(&&)3.278 E F0(or)3.278 E F3(||)3.278 E F0 .778 +(list e)3.278 F .778(xcept the command follo)-.15 F .778 +(wing the \214nal)-.25 F F3(&&)3.278 E F0(or)3.278 E F3(||)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 +F3(!)3.78 E F0(.)A(These are the same conditions obe)144 651.6 Q +(yed by the)-.15 E F3(err)2.5 E(exit)-.18 E F0(\()2.5 E F3A F0 2.5 +(\)o)C(ption.)-2.5 E .132 +(Signals ignored upon entry to the shell cannot be trapped or reset.)144 +669.6 R -.35(Tr)5.133 G .133(apped signals that are not be-).35 F .117 +(ing ignored are reset to their original v)144 681.6 R .117 +(alues in a subshell or subshell en)-.25 F .117 +(vironment when one is cre-)-.4 F 2.5(ated. The)144 693.6 R +(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F4(sigspec)2.84 E F0 +(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F3(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(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 -(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 F1A F0 2.5(\)o)C -(ption.)-2.5 E .133 -(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 -(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 -F1144 280.8 Q F0 .715(option is used,)3.215 F F1(type)3.215 E F0 +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 +F1144 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 -F12.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 +F12.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 F13.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 -2.506 E F0(and)144 352.8 Q F13.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 +F13.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 F12.507 E F0(and)144 180 Q F1 +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 -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 F13.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 F1144 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 +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 F13.723 E F0 6.223(.T)C(he)-6.223 E F13.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 F12.5 E(ulimit)108 441.6 Q F0([)2.5 E F1(\255HS)A +144 216 R F13.723 E F0 6.223(.T)C(he)-6.223 E F13.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 F12.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 F13.443 E F0(and)3.443 E F13.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 F13.444 E F0(and)3.444 E F13.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 F12.926 E -F0(nor)2.926 E F12.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 F12.925 E +F0(nor)2.925 E F12.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 F13.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 F13.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 F1144 573.6 Q F0 -(All current limits are reported; no limits are set)180 573.6 Q F1 -144 585.6 Q F0(The maximum sock)180 585.6 Q(et b)-.1 E(uf)-.2 E -(fer size)-.25 E F1144 597.6 Q F0 -(The maximum size of core \214les created)180 597.6 Q F1144 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 F1144 621.6 Q F0 -(The maximum scheduling priority \("nice"\))180 621.6 Q F1144 -633.6 Q F0 +388.8 Q(ws:)-.25 E F1144 400.8 Q F0 +(All current limits are reported; no limits are set)180 400.8 Q F1 +144 412.8 Q F0(The maximum sock)180 412.8 Q(et b)-.1 E(uf)-.2 E +(fer size)-.25 E F1144 424.8 Q F0 +(The maximum size of core \214les created)180 424.8 Q F1144 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 F1144 448.8 Q F0 +(The maximum scheduling priority \("nice"\))180 448.8 Q F1144 +460.8 Q F0 (The maximum size of \214les written by the shell and its children)180 -633.6 Q F1144 645.6 Q F0(The maximum number of pending signals)180 -645.6 Q F1144 657.6 Q F0 -(The maximum number of kqueues that may be allocated)180 657.6 Q F1 -144 669.6 Q F0(The maximum size that may be lock)180 669.6 Q -(ed into memory)-.1 E F1144 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 F1144 693.6 Q F0 .791(Th\ +460.8 Q F1144 472.8 Q F0(The maximum number of pending signals)180 +472.8 Q F1144 484.8 Q F0 +(The maximum number of kqueues that may be allocated)180 484.8 Q F1 +144 496.8 Q F0(The maximum size that may be lock)180 496.8 Q +(ed into memory)-.1 E F1144 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 F1144 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 F1144 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 F1144 544.8 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))180 544.8 Q F1 +144 556.8 Q F0 +(The maximum number of bytes in POSIX message queues)180 556.8 Q F1 +144 568.8 Q F0(The maximum real-time scheduling priority)180 568.8 +Q F1144 580.8 Q F0(The maximum stack size)180 580.8 Q F1144 +592.8 Q F0(The maximum amount of cpu time in seconds)180 592.8 Q F1 +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 F1144 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 F1144 640.8 Q F0(The maximum number of \214le locks)180 +640.8 Q F1144 652.8 Q F0(The maximum number of pseudoterminals)180 +652.8 Q F1144 664.8 Q F0(The maximum time a real-time process can\ + run before blocking, in microseconds)180 664.8 Q F1144 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 +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 +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 +2.545 E F0 2.545(,w)C .045(hich is)-2.545 F .67(in seconds;)144 +717.6 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F +F13.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) +-3.17 F F13.17 E F0(,)A F13.17 E F0(,)A F13.17 E F0(,) +A F1144 729.6 Q F0(,)A F13.736 E F0 3.736(,a)C(nd)-3.736 E +F13.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 F13.736 E F0(and)3.736 E +F13.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 SF144 84 Q F0 -(The maximum number of bytes in POSIX message queues)180 84 Q F1 -144 96 Q F0(The maximum real-time scheduling priority)180 96 Q F1 -144 108 Q F0(The maximum stack size)180 108 Q F1144 120 Q F0 -(The maximum amount of cpu time in seconds)180 120 Q F1144 132 Q -F0(The maximum number of processes a)180 132 Q -.25(va)-.2 G -(ilable to a single user).25 E F1144 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 F1144 168 Q F0(The maximum number of \214le locks)180 168 Q F1 -144 180 Q F0(The maximum number of pseudoterminals)180 180 Q F1 -144 192 Q F0(The maximum time a real-time process can run before \ -blocking, in microseconds)180 192 Q F1144 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 F12.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 -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 -2.544 E F0 2.544(,w)C .044(hich is)-2.544 F .67(in seconds;)144 -244.8 R F13.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F -F13.17 E F0 3.17(,w)C .67(hich is in units of 512-byte blocks;) --3.17 F F13.17 E F0(,)A F13.17 E F0(,)A F13.17 E F0(,) -A F1144 256.8 Q F0(,)A F13.737 E F0 3.737(,a)C(nd)-3.737 E -F13.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 F13.736 E F0(and)3.736 E -F13.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 F1A F0 2.5(][)C F1-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 F1A F0 2.5(][)C F1 +-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 F12.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 F13.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 -F13.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 +F13.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-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 F13.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 -2.769 E F0 .269(is speci\214ed, each)2.769 F F2(name)3.129 E F0 +(If the)6.303 F F13.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 +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 F12.903 E +2.949 F -.15(ve)-.15 G(d.).15 E .404(If the)144 290.4 R F12.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 -5.72 E F0 .72(has no ef)3.22 F .719(fect if the)-.25 F F1 -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 +5.719 E F0 .719(has no ef)3.219 F .719(fect if the)-.25 F F1 +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 --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-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 -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 F13.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 F13.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 F13.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 F13.89 E F0 1.39 (option is supplied.)3.89 F 1.39(Supplying the)6.39 F F13.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 -%%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 +(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(status is 127.)144 559.2 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 +/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 576 Q -1.04(AT)-.81 G +(IBILITY MODE)1.04 E F0 .912 +(Bash-4.0 introduced the concept of a `shell compatibility le)108 588 R +-.15(ve)-.25 G .912(l', speci\214ed as a set of options to the shopt).15 +F -.2(bu)108 600 S(iltin).2 E F1(compat31)3.377 E F0(,)A F1(compat32) +3.377 E F0(,)A F1(compat40)3.377 E F0(,)A F1(compat41)3.377 E F0 3.378 +(,a)C .878(nd so on\).)-3.378 F .878 +(There is only one current compatibility)5.878 F(le)108 612 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 624 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 636 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 +(ntended to be a temporary solution.)-2.5 E 1.457 +(This section does not mention beha)108 652.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 664.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 676.8 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 +.523(If a user enables, say)108 693.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 .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 -(\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 -(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 -(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 -G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) --.15 F F4 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) -3.607 G .502(riable is preferred, and it).25 F -(is required for bash-5.1 and later v)108 465.6 Q(ersions.)-.15 E 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 -(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 +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 +705.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 1.646(in that v)108 +717.6 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 729.6 R F1([[)3.261 +E F0 .761(command came in bash-4.1, and earlier v)3.261 F .761 +(ersions used)-.15 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<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 +E(UIL)-.1 E(TINS\(1\))-.92 E 1.905(ASCII-based comparisons, so enabling) +108 84 R/F1 10/Times-Bold@0 SF(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 96 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 108 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 124.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 136.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 148.8 +Q -.15(ve)-.25 G(l.).15 E .388(Starting with bash-4.4, Bash has be)108 +165.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 177.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 194.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 206.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 223.2 R 1.613(wing table describes the beha)-.25 F 1.613 +(vior changes controlled by each compatibility le)-.2 F -.15(ve)-.25 G +4.113(ls).15 G 4.113(etting. The)-4.113 F F1(compat)108 235.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 +247.2 R 1.307(or v)-.15 F 1.307 +(ersions prior to bash-5.0, the compatibility le)-.15 F -.15(ve)-.25 G +3.806(lm).15 G 1.306(ay be set using the corresponding)-3.806 F F1 +(compat)108 259.2 Q F4(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502 +G 3.002(rb).15 G .502(ash-4.3 and later v)-3.002 F .502(ersions, the) +-.15 F F2 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va) +3.607 G .502(riable is preferred, and it).25 F +(is required for bash-5.1 and later v)108 271.2 Q(ersions.)-.15 E F1 +(compat31)108 288 Q F0<83>144 300 Q(quoting the rhs of the)180 300 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 316.8 Q F0<83>144 328.8 Q .35 +(interrupting a command list such as "a ; b ; c" causes the e)180 328.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 340.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 352.8 Q -.15(xe)-.15 +G(cution of the entire list\)).15 E F1(compat40)108 369.6 Q F0<83>144 +381.6 Q(the)180 381.6 Q F1(<)2.674 E F0(and)2.674 E F1(>)2.673 E F0 .173 +(operators to the)2.673 F F1([[)2.673 E F0 .173 +(command do not consider the current locale when compar)2.673 F(-)-.2 E +.067(ing strings; the)180 393.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 405.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 +417.6 Q F0(\(3\).).51 E F1(compat41)108 434.4 Q F0<83>144 446.4 Q(in)180 +446.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 458.4 S(rd \(this is POSIX interpretation 267\)).1 E<83>144 +470.4 Q(in)180 470.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 482.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 494.4 Q F1 +(compat42)108 511.2 Q F0<83>144 523.2 Q 1.056(the replacement string in\ + double-quoted pattern substitution does not under)180 523.2 R 1.055 +(go quote re-)-.18 F(mo)180 535.2 Q -.25(va)-.15 G(l, as it does in v) +.25 E(ersions after bash-4.2)-.15 E<83>144 547.2 Q .021 +(in posix mode, single quotes are considered special when e)180 547.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 559.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 571.2 R .999(ersions, single quotes)-.15 F +(are not special within double-quoted w)180 583.2 Q(ord e)-.1 E +(xpansions)-.15 E F1(compat43)108 600 Q F0<83>144 612 Q 1.071 +(the shell does not print a w)180 612 R 1.07 +(arning message if an attempt is made to use a quoted com-)-.1 F .248 +(pound assignment as an ar)180 624 R .249 +(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .249 +(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 636 Q<83> +144 648 Q -.1(wo)180 648 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 660 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 672 Q(xit\))-.15 E<83> +144 684 Q .355(when e)180 684 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 696 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 +2.552 F .053(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre) +180 708 Q -.15(ve)-.25 G(nt this).15 E(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/F1 10/Times-Bold@0 SF(compat44)108 84 Q F0 +<83>144 96 Q .719(the shell sets up the v)180 96 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 108 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 +(xtended deb)-2.65 E(ugging mode is not enabled)-.2 E<83>144 120 Q 2.634 +(as)180 120 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 132 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 144 Q -.25(va)180 144 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 156 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 168 Q F1(compat50)108 +184.8 Q F0<83>144 196.8 Q 1.209(Bash-5.1 changed the w)180 196.8 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 208.8 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 220.8 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 232.8 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 244.8 Q +.695(If the command hash table is empty)180 244.8 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 256.8 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 F22.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 268.8 Q F12.5 E F0 +(option is supplied.)2.5 E F1(compat51)108 285.6 Q F0<83>144 297.6 Q +(The)180 297.6 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 309.6 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 326.4 Q F0(bash\(1\), sh\(1\))108 338.4 Q +(GNU Bash 5.2)72 768 Q(2021 No)136.385 E -.15(ve)-.15 G(mber 22).15 E +(27)185.545 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/rbash.0 b/doc/rbash.0 index b602a7022..96845d0c2 100644 --- a/doc/rbash.0 +++ b/doc/rbash.0 @@ -48,11 +48,12 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o specifying the --pp option to the ccoommmmaanndd builtin command - +o turning off restricted mode with sseett ++rr or sseett ++oo rreessttrriicctteedd. + +o turning off restricted mode with sseett ++rr or sshhoopptt --uu rree-- + ssttrriicctteedd__sshheellll. These restrictions are enforced after any startup files are read. - When a command that is found to be a shell script is executed, rrbbaasshh + When a command that is found to be a shell script is executed, rrbbaasshh turns off any restrictions in the shell spawned to execute the script. SSEEEE AALLSSOO @@ -60,4 +61,4 @@ SSEEEE AALLSSOO -GNU Bash-4.0 2004 Apr 20 RBASH(1) +Bash-5.2 2021 November 22 RBASH(1) diff --git a/doc/rbash.1 b/doc/rbash.1 index 56e38fd03..39309b4cb 100644 --- a/doc/rbash.1 +++ b/doc/rbash.1 @@ -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 diff --git a/doc/rbash.ps b/doc/rbash.ps index 45c9f66be..8875d4b21 100644 --- a/doc/rbash.ps +++ b/doc/rbash.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.22.4 -%%CreationDate: Wed Nov 18 15:13:06 2020 +%%CreationDate: Tue Jan 11 15:02:05 2022 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%DocumentSuppliedResources: procset grops 1.22 4 @@ -276,15 +276,15 @@ F22.5 E F0(and)2.5 E F22.5 E F0(options to the)2.5 E F2 379.2 Q(specifying the)144 379.2 Q F22.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 diff --git a/doc/version.texi b/doc/version.texi index 561a6d0e1..7fca4730a 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -1,11 +1,11 @@ @ignore -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. @end ignore -@set LASTCHANGE Thu Oct 29 16:18:54 EDT 2020 +@set LASTCHANGE Sun Dec 26 16:02:48 EST 2021 -@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 26 December 2021 +@set UPDATED-MONTH December 2021 diff --git a/error.c b/error.c index 7df4b146c..3e7a2d617 100644 --- 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 30828095b..785c1deb5 100644 --- 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 1d967da1f..660e362d4 100644 --- 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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -93,6 +93,7 @@ reader_loop () case FORCE_EOF: case ERREXIT: case EXITPROG: + case EXITBLTIN: current_command = (COMMAND *)NULL; if (exit_immediately_on_error) variable_context = 0; /* not in a function */ @@ -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; } diff --git a/examples/loadables/Makefile.in b/examples/loadables/Makefile.in index be46121bd..60aef04cf 100644 --- a/examples/loadables/Makefile.in +++ b/examples/loadables/Makefile.in @@ -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 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) @@ -294,6 +298,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 diff --git a/examples/loadables/README b/examples/loadables/README index 6820c9604..c729a6a6b 100644 --- a/examples/loadables/README +++ b/examples/loadables/README @@ -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. diff --git a/examples/loadables/accept.c b/examples/loadables/accept.c index 54cf38c8a..ff98423dd 100644 --- a/examples/loadables/accept.c +++ b/examples/loadables/accept.c @@ -30,6 +30,7 @@ #include "bashtypes.h" #include #include +#include #include "typemax.h" #include @@ -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 */ }; diff --git a/examples/loadables/cat.c b/examples/loadables/cat.c index be99c4cd9..0b082d33c 100644 --- a/examples/loadables/cat.c +++ b/examples/loadables/cat.c @@ -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; 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); diff --git a/examples/loadables/cut.c b/examples/loadables/cut.c index ad9a83357..ed4972d2b 100644 --- a/examples/loadables/cut.c +++ b/examples/loadables/cut.c @@ -415,10 +415,14 @@ cutfile (v, list, ops) #endif while ((n = zgetline (fd, &line, &llen, '\n', unbuffered_read)) != -1) + { + QUIT; cutline (v, line, ops); /* can modify line */ + } if (fd > 0) close (fd); + QUIT; if (l) l = l->next; } diff --git a/examples/loadables/getconf.c b/examples/loadables/getconf.c new file mode 100644 index 000000000..75a0a5679 --- /dev/null +++ b/examples/loadables/getconf.c @@ -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 . */ + +/* Modified by Chet Ramey for inclusion in bash. */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 000000000..b8b9f1026 --- /dev/null +++ b/examples/loadables/getconf.h @@ -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 . +*/ +/* getconf.h -- replacement definitions for ones the system doesn't provide + and don't appear in */ + +#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 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 */ diff --git a/examples/loadables/head.c b/examples/loadables/head.c index 1edca6c55..f9f022a60 100644 --- a/examples/loadables/head.c +++ b/examples/loadables/head.c @@ -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); } diff --git a/examples/loadables/realpath.c b/examples/loadables/realpath.c index 0974ac41b..81c96aa17 100644 --- a/examples/loadables/realpath.c +++ b/examples/loadables/realpath.c @@ -1,10 +1,13 @@ /* * realpath -- canonicalize pathnames, resolving symlinks * - * usage: realpath [-csv] pathname [pathname...] + * usage: realpath [-csv] [-a name] pathname [pathname...] * - * options: -c check whether or not each resolved path exists + * options: -a name assign each canonicalized pathname to indexed array + * variable NAME + * -c check whether or not each resolved path exists * -s 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 Free Software Foundation, Inc. This file is part of GNU Bash. Bash is free software: you can redistribute it and/or modify @@ -61,28 +64,46 @@ 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, sflag, 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 = sflag = 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:Scsv")) != -1) { switch (opt) { +#if defined (ARRAY_VARS) + case 'a': + aflag = 1; + aname = list_optarg; + break; +#endif case 'c': cflag = 1; break; case 's': sflag = 1; break; + case 'S': + Sflag = 1; + break; case 'v': vflag = 1; break; @@ -100,26 +121,62 @@ 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) 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) builtin_error("%s: %s", p, strerror(errno)); continue; } if (sflag == 0) { - if (vflag) - printf ("%s -> ", p); - printf("%s\n", realbuf); + if (aflag) { + bind_array_element (v, ind, r, 0); + ind++; + } else { + if (vflag) + printf ("%s -> ", p); + printf("%s\n", r); + } } + if (Sflag) + free (r); } return es; } @@ -128,10 +185,14 @@ 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.", + "If the -S option is supplied, canonicalize . and .. pathname components", + "without 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.", (char *)NULL }; @@ -140,6 +201,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 [-Scsv] pathname [pathname...]", /* usage synopsis */ 0 /* reserved for internal use */ }; diff --git a/examples/loadables/rm.c b/examples/loadables/rm.c index 0af5493c8..d8d1522b8 100644 --- a/examples/loadables/rm.c +++ b/examples/loadables/rm.c @@ -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; } diff --git a/examples/loadables/sleep.c b/examples/loadables/sleep.c index fc2203d4a..204601f52 100644 --- a/examples/loadables/sleep.c +++ b/examples/loadables/sleep.c @@ -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 @@ -44,13 +46,80 @@ #include #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 }; diff --git a/examples/loadables/stat.c b/examples/loadables/stat.c index 52b9580fb..3725a9cb6 100644 --- a/examples/loadables/stat.c +++ b/examples/loadables/stat.c @@ -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 (); @@ -391,7 +412,7 @@ stat_builtin (list) 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); @@ -412,8 +433,11 @@ char *stat_doc[] = { "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.", + "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 }; diff --git a/examples/loadables/tee.c b/examples/loadables/tee.c index 283f23f1a..0365aa9a4 100644 --- a/examples/loadables/tee.c +++ b/examples/loadables/tee.c @@ -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); } diff --git a/examples/loadables/tty.c b/examples/loadables/tty.c index febf518ba..381df2578 100644 --- a/examples/loadables/tty.c +++ b/examples/loadables/tty.c @@ -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); diff --git a/examples/misc/aliasconv.bash b/examples/misc/aliasconv.bash old mode 100755 new mode 100644 diff --git a/examples/misc/aliasconv.sh b/examples/misc/aliasconv.sh old mode 100755 new mode 100644 diff --git a/examples/misc/cshtobash b/examples/misc/cshtobash old mode 100755 new mode 100644 diff --git a/examples/scripts/inpath b/examples/scripts/inpath old mode 100755 new mode 100644 diff --git a/examples/scripts/shprompt b/examples/scripts/shprompt old mode 100755 new mode 100644 diff --git a/examples/scripts/xterm_title b/examples/scripts/xterm_title old mode 100755 new mode 100644 diff --git a/examples/scripts/zprintf b/examples/scripts/zprintf old mode 100755 new mode 100644 diff --git a/examples/shellmath/LICENSE b/examples/shellmath/LICENSE new file mode 100644 index 000000000..e3bf3bb79 --- /dev/null +++ b/examples/shellmath/LICENSE @@ -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. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/examples/shellmath/README.md b/examples/shellmath/README.md new file mode 100644 index 000000000..1b4725611 --- /dev/null +++ b/examples/shellmath/README.md @@ -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 index 000000000..bc4122ea0 --- /dev/null +++ b/examples/shellmath/assert.sh @@ -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; _iPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>Dz930NK~#8N?cE2s zEmv7L@SPj{>|FsBE2tC|L=Y(vgrL*_ffzbmIw6z*NgzOgkWfQ_1VRb*(k~cF=nxV* zNL2v^3n+@ccTwk?-}3&4btkjiIs2S@%KV>aoxS(WD(`yN+g6!5hczuGBSwtaHrR9E zbHs=d+XSPh9Wi1P@jw6bKjrhV!w&1dgWs3B)TIvmnoR!tzyEu3_~D0_>wR=eD^p*8 z6@t3*Y0%*R{_p>mM%3f`qDa}4S*G1S)2ShpXZtp|16H9})ef2XtuJ`O@M4&CcRUip?O6Qpdg zmO6s9&|ITmeu%b3%0NF~jiGv`q0XD{{ql92L-*?6Ft2>RL-Gz?hoO6ray9B}DHGJ! z`}M#g<@#`M=sFDD%e7hMfU-*RM1d(-5XA=yE$@H+=YLNA`JexJ@{j-ckEMRs{@@S( zVDeXg^;eT4k34enBR}#ZrM|!WyT9v{^*g@fJ0{=o4c}1e2|A_y&ENdZ$shgEA5H%4 z-~O#s{*B-GjgxQx_HQo@Ys9B(-}imrH~E%t`IgDQ{_DS%hX3oo{;MQJBJThFzyDW= zk>9605&~TNkN^0OlJ{G`^;^p);@n4=q;2)d@1FbzNG$jNzwhOx@JIdVa9=$>Gw6T$mw!3=?(hEY(x1Qo`@b*W( zBm6*Xc;L71>Q@#m=mMYGR90OX8+r8$t?vE9Km0@Ixm{PkHjRfo+VC5l%7XmpO$fqGPdjK*xBSYH*Gz{sO-zvZi%+~>p0%9Wk^2>*4jU|uof%=k1Qik9|+KDh}M|+@cWhL!lK4xKp zI#L(L)^tcI7sRM&2W`HCvhriTHst%R@A|IN4~*5GdXz&?283{hX1~>!f%ID&?yFxP z{l+(fs=f#*L=e zT9wz9?~?rPDU<$&7QexFZD=o_uBpp+`OpV`t5@G4M%y)g(O%Ttv$)Ehma#N=;U1kl3 zC>3ge@W>Om2l9vbbh3u~?)g*?go(MXTsr7CxF?V6I;%|bORl+B=MPQl@m(I*Q!WFS z0mWR`Qdiw4(58Fx`JVPtf9UgD8<0NK^+pJCJ#~b(d{?LZxdstP$#-Stb6;KwLT40D z-dwMd{OU`4@)~n=Dhv9n4cFxhFY0#GkujB*{M2;T@VkFa8Tnn;j_=@mAdiG6@}*45 zB@Y^tCp^sk@D|*2-S7H7q%HlEFYVT4{SI$Z&h@%|wBbeF7QUs7`wTgqN`8*?qaXd~ z%Rt@Fy4^sz)RDYt1L`t9hsx((+E7ov2X)!H z&oze14WXuaBQez9jmBEqj4W&>or}U)@z4z4gCG3h$psf&FgfR(b0#;t+08n-%U_*l z1!%rP5dzo!mVD1ORx<)Sgu48ypsu>Up}Lc&&fCvd-wSfBe?92mpO?4)S*Jc`<*UC# zeLvUx*M`!f`PQ3)p?e#dmTfZ_x_78k=n8oF7?&96PHF2xxj7Hf{5}>b8_ZIEaIdp4 zReSZdluzDVtA7X6ekb+os_T#--;+1r>ok(MQ@+e^QM;E%{xiX{hhb%R7W2T539zg4Az} z{^U>oWb&EMd}i|TkAHmfd%yR4WqZoFt_6MC`~9eC2vVk>cNXX+#if@VY08(?V_)n8 z*~feQ;~zh{`qi&q3f0;@1m)`0*m&qLPkBkcY>^;j9^|k0!PGl#^|Nkw7D6iqEDNja zuX)XDio$BoKBRuA(|7xp-~avJKlz~_`k`)X;(Na5d&*}GtAc&239h5fJ%d!E=5fmT z9l=1)qCA)fZK+pX1U=hQ_MNl%sBQVuX2v>j&AlNgn?9r+zt!h^`s!Z2#RCkZ6nQWv zSvl00pFjEC-~HXPzy1S1@B?MHb+~;wL(q<{@;d zSITdx?lU=e4PCD5i@cJy=Cwyx^y`#UPMPfAzrU;=+wxH!iqdN21~<4tsm$Kcb*^)r za&sPHsqEX@qswm%hJijY_e)>;Qn7ZJr6cKh2ET^R{`PPGcJXGmpLAONf%?#@?g)D7 zu-9eaW2FKeju7?*Vjg(dQ%^m$SZaO!>Q}#7==t97{oc|JdVcz+e|mDe+ug3~&pqyO zkAwOp&->o@zRA_DcC}K@z1;ugCqG#{`4z8t#Uexjnw8ThJjp(2PGBkT#L*A`@DG@F<9D?%@OaYaXEAn947Y!z=R3 zC%?MzmKXemU-*SmCUtz_3tuQ6(sj<|r7wNy+T3M4=tyfKGj59LT;; zeRMq0{aPn#zVu-nqO|%+Y0(;o(<$u{M;uW)^u#AVadM4oT%%MvO9+%fAcno}b+4OT zeDTF)kU=MY{^x(bDE~FDdCk(XSH0?0ljl9}c_rUvE_0c3R80P#`l+8P0|=O+UDu!X zw5Lt}`mg_b@{DIZqvUm3D@-$Z=HKZ2xu5&F$yKg$mE!H(-?wjHp@{-f0{IC9fnjmw zGkC786_0qtBPMTq+uI5=9WNtfc!wV^dC5zPg1KjKfI#ch&-~2K6#9PkSAVq#YXtjI zk9ySPEpK_tQkR8d>}9^v2u8Yw-0*IgG$*U z@4hI|$grYMA1IeTp^8CGb$jKLFfBDN_K6%9}UNQOOKmOxlAdWru*vZ2m{_vuhANarrCPy80R2dgK zq6~w2)vI2$$f|ymTM^nU#f2w4;R&VRbl}#vzIDgTPAd(LMrRREP!NKVyn_z&94e-W zyo+?%%U*W!`q#g{oU%Ik`n1F&)CY|L8U;EnEb_$?P0~n;wi$K0uIiRRK zcLo{l+CeX2G9bdtl=I2MQ+8$QL69$DFJb-ghd+Ga&ZO{-a8aCRJ?mM;lR7|d{eiV6 zIIOqGM*r4=(C!m$SGv-bCJ%k+L(3;VqM0YV)1B^Al=QvteedMUU;c8rZtTsq(9P?Z z{(R^|A1bun>t6RN`6wbV2-mvSwTkldR15*(Wt=I!P&fP{hdd?^Ux1_*uzTuWD#xp>yv)qoAyOQ zq71SsvS1`Qrg=cGy8Gxnt(nhG%ath3H4%)xx2o)7_ZF+;*M*M!ENUcf;2 zd4pJ9d2Vx?+Y}2NMOG)UR5~7d2(SD;)!`GvDItZH2W^B;TM{97*~?y5jDo(YzxGCb z<(UWc=o^?<8E9Too35i>9|#xbBF@`5+o4-XkIJTk9Dqwg7?@CWeCxKIFfMNT*cW2Eoo zEd87Y%F0n(|N7T29$KC1zWL2>ULq5oo^I%$dSYZi8|1<#8qhf_q7CF%hdxW_mb%dn z(P^lUTxTIJyzs&jlJPhyhJ2=SpNLauz9TgAUiEo6fq)973|JsPhOnl}Q&Ywul-u_bcE4w^IP->rXa?G(psc) z4;}d6yQzXOQrLgynP(P5qc03O0~*>1z7Y4ex4mug)X#a&bBfZEE764Mj4+&1Q&Nhc zE_}led^4U9UMB_G(vGtAbx+Wkj-X$-4ny*QZgm@LUY)Vg5B<~^zZp9`vL29eGOp+Z z`IHqZImFl8DD3(tU2H@eY{I>C={`5i@dJqZY`Fiv^E zL>=aB&2KD%1ZdF72!pbcc}#0wDYRSXG>th(ORxl`-j%M}a z9f43UIw9dtO(P?u|H%vbWPsI4*zxi`?|DzjuaEM%h8Kj3Le~PZN-#LK`|f}L`xl;B z{16FQxfB}eEAU$AB2>am2)+7BNeHHSr7%+XjQ$8;;Jfk^l)*AJ5Fv@6L~tS+p{NJN zDVO|=7Wpui+R4-^a+d^AQgX)_QY?8zGZakQ=GBzS^&x~__w`X;eeqq=u5rOP21eVw ztx)(ApZG*^7@k$P9^;yRdf;8Tc`(M>S7&6wwW72Xgdl*MeIzp`@DzTtD2PUod8-vV z*4dl}p@h-kf;tH^&nL_PM6;A0@MR3%{qA=c#;TKWpa*k+Fez){MYzi%TTrq(Xg*|q z6#7{~N{d$EnDEU!*aC~|*>cc_z7Q<}WiSyv=1FKpb3mE#%6!klj8$+8M-g0Q^mhnW z7|qYoOL#$hQBXo`KE%7Dds*5S0U8N84`|WExKbDkJ{D4hl!TJ-QlNOc058yGyoHVw zjG+-OTg0j(Dsmw)wEC@I_~W;_tq{A$Tce9%7=q)s!i)Vj3Ay`gaYGIlMFUn3ywSyjmNjVLK`G+u^$Dr`?VQkHWWe^1- zWV|Up)b*fKc!VwsW~LItJc4ANW@VG2>p%MR6Rj39z<>%Bc>=~yL?W;H35I*-(#kDM z`=US>IUuMvyx|SYBVrb!L_`iLP}nG;{oKe$fG#u>X8hnOc^4rmMX845fygUPqALf%*kjW75W<@x2UBFZGP4qLMzLN`KE#o3z^7fJI3>AJD zLkTTp3H@kC59kZyONLF;0FTgY;nfx)-qie>267)cfza70EidE~5q*@5Z9&ADZ(x>C z2H^YpqCEO6uOuq7LT(J@V-Oi+f^Jcaa^a7565T|etS{gTnUL_?7K`19j4jz= z%$qBaWXZWhT z-tWi&9R9c#zSz`u!-5EAC={ad-F=B?!+1;k@*)VMg#`$Xr^8UI$HE%rSvX;XgAcBS zkgO83lv$-yhXoPy8w$pvx-LY+cp(oj?UTYMl-5CmO9&_qx-c9q@pOyE|K{ zFO+o%fX5-!@e~F^2umo0Mud=ubRdB6u=F{6pbU@9``{zG7#(y|41y`7(kJyYfV{Ww zwtDa|GzH7_Wf}-^`l&4*1zi-)R$3O#7%jp|kwh0FBeYUlbugNu457BM)PIXVj5_a2 znUxhmaRT_{^pbY>@84g>nLHV1V`}`>YwYlxOsGRXd!`QR$nRdZ_ta%NB+?>x)?$R* zoC9MaA7zVz5AiSjz;9#4o0Cbu)nO}AM8&}14cX0M4iSca;g50_T{#ZQ?b@vN$PwP4 zS-+w$ozmK8C5Rg8D{T#VcvGAE!Z+56HKlk4mI6~GVKBwX8o&WGpw~0t^-v5E6{1%=#H+TNKG_U|3C| zo;jbvcMpGf3C1Bt4PCDLPHAK0@Jr}~R#A!tAV!Ww$5)Dr2l7!Ip_jVlkLS{+q>c1H zgS!?`L~Ss-j3NF?lu;PUsPb48!IVU4tkl7F=I;M zY!S()ALL7aogh*M&nT&c-xlrEqdeY-w!$O*Cu@uh-r+sk)x&tm%Trn-VGPIygDKyT zEQH5oQGLpAFvfurl2_ZC_r33Zi(yqC<3^qt6z!rJKeI4}K1M9YrG|d!gZde1GN8X1 z*G_4LEr_0{v<8o`=%h}YZy=5r750T$1_VL`ghoxvhN!WBwtFj;T)sf$%+QH9gWyUwCA7ObE$1Vmp9Gz|532!u)*eMg4~ zL%pCaH1Q^`VYdA0X55s)Bik$bi+93yhKL6t7_KuW?|8>MiU0`3)uC=Y&MGAO!#`FT z@3f%|EZQH4@xxo~GLWt@j+Bv*;v0iP@ChIRHMVFcVCJC&*mwCQTZ6(xQ3IG?GTMZg z0!X3|QwWDe^i!MoN)8+@(QoBA27D!7IsR&%>>Bwn<_v(jc20CLj_4F#>koP4MB+4z zhdpO?kp*qcf`|>@c}w$a{O3(gA1ERET{C?VEr>E0H{+S;kOLB7=@;YMAE(s8xeO`o zL90#??sxG0t2PbA=;3t-(N4kT8|PK!^YgL>PfESgdsxq<|n2Xy=zP z2aW1Oi*^%|v37*t08nCvf`I88X7GM!B9!RI$XP~e2-=d@0O&Wb28m5ps&AUZ-ye2^wRJ7D4z-z!^95X{*@i z)edE(oRr8I>knG-U${>hco0fJ$<=4AL)aRH1!Wi|Moa2LKjr74cx%89^;tX;F6t+P zZJ~-x_|3E7gM=o$M3+xvfxe87Pcp=_a|)tN`}z24PE5h30Z+*gLz-3OEJ6WV!OAqA zp#|;XFON(fjhA~F?;&tL_?)u&>^!YdMg}o?lwy_;6AFrfF%}AhJ{T4yVO?2ILa8yt zsShFMV^Xe3`7T`Gwb3F}BtTIT9*S^Va9|KvJVK0V7){V!M+=X{YiI{Op#js?MWF}{ zFG=~e=lY_MSAPjP&wCMoS-ElgDR5M@r}(kH_dS5NPIE(SThFPT^3Ox-X`43mZrU*Dz?G)Z(|X^gRosKxs=wE0jYrcC zg4e?yxbk(h7P4tQWcgeV@JWA$c;((u+imF9v>{W|&fS~V+a9<&4E45(c;MI9(M|=t zL9?_0ZHU;k9<4d~(uH>|LFK#8 z8uBd?vazDPEGrqXJS?PeF!i_eci+>lPvE6^uAxweg)}$wxgPKc`ZHuL-5Y9~H?oJ# z;>U8p!!>6<>_WB3_#C3QwKZplzg8p|5l`&o>Ko`-=c=Xq4)*8S80$R?a>7 zR)N-24yGZ)JOp`TfQC?d;HK3#llt{~pS6OLrehc=tq1Cvr}(QDzve3iR&a(VEpfZa^iwuNDEEdf3;M$zkF>MVAvTH+hs7IaC%54PF<~$4u zQTm_M7a&Mq^O-U}X9;EMj9}*bsxYtL)7m2&wF0af8Fwr2FMs*V%R*CM=>jrJrfXTL zd1bYqez;%DsPFQ~t8P0Z_L!a3c5d4`ua#-rKenJK_@XcsL>GNiHy&%RylzGYhZfxQ zx*0352(5{eO=oSzIE-xt^SRG`?%a8R{ZmY{XX{lVfzIow`sA_Ns}1#;$Jt)6I*m{S zBR;Eo=tNt+iV5;z3OYl-`VMrl+#gbgRl(k(tr&B1E5hg)5@v_nvqEcS+X}7yI9n|E zA=X zi$YtrdF(0X&gb%i;$c0mKIq*~KR}J(iV_OK# z^rn7CR42hIFaQe7sth9t0s)nO8gh?^Wnl=7fpY*oo&t215a+-=Aefc00dCoxpg9g_ z@dfj8#Lv>Xd%{A?=Y+%7l{&Ryz%a@{*xpel#$uI7Un!qcQU=YL=$empyY>_VU z1NgSDgK1+w4cfPN>X3sl-PVM90sZ>t=&5n&D=kBn{d|T*{#hP-t-yC8_7SMxcyok<4#^507O=VH2p~?-a1r*jl`G$~t=E}T}qhCS>gKCvCAS?u2 zTk?2CjJ;jf43h{NhC8HfQ{O46EaE6bfrT|ZF+q2_#cx7FKp7W8it*lGWpjJg&{wn& z0E6#jlC~vQowuPpfN$tyl=Q*C`mL-}H5Qfhg_090bsIolnc*{#6r9po9jB=HLvg%G z(?J(!VDX5u;;F+K_O{h$@I@*@Jqjn9$q~$Dpq}ub7a_>#Vj!b<`hXvdsW$aRIiK<{ zPUzM@3LlwSHAE{OU@;!rFa{zN{Lu$8Z9Et@hJ?~kYT>lVlLCrv(99@OWHPLr{c=yX z=_gq?&Z5NZ!Pb3>QJTl=@GmlskIG7L36~?&v`SURau6_rX5cB-kaf;AgNi|fj+b=$ zL?;8@MQDyd4C5VmAqy*rG@!AHR$ZMm!5}ocuWmwz=>*(!+ zbdWMbbgu=ehoTsGN7N{bP>MHX*@axZA;F=Pgg~ENV|@uVLC8@)yjHL8`pO7-caw6w z69Ey0I0R1!86|Tmip>kSPI&OmA$+ULgi)Ot<#5r2h+##z4^PU8@|jfZyi z&!>L*R9@)Fi%<@EBdn`J>JzOHe8)@i$=H)2N(BNn39=_##WGLTU*W7g217r6mnfCKP&~@mN5+Lw5@q01c%nU@ z`phUg736V1!sfvQ?cimE6EcpHy6`Q6wG2WRB~^!cnh?p6i*>7gd zDTHgQMEXT8$d6E#LTXpvDWo>#BX=S>JQLD8Nk?{s%O0+0kSKJYSAJ(a)v26lhs?WI zr$rIDRG)JBEx}+-b%s6=D160iaeu5pjg%*}1koUwzhQy_wvwkzzg$8_b?P*z$2G#q zn&%o|coHa&E}qPubL!`Lz3)iqh8}6C{q-O;@wSXe7AAyJA_rcOK(n?4gb)){V8zi) zh}1(k&@YecfdSN4N{XkHGs13MgqR`;!l#eCg0T{*;3rztsg3X~pUXlyv@zV;VJx(3 z@kI24R_)+D!(@sS&#tUQp^cY_tu`#{MLn**lN}L^2t-IOvOzP?h|ho?ip?N8`_A)P zG$OO6T;85xQA&R^)_wWW4&#}pq-x%#&x;^NE$!rY%6CeOfZUt~6(LT@K`?8f3e+Vb z98)mE!E9bgc)Nf9{^EV2n6X0flDrPZ1?@#?37`29W>a8wo6oV-5%`2LQE*V7xh)S% zp@fwbXBq1^4`Hf4iUx#YIWTTc$?HG;=}#|;Ls-#_E$DyUa%YsZOi@%I=Wb7cN&BbX5Qwa@=LJ=r!zf9^uyd-~=+ct*p ztQMhDXFLciXOInIZFwoI!Oi=jtR(xigr zX?GQf0U(GJS05=MLr8HvePngn9G3xOcnA@o8DF!iYhF)qSbSDHiWz!&0rbo7X&hT> z_=zW0uX#Mv5eASD@f7$YGQtD%d*$}++gHlQdn_tk$!nZ=PqdgPnm3ylGRnMdcx!9P zmWna0g_tlJR|+F40r%Gfb!CwWGA{UlA7sSX7!$PHu8M5x2Zd%}0G;S#bp2NeJ0A?A zsg5^x@Y*%BC9=W)gwt#3PmFWMJD)+f5T$a$9)?bX!nB^};0ajT{_11CBiel(W!VXv zb||5D66+i*>>O|uR)|ZOEp+ifz*8G|UW6c{F-aM86BgS#EG0!@4S6%GnuL;v^@e-P z`5DL|r2ln)7DdYHm-f8ejd19%PpjA7PDofOVmz(9gautz()9r!l+*X{LBD`uz;gme zxzVbxcxdI=!jmu^Jyt#mtA1My!+%~vegce^@I(GZ`kj2{u)MVIjF9Wvwbcd-JJ_{8*D1&A|ER;}G9$G&oTVv*^ zEIrgTQ8dadkF5ntFEq2YVM{_e^`gZ+_2VnLtX4B_HtWsVL;%Wx{EL7bNQsCTQe(mp z^W=a4_6hhh2RMQCV zOW~&|joeaTQIn~FcI5%O!5~=lGWLGY(y1XR0~DUFL@%`?b))1W>n_7AC?v0Z2xVz? zs7~nsORS^j1Xhh%U;}GK&bAMtC=v$BryP%?4y$|t;b+Y41OTl>*Qw#N{?xbnFn1#@#4gAtS3Ti6ix@TF* zg~K4~WjM4&G3A#h?IogMz@RVS@-0IfdC*^{luQSBO?8tevV$Mm19NanC}I(r$!AW^ zNrVov5P3iceldPl%jLmqpXAObg(G`-6N9}hQYLg7H|>TOoziNQ6>@VL6vzPUh{`18 z5GfHtzvV-;PfRdx<7F&hS-lemTFo_o!^{whA!v!G#RSP<@Wkd|wo`1%W3>61_e$}$ z-i6G=@+=fa{S1Wz2o%KLt-Vg3Awpe4U(iF?`WAOlWN-lH!}WvKO7ZW{xfFHTIOnlqcTD7z3px>@ilpM-~8Yr25(r+*h8#cHS3Xg{}@q za1@NTMK|&#kGu>eI)%Py(YvIj87$d2ELP>F~Y8os2!Dn+X-ooNbRy?&s_@+T0^ivsL zN*{Qv@XMGP1N7swair8_!k8;d*~yJ@r2wW#=AiK^Nf2RGZW_XO?P=SBr>KfNS_@$y zML14|;fMT^XpQp9gXj8A(Oq*NpS`o%xEN1{iBU4Hwh={NyWd)*rtM(UHqf*K+_cKpv-n1UMyS7#+-_GNkcHj=8AwYBM5u0{i-n7Q8X~WmjzjnIN9DD4s%~3}k z)wG7D&~p6o#}|IIhN*iS#zhxh)Es%_k6Ck&6#JOS^Cm?xC1pW53*CsM<3*?jc}UQ zn3p$;^nvfUz3pwAHex90=%bHrT8B~IqA~=sE`Mu$n>Kps__Zv^b{hpWts^OI8DFV; z%0~#vl6YY@Yt72kmZOiBh~jO9Z>$q5%iJpCqKVGRo6i$@bekj(1_T z)vZo_4}EAc4ztESATPpmYYe6XHS|w=q8eelsR{4IV~7sOhjz6uBsJdlw~e`ei3Z4) zh{S5F5LYy|D98zfx8Wtad=8C=WIUuAWXD+f1ozRMI{NtmU+9GPGlq*II)evZH0Mnx zB1Ub(VXS}*&iZ1I$CxO}A|U(-QeFqri3r>xK%o4DF=fWyjLztV&Tg8Sf}v0DEi}F z_jw5NYZv;wcD+ANFpck^zFFSJh~H%`Hj@Gc^N zvk-cR=mTxyrB8W=`saGehaOOFUj2(;h|fcq)>gm#DrlO8@XU!rb7os}_I$1Pz@9X0 zFj=xF-Xa9mc{WR7p{8$Io9WNceb?OY3$Q-$7^_fNQ1>ilm`2-BGLTY@c|0dvb-B8~ z6h6W@tB!e?S6-Wdr{Q@&=|@t2*NU+o`e4!W)7t7^o0e}?zyk;$!keJ`#=;3>5=w?? z^I-5L<(2W7-_wvXv!MK}I{HZa!92z;!+7H68-S$YTT9exH>- zLZVWe=~fA?+Gg?$I!ItFO2})!jCa?5A?5%x)NSQaUUdvDa@0VB4rT>A2t$)VU9Z`r&>~9~T3kyVi?mk*t=cq~vCd$x5A4xeLA6k5fz44y z^=k|Nt-@N&F@AVR$-PMdUmTG{hXo%>k*N?1t}grYR-)HJ?>wMIJ61#O?K*Ulg}y$I z>?6Oi#5A4@l z^){aJg1mTV+(Efa!B)w$@XNst{qUrbIjvQFxRje3C1^SwA(Uo8M<}bU1OuTV6J_Pp zVH*IGZF1ZAm*48F{N7MOX(_gY4;Y0x2?5-*?L!dv?%iAN5jF$D0$Vf#Ovfx6-nMxN zp3^9xJ*&qi^XS89#=(IKZxx_`i!fTdnCG;N{$n2UF0C2fjOltXycF zhgz5j1Vy#7&(L|`+<_8@5gcZ4e%LmNw(-jOZf!aHnsIQn(ZL1VTKJ28pUUWm_V6TO z_(mYIGcek(;ht?W2Twd*|HoyIb?NM8NU|LJk^3>ZD$RlVw0H<^g6m{u5LhTEf$oQ=LvRC+0-XIv8EKzF)Wdzj!nayqVUjFZ48hO%@N(V>V41H}?5Y2P&=WsW!UI;^gG(Lw2RTyGHw zn;gM(Bn=Z;cLvL2c04v^2K{rs)qxJ-AFn`o9Dk!|4)!xPgf?`}0>R(`@ewZw8^M&! zcReW2=sDs>uy`b%U4FubzuIzSl49^0p|ub74~_LIq0fw%P@F*)H3-@9lHul6^#fnf ziJpX^6pJ$v3Hppoh#JTv?+LzBBD``KLr94)#@%=0XWX^T$a5(8hqk)^@;J8~e(|t8 zHRnP(89B6ZSi){&ALG3W=tt;5Gw6c^dvXz>h{TX6UmvcqiaNleop#!3B?Km5%4kfI zkFXdZil%Og;=s1SAzYNfgW4Y960=iYLdfEwA;KMNi#FES?|u9B6~S~r_gGm2=9=)x z6FoefbEGUPFDx-K9%$D7G9XMCN$?1Z`J{m&APf^jK@cdn`Wc}7>wf%j!iw_7TMY3R zv>~aNa5#UeZ=j6+iD(!Niir<|87-zH?h{H-2jd|R1Df%Xr%uyoStZhEN+LWBO&(+r zp%8q)XGR$9Je)G34$3NQ#=rDIpN$0tlF#^)HSf}r*TW={2{MJR= zH=wMgd!a*H23aT{x)*^qW85OfSGNqjRt3t*G(gvViI!I|}4Itv>!5jiBH1r#>?wQ{T0fo)xjf4bK41^Us z-+2Pw62hdkDSR^^R`@6%p#;{j1}iB<(Vj&ngW}ODg1`!=P4gVrF_$4>R0yy3Fal=v zcN%y(eGn0-JN;*<2o|pZu1o3{=6cJAvQ{K{0JO{kp;8wfTZjR?kD=h%2`GWiTu>CC z41NRtGEn%=sJKp1D2eeA-IyOI|3(Ad=n;WYF#WixfrChm?BScbm6x=!YN(f7 z8(;KBrVcU>v0~Gpk_ZhCrc<$A!UfE*>PvYs&8HChg)e+zSu6sIRRb~V@mQJpC*dMc z28pM@STGnYr0YUW){i2v*xDuJQ6!#PSx}z`?!9isz9&JIPa^c`&mxc)D4%(KA`0cr z&-8^-q(1$MVPkA89#O25PCBVr?9|ss42uC{AP8R{9@fAM9$a7LHzou;!l-?G)27u| z2GxIx_x@<}bcUA@+RNPx)Ura!gvQ_j6^6~5Nc0QM_-PRjFYuM&VO%J#IwWK6(>Tb7 zpZKjE@~8hEPvm4=i_qh#s05!9tqmcviLV}{@zxY{l4lEhre2~x%B%iWgFb3MbOd|c z&~cxbpi@JT2Vn%s9LKMdwjv}$Vgj`z| zo&e$MRE}a=^fACfATS8RbN76w%oJ9gEG5fM*?l(;7ebj!6P#(vGYu>`r4^Qip+Z?! zU%LdWw%+=t4N7K#gpv`+Spox$kBGtIQlLFB|5qQ6L|`SJhrko=%!B2(z{8jt3;bmK ztkx4ciehfI83?b0?7s7?rZU>M3Qk7I4&E_FjCW*=JTP?l8-q*nIRVMI^UQeVtO3O$ z%j5*F@jrsk$WvT0VIe6BKMTf!;b;8t-ikh+qTMu%;Zq0sTrZ*C~jEndZSm8KyILm|A)-)gDFCZPl-vZ#b4(8(w+Adpo=hp>-u3j+Z? z>Xr<)fwu^tULm!GFJFvW>^%;%51G*i-4CW{FF|4v}x0PmY|uN z<0Be|gdsvE58nA40;5IY`cnkP%66LQBrC3xu@N5YU&^>nNYO`l8BMF|gqh%(V-m>C zgh+)_Qa*~t*zvyJS7i%_vA4!Sz8D`e!Z=wFVr*;`*$!iLjj?_)R1{f$b&xad@TL?E zKO(2bjM5q#^He;FF`R}dq_I-g+d*srF@)&1!0LTx^l4Qf{~22}2c2djij_`yF-?#V zD6F#AYOfR1l~JiW2qPwAtWW|oUDHtv$0U|e{um4l(;h2IPrxQ1VZg`zPMjFLJe-zkIgJP0U*XBl6DfL6cJ z?Q>S&<<+*&RUo_~KcWcGC$tOMy&}kziUN`~Mpzj#VGQ@~-8(t;)KklrpEZk2)9}NX zFi^G<8EI=P>at~Htn@X!CLhWsl3N5BEA9D2pE0+E>BWJjYqsJ*TWjT6^uoBPBMBc| z+mp(purkkr`>Z*uLSZpkh?-C_bqH}O5Fw$62r*Esqt#S%0t*qW7dYvI(G<(vHj7pS z9K*rD@YX_F9S{!MUZH^YZiOh6SI4~jN83C;?-xcGSc(enqjwqL7utAwo|?A^D5Ciy zBc-1PQ3z(SOg>Qo4<{0#a0Y(Xz#0>MBfy!b>WdKD;SS0eA&lY?e!`T+EB6_agp~3{ zd1F*kM-TxqHjED=tzCUzFVbHMCrZGpg!01n?AHq2$qyc*gE10iQ4+FaUBI@CMM?c7 zW5!o~6p@nSg}jV|#Us-veU;RgwTVR(Hwue?_<%p!!$WkFH+6ckLh`%67KG3GVtk^T zp`q;4svI+gZHo+yiU=s>6Dpdd3vC?z652RQMnG*n2*2c4KP9t3Kya=63R@*}0`pBm zsPil;nlP1;nLB`i5ppvS6xW;vqbR1WB<&DZtE0A~)GJgJ$}kH0hUw_UbOwUA%Rnvy z{lGIq$D2{glsAA5ns~_?rLx*+uCGswo6ww)5hR9V+Q3F>+|wsQYcWcD#~*)u;iI`! z=Cgrvcqe7?N*#n3&+HjH&&>N6Gak$0l!GW)Kuf#&L&=4ighw6dT`wYd##S^&AQJ-X zYYe;V=ZvmT z13_4YF&a;Oyd_1a^vW9$*M*$6eRx@ek~Y-KLbCP-%{|tiVmi@6k$Dn>$1)3t39U_h zgKE)?wa%Gm$J>NW_J%1?!mCALpyU@aI=~?m=NVE5CR0fL!yCe$-%jOd)5@s6Ol#M5 z2@maC3#s+j{EaXWLJjn@ctRn}jqw!U@dA`l2i{X` zp`Z3*WYXSRplk%65wZ|Pe$eV3z8Fumn8x6rGXa#;xGBrH$Jpuv`EV_fNAjm1**-E| zV&p9v;uC{TVHpC4CZ_exI9S6G;TR9?iRi3dmMP2f`hZYPa;OeI|tSQ>uH&6uKpfV5?-L++qKA?jIW*qwbLN~*q?>vV^ z6`tQGVO*rm)a8>k*AJ0_$izQ5<|*nn^PK|9OMnSK-s>|%nFlyLSRwHW>LL{Qg{MF; z2r{8$=*-z-cr%u(K#VK}i-7^W)dz}Z@sNB;432xICg_phG>jLtwjlZ-QyJIr22Uui zsEv&Ju51h^UXsD&??an-gC2`sq8JgK=mc-$aICLr8>ZE@2pAglF|6k2>Zd2@P;d8Q zH(rsa6>0#9Kz6@cm2`8N0n$*Z@Bp!@m1fmZhY)qX)ZxBG1l9&q2(3B|5TS}9YTI?f z&6@Hg&i@id*VSWQiRnB$C9|KoO#k}O7K6fz8uUKWe| zf;{-QFNxCnFvSoZQCyAzOs||-&opZm@K0Oj_B=E`(ig^svtfA9yb2zn6~9dj?U2w( zi@1yobV_T^#cEjDU6s;8eh)#Jpe|bjgUpRtM~ngG`n08ep^U@>Q>I#gVF$qH%9`sjfIh7az*^~_2JH|~7*aOMWRE`)6B^M_(?N-O zV04OV2>TH9IXtPyEB#%hZ~gIBF4vS_WNa2el-5+!{GQU=ZoM)8K) z94ha(>x&@eLzmCgw`?D0A!E&OYEv{JJl9^~L%G{R#tF)Odwp#l>U?#% zd@jmV^rOxEHDOm>-wF`?KBK2-ca4sFht8V{>oR6L!DL)b;iqrJ{H5#-YBgJgD}Ptzm>FP z3S^@Qo`bYZ&H}RpLL2umPU6l@^xe1goiG(NZoxpkwFO6*Ywl;kB%zLL^Soo)w~}ae z&r-RzEjU@NwSbf7XH!?or0oN2==$usg$r})ykBV+QeK^aZgVof6WaBWwo_&v1(WVaNBlB5-Uj?kJJOALp8*^IWGIUDo(1QW617v%pW=x1RfDR`3 z*NWyD>7>fCRil%bVt+JS3pypA`fcC%Z951vq8L_5^IctpD+U1bF+?3h0~STM+V-R; zJ*k|pMFT~(-Gc@z$ys$&524bg!Bwa25w!d6KI38`#zKhycj{jHkhuoPZvb=p3$5~5 z93g!2S@ESPf%{;gj6um@%mZ2(Oxq1SkrQLKI3)d5FCnsr==CV_>xcT$pgr3Mwt2Gp zIt}VF-VRrIpx;7JExh_o!JOeXZnl{4z@nkP<1PME0EW{^F){;AGRd=d@7_X>`qWLv z&`wCzWt&4AzN^c1TZ#Iree_X&1_AFwpX-jc`e$2Kc3sC83p!}9M~^0+oS~P8Y>-Pd z;G5NIa!wc2tvzyP=feIqgF>mCcUPB%QarG=W{xfYS`q#-ZXTp?T-QQzj9xc$myuw) zfp9m&1m7tr0n}+vJJ>{ahyru$u_0C+gqpBA)UWfbB!y6?!F70>g`!C6cl_|xuYPq| z{?Cy=LWUMhw7}pL5bq!B-3R(4f{1}S$TIP|gv#k3%H-U!rE_@*GbMMbOId?o)I3aA~*!b?y#LS)}i&KL^H_oU3ABDOc#MnjP$u%haM(w5 zqDuep%qIoI<9J^N9KZEN8T8re;XTzIWuc%H0Y4dEN=?})$m1XX`0|LQK0Cy~2=3dr zugDs2q#k_517+O98>i36v^FT5c5MfuMIPr9jJvuS3H_3np>W3C-a466ukpA2=xH|F zaFkiy+9mh;zzC6X*Vl^3xiQBtd{H-=r7lJ?*ci*2OaqICk-V*qdV5F&^$vHqL+La| zdvO~jp~&_yDN8_5c}~_T!iedVU)?OB4m)My+^$ev1i(;W=8(byhPqD}Svf-EFoS`1 z7L;NVblX{8(-L8Hq|X2wAQ1+IV7b-Da1cDqqO^ohltA(IA2UHek^`V5zl> zC;EoJj$k_0$OE9m-lVeApl9n_Q&>zcL}&ixr~1{UU47fXe}7RLbh$>E$N~d^ccGg{HI9@|I~3j6h^ELJ<KHrBKrpqlP?~K{!<^ zT+lhh>Kwu`kP*P7z%^yG6;KWgrmzH=2j+nYG>nfR-?jnaVNg7_ zrGEcol=85&u2CqA_Z={d=f*I7^XW7VBjlW^Q#ksjjT}>?@a9cG*wL;(goXDPW-~<2 zLW>@RjLOafh1Vu4&WNGQSUDZ#-~sRH^b+VVWkY`qOZaWvA^@{M;Eb<2oH{d2sK+tD zZ(+BCISh4jw;rIKFbZe2iIxas z_>F&P;f>`XXc@h#RN*@nsymVG%<+yKv~Eco_mT14_rs5 z=^A5J(@kl$K@reS<{8u+GgXHvg!UY(mCqE5(vT;HiwrRo##p|A^9mS zYs}N4Ddo*)gjm`oARde`Xc(kjmS10Z$~<1B9(_?4sNcZ*6qcEb3$4?xP?ts4XFSq2 zJ`f;BD8cXavF76}$fpg17)4jN?+lAM8D2VIFH9u3Xy?h+1H563j8_D`4_;k9;VzmI zt6MOh=JVa{xY|bz0!z+d|G^cH{ zhiAr&y!mbFmFWyQbk16N{YD3)A}<-I@aS{DhC0bqzOPqtQ(j%+N!@1mU-MW<$nSZ` zU7n2D$;DXXb2%n{bQCao3bDiS4)LiujqV*x>ES}&>qx(qrm zO2H^3%Ss^(s(L_v!bXuee~6q= zHp#jO<*-=jjJY-`y*mA-sQ&e;H4~2zS^%{2OJ*n|S&~G17M#HUJ<>=0Cr@>V%)^Te zj01URw2iO(c;>jKDUx-7^qr?At7xJ;%Ho6eDX~=ZOY(g^NO^js?z9(l>g#6xIS5cpTVUhI!%Cifp}U>HwY&A=4hVO@Hn5r@ybz)0n31*v5*Xg5R11l z-xAL9t`?urY(QgV0<@X83iZ7^*#H|jR#sp1*>AAg%scbmJcYjK2Vuwq=ztd#o$yeq zSmZ@Ppa_C_I6-DWQU`jp%ZNCii_iGQ`w?&gw|DQ}@=jiJY6d1_G!N=lUp%RH36HkX zl<{|;0_vN2rNuE@B^KbG{p@EK8swF1=TTtODQ|eNs3Y_i_WJEQeo;6Pi!}g?c^2Mm z_gE#j!b^_Sr(J6dgxnOtDzZ9wOZ>n$o}DZJK2cP3Fro}911_KT>^O*8EJ`wX7QQT; z8B;6q@;mH7u8cX}GAI^2U-Y6E6lJ9xcCBoSBI6t7jnXD{|22=28KhXHMS&44 zfA8~bRQj*Mp_0Gkw@W`47#U8cyWfn zQy>)6!ii^cg-_Z;FIq5()u#9sOne%wcu)B#Eu*6ygQNeRwWQ>^M}Xy3AAw-u84?dm z*MdI}se_O*VrcbjEuqVNM?J2iQ@Dq(XyUQtkm04VBGKo7;s~Qe!_3giDuD_$OeDpH3mGcd-^WFa+K74G)V68knT}B3w0Ea zw>KW-lEK9*Nq-n@o>R#0H`>)fIUS<07%H!YQRBu~tD8LIDLTm$`tTpk!gj{W;-+V7 zwV74lwZM1+eru;*L6-Jp;0YHi-1k27pqvir7-kSii6VmKbe%HEXPq#MAecKM3NVs& zwb#g+O5U=NXI__uP7@H!<2iY3Rxw*0Rw2>IyE8WWj}Jhp2@6k57<`ZLD{FvRdxK>` zf<;x{wuX5aA=bC7+^UzL5zHv9{EI@HKq*;u-qQAsv2suS5&_n4hSMhj7p_N{^qYR+11sowTlbr%#a~-Z45JX&A`&kj;~<0$4HPqq2t2Pk$R*yOgK-xv3G>n8J4LpQ z>609jVOyTOx_(%o(iYz9kF7yETBdN!4sauGW60a|c45CgOROLZk7${sc zkgS*0Sz(%FK4=du7>toRVSwgA9!5ksiupn$N=1k$U;2qA^mxEp z1dv4!_gFT`KuS!mn%GJrAY_?*6xALA?^#i`+%6d@FO8Ba=O zOq^~q-a=Bp@zX0|Lv3cD!{2chn)VepiGGfc)@I}DgPzOgX|_+;$S zoc&^Q%1DS%Or?yy6?unVL`>>1_6z`-M7w@+Mx2cZjx0G;<^jz9sL>b|k|1jT^~^C>IF<~d1(Us&Q(KkB))`K7@zU&8}}B@ASEgnX1% zcpVTR9>+aOt>59@A_(0Cmv9&-`^#Q_CNwvf^j^l|gXbcS_4(Xj>j*ZagWYz8QN8ji;t5c4N>VDJgIkQB3A^Qk<`m;smu^_h1V2v(dj>1@D207VHH$@|)jN3XCb;k^MCw(1}6%nNHrpV2IYw#r*? z%+KR-4RtU`Sudav1VoA_V2s??uD+SyQ3m4zi?*lV+LIUrMwVeU4!n|a&HgQ~js|i- zXn8_P%ga$bCz#O6KnicsnNS@)5}u-&!t0}L9pSJ8C}fA>WQZ9Mbr>&G8^6&={x|~; z0AEc}4@kOtD!g_K>aVaOhk`GELT2cmowVjh`JU>=WagnmM;ZuOv1 zTgJ_S5!XPy`bdxn8zIj1W!eN|fTt9daN-j|W*8}y`U!EOi%cBL z|9~ES!y~-INAjW_0?Q}@rPFVrGtbJ9h^8p3F>*a)jlZS`A_Q`1k&66i$9>9f&hHw! z7&tsaTc8i>)HhL#wmCH8Ew2bcbf{0{LEYrd+KjS(FUxB%ZpxW*ng)p+@QY5tVQq#+ z2JE|A0V9Q1ee6 z1Ra0WGmp26Annwsg#@1oEx|Mf^}R)*4MNXA5h6SiR^k(75}DyI?`6D2D4CKNYyCFv z6qFGrE7k-kBZF2$Tk_(KPy9tUMGU_pTZzheL_F1&6l7c(95hF1fdO$}el$>8oGhPH%sJSv3+VV1dvItXJ@XvyzI!8-Gp z^Ar{c2%5CBXur`ily{cmEJObyK)3Nqn%3?r5dQa5crb0O#Gpi}b(AjqIAQwyT<1~R`FMe17y z{ehSTw4iGlEJOcRL-^lM^Y|rCU@ZM6W4y_- zx*iK9O{jGgk&6oNs!+FyxJ9fMTBjKqb*XbLz?fO>*X@RpYk_*!E4YUm8LKD|zL=Bs z6(&5B;!Sii`$Cv@A&guL)YC7E=4nDagp8F`3;C?1Pr=Yw5A}H(GFBF* z9OO`630PK@yf3Xj%xfZjm2%5h}NFspC3=U=x3T0R} z+gF6pRzj3Fz&zVSRtrJ+g0WUdmub@$f^9b2OF7&=4Z`g5@4(JK9$RMQ6Kh+ z9WQkF!IqBk)E@fx?%iA7F5&uC1{os{7KR=0aH7yDt#0+W)#8R=I_t{{dYy@7`v~!7 zf#PTnq0V#Kz-LJ6ts-D`42UzS1_+(@TAh}$B}8Zp5D+2;fHCrvi@L&)8U!T5NI*U0 z;D{rh*hhByMw@6PNVa=eZROBxncuR!BW?AT!4R~sFNB?N@dWnuY7qC_KlhCK!#aA@D0C>EgqwTvfFPB@X7X!KG+TM=$~@-biH+g!LXO@UYx;Z%J`y) zJmR~v)C^6%dVDDv0Fw<&lw-4j4v9cvve3zZAzq>|z+zKo0%~uW0@))L4zc789#8_C z-j2CgJfw4hHR?B@y51vwB!X9s> zPoXtJ>o?^lD2_%t-GoPk+o2i!reKVjeSCE}>12!;tGsMYpU9FuU1MoaT7S{cILPOu zn06UjN-pB?{4G9sjFO^xBFuiU@iQ*^$Kwipoka3oTgC#^ryYG@bQy0(M*s2Am^$3T zpd=#Ls?ZPMT%_nm(7Bvg+eN~(jf6p=w1k0x@{k4w(S*pS0|Tz-aW#rd$ysMd=$yq> z)@HuYljU{DgK+Rr-sNM^Fh@SZPuUHu`Y4PoDFcir&b|^ol{m0-Q+n|p*B9NTic=oN{=3Gr4Qh{x_)3`!+ zC3A$_I8-1w3ELdO6GBB{b$}34Fv39a2@S6*?8zLIRpym^3ZW>N`HT>a^(MeP3c&)3 zOj!a#VsKq&l?kcSFxu4yr6nA^hZLc%1!x}hPg!$w3D8b?36*{ma&_vvPc)#3GB6;7 zn@~HTf@Wc}e`P76AlQ<1fp}PXDK&4zXelG+9A$eVkl~#Fyu<9#;M2mJ=V>|)M46YkT2|pMhAvAhp0Fy6D z# z(;#zePcvEPaP~PKRD088mGXO2iRY+2h;Q!CusT`95M^$-)uE4g9e$_3ozm8WaVTIQ z&_I9M!VkqydCeKPCSa#MJ2$SCwT3BgrWRnLxhp%VX+Ai;n1e*(xS)!Pz(k`0^X3pU~HV@CR~Is3vN8BP@2;E ztq%N<4{vy|8rq@M42`IT((0QOg$msw3Py~Aqf6cDG|!Yz|HFfnF%IYzf~()Oh2jgZ zjg2Q%EL2%UQ^r)q6oxS}XLa73GE!I(lXU`KP>o(zo!j z5B)S9(hizM4i^0ueP!*T1fwJc#(-gTO<(o7<p-gYVkpZF%3kse*CRKl$*4pwT4SAl|{K_?o;#0`XW7xXj z5zw;?pU@z`y7Wy{zzdlJG6vcd5eOHB!#oy+m50zWPCQ~3c`U@CiNaejb1i(*7KQiF zyiXp8C!}~nPl+O_OFh~%7bYZD+?BKHDzaceZ1Z?AI)i9V&45@qV+_nojf3dMnBb*p z4&x+*Hx@i5-fB<8VzG;HqGXh<1{(B(aS(MeWUdLR^_P4YN8=epz!_TxgNKzTJeRft z&?5!;j-MV;71EP^#?e{@gO@q{;q64fJWp#d^B{2MgJEJS+^7zRp@hc6@B~Cy#`94Q z$|r<0XhJ0xlhRsTGAIOOmLF z%wQSdObNh!<46e9gD3c;uX*GSKk$eW*v4VJ^2i}RQFh}%;dp39M*DcBemtU}ysSe2 zR`$Kk!@fDAh+ciBxQsIItS^+8qd*H@7()uEKV$;0!Efyt7i$#ZoBkMA2F(2$gx|GH zGt|}3vuZ?+r=hP$eoOdk9Oxi}Xa%3VF?RY$7AS3u)8Xwzy(q2B28MPEvsgDw(%Cdt z3um8z^?=Z*hqWdc!Y~3TeA6L9lm!gJVDN1Z5O({k6o+RPUZI{tjKHJ7(H(Ru@Z00DIkGmY&Z+X1JseS6jyybG=oAe zjkEE>i$opD7%P#9m14593K^XTbfU4Qx!-QC`xL2|2I;@Pi>5?1Hm}00|=q z72yT65?XcX1EE*mi6$PLQ0Tb(l#=)2A@rFbP#&HJgzDx^gx9Jw8e{nh2v1K4SwJ2S z`hzqJF;oPeXC-6|k3qEfhE8Mk4k5jBfaz-}<2s#z3@U zjI&rrS;-#b>=m>kNIb?v#@g7sr!UYcEelBVEsL|T=31;XYes>&Z;aA-lo&CDX1$7= z&JjFx5K>3#2noRuq8UgX;DxO$V~Pb0mOmZ`Z5Sd1BS<`iO??7q;CV-N2*+43gKovr zd`Vk`nWwXT#QLkx0tn^T*Ys1L2_7L;R#=xlEQ%OGd^La+(1H=qF4RQ_`U$kYn!htJ z?&+hl6vyB~q7h2X^H8QJio7BYiinSdL0$_}#+-0VXcD?o0(9Z8lS+()alkjx2!+d< z1MvL#g}25}C{77QN}?k5k{#c*?PL`?7(Ddrw{-{JS{;mW3j~|6PuO^O*=ph`qbZczInk5UeL4( zT-s~}sA)UWw4H9+c}{cOamO{S0yeFJHSIt(r=50M(^|GtulieNHmw&e{n3Xu+-puh z{q*LmU;S#KK^xj@1)^y~lcrUe(!W-i%l$rDp>JBnYTCg$aAi59&#jO*x4-@EoAb^) zuUt<*wcjdWxds_0eb8Uy(Hfzq6_5itnx-|fWelJ9yytcO2K{>HJKtIQ-FnrgH3Uto zga>_ZjbGC$N7H(`Qbxbu_{KLjtpR9SqtvuUp=p)0X(OAaRhDjSw9(GHn&Xc@zVKB3 z)=)OBpmj3S8r7zacnZ(d+X`$M>zY3NZw*V+Mnui^uYdifHHL*2{b(IWbEiAqsc8ke z&?}**4Y8Znh?P2OwBEOAr+ZCnhzqTLhu<54)~OX*&_({*D5z--U-{k|<07-I5o%gz z*xc@Rw`I2GduuGd zeNy|PEb)3_0m;8t;2F(%`rr+C3(NPyVE>MRMdPW27cJ9@XSHyY(@||7yNDprANTZc z8Sl6e&}XZ&yr@tSS^+NeK4EK(R`5zc^w%DyxoOTogNO+Kgp9n5zN<@Lg`W6gO+XYQ z#E+Nd9pn{)HvB5Mg91VW@XG#eY&sxem&}t*S&gNTyxLwv{RRz zHbyD45r~|aMtHNRX@N0Gn4WgSuk^<~Dc5G9ue4da>3WWl6a}+=uPfGAh;WU9noIa@ zeqzo8Vdz?+EdtnASkOM&417Av5>rs0Xp)pg*EB?7A$_ZnKIe0zp^daxqfb{LuRi3& zSnZAR#vG2v?1Kj|Z}h1S^`~w1;p33PLTHh18gJ!EQYVCm=&GX{*M{nGUmNZxFNDUl z?{}T1p{`@q2ptwgE%NcE@#^}EpOQSG+r9jrMR&l9TZ@Px>lFUL{WAE%EDa4I4N3?Q z?y&M!8WGLP4-LdBF*FEaUherE$`{o4X64&V=)de(z@JnJY{ z)6G?_fTJxDMV*!f9n2?Z%7Zh;sjE}kWSrNS>k$}B?e_K@h!7^|$cW9swDFmRwUilg zN#LU`CHt%voji!ZBj(@&uqQ(8Y*2?czgTiGDiu)=JVw6@iD>|aE=C{$UPH8EuC1ndaiz*(MZEME-)>|QL zunUvtDgB5M+YwP%Tb;If>|U75iZ(X_=Cs<-Zfz7grG+S3Jn1~B%&8VnX*iihu_$sr+hTPHVGW#zkGdPH^8g`JM3< z-`CGjj*2^CCm?d{7^jHR;*-NWo*-Jqp`t#bGj;()zWv3mgFJ1psIpO5Ft>fc10GNm zm#6iRvdv~EX-35zv7Hh5wO-@Av$vhtllAT~&*?(upsPakD(4S!C}-5O!ah!I-_kw>~9IX~^SI3A(% z(gX5s#TYhHVIgx`i&1E~M0ji^7!XalmQ|)GuDvBn>;K$3E9pH>C!BCXdBn)MSPNFp zqe2)n)Yh`?j~KC5khLW82o_UCjL&$+GbYb}{`1S*I4G>sNkwrsSYd%4(v?nG+cu@{ zd0J2IcqY)3CZ6d_#$})$Whk(x8@yG*B-&FR4pW=w%9H(I;ds1n+LNNpAm4})8wK(g zS&Qrmhdod3-*Jc#AMuDsl=T|tw&mF@nRG(Y!k2e~*`>+x)UI`tU8~13CYD|gFhdyO z#o(0HL%!+#Z%IrxYXi-J;;q1suH zcfUOy<;^AjQ-g&jui~LJ-u6+S{oO2N)i^p4z3d*%^PK9dU;XOIgCG3h@+y;65Qq_! zNa4iES zA6o13=$3rX^kKx-fpM$HsUG7XV?6{Rux%V~F!8)`jwM=bvXJVTZS_KZ_IInb=5%k5WQ*B z{j?q9sE@9tueH*J4>h0UTQBXvgL?NA=irb(S@TI@6IptoUIa*CeUE~K?n40!P`tba zFeeY4yh2N-w3f8Jg~E%SDebBe!GwBXFvV|H&mj74#mrp79Gf@BWG_GSP=XL%JyDiC zf2$sQS`^%GM=~k5J!IDi2N)19Yh!^eiZK$B_PvpTF|hKj9dvlg!gWT&0IN$L*QX6; zu1C=Qu7$q-J*|#aq2_xH{HST7I73Pph3liP(^yEZ$(uI&pU|gg=y#3!9-7g^=-W4? zh{lRXV({HFMy?rK+l}%WM~X{U$b-451tsrZvUS7g=V=;at4;FJr){&LeOsvBqG>9L zX6Tew?C!;9_FBDYY9mn(OqddjTi-JXS@t#%=Da>Bw1IP9G9Z-9AR0VnSgDjHQ0kSm zV}J~f@9GhfQ(8$L{Gj;mYtuC^ZzGUAx_aed7=-WYlgGS=p`hT(%ZDEIG7Q=w81ibD zHD?4ukN)cq#4u#>AqbypVT#hI7b0-!A3;X9>*!WCd293qR33e>=D>jZj`tJ-&%=45aVsq;#UN(5h}_LHowmZ%G~MH%@r$TD}`2ifO!Z zSOI^dq-fP1dTOJy72sdkILu)oEQdKdrS&c!Z{PE-n~hf5A!J~JFwJ!X8-`|(U5~I5 z7{WtQeK&YM<&)$ApM;Jgs>|b4291y@laSq@QaWwAMmPzZyxJkO9+yf;9|Iw2S2^@a zc&jc#6yxA}+JgvD`X;|?@=nh)hU6ppw6uX@7%V=V@}H%z+o+u8-(v`=d(7D zy|F(FQCpz{8H}19f?-hd9rPi21Nk#30U?pVKpJrQlrxw<`-4e1eah>*@&r!kMX>#L zox;{ij7CC6SP6_eP)?_)3(OT2# z?F+7XUF_bydrKSgc`J$kGU#l%tw73(XWCXD;0b!Qp)D!>axeV~ua%SVK^|?PIpxvB zgSw_Y21fmUQ$BUbE7d%4UkZO}$mbq}PmnTO8J^Yk`XGD6qBuCL9jpcetQnfwc*8N4ieaoBP7aOMWwLHkPV@wdWN9x(B(5@ zG6ZxckNiRE=$F+u^gzniP)FJwDi7h!c7&}buXS>CGM;u%m=^)i@ge4HCDeo9d*}`A z^|fh8{u;CL524PV?>_O7H;EU_^*$&;!Zr#fY~&qz7RemOUblra&n&aF79(79&)XQy z0nG)4ki3$V{}dqPRj0amDc9AL{{!n)x$4rs`tsiy%wN46+>6gmm$ai#;QmmmF?2sE zSmt{Dy${#xv98BIX*+{_7(?>Z_36O9Vs&HDW-)1}U}!Lx>30|?fBk(L>h|X4?IRwk z|G6H-So;T0ye!3J9E7%BW?*5`(LMj=0KE)MJbFKcZ~5N8U#IkYDBsXE$oG`pEf8g8 z-6Q=kJStaO$dG|d8nHG+_!h;GK-P7{%lVXYul|I(Oi=&Mcb}Bdc-s%>St%@wZvWES zhJ_#t;KJw4hZ267Y8em-Qb91Jb@U$#$Htb~>m3L>u+XVd&TxV~E$=-kDG?f3wH)88R z#CyC-@r?i&) zd00vKG|p*vCUQDTXzUoK|HCA@vRdr89EF~C@@d58A_pt_bi)&*&V(Y;R0nBNQ zUDBS+a|m)g&rU!(sDF7v!)jPKQ&zE<<``zXJQQE@GtpZ~T zA`Jhw#ak&yY;8n-`de{(qQwr1`@R#PKR~HGX0t zjRG%=@Wou&TMGRXZN~sD@bIugZm)S!|Ei3`h}{V?M4qC&eiykqaK9|jM9^f|u1bq; z{jh!IP`uF9yOD$#>64d~>8E_lKzWL9Kl@$pdROtZ3BAE9Tl}*mFW}m){2Q@#z{7Gd zS&WMEc1kNe&cTZ9jC73Gqp&*b6`=Ma<7q9xP}*e_HwvphFYorB)EI>rI2O?sisOLh z%dU?Yu~tM6om7kL1)b8mNr+`g480ve3H9NNU;JX(-tgwZ8{Y7S2k!pgeQzq%M~nz_ zWT%y0UhQ~o3*NatV#Hbz*>n=Beqez7cADwNp;lCc zuGd59gOHV%b+E$ID_$E~dsN{vrPAklp0-xl7rp33+e#WSVwG^lfSgK^?>!OR{ELf20ZL`1_fwzx zRH0+7p!61r{5uQbtCw+G9AcDWoG6$VdQ;k2o)&W?Zzz1lD_$`<>#Va1<0z_sR7P=Q z;Ou$w=JlcO5hGRsI!Q(o!O_+3L=>TRfIcrr-b~m!5q5gw#6NuU?=2||%d#k9g}ge& z-mKTCc#0+7J5T->OEt%v%Y!){i+bfNUs?WJJ?5#)0|#D&CTy{A2Uoh%m5NtaM%fV~ zRt0h^0`@8>@>k?JiV*?aY*@~=mnx*?9UV;I-58Q(LS=a+=ZvlDT7dFeP+*YEV<{Eo zV-)mTa;-)b)`Q0s_LHXH)IUM;ra}i4@)Bun3X4rIln%1|G6U_8tlmsJ4eJrwZKkAAdRCy$(25m%Qm);tz;+R?*I3u;7RZ5R2c zQ|F$0ZuxFr;W4%oPdu@#JX6#h;^uXoWfnHaaEutSUc{l0CkmVG*mCVao+6k$2=^P| z-Dn_;LOHyjg(6t+dF+M^5}lLP+@D*u;t z5wDdxgx2qS-}_2vEi7gTKwl_r{X~oZSA!9$KMe7(yk~Fy>qmJgy1my2J?KH@A1T?|4!P$PC1BAX69Mec&`8zGKMmT9vT7p%TUX}t!4_3wym*wEyyM=Z-}K_+_rV-sf^- zcxr4W|3_?Ha11$MLB>jou<*2Q`rItU%L^}s=e}Fup)@=$+Gcqh_jH1Xx$o-aMZJkIA+k2T(c;A~esOu}nS2(q?s&&LmKA6WgYe2Ky9F)nn=3D~)uT*O zUr}9StjxK+m-sWE`OHCQn@8*(kOeS3>+9s6SagCN;oK}x4#;x0IkhmB!cyFMh~PV} z=Xp9QONl#}97T>p>NX(x)}x4qq4-Rf48+uY_h2k|7lvK1ts z_AEf5A02%q3^D+ae3ClM;XNUA;e{7YUiZ4!m8XWh8pmF6!uY!Uh~0t6h(%g*LI#pL zPfGxkakCK*f7#1kwj8>rXdb7tLL0>%0wuC2MCmLb*)R3q%yqQx2gReb4qJeZJ2559 z<;^TQ39m7S=e*I4Zd4vJ@Gl^1g>fHvKi_$83sH;>T0(2h$NIZahnKdOY>P`cZvOnV zr#-DakNeoiKDO*xQ(_@EdhOBGeHpPkK$hYppq7EM5C!oTwUBNW%s++4K5ea-lM-xm z+gU)n1*kkCCoFa{Nr!6%qG0Mj^2j60HK6De_3X3HE}=EAtBjLQUf%6f+3=@EwtH+V znL{h*cM{;E?>wbYJl@paFD3QRfd#HJ&pflxFB)L5Ttm}i9`l%P9zI0Fh@Fkd&k#CK z3r<7v2Ad6@Fb5WRx@%nH8YOJxiFiYp)&bA8nga@HDLZf7&&y)*zUHY3cdbxA{_&45 zPwm8WG8$gqO&MXDvgFmPyt*=hb}^fxTG(QE7>9lP_DvrC@Q0UoGd=Eck1PKJ*5M7F z^zL`Rd!gfHFMHYKdCz;^6DEu?GQ! zq_cRSE_LL18OYD*neX!8LT>M3GB2j6PHNeP5_SuNooA+~Pk!=~C&wOpY*|4^=VtSM z#MVUgl1z{_AloGo*7{<;Z#F^)LJ2T0L;>FT#y6I|s(469G(hS6V`TTN@@9ot>ccgQ zMpwDYRSF}N2}3A~HZ4B!*7CYH4NhK}OEUmGIC{*f9mjm|gCAV#5#E0K)1NNkx^vYQ zmUvy>^xpTr_vGqVzj}!-436?>nAh%z-3M=3Nz_GFq)xhd42J}K4hj86g3$7KLSo@C z0d_#*YFE2j5qxt&${b}i{{t(&PB&3RUW^AE@>F$Md4gCoIO?dQCPy4`L|69^a?k3s zdKdv--pk#1)H~hjPUVe^Jg#Vg7q#H^oaa2J%%`K^!e=R#RK1(c^AXzv)-@cRB|AYU zDTLigA1MO9S>W}omI{$s6+$f3CFu5Ec_(Lp33zDZ*=*79!d~&hqs@cz6r6&nhvNAz zB<3B>hliBD24%Bd#K>4QqMWCka!Lt*c~12(Ca-zTYsv!#wy=~5-TIa^6xC>7eg92wR@eXy=BN@vDX=#|n5$ZOwV0E9V8xZk>Ch-_FewO^kFS?E@eWr|kM65NdfL8Y)(ka-$HYo6&%_`JWc)2m7; zg1PQsxmMwvi~4>efJL-(t-NKJbCE(t4M>+@;(n%;>VH4y|U$V+B*+P0E^=Ik1y z6@`nZ zT_n;-`IJSk@;u`^-tmrd4AWjMC6$+gXZqnF2kYsYa_aCnq0?199mTx%wXa=5Y*@B$ zBep-H8=MpQ@NZgkroKCSY;`IM6ye=yr0od2g`9+`QCf#B%puJac`D(o|CdAH&1cO` z*Af+IJ1OY@o`s>Zn9Imm@pcy48zJBO-uITX)M$0g(pHa@4q*QcyS5o$ycVV)xJKD?<=(Y8zd zEUaV!iC1;3(cUaCrHr|(klDRuk-C#?(|9#11w(h9k#%nfb=kmoN=D&$OT5fA3t$d! zSZy{B*H7Oqws~Nmm-U#RcIPdKjo2L^1NQ#O19>u4B2S&C6~^(lJl%Q~7ATdKRZ38Y zqC=o0=wLX^>j1&7Nt71Rj`;Z=FFbAAWFBHnz}69O`1;qszA(stNzaO{KA_3!9fMJq zn+6XiSdcO&71B5rCCs(j%^2Epa-32=E7y2FD(Hx5AcKs4t&^R!m}gN~O0fzr0iQi! z!YetJa3meA;(lf|B&}Bicg&k9yRjCMTS5LYbgDykHAw z8K{$C@LCy*SUjyT_V%~GeR&s@0~h9`R$<0^>Dx<#w^Mg#iO`Z<9T26Rz^%e zAp$iI7>&H0a_mo`K@zXy1Cgfbx=kC5tby7DJvY z#6{5&D1?L|B`4fT+8D|+1a0WJ(3|(g6ma+n`NO%dIv>pfzt)x=gC}JN` zJl;s`u6@ED#qWb>O{QmQLn@rosHn52zG!s0$e3(hF> z=%=1~YT3#$hsF={Wc#?G;by#tB9Pv$WdQ+*_sV)1l4u#m#5-OWV zJ2YaY8IMMc=)>YDkfC5tPUX;KX}#XH2H_Qws+YGNLOfJ(5xHnyRhS$Lkd)YBoBSt{>l;XkXOzohZcVugF4wMK_+X^0?lJ z5q-qT)w<>`V1lP!Je}j(P}u8;qGtzhcC(w6mDQBrsn9n^9Q{ia zTR=`}F>19%9kF{6XBsD0JJN$RG$HM(pe|mPw-q8gItW9`NU?2&IP9<+!bFD4o~@^R zoQiT9%c9**HdG@PM|5$>!A(`#Rakv>Nj#^==m@5T7fLxq%x)4`ePz(R9G#(Zw9!g3 zte5X2wm+hWLr>lvq_lC#;B%G|)k;?@`w)0qCyjU%dy`hfhU%Wz=1u~`g=gmP9*lPm z*}o^@ZAXkCA9TSEL*IdRO6#UMt%DFIzl$o+EQL)SPFwM`>h|6$$r-R@EJA8-5{ z65Bw|B|Awq@@7Q9IcCd;Tu|mtY3->}+MIKwh|`o&B_3b%;JBBp346VDqAzG^gnM^P z&m7L%A-tu+9Cx=1W~`|BZ(I5hNcc9b{FUd{UZz6*&!=%iSRfp$O;W9m5OXr zc%`W~H+n?QQ!5nMk-Q;+Q?I>O&#f{F&f_{LubthD^xyNk-n=L@wvz0LBlo5m%@I2v zQBW|ir9*L~2WgFk5nAn2p}HU_K#^T1XcU~HIw0_bCp@8eP!E+;+%ynajIy2MZ4;hj z<=Ol7??&J!ew*|AF9~1x!WYV7U3fiWcOp?32T2y9kJ3R(OWC4u3iUlytuV!?qZ0qK#mm|8(FrNM zt5*z1>@GwPdD%R+N~fewEB&xgWIkI9Qw^24?;NrG-jn>0hdiVlJ>)IE@|CYl&N=6t z@?;AOQ7gUgUTL$Fk0>q!^H=ZCa(t8V^3E&sT6}ZR!o%}W8@>^{5A;g(TA$tTw8|Wl z$E1KXdk7TPUZOdyg(w2X<9a64YhYLd+d90d?F;v(8GzjmZ>{hO8dD2=a>f)7DKF#a zbu<)q3$1bV|$1`VVz9I_Dkx5Ek3Iq165#tnkt+v?D4u*(~11Q9xtxLUr$Ai|HEelkdrJ92i;RX+%QjS>xLpugM$(t z;&w>FJAH+8l$8K_jSJ5!1h(h+l&3tUYzeJuZidcj24%a!O0k#6F=$@TiuV?xEJzsx z;WLA0Tt@6(kPA^5hZ%HF`Os$Jv759ylind%`Ss#6?+m8I-ooImhF%XUYtF15(R|t`f0p9hEXAJC!osZ}xdFji1_mmII zFLbLna&xanD&n@UcfIRPUh7)u9GY^U+Qc|m&km4O6hM+M%w$oSGni z()!9*zOo$i6IL!;$5ufGgI8tvOeGj39vAFq+eR}MJTYEVW(yKdlX=SpC3bDv_>9>8 zh=CTNGU{}|m`jJZ;p^jMvU==PlR1?`>~#!1gb0kvc?abPr2pMx1zF-*t%5ph%zK;v z64YgdO@0PKDDG_!P7gV&yIqAA+p*I zH{_p?8AMM9vBZqPcICy0VKC&zl$_8_ulN;#L8r7d+VifILYk+v5J4e?wu(FtODXLu zpbKumc;sje`gN{iS*qtz#=ef6&dC`A6BjC*Fxv7(cub zO}y=GZ!6J-V~tkhO+Oq+anGABtRvuwGM+^qm3C(#a^j!Ek$cZwlM~oONWh@;h6y_r zT6E5&Y(izP2<0)&#Sz$>K?JPzzO!9)8VZ!JdP3xxBP!v z|Bg|3EbM}L3T6R|XLVlI>tsBoLeVI%|Amu(Y$Y`2z16pjha`+vQH726G1ZgseHrE7 zDoFqFTj=8;g|NqBo}-NJi6U(Ou&j=L;-T=!HGTK`Rf|-@Xv*%NRomZ9{Uf$N;%RN2 zin2thU3lDD?h+nT4#y99M~X2^X<2`kUWGg#g*68=hjsA6`<^JQm16>^QDGiWX>o<{ z@yv?=;le^RS%4y(XxpyB8M;Lx;Tex>uRH%tTmPJlqNo(o@lP<2l8_i*Ec96~pva~) zBBc>K15sKh3mIrHO2~hq=v-b_rw9y%qQue=RA|oXf7O_?62xm<;~M3kS_$L4)0gt| z!ta0o`^&$_u%hgrPB{X}qnoEL6VipAX*6v&FhoZkb=2gBH@snqASf|D)=J%9Y)c+6 zfDEK@6Nzl+DZ_~ApeOXm_(ncDr4?q$K#9tYR)M7Ik zd;Qt(uWP_q8ZYH|Xa`<)ia{Ik^>Ow|VWXE)r{5Wh03z}R*L;Y zW{>Hed+xbKkUT8!aXkM$?tu?{U{Pv{>jYIcj^iy-*KQC%^YUw7``X2rB{ZG|JfXzK z$cl3QA+|^Q+#8j4=O9L#gX9RwN*rAGpWt&MN~T5Un}G(DAw(~D!3)aSWD8P+@$9qD zE@5-RIjhM$vsKemPC2E#h0xs2{8+ecVP@X>=bZuyi2nv+7BWVRnS@stUwm;HEAw9S zUt=JR*cpi9GNz)aS|`hvkDJLrkm8ybMd~0(Rx~X_c|6bj)oL`MRHwQT;GZ^IUAE`A zckkZGEpK_tvci1xo8P?r7E(Jvup59Uvy=^A@fYxrQ4_UzSl-%!5IYN1BX%A>np~_#FIbwy4StRhP!=lM?-m8_ebn3M5pr4>oR3^tuyho*(zqv#8R|c*_Hui zCrI(!6j!4fci`WakdW9l+ZP_^d*d75SXPy7A9=t)XuVs3cX;DOnSX~Va=FosZd9TZ z(aaG?98sbbbJ;S8V_3Z7VEpL~UF6g_Q@UiVyV16|k;lbY^;r0|Ae9FMOP%&=JxE~j z$(GQ|U;gs4Xyqg&&n%x%&)j$1bDWfUz2lA!VX(NS5f<}opE>Kz8jlLQvtf)WFJ0`M z;emTaS$JDQAXCxk6$nHc69#)qM_BB*qt~tQrj*rwB;q23ly^4+4;VgH)>97EX8|DB+#7+m$tlWu>@` zsi;Fp>}ep6?is`py90D0&a6uZ?iFQ~WUAA85XBc7Q(6bx9bt3|$jK|hxQceR8}Qkj zrJrIXDXnB4WAVuW3TKlI9!1`5{Mya1+X7@Ga?vSmtb1;*LYY#Bxmo^cvO~{~@Bsnb zO`xoRCkI*111bFW>9m*!Fg)Gl|Jd@d#wK}2>}*6Htp70Ra0#Ua7i93cDyWOFIk*A+ zMXKF`L@_??WxwMc?MrO+y157<_c@XqQq>#^H_m(B}Q&hySYue@-;D`q|UPpU2RlH>^?*v$pTrD zI_(sqxsXTmY5`g=)T3bv%gsBMWue8>Dpr<5%%Z4i%OibT5&C4i%OQVB_-oq>&G=zJ z`Y8kCbHwgNyee5SbtOkZCmEDL7$D8GjbD8g1#-1OO}0}`Hg^3b~1q4K=T7^xAv4>8`>HONnXOP$gZdP3&F zgA7Tl2E}#O*s(l{>sa1vUh|sbi5QJ2AEAzN)`{Y>K2})$pCIL(Y0j3?R)cw|*Q1)# zn#)>%(zh6(5hI2WS&!j|=w$caW8twEyE(DsC1E*0has-*1FL9Iqk7q<3-J^&E+-WL_!cuM? zx`u}i9`&e4mC!ryR#w+mL!yEHzT1cqePmJC;hRL1b{OEWR*=d*tyjEwDYmyq*oxrs z2-Ze=1cXWUp?FQFg!1q^nzW6EcwC7E;)xj-%Ieu$uelM1+EVf=n;b^i>JU9_G>=DY zPef_$I*3GV5qhQ?4r`U5AvhMFycN(nR}WpA0BDy;0x8@eX1*j6i{1H-|+J zWt6UZ)vFe7EF6~K2DC6jUG_OWRL|>XMSLrI-C$JQ5krX5di}5|C!%OBUs&JA*`%XcH&Q1#1=ghp_w zaN^E)zH`Y(DYgm>1{e^pjqyKuL=BA1h!H`pwB8-=b;aZaI`b}*Es3n)QXpwFz{?v*QfGzSR+$+DeL9q=mDP9u zyVv%Qr=EoQBSs8?>~drr7S(53o1Brhc<{7xJB zXVyXq9rf=aCEi!w%~agJp+F~m_OqWYPw{wy$G`mW-s3!~IAX*QBJa>T+<=sfd?MElt6WaT43zU>W z@sf5gu)FC^Z(8Qvwt|NGI${Lmi8%7zDQ%R1;80p#D;c&E&@VAQ9!{`*WnL@v^lwT0 zAED2G{_`czDixQKst>=^?YEV9|Cr44vi`Rb&-%<~KC@gC=36Ke4WJFrM~s+;=x2?? zTY)P7>XJurGRc1e$p7R4_qHP}R#{;dHd7*7L*8iUbdq^7#4s(=N6HvWSLaV1!f{(y zyr``!2S6;d<=*vh0MK1?Fyb2co zEH2rG0&`ZcJ++m_^XK1I@~-L_YInp4h|)TnZ-;@=_u5=I=tL9&bJR{)nG;b2d%Hr{ zbl%DvFX%rY*#GtV7K!!pIu~={tVlx?Ipswm9$uI7ws)S@zVes8^riB@dRap}^dys) zu;tlUMld`~SiYTkI%0D`Rw(Urp7Wd%wb>o94g#Ih+Ujwlh(_P%KKCiY2HRc0qIi_e zf|O%n4s9?>`s?W%iYuIsvQl8@qbV~5wUFe!PF@G&th3Ws&P@xmh1_`M_@ucsW5Dn! zukF#Bj#vvKJ03Lg-#46y@>Ut>PDBxGb1tt!@&97F|2lmj6x{B>1fJ5%(;RAWjyb2T z5~|_>2&*ZfFq+Y#w93nC8sWqkkL}neC3cYen%BH$*1;_R~@kya2908yTlwE za=79ax41>Q*PT7)X$hl!!@Ya=me-x^G*BcS*9j`~1anV&xRloX)Jd#ZIP*@*8wIwY z<&5)}zx?INYhU}?varQlJ2}SV`ZQmKonq)l96Cg4dD<7h_{C+%p?fQ5E2JenCa|7y zH6OFbNl0NQ2;hM(7DiYwvbyV<#Wwq-!deScQB=w&G?t=>@+(hq@rKtmSI)xHh!Lwq zl$MvJw4TKl2}7rmCcZKeTA!44Cnzk%vgN~*>X*eQt8gCgd&V=KQ6~7p4#vu=x%(E7 zZhYe#m!puF7ljq}I$o(Bb6_5LRM-(4366!V)w+0z=V|?uV&QQf7$BhA8Qw$X)vY|D zLlzdD7$`}oY(dGK)u%Zxc7#D*2H*jTEJ#7U$~Q z`;HV?f$graf$bUdSLcv{V(P1qnAi1iu|*}%;tE4}U&-@}6jomR85MTKW& zgeR2$32Sa^LBL{NB9aj!HUqX8?M_hMpi|n+^9bZl5la1_q~@+V?(O~-+E_04%wer0 zQ%;I1BzFE<)FH2f7eW(zu;vpMuSSI(v6;wAAm}DXQ=H9#dqt2FI>t*$I{_jF{c=d( z+}1zAI{D<2C&wLk+~lcGeQNQrp183PXHIM3%C^_7Zgs0}%HZF3nD6_SCafPOZs$m3 z#P$GZL;h-q+G%A!B(A@2N1$D2DJ#!uF1mmJ{xUDMBIl5V{n=xVIi{R8ksR!|{bSYG z6GEQGv6}9|b%!wAJL{~o%EJfh9=+~}jRJ>BzUp+W4JgL=U%Ib|56xiGsALRAP`+9Gd>*lnSnDROc$_UJAcf^QQfE;o>H3t7b zZ4`JbVNvCfuTI4>wf*63?YTbkk&i5kOcd2Y|9bHalHXjIVp>)9?qx66y70ma%S!aV zefuV#`qZb&;#FOC#E4ZP4uQj|9T)7Wg_QskZi?%-bSOY!{J$Gd)p+d9(LulcQ)cr@ z;VF-2fr(<7iwCt5<$LDq9;5TWah3Nw-daEP+3K)!$sQa~F76|KT&Z;2c+VwE7j@{D`V9v`H%9vE;K-qr`@g?>D}kq9YP zcqzsE-uJ$8V#%ox*CGp55f~x*v$ED;&$hNKlGswl>_CzUxV z#q!?<9Q0>oHdAR660kB9M3{;e3Q390X@$Awq#i(P=ZoO!c|_E*QC6_s8|7}X#Od+K;eWFPAJz-JMFa2 z3sZdIwFM)JuAf3_9#cO}1$bJo@nE3bkD_9hMLD0Y`7YG9UF39>Q&Z;M9w^|w&2>cr zhnjCAb{@zc6lHDYu_PDcX)U~DA?Hv)438)tkk|4Zu@p7`5X?17Mv)T+3u7sj>z;+R zIP~NvKe@cBL-gP@6R&6<>qL_UD~nG&H07q4+SV4u%Ss(S;7_h=+k2&i*j|Ee@#_Bf zzkg9)ipxl-E9Ex}+CyKGK8@JksP)okt&<1EzPxN!U=JlIDTSm+LSf3{8s#CN7KVH$ zoId-g6~}kV3GxbY)orejf2$d##28_)cFlvm!O?^AUi0CfdU?^f|G|SE4;Bd7h2^}r z5XKWhKGn0V;)do~O0U1@3?F=#AHC>Kigg~beNoGH-w+?9w1h3*=TL*E6(XB|5=!1w zC+wM85eC<53lvZ)_aI6u%ofTz)s)33|6#kXOE~V`PrRo$S9tK)!V^XJFFpK&FP{3P zFMVlw>D%jH|N5fP=DChN^4`3Ao=2VsikE>2%{A@rWh{KU9t)iBjEmLryi3U97@m#T zIj9vF%IdL;1i>5e34>RzWbcs>Z6+ug0xcLh^ULdd!p6LmLZQ$5i+M}=&^@HMxo)A# zyw)O=v%~ghSuP7x-p*m6%AyxVn(-2cQ?-f>7Y zSwZH(83ZfZ`Z9}u=tGOuYX?aztl5I1i0)~uyMuf4TsJ5YaeuqFjt>iZz8Ak?0 zbRcpvzMDOcBi4t=4tcU@YW3JwBow8MP&i1>`djqL%gPUh(xL?&R)~2mN+VR|Ma*}3 zLW+epd8ffW0_zl&CwVB>kw+d`81acue4;3Ud8jZ~UAB-s>0`@>(%JT*q?t3z!%#3J zJnehl^PUniGX@TLsL!4+V`C0Y$>UAKN59dfpA5vap7pHBbD#U%qKp(#pV9a3cfY&P zDB55Q9PZ%ltyVJ_jF;15_+rJ}mX+-)yyAh?t&G9Ovsru^vGriQBr;{o#{y`Swn$P2 z)LfA;9ZEzI^RGLEdb}jz&HaQ5vjkBdeGz7RYR7M3GS8zf_3%cvh3x%$B+r8c6xS9L zC6p%?uTBh!MLTu#w!&loWXnJKGN+Y1IPYG{1Zd`2&pGFu@_@Y)FX-XXt%6(47RLK; z59X(o`ot4YEdR)hfl=OmvgEpVRNE&O8Cejshpa!YQ*Lb>>MvE7<0lJYv8AIqk)}x^7PV@P|LV zoVMcOuXCO2ls!3fYL5+?8VKdphYysRaWRFF*C`o&U?}{vCPs-8dx&3Ip4n+H{g}tE z5nBftr;Hg{3=UFS!g{FpX=~zyd4!Nh6CzSF;jV}PqF6)7J&EE%l+h_F;Uq)g-~~g4 zIkmEyQ`>v>{H*<8=Rbw3yd=+Pj?3E#KV751fPV~&I)(ETUAPPA_S-+|Vw5}W*YCDWd|{t?>;{V}_Qrw#gH-DV+z zMbRi#9tNPm5!5^qw+IL@CG%-sOYy7#I~+lf{kE;7KE}$5^8Wq%%m0(*B|WqNJhRZ# zYiWeiysbqo{|S#00UE6Z@Nga`uwdm>m$@ZH<}EFFF+3KzEM8Gew1Ixtd`AO-P zA*_(oH4n!#B>03LiX~nD`qwY>QV$h4q2;wT%2-@t2(&FE=H)%HA&f>t1_=BX#tX^Q zKljY%Mcy7M2{9q;%ShLb#t$TB4{HudEiEW8VDcH!u6TR-Vm2Eg)U(YF8^qCMgj`HGk!W z^|4mifWo51Q$*SG)s}jBcZS9`k0gX=6f8uE2Jnnw&>stAcxHv0K}I*EJ$*^a?|jzR z`8S6kO40!^yc{}xc%Q46rs8K zxPI_{=E7EXv*^|5uixg#_FRoeyreBIV-ZpgZ3f-^HvLK!gq9QM|e+pDXYGk zW{56qA?U9uflu3E65}ShralU;586zhMLhZ(UIhI>p8-WOg6;XRsJQ(Hh<_HR5E=ZW>K^-CoebITzUKfuz1aP5l{a7yFQ2hZr!9@IZvaLW__J`hvBY$n&n|hv*QBQeFoN zGOwKl9hZ0x|54k23Lxk_HlgDkc~{#u9yGR4l@7_#~e?EEa}_5vv0OjIZ|l zIa6yTA}Q#URv1ZXS#BqXJa`U=QfYYwi$e$|cwT2pfOrHU>^$0{1iYhd4_hqev%Cx; zG*5O-8&-pDtuR{J5|&cb%!&PrOoA3?Q2at zU`;#UYT7|+THz__P#|r$%GEsl;SXNPTP7SRH687| zui3Y6U(+(GX+2)k3SHO6Ip>_yvAcafBV~;x4!kQO&caRt!F>b^1(oBpI$Vy%GtC^*|Y=Hv<9rY$L`^Q2rq8G~hHHu=sy_uS@) zBaUd!KmYs#cbcYCcNSR^>a_(9Ts<`4B_wp17Yf~Y5#Fn1TCw^*=b`O%@mwv_ig)mv zXEBd;#LxDQbH_Z9`5sGV-<3CZsDig~R$1s5{(w_R=7rwdW7U>-7IyPeysLR@jh4^d z>a|cDO@V&8FU;h%e}PI)QJXdhz88@h4=WQPk7;bowUch3ehb}SxH8hsKQjh zw8Mg!ha}8_fyXp&5{W$G5sxUc06x{Dt-PyCo&KGQI(cu~WHr!RdtQC1Lumb8)Y}B= zP)1pGr+ltuoFHwd-Fyy}^}Egou1Wo}X-f*~JSo>Nk3XV1FUuFXEF!-kx>5%j2`&+@ z5gr*2B?t!)Zu3!!E7YS*4$@nRbx$a`2nevnlmPQE!T^|SQUIZ??+*XxEg1ydq7R12 zZ-thiS^*}ku15hgpn=d^XepFekA*7XHaHLL!31G0L;%!FF%7IOC&wKrvbq2-0DlOC z_UplqK!JPOqfpwTz@{1MGqrH2qxH5W^f!I5AmuxS*Pi!f{8-8+x>7N@JSCL71l5Vzf)KckkZ9 zPkCZ2g8Vk^@EuQrgWkqyp+hC+cjjQA6Nd@}jz`Gc$zx}{9PegTjb}i97&`<^BvhV_ z#W;B>zrzx?kthyB;8|H`ele3LZ^P*_e={iYYJ`*mgrNpjePGZmOgYp~_|5;!b14gh z!x-43HDJ6xMX(2KC0qmn`l8RgoVl|nJM1T;#iEcy8}6wu!d1g>br3d-OBT$Wk+yiI zj5F8r5E7qO(|K9>@q*FPcS26kB+BS8h!t~+h@bN3lVVdyyoew(0#=;?o$_X!U}((p zJ4z)_?)$EeX-Gb0lP~4blsdun8h+@V+0_ zsaw4aMnqG)@@5gvn1ep3i)Yghe2|9$ibr%U5sJ3Zp*&jU5ebBT-`!WIvBDGW;)(m{ z!DnrykLk1T@~TsQeHIC#2VYIcY^|9dag1IlXzb-1LanqSBB$Xz2?hr#ZC0mP^n{2Z zYBLcFMQP7F@4T{7s*}8j6G6O{EgXj|FeVB#1cGAFDU z4EjK6Pe1+i;{6GV!IKym^KAo8aJ1voJ>Mk)%1gSg4}?dZ@(^}A13VyF@dTavE|0eG z(kI~~Ode6R^(UV)gfBuUkFtI<1`&SOB==qO85wfjceJ8OySW#nyfy=4l)T#WT>^FK zOL(AMlnt~)0l~eLmE@6JmtqXmqs`n4uRwk7g{IH}@}NQGt6S|A*PwNXDfcn(kN0gSFdQO|X zcb>K-%2r7EVR6Jj^R!kdp=R!8AxyA>>X}rQ-P19y^RSGHIjX}F6h-I4yfCs4p4NO- zhyv>IusNl`Ad5e|dO|66Qd9~@p$M?Kv2(xj6K075@n{6z$}8oHk{c{mUveJ}l#w?l z3_^Tmc~Ert&M25m>jQ;W&it6tN2s#z>N{o87W#P8v_%Qg$q?|a`h{l-_obqrTqH>l5nlp{=F|eCl_275E(*(+>Ea-$P~cyQU!+ zx)!7@ls21n*ui{CW?oo2(x#NFX?9JY2(AYJ%q7989*aQceiVf=vxeHDJVH#$O%eHtZseI}n z0P^#euAzrgN*I8eSQs$aY5m88kBYd{UOKEJK@T^V- z87LmEZqI;I4g;6DXJBy&eP~sNXVq7V#Y-~=`dSMufzdBzd{=L-FEd8!3!U?zEp6Z} zq@D0N^auIwQy%3cT(09e;~V94U6My4 z5BQy^MSa??mDVSkQg3*ThA1tgue~TOIU*AlAuXPw4UP6@MRTGnN=wJA2rGlfeV|8M zJhNzXs?vH(g3J!jZ-s>@TPHdytn^%iaFN9l;<0AJWP^?IVY*K7JQOX$fN4CO`GG?e zm@mIW*j8gLwopJTyat+bn>XVD&rF%+CkPguC?l^`d#u9DHbGeGw*ej+6i68YL5R>r z`O!NMgv)%I&_uYj<9oaZs7vS#_){yo-}0f?@6cagixPnQ_yEdAdD1`S^jCiLNd!KE zEuT+yDi@{2M^hl}sUu3{S|8d~ueOypzFF|nZ{w#8GGWZqzUz1#Wz1)22z`q{Uce9E zhsu&E3#geUSv9uHV0z_=GM?7r(zJHX$GHFjW7#SH41dp_l@p?nQxLx0N8L+Vhr2y&Z3 zXTN@s59)G|vY}xS)cjCxs4UsRXZ?}i{TMOMVbSoIEN07Ra865UWhThH5GZ)4V58sh zJ1eTJsd*csc@7K^W>RKb6BtC;2r!|wh(+nmODQep*)t{N4pI;#^E>lm*Y#7K%G-9a z{lhBSVzNcVKxBX;kOqQaQw;5c>rq1ae8!L%Jmr15<`c~c-*^Tq!al*!$Y6ZA%*g z?F*Gftz^ddk^^$W;aET6Bsh$0^$j6PYs)8dTIUtee+i{!)h+&r$Kg;aEy8&ef^30C zNE{)BnzmX{eDcl?Jg`pY7%4{)DIuX3I@(@w>d2rvA(U6o2+f5wlu>x>jg8uqC=Cz9 z^YY{(0CQ{Yx<|2CRD65U+n~m~MzFwV`V=9~z4|&~@Vzg*ko$y2yAcGu z@Tp8)cj~SAx=dO3e7Z0HvQUrISGx70=Icg6-_dTH&>|{t8y*1}u-{K^gwL}U1jBE~ z9)-u|zry2#l-38OB}7i%cy<+5&A?Tn7K{i|2Au+$e_9a0JlExS&mj`tn?iXY!2Ycx ze-3rK&p1$ObttD^^@kVvuKX$mf`U;Hb*4=;y9N|UTYgh`-w8!67@;Ksq)u=>2~w^u zTbJ=&`|`)&rT?kJ@4CF}H9yi1h(e>?XPpn~yz13rNqO=}r@oiogbZ%NoM6iXQbiWa|FaWv{XxQ=#4+5Kz{MJZfMjGiBcN^cNVAkS#!J3MVAq5`T5aCDckllh)V3p~C#;c`R0C(Fb}P(j*MeA7 zi!?$M%I09cZW0Kc_Wxzg5zGkL|X z1KVE^TP321^OSZ`7)xdCc32b@9#dL!#e$WGZCi^}9=2_jwYl)Z3or4Y?{oTde^&} zt6lAC<$?G%j43>96|t0&T19MH57M*>T2gEIn^thT2cp&Mx;*kqe!HGLLrEQIK`T1z z)W0TQpY9szv*deSW>!l6p?ea!0^h;!`u9#=BLZ zGUlsJ>Q#ShD4XkC=Q?Hl*MsQg{{8#QOA21}q8D{M-P5-O?TzBCT$i>hcp6s8_KyAp zzVlEPmV~?DTr!UrYY8pGN)mp>Tk%}NxE$)Y>Fs!$Yw`+5>r+WAEgE=22|v~Ev%c=T zb|k;G6aEh+b)a=9_3x=mnugRDy6Q5sQt}VoliUN}p`UlC{IvF6o7R@=>KeKS${GiG zHUq6rmBrK6V5}q@Z;f<`7RXnyhY;75hY1nd?S{}TVVsbt9x#2S81`N%nR|{AI_YGU zI%Qp#4}U18{W6>3LLZ-=+OP`kWERF6sCoq$A7>@Pq>cRcz5cyOQpY^Vvq-)gDKjet zL-&$$KcD@3Fz;Hf_pc=dL-(S%raG-h?#5;#px)GP+GG0Tdtbkn1w(GE$rguNWHW=G z%6SdKo{n!f)B`3Nthyf=Nc+3?(I^T_=4}|3Q>jDR7is% zzkRNvvCT&47M}VvU=%7ypM=OJ_x99;Pga^88GGUrpIEL7e{K0V3ruOPBwM_)y6jC3 z7M@r^XOJxhDet&tm^@NFXA6_}@84gH zf^gZve|7iUs#AS$7N6bA@4C!Tijhctb=f3H-sDN!bs66wzk__Q%lZs*E#KwumrtI2 zAHq=CwIIrpRrK{L&mzba$2Mc8Uh4%u;F;)G)CgUzv{)nDy4X1yUZ-H_-d0Qc!{P~x zESuXetnce9Wwj;5Yhp}}5SpV>b_cvY<>Mh_p4X>6UT-k8e`Z-<9`jkAmf||ZU$@gw zHUEP8{?PUM`%tQp-$Qxo?=W;fsINo)9s0j(q-?)@e%IIgNWN)#2yW(f;M4C2G*Eok zz?6pIt1n8G`ty6yG^f6nWAqQKsk z5K~5lqSU@qY~NWizjGg>RO(&`)e&$V0lZl5A;e;jJbtJ1xu0^bt6w`QpFx2zBXxp& zo(S^%t-g6n1m#S}Szm42&ozIwk0&3G>K?}H=PZT>>7!TEICCoWMz40zgOAQltB*%V zo1_o+T(zffLCQMRpnZ9TTf#hbsZ&|s-BWKCTl}t9pxtAHTu&RysUN@49>EAr>Q`Qp z$353F4(YFZ+Vopl_rY&vwJVS7WJTTb=R4X$gXFvGS?#rV?YnD!qXVsI(Vlz0Ye%2; zOFi;AR3VQ&bg%UhCI^uhd6&Vga_Of$ysU#d36cHwi6>|Rd{73h5(neH{<-HGS#+e< z3k^Ms>-9&at~P@`rZVXM)0)EsD&~PS8b+(ofcZ|KeOEym@LS#xAA)=boiRul?Vg0$ z7!9cdExx-CuAxVH14PKxiQeQfVDkB`4RsI9@Ah zzI;B_uPvYM`*a6`1y;Q=}z3ZX7^qfHt0$&;~(5-9Jtd}xD=2VN+Xx?Kamm4%dZ53TBT%^0E| z-RchyAvCIk;`vOTx;@v8mHH&*CD$c&`z?>8J@ug*@El#}Q+MRhn1D8ojn5dh)TLhK zTvIRJn1A;HFJQ*Zys0V}9t373uO@0gwgWc1P{MyhieuO61{6>Skx$nAiHByIisY4rR zLZh;NhbMmbp?vZxFQ2y6M@fvQd-3e*^PA8qoA%L?`sE4GqAq#x125`+f_C*)yXsZO zeRZZ^X-BI0;JfxxpE^K&=ndpC*7Bj#r?Tocmf9lh;JSAFHlCs!bc3-bN9lv#@>3Ak z&_MCD!2qB`-F4fp$xmTLZ2Ig$01m(crpQj6>e8;f`l4^Hs|VaC&+68P@J9XW)UL?a z`@MWW=qVpCxWY1p71W4~kj`KnCa5r8MJIA!ekqNsBSiX)P|E9?)FY$hOBv;r$)Klm z5w0*2axK5r>sl><(-0c8TO<8|^k3h#;d?*-G@!p0z+hUtP`5qpd(f|E=y(5KjiGz4 z4dtDNep^Fz4PA$!ytBUdG3#E9wbU`IjB%xuoPuMh)<#5Kj9cVTd6-vsz9;_>E}^v0 zzf@N=?Gx&2kn7t8eT4^oSybuQilKI)-*&C^F?cnP6ZvJM`X!>sM~v9%phnS+jmDtTjutb|;BSvg1OeX&y XH-YPbR^CPp00000NkvXXu0mjflOUpS literal 0 Hc-jL100001 diff --git a/examples/shellmath/runTests.sh b/examples/shellmath/runTests.sh new file mode 100644 index 000000000..c9687e5fe --- /dev/null +++ b/examples/shellmath/runTests.sh @@ -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 index 000000000..5804ad2ae --- /dev/null +++ b/examples/shellmath/shellmath.sh @@ -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 index 000000000..d8fc9314d --- /dev/null +++ b/examples/shellmath/slower_e_demo.sh @@ -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 index 000000000..54e3a822d --- /dev/null +++ b/examples/shellmath/testCases.in @@ -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 index 000000000..d1de887bd --- /dev/null +++ b/examples/shellmath/timingData.txt @@ -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 diff --git a/execute_cmd.c b/execute_cmd.c index 425679a20..f86f396ad 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -1,6 +1,6 @@ /* execute_cmd.c -- Execute a COMMAND structure. */ -/* 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. @@ -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; @@ -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,7 +1650,9 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close) default_buffered_input = -1; #endif -#if 0 /* TAG: bash-5.2 */ +#if 0 + /* We can't optimize if one of the commands executed by the subshell sets + an exit trap. */ if (user_subshell && command->type == cm_subshell) optimize_subshell_command (command->value.Subshell->command); #endif @@ -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); } @@ -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 @@ -2726,7 +2765,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) @@ -2998,9 +3037,16 @@ 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) @@ -3018,9 +3064,11 @@ 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; + #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 +3076,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); } @@ -3725,7 +3773,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 +3782,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) { @@ -3769,12 +3817,10 @@ execute_arith_command (arith_command) 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 +3834,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 +3844,6 @@ execute_arith_command (arith_command) expresult = 0; expok = 1; } - FREE (t); if (expok == 0) return (EXECUTION_FAILURE); @@ -3815,8 +3861,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 +3893,62 @@ 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 (varop) + oa = set_expand_once (0, 0); /* no-op for compatibility levels <= 51 */ + result = unary_test (cond->op->word, arg1, varflag) ? EXECUTION_SUCCESS : EXECUTION_FAILURE; + if (varop) + assoc_expand_once = oa; 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) @@ -3946,7 +4013,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) { @@ -4165,6 +4232,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 +4484,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 +4548,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 +4745,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 +5021,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 +5149,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 +5371,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 +5608,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 +5684,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 +5969,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 +6023,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 bbff95e93..ef7c5d121 100644 --- 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. @@ -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) @@ -1148,6 +1149,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 +1161,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 +1204,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 diff --git a/externs.h b/externs.h index 3d7716c6d..20abd84fa 100644 --- 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. @@ -109,6 +109,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 +143,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 +212,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 @@ -440,7 +441,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 +451,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 diff --git a/findcmd.c b/findcmd.c index e235705a3..30e559548 100644 --- 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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -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 @@ -390,7 +390,7 @@ search_for_command (pathname, flags) { /* 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); @@ -399,7 +399,7 @@ search_for_command (pathname, flags) } /* 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) @@ -536,6 +536,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); diff --git a/flags.c b/flags.c index 983f9a507..30f6c13d4 100644 --- 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. diff --git a/general.c b/general.c index 50d52167c..85c5a8b68 100644 --- 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]; diff --git a/general.h b/general.h index 7e4db8e67..8064c50eb 100644 --- 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 diff --git a/hashcmd.c b/hashcmd.c index da3af005c..891f967a5 100644 --- 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. diff --git a/include/chartypes.h b/include/chartypes.h index 098cfb967..0fe5fc1a2 100644 --- a/include/chartypes.h +++ b/include/chartypes.h @@ -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. @@ -23,22 +23,18 @@ #include -/* 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) diff --git a/include/posixdir.h b/include/posixdir.h index af5be8012..b737bd7d1 100644 --- a/include/posixdir.h +++ b/include/posixdir.h @@ -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/include/posixtime.h b/include/posixtime.h index a83e436bb..e70ebec67 100644 --- a/include/posixtime.h +++ b/include/posixtime.h @@ -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. @@ -25,16 +25,10 @@ /* Some systems require this, mostly for the definition of `struct timezone'. For example, Dynix/ptx has that definition in rather than sys/time.h */ -#if defined (TIME_WITH_SYS_TIME) +#if defined (HAVE_SYS_TIME_H) # include -# include -#else -# if defined (HAVE_SYS_TIME_H) -# include -# else -# include -# endif #endif +#include #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_ */ diff --git a/include/shmbchar.h b/include/shmbchar.h index a4f3f2472..27b0024fb 100644 --- a/include/shmbchar.h +++ b/include/shmbchar.h @@ -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 diff --git a/include/stdc.h b/include/stdc.h index 7b9282cc7..38516ae5d 100644 --- a/include/stdc.h +++ b/include/stdc.h @@ -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 index 000000000..277947563 --- /dev/null +++ b/include/timer.h @@ -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 . +*/ + +#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 *); diff --git a/include/typemax.h b/include/typemax.h index 9853d5674..e3b98f472 100644 --- a/include/typemax.h +++ b/include/typemax.h @@ -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) @@ -79,8 +79,18 @@ # 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 c57e81c36..7b439f8c8 100644 --- 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 7c3b6e838..d21165608 100644 --- 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-2021 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; @@ -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)); @@ -2738,6 +2726,7 @@ wait_sigint_cleanup () { queue_sigchld = 0; waiting_for_child = 0; + restore_sigint_handler (); } static void @@ -2936,11 +2925,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; @@ -4536,6 +4521,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 +4693,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 +4722,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 +4782,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 +4856,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 +4868,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 +4906,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 diff --git a/jobs.h b/jobs.h index 43ba8c23b..5c5105cf2 100644 --- a/jobs.h +++ b/jobs.h @@ -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_ */ diff --git a/lib/glob/Makefile.in b/lib/glob/Makefile.in index 314622f13..27e34f9de 100644 --- a/lib/glob/Makefile.in +++ b/lib/glob/Makefile.in @@ -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. diff --git a/lib/glob/glob.c b/lib/glob/glob.c index eb6277f04..1a6515409 100644 --- a/lib/glob/glob.c +++ b/lib/glob/glob.c @@ -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 #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) @@ -895,7 +936,8 @@ glob_vector (pat, dir, flags) nextname = (char *) malloc (D_NAMLEN (dp) + 1); if (nextlink == 0 || nextname == 0) { - FREE (nextlink); + if (firstmalloc) + FREE (nextlink); FREE (nextname); lose = 1; break; @@ -914,7 +956,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 +986,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 +1483,7 @@ only_filename: { if (free_dirname) free (directory_name); + free ((char *) result); return ((char **)&glob_error_return); } } diff --git a/lib/glob/glob.h b/lib/glob/glob.h index ca3a66cf1..47410577c 100644 --- a/lib/glob/glob.h +++ b/lib/glob/glob.h @@ -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)); diff --git a/lib/glob/sm_loop.c b/lib/glob/sm_loop.c index a98c14bd5..247ba28aa 100644 --- a/lib/glob/sm_loop.c +++ b/lib/glob/sm_loop.c @@ -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 . */ +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 diff --git a/lib/glob/smatch.c b/lib/glob/smatch.c index a58456d7e..379c2d2e6 100644 --- a/lib/glob/smatch.c +++ b/lib/glob/smatch.c @@ -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 diff --git a/lib/glob/strmatch.h b/lib/glob/strmatch.h index fa7be7bb2..d6a6b0fb3 100644 --- a/lib/glob/strmatch.h +++ b/lib/glob/strmatch.h @@ -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 diff --git a/lib/intl/VERSION b/lib/intl/VERSION index 130318357..f49e0dd82 100644 --- a/lib/intl/VERSION +++ b/lib/intl/VERSION @@ -1 +1,3 @@ GNU gettext library from gettext-0.12.1 + +This is here only in the case the system doesn't provide it diff --git a/lib/intl/ref-add.sin b/lib/intl/ref-add.sin old mode 100755 new mode 100644 diff --git a/lib/intl/ref-del.sin b/lib/intl/ref-del.sin old mode 100755 new mode 100644 diff --git a/lib/malloc/Makefile.in b/lib/malloc/Makefile.in index 0ef3cfd53..7ec8f64f8 100644 --- a/lib/malloc/Makefile.in +++ b/lib/malloc/Makefile.in @@ -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 $< diff --git a/lib/malloc/malloc.c b/lib/malloc/malloc.c index 92e6efa52..146d7f23e 100644 --- a/lib/malloc/malloc.c +++ b/lib/malloc/malloc.c @@ -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. @@ -47,10 +47,10 @@ */ /* - * 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 @@ -121,8 +121,8 @@ # 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 */ @@ -140,20 +140,14 @@ 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 8 /* 8192 */ +#define LESSCORE_FRC 11 /* 65536 */ -#define LESSCORE_MIN 10 -#define LESSCORE_FRC 13 +/* 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 (); @@ -741,14 +755,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 +764,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 +831,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 +845,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 +896,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 +953,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 +987,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; @@ -1084,6 +1089,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 +1149,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 +1189,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 +1216,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 +1246,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 +1350,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; diff --git a/lib/malloc/mstats.h b/lib/malloc/mstats.h index ce8aaeca7..aa3fa33b4 100644 --- a/lib/malloc/mstats.h +++ b/lib/malloc/mstats.h @@ -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 /* diff --git a/lib/readline/Makefile.in b/lib/readline/Makefile.in index b2358c67a..3b16139d5 100644 --- a/lib/readline/Makefile.in +++ b/lib/readline/Makefile.in @@ -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} $@ diff --git a/lib/readline/bind.c b/lib/readline/bind.c index 76103786a..b8a5deb9f 100644 --- a/lib/readline/bind.c +++ b/lib/readline/bind.c @@ -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-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. @@ -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,19 +1983,19 @@ 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_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; @@ -2548,6 +2634,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 == '"') diff --git a/lib/readline/callback.c b/lib/readline/callback.c index a466cf9b6..cfff65021 100644 --- a/lib/readline/callback.c +++ b/lib/readline/callback.c @@ -147,6 +147,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 (); } @@ -278,7 +286,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]) diff --git a/lib/readline/chardefs.h b/lib/readline/chardefs.h index 3cf1326aa..24a25f1f1 100644 --- a/lib/readline/chardefs.h +++ b/lib/readline/chardefs.h @@ -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 -# endif # include # endif /* HAVE_STRING_H */ # if defined (HAVE_STRINGS_H) @@ -66,22 +63,26 @@ #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 @@ -99,12 +100,12 @@ #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 diff --git a/lib/readline/colors.c b/lib/readline/colors.c index 9e37527ef..dba81a279 100644 --- a/lib/readline/colors.c +++ b/lib/readline/colors.c @@ -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 diff --git a/lib/readline/compat.c b/lib/readline/compat.c index 3ade3629a..fc2a48f4a 100644 --- a/lib/readline/compat.c +++ b/lib/readline/compat.c @@ -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. @@ -30,18 +30,18 @@ #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. */ diff --git a/lib/readline/complete.c b/lib/readline/complete.c index fc5c3adb3..1e4dfa3b4 100644 --- a/lib/readline/complete.c +++ b/lib/readline/complete.c @@ -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 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) @@ -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)) diff --git a/lib/readline/display.c b/lib/readline/display.c index f5d32945c..e38bfce73 100644 --- a/lib/readline/display.c +++ b/lib/readline/display.c @@ -1,6 +1,6 @@ /* display.c -- readline redisplay facility. */ -/* 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. @@ -63,23 +63,23 @@ 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,11 @@ 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 (p != (igstart + 1)) last = r - ret - 1; continue; @@ -498,10 +504,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'; @@ -749,7 +762,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 +996,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 +1171,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++; @@ -1662,7 +1675,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 +1694,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 +1710,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 +1731,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 +1753,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 +1965,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 +2434,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 +2601,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 +3386,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 +3469,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 +3538,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 diff --git a/lib/readline/doc/Makefile b/lib/readline/doc/Makefile index af5ee3e57..2ad833a95 100644 --- a/lib/readline/doc/Makefile +++ b/lib/readline/doc/Makefile @@ -18,7 +18,6 @@ # along with this program. If not, see . # - 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 *.o core + *.fns *.kys *.tps *.vrs *.bt *.bts *.o core *.core distclean: clean $(RM) $(CREATED_DOCS) $(RM) $(INTERMEDIATE_OBJ) - $(RM) Makefile mostlyclean: clean diff --git a/lib/readline/doc/hsuser.texi b/lib/readline/doc/hsuser.texi index b8fedf331..0a81c46e9 100644 --- a/lib/readline/doc/hsuser.texi +++ b/lib/readline/doc/hsuser.texi @@ -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 @@ -250,6 +251,11 @@ 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. +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 diff --git a/lib/readline/doc/rltech.texi b/lib/readline/doc/rltech.texi index bbf57c239..8c4814ecf 100644 --- a/lib/readline/doc/rltech.texi +++ b/lib/readline/doc/rltech.texi @@ -455,6 +455,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 @@ -588,6 +593,10 @@ 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. @end table @end deftypevar @@ -876,6 +885,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. @@ -1063,8 +1081,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 +1170,27 @@ 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 specfied 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 @code{*secs} and @code{*usecs}, respectively. +Returns -1 on error or when there is no timeout set, 0 when the timeout has +expired (leaving @code{*secs} and @code{*usecs} unchanged), and 1 if the +timeout has not expired. If @code{secs} and @code{usecs} are @code{NULL}, +the return value indicates whether the timeout has expired. +@end deftypefun + @node Terminal Management @subsection Terminal Management @@ -1611,7 +1651,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 @@ -2159,9 +2199,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 diff --git a/lib/readline/doc/rluser.texi b/lib/readline/doc/rluser.texi index 26b0ff072..505225b98 100644 --- a/lib/readline/doc/rluser.texi +++ b/lib/readline/doc/rluser.texi @@ -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 @@ -444,6 +445,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 +500,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 @@ -540,6 +545,19 @@ 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 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 @@ -1332,6 +1350,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 @@ -1772,6 +1795,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 diff --git a/lib/readline/doc/version.texi b/lib/readline/doc/version.texi index abb9cb6ba..0d5883fb6 100644 --- a/lib/readline/doc/version.texi +++ b/lib/readline/doc/version.texi @@ -1,10 +1,10 @@ @ignore -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 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 UPDATED 15 November 2021 +@set UPDATED-MONTH November 2021 -@set LASTCHANGE Thu Oct 29 16:49:01 EDT 2020 +@set LASTCHANGE Mon Nov 15 17:05:28 EST 2021 diff --git a/lib/readline/funmap.c b/lib/readline/funmap.c index eca49a3e4..8b1cb4028 100644 --- a/lib/readline/funmap.c +++ b/lib/readline/funmap.c @@ -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 }, diff --git a/lib/readline/histexpand.c b/lib/readline/histexpand.c index b986dba05..8ab68091e 100644 --- a/lib/readline/histexpand.c +++ b/lib/readline/histexpand.c @@ -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'. diff --git a/lib/readline/histfile.c b/lib/readline/histfile.c index f0fa5ce15..edc903ef2 100644 --- a/lib/readline/histfile.c +++ b/lib/readline/histfile.c @@ -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 diff --git a/lib/readline/histlib.h b/lib/readline/histlib.h index 9627b2450..adaf1e50c 100644 --- a/lib/readline/histlib.h +++ b/lib/readline/histlib.h @@ -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 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,12 @@ 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 *); + +/* histfile.c */ +extern void _hs_append_history_line (int, const char *); #endif /* !_HISTLIB_H_ */ diff --git a/lib/readline/history.c b/lib/readline/history.c index 67158b14b..a3c26c6e5 100644 --- a/lib/readline/history.c +++ b/lib/readline/history.c @@ -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); /* **************************************************************** */ /* */ diff --git a/lib/readline/history.h b/lib/readline/history.h index cc3de29a6..fc98eeeaa 100644 --- a/lib/readline/history.h +++ b/lib/readline/history.h @@ -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-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. @@ -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 0x0801 /* History 8.1 */ +#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; diff --git a/lib/readline/histsearch.c b/lib/readline/histsearch.c index 7a426c967..9711b152c 100644 --- a/lib/readline/histsearch.c +++ b/lib/readline/histsearch.c @@ -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 diff --git a/lib/readline/input.c b/lib/readline/input.c index 61b0fde3c..44d148726 100644 --- a/lib/readline/input.c +++ b/lib/readline/input.c @@ -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 #include "posixselect.h" +#include "posixtime.h" #if defined (FIONREAD_IN_SYS_IOCTL) # include @@ -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(¤t_time, 0) != 0) + return -1; + + /* Return 0 when timeout has already expired. */ + /* could use timercmp (&timeout_point, ¤t_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)) diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c index 080ba3cbb..df23f15ab 100644 --- a/lib/readline/isearch.c +++ b/lib/readline/isearch.c @@ -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. */ @@ -276,6 +273,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 +320,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 @@ -690,8 +689,9 @@ 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; + cxt->search_string[cxt->search_string_index] = '\0'; free (paste); break; diff --git a/lib/readline/keymaps.h b/lib/readline/keymaps.h index 1fa853d8c..290381483 100644 --- a/lib/readline/keymaps.h +++ b/lib/readline/keymaps.h @@ -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 } diff --git a/lib/readline/kill.c b/lib/readline/kill.c index 50c3fdead..61b744c96 100644 --- a/lib/readline/kill.c +++ b/lib/readline/kill.c @@ -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--; diff --git a/lib/readline/macro.c b/lib/readline/macro.c index 92cc55c36..231a24bcd 100644 --- a/lib/readline/macro.c +++ b/lib/readline/macro.c @@ -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); diff --git a/lib/readline/mbutil.c b/lib/readline/mbutil.c index dc62b4cc2..47e9100a6 100644 --- a/lib/readline/mbutil.c +++ b/lib/readline/mbutil.c @@ -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 */ diff --git a/lib/readline/misc.c b/lib/readline/misc.c index 3d9a674ca..5670cdac1 100644 --- a/lib/readline/misc.c +++ b/lib/readline/misc.c @@ -1,6 +1,6 @@ /* misc.c -- miscellaneous bindable readline functions. */ -/* Copyright (C) 1987-2019 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. @@ -53,11 +53,8 @@ #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,8 +306,7 @@ _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; } @@ -355,6 +351,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 */ @@ -384,6 +382,14 @@ _rl_free_saved_history_line (void) { 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 +631,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 +643,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 +706,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; diff --git a/lib/readline/nls.c b/lib/readline/nls.c index d2f67e0d3..fd093b6c3 100644 --- a/lib/readline/nls.c +++ b/lib/readline/nls.c @@ -1,6 +1,6 @@ /* nls.c -- skeletal internationalization code. */ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. +/* Copyright (C) 1996-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. @@ -54,7 +54,7 @@ #include "rlshell.h" #include "rlprivate.h" -static int utf8locale PARAMS((char *)); +static int utf8locale (char *); #if !defined (HAVE_SETLOCALE) /* A list of legal values for the LANG or LC_CTYPE environment variables. @@ -78,12 +78,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) diff --git a/lib/readline/parens.c b/lib/readline/parens.c index af4797736..57ce70458 100644 --- a/lib/readline/parens.c +++ b/lib/readline/parens.c @@ -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); diff --git a/lib/readline/posixdir.h b/lib/readline/posixdir.h index af5be8012..b737bd7d1 100644 --- a/lib/readline/posixdir.h +++ b/lib/readline/posixdir.h @@ -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 index 000000000..e70ebec67 --- /dev/null +++ b/lib/readline/posixtime.h @@ -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 . +*/ + +#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 rather than + sys/time.h */ +#if defined (HAVE_SYS_TIME_H) +# include +#endif +#include + +#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_ */ diff --git a/lib/readline/readline.c b/lib/readline/readline.c index e61d188bb..371e1fbc6 100644 --- a/lib/readline/readline.c +++ b/lib/readline/readline.c @@ -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-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. @@ -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); /* **************************************************************** */ /* */ @@ -403,6 +402,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 +431,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 (); @@ -511,6 +516,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 +577,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 @@ -668,11 +687,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) @@ -1143,6 +1157,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) @@ -1282,8 +1299,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 +1549,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--; +} diff --git a/lib/readline/readline.h b/lib/readline/readline.h index 78fa39d02..5f17dfd7b 100644 --- a/lib/readline/readline.h +++ b/lib/readline/readline.h @@ -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-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. @@ -39,7 +39,7 @@ extern "C" { #endif /* Hex-encoded Readline version number. */ -#define RL_READLINE_VERSION 0x0801 /* Readline 8.0 */ +#define RL_READLINE_VERSION 0x0801 /* Readline 8.1 */ #define RL_VERSION_MAJOR 8 #define RL_VERSION_MINOR 1 @@ -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 /* **************************************************************** */ @@ -599,6 +608,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 +700,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 +917,7 @@ 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 #define RL_SETSTATE(x) (rl_readline_state |= (x)) #define RL_UNSETSTATE(x) (rl_readline_state &= ~(x)) @@ -949,7 +961,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 +971,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 } diff --git a/lib/readline/rldefs.h b/lib/readline/rldefs.h index dab1beba1..98577a64b 100644 --- a/lib/readline/rldefs.h +++ b/lib/readline/rldefs.h @@ -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) diff --git a/lib/readline/rlmbutil.h b/lib/readline/rlmbutil.h index 4d3e90706..d9060572e 100644 --- a/lib/readline/rlmbutil.h +++ b/lib/readline/rlmbutil.h @@ -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. @@ -81,6 +81,19 @@ /* 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: * @@ -91,22 +104,22 @@ #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) { diff --git a/lib/readline/rlprivate.h b/lib/readline/rlprivate.h index 23ab2d8ce..bda34119e 100644 --- a/lib/readline/rlprivate.h +++ b/lib/readline/rlprivate.h @@ -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-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. + 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,111 @@ 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); /* 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_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 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); /* 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); /* 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 +448,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 * @@ -602,4 +616,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_ */ diff --git a/lib/readline/rlshell.h b/lib/readline/rlshell.h index 3e17d8bc7..6055b1442 100644 --- a/lib/readline/rlshell.h +++ b/lib/readline/rlshell.h @@ -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. @@ -24,10 +24,10 @@ #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_ */ diff --git a/lib/readline/rltty.c b/lib/readline/rltty.c index d0cd57271..dd1093315 100644 --- a/lib/readline/rltty.c +++ b/lib/readline/rltty.c @@ -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-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. @@ -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,9 @@ rl_deprep_terminal (void) if (terminal_prepped & TPX_BRACKPASTE) { fprintf (rl_outstream, BRACK_PASTE_FINI); - if (_rl_eof_found) + if (_rl_eof_found && (RL_ISSTATE (RL_STATE_TIMEOUT) == 0)) + fprintf (rl_outstream, "\n"); + else if (_rl_echoing_p == 0) fprintf (rl_outstream, "\n"); } diff --git a/lib/readline/rltypedefs.h b/lib/readline/rltypedefs.h index f9f5cd3a5..163654921 100644 --- a/lib/readline/rltypedefs.h +++ b/lib/readline/rltypedefs.h @@ -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 */ diff --git a/lib/readline/search.c b/lib/readline/search.c index 38a29361d..325d51ecf 100644 --- a/lib/readline/search.c +++ b/lib/readline/search.c @@ -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-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. @@ -55,11 +55,6 @@ _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; @@ -72,16 +67,16 @@ 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,12 @@ static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int)); static void make_history_line_current (HIST_ENTRY *entry) { + /* 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_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,9 +101,10 @@ 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. */ if (_rl_saved_line_for_history) - _rl_free_history_entry (_rl_saved_line_for_history); - _rl_saved_line_for_history = (HIST_ENTRY *)NULL; + _rl_free_saved_history_line (); } /* Search the history list for STRING starting at absolute history position @@ -264,11 +266,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); } @@ -524,6 +526,9 @@ rl_history_search_internal (int count, int dir) char *t; rl_maybe_save_line (); + /* This will either be restored from the saved line or set from the + found history line. */ + rl_undo_list = 0; temp = (HIST_ENTRY *)NULL; /* Search COUNT times through the history for a line matching @@ -577,6 +582,11 @@ rl_history_search_internal (int count, int dir) /* Copy the line we found into the current line buffer. */ make_history_line_current (temp); + /* Make sure we set the current history position to the last line found so + we can do things like operate-and-get-next from here. This is similar to + how incremental search behaves. */ + history_set_pos (rl_history_search_pos); /* XXX */ + /* 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 */ diff --git a/lib/readline/shell.c b/lib/readline/shell.c index 7fe2e97c9..36c91484c 100644 --- a/lib/readline/shell.c +++ b/lib/readline/shell.c @@ -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 diff --git a/lib/readline/signals.c b/lib/readline/signals.c index f9174ab8a..9df365e48 100644 --- a/lib/readline/signals.c +++ b/lib/readline/signals.c @@ -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. @@ -48,23 +48,11 @@ #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; diff --git a/lib/readline/terminal.c b/lib/readline/terminal.c index 05415dc42..5b4ef1bd5 100644 --- a/lib/readline/terminal.c +++ b/lib/readline/terminal.c @@ -1,6 +1,6 @@ /* terminal.c -- controlling the terminal with termcap. */ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. +/* Copyright (C) 1996-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. @@ -73,11 +73,11 @@ # include # include -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,6 +177,10 @@ 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 */ @@ -194,7 +198,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 +386,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 +423,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 */ @@ -478,6 +488,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 +551,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; @@ -629,6 +641,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; } diff --git a/lib/readline/text.c b/lib/readline/text.c index 2567dea26..91c3f330d 100644 --- a/lib/readline/text.c +++ b/lib/readline/text.c @@ -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. @@ -59,12 +59,12 @@ #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 (); diff --git a/lib/readline/tilde.h b/lib/readline/tilde.h index e26dd0476..bc8022afc 100644 --- a/lib/readline/tilde.h +++ b/lib/readline/tilde.h @@ -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 @@ -27,19 +27,7 @@ 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 } diff --git a/lib/readline/undo.c b/lib/readline/undo.c index 147999119..e4c457dce 100644 --- a/lib/readline/undo.c +++ b/lib/readline/undo.c @@ -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. */ diff --git a/lib/readline/util.c b/lib/readline/util.c index 1576b55d5..2e986db0a 100644 --- a/lib/readline/util.c +++ b/lib/readline/util.c @@ -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 (); diff --git a/lib/readline/vi_mode.c b/lib/readline/vi_mode.c index 742341e36..3a033bab4 100644 --- a/lib/readline/vi_mode.c +++ b/lib/readline/vi_mode.c @@ -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; } diff --git a/lib/readline/xmalloc.h b/lib/readline/xmalloc.h index f40d7a596..0fb9df9c0 100644 --- a/lib/readline/xmalloc.h +++ b/lib/readline/xmalloc.h @@ -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_ */ diff --git a/lib/sh/Makefile.in b/lib/sh/Makefile.in index 98064de55..cbaf94d23 100644 --- a/lib/sh/Makefile.in +++ b/lib/sh/Makefile.in @@ -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 + utf8.c random.c gettimeofday.c timers.c # The header files for this library. HSOURCES = @@ -108,7 +109,7 @@ OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.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} + utf8.o random.o gettimeofday.o timers.o wcsnwidth.o ${LIBOBJS} SUPPORT = Makefile @@ -197,6 +198,7 @@ strtoul.o: strtoul.c strtoull.o: strtoull.c strtoumax.o: strtoumax.c strtrans.o: strtrans.c +timers.o: timers.c times.o: times.c timeval.o: timeval.c tmpfile.o: tmpfile.c @@ -277,6 +279,7 @@ strtoul.o: ${BUILD_DIR}/config.h strtoull.o: ${BUILD_DIR}/config.h strtoumax.o: ${BUILD_DIR}/config.h strtrans.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 @@ -620,6 +623,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 diff --git a/lib/sh/casemod.c b/lib/sh/casemod.c index bdd96f840..0403f91cf 100644 --- a/lib/sh/casemod.c +++ b/lib/sh/casemod.c @@ -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; diff --git a/lib/sh/fmtullong.c b/lib/sh/fmtullong.c index 97a1dc18c..46eaf509b 100644 --- a/lib/sh/fmtullong.c +++ b/lib/sh/fmtullong.c @@ -20,7 +20,7 @@ #include -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT #define LONG long long #define UNSIGNED_LONG unsigned long long diff --git a/lib/sh/input_avail.c b/lib/sh/input_avail.c index 695165fdc..2ac446165 100644 --- a/lib/sh/input_avail.c +++ b/lib/sh/input_avail.c @@ -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 diff --git a/lib/sh/setlinebuf.c b/lib/sh/setlinebuf.c index 6473ddfcc..67805ed0d 100644 --- a/lib/sh/setlinebuf.c +++ b/lib/sh/setlinebuf.c @@ -48,12 +48,7 @@ sh_setlinebuf (stream) #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 */ setlinebuf (stream); diff --git a/lib/sh/shquote.c b/lib/sh/shquote.c index 680f84ed8..55310ce45 100644 --- a/lib/sh/shquote.c +++ b/lib/sh/shquote.c @@ -311,7 +311,7 @@ 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. */ char * diff --git a/lib/sh/snprintf.c b/lib/sh/snprintf.c index 406a3a507..1f0f4c736 100644 --- a/lib/sh/snprintf.c +++ b/lib/sh/snprintf.c @@ -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); diff --git a/lib/sh/strftime.c b/lib/sh/strftime.c index 08ccb9a34..60bee79f7 100644 --- a/lib/sh/strftime.c +++ b/lib/sh/strftime.c @@ -59,16 +59,13 @@ */ #include +#include + #include #include -#include +#include #include -#if defined(TM_IN_SYS_TIME) -#include -#include -#endif - #include #include diff --git a/lib/sh/strtoimax.c b/lib/sh/strtoimax.c index 676e02ef0..584fa0ba2 100644 --- a/lib/sh/strtoimax.c +++ b/lib/sh/strtoimax.c @@ -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; diff --git a/lib/sh/strtol.c b/lib/sh/strtol.c index 8aa747880..c839a97ca 100644 --- a/lib/sh/strtol.c +++ b/lib/sh/strtol.c @@ -20,7 +20,7 @@ #include -#if !defined (HAVE_STRTOL) +#if !HAVE_STRTOL #include #include diff --git a/lib/sh/strtoll.c b/lib/sh/strtoll.c index f6060eefa..f90300b9f 100644 --- a/lib/sh/strtoll.c +++ b/lib/sh/strtoll.c @@ -20,11 +20,11 @@ #include -#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 */ diff --git a/lib/sh/strtoull.c b/lib/sh/strtoull.c index 02ddebb90..fe6592e5a 100644 --- a/lib/sh/strtoull.c +++ b/lib/sh/strtoull.c @@ -20,7 +20,7 @@ #include -#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 */ diff --git a/lib/sh/strtoumax.c b/lib/sh/strtoumax.c index 0247e57bd..2e26efcf2 100644 --- a/lib/sh/strtoumax.c +++ b/lib/sh/strtoumax.c @@ -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/timers.c b/lib/sh/timers.c new file mode 100644 index 000000000..69b754c97 --- /dev/null +++ b/lib/sh/timers.c @@ -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 . +*/ + +#include "config.h" + +#include "bashtypes.h" +#include "posixtime.h" + +#if defined (HAVE_UNISTD_H) +#include +#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 +#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; +} diff --git a/lib/sh/unicode.c b/lib/sh/unicode.c index d95d1e25f..d781353b6 100644 --- a/lib/sh/unicode.c +++ b/lib/sh/unicode.c @@ -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; } diff --git a/lib/sh/winsize.c b/lib/sh/winsize.c index 861c7c89b..846fcd58a 100644 --- a/lib/sh/winsize.c +++ b/lib/sh/winsize.c @@ -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 } diff --git a/lib/sh/zread.c b/lib/sh/zread.c index 71a06a76d..dafb7f60a 100644 --- a/lib/sh/zread.c +++ b/lib/sh/zread.c @@ -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; diff --git a/lib/termcap/termcap.c b/lib/termcap/termcap.c index ba3dab2c2..87fae05f6 100644 --- a/lib/termcap/termcap.c +++ b/lib/termcap/termcap.c @@ -52,15 +52,18 @@ extern char *realloc (); #else /* not HAVE_CONFIG_H */ -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H #include -#include #else char *getenv (); char *malloc (); char *realloc (); #endif +#ifdef HAVE_STRING_H +#include +#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)) diff --git a/lib/tilde/Makefile.in b/lib/tilde/Makefile.in index c21d3897c..e61c6718d 100644 --- a/lib/tilde/Makefile.in +++ b/lib/tilde/Makefile.in @@ -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) $< diff --git a/lib/tilde/tilde.h b/lib/tilde/tilde.h index e26dd0476..bc8022afc 100644 --- a/lib/tilde/tilde.h +++ b/lib/tilde/tilde.h @@ -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 @@ -27,19 +27,7 @@ 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 } diff --git a/locale.c b/locale.c index 17ccc5856..fabf7b125 100644 --- 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 character class to be a shell break character for the lexical analyzer when the locale changes. */ diff --git a/m4/gettext.m4 b/m4/gettext.m4 index fec380457..8231ce05a 100644 --- a/m4/gettext.m4 +++ b/m4/gettext.m4 @@ -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 , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. +dnl +dnl Modified for bash use by Chet Ramey , 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/threadlib.m4 b/m4/threadlib.m4 index bfc3bac85..60e4197b1 100644 --- a/m4/threadlib.m4 +++ b/m4/threadlib.m4 @@ -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 . 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 diff --git a/make_cmd.c b/make_cmd.c index 2d7ac9609..5c1d5efed 100644 --- a/make_cmd.c +++ b/make_cmd.c @@ -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-2021 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,7 +572,7 @@ 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; /* Quote removal is the only expansion performed on the delimiter @@ -628,17 +625,29 @@ 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++; } if (*line == 0) - continue; + { + free (full_line); + 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); + free (full_line); + full_line = 0; + break; + } len = strlen (line); if (len + document_index >= document_size) @@ -651,11 +660,15 @@ make_here_document (temp, lineno) being an empty string before the call to strlen. */ FASTCOPY (line, document + document_index, len); document_index += len; + + free (full_line); } if (full_line == 0) internal_warning (_("here-document at line %d delimited by end-of-file (wanted `%s')"), lineno, redir_word); + FREE (full_line); + document_done: if (document) document[document_index] = '\0'; diff --git a/nojobs.c b/nojobs.c index f2563ca09..1e05fd7b3 100644 --- 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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/parse.y b/parse.y index f4168c7cd..94195875f 100644 --- 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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -118,7 +118,10 @@ typedef void *alias_t; 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 +147,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 +154,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 +200,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 +353,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 inputunit command pipeline pipeline_command -%type list list0 list1 compound_list simple_list simple_list1 +%type list0 list1 compound_list simple_list simple_list1 %type simple_command shell_command %type for_command select_command case_command group_command %type arith_command %type cond_command %type arith_for_command %type coproc +%type comsub %type function_def function_body if_command elif_clause subshell %type redirection redirection_list %type simple_command_element @@ -389,6 +393,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 +877,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 +986,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 +1116,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; @@ -1169,9 +1188,11 @@ simple_list: simple_list1 gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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; } } @@ -1185,9 +1206,11 @@ simple_list: simple_list1 gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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; } } @@ -1198,9 +1221,11 @@ simple_list: simple_list1 gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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 +1639,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; @@ -1823,8 +1848,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 +1871,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 +1897,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 +1915,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 +1940,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 +1982,6 @@ free_string_list () pushed_string_list = (STRING_SAVER *)NULL; } -#endif /* ALIAS || DPAREN_ARITHMETIC */ - void free_pushed_string_input () { @@ -2046,12 +2071,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) @@ -2116,17 +2136,19 @@ read_a_line (remove_quoted_newline) the secondary prompt. This is used to read the lines of a here document. REMOVE_QUOTED_NEWLINE is non-zero if we should remove newlines quoted with backslashes while reading the line. It is - non-zero unless the delimiter of the here document was quoted. */ + non-zero unless the delimiter of the here document was quoted. + If it is zero, we don't perform $'...' and $"..." expansion because + we treat the lines as if they are between double quotes. */ char * read_secondary_line (remove_quoted_newline) int remove_quoted_newline; { - char *ret; + char *ret, *t; 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)) @@ -2141,7 +2163,23 @@ read_secondary_line (remove_quoted_newline) maybe_add_history (ret); } #endif /* HISTORY */ - return ret; + if (ret == 0) + return ret; + if (remove_quoted_newline == 0) + return (savestring (ret)); + + t = ret; + while (t = strchr (t, '$')) + { + if (t[1] == '\'' || t[1] == '"') + break; + else + t++; + } + if (t == 0) + return (savestring (ret)); + t = expand_string_dollar_quote (ret, 1); + return t; } /* **************************************************************** */ @@ -2362,9 +2400,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 +2546,7 @@ shell_getc (remove_quoted_newline) shell_input_line_size = 0; prompt_string_pointer = ¤t_prompt_string; if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); goto restart_read; } @@ -2605,7 +2640,9 @@ next_alias_char: #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 +2651,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 +2723,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 () { @@ -2788,7 +2878,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 +2888,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 +2988,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 +3053,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); @@ -3300,9 +3402,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); } @@ -3517,6 +3617,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) == '|') @@ -3585,7 +3688,7 @@ parse_matched_pair (qc, open, close, lenp, flags) /* Possible reprompting. */ if (ch == '\n' && SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); /* Don't bother counting parens or doing anything else if in a comment or part of a case statement */ @@ -3610,6 +3713,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if (tflags & LEX_PASSNEXT) /* last char was backslash */ { tflags &= ~LEX_PASSNEXT; + /* XXX - PST_NOEXPAND? */ if (qc != '\'' && ch == '\n') /* double-quoted \ disappears. */ { if (retind > 0) @@ -3722,6 +3826,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0)) { /* Translate $'...' here. */ + /* PST_NOEXPAND */ ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen); free (nestret); @@ -3744,22 +3849,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); + } + 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 +3985,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 +4036,109 @@ 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; + char *ret, *tcmd; + int retlen; + sh_parser_state_t ps; + 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; - - while (count) - { -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; -#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; - } - } - - /* Possible reprompting. */ - if (ch == '\n' && SHOULD_PROMPT ()) - prompt_again (); - - /* 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; - } - - 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 - - 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 \ disappears. */ - { - if (retind > 0) - retind--; /* swallow previously-added backslash */ - continue; - } - - 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; - } - } + save_parser_state (&ps); - /* 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); - } - } + pushed_string_list = (STRING_SAVER *)NULL; + parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND; - /* 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 - } + shell_eof_token = close; - /* 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; - } + saved_global = global_command; /* might not be necessary */ + global_command = (COMMAND *)NULL; - 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);*/ - } + need_here_doc = 0; + esacs_needed_count = expecting_in_token = 0; - /* Add this character. */ - RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64); - ret[retind++] = ch; + current_token = '\n'; /* XXX */ - /* If we just read the ending character, don't bother continuing. */ - if (count == 0) - break; + token_to_read = DOLPAREN; /* let's trick the parser */ - if MBTEST(ch == '\\') /* backslashes */ - tflags |= LEX_PASSNEXT; + r = yyparse (); - 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 (need_here_doc > 0) + { + internal_debug("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s"); + gather_here_documents (); + } - if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0)) - { - /* Translate $'...' here. */ - ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen); - free (nestret); + parsed_command = global_command; - 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 (EOF_Reached) + /* yyparse() has already called yyerror() */ + return (&matched_pair_error); + else if (r != 0) + { + /* parser_error (start_lineno, _("could not parse command substitution")); */ + jump_to_top_level (DISCARD); + } - 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 (current_token != shell_eof_token) + { +INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, shell_eof_token)); + token_to_read = current_token; + return (&matched_pair_error); + } - CHECK_NESTRET_ERROR (); - APPEND_NESTRET (); + restore_parser_state (&ps); - FREE (nestret); - } - if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0) - tflags |= LEX_WASDOL; - else - tflags &= ~LEX_WASDOL; + tcmd = make_command_string (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 +4148,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,26 +4167,28 @@ 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; - /* 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 */ @@ -4503,14 +4196,8 @@ xparse_dolparen (base, string, indp, flags) /* 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 @@ -4524,14 +4211,14 @@ xparse_dolparen (base, string, indp, flags) 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 +4230,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 +4259,72 @@ 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; + + 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 +4341,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 +4367,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 +4502,7 @@ cond_skip_newlines () while ((cond_token = read_token (READ)) == '\n') { if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); } return (cond_token); } @@ -5032,6 +4788,13 @@ 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 @@ -5168,7 +4931,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 +4949,7 @@ read_token_word (character) return -1; if (peek_char == '\'') { + /* PST_NOEXPAND */ ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen); free (ttok); @@ -5193,18 +4961,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, @@ -5315,7 +5092,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 \ pair) unless we are within single quotes or pass_next_character is @@ -5473,8 +5250,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 +5273,7 @@ reserved_word_acceptable (toksym) case UNTIL: case WHILE: case 0: + case DOLPAREN: return 1; default: #if defined (COPROCESS_SUPPORT) @@ -5663,7 +5443,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; @@ -6200,7 +5981,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 +6144,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 +6220,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; } } @@ -6472,7 +6260,7 @@ parse_string_to_word_list (s, flags, whom) { WORD_LIST *wl; int tok, orig_current_token, orig_line_number, orig_input_terminator; - int orig_line_count; + int orig_line_count, orig_parser_state; int old_echo_input, old_expand_aliases, ea; #if defined (HISTORY) int old_remember_on_history, old_history_expansion_inhibited; @@ -6503,7 +6291,11 @@ 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; + parser_state |= PST_COMPASSIGN|PST_REPARSE; + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + } while ((tok = read_token (READ)) != yacc_EOF) { @@ -6546,7 +6338,7 @@ parse_string_to_word_list (s, flags, whom) shell_input_line_terminator = orig_input_terminator; if (flags & 1) - parser_state &= ~(PST_COMPASSIGN|PST_REPARSE); + parser_state = orig_parser_state; if (wl == &parse_string_error) { @@ -6566,12 +6358,14 @@ parse_compound_assignment (retlenp) { WORD_LIST *wl, *rl; int tok, orig_line_number, orig_token_size, orig_last_token, assignok; + int orig_parser_state; char *saved_token, *ret; saved_token = token; orig_token_size = token_buffer_size; orig_line_number = line_number; orig_last_token = last_read_token; + orig_parser_state = parser_state; last_read_token = WORD; /* WORD to allow reserved words here */ @@ -6581,6 +6375,8 @@ parse_compound_assignment (retlenp) assignok = parser_state&PST_ASSIGNOK; /* XXX */ wl = (WORD_LIST *)NULL; /* ( */ + orig_parser_state = parser_state; + parser_state &= ~PST_NOEXPAND; parser_state |= PST_COMPASSIGN; while ((tok = read_token (READ)) != ')') @@ -6588,7 +6384,7 @@ parse_compound_assignment (retlenp) if (tok == '\n') /* Allow newlines in compound assignments */ { if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); continue; } if (tok != WORD && tok != ASSIGNMENT_WORD) @@ -6610,7 +6406,7 @@ parse_compound_assignment (retlenp) token = saved_token; token_buffer_size = orig_token_size; - parser_state &= ~PST_COMPASSIGN; + parser_state = orig_parser_state; if (wl == &parse_string_error) { @@ -6662,6 +6458,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 +6484,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 +6524,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 +6550,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 +6563,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/parser-built b/parser-built index 41bdea08e..9c1959c58 100644 --- a/parser-built +++ b/parser-built @@ -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 . */ + along with this program. If not, see . */ /* 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 328 "/usr/local/src/bash/bash-20220112/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 */ diff --git a/parser.h b/parser.h index 59bddacaf..e3621d6c3 100644 --- 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. @@ -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 { diff --git a/patchlevel.h b/patchlevel.h index 3c226949a..165390c15 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -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_ */ diff --git a/pcomplete.c b/pcomplete.c index fe1a03200..08cd7524c 100644 --- a/pcomplete.c +++ b/pcomplete.c @@ -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. @@ -1296,7 +1296,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 */ diff --git a/pcomplib.c b/pcomplib.c index 075fce737..e8df62ece 100644 --- a/pcomplib.c +++ b/pcomplib.c @@ -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) diff --git a/po/bash.pot b/po/bash.pot index fb895a274..767b0af94 100644 --- a/po/bash.pot +++ b/po/bash.pot @@ -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 \n" "Language-Team: LANGUAGE \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: \n" msgstr "" -#: shell.c:2073 +#: shell.c:2099 #, c-format msgid "General help using GNU software: \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" diff --git a/po/de.gmo b/po/de.gmo index 7a31bc581436aa2ead234c0a866d79a02dbd85dc..b9ebf6df2799323803ce54a9110330567cf8da19 100644 GIT binary patch literal 133915 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 L+3vQg7M1@CS(+`> delta 11302 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 diff --git a/po/de.po b/po/de.po index 64d676fea..eb72a5991 100644 --- 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 2019 -# Nils Naumann , 1996-2019. +# Nils Naumann , 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" +"PO-Revision-Date: 2021-12-29 22:04+0100\n" "Last-Translator: Nils Naumann \n" "Language-Team: German \n" "Language: de\n" @@ -16,7 +17,7 @@ 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" @@ -31,8 +32,7 @@ msgstr "%s: Entferne das Nameref Attribut." #: arrayfunc.c:446 builtins/declare.def:851 #, c-format msgid "%s: cannot convert indexed to associative array" -msgstr "" -"%s: Das indizierte Array kann in kein assoziatives Array umgewandelt werden." +msgstr "%s: Das indizierte Array kann in kein assoziatives Array umgewandelt werden." #: arrayfunc.c:700 #, c-format @@ -47,8 +47,7 @@ msgstr "%s: Das Zuweisen auf einen nicht-numerischen Index ist nicht möglich." #: arrayfunc.c:747 #, 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." +msgstr "%s: %s: Ein Feldindex wird zum Zuweisen eines assoziativen Arrays benötigt." #: bashhist.c:452 #, c-format @@ -57,9 +56,7 @@ msgstr "%s: Kann die Datei %s nicht erzeugen." #: bashline.c:4310 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "" -"bash_execute_unix_command: Kann nicht die Tastenzuordnung für das Kommando " -"finden." +msgstr "bash_execute_unix_command: Kann nicht die Tastenzuordnung für das Kommando finden." #: bashline.c:4459 #, c-format @@ -78,6 +75,7 @@ msgstr "%s: Fehlender Doppelpunkt." #: bashline.c:4555 #, fuzzy, c-format +#| msgid "`%s': cannot unbind" msgid "`%s': cannot unbind in command keymap" msgstr "»%s«: Bindung kann nicht gelöst werden." @@ -145,7 +143,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,12 +160,7 @@ 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" @@ -370,7 +362,7 @@ msgstr "Kann nur innerhalb einer Funktion benutzt werden." #: builtins/declare.def:363 builtins/declare.def:756 #, 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 #, c-format @@ -410,8 +402,7 @@ msgstr "%s: Kann Feldvariablen nicht auf diese Art löschen." #: builtins/declare.def:845 builtins/read.def:815 #, c-format msgid "%s: cannot convert associative to indexed array" -msgstr "" -"%s: Konvertieren von assoziativen in indizierte Arrays ist nicht möglich." +msgstr "%s: Konvertieren von assoziativen in indizierte Arrays ist nicht möglich." #: builtins/enable.def:143 builtins/enable.def:151 msgid "dynamic loading not available" @@ -428,15 +419,14 @@ 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 +#, c-format msgid "%s: dynamic builtin already loaded" -msgstr "%s: Ist nicht dynamisch geladen." +msgstr "%s: Ist bereits geladen." #: builtins/enable.def:392 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "" -"Die Ladefunktion von %s lieferte einen Fehler (%d), daher nicht geladen." +msgstr "Die Ladefunktion von %s lieferte einen Fehler (%d), daher nicht geladen." #: builtins/enable.def:517 #, c-format @@ -551,14 +541,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 "" -"Kein passendes Hilfethema für »%s«. Probieren Sie »help help«, »man -k %s« " -"oder »info %s«." +msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "Kein passendes Hilfethema für »%s«. Probieren Sie »help help«, »man -k %s« oder »info %s«." #: builtins/help.def:224 #, c-format @@ -578,10 +567,8 @@ msgid "" msgstr "" "Diese Shellkommandos sind intern definiert. Geben Sie »help« ein, um diese\n" "Liste zu sehen. Geben Sie »help Name« ein, um die Beschreibung der Funktion\n" -"»Name« zu sehen. Geben Sie »info bash« ein, um die vollständige " -"Dokumentation\n" -"zu sehen. Geben Sie »man -k« oder »info« ein, um detaillierte " -"Beschreibungen\n" +"»Name« zu sehen. Geben Sie »info bash« ein, um die vollständige Dokumentation\n" +"zu sehen. Geben Sie »man -k« oder »info« ein, um detaillierte Beschreibungen\n" "der Shellkommandos zu sehen.\n" "\n" "Ein Stern (*) neben dem Namen kennzeichnet deaktivierte Kommandos.\n" @@ -664,8 +651,7 @@ msgstr "Fehlender Name für die Arrayvariable." #: builtins/mapfile.def:370 msgid "array variable support required" -msgstr "" -"Die Unterstützung für Arrayvariablen ist in dieser Shell nicht vorhanden." +msgstr "Die Unterstützung für Arrayvariablen ist in dieser Shell nicht vorhanden." #: builtins/printf.def:419 #, c-format @@ -737,12 +723,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 "" "Zeigt die Liste der gegenwärtig gespeicherten Verzeichnisse an. Durch\n" @@ -863,14 +847,11 @@ msgstr "Lesefehler: %d: %s" #: builtins/return.def:68 msgid "can only `return' from a function or sourced script" -msgstr "" -"»Return« ist nur aus einer Funktion oder einem mit »source« ausgeführten " -"Skript möglich." +msgstr "»Return« ist nur aus einer Funktion oder einem mit »source« ausgeführten Skript möglich." #: builtins/set.def:869 msgid "cannot simultaneously unset a function and a variable" -msgstr "" -"Gleichzeitiges »unset« einer Funktion und einer Variable ist nicht möglich." +msgstr "Gleichzeitiges »unset« einer Funktion und einer Variable ist nicht möglich." #: builtins/set.def:966 #, c-format @@ -1017,7 +998,7 @@ msgstr "Unbekanntes Kommando" #: error.c:463 msgid "bad command type" -msgstr "" +msgstr "Falscher Kommandotyp" # Programmierfehler #: error.c:464 @@ -1144,8 +1125,7 @@ msgstr "Der Exponent ist kleiner als 0." #: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "" -"Nach einem Präinkrement oder Prädekrement wird ein Bezeichner erwartet." +msgstr "Nach einem Präinkrement oder Prädekrement wird ein Bezeichner erwartet." #: expr.c:1056 msgid "missing `)'" @@ -1169,9 +1149,8 @@ msgid "invalid arithmetic base" msgstr "Ungültige Basis." #: expr.c:1582 -#, fuzzy msgid "invalid integer constant" -msgstr "%s: Ungültige Zeilenanzahlangabe." +msgstr "Ungültige Ganzzahlenkonstante." #: expr.c:1598 msgid "value too great for base" @@ -1306,9 +1285,9 @@ msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: Der Job %d ist gestoppt." #: jobs.c:3564 -#, fuzzy, c-format +#, c-format msgid "%s: no current jobs" -msgstr "%s: Kein solcher Job." +msgstr "%s: Kein aktueller Job." #: jobs.c:3571 #, c-format @@ -1404,9 +1383,8 @@ 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 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 msgid "free: start and end chunk sizes differ" @@ -1418,14 +1396,11 @@ msgstr "realloc: Mit nicht zugewiesenen Argument aufgerufen." #: lib/malloc/malloc.c:1134 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "" -"realloc: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs." +msgstr "realloc: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs." #: lib/malloc/malloc.c:1141 -#, fuzzy 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 msgid "realloc: start and end chunk sizes differ" @@ -1434,22 +1409,17 @@ msgstr "realloc: Beginn und Ende Segmentgrößen sind unterschiedlich.<" #: lib/malloc/table.c:191 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" -msgstr "" -"register_alloc: Speicherzuordnungstabelle ist mit FIND_ALLOC gefüllt?\n" +msgstr "register_alloc: Speicherzuordnungstabelle ist mit FIND_ALLOC gefüllt?\n" #: lib/malloc/table.c:200 #, c-format msgid "register_alloc: %p already in table as allocated?\n" -msgstr "" -"register_alloc: %p ist bereits in der Speicherzuordnungstabelle als belegt " -"gekennzeichnet?\n" +msgstr "register_alloc: %p ist bereits in der Speicherzuordnungstabelle als belegt gekennzeichnet?\n" #: lib/malloc/table.c:253 #, c-format msgid "register_free: %p already in table as free?\n" -msgstr "" -"register_free: %p ist bereits in der Speicherzuordnungstabelle als frei " -"gekennzeichnet?\n" +msgstr "register_free: %p ist bereits in der Speicherzuordnungstabelle als frei gekennzeichnet?\n" #: lib/sh/fmtulong.c:102 msgid "invalid base" @@ -1530,9 +1500,7 @@ msgstr "make_here_document: Falscher Befehlstyp %d." #: make_cmd.c:657 #, 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«)." +msgstr "Das in der Zeile %d beginnende Here-Dokument geht bis zum Dateiende (erwartet wird »%s«)." #: make_cmd.c:756 #, c-format @@ -1541,9 +1509,7 @@ msgstr "" #: parse.y:2393 #, c-format -msgid "" -"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " -"truncated" +msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" msgstr "" #: parse.y:2826 @@ -1717,9 +1683,7 @@ msgstr "%s: Kann fd keiner Variable zuweisen." #: redir.c:649 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" +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 msgid "redirection error: cannot duplicate fd" @@ -1799,16 +1763,12 @@ msgstr "\t-%s oder Option -o\n" #: shell.c:2068 #, 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" +msgstr "Geben Sie »%s -c \"help set\"« ein, um mehr über Shell-Optionen zu erfahren.\n" #: shell.c:2069 #, 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" +msgstr "Geben Sie »%s -c help« ein, um mehr über eingebaute Shellkommandos zu erfahren.\n" #: shell.c:2070 #, c-format @@ -2088,12 +2048,8 @@ msgid "$%s: cannot assign in this way" msgstr "$%s: Kann so nicht zuweisen." #: subst.c:9814 -msgid "" -"future versions of the shell will force evaluation as an arithmetic " -"substitution" -msgstr "" -"Zukünftige Versionen dieser Shell werden das Auswerten arithmetischer " -"Ersetzungen erzwingen." +msgid "future versions of the shell will force evaluation as an arithmetic substitution" +msgstr "Zukünftige Versionen dieser Shell werden das Auswerten arithmetischer Ersetzungen erzwingen." #: subst.c:10367 #, c-format @@ -2138,9 +2094,9 @@ msgid "missing `]'" msgstr "Fehlende »]«" #: test.c:899 -#, fuzzy, c-format +#, c-format msgid "syntax error: `%s' unexpected" -msgstr "Syntax Fehler: unerwartetes `;'." +msgstr "Syntax Fehler: »%s« unerwartet." #: trap.c:220 msgid "invalid signal number" @@ -2158,8 +2114,7 @@ msgstr "run_pending_traps: Ungültiger Wert in trap_list[%d]: %p" #: trap.c:418 #, 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 "" # Programmierfehler @@ -2250,17 +2205,12 @@ 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." +msgstr "Copyright (C) 2020 Free Software Foundation, Inc." #: version.c:47 version2.c:47 -msgid "" -"License GPLv3+: GNU GPL version 3 or later \n" -msgstr "" -"Lizenz GPLv3+: GNU GPL Version 3 oder jünger \n" +msgid "License GPLv3+: GNU GPL version 3 or later \n" +msgstr "Lizenz GPLv3+: GNU GPL Version 3 oder jünger \n" #: version.c:86 version2.c:86 #, c-format @@ -2304,9 +2254,7 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] Name [Name ...]" #: 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 Tastaturtabelle] [-f Dateiname] [-q Name] [-u Name]\n" "\t[-r Tastenfolge] [-x Tastenfolge:Shell Kommando]\n" @@ -2341,15 +2289,13 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] Kommando [Argument ...]" #: builtins.c:78 -#, fuzzy msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" -msgstr "declare [-aAfFgilrntux] [-p] [Name[=Wert] ...]" +msgstr "declare [-aAfFgiIlrntux] [-p] [Name[=Wert] ...]" # #: builtins.c:80 -#, fuzzy msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." -msgstr "typeset [-aAfFgilnrtux] [-p] Name[=Wert] ..." +msgstr "typeset [-aAfFgiIlnrtux] [-p] Name[=Wert] ..." #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2373,15 +2319,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]" @@ -2393,9 +2337,7 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "" -"fc [-e Editor] [-lnr] [Anfang] [Ende] oder fc -s [Muster=Ersetzung] " -"[Kommando]" +msgstr "fc [-e Editor] [-lnr] [Anfang] [Ende] oder fc -s [Muster=Ersetzung] [Kommando]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2414,12 +2356,8 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [Muster ...]" #: builtins.c:123 -msgid "" -"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " -"[arg...]" -msgstr "" -"history [-c] [-d Offset] [n] oder history -anrw [Dateiname] oder history -ps " -"Argument [Argument...]" +msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" +msgstr "history [-c] [-d Offset] [n] oder history -anrw [Dateiname] oder history -ps Argument [Argument...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2430,24 +2368,16 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [-h] [-ar] [Jobbezeichnung ... | pid ...]" #: builtins.c:134 -msgid "" -"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " -"[sigspec]" -msgstr "" -"kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder " -"kill -l [Signalname]" +msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgstr "kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "let Argument [Argument ...]" #: 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 Feld] [-d Begrenzer] [-i Text] [-n Zeichenanzahl] [-N " -"Zeichenanzahl] [-p Prompt] [-t Zeitlimit] [-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 Feld] [-d Begrenzer] [-i Text] [-n Zeichenanzahl] [-N Zeichenanzahl] [-p Prompt] [-t Zeitlimit] [-u fd] [Name ...]" #: builtins.c:140 msgid "return [n]" @@ -2510,9 +2440,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 ...]" @@ -2539,12 +2468,8 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case Wort in [Muster [| Muster]...) Kommandos ;;]... esac" #: builtins.c:194 -msgid "" -"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " -"COMMANDS; ] fi" -msgstr "" -"if Kommandos; then Kommandos; [ elif Kommandos; then Kommandos; ]... [ else " -"Kommandos; ] fi" +msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" +msgstr "if Kommandos; then Kommandos; [ elif Kommandos; then Kommandos; ]... [ else Kommandos; ] fi" #: builtins.c:196 msgid "while COMMANDS; do COMMANDS; done" @@ -2604,45 +2529,28 @@ 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 ...]" +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]" +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] [-F Funktion] [-C Kommando] [-X Filtermuster] [-P Prefix] [-S Suffix] [Wort]" #: builtins.c:239 msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "compopt [-o|+o Option] [-DEI] [Name ...]" #: 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 Begrenzer] [-n Anzahl] [-O Quelle] [-s Anzahl] [-t] [-u fd]\n" " [-C Callback] [-c Menge] [Feldvariable]" #: 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 Begrenzer] [-n Anzahl] [-O Quelle] [-s Anzahl] [-t]\n" " [-u fd] [-C Callback] [-c Menge] [Feldvariable]" @@ -2663,8 +2571,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 "" "Definiert Aliase oder zeigt sie an.\n" @@ -2714,30 +2621,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" @@ -2752,47 +2654,33 @@ msgstr "" " re-read-init-file'.\n" " \n" " Optionen:\n" -" -m Keymap Benutzt KEYMAP as Tastaturbelegung für die " -"Laufzeit\n" -" dieses Kommandos. Gültige Keymapnamen sind: " -"emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" -"move,\n" +" -m Keymap Benutzt KEYMAP as Tastaturbelegung für die Laufzeit\n" +" dieses Kommandos. Gültige Keymapnamen sind: emacs,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" " vi-command und vi-insert.\n" " -l Listet Funktionsnamen auf.\n" " -P Listet Funktionsnamen und Tastenzuordnungen auf.\n" -" -p Listet Funktionsnamen und Tastenzuordnungen so " -"auf,\n" -" dass sie direkt als Eingabe verwendet werden " -"können.\n" -" -S Listet Tastenfolgen und deren Werte auf, die " -"Makros \n" +" -p Listet Funktionsnamen und Tastenzuordnungen so auf,\n" +" dass sie direkt als Eingabe verwendet werden können.\n" +" -S Listet Tastenfolgen und deren Werte auf, die Makros \n" " aufrufen.\n" -" -s Listet Tastenfolgen und deren Werte auf, die " -"Makros \n" -" aufrufen, dass sie als Eingabe wiederverwendet " -"werden\n" +" -s Listet Tastenfolgen und deren Werte auf, die Makros \n" +" aufrufen, dass sie als Eingabe wiederverwendet werden\n" " können.\n" " -V Listet Variablennamen und Werte auf.\n" -" -v Listet Variablennamen und Werte so auf, dass sie " -"als\n" +" -v Listet Variablennamen und Werte so auf, dass sie als\n" " Eingabe verwendet werden können.\n" " -q Funktionsname Sucht die Tastenfolgen, welche die angegebene\n" " Funktion aufrufen.\n" -" -u Funktionsname Entfernt alle der Funktion zugeordneten " -"Tastenfolgen.\n" -" -r Tastenfolge Entfernt die Zuweisungen der angegebeben " -"Tastenfolge.\n" -" -f Dateiname Liest die Tastenzuordnungen aus der angegebenen " -"Datei.\n" -" -x Tastenfolge:Shellkommando\tWeist der Tastenfolge das " -"Shellkommando\n" +" -u Funktionsname Entfernt alle der Funktion zugeordneten Tastenfolgen.\n" +" -r Tastenfolge Entfernt die Zuweisungen der angegebeben Tastenfolge.\n" +" -f Dateiname Liest die Tastenzuordnungen aus der angegebenen Datei.\n" +" -x Tastenfolge:Shellkommando\tWeist der Tastenfolge das Shellkommando\n" " \t\t\t\t\tzu.\n" " -X Listet mit -x erzeugte\n" " Tastenfolgen und deren Werte\n" " auf, die Makros aufrufen, dass\n" -" sie als Eingabe wiederverwendet " -"werden\n" +" sie als Eingabe wiederverwendet werden\n" " können.\n" " \n" " Rückgabewert: \n" @@ -2813,8 +2701,7 @@ msgstr "" "Verlässt for-, while- oder until-Schleifen.\n" "\n" " Break beendet eine »for«-, »while«- oder »until«- Schleife. Wenn »n«\n" -" angegeben ist, werden entsprechend viele geschachtelte Schleifen " -"beendet.\n" +" angegeben ist, werden entsprechend viele geschachtelte Schleifen beendet.\n" "\n" " Rückgabewert:\n" " Der Rückgabewert ist 0, außer »n« ist nicht größer oder gleich 1." @@ -2846,8 +2733,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" @@ -2890,8 +2776,7 @@ msgstr "" " wobei 0 der aktuelle Funktionsaufruf ist.\n" "\n" " Rückgabewert:\n" -" Ist ungleich 0 wenn keine Shellfunktion ausgeführt wird oder das " -"Argument\n" +" Ist ungleich 0 wenn keine Shellfunktion ausgeführt wird oder das Argument\n" " ungültig ist, sonst 0." # cd @@ -2899,22 +2784,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" @@ -2930,13 +2809,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 "" "Wechselt das Arbeitsverzeichnis.\n" @@ -2999,8 +2876,7 @@ msgstr "" "Gibt den Namen des aktuellen Arbeitsverzeichnisses aus.\n" "\n" " Optionen:\n" -" -L Gibt den Inhalt der Variable $PWD aus, wenn sie das " -"aktuelle\n" +" -L Gibt den Inhalt der Variable $PWD aus, wenn sie das aktuelle\n" " Arbeitsverzeichnis enthält.\n" " -P Gibt den physischen Verzeichnispfad aus, ohne symbolische\n" " Links.\n" @@ -3059,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" @@ -3072,8 +2947,7 @@ msgid "" " Exit Status:\n" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -"Führt ein einfaches Kommando aus oder zeigt Informationen über Kommandos " -"an.\n" +"Führt ein einfaches Kommando aus oder zeigt Informationen über Kommandos an.\n" "\n" " Führt das Kommando mit den angegebenen Argumenten aus, ohne\n" " Shell-Funktion nachzuschlagen oder zeigt Informationen über die\n" @@ -3081,21 +2955,18 @@ msgstr "" " werden, wenn eine Shell-Funktion gleichen Namens existiert.\n" "\n" " Optionen:\n" -" -p Es wird ein Standardwert für PATH verwendet, der " -"garantiert,\n" +" -p Es wird ein Standardwert für PATH verwendet, der garantiert,\n" " dass alle Standard-Dienstprogramme gefunden werden.\n" " -v Beschreibung des Kommandos ausgeben.\n" " Ähnlich dem eingebauten Kommando »type«.\n" " -V Eine ausführlichere Beschreibung jedes Kommandos ausgeben.\n" "\n" " Rückgabewert:\n" -" Gibt den Rückgabewert des Kommandos zurück, oder eine Fehlermeldung, " -"wenn\n" +" Gibt den Rückgabewert des Kommandos zurück, oder eine Fehlermeldung, wenn\n" " das Kommando nicht gefunden wird." # declare #: builtins.c:490 -#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3128,8 +2999,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" @@ -3139,8 +3009,7 @@ msgstr "" "Setzt Variablenwerte und deren Attribute.\n" "\n" " Deklariert Variablen und weist ihnen Attribute zu. Wenn keine Namen\n" -" angegeben sind, werden die Attribute und Werte aller Variablen " -"ausgegeben.\n" +" angegeben sind, werden die Attribute und Werte aller Variablen ausgegeben.\n" " \n" " Optionen:\n" " -f Schränkt Aktionen oder Anzeigen auf Funktionsnamen\n" @@ -3149,6 +3018,8 @@ 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 +3027,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" @@ -3220,8 +3090,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" @@ -3245,11 +3114,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" @@ -3369,8 +3236,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" @@ -3387,7 +3253,6 @@ msgstr "" # getopts #: builtins.c:652 -#, fuzzy msgid "" "Parse option arguments.\n" " \n" @@ -3429,7 +3294,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" @@ -3458,8 +3323,7 @@ msgstr "" " keine Fehlermeldungen ausgegeben, auch wenn das erste Zeichen\n" " von OPTSTRING kein Doppelpunkt ist. OPTERR hat den Vorgabewert »1«.\n" "\n" -" Wenn im Aufruf von »getops« die »Argumente« angegeben sind, werden " -"diese\n" +" Wenn im Aufruf von »getops« die »Argumente« angegeben sind, werden diese\n" " verarbeitet. Ansonsten werden die von der Position abhängigen\n" " Parameter ($1, $2, etc.) verarbeitet.\n" "\n" @@ -3474,8 +3338,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" @@ -3483,13 +3346,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 "" "Ersetzt die Shell durch das angegebene Kommando.\n" "\n" @@ -3520,8 +3381,7 @@ msgid "" msgstr "" "Beendet die aktuelle Shell.\n" "\n" -" Beendet die aktuelle Shell mit dem Rückgabewert N. Wenn N nicht " -"angegeben\n" +" Beendet die aktuelle Shell mit dem Rückgabewert N. Wenn N nicht angegeben\n" " ist, wird der Rückgabewert des letzten ausgeführten Kommandos übernommen." # logout @@ -3529,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 "" "Beendet eine Login-Shell.\n" @@ -3544,15 +3403,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" @@ -3566,9 +3423,33 @@ 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 "" +"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 "" @@ -3594,10 +3475,8 @@ 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" @@ -3612,13 +3491,13 @@ 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" " \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" @@ -3635,6 +3514,29 @@ 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 @@ -3655,8 +3557,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 "" "Informationen zu eingebauten Kommandos.\n" "\n" @@ -3678,6 +3579,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" @@ -3706,13 +3608,47 @@ 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 "" +"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 +3672,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 +3712,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 +3751,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 "" @@ -3784,8 +3780,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" @@ -3821,22 +3816,61 @@ 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 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" @@ -3848,8 +3882,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" @@ -3867,12 +3900,55 @@ 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 "" +"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 msgid "" @@ -3885,7 +3961,18 @@ 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." +# set #: builtins.c:1054 msgid "" "Set or unset values of shell options and positional parameters.\n" @@ -3929,8 +4016,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" @@ -3954,8 +4040,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" @@ -3971,6 +4056,90 @@ 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 msgid "" @@ -3984,8 +4153,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" @@ -3999,8 +4167,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" @@ -4107,8 +4274,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" @@ -4129,8 +4295,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" @@ -4175,8 +4340,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" @@ -4194,8 +4358,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" @@ -4204,34 +4367,26 @@ 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 or a signal " -"number.\n" +" Each SIGNAL_SPEC is either a signal name in 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 "" #: builtins.c:1400 @@ -4260,16 +4415,14 @@ 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 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" @@ -4336,23 +4489,19 @@ msgstr "" 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" @@ -4368,14 +4517,12 @@ msgstr "" 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 "" @@ -4460,17 +4607,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" @@ -4517,8 +4659,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" @@ -4553,7 +4694,6 @@ msgstr "" # (( )) #: builtins.c:1726 -#, fuzzy msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4568,21 +4708,17 @@ 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 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" @@ -4603,8 +4739,7 @@ msgstr "" "Erweiterte Vergleiche.\n" " \n" " Der Status 0 oder 1 wird abhängig vom Vergleichsergebnis zurückgegeben.\n" -" Es werden die gleichen Ausdrücke wie in der »test« Funktion " -"unterstützt,\n" +" Es werden die gleichen Ausdrücke wie in der »test« Funktion unterstützt,\n" " die mit folgenden Operatoren verbunden werden können:\n" " \n" " ( AUSDRUCK )\tErgibt den Wert des AUSDRUCKs\n" @@ -4697,8 +4832,7 @@ msgstr "" " Anzahl EOF Zeichen (Ctrl-D) abgewartet, bis die Shell\n" " verlassen wird. Der Vorgabewert ist 10. Ist IGNOREEOF\n" " nicht gesetzt, signalisiert EOF das Ende der Eingabe.\n" -" MACHTYPE Eine Zeichenkette die das aktuell laufende System " -"beschreibt.\n" +" MACHTYPE Eine Zeichenkette die das aktuell laufende System beschreibt.\n" " MAILCHECK\tZeit in Sekunden, nach der nach E-Mails gesehen wird.\n" " MAILPATH\tEine durch Doppelpunkt getrennte Liste von Dateinamen,\n" " die nach E-Mail durchsucht werden.\n" @@ -4947,34 +5081,27 @@ 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 "" "Formatierte Ausgabe der ARGUMENTE.\n" @@ -4983,43 +5110,34 @@ msgstr "" " -v var\tDie formatierte Ausgabe ver Variable var zuweisen statt\n" " \tsie an die Standardausgebe zu senden.\n" "\n" -" Die FORMAT-Zeichenkette kann einfache Zeichen enthalten, die " -"unverändert\n" -" an die Standardausgabe geschickt werden. Escape-Sequenzen werden " -"umgewandelt\n" -" und an die Standardausgabe geschickt sowie Formatanweisungen, welche " -"das \n" +" Die FORMAT-Zeichenkette kann einfache Zeichen enthalten, die unverändert\n" +" an die Standardausgabe geschickt werden. Escape-Sequenzen werden umgewandelt\n" +" und an die Standardausgabe geschickt sowie Formatanweisungen, welche das \n" " nachfolgende ARGUMENT auswerten und ausgeben.\n" "\n" -" Gegenüber der in printf(1) beschriebenen Standardverion werden " -"zusätzliche\n" +" Gegenüber der in printf(1) beschriebenen Standardverion werden zusätzliche\n" " Formatanweisungen ausgewertet:\n" "\n" " %b\tWertet Escape-Sequenzen des zugehörigen Arguments aus.\n" " %q\tBettet das Argument so ein, dass es als Shelleingabe\n" " verwendet werden kann.\n" -" %(fmt)T\tAusgabe der aus FMT entstehende Datum-Zeit Zeichenkette, " -"dass\n" +" %(fmt)T\tAusgabe der aus FMT entstehende Datum-Zeit Zeichenkette, dass\n" " sie als Zeichenkette für strftime(3) verwendet werden kann.\n" "\n" " Die Formatangabe wird wiederverwendet, bis alle Argumente ausgewertet\n" -" sind. Wenn weniger Argumente als Formatangaben vorhanden sind, werden " -"für\n" +" sind. Wenn weniger Argumente als Formatangaben vorhanden sind, werden für\n" " die Argumente Nullwerte bzw. leere Zeichenketten eingesetzt.\n" "\n" " Rücgabewert:\n" -" Gibt Erfolg zurück, außer es wird eine ungültige Option angegeben oder " -"ein\n" +" Gibt Erfolg zurück, außer es wird eine ungültige Option angegeben oder ein\n" " Aus- bzw. Zuweisungsfehler auftritt." #: 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" @@ -5034,10 +5152,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." @@ -5049,8 +5165,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" @@ -5058,8 +5173,7 @@ msgid "" msgstr "" "Zeigt mögliche Komplettierungen.\n" "\n" -" Wird in Shellfunktionen benutzt, um mögliche Komplettierungen " -"anzuzeigen.\n" +" Wird in Shellfunktionen benutzt, um mögliche Komplettierungen anzuzeigen.\n" " Wenn das optionale Wort-Argument angegeben ist, werden Komplettierungen\n" " für dieses Wort erzeugt.\n" " \n" @@ -5070,12 +5184,9 @@ msgstr "" 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" @@ -5102,22 +5213,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" @@ -5130,13 +5236,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 "" diff --git a/po/el.gmo b/po/el.gmo index 97304da9e17ce96948b65c587ad07cd67159658f..a5f653b9e256d45a6ab38598803f9d2582277201 100644 GIT binary patch delta 19721 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 P6{*0hSK=-He69Wm!@bNX delta 12197 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 diff --git a/po/el.po b/po/el.po index ed9fb5b40..cb693196b 100644 --- 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 , 2013, 2016, 2017. +# Lefteris Dimitroulakis , 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" +"PO-Revision-Date: 2021-04-12 10:35+0300\n" "Last-Translator: Lefteris Dimitroulakis \n" "Language-Team: Greek \n" "Language: el\n" @@ -17,32 +17,32 @@ 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 "κακός δείκτης πίνακα" +msgstr "λάθος δείκτης πίνακα" #: 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: αφαίρεση του χαρακτηριστικού nameref " +msgstr "%s: αφαίρεση του χαρακτηριστικού nameref" #: arrayfunc.c:446 builtins/declare.def:851 #, 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 πίνακα " +msgstr "%s: μη έγκυρο κλειδί associative πίνακα" #: arrayfunc.c:702 #, c-format msgid "%s: cannot assign to non-numeric index" -msgstr "%s: αδυναμία εκχώρησης σε μη αριθμητικό δείκτη " +msgstr "%s: αδυναμία εκχώρησης σε μη αριθμητικό δείκτη" #: arrayfunc.c:747 #, c-format @@ -61,7 +61,7 @@ msgstr "bash_execute_unix_command: δεν μπορώ να βρω keymap για #: bashline.c:4459 #, c-format msgid "%s: first non-whitespace character is not `\"'" -msgstr "%s: ο πρώτος μη-λευκό διάστημα χαρακτήρας δεν είναι «\"» " +msgstr "%s: ο πρώτος μη-λευκό διάστημα χαρακτήρας δεν είναι «\"»" #: bashline.c:4488 #, c-format @@ -71,22 +71,22 @@ msgstr "όχι «%c» κλεισήματος σε %s" #: bashline.c:4519 #, c-format msgid "%s: missing colon separator" -msgstr "%s: απουσιάζει διαχωριστής δίστιγμο " +msgstr "%s: απουσιάζει ο διαχωριστής δίστιγμο" #: bashline.c:4555 -#, fuzzy, c-format +#, 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 @@ -96,7 +96,7 @@ msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για #: builtins/alias.def:131 variables.c:1844 #, c-format msgid "`%s': invalid alias name" -msgstr "«%s»: μη έγκυρο ψευδώνημο" +msgstr "«%s»: μη έγκυρο συνώνυμο" #: builtins/bind.def:122 builtins/bind.def:125 msgid "line editing not enabled" @@ -151,6 +151,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 "" +"Επιστρέφει το 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" @@ -211,7 +219,7 @@ msgstr "%s: μη έγκυρο όνομα επιλογής" #: builtins/common.c:230 execute_cmd.c:2373 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" @@ -262,7 +270,7 @@ msgstr "%s: δεν υπάρχει τέτοια εργασία" #: builtins/common.c:292 #, c-format msgid "%s: no job control" -msgstr "%s: όχι έλεγχος εγασιών " +msgstr "%s: όχι έλεγχος εγασιών" #: builtins/common.c:294 msgid "no job control" @@ -271,7 +279,7 @@ msgstr "όχι έλεγχος εργασιών" #: builtins/common.c:304 #, c-format msgid "%s: restricted" -msgstr "%s: περιορισμένο " +msgstr "%s: περιορισμένο" #: builtins/common.c:306 msgid "restricted" @@ -280,7 +288,7 @@ msgstr "περιορισμένο" #: builtins/common.c:314 #, c-format msgid "%s: not a shell builtin" -msgstr "%s: όχι ένα builtin κελύφους " +msgstr "%s: όχι ένα builtin κελύφους" #: builtins/common.c:323 #, c-format @@ -290,7 +298,7 @@ msgstr "σφάλμα εγγραφής: %s" #: builtins/common.c:331 #, c-format msgid "error setting terminal attributes: %s" -msgstr "σφάλμα κατά τον ορισμό των χαρακτηριστικών τερματικού: %s " +msgstr "σφάλμα κατά τον ορισμό των χαρακτηριστικών τερματικού: %s" #: builtins/common.c:333 #, c-format @@ -309,7 +317,7 @@ msgstr "%s: ασαφείς προδιαγραφές εργασίας" #: builtins/common.c:964 msgid "help not available in this version" -msgstr "βοήθεια μη διαθέσιμη σ' αυτήν την έκδοση " +msgstr "βοήθεια μη διαθέσιμη σ' αυτήν την έκδοση" #: builtins/common.c:1008 builtins/set.def:953 variables.c:3839 #, c-format @@ -342,7 +350,7 @@ msgstr "προειδοποίηση: η επιλογή -C ίσως δεν δου #: builtins/complete.def:838 msgid "not currently executing completion function" -msgstr "η λειτουργία συμπλήρωσης δεν εκτελείται επί του παρόντος " +msgstr "η λειτουργία συμπλήρωσης δεν εκτελείται επί του παρόντος" #: builtins/declare.def:134 msgid "can only be used in a function" @@ -351,28 +359,27 @@ msgstr "μπορεί να χρησιμοποιηθεί μόνο μέσα σε σ #: builtins/declare.def:363 builtins/declare.def:756 #, c-format msgid "%s: reference variable cannot be an array" -msgstr "%s: η μεταβλητή αναφοράς δεν μπορεί να είναι πίνακας " +msgstr "%s: η μεταβλητή αναφοράς δεν μπορεί να είναι πίνακας" #: builtins/declare.def:374 variables.c:3385 #, 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 #, c-format msgid "%s: circular name reference" -msgstr "%s: κυκλική αναφορά ονόματος " +msgstr "%s: κυκλική αναφορά ονόματος" #: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773 #, 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» δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία συναρτήσεων" +msgstr "η επιλογή «-f» δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία συναρτήσεων" #: builtins/declare.def:526 execute_cmd.c:5986 #, c-format @@ -387,12 +394,12 @@ msgstr "%s: η σύνθετη εκχώρηση πίνακα απορρίφθηκ #: builtins/declare.def:838 #, c-format msgid "%s: cannot destroy array variables in this way" -msgstr "%s: αδυναμία καταστροφής μεταβλητής πίνακα κατ' αυτόν τον τρόπο " +msgstr "%s: αδυναμία καταστροφής μεταβλητής πίνακα κατ' αυτόν τον τρόπο" #: builtins/declare.def:845 builtins/read.def:815 #, c-format msgid "%s: cannot convert associative to indexed array" -msgstr "%s: αδυναμία μετατροπής associative πίνακα σε indexed πίνακα " +msgstr "%s: αδυναμία μετατροπής associative πίνακα σε indexed πίνακα" #: builtins/enable.def:143 builtins/enable.def:151 msgid "dynamic loading not available" @@ -409,14 +416,14 @@ msgid "cannot find %s in shared object %s: %s" msgstr "αδυναμία εύρεσης %s στο κοινόχρηστο αντικείμενο %s: %s" #: builtins/enable.def:388 -#, fuzzy, c-format +#, c-format msgid "%s: dynamic builtin already loaded" -msgstr "%s: δεν φορτώθηκε δυναμικά" +msgstr "%s: δυναμικό builtin ήδη φορτωμένο" #: builtins/enable.def:392 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "Η συνάρτηση φορτώματος του %s επιστρέφει λάθος (%d): δεν φορτώθηκε " +msgstr "h συνάρτηση φορτώματος του %s επιστρέφει λάθος (%d): δεν φορτώθηκε" #: builtins/enable.def:517 #, c-format @@ -493,7 +500,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 +514,7 @@ msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n" #: builtins/hash.def:91 msgid "hashing disabled" -msgstr "hashing απενεργοποιημένο " +msgstr "hashing απενεργοποιημένο" #: builtins/hash.def:139 #, c-format @@ -530,14 +537,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». Δοκιμάστε «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 #, c-format @@ -558,11 +564,9 @@ msgstr "" "Αυτές οι εντολές ορίζονται εσωτερικά. Δώσε «help» για να δεις την λίστα.\n" "Δώσε «help name» για να δεις περισσότερα για την συνάρτηση «name».\n" "Χρησιμοποίησε «info bash» για να βρεις περισσότερα σχετικά με το κέλυφος.\n" -"Χρησιμοποίησε «man -k» ή «info» για να βρεις περισσότερα για εντολές από την " -"λίστα.\n" +"Χρησιμοποίησε «man -k» ή «info» για να βρεις περισσότερα για εντολές από την λίστα.\n" "\n" -"Αστερίσκος (*) δίπλα στο όνομα σημαίνει ότι η εντολή είναι " -"απενεργοποιημένη.\n" +"Αστερίσκος (*) δίπλα στο όνομα σημαίνει ότι η εντολή είναι απενεργοποιημένη.\n" "\n" #: builtins/history.def:155 @@ -582,7 +586,7 @@ msgstr "%s: μη έγκυρη χρονοσήμανση" #: builtins/history.def:451 #, c-format msgid "%s: history expansion failed" -msgstr "" +msgstr "%s: η ανάπτυξη του ιστορικού σταμάτησε" #: builtins/inlib.def:71 #, c-format @@ -629,16 +633,16 @@ msgstr "%s: μη έγκυρος αριθμός γραμμής" #: builtins/mapfile.def:299 #, c-format msgid "%s: invalid array origin" -msgstr "%s: μη έγκυρη αρχή πίνακα " +msgstr "%s: μη έγκυρη αρχή πίνακα" #: builtins/mapfile.def:316 #, c-format msgid "%s: invalid callback quantum" -msgstr "%s: μη έγκυρο κβάντο του callback " +msgstr "%s: μη έγκυρο κβάντο του callback" #: builtins/mapfile.def:349 msgid "empty array variable name" -msgstr "όνομα μεταβλητής πίνακα κενό " +msgstr "όνομα μεταβλητής πίνακα κενό" #: builtins/mapfile.def:370 msgid "array variable support required" @@ -647,7 +651,7 @@ msgstr "απαιτείται υποστήριξη μεταβλητής πίνα #: builtins/printf.def:419 #, c-format msgid "`%s': missing format character" -msgstr "«%s»: απουσία χαρακτήρα φορμαρίσματος " +msgstr "«%s»: απουσία χαρακτήρα φορμαρίσματος" #: builtins/printf.def:474 #, c-format @@ -714,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 "" @@ -772,7 +774,7 @@ msgstr "" #: builtins/read.def:280 #, c-format msgid "%s: invalid timeout specification" -msgstr "%s: μη έγκυρη προδιαγραφή timeout " +msgstr "%s: μη έγκυρη προδιαγραφή timeout" #: builtins/read.def:755 #, c-format @@ -781,7 +783,7 @@ 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" @@ -808,9 +810,7 @@ msgstr "αριθμός του « shift »" #: builtins/shopt.def:310 msgid "cannot set and unset shell options simultaneously" -msgstr "" -"οι επιλογές κελύφους δεν είναι δυνατόν συγχρόνως να ενεργοποιηθούν και " -"απενεργοποιηθούν" +msgstr "οι επιλογές κελύφους δεν είναι δυνατόν συγχρόνως να ενεργοποιηθούν και απενεργοποιηθούν" #: builtins/shopt.def:428 #, c-format @@ -828,16 +828,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 είναι ψευδώνημο του «%s»\n" +msgstr "%s είναι συνώνυμο του «%s»\n" #: builtins/type.def:256 #, c-format @@ -905,7 +905,7 @@ 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 msgid " line " @@ -946,7 +946,7 @@ msgstr "κακό άλμα" #: error.c:503 #, c-format msgid "%s: unbound variable" -msgstr "%s: μεταβλητή χωρίς σύνδεση " +msgstr "%s: μεταβλητή χωρίς σύνδεση" #: eval.c:242 msgid "\atimed out waiting for input: auto-logout\n" @@ -965,7 +965,7 @@ msgstr "TIMEFORMAT: «%c»: μη έγκυρος χαρακτήρας μορφο #: execute_cmd.c:2362 #, 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 msgid "pipe error" @@ -974,17 +974,17 @@ msgstr "pipe error" #: execute_cmd.c:4793 #, c-format msgid "eval: maximum eval nesting level exceeded (%d)" -msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d) " +msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d)" #: execute_cmd.c:4805 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" -msgstr "%s: μέγιστο επίπεδο φωλιάσματος source ξεπεράστηκε (%d) " +msgstr "%s: μέγιστο επίπεδο φωλιάσματος source ξεπεράστηκε (%d)" #: execute_cmd.c:4913 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" -msgstr "%s: μέγιστο επίπεδο φωλιάσματος συνάρτησης ξεπεράστηκε (%d) " +msgstr "%s: μέγιστο επίπεδο φωλιάσματος συνάρτησης ξεπεράστηκε (%d)" #: execute_cmd.c:5467 #, c-format @@ -1004,7 +1004,7 @@ msgstr "%s: %s" #: execute_cmd.c:5854 #, c-format msgid "%s: %s: bad interpreter" -msgstr "%s: %s: κακός interpreter " +msgstr "%s: %s: κακός interpreter" #: execute_cmd.c:5891 #, c-format @@ -1023,11 +1023,11 @@ 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 msgid "syntax error in expression" @@ -1038,17 +1038,16 @@ msgid "attempted assignment to non-variable" msgstr "απόπειρα ανάθεσης σε μη-μεταβλητή" #: expr.c:530 -#, fuzzy msgid "syntax error in variable assignment" -msgstr "συντακτικό σφάλμα στην έκφραση" +msgstr "συντακτικό σφάλμα στην ανάθεση μεταβλητής" #: expr.c:544 expr.c:911 msgid "division by 0" -msgstr "διαίρεση διά 0" +msgstr "διαίρεση διά του 0" #: expr.c:592 msgid "bug: bad expassign token" -msgstr "bug: κακό σύμβολο για expassign " +msgstr "bug: κακό σύμβολο για expassign" #: expr.c:646 msgid "`:' expected for conditional expression" @@ -1060,7 +1059,7 @@ msgstr "εκθέτης μικρότερος του 0" #: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "αναγνωριστικό αναμενόταν μετά από pre-increment ή pre-decrement " +msgstr "αναγνωριστικό αναμενόταν μετά από pre-increment ή pre-decrement" #: expr.c:1056 msgid "missing `)'" @@ -1084,9 +1083,8 @@ msgid "invalid arithmetic base" msgstr "μη έγκυρη αριθμητική βάση" #: expr.c:1582 -#, fuzzy msgid "invalid integer constant" -msgstr "%s: μη έγκυρος αριθμός γραμμής" +msgstr "μη έγκυρη ακέραιη σταθερά" #: expr.c:1598 msgid "value too great for base" @@ -1109,13 +1107,12 @@ msgstr "αδυναμία επανάταξης nodelay mode για fd %d" #: input.c:266 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "" -"αδυναμία εκχώρησης νέου περιγραφέα αρχείου για είσοδο του bash από fd %d" +msgstr "αδυναμία εκχώρησης νέου περιγραφέα αρχείου για είσοδο του bash από fd %d" #: 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" @@ -1124,12 +1121,12 @@ msgstr "start_pipeline: pgrp pipe" #: jobs.c:906 #, 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 #, 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 #, c-format @@ -1144,7 +1141,7 @@ msgstr "διαγραφή σταματημένης εγασίας %d με ομά #: jobs.c:1511 #, 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 #, c-format @@ -1162,16 +1159,16 @@ msgstr "Done" #: jobs.c:1884 siglist.c:122 msgid "Stopped" -msgstr "σταματημένο" +msgstr "Sταματημένο" #: jobs.c:1888 #, c-format msgid "Stopped(%s)" -msgstr "σταματημένο(%s)" +msgstr "Σταματημένο(%s)" #: jobs.c:1892 msgid "Running" -msgstr "υπό εκτέλεση" +msgstr "Υπό εκτέλεση" #: jobs.c:1909 #, c-format @@ -1218,7 +1215,7 @@ msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: η εργασία %d είναι σταματημένη" #: jobs.c:3564 -#, fuzzy, c-format +#, c-format msgid "%s: no current jobs" msgstr "%s: δεν υπάρχει τέτοια εργασία" @@ -1234,8 +1231,7 @@ msgstr "%s: εργασία %d ήδη στο παρασκήνιο" #: jobs.c:3806 msgid "waitchld: turning on WNOHANG to avoid indefinite block" -msgstr "" -"waitchld: ενεργοποίηση WNOHANG ώστε ν' αποφευχθεί οριστικό μπλοκάρισμα " +msgstr "waitchld: ενεργοποίηση WNOHANG ώστε ν' αποφευχθεί οριστικό μπλοκάρισμα" #: jobs.c:4320 #, c-format @@ -1257,13 +1253,12 @@ msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: αποτυχία getpgrp" #: jobs.c:4447 -#, fuzzy msgid "initialize_job_control: no job control in background" -msgstr "initialize_job_control: setpgid" +msgstr "initialize_job_control: όχι έλεγχος εργασιών στο παρασκήνιο" #: jobs.c:4463 msgid "initialize_job_control: line discipline" -msgstr "" +msgstr "initialize_job_control: line discipline" #: jobs.c:4473 msgid "initialize_job_control: setpgid" @@ -1272,7 +1267,7 @@ msgstr "initialize_job_control: setpgid" #: jobs.c:4494 jobs.c:4503 #, c-format msgid "cannot set terminal process group (%d)" -msgstr "αδυναμία ρύθμισης της ομάδας της διεργασίας του τερματικού (%d) " +msgstr "αδυναμία ρύθμισης της ομάδας της διεργασίας του τερματικού (%d)" #: jobs.c:4508 msgid "no job control in this shell" @@ -1289,6 +1284,8 @@ 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 msgid "unknown" @@ -1296,45 +1293,43 @@ msgstr "άγνωστο" #: lib/malloc/malloc.c:882 msgid "malloc: block on free list clobbered" -msgstr "" +msgstr "malloc: μπλοκ στην ελεύθερη λίστα clobbered" #: lib/malloc/malloc.c:972 msgid "free: called with already freed block argument" -msgstr "free: κλήθηκε με όρισμα ήδη ελευθερωμένο μπλοκ " +msgstr "free: κλήθηκε με όρισμα ήδη ελευθερωμένο μπλοκ" #: lib/malloc/malloc.c:975 msgid "free: called with unallocated block argument" -msgstr "free: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ " +msgstr "free: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ" #: lib/malloc/malloc.c:994 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου " +msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου" #: lib/malloc/malloc.c:1001 -#, fuzzy msgid "free: underflow detected; magic8 corrupted" -msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου " +msgstr "free: εντοπίστηκε αρνητική υπερχείληση, magic8 corrupted" #: lib/malloc/malloc.c:1009 msgid "free: start and end chunk sizes differ" -msgstr "free: τα μεγέθη των κομματιών στην αρχή και το τέλος διαφέρουν " +msgstr "free: τα μεγέθη των κομματιών στην αρχή και το τέλος διαφέρουν" #: lib/malloc/malloc.c:1119 msgid "realloc: called with unallocated block argument" -msgstr "realloc: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ " +msgstr "realloc: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ" #: lib/malloc/malloc.c:1134 msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου" #: lib/malloc/malloc.c:1141 -#, fuzzy msgid "realloc: underflow detected; magic8 corrupted" -msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου" +msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, magic8 αλλειωμένο" #: lib/malloc/malloc.c:1150 msgid "realloc: start and end chunk sizes differ" -msgstr "realloc: μεγέθη κομματιών σ' αρχή και τέλος διαφέρουν " +msgstr "realloc: μεγέθη κομματιών σ' αρχή και τέλος διαφέρουν" #: lib/malloc/table.c:191 #, c-format @@ -1368,7 +1363,7 @@ 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" @@ -1428,8 +1423,7 @@ msgstr "make_here_document: ο τύπος οδηγίας δεν είναι σω #: make_cmd.c:657 #, 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 #, c-format @@ -1438,16 +1432,12 @@ msgstr "make_redirection: η οδηγία της ανακατεύθυνσης « #: 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 (%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 msgid "maximum here-document count exceeded" -msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε " +msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε" #: parse.y:3581 parse.y:3957 parse.y:4556 #, c-format @@ -1465,7 +1455,7 @@ msgstr "syntax error in conditional expression: μη αναμενόμενο σύ #: parse.y:4705 msgid "syntax error in conditional expression" -msgstr "συντακτικό σφάλμα σ' έκφραση υπό συνθήκη " +msgstr "συντακτικό σφάλμα σ' έκφραση υπό συνθήκη" #: parse.y:4783 #, c-format @@ -1479,44 +1469,44 @@ msgstr "αναμενόταν «)»" #: parse.y:4815 #, c-format msgid "unexpected argument `%s' to conditional unary operator" -msgstr "απροσδόκητο όρισμα «%s» στον υπό αίρεση μοναδιαίο τελεστή " +msgstr "απροσδόκητο όρισμα «%s» στον υπό αίρεση μοναδιαίο τελεστή" #: parse.y:4819 msgid "unexpected argument to conditional unary operator" -msgstr "απροσδόκητο όρισμα για τον μοναδιαίο τελεστή " +msgstr "απροσδόκητο όρισμα για τον μοναδιαίο τελεστή" #: parse.y:4865 #, c-format msgid "unexpected token `%s', conditional binary operator expected" -msgstr "απροσδόκητο σύμβολο «%s» βρέθηκε αντί για δυαδικό τελεστή υπό αίρεση " +msgstr "απροσδόκητο σύμβολο «%s» βρέθηκε αντί για δυαδικό τελεστή υπό αίρεση" #: parse.y:4869 msgid "conditional binary operator expected" -msgstr "αναμενόταν δυαδικός τελεστής υπό αίρεση " +msgstr "αναμενόταν δυαδικός τελεστής υπό αίρεση" #: parse.y:4891 #, c-format msgid "unexpected argument `%s' to conditional binary operator" -msgstr "απροσδόκητο όρισμα «%s» για δυαδικό τελεστή υπό αίρεση " +msgstr "απροσδόκητο όρισμα «%s» για δυαδικό τελεστή υπό αίρεση" #: parse.y:4895 msgid "unexpected argument to conditional binary operator" -msgstr "απροσδόκητο όρισμα για δυαδικό τελεστή υπό αίρεση " +msgstr "απροσδόκητο όρισμα για δυαδικό τελεστή υπό αίρεση" #: parse.y:4906 #, c-format msgid "unexpected token `%c' in conditional command" -msgstr "απροσδόκητο σύμβολο «%c» σε εντολή υπό αίρεση " +msgstr "απροσδόκητο σύμβολο «%c» σε εντολή υπό αίρεση" #: parse.y:4909 #, c-format msgid "unexpected token `%s' in conditional command" -msgstr "απροσδόκητο σύμβολο «%s» σε εντολή υπό αίρεση " +msgstr "απροσδόκητο σύμβολο «%s» σε εντολή υπό αίρεση" #: parse.y:4913 #, c-format msgid "unexpected token %d in conditional command" -msgstr "απροσδόκητο σύμβολο %d σε εντολή υπό αίρεση " +msgstr "απροσδόκητο σύμβολο %d σε εντολή υπό αίρεση" #: parse.y:6336 #, c-format @@ -1563,7 +1553,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 @@ -1619,7 +1609,7 @@ msgstr "/dev/(tcp|udp)/host/port δεν υποστηρίζεται χωρίς δ #: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284 msgid "redirection error: cannot duplicate fd" -msgstr "" +msgstr "redirection error: ντουμπλάρισμα fd αδύνατον" #: shell.c:347 msgid "could not find /tmp, please create!" @@ -1631,7 +1621,7 @@ msgstr "/tmp πρέπει να είναι ένα έγκυρο όνομα αρχ #: shell.c:804 msgid "pretty-printing mode ignored in interactive shells" -msgstr "" +msgstr "κατάσταση βελτιωμένης εμφάνισης δεδομένων παρακάμπτεται στο αλληλοεπιδραστικό κέλυφος" #: shell.c:948 #, c-format @@ -1641,16 +1631,16 @@ msgstr "%c%c: μη έγκυρη επιλογή" #: shell.c:1319 #, 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 #, 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 msgid "cannot start debugger; debugging mode disabled" -msgstr "αδυναμία εκκίνησης του debugger, debugging απενεργοποιημένο " +msgstr "αδυναμία εκκίνησης του debugger, debugging απενεργοποιημένο" #: shell.c:1632 #, c-format @@ -1695,16 +1685,12 @@ msgstr "\t-%s ή επιλογή -o\n" #: shell.c:2068 #, 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 #, 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 #, c-format @@ -1719,9 +1705,7 @@ msgstr "σελίδα του bash: \n" #: shell.c:2073 #, c-format msgid "General help using GNU software: \n" -msgstr "" -"Γενική βοήθεια για την χρήση του λογισμικού GNU: \n" +msgstr "Γενική βοήθεια για την χρήση του λογισμικού GNU: \n" #: sig.c:757 #, c-format @@ -1730,7 +1714,7 @@ msgstr "sigprocmask: %d: μη έγκυρη λειτουργία" #: siglist.c:47 msgid "Bogus signal" -msgstr "Ψεύτικο σήματος " +msgstr "Ψεύτικο σήμα" #: siglist.c:50 msgid "Hangup" @@ -1754,11 +1738,11 @@ msgstr "BPT trace/trap" #: siglist.c:74 msgid "ABORT instruction" -msgstr "οδηγία ABORT" +msgstr "Οδηγία ABORT" #: siglist.c:78 msgid "EMT instruction" -msgstr "οδηγία EMT" +msgstr "Οδηγία EMT" #: siglist.c:82 msgid "Floating point exception" @@ -1778,7 +1762,7 @@ msgstr "Σφάλμα κατάτμησης" #: siglist.c:98 msgid "Bad system call" -msgstr "Κακή κλήση συστήματος " +msgstr "Κακή κλήση συστήματος" #: siglist.c:102 msgid "Broken pipe" @@ -1790,7 +1774,7 @@ msgstr "Ρολόι συναγερμού" #: siglist.c:110 msgid "Terminated" -msgstr "τερματισμός" +msgstr "Τερματισμός" #: siglist.c:114 msgid "Urgent IO condition" @@ -1842,7 +1826,7 @@ msgstr "Παράθυρο άλλαξε" #: siglist.c:170 msgid "Record lock" -msgstr "" +msgstr "Κλείδωμα καταγραφής" #: siglist.c:174 msgid "User signal 1" @@ -1850,7 +1834,7 @@ msgstr "Σήμα χρήστη 1" #: siglist.c:178 msgid "User signal 2" -msgstr "Σήμα χρήστη 2 " +msgstr "Σήμα χρήστη 2" #: siglist.c:182 msgid "HFT input data pending" @@ -1874,15 +1858,15 @@ msgstr "προγραμματιστικό σφάλμα" #: siglist.c:202 msgid "HFT monitor mode granted" -msgstr "" +msgstr "Κατάσταση επιτήρησης HFT δόθηκε" #: siglist.c:206 msgid "HFT monitor mode retracted" -msgstr "" +msgstr "Κατάσταση επιτήρησης HFT αναιρέθηκε" #: siglist.c:210 msgid "HFT sound sequence has completed" -msgstr "" +msgstr "Στιγμιότυπο ήχου HFT περατώθηκε." #: siglist.c:214 msgid "Information request" @@ -1901,15 +1885,15 @@ msgstr "κακή αντικατάσταση: όχι «%s» που κλείνει #: subst.c:3281 #, c-format msgid "%s: cannot assign list to array member" -msgstr "%s: αδυναμία εκχώρησης λίστας σε στοιχείο του πίνακα " +msgstr "%s: αδυναμία εκχώρησης λίστας σε στοιχείο του πίνακα" #: subst.c:5910 subst.c:5926 msgid "cannot make pipe for process substitution" -msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση διεργασίας " +msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση διεργασίας" #: subst.c:5985 msgid "cannot make child for process substitution" -msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση διεργασίας " +msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση διεργασίας" #: subst.c:6059 #, c-format @@ -1924,33 +1908,33 @@ msgstr "αδυναμία ανοίγματος επώνυμης σωλήνας %s #: subst.c:6084 #, 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 msgid "command substitution: ignored null byte in input" -msgstr "αντικατάσταση εντολής: null byte αγνοήθηκε στην είσοδο " +msgstr "αντικατάσταση εντολής: null byte αγνοήθηκε στην είσοδο" #: subst.c:6353 msgid "cannot make pipe for command substitution" -msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση εντολής " +msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση εντολής" #: subst.c:6397 msgid "cannot make child for command substitution" -msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση εντολής " +msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση εντολής" #: subst.c:6423 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 #, c-format msgid "%s: invalid variable name for name reference" -msgstr "%s: μη έγκυρο όνομα μεταβλητής ως όνομα αναφοράς " +msgstr "%s: μη έγκυρο όνομα μεταβλητής ως όνομα αναφοράς" #: subst.c:6979 subst.c:6997 subst.c:7169 #, c-format msgid "%s: invalid indirect expansion" -msgstr "%s: μη έγκυρη έμμεση επέκταση " +msgstr "%s: μη έγκυρη έμμεση επέκταση" #: subst.c:7013 subst.c:7177 #, c-format @@ -1958,9 +1942,9 @@ msgid "%s: invalid variable name" msgstr "%s: μη έγκυρο όνομα μεταβλητής" #: subst.c:7256 -#, fuzzy, c-format +#, c-format msgid "%s: parameter not set" -msgstr "%s: παράμετρος κενή ή δεν έχει οριστεί" +msgstr "%s: παράμετρος δεν έχει οριστεί" #: subst.c:7258 #, c-format @@ -1983,12 +1967,8 @@ 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 "" -"μελλοντικές εκδόσεις του κελύφους θα επιβάλουν την αποτίμηση ως μια " -"αριθμητική αντικατάσταση" +msgid "future versions of the shell will force evaluation as an arithmetic substitution" +msgstr "μελλοντικές εκδόσεις του κελύφους θα επιβάλουν την αποτίμηση ως μια αριθμητική αντικατάσταση" #: subst.c:10367 #, c-format @@ -2026,38 +2006,35 @@ msgstr "%s: αναμενόταν δυαδικός τελεστής" #: test.c:756 test.c:759 #, c-format msgid "%s: unary operator expected" -msgstr "%s: αναμενόταν μοναδιαίος τελεστής " +msgstr "%s: αναμενόταν μοναδιαίος τελεστής" #: test.c:881 msgid "missing `]'" msgstr "απούσα «]»" #: test.c:899 -#, fuzzy, c-format +#, c-format msgid "syntax error: `%s' unexpected" -msgstr "συντακτικό σφάλμα: δεν αναμενόταν «;»" +msgstr "συντακτικό σφάλμα: δεν αναμενόταν «%s»" #: trap.c:220 msgid "invalid signal number" msgstr "μη έγκυρος αριθμός σήματος" #: trap.c:325 -#, fuzzy, c-format +#, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d) " +msgstr "trap handler: μέγιστο επίπεδο φωλιάσματος ξεπεράστηκε (%d)" #: trap.c:414 #, 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 #, 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 #, c-format @@ -2081,7 +2058,7 @@ msgstr "make_local_variable: no function context at current scope" #: variables.c:2693 #, c-format msgid "%s: variable may not be assigned value" -msgstr "%s: η μεταβλητή δεν μπορεί να δεχτεί τιμή " +msgstr "%s: η μεταβλητή δεν μπορεί να δεχτεί τιμή" #: variables.c:3475 #, c-format @@ -2132,20 +2109,15 @@ msgstr "%s: %s: μη έγκυρη τιμή για trace file descriptor" #: variables.c:6437 #, 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." +msgstr "Copyright (C) 2020 Free Software Foundation, Inc." #: version.c:47 version2.c:47 -msgid "" -"License GPLv3+: GNU GPL version 3 or later \n" -msgstr "" -"License GPLv3+: GNU GPL έκδοση 3 ή νεώτερη \n" +msgid "License GPLv3+: GNU GPL version 3 or later \n" +msgstr "License GPLv3+: GNU GPL έκδοση 3 ή νεώτερη \n" #: version.c:86 version2.c:86 #, c-format @@ -2189,12 +2161,8 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] name [name ...]" #: 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 keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function ή readline-command]" #: builtins.c:56 msgid "break [n]" @@ -2225,12 +2193,10 @@ msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] command [arg ...]" #: builtins.c:78 -#, fuzzy msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" msgstr "declare [-aAfFgilnrtux] [-p] [name[=value] ...]" #: builtins.c:80 -#, fuzzy msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." msgstr "typeset [-aAfFgilnrtux] [-p] name[=value] ..." @@ -2255,12 +2221,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 ...]" @@ -2293,12 +2257,8 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [pattern ...]" #: builtins.c:123 -msgid "" -"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " -"[arg...]" -msgstr "" -"history [-c] [-d offset] [n] ή history -anrw [filename] ή 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] ή history -anrw [filename] ή history -ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2309,24 +2269,16 @@ msgid "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 ... or kill -l " -"[sigspec]" +msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgstr "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or 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 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 array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 msgid "return [n]" @@ -2389,7 +2341,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 ...]" @@ -2418,12 +2369,8 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" #: builtins.c:194 -msgid "" -"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " -"COMMANDS; ] fi" -msgstr "" -"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " -"COMMANDS; ] fi" +msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" +msgstr "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" #: builtins.c:196 msgid "while COMMANDS; do COMMANDS; done" @@ -2482,46 +2429,24 @@ 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 " -"suffix] [name ...]" -msgstr "" -"complete [-abcdefgjksuv] [-pr] [-DE] [-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] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-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]" -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 option] [-A action] [-G globpat] [-W wordlist] [-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 ...]" #: 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 delim] [-n count] [-O origin] [-s count] [-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 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 [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" #: builtins.c:256 msgid "" @@ -2538,8 +2463,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 "" @@ -2552,12 +2476,12 @@ msgid "" " \n" " Return success unless a NAME is not an existing alias." msgstr "" -"Αφαίρεση κάθε ΟΝΟΜΑτος από τη λίστα των καθορισμένων ψευδωνύμων.\n" +"Αφαίρεση κάθε ΟΝΟΜΑτος από τη λίστα των καθορισμένων συνωνύμων.\n" " \n" " Επιλογές:\n" -" -a\tαφαίρεση όλων των ψευδωνύμων.\n" +" -a\tαφαίρεση όλων των συνωνύμων.\n" " \n" -" Επιστρέφει επιτυχία εκτός αν το ΟΝΟΜΑ δεν είναι υπαρκτό ψευδώνυμο." +" Επιστρέφει επιτυχία εκτός αν το ΟΝΟΜΑ δεν είναι υπαρκτό συνώνυμο." #: builtins.c:291 msgid "" @@ -2571,30 +2495,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" @@ -2636,8 +2555,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" @@ -2664,22 +2582,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" @@ -2695,13 +2607,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 "" @@ -2778,8 +2688,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" @@ -2825,8 +2734,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" @@ -2860,12 +2768,10 @@ msgid "" msgstr "" #: 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" @@ -2889,11 +2795,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" @@ -2901,8 +2805,7 @@ msgid "" msgstr "" "Γράφει ορίσματα στη κανονική έξοδο.\n" " \n" -" Εμφανίζει τα ARG, χωρισμένα από χαρακτήρες απλού διαστήματος " -"ακολουθούμενα από\n" +" Εμφανίζει τα ARG, χωρισμένα από χαρακτήρες απλού διαστήματος ακολουθούμενα από\n" " νέα γραμμή, στη τυπική έξοδο.\n" " \n" " Έπιλογές:\n" @@ -2911,7 +2814,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 +2831,7 @@ msgstr "" " \t\tμπορεί να είναι ένα ή δύο εξαδικά ψηφία\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφει επιτυχία εκτός αν συμβεί λάθος εγγραφής. " +" Επιστρέφει επιτυχία εκτός αν συμβεί λάθος εγγραφής." #: builtins.c:597 msgid "" @@ -2950,7 +2853,7 @@ msgstr "" " -n\tδεν επισυνάπτεις μια νέα γραμμή\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφει επιτυχία εκτός αν συμβεί σφάλμα. " +" Επιστρέφει επιτυχία εκτός αν συμβεί σφάλμα." #: builtins.c:612 msgid "" @@ -2983,8 +2886,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" @@ -2992,13 +2894,11 @@ msgid "" msgstr "" "Εκτελεί ορίσματα σαν να είναι εντολή κελύφους.\n" " \n" -" Συνδιάζει ARGs σε μια μοναδική συμβολοσειρά, χρησιμοποιεί το αποτέλεσμα " -"ως είσοδο στο κέλυφος,\n" +" Συνδιάζει ARGs σε μια μοναδική συμβολοσειρά, χρησιμοποιεί το αποτέλεσμα ως είσοδο στο κέλυφος,\n" " και εκτελεί τις εντολές που προκύπτουν.\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφει τον ίδιο κωδικό εξόδου με την εντολή ή επιτυχία αν ή εντολή " -"είναι κενή. " +" Επιστρέφει τον ίδιο κωδικό εξόδου με την εντολή ή επιτυχία αν ή εντολή είναι κενή." #: builtins.c:652 msgid "" @@ -3046,8 +2946,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" @@ -3055,13 +2954,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 "" #: builtins.c:715 @@ -3073,37 +2970,32 @@ msgid "" msgstr "" "Τερματισμός του κελύφους.\n" " \n" -" Τερματισμός κελύφους με κωδικό N. Αν το N παραληφθεί, η κατάσταση " -"εξόδου\n" +" Τερματισμός κελύφους με κωδικό 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 "" "Τερματισμός ενός κελύφους σύνδεσης.\n" " \n" -" Τερματίζει ένα κέλυφος σύνδεσης με κατάσταση εξόδου N. Επιστρέφει σφάλμα " -"αν δεν εκτελείται\n" -" σ' ένα κέλυφος σύνδεσης. " +" Τερματίζει ένα κέλυφος σύνδεσης με κατάσταση εξόδου N. Επιστρέφει σφάλμα αν δεν εκτελείται\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" @@ -3117,8 +3009,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 "" #: builtins.c:764 @@ -3135,22 +3026,18 @@ msgstr "" "Μετακίνηση της εργασίας στο προσκήνιο.\n" " \n" " Βάζει την εργασία που ορίζεται από JOB_SPEC στο προσκήνιο, κάνοντάς την\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" @@ -3159,21 +3046,18 @@ msgstr "" "Μετακινεί εργασίες στο παρασκήνιο.\n" " \n" " Τοποθετεί τις εργασίες που ορίζονται από κάθε JOB_SPEC στο παρασκήνιο,\n" -" όπως αν άρχισαν με «&». Αν δεν δίνεται η JOB_SPEC, τότε χρησιμοποιείται " -"ή αντίληψη που έχει το κέλυφος\n" +" όπως αν άρχισαν με «&». Αν δεν δίνεται η JOB_SPEC, τότε χρησιμοποιείται ή αντίληψη που έχει το κέλυφος\n" " ως τρέχουσα εργασία.\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφεται επιτυχία εκτός αν δεν έχει ενεργοποιηθεί job control ή έχει " -"συμβεί σφάλμα." +" Επιστρέφεται επιτυχία εκτός αν δεν έχει ενεργοποιηθεί job control ή έχει συμβεί σφάλμα." #: 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" @@ -3209,8 +3093,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 "" #: builtins.c:842 @@ -3241,8 +3124,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." @@ -3290,15 +3172,12 @@ msgid "" msgstr "" "Αφαίρεση εργασιών από το τρέχον κέλυφος.\n" " \n" -" Αφαιρεί κάθε όρισμα JOBSPEC από τον πίνακα ενεργών εργασιών. Στην " -"απουσία\n" -" JOBSPEC, τότε το κέλυφος χρησιμοποιεί την ιδέα που έχει περί της " -"τρέχουσας εργασίας.\n" +" Αφαιρεί κάθε όρισμα JOBSPEC από τον πίνακα ενεργών εργασιών. Στην απουσία\n" +" JOBSPEC, τότε το κέλυφος χρησιμοποιεί την ιδέα που έχει περί της τρέχουσας εργασίας.\n" " \n" " Επιλογές:\n" " -a\tαφαιρεί όλες τις εργασίες αν δεν δοθεί JOBSPEC\n" -" -h\tσημαδεύει κάθε JOBSPEC έτσι ώστε το SIGHUP δεν στέλνεται στην " -"εργασία\n" +" -h\tσημαδεύει κάθε JOBSPEC έτσι ώστε το SIGHUP δεν στέλνεται στην εργασία\n" " \t\tαν το κέλυφος δεχτεί ένα σήμα SIGHUP\n" " -r\tαφαιρεί μόνο εκτελούμενες εργασίες\n" " \n" @@ -3335,8 +3214,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" @@ -3378,16 +3256,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" @@ -3399,8 +3274,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" @@ -3418,10 +3292,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 "" @@ -3480,8 +3352,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" @@ -3505,8 +3376,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" @@ -3535,8 +3405,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" @@ -3550,8 +3419,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" @@ -3601,7 +3469,7 @@ msgstr "" " δεν δίνεται, υποτίθεται πως είναι 1.\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφει επιτυχία εκτός αν N είναι αρνητικός ή μαγαλύτερο; από $#. " +" Επιστρέφει επιτυχία εκτός αν N είναι αρνητικός ή μαγαλύτερο; από $#." #: builtins.c:1214 builtins.c:1229 msgid "" @@ -3665,8 +3533,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" @@ -3687,8 +3554,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" @@ -3716,14 +3582,11 @@ msgstr "" "Αποτίμηση δυνητικής έκφρασης.\n" " \n" " Τερματίζεται με κωδικό 0 (αληθής) ή 1 (ψευδής) ανάλογα\n" -" με την αποτίμηση της EXPR. Η έκφραση μπορεί να είναι μοναδιαία ή " -"δυαδική. Μοναδιαίες\n" -" εκφράσεις χρησιμοποιούνται συχνά για την εξέταση της κατάστασης " -"αρχείου. Υπάρχουν\n" +" με την αποτίμηση της EXPR. Η έκφραση μπορεί να είναι μοναδιαία ή δυαδική. Μοναδιαίες\n" +" εκφράσεις χρησιμοποιούνται συχνά για την εξέταση της κατάστασης αρχείου. Υπάρχουν\n" " τελεστές αλφαριθμητικών όπως και συγκρίσεως αριθμών.\n" " \n" -" Η συμπεριφορά των τεστ εξαρτάται από τον αριθμό των ορισμάτων. " -"Αναφερθείτε\n" +" Η συμπεριφορά των τεστ εξαρτάται από τον αριθμό των ορισμάτων. Αναφερθείτε\n" " στη σελίδα εγχειριδίου του bash για τις ολοκληρωμένες προδιαγραφές.\n" " \n" " Τελεστές αρχείων:\n" @@ -3733,8 +3596,7 @@ msgstr "" " -c ΑΡΧΕΙΟ Αληθής αν το αρχείο είναι ειδικό αρχείο χαρακτήρων.\n" " -d ΑΡΧΕΙΟ Αληθής αν το αρχείο είναι κατάλογος.\n" " -e ΑΡΧΕΙΟ Αληθής αν το αρχείο υπάρχει.\n" -" -f ΑΡΧΕΙΟ Αληθής αν το αρχείο υπάρχει και είναι κανονικό " -"αρχείο.\n" +" -f ΑΡΧΕΙΟ Αληθής αν το αρχείο υπάρχει και είναι κανονικό αρχείο.\n" " -g ΑΡΧΕΙΟ Αληθής αν το αρχείο είναι «set-group-id».\n" " -h ΑΡΧΕΙΟ Αληθής αν το αρχείο είναι συμβολικός σύνδεσμος.\n" " -L ΑΡΧΕΙΟ Αληθής αν το αρχείο είναι συμβολικός σύνδεσμος.\n" @@ -3743,26 +3605,20 @@ 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" " -O ΑΡΧΕΙΟ Αληθής αν το αρχείο is effectively owned by you.\n" -" -G ΑΡΧΕΙΟ Αληθής αν το αρχείο is effectively owned by your " -"group.\n" -" -N ΑΡΧΕΙΟ Αληθής αν το αρχείο μεταβλήθηκε από την τελευταία " -"φορά που διαβάστηκε.\n" +" -G ΑΡΧΕΙΟ Αληθής αν το αρχείο is effectively owned by your group.\n" +" -N ΑΡΧΕΙΟ Αληθής αν το αρχείο μεταβλήθηκε από την τελευταία φορά που διαβάστηκε.\n" " \n" -" ΑΡΧΕΙΟ1 -nt ΑΡΧΕΙΟ2 Αληθής αν το αρχείο1 είναι νεότερο από το αρχείο2 " -"(σύμφωνα\n" +" ΑΡΧΕΙΟ1 -nt ΑΡΧΕΙΟ2 Αληθής αν το αρχείο1 είναι νεότερο από το αρχείο2 (σύμφωνα\n" " με την ημερομηνία τροποποίηση).\n" " \n" -" ΑΡΧΕΙΟ1 -ot ΑΡΧΕΙΟ2 Αληθές αν αρχείο1 είναι παλαιότερο από το " -"αρχείο2.\n" +" ΑΡΧΕΙΟ1 -ot ΑΡΧΕΙΟ2 Αληθές αν αρχείο1 είναι παλαιότερο από το αρχείο2.\n" " \n" -" ΑΡΧΕΙΟ1 -ef ΑΡΧΕΙΟ2 Αληθές αν το αρχείο1 είναι hard link στο " -"αρχείο2.\n" +" ΑΡΧΕΙΟ1 -ef ΑΡΧΕΙΟ2 Αληθές αν το αρχείο1 είναι hard link στο αρχείο2.\n" " \n" " Τελεστές συμβολοσειράς:\n" " \n" @@ -3776,15 +3632,13 @@ msgstr "" " STRING1 != STRING2\n" " Αληθές αν οι συμβολοσειρές δεν είναι ίσες.\n" " STRING1 < STRING2\n" -" Αληθές αν η STRING1 προηγείται λεξικογραφικά της " -"STRING2.\n" +" Αληθές αν η STRING1 προηγείται λεξικογραφικά της STRING2.\n" " STRING1 > STRING2\n" " Αληθές αν η STRING1 έπεται λεξικογραφικά της STRING2.\n" " \n" " Άλλοι τελεστές:\n" " \n" -" -o OPTION Αληθές αν η επιλογή του κελύφους OPTION έχει " -"ενεργοποιηθεί.\n" +" -o OPTION Αληθές αν η επιλογή του κελύφους OPTION έχει ενεργοποιηθεί.\n" " -v VAR Αληθές αν η μεταβλητή VAR έχει οριστεί.\n" " -R VAR Αληθές αν η μεταβλητή VAR έχει οριστεί και είναι όνομα\n" " αναφοράς.\n" @@ -3795,15 +3649,12 @@ msgstr "" " arg1 OP arg2 Αρηθμιτικά τεστ. OP είναι ένα από τα -eq, -ne,\n" " -lt, -le, -gt, ή -ge.\n" " \n" -" Αριθμητικοί δυαδικοί τελεστές επιστρέφουν αληθές αν ARG1 είναι ίσο, μη-" -"ίσο,\n" -" μικρότερο-από, μικρότερο-από-ή-ίσο, μεγαλύτερο-από, ή μεγαλύτερο-από-ή-" -"ίσο\n" +" Αριθμητικοί δυαδικοί τελεστές επιστρέφουν αληθές αν ARG1 είναι ίσο, μη-ίσο,\n" +" μικρότερο-από, μικρότερο-από-ή-ίσο, μεγαλύτερο-από, ή μεγαλύτερο-από-ή-ίσο\n" " από το ARG2.\n" " \n" " Κατάσταση εξόδου:\n" -" Επιστρέφει επιτυχία αν EXPR αποτιμάται σε αληθές, αποτυχία αν EXPR " -"αποτιμάται σε\n" +" Επιστρέφει επιτυχία αν EXPR αποτιμάται σε αληθές, αποτυχία αν EXPR αποτιμάται σε\n" " ψευδές ή αν δίδεται ένα μη έγκυρο όρισμα." #: builtins.c:1343 @@ -3822,8 +3673,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" @@ -3831,8 +3681,7 @@ msgid "" msgstr "" "Εμφανίζει χρόνους διεργασιών.\n" " \n" -" Εμφανίζει το χρόνο του χρήστη και συστήματος για το κέλυφος και όλες " -"τις\n" +" Εμφανίζει το χρόνο του χρήστη και συστήματος για το κέλυφος και όλες τις\n" " θυγατρικές διεργασίες.\n" " \n" " Κατάσταση εξόδου:\n" @@ -3842,8 +3691,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" @@ -3852,34 +3700,26 @@ 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 or a signal " -"number.\n" +" Each SIGNAL_SPEC is either a signal name in 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 "" #: builtins.c:1400 @@ -3908,16 +3748,14 @@ 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 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" @@ -3984,23 +3822,19 @@ msgstr "" 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" @@ -4016,14 +3850,12 @@ msgstr "" 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 "" @@ -4042,8 +3874,7 @@ msgstr "" "Εκτέλεση εντολών για μέλος μιας λίστας.\n" " \n" " Ο βρόχος «for» εκτελεί μια αλληλουχία εντολών για κάθε μέλος\n" -" μιας λίστας. Αν «in ΛΕΞΕΙΣ ...;» δεν δίνεται, τότε υποτίθεται η «in \"$@" -"\"».\n" +" μιας λίστας. Αν «in ΛΕΞΕΙΣ ...;» δεν δίνεται, τότε υποτίθεται η «in \"$@\"».\n" " Για κάθε στοιχείο στις ΛΕΞΕΙΣ, ΟΝΟΜΑ ορίζεται σ' αυτό το στοιχείο, και\n" " οι ΕΝΤΟΛΕΣ εκτελούνται.\n" " \n" @@ -4131,17 +3962,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" @@ -4188,8 +4014,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" @@ -4207,6 +4032,13 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" +"Ομαδοποιεί εντολές σαν να είναι μία.\n" +" \n" +" Τρέχει ένα σύνολο εντολών μιας ομάδας. Αυτό είναι ένας τρόπος ανακατεύθυνσης\n" +" ενός συνόλου εντολών.\n" +" \n" +" Κατάσταση εξόδου:\n" +" Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε." #: builtins.c:1711 msgid "" @@ -4223,7 +4055,6 @@ msgid "" msgstr "" #: builtins.c:1726 -#, fuzzy msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -4235,8 +4066,8 @@ msgid "" msgstr "" "Αποτίμηση αριθμητικής εκφράσεως.\n" " \n" -" Η ΕΚΦΡΑΣΗ αποτιμάται σύμφωνα με τους αριθμητικούς κανόνες.\n" -" Ισοδύναμο με το \"let ΕΚΦΡΑΣΗ\".\n" +" Η ΕΚΦΡΑΣΗ αποτιμάται σύμφωνα με τους κανόνες της αριθμητικής.\n" +" Ισοδύναμο με το `let \"ΕΚΦΡΑΣΗ\"'.\n" " \n" " Κωδικός εξόδου:\n" " Επιστρέφει 1 αν η ΕΚΦΡΑΣΗ αποτιμάται σε 0, αλλιώς επιστρέφει 0." @@ -4245,12 +4076,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" @@ -4438,34 +4266,27 @@ 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 "" @@ -4473,10 +4294,8 @@ msgstr "" 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" @@ -4491,10 +4310,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." @@ -4505,8 +4322,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" @@ -4517,12 +4333,9 @@ msgstr "" 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" @@ -4549,22 +4362,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" @@ -4577,13 +4385,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 "" @@ -4595,19 +4401,4 @@ msgid "" msgstr "" "Διαβάζει γραμμές από αρχείο σε μεταβλητή τύπου πίνακα.\n" " \n" -" Συνώνημο του «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 "Άγνωστο σήμα #" +" Συνώνυμο του «mapfile»." diff --git a/po/id.gmo b/po/id.gmo index 61f53205e035b064b6f4360f0c7d18e42cc7751f..71d1827ffc20e3b34d70717bcb88ae6f485f6efa 100644 GIT binary patch delta 21847 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 k|5Rts*~~005lbWdHyG delta 11419 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, 2008, 2009, 2010, 2011, 2012, 2013, 2014. +# Arif E. Nugroho , 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" +"PO-Revision-Date: 2021-09-17 19:30+0700\n" "Last-Translator: Arif E. Nugroho \n" "Language-Team: Indonesian \n" "Language: id\n" @@ -26,7 +26,7 @@ msgstr "array subscript buruk" #: variables.c:3133 #, c-format msgid "%s: removing nameref attribute" -msgstr "" +msgstr "%s: menghapus atribut nameref" #: arrayfunc.c:446 builtins/declare.def:851 #, c-format @@ -73,9 +73,9 @@ msgid "%s: missing colon separator" msgstr "%s: hilang pemisah colon" #: bashline.c:4555 -#, fuzzy, c-format +#, 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,9 +83,9 @@ 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 @@ -141,6 +141,19 @@ msgstr "hanya berarti dalam sebuah `for', `while', atau `until'loop" #: 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" @@ -157,12 +170,10 @@ msgstr "" " mengembalikan \"$line $subroutine $filename\"; informasi extra ini\n" " dapat digunakan untuk menyediakan jejak stack.\n" " \n" -" Nilai dari EXPR mengindikasikan bagaimana banyak panggilan frames " -"kembali sebelum\n" +" Nilai dari EXPR mengindikasikan bagaimana banyak panggilan frames kembali sebelum\n" " yang ada; Top frame adalah frame 0. \n" " Status Keluar:\n" -" Mengembalikan 0 kecuali shell sedang tidak menjalankan sebuah fungsi " -"shell atau EXPR\n" +" Mengembalikan 0 kecuali shell sedang tidak menjalankan sebuah fungsi shell atau EXPR\n" " tidak valid." #: builtins/cd.def:327 @@ -174,9 +185,8 @@ 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" @@ -323,7 +333,7 @@ msgstr "%s: spesifikasi pekerjaan ambigu" #: builtins/common.c:964 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 #, c-format @@ -348,13 +358,11 @@ msgstr "%s: tidak ada spesifikasi completion" #: builtins/complete.def:688 msgid "warning: -F option may not work as you expect" -msgstr "" -"peringatan: pilihan -F mungkin tidak bekerja seperti yang anda harapkan" +msgstr "peringatan: pilihan -F mungkin tidak bekerja seperti yang anda harapkan" #: builtins/complete.def:690 msgid "warning: -C option may not work as you expect" -msgstr "" -"peringatan: pilihan -C mungkin tidak bekerja seperti yang anda harapkan" +msgstr "peringatan: pilihan -C mungkin tidak bekerja seperti yang anda harapkan" #: builtins/complete.def:838 msgid "not currently executing completion function" @@ -381,9 +389,9 @@ 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 +#, c-format msgid "`%s': invalid variable name for name reference" -msgstr "%s: nilai dari berkas pendeskripsi penelusur tidak valid" +msgstr "`%s': nilai dari berkas pendeskripsi penelusur tidak valid" #: builtins/declare.def:514 msgid "cannot use `-f' to make functions" @@ -397,7 +405,7 @@ msgstr "%s: fungsi baca-saja" #: builtins/declare.def:824 #, c-format msgid "%s: quoted compound array assignment deprecated" -msgstr "" +msgstr "%s: quoted compound array assignment ditinggalkan" #: builtins/declare.def:838 #, c-format @@ -424,14 +432,14 @@ 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 +#, c-format msgid "%s: dynamic builtin already loaded" -msgstr "%s: bukan dinamically loaded" +msgstr "%s: dynamic builtin telah dimuat" #: builtins/enable.def:392 #, 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 #, c-format @@ -545,14 +553,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 "" -"tidak ada topik bantuan yang cocok dengan `%s'. Coba `help help' atau 'man -" -"k %s' atau `info %s'." +msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "tidak ada topik bantuan yang cocok dengan `%s'. Coba `help help' atau 'man -k %s' atau `info %s'." #: builtins/help.def:224 #, c-format @@ -570,16 +577,12 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"Perintah shell ini didefinisikan secara internal. Ketik `help' untuk melihat " -"daftar ini.\n" +"Perintah shell ini didefinisikan secara internal. Ketik `help' untuk melihat daftar ini.\n" "Ketik `help nama' untuk informasi lebih lanjut mengenai fungsi `nama'.\n" -"Gunakan `info bash' untuk informasi lebih lanjut mengenasi shell secara " -"umum.\n" -"Gunakan `man -k' atau `info' untuk informasi lebih lanjut mengenai perintah " -"yang tidak ada dalam daftar ini.\n" +"Gunakan `info bash' untuk informasi lebih lanjut mengenasi shell secara umum.\n" +"Gunakan `man -k' atau `info' untuk informasi lebih lanjut mengenai perintah yang tidak ada dalam daftar ini.\n" "\n" -"Sebuah asterisk (*) disebelah dari nama berarti perintah tersebut tidak " -"aktif.\n" +"Sebuah asterisk (*) disebelah dari nama berarti perintah tersebut tidak aktif.\n" "\n" #: builtins/history.def:155 @@ -592,9 +595,9 @@ msgid "history position" msgstr "posisi sejarah" #: builtins/history.def:340 -#, fuzzy, c-format +#, c-format msgid "%s: invalid timestamp" -msgstr "%s: argumen limit tidak valid" +msgstr "%s: penanda waktu tidak valid" #: builtins/history.def:451 #, c-format @@ -731,17 +734,14 @@ 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 "" "Menampilkan daftar dari direktori yang diingat saat ini. Direktori\n" -" menemukan jalannya kedalam daftar dengan perintah `pushd'; anda dapat " -"memperoleh\n" +" menemukan jalannya kedalam daftar dengan perintah `pushd'; anda dapat memperoleh\n" " backup melalui daftar dengan perintah `popd'.\n" " \n" " Pilihan:\n" @@ -753,12 +753,10 @@ msgstr "" " \tdengan posisnya dalam stack\n" " \n" " Argumen:\n" -" +N\tMenampilkan masukan ke N dihitung dari kiri dari daftar yang " -"ditampilkan oleh\n" +" +N\tMenampilkan masukan ke N dihitung dari kiri dari daftar yang ditampilkan oleh\n" " \tdirs ketika dipanggil tanpa pilihan, dimulai dari nol.\n" " \n" -" -N\tMenampilkan masukan ke N dihitung dari kanan dari daftar yang " -"ditampilkan oleh\n" +" -N\tMenampilkan masukan ke N dihitung dari kanan dari daftar yang ditampilkan oleh\n" " \tdirs ketika dipanggil tanpa pilihan, dimulai dari nol." #: builtins/pushd.def:723 @@ -790,8 +788,7 @@ msgstr "" " Tanpa argumen, menukar top dari dua direktori.\n" " \n" " Pilihan:\n" -" -n\tmenekan perubahan normal dari direktori ketika menambahkan " -"direktori\n" +" -n\tmenekan perubahan normal dari direktori ketika menambahkan direktori\n" " \tke stack, jadi hanya stack yang dimanipulasi.\n" " \n" " Argumen:\n" @@ -838,8 +835,7 @@ msgstr "" " \n" " Argumen:\n" " -N\tmenghapus masukan ke N dihitung dari kiri dari daftar\n" -" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd " -"+0'\n" +" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd +0'\n" " \tmenghapus direktori terakhir, `popd -1' sebelum terakhir.\n" " \n" " Builtin `dirs' menampilkan direktori stack." @@ -873,9 +869,9 @@ 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" @@ -923,9 +919,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 @@ -998,7 +994,7 @@ msgstr "membatalkan..." #: error.c:287 #, c-format msgid "INFORM: " -msgstr "" +msgstr "BERI TAHU: " #: error.c:462 msgid "unknown command error" @@ -1038,21 +1034,21 @@ msgstr "TIMEFORMAT: `%c': karakter format tidak valid" #: execute_cmd.c:2362 #, c-format msgid "execute_coproc: coproc [%d:%s] still exists" -msgstr "" +msgstr "execute_coproc: coproc [%d:%s] masih ada" #: execute_cmd.c:2486 msgid "pipe error" msgstr "pipe error" #: execute_cmd.c:4793 -#, fuzzy, c-format +#, 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 +#, 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 #, c-format @@ -1062,8 +1058,7 @@ msgstr "%s: maximum function nesting level exceeded (%d)" #: execute_cmd.c:5467 #, c-format msgid "%s: restricted: cannot specify `/' in command names" -msgstr "" -"%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah" +msgstr "%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah" #: execute_cmd.c:5574 #, c-format @@ -1112,9 +1107,8 @@ msgid "attempted assignment to non-variable" msgstr "mencoba menempatkan ke bukan sebuah variabel" #: expr.c:530 -#, fuzzy msgid "syntax error in variable assignment" -msgstr "syntax error dalam expresi" +msgstr "syntax error dalam menempatkan variabel" #: expr.c:544 expr.c:911 msgid "division by 0" @@ -1158,9 +1152,8 @@ msgid "invalid arithmetic base" msgstr "basis arithmetic tidak valid" #: expr.c:1582 -#, fuzzy msgid "invalid integer constant" -msgstr "%s: jumlah baris tidak valid" +msgstr "konstanta bulat tidak valid" #: expr.c:1598 msgid "value too great for base" @@ -1183,9 +1176,7 @@ msgstr "tidak dapat mereset mode nodelay untuk fd %d" #: input.c:266 #, c-format msgid "cannot allocate new file descriptor for bash input from fd %d" -msgstr "" -"tidak dapat mengalokasikan berkas deskripsi bari untuk masukan bash dari fd " -"%d" +msgstr "tidak dapat mengalokasikan berkas deskripsi bari untuk masukan bash dari fd %d" #: input.c:274 #, c-format @@ -1199,12 +1190,12 @@ msgstr "start_pipeline: pgrp pipe" #: jobs.c:906 #, 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 #, 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 #, c-format @@ -1293,9 +1284,9 @@ msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: pekerjaan %d terhenti" #: jobs.c:3564 -#, fuzzy, c-format +#, c-format msgid "%s: no current jobs" -msgstr "%s: tidak ada pekerjaan seperti itu" +msgstr "%s: tidak ada pekerjaan sekarang" #: jobs.c:3571 #, c-format @@ -1331,9 +1322,8 @@ msgid "initialize_job_control: getpgrp failed" msgstr "initialize_job_control: getpgrp gagal" #: jobs.c:4447 -#, fuzzy 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 msgid "initialize_job_control: line discipline" @@ -1387,9 +1377,8 @@ msgid "free: underflow detected; mh_nbytes out of range" msgstr "free: underflow terdeteksi; mh_nbytes diluar dari jangkauan" #: lib/malloc/malloc.c:1001 -#, fuzzy 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 msgid "free: start and end chunk sizes differ" @@ -1404,9 +1393,8 @@ msgid "realloc: underflow detected; mh_nbytes out of range" msgstr "realloc: underflow terdeteksi; my_nbytes diluar dari jangkauan" #: lib/malloc/malloc.c:1141 -#, fuzzy 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 msgid "realloc: start and end chunk sizes differ" @@ -1420,8 +1408,7 @@ msgstr "register_alloc: tabel alokasi penuh dengan FIND_ALLOC?\n" #: lib/malloc/table.c:200 #, c-format msgid "register_alloc: %p already in table as allocated?\n" -msgstr "" -"register_alloc: %p sudah berada dalam tabel sepertinya sudah dialokasikan?\n" +msgstr "register_alloc: %p sudah berada dalam tabel sepertinya sudah dialokasikan?\n" #: lib/malloc/table.c:253 #, c-format @@ -1505,8 +1492,7 @@ msgstr "make_here_document: tipe instruksi buruk %d" #: make_cmd.c:657 #, 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')" +msgstr "dokumen-disini di baris %d dibatasi oleh akhir-dari-berkas (diinginkan `%s')" #: make_cmd.c:756 #, c-format @@ -1515,14 +1501,12 @@ msgstr "make_redirection: instruksi redireksi `%d' diluar dari jangkauan" #: parse.y:2393 #, 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) terlampaui SIZE_MAX (%lu): baris terpotong" #: parse.y:2826 msgid "maximum here-document count exceeded" -msgstr "" +msgstr "jumlah maksimal dokumen disini tercapai" #: parse.y:3581 parse.y:3957 parse.y:4556 #, c-format @@ -1628,7 +1612,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 @@ -1706,7 +1690,7 @@ msgstr "/tmp harus berupa sebuah nama direktori yang valid" #: shell.c:804 msgid "pretty-printing mode ignored in interactive shells" -msgstr "" +msgstr "mode pretty-printing diabaikan dalam shells interactive" #: shell.c:948 #, c-format @@ -1714,23 +1698,23 @@ msgid "%c%c: invalid option" msgstr "%c%c: pilihan tidak valid" #: shell.c:1319 -#, fuzzy, c-format +#, 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 +#, 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 msgid "cannot start debugger; debugging mode disabled" -msgstr "" +msgstr "tidak dapat menjalankan debugger; mode debugging tidak aktif" #: shell.c:1632 -#, fuzzy, c-format +#, c-format msgid "%s: Is a directory" -msgstr "%s: bukan sebuah direktori" +msgstr "%s: Direktori" #: shell.c:1881 msgid "I have no name!" @@ -1760,8 +1744,7 @@ msgstr "Pilihan shell:\n" #: shell.c:2043 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" +msgstr "\t-ilrsD atau -c perintah atau -O shopt_option\t\t(hanya pemanggilan)\n" #: shell.c:2062 #, c-format @@ -1771,16 +1754,12 @@ msgstr "\t-%s atau pilihan -o\n" #: shell.c:2068 #, 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" +msgstr "Ketik `%s -c \"help set\"' untuk informasi lebih lanjut mengenai pilihan shell.\n" #: shell.c:2069 #, 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" +msgstr "Ketik `%s -c help' untuk informasi lebih lanjut mengenai perintah builting shell.\n" #: shell.c:2070 #, c-format @@ -1790,12 +1769,12 @@ msgstr "Gunakan perintah 'bashbug' untuk melaporkan bugs.\n" #: shell.c:2072 #, c-format msgid "bash home page: \n" -msgstr "" +msgstr "bash halaman rumah: \n" #: shell.c:2073 #, c-format msgid "General help using GNU software: \n" -msgstr "" +msgstr "Bantuan umum menggunakan aplikasi GNU: \n" #: sig.c:757 #, c-format @@ -2001,9 +1980,8 @@ msgid "cannot duplicate named pipe %s as fd %d" msgstr "tidak dapat menduplikasi nama pipe %s sebagai fd %d" #: subst.c:6213 -#, fuzzy 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 msgid "cannot make pipe for command substitution" @@ -2023,19 +2001,19 @@ 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 +#, 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 +#, 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 +#, c-format msgid "%s: parameter not set" -msgstr "%s: parameter kosong atau tidak diset" +msgstr "%s: parameter tidak diset" #: subst.c:7258 #, c-format @@ -2058,12 +2036,8 @@ msgid "$%s: cannot assign in this way" msgstr "$%s: tidak dapat meng-assign dengan cara ini" #: subst.c:9814 -msgid "" -"future versions of the shell will force evaluation as an arithmetic " -"substitution" -msgstr "" -"versi selanjutnya dari shell akan memaksa evaluasi dari sebuah penggantian " -"aritmetika" +msgid "future versions of the shell will force evaluation as an arithmetic substitution" +msgstr "versi selanjutnya dari shell akan memaksa evaluasi dari sebuah penggantian aritmetika" #: subst.c:10367 #, c-format @@ -2108,18 +2082,18 @@ msgid "missing `]'" msgstr "hilang `]'" #: test.c:899 -#, fuzzy, c-format +#, 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 +#, 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 #, c-format @@ -2128,11 +2102,8 @@ msgstr "run_pending_traps: nilai buruk dalam trap_list[%d]: %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 handler adalah SIG_DFL, mengirimkan kembali %d " -"(%s) kediri sendiri" +msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "run_pending_traps: sinyal handler adalah SIG_DFL, mengirimkan kembali %d (%s) kediri sendiri" #: trap.c:487 #, c-format @@ -2159,9 +2130,9 @@ msgid "%s: variable may not be assigned value" msgstr "%s: tidak dapat meng-'assign' fd ke variabel" #: variables.c:3475 -#, fuzzy, c-format +#, 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 msgid "all_local_variables: no function context at current scope" @@ -2184,8 +2155,7 @@ msgstr "bukan `=' dalam exportstr untuk %s" #: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" -msgstr "" -"pop_var_context: kepala dari shell_variables bukan sebuah fungsi cbntext" +msgstr "pop_var_context: kepala dari shell_variables bukan sebuah fungsi cbntext" #: variables.c:5344 msgid "pop_var_context: no global_variables context" @@ -2193,9 +2163,7 @@ msgstr "pop_var_context: bukan global_variable context" #: variables.c:5424 msgid "pop_scope: head of shell_variables not a temporary environment scope" -msgstr "" -"pop_scope: kepala dari shell_variables bukan sebuah scope lingkungan " -"sementara" +msgstr "pop_scope: kepala dari shell_variables bukan sebuah scope lingkungan sementara" #: variables.c:6387 #, c-format @@ -2213,17 +2181,12 @@ 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." +msgstr "Hak Cipta (C) 2020 Free Software Foundation, Inc." #: version.c:47 version2.c:47 -msgid "" -"License GPLv3+: GNU GPL version 3 or later \n" -msgstr "" -"Lisensi GPLv3+: GNU GPL versi 3 atau sesudahnya \n" +msgid "License GPLv3+: GNU GPL version 3 or later \n" +msgstr "Lisensi GPLv3+: GNU GPL versi 3 atau sesudahnya \n" #: version.c:86 version2.c:86 #, c-format @@ -2232,9 +2195,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 "" -"Ini adalah perangkat lunak bebas; anda bebas untuk mengubah dan " -"mendistribusikannya." +msgstr "Ini adalah perangkat lunak bebas; anda bebas untuk mengubah dan mendistribusikannya." #: version.c:92 version2.c:92 msgid "There is NO WARRANTY, to the extent permitted by law." @@ -2269,13 +2230,8 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] name [nama ...]" #: 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 keymap] [-f nama berkas] [-q nama] [-u nama] [-r " -"keyseq] [-x keyseq:perintah-shell] [keyseq:readline-function atau 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 [-lpvsPVSX] [-m keymap] [-f nama berkas] [-q nama] [-u nama] [-r keyseq] [-x keyseq:perintah-shell] [keyseq:readline-function atau readline-command]" #: builtins.c:56 msgid "break [n]" @@ -2306,14 +2262,12 @@ msgid "command [-pVv] command [arg ...]" msgstr "perintah [-pVv] perintah [argumen ...]" #: builtins.c:78 -#, fuzzy msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" -msgstr "declare [-aAfFgilnrtux] [-p] [name[=nilai] ...]" +msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=nilai] ...]" #: builtins.c:80 -#, fuzzy msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." -msgstr "typeset [-aAfFgilrtux] [-p] name[=nilai] ..." +msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=nilai] ..." #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2336,12 +2290,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 ...]" @@ -2355,8 +2307,7 @@ msgstr "logout [n]" #: builtins.c:105 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]" -msgstr "" -"fc [-e ename] [-lnr] [pertama] [terakhir] atau fc -s [pat=rep] [perintah]" +msgstr "fc [-e ename] [-lnr] [pertama] [terakhir] atau fc -s [pat=rep] [perintah]" #: builtins.c:109 msgid "fg [job_spec]" @@ -2375,41 +2326,28 @@ msgid "help [-dms] [pattern ...]" msgstr "bantuan [-dms] [pola ...]" #: builtins.c:123 -msgid "" -"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " -"[arg...]" -msgstr "" -"sejarah [-c] [-d ofset] [n] atau history -anrw [nama berkas] atau history -" -"ps arg [arg...]" +msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" +msgstr "sejarah [-c] [-d ofset] [n] atau history -anrw [nama berkas] atau history -ps arg [arg...]" #: builtins.c:127 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 "" -"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " -"[sigspec]" -msgstr "" -"kill [-s spesifikasi sinyal | -n nomor sinyal | -sigspec] pid | jobsepc ... " -"atau kill -l [sigspec]" +msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgstr "kill [-s spesifikasi sinyal | -n nomor sinyal | -sigspec] pid | jobsepc ... atau kill -l [sigspec]" #: builtins.c:136 msgid "let arg [arg ...]" msgstr "biarkan arg [argumen ...]" #: 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 pembatas] [-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 array] [-d pembatas] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 msgid "return [n]" @@ -2464,18 +2402,16 @@ msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] nama [name ...]" #: builtins.c:171 -#, fuzzy msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" -msgstr "ulimit [-SHabcdefilmnpqrstuvxT] [batas]" +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 ...]" @@ -2502,12 +2438,8 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case WORD in [POLA [| POLA]...) PERINTAH ;;]... esac" #: builtins.c:194 -msgid "" -"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " -"COMMANDS; ] fi" -msgstr "" -"if PERINTAH; then PERINTAH; [ elif PERINTAH; then PERINTAH; ]... [ else " -"PERINTAH; ] fi" +msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" +msgstr "if PERINTAH; then PERINTAH; [ elif PERINTAH; then PERINTAH; ]... [ else PERINTAH; ] fi" #: builtins.c:196 msgid "while COMMANDS; do COMMANDS; done" @@ -2566,50 +2498,43 @@ 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 " -"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 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]" -msgstr "" -"compgen [-abcdefgjksuv] [-o pilihan] [-A aksi] [-G globpat] [-W wordlist] [-" -"F fungsi] [-C perintah] [-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 pilihan] [-A aksi] [-G globpat] [-W wordlist] [-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]" +msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +msgstr "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]" +msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +msgstr "readarray [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C callback] [-c quantum] [array]" #: builtins.c:256 #, fuzzy +#| msgid "" +#| "Define or display aliases.\n" +#| " \n" +#| " Without arguments, `alias' prints the list of aliases in the reusable\n" +#| " form `alias NAME=VALUE' on standard output.\n" +#| " \n" +#| " Otherwise, an alias is defined for each NAME whose VALUE is given.\n" +#| " A trailing space in VALUE causes the next word to be checked for\n" +#| " alias substitution when the alias is expanded.\n" +#| " \n" +#| " Options:\n" +#| " -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" +#| " defined." msgid "" "Define or display aliases.\n" " \n" @@ -2624,8 +2549,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 "" "Definisikan atau tampilkan aliases.\n" @@ -2633,23 +2557,18 @@ msgstr "" " `alias' dengan tanpa argumen atau dengan pilihan -p menampilkan daftar\n" " dari aliases dalam bentuk alias NAMA=NILAI di keluaran standar.\n" " \n" -" Jika tidak, sebuah alias didefinisikan untuk setiap NAMA yang NILAI-nya " -"diberikan.\n" -" sebuah tambahan spasi dalam NILAI menyebabkan kata selanjutnyan untuk " -"diperikasi untuk\n" +" Jika tidak, sebuah alias didefinisikan untuk setiap NAMA yang NILAI-nya diberikan.\n" +" sebuah tambahan spasi dalam NILAI menyebabkan kata selanjutnyan untuk diperikasi untuk\n" " pengganti alias ketika alias diexpand.\n" " \n" " Pilihan:\n" -" -p\tTampilkan seluruh alias yang terdefinisi dalam format yang " -"berguna\n" +" -p\tTampilkan seluruh alias yang terdefinisi dalam format yang berguna\n" " \n" " Status Keluar:\n" -" alias mengembalikan true sampai sebuah NAMA diberikan yang mana belum " -"ada alias yang\n" +" alias mengembalikan true sampai sebuah NAMA diberikan yang mana belum ada alias yang\n" " terdefinisi." #: builtins.c:278 -#, fuzzy msgid "" "Remove each NAME from the list of defined aliases.\n" " \n" @@ -2661,12 +2580,46 @@ 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." #: 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" @@ -2678,30 +2631,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" @@ -2711,44 +2659,32 @@ msgstr "" " \n" " Ikat sebuah urutan kunci ke fungsi readline atau sebuah macro, atau set\n" " sebuah variabel readline. Argumen bukan-pilihan syntax yang equivalent\n" -" yang ditemukan dalam ~/.inputrc, tetapi harus dilewatkan sebagai sebuah " -"argumen tunggal:\n" +" yang ditemukan dalam ~/.inputrc, tetapi harus dilewatkan sebagai sebuah argumen tunggal:\n" " yang terikat '\"\\C-x\\C-r\": membaca kembali berkas inisialisasi.\n" " \n" " Pilihan:\n" -" -m keymap Gunakan `keymap' sebagai keymap untuk durasi dari " -"perintah\n" +" -m keymap Gunakan `keymap' sebagai keymap untuk durasi dari perintah\n" " ini. Nama keymap yang diterima adalah emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" -"move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" " vi-command, dan vi-insert.\n" " -l Daftar dari nama fungsi.\n" " -p Daftar dari nama fungsi dan bindings.\n" -" -p Daftar dari fungsi dan bindings dalam bentuk yang " -"dapat digunakan sebagai\n" +" -p Daftar dari fungsi dan bindings dalam bentuk yang dapat digunakan sebagai\n" " masukan.\n" -" -S Daftar urutan kunci yang memanggil macros " -"dannilainya\n" -" -s Daftar urutan kunci yang memanggil macros " -"dannilainya\n" -" dalam sebuah bentuk yang dapat digunakan sebagai " -"sebuah masukan. -V Daftar nama variabel dan nilai\n" -" -v Daftar nama variabel dan nilai dalam bentuk yang " -"dapat digunakan\n" +" -S Daftar urutan kunci yang memanggil macros dannilainya\n" +" -s Daftar urutan kunci yang memanggil macros dannilainya\n" +" dalam sebuah bentuk yang dapat digunakan sebagai sebuah masukan. -V Daftar nama variabel dan nilai\n" +" -v Daftar nama variabel dan nilai dalam bentuk yang dapat digunakan\n" " sebagai masukan.\n" -" -q nama-fungsi Minta tentang kunci mana yang dipanggil oleh fungsi " -"yang disebut.\n" -" -u nama-fungsi Unbind semua kunci yang terikat dengan nama-" -"fungsi.\n" +" -q nama-fungsi Minta tentang kunci mana yang dipanggil oleh fungsi yang disebut.\n" +" -u nama-fungsi Unbind semua kunci yang terikat dengan nama-fungsi.\n" " -r keyseq Hapus binding untuk KEYSEQ.\n" " -f namafile Baca kunci bindings dari NAMAFILE.\n" -" -x keyseq:shell-command\tMenyebabkan SHELL-COMMAND untuk dijalankan " -"ketika\n" +" -x keyseq:shell-command\tMenyebabkan SHELL-COMMAND untuk dijalankan ketika\n" " \t\t\t\tKEYSEQ dimasuki.\n" " \n" " Status Keluar:\n" -" bind memberikan kembalian 0 kecuali sebuah pilihan tidak dikenal " -"diberikan atau sebuah error terjadi." +" bind memberikan kembalian 0 kecuali sebuah pilihan tidak dikenal diberikan atau sebuah error terjadi." #: builtins.c:330 msgid "" @@ -2762,8 +2698,7 @@ msgid "" msgstr "" "Keluar dari for, while, atau until loops.\n" " \n" -" Keluar untuk FOR, WHILE atau UNTIL loop. Jika N dispesifikasikan, keluar " -"N yang melingkupi\n" +" Keluar untuk FOR, WHILE atau UNTIL loop. Jika N dispesifikasikan, keluar N yang melingkupi\n" " loops.\n" " \n" " Status Keluar:\n" @@ -2781,22 +2716,18 @@ msgid "" msgstr "" "Melanjutkan for, while, atau until loops.\n" " \n" -" Melanjutkan ke iterasi selanjutnya dari loop yang dilingkupi oleh FOR, " -"WHILE, atau UNTIL.\n" -" Jika N dispesifikasikan, melanjutkan di posisi ke N dari loop yang " -"dilingkupi. \n" +" Melanjutkan ke iterasi selanjutnya dari loop yang dilingkupi oleh FOR, WHILE, atau UNTIL.\n" +" Jika N dispesifikasikan, melanjutkan di posisi ke N dari loop yang dilingkupi. \n" " Status Keluar:\n" " Status keluar adalah 0 kecuali N tidak lebih besar atau sama dengan 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" @@ -2804,17 +2735,13 @@ msgid "" msgstr "" "Menjalankan shell builtins.\n" " \n" -" Menjalankan SHELL-BUILTIN dengan argumen ARGs tanpa menjalankan " -"pencarian\n" -" perintah. Ini berguna ketika anda menginginkan untuk mengimplementasikan " -"sebuah shell builtin\n" -" sebagai sebuah fungsi shell, tetapi butuh untuk menjalankan builtin " -"dalah fungsi.\n" +" Menjalankan SHELL-BUILTIN dengan argumen ARGs tanpa menjalankan pencarian\n" +" perintah. Ini berguna ketika anda menginginkan untuk mengimplementasikan sebuah shell builtin\n" +" sebagai sebuah fungsi shell, tetapi butuh untuk menjalankan builtin dalah fungsi.\n" " \n" " Status Keluar:\n" -" Mengembalikan status keluar dari SHELL-BUILTIN, atau salah jika SHELL-" -"BUILTIN adalah\n" -" bukan sebuah shell builtin.." +" Mengembalikan status keluar dari SHELL-BUILTIN, atau salah jika SHELL-BUILTIN adalah\n" +" bukan sebuah shell builtin." #: builtins.c:369 msgid "" @@ -2837,35 +2764,60 @@ msgstr "" " mengembalikan \"$line $subroutine $filename\"; informasi extra ini\n" " dapat digunakan untuk menyediakan jejak stack.\n" " \n" -" Nilai dari EXPR mengindikasikan bagaimana banyak panggilan frames " -"kembali sebelum\n" +" Nilai dari EXPR mengindikasikan bagaimana banyak panggilan frames kembali sebelum\n" " yang ada; Top frame adalah frame 0. \n" " Status Keluar:\n" -" Mengembalikan 0 kecuali shell sedang tidak menjalankan sebuah fungsi " -"shell atau EXPR\n" +" Mengembalikan 0 kecuali shell sedang tidak menjalankan sebuah fungsi shell atau EXPR\n" " tidak valid." #: 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" @@ -2881,13 +2833,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 "" "Pindah direktori kerja shell.\n" @@ -2897,29 +2847,25 @@ msgstr "" " \n" " Variabel CDPATH mendefinisikan jalur pencarian untuk\n" " direktori yang berisi DIR. Alternatif nama direktori dalam CDPATH\n" -" dipisahkan oleh sebuah colon (:). Sebuah nama direktori kosong adalah " -"sama dengan\n" +" dipisahkan oleh sebuah colon (:). Sebuah nama direktori kosong adalah sama dengan\n" " direktori saat ini. i.e. `.'. Jika DIR dimulai dengan sebuah slash (/),\n" " maka CDPATH tidak digunakan.\n" " \n" " Jika direktori tidak ditemukan, dan\n" " pilihan shell cdable_vars' diset, maka coba kata sebagai sebuah nama\n" -" variabel. Jika variabel itu memiliki sebuah nilai, maka nilai dari " -"variabel itu yang digunakan\n" +" variabel. Jika variabel itu memiliki sebuah nilai, maka nilai dari variabel itu yang digunakan\n" " \n" " Pilihan:\n" " -L\tmemaksa link simbolik untuk diikuti\n" " -P\tgunakan struktur physical direktori tanpa mengikuti link\n" " symbolik\n" " \n" -" Default adalah mengikuti link simbolik, seperti dalam `-L' " -"dispesifikasikan.\n" +" Default adalah mengikuti link simbolik, seperti dalam `-L' dispesifikasikan.\n" " \n" " Status Keluar:\n" " 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,15 +2884,13 @@ 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' " -"dispesifikasikan.\n" +" Secara default, `pwd' berlaku seperi jika pilihan `-L' dispesifikasikan.\n" " \n" " Status Keluar:\n" -" Mengembalikan 0 kecuali jika sebuah pilihan tidak valid diberikan atau " -"direktori sekarang\n" +" Mengembalikan 0 kecuali jika sebuah pilihan tidak valid diberikan atau direktori sekarang\n" " tidak bisa dibaca." #: builtins.c:442 @@ -2990,13 +2934,11 @@ msgstr "" " Selalu gagal." #: 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" @@ -3008,28 +2950,59 @@ msgid "" " Exit Status:\n" " Returns exit status of COMMAND, or failure if COMMAND is not found." msgstr "" -"Menjalankan sebuah perintah sederhana atau menampilkan informasi mengenai " -"perintah.\n" +"Menjalankan sebuah perintah sederhana atau menampilkan informasi mengenai perintah.\n" " \n" -" Menjalankan PERINTAH tanpa ARGS menekan fungsi pencarian shell, atau " -"menampilkan\n" -" informasi mengenasi PERINTAH tertentu. Dapat digunakan untuk memanggil " -"perintah\n" +" Menjalankan PERINTAH tanpa ARGS menekan fungsi pencarian shell, atau menampilkan\n" +" informasi mengenasi PERINTAH tertentu. Dapat digunakan untuk memanggil perintah\n" " dalam disk ketika sebuah fungsi dengan nama yang sama ada.\n" " \n" " Pilihan:\n" -" -p\tgunakan 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" +" -p gunakan sebuah nilai default untuk PATH yang menjamin untuk mencari seluruh\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 " -"tidak ditemukan." +" Mengembalikan status keluar dari PERINTAH, atau gagal jika PERINTAH tidak ditemukan." #: 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" @@ -3062,8 +3035,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" @@ -3072,8 +3044,7 @@ msgid "" msgstr "" "Menset nilai variabel dan atribut.\n" " \n" -" Variabel deklarasi dan memberikan atribut untuknya. Jika tidak ada NAMA " -"yang diberikan,\n" +" Variabel deklarasi dan memberikan atribut untuknya. Jika tidak ada NAMA yang diberikan,\n" " tampilkan atribut dan nilai dari seluruh variabel.\n" " \n" " Pilihan:\n" @@ -3096,16 +3067,13 @@ msgstr "" " Variabel dengan atribut integer memiliki evaluasi aritmetic (lihat\n" " perintah `let') ditampilkan ketika variabel diberi sebuah nilai.\n" " \n" -" Ketika digunakan dalam sebuah fungsi, `declare' membuat NAMA lokal, " -"seperti dengan\n" +" Ketika digunakan dalam sebuah fungsi, `declare' membuat NAMA lokal, seperti dengan\n" " perintah `local'.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:532 -#, fuzzy msgid "" "Set variable values and attributes.\n" " \n" @@ -3113,7 +3081,7 @@ msgid "" msgstr "" "Menset nilai variabel dan atribut.\n" " \n" -" Kadaluarsa. Lihat `help declare'." +" Sama dengan `declare'. Lihat `help declare'." #: builtins.c:540 msgid "" @@ -3131,25 +3099,52 @@ msgid "" msgstr "" "Mendefinisikan variabel lokal.\n" " \n" -" Membuat sebuah variabel locak dipanggil NAMA, dan memberikan kepadanya " -"NILAI. OPSI dapat\n" +" Membuat sebuah variabel locak dipanggil NAMA, dan memberikan kepadanya NILAI. OPSI dapat\n" " berupa semua pilihan yang diterima oleh `declare'.\n" " \n" " Variabel lokal hanya dapat digunakan dalam sebuah fungsi; mereka hanya\n" " dapat dilihat ke fungsi dimana mereka terdefinisi dan anaknya.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan, " -"sebuah error terjadi.\n" +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan, sebuah error terjadi.\n" " atau shell tidak menjalankan sebuah fungsi." #: 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" @@ -3173,11 +3168,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" @@ -3202,8 +3195,7 @@ msgstr "" " \\r\tcarriage return\n" " \\t\thorizontal tab\n" " \\\\\tbackslash\n" -" \\0nnn\tkarakter yang memiliki kode ASCII NNN (oktal). NNN dapat " -"berupa\n" +" \\0nnn\tkarakter yang memiliki kode ASCII NNN (oktal). NNN dapat berupa\n" " \t0 sampai 3 oktal digit\n" " \\xHH\tdelapan-bit karakter yang nilainya adalah HH (hexadesimal). HH\n" " \tdapat satu dari dua bilangan hex\n" @@ -3261,17 +3253,13 @@ msgid "" msgstr "" "Aktifkan dan non-aktifkan shell builtins.\n" " \n" -" Aktifkan dan non-aktifkan perintah builtin shell. Menonaktifkan " -"membolehkan anda untuk\n" -" menjalankan sebuah perintah disk yang memiliki nama yang sama dengan " -"shell builtin\n" +" Aktifkan dan non-aktifkan perintah builtin shell. Menonaktifkan membolehkan anda untuk\n" +" menjalankan sebuah perintah disk yang memiliki nama yang sama dengan shell builtin\n" " tanpa menggunakan sebuah nama jalur yang lengkap.\n" " \n" " Pilihan:\n" -" -a\ttampilkan daftar dari builtins memperlihatkan aktif atau tidak " -"setiap diaktifkan\n" -" -n\tmenonaktifkan setiap NAMA atau tampilkan daftar dari builtin yang " -"tidak aktif\n" +" -a\ttampilkan daftar dari builtins memperlihatkan aktif atau tidak setiap diaktifkan\n" +" -n\tmenonaktifkan setiap NAMA atau tampilkan daftar dari builtin yang tidak aktif\n" " -p\ttampilkan daftar dari builtins dalam format yang berguna\n" " -s\ttampilkan yang nama dari Posix `special' builtins\n" " \n" @@ -3281,20 +3269,17 @@ msgstr "" " \n" " Tanpa pilihan, untuk setiap NAMA di aktifkan.\n" " \n" -" Untuk menggunakan `test' ditemukan dalam $PATH daripada dalam shell " -"builtin\n" +" Untuk menggunakan `test' ditemukan dalam $PATH daripada dalam shell builtin\n" " versi, ketik `enable -n test'.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali NAMA bukan sebuah shell builtin atau sebuah " -"error terjadi." +" Mengembalikan sukses kecuali NAMA bukan sebuah shell builtin atau sebuah error terjadi." #: 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" @@ -3302,16 +3287,52 @@ msgid "" msgstr "" "Menjalankan argumen sebagai sebuah perintah shell.\n" " \n" -" Mengkombinasikan ARG dalam sebuah string tunggal, gunakan hasil sebagai " -"masukan dalam shell,\n" +" Mengkombinasikan ARG dalam sebuah string tunggal, gunakan hasil sebagai masukan dalam shell,\n" " dan jalankan hasil dari perintah.\n" " \n" " Status Keluar:\n" -" Mengembalikan status keluar dari perintah atau sukses jika perintah " -"adalah kosong." +" Mengembalikan status keluar dari perintah atau sukses jika perintah adalah kosong." #: 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" @@ -3359,52 +3380,57 @@ msgstr "" " diikuti oleh sebuah colon, pilihan diduga akan berupa argumen,\n" " yang seharusnya dipisahkan dari itu oleh spasi.\n" " \n" -" Setiap waktu ini dipanggil, getopts akan menempatkan pilihan selanjutnya " -"dalam\n" +" Setiap waktu ini dipanggil, getopts akan menempatkan pilihan selanjutnya dalam\n" " $name shell variabel, menginisialisasi nama jiki ini tidak ada, dan\n" " index dari argumen selanjutnya untuk diproses kedalam shell\n" " variabel OPTIND. OPTIND diinisialisasi ke 1 setiap shell atau\n" -" sebuah shell script dipanggil. Ketika sebuah pilihan membutuhkan sebuah " -"argumen,\n" +" sebuah shell script dipanggil. Ketika sebuah pilihan membutuhkan sebuah argumen,\n" " getopts menempatkan argumen itu kedalam variabel shell OPTARG.\n" " \n" -" getopts melaporkan error dalam satu dari dua cara. Jika karakter " -"pertama\n" -" dari OPTSTRING adalah sebuah colon, getopts menggunakan silent error " -"laporan. Dalam\n" -" Mode ini, tidak ada pesan error yang ditampilkan. Jika sebuah pilihan " -"tidak valid terlihat\n" -" getops menempatkan karakter pilihan yang ditemukan ke OPTARG. Jika " -"sebuah\n" -" argumen yang dibutuhkan tidak ditemukan, getopts menempatkan sebuah ':' " -"kedalam NAME dan\n" -" menset OPTARG ke pilihan karakter yang ditemukan. Jika getopts tidak " -"dalam\n" -" mode silent, dan sebuah pilihan tidak valid terlihat getopts menempatkan " -"'?' kedalam\n" +" getopts melaporkan error dalam satu dari dua cara. Jika karakter pertama\n" +" dari OPTSTRING adalah sebuah colon, getopts menggunakan silent error laporan. Dalam\n" +" Mode ini, tidak ada pesan error yang ditampilkan. Jika sebuah pilihan tidak valid terlihat\n" +" getops menempatkan karakter pilihan yang ditemukan ke OPTARG. Jika sebuah\n" +" argumen yang dibutuhkan tidak ditemukan, getopts menempatkan sebuah ':' kedalam NAME dan\n" +" menset OPTARG ke pilihan karakter yang ditemukan. Jika getopts tidak dalam\n" +" mode silent, dan sebuah pilihan tidak valid terlihat getopts menempatkan '?' kedalam\n" " variabel NAME, OPTARG tidak diset, dan sebuah pesan analisis\n" " tampilkan.\n" " \n" -" Jika sebuah variabel shell OPTERR memiliki sebuah nilai 0, getopts " -"mendisable\n" +" Jika sebuah variabel shell OPTERR memiliki sebuah nilai 0, getopts mendisable\n" " pencetakan dari pesan error, bahkan jika karakter pertama dari\n" " OPTSTRING bukan sebuah colon. OPTERR memiliki nilai 1 secara default.\n" " \n" " Getopts secara normal memparse parameter posisi ($0 - $9), tetapi jika\n" " lebih dari satu argumen diberikan, mereka diparse. \n" " Status Keluar:\n" -" Mengembalikan sukses jika sebuah pilihan ditemukan; gagal jika akhir " -"dari pilihan\n" +" Mengembalikan sukses jika sebuah pilihan ditemukan; gagal jika akhir dari pilihan\n" " ditemui atau sebuah error terjadi." #: 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" @@ -3412,20 +3438,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 "" "Mengganti shell dengan perintah yang diberikan.\n" " \n" -" Jalankan PERINTAH, ganti shell ini dengan aplikasi yang " -"dispesifikaskan.\n" -" ARGUMEN menjadi argumen dari PERINTAH. Jika PERINTAH tidak " -"dispesifikasikan,\n" +" Jalankan PERINTAH, ganti shell ini dengan aplikasi yang dispesifikaskan.\n" +" ARGUMEN menjadi argumen dari PERINTAH. Jika PERINTAH tidak dispesifikasikan,\n" " setiap redireksi akan memiliki afek dalam shell sekarang.\n" " \n" " Pilihan:\n" @@ -3433,13 +3455,11 @@ msgstr "" " -c\t\tjalankan PERINTAH dengan sebuah environment kosong\n" " -l\t\ttempatkan sebuah dash dalam argumen ke nol ke PERINTAH\n" " \n" -" Jika perintah tidak dapat dijalankan, sebuah non-interaktif shell " -"keluar, kecuali\n" +" Jika perintah tidak dapat dijalankan, sebuah non-interaktif shell keluar, kecuali\n" " pilihan shell `execfail' diset.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali PERINTAH tidak ditemukan atau sebuah " -"redireksi error terjadi." +" Mengembalikan sukses kecuali PERINTAH tidak ditemukan atau sebuah redireksi error terjadi." #: builtins.c:715 msgid "" @@ -3450,37 +3470,32 @@ msgid "" msgstr "" "Keluar dari shell.\n" " \n" -" Keluar dari shell dengan status dari N. Jika N diabaikan, status " -"keluaran\n" +" Keluar dari shell dengan status dari N. Jika N diabaikan, status keluaran\n" " adalah status dari perintah terakhir yang dijalankan." #: 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 "" "Keluar dari sebuah login shell.\n" " \n" -" Keluar sebuah login shell dengan status keluar N. Mengembalikan sebuah " -"error jika tidak dijalankan\n" +" Keluar sebuah login shell dengan status keluar N. Mengembalikan sebuah error jika tidak dijalankan\n" " dalam sebuah login shell." #: 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" @@ -3494,38 +3509,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 "" "Tampilkan atau jalankan perintah dari daftar sejarah.\n" " \n" -" fc biasa digunakan untuk mendaftar atau mengubah dan menjalankan " -"perintah dari daftar sejarah.\n" -" PERTAMA dan TERAKHIR dapat berupa nomor yang menspesifikasikan " -"jangkauan, atau PERTAMA dapat berupa sebuah\n" +" fc biasa digunakan untuk mendaftar atau mengubah dan menjalankan perintah dari daftar sejarah.\n" +" PERTAMA dan TERAKHIR dapat berupa nomor yang menspesifikasikan jangkauan, atau PERTAMA dapat berupa sebuah\n" " string, yang berarti adalah perintah yang berawal dengan string.\n" " \n" " Pilihan:\n" -" -e ENAME\tmemilih editor yang akan digunakan. Default adalah FCEDIT, " -"kemudian EDITOR,\n" +" -e ENAME\tmemilih editor yang akan digunakan. Default adalah FCEDIT, kemudian EDITOR,\n" " \t\tkemudian vi.\n" " -l \tdaftar baris daripada mengubahnya.\n" " -n \tabaikan nomor baris ketika MENDAFTAR.\n" -" -r \tmembalik urutan dari baris (membuat yang terbaru terdaftar " -"pertama).\n" +" -r \tmembalik urutan dari baris (membuat yang terbaru terdaftar pertama).\n" " \n" " Dengan `fc -s [pat=rep ...] [perintah]' format, perintah\n" " dijalankan setelah substitusi OLD=NEW dilakukan.\n" " \n" -" Sebuah alias yang berguna yang digunakan dengan ini r='fc -s', jadi " -"mengetikan `r cc'\n" -" menjalankan perintah terakhir yang diawali dengan `cc' dan mengetikan " -"'r' menjalankan kembali\n" +" Sebuah alias yang berguna yang digunakan dengan ini r='fc -s', jadi mengetikan `r cc'\n" +" menjalankan perintah terakhir yang diawali dengan `cc' dan mengetikan 'r' menjalankan kembali\n" " perintah terakhir.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses atau status dari perintah yang dijalankan; tidak-" -"nol jika sebuah error terjadi." +" Mengembalikan sukses atau status dari perintah yang dijalankan; tidak-nol jika sebuah error terjadi." #: builtins.c:764 msgid "" @@ -3545,17 +3552,14 @@ msgstr "" " yang digunakan.\n" " \n" " Status Keluar:\n" -" Status dari perintah yang ditempatkan di foreground, atau gagal jika " -"sebuah error terjadi." +" Status dari perintah yang ditempatkan di foreground, atau gagal jika sebuah error terjadi." #: 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" @@ -3563,23 +3567,40 @@ msgid "" msgstr "" "Pindahkan pekerjaan ke background.\n" " \n" -" Tempatkan setiap JOB_SPEC dalam background, seperti jika ini telah " -"dimulai dengan\n" +" Tempatkan setiap JOB_SPEC dalam background, seperti jika ini telah dimulai dengan\n" " `&'. Jika JOB_SPEC tidak ada, notion shell's dari pekerjaan\n" " yang saat berjalan digunakan.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau sebuah error terjadi." #: 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" @@ -3599,8 +3620,7 @@ msgstr "" "Ingat atau tampilkan lokasi aplikasi.\n" " \n" " Tentukan dan ingat nama jalur lengkap dari setiap NAMA perintah. Jika\n" -" tidak ada argumen yang diberikan, informasi mengenai perintah yang " -"diingat akan ditampilkan.\n" +" tidak ada argumen yang diberikan, informasi mengenai perintah yang diingat akan ditampilkan.\n" " \n" " Pilihan:\n" " -d\t\tlupakan lokasi yang diingat untuk setiap NAMA\n" @@ -3611,16 +3631,32 @@ msgstr "" " \t\tuntuk setiap lokasi diberikan NAMA yang sesuai jika multiple\n" " \t\tNAMA diberikan\n" " Argumen:\n" -" NAMA\t\tSetiap NAMA yang ditemukan dalam $PATH dan ditambahkan dalam " -"daftar\n" +" NAMA\t\tSetiap NAMA yang ditemukan dalam $PATH dan ditambahkan dalam daftar\n" " \t\tdari perintah yang diingat.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali NAMA tidak ditemukan atau sebuah pilihan " -"tidak valid telah diberikan." +" Mengembalikan sukses kecuali NAMA tidak ditemukan atau sebuah pilihan tidak valid telah diberikan." #: 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" @@ -3638,14 +3674,12 @@ 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 "" "Tampilkan informasi mengenai perintah builtin.\n" " \n" " Tampilkan ringkasan singkat dari perintah builtin. Jika POLA\n" -" dispesifikasikan, tampilkan bantuan lengkap di seluruh perintah yang " -"cocok dengan POLA,\n" +" dispesifikasikan, tampilkan bantuan lengkap di seluruh perintah yang cocok dengan POLA,\n" " jika tidak daftar dari topik bantuan ditampilkan.\n" " \n" " Pilihan:\n" @@ -3658,11 +3692,40 @@ msgstr "" " POLA\tPola menspesifikasikan topik bantuan\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali POLA tidak ditemukan atau pilihan tidak " -"valid diberikan." +" Mengembalikan sukses kecuali POLA tidak ditemukan atau pilihan tidak valid diberikan." #: 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" @@ -3690,18 +3753,15 @@ 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 "" "Menampilkan atau memanipulasi daftar sejarah.\n" " \n" -" Menampilkan daftar sejarah dengan nomor baris. Baris yang ditampilkan " -"dengan\n" -" sebuah `*' telah diubah. Argumen dari N mengatakan untuk menampilkan " -"hanya\n" +" Menampilkan daftar sejarah dengan nomor baris. Baris yang ditampilkan dengan\n" +" sebuah `*' telah diubah. Argumen dari N mengatakan untuk menampilkan hanya\n" " N baris terakhir.\n" " \n" " Pilihan:\n" @@ -3709,8 +3769,7 @@ msgstr "" " -d menghapus masukan sejarah di offset OFFSET.\n" " \n" " -a\tmenambahkan ke daftar sejarah dari sesi ini ke berkas sejarah.\n" -" -n\tmembaca seluruh baris sejarah yang belum dibaca dari berkas " -"sejarah\n" +" -n\tmembaca seluruh baris sejarah yang belum dibaca dari berkas sejarah\n" " -r\tmembaca berkas sejarah dan menambahkan isinya ke daftar\n" " \tsejarah\n" " -w menulis sejarah sekarang ke berkas sejarah\n" @@ -3721,25 +3780,40 @@ msgstr "" " -s\ttambahkan ARG ke daftar sejarah sebagai sebuah masukan tunggal\n" " \n" " \n" -" Jika NAMAFILE diberikan, maka itu digunakan sebagai berkas sejarah " -"selain itu\n" -" jika $HISTFILE memiliki nilai, maka itu digunakan, selain itu ~/." -"bash_history.\n" +" Jika NAMAFILE diberikan, maka itu digunakan sebagai berkas sejarah selain itu\n" +" jika $HISTFILE memiliki nilai, maka itu digunakan, selain itu ~/.bash_history.\n" " \n" " \n" -" Jika variabel $HISTTIMEFORMAT diset dan tidak kosong, nilai ini yang " -"akan digunakan\n" -" sebagai format untuk string untuk strftime(3) untuk mencetak timestamp " -"yang berhubungan\n" -" dengan setiap masukan sejarah yang ditampilkan. Tidak ada time stamp " -"yang ditampilkan jika tidak.\n" +" Jika variabel $HISTTIMEFORMAT diset dan tidak kosong, nilai ini yang akan digunakan\n" +" sebagai format untuk string untuk strftime(3) untuk mencetak timestamp yang berhubungan\n" +" dengan setiap masukan sejarah yang ditampilkan. Tidak ada time stamp yang ditampilkan jika tidak.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: 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" @@ -3764,8 +3838,7 @@ msgid "" msgstr "" "Menampilkan status dari pekerjaan.\n" " \n" -" Tampilkan pekerjaan yang aktif. JOBSPEC membatasi keluaran ke pekerjaan " -"itu.\n" +" Tampilkan pekerjaan yang aktif. JOBSPEC membatasi keluaran ke pekerjaan itu.\n" " Tanpa pilihan, status dari seluruh aktif job ditampilkan.\n" " \n" " Pilihan:\n" @@ -3776,19 +3849,15 @@ msgstr "" " -r membatasi keluaran ke pekerjaan yang sedang jalan\n" " -s membatasi keluaran ke pekerjaan yang berhenti\n" " \n" -" Jika pilihan -x diberikan, PERINTAH dijalankan setelah semua spesifikasi " -"pekerjaan\n" -" yang tampil di ARGS telah diganti dengan proses ID dari proses " -"pekerjaan\n" +" Jika pilihan -x diberikan, PERINTAH dijalankan setelah semua spesifikasi pekerjaan\n" +" yang tampil di ARGS telah diganti dengan proses ID dari proses pekerjaan\n" " grup leader.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecualis sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi.\n" +" Mengembalikan sukses kecualis sebuah pilihan tidak valid diberikan atau sebuah error terjadi.\n" " Jika -x digunakan, mengembalikan status keluar dari PERINTAH." #: builtins.c:906 -#, fuzzy msgid "" "Remove jobs from current shell.\n" " \n" @@ -3811,17 +3880,34 @@ msgstr "" " \n" " Pilihan:\n" " -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" +" -h\ttandai setiap JOBSPEC sehingga SIGHUP tidak dikirim ke pekerjaan jika\n" +" \t\tshell menerima sebuah SIGHUP\n" " -r\thapus hanya pekerjaan yang sedang berjalan\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali ada sebuah pilihan tidak valid atau JOBSPEC " -"diberikan." +" Mengembalikan sukses kecuali ada sebuah pilihan tidak valid atau JOBSPEC diberikan." #: 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" @@ -3845,25 +3931,21 @@ msgid "" msgstr "" "Mengirim sebuah sinyal ke sebuah pekerjaan.\n" " \n" -" Mengirim ke sebuah proses yang diidentifikasikan oleh PID atau JOBSPEC " -"dengan sinyal yang diberi name\n" +" Mengirim ke sebuah proses yang diidentifikasikan oleh PID atau JOBSPEC dengan sinyal yang diberi name\n" " oleh SIGSPEC atau SIGNUM. Jika SIGSPEC atau SIGNUM tidak ada, maka\n" " SIGTERM diasumsikan.\n" " \n" " Pilihan:\n" " -s sig\tSIG adalah sebuah nama sinyal\n" " -n sig\tSIG adalah sebuah nomor sinyal\n" -" -l\tdaftar dari nama sinyal; jika argumen diikuti dengan `-l' mereka " -"mengasumsikan ke\n" +" -l\tdaftar dari nama sinyal; jika argumen diikuti dengan `-l' mereka mengasumsikan ke\n" " \tnomor sinyal yang namanya ditampilkan.\n" -" Kill adalah sebuah shell builtin untuk dua alasan; ini membolehkan " -"sebuah jobs ID untuk digunakan dari pada\n" +" Kill adalah sebuah shell builtin untuk dua alasan; ini membolehkan sebuah jobs ID untuk digunakan dari pada\n" " proses IDs, dan memperbolehkan proses untuk dimatikan jika batas\n" " dari proses yang dibuat tercapai.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:949 msgid "" @@ -3872,8 +3954,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" @@ -3912,11 +3993,9 @@ msgstr "" "Evaluasi ekspresi arithmetic.\n" " \n" " Setiap ARG adalah sebuah ekspresi arithmetic yang dievaluasi. Evaluasi\n" -" dilakukan dalam fixed-width integers dengan tidak ada pemeriksaan untuk " -"overflow, walaupun\n" +" dilakukan dalam fixed-width integers dengan tidak ada pemeriksaan untuk overflow, walaupun\n" " pembagian dengan 0 ditangkap dan ditandai sebagai error. Berikut\n" -" daftar dari operator yang dikelompokkan dalam tingkat tingkat dari equal " -"precedence operators.\n" +" daftar dari operator yang dikelompokkan dalam tingkat tingkat dari equal precedence operators.\n" " Tingkat yang ditampilkan dalam urutan dari decreasing precedence.\n" " \n" " \tid++, id--\tvariabel post-increment, post-decrement\n" @@ -3950,25 +4029,62 @@ msgstr "" " aturan diatasnya.\n" " \n" " Status Keluar:\n" -" Jika ARG terakhir dievaluasi ke 0, membiarkan kembali ke 1; 0 " -"dikembalikan Jika tidak." +" Jika ARG terakhir dievaluasi ke 0, membiarkan kembali ke 1; 0 dikembalikan Jika tidak." #: 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" +" 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" @@ -3980,8 +4096,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" @@ -3999,62 +4114,45 @@ 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 "" -"Membaca sebuah baris dari standar masukan dan membaginya dalam bagian " -"bagian.\n" +"Membaca sebuah baris dari standar masukan dan membaginya dalam bagian bagian.\n" " \n" -" Satu baris dibaca dari masukan standar, atau dari berkas deskripsi FD " -"jika\n" +" Satu baris dibaca dari masukan standar, atau dari berkas deskripsi FD jika\n" " pilihan -u diberikan, dan kata pertama diberikan ke NAMA pertama,\n" -" kata kedua ke NAMA kedua, dan seterusnya. dengan kata yang tersisa " -"ditempatkan\n" -" ke NAMA terakhir. Hanya karakter yang ditemukan dalam $IFS yang dikenal " -"sebagai pembatas\n" +" kata kedua ke NAMA kedua, dan seterusnya. dengan kata yang tersisa ditempatkan\n" +" ke NAMA terakhir. Hanya karakter yang ditemukan dalam $IFS yang dikenal sebagai pembatas\n" " kata.\n" " \n" -" Jika tidak ada NAMA yang diberikan, baris yang dibaca disimpan dalam " -"variabel BALASAN\n" +" Jika tidak ada NAMA yang diberikan, baris yang dibaca disimpan dalam variabel BALASAN\n" " \n" " Pilihan:\n" " -a array\tditempatkan kata dibaca secara berurutan indice dari array\n" " \t\tvariabel ARRAY, dimulai dari nol\n" -" -d delim\tdilanjutkan sampai karakter pertama dari PEMBATAS dibaca, " -"daripada\n" +" -d delim\tdilanjutkan sampai karakter pertama dari PEMBATAS dibaca, daripada\n" " \t\tbaris baru\n" -" -e\t\tgunakan Readline untuk memperoleh baris dalam sebuah shell " -"interaktif\n" +" -e\t\tgunakan Readline untuk memperoleh baris dalam sebuah shell interaktif\n" " -i text\tGunakan TEXT sebagai text inisial untuk Readline\n" -" -n nchars\tkembali setelah membaca NCHARS characters daripada " -"menunggu\n" +" -n nchars\tkembali setelah membaca NCHARS characters daripada menunggu\n" " \t\tuntuk sebuah baris baru\n" -" -N nchars\thanya kembali setelah membaca tepat NCHARS karakter, " -"kecuali\n" -" \t\tEOF ditemui atau waktu habis dalam pembacaan, abaikan pembatas " -"apapun\n" +" -N nchars\thanya kembali setelah membaca tepat NCHARS karakter, kecuali\n" +" \t\tEOF ditemui atau waktu habis dalam pembacaan, abaikan pembatas apapun\n" " -p prompt\tkeluarkan string PROMPT tanpa tambahan baris baru sebelum\n" " \t\tmencoba untuk membaca\n" " -r\t\tjangan ijinkan backslash untuk mengeluarkan karakter apapun\n" " -s\t\tjangan echo masukan yang datang dari sebuah terminal\n" -" -t menyebabkan pembacaan untuk time out dan kembali gagal jika sebuah " -"baris lengkap\n" -" \t\tdari masukan tidak dibaca dalam TIMEOUT detik. Jika variabel TMOUT " -"terset,\n" -" \t\tnilai ini akan menjadi nilai default timeout. TIMEOUT mungkin " -"sebuah\n" +" -t menyebabkan pembacaan untuk time out dan kembali gagal jika sebuah baris lengkap\n" +" \t\tdari masukan tidak dibaca dalam TIMEOUT detik. Jika variabel TMOUT terset,\n" +" \t\tnilai ini akan menjadi nilai default timeout. TIMEOUT mungkin sebuah\n" " \t\tbilangan fraksional. Status keluaran lebih besar dari 128 jika\n" " \t\ttimeout dilewati\n" " -u fd\t\tbaca dari berkas deskripsi FD daripada standar masukan\n" " \n" " Status Keluar:\n" -" Kode kembali adalah nol, kecuali akhir-dari-berkas ditemui, baca " -"kehabisan waktu,\n" -" atau sebuah berkas deskripsi disupply sebagai sebuah argumen ke pilihan -" -"u." +" Kode kembali adalah nol, kecuali akhir-dari-berkas ditemui, baca kehabisan waktu,\n" +" atau sebuah berkas deskripsi disupply sebagai sebuah argumen ke pilihan -u." #: builtins.c:1041 msgid "" @@ -4069,17 +4167,96 @@ msgid "" msgstr "" "Kembali dari sebuah fungsi shell.\n" " \n" -" Menyebabkan sebuah fungsi atau sebuah script untuk keluar dengan nilai " -"kembali\n" +" Menyebabkan sebuah fungsi atau sebuah script untuk keluar dengan nilai kembali\n" " yang dispesifikasikan oleh N. Jika N diabaikan, status kembalian adalah\n" " perintah terakhir yang dijalankan dalam fungsi atau script.\n" " \n" " Status Keluar:\n" -" Mengembalikan N, atau gagal jika shell tidak menjalan sebuah fungsi atau " -"script." +" Mengembalikan N, atau gagal jika shell tidak menjalan sebuah fungsi atau script." #: builtins.c:1054 #, 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" @@ -4122,8 +4299,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" @@ -4147,8 +4323,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" @@ -4170,15 +4345,12 @@ msgstr "" " tampilkan nama dan nilai dari variabel shell.\n" " \n" " Pilihan:\n" -" -a Tandai variabel yang telah termodifikasi atau dibuat untuk " -"export.\n" +" -a Tandai variabel yang telah termodifikasi atau dibuat untuk export.\n" " -b Notifikasi penyelesaian pekerjaan secara langsung.\n" -" -e Keluar langsung jika sebuah perintah keluar dengan status tidak " -"nol.\n" +" -e Keluar langsung jika sebuah perintah keluar dengan status tidak nol.\n" " -f Menonaktifkan pembuatan nama berkas (globbing).\n" " -h Ingat lokasi dari perintah sebagai mereka dicari.\n" -" -k Semua argumen assignment ditempatkan dalam environment untuk " -"sebuah\n" +" -k Semua argumen assignment ditempatkan dalam environment untuk sebuah\n" " perintah, tidak hanya mengawali nama perintah.\n" " -m Pengendali pekerjaan diaktifkan.\n" " -n Baca perintah tapi jangan menjalankan perintah tersebut.\n" @@ -4195,8 +4367,7 @@ msgstr "" " history aktifkan sejarah perintah\n" " ignoreeof shell tidak akan keluar ketika membaca EOF\n" " interactive-comments\n" -" membolehkan komentar ada dalam perintah " -"interaktif\n" +" membolehkan komentar ada dalam perintah interaktif\n" " keyword sama seperti -k\n" " monitor sama seperti -m\n" " noclobber sama seperti -C\n" @@ -4207,40 +4378,31 @@ msgstr "" " nounset sama seperti -u\n" " onecmd sama seperti -t\n" " physical sama seperti -P\n" -" pipefail nilai kembalian dari sebuah pipelie adalah status " -"dari\n" -" perintah terakhir yang keluar dengan sebuah status " -"tidak nol,\n" -" atau nol jika tidak ada perintah yang keluar " -"dengan status tidak nol\n" +" pipefail nilai kembalian dari sebuah pipelie adalah status dari\n" +" perintah terakhir yang keluar dengan sebuah status tidak nol,\n" +" atau nol jika tidak ada perintah yang keluar dengan status tidak nol\n" " posix ubah perilaku dari bash dimana operasi\n" " default berbeda dari 1003.2 standar ke\n" " sesuai dengan standar\n" " privileged sama seperti -p\n" " verbose sama seperti -v\n" -" vi gunakan sebuah gaya vi dalam line editing " -"interface.\n" +" vi gunakan sebuah gaya vi dalam line editing interface.\n" " xtrace sama seperti -x\n" " -p Aktif ketika real dan efektif id pengguna tidak cocok.\n" -" Menonaktifkan pemrosesan dari berkas $ENV dan mengimpor dari " -"fungsi\n" +" Menonaktifkan pemrosesan dari berkas $ENV dan mengimpor dari fungsi\n" " shell. Mengubah pilihan ini off menyebabkan efektif uid dan\n" " gid untuk diset ke real uid dan gid.\n" " -t Keluar setelah membaca dan menjalankan satu perintah.\n" -" -u Perlakukan variabel yang tidak diset sebagai error ketika " -"mensubstitusi.\n" +" -u Perlakukan variabel yang tidak diset sebagai error ketika mensubstitusi.\n" " -v Tampilkan baris masukan shell seperti ketika dibaca.\n" -" -x Tampilkan perintah dan argumennya ketika menjalankan perintah " -"tersebut.\n" +" -x Tampilkan perintah dan argumennya ketika menjalankan perintah tersebut.\n" " -B Shell akan melakukan expansi brace\n" -" -C Jika diset, melarang berkas regular yang telah ada untuk " -"ditulis\n" +" -C Jika diset, melarang berkas regular yang telah ada untuk ditulis\n" " oleh keluaran redirection.\n" " -E Jika diset, trap ERR diturunkan oleh fungsi shell.\n" " -H Mengaktifkan ! gaya pengubahan sejarah. Tanda ini aktif\n" " secara default ketika shell interaktif.\n" -" -P Jika diset, jangan ikuti symbolic link ketika menjalankan " -"perintah\n" +" -P Jika diset, jangan ikuti symbolic link ketika menjalankan perintah\n" " seperti cd ketika mengubah direktori kerja sekarang.\n" " -T Jika diset, Debug trap diturunkan oleh fungsi shell.\n" " - Assign argumen yang tersisa ke parameter posisi.\n" @@ -4257,6 +4419,24 @@ msgstr "" #: builtins.c:1139 #, 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" @@ -4268,8 +4448,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" @@ -4285,23 +4464,20 @@ msgstr "" " -f\tperlakukan setiap NAMA sebagai sebuah fungsi shell\n" " -v\tperlakukan setiap NAMA sebagai sebuah variabel shell\n" " \n" -" Tanpa pilihan, unset pertama mencoba untuk menunset sebuah variabel, dan " -"jika itu gagal,\n" +" Tanpa pilihan, unset pertama mencoba untuk menunset sebuah variabel, dan jika itu gagal,\n" " mencoba untuk menunset sebuah fungsi.\n" " \n" " Beberapa variabel tidak dapat diunset; Lihat juga `readonly'.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah NAMA adalah baca-saja." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah NAMA adalah baca-saja." #: builtins.c:1161 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" @@ -4316,8 +4492,7 @@ msgstr "" "Set export atribut untuk variabel shell.\n" " \n" " Tandai setiap NAMA untuk otomatis export ke environment setelah\n" -" perintah dijalankan. Jika NILAI diberikan, berikan NILAI sebelum " -"export.\n" +" perintah dijalankan. Jika NILAI diberikan, berikan NILAI sebelum export.\n" " \n" " Pilihan:\n" " -f\tmerujuk ke fungsi shell\n" @@ -4327,11 +4502,28 @@ msgstr "" " Sebuah argumen dari `--' menonaktifkan pemrosesan pilihan selanjutnya.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"NAMA tidak valid." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau NAMA tidak valid." #: builtins.c:1180 #, 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" @@ -4354,22 +4546,19 @@ msgstr "" "Tandai variabel shell sebagai tidak bisa diubah.\n" " \n" " Tandai setiap NAMA sebagai baca-saja; nilai dari NAMA ini tidak boleh\n" -" diubah untuk penggunaan selanjutnya. Jika NILAI diberikan, berikan " -"NILAI\n" +" diubah untuk penggunaan selanjutnya. Jika NILAI diberikan, berikan NILAI\n" " sebelum menandainya sebagai baca-saja.\n" " \n" " Pilihan:\n" " -a\tmerujuk ke aray index variabel\n" " -A\tmerujuk ke variabel aray assosiasi\n" " -f\tmerujuk ke fungsi shell\n" -" -p\tmenampilkan sebuah daftar dari seluruh variabel dan fungsi baca-" -"saja\n" +" -p\tmenampilkan sebuah daftar dari seluruh variabel dan fungsi baca-saja\n" " \n" " Sebuah argumen dari `--' menonaktifkan pemrosesan pilihan selanjutnya.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecual sebuah pilihan tidak valid diberikan atau " -"NAMA tidak valid." +" Mengembalikan sukses kecual sebuah pilihan tidak valid diberikan atau NAMA tidak valid." #: builtins.c:1202 msgid "" @@ -4405,14 +4594,12 @@ msgstr "" "Jalankan perintah dari sebuah berkas dalam shell sekarang.\n" " \n" " Baca dan jalankan perintah dari FILENAME dan kembali. Nama jalur dalam\n" -" $PATH digunakan untuk mencari direktori yang berisi NAMABERKAS. Jika " -"salah satu\n" +" $PATH digunakan untuk mencari direktori yang berisi NAMABERKAS. Jika salah satu\n" " dari ARGUMENTS diberikan, mereka menjadi parameter posisi ketika\n" " NAMABERKAS dijalankan.\n" " \n" " Status Keluar:\n" -" Mengembalikan status dari perintah terakhir yang dijalankan dalam NAMA " -"BERKAS; gagal jika\n" +" Mengembalikan status dari perintah terakhir yang dijalankan dalam NAMA BERKAS; gagal jika\n" " NAMA BERKAS tidak dapat dibaca." #: builtins.c:1245 @@ -4434,15 +4621,90 @@ msgstr "" " Kecuali dipaksa, login shell tidak dapat disuspend.\n" " \n" " Pilihan:\n" -" -f\tpaksa untuk suspend, walaupun jika shell adalah sebuah login " -"shell\n" +" -f\tpaksa untuk suspend, walaupun jika shell adalah sebuah login shell\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau sebuah error terjadi." #: builtins.c:1261 #, 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" @@ -4476,8 +4738,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" @@ -4498,8 +4759,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" @@ -4526,8 +4786,7 @@ msgid "" msgstr "" "Evaluasi ekspresi kondisi.\n" " \n" -" Keluar dengan sebuah status dari 0 (benar) atau 1 (salah) tergantung " -"dari\n" +" Keluar dengan sebuah status dari 0 (benar) atau 1 (salah) tergantung dari\n" " evaluasi dari EXPR. Expresi dapat berupa unary atau binary. Unary\n" " expresi sering digunakan untuk memeriksa status dari sebuah berkas.\n" " Terdapat operator string juga, dan operator pembanding numerik.\n" @@ -4539,8 +4798,7 @@ msgstr "" " -c BERKAS Benar jika berkas adalah karakter spesial.\n" " -d BERKAS Benar jika berkas adalah sebuah direktori.\n" " -e BERKAS Benar jika berkas ada.\n" -" -f BERKAS Benar jika berkas ada dan berupa sebuah berkas " -"regular.\n" +" -f BERKAS Benar jika berkas ada dan berupa sebuah berkas regular.\n" " -g BERKAS Benar jika berkas memiliki set-grup-id.\n" " -h BERKAS Benar jika berkas adalah symbolic link.\n" " -L BERKAS Benar jika berkas adalah symbolic link.\n" @@ -4553,12 +4811,9 @@ msgstr "" " -u BERKAS Benar jika berkas memiliki set-user-id.\n" " -w BERKAS Benar jika berkas dapat ditulis oleh anda.\n" " -x BERKAS Benar jika berkas dapat dijalankan oleh anda.\n" -" -O BERKAS Benar jika berkas secara efektif dimiliki oleh " -"anda.\n" -" -G BERKAS Benar jika berkas secara efektif dimiliki oleh grup " -"anda.\n" -" -N BERKAS Benar jika berkas telah dimodifikasi sejak terakhir " -"ini dibaca.\n" +" -O BERKAS Benar jika berkas secara efektif dimiliki oleh anda.\n" +" -G BERKAS Benar jika berkas secara efektif dimiliki oleh grup anda.\n" +" -N BERKAS Benar jika berkas telah dimodifikasi sejak terakhir ini dibaca.\n" " \n" " FILE1 -nt FILE2 Benar jika file1 lebih baru dari file2 (menurut \n" " tanggal modifikasi).\n" @@ -4579,33 +4834,26 @@ msgstr "" " STRING1 != STRING2\n" " Benar jika string tidak sama.\n" " STRING1 < STRING2\n" -" Benar jika STRING1 sorts sebelum STRING2 " -"lexicographically.\n" +" Benar jika STRING1 sorts sebelum STRING2 lexicographically.\n" " STRING1 > STRING2\n" -" Benar jika STRING1 sorts sesudah STRING2 " -"lexicographically.\n" +" Benar jika STRING1 sorts sesudah STRING2 lexicographically.\n" " \n" " Operator lain:\n" " \n" " -o Pilihan Benar jika pilihan shell OPSI diaktifkan.\n" " ! EXPR Benar jika expr salah.\n" " EXPR1 -a EXPR2 Benar jika kedua expr1 dan expr2 adalah benar.\n" -" EXPR1 -o EXPR2 Benar jika salah satu dari expr1 atau expr2 adalah " -"benar.\n" +" EXPR1 -o EXPR2 Benar jika salah satu dari expr1 atau expr2 adalah benar.\n" " \n" -" arg1 OP arg2 Pemeriksaan arithmetik. OP adalah salah satu dari -" -"eq, -ne,\n" +" arg1 OP arg2 Pemeriksaan arithmetik. OP adalah salah satu dari -eq, -ne,\n" " -lt, -le, -gt, atau -ge.\n" " \n" -" Arithmetic binary operator mengembalikan benar jika ARG1 adalah " -"equal, not-equal,\n" -" less-than, less-than-or-equal, greater-than, atau greater-than-or-" -"equal\n" +" Arithmetic binary operator mengembalikan benar jika ARG1 adalah equal, not-equal,\n" +" less-than, less-than-or-equal, greater-than, atau greater-than-or-equal\n" " than ARG2.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses jika EKSPR mengevaluasi ke benar; gagal jika " -"EXPR mengevaluasi ke\n" +" Mengembalikan sukses jika EKSPR mengevaluasi ke benar; gagal jika EXPR mengevaluasi ke\n" " salah atau sebuah argumen tidak valid diberikan." #: builtins.c:1343 @@ -4624,8 +4872,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" @@ -4633,8 +4880,7 @@ msgid "" msgstr "" "Tampilkan waktu pemrosesan.\n" " \n" -" Tampilkan akumulasi waktu penggunaan pengguna dan sistem untuk shell dan " -"seluruh proses dari\n" +" Tampilkan akumulasi waktu penggunaan pengguna dan sistem untuk shell dan seluruh proses dari\n" " anaknya.\n" " \n" " Status Keluar:\n" @@ -4644,8 +4890,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" @@ -4654,75 +4899,83 @@ 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 or a signal " -"number.\n" +" Each SIGNAL_SPEC is either a signal name in 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 "" "Tangkap sinyal dan even lainnya.\n" " \n" -" Definisikan dan aktivasi handlers yang harus dijalankan ketika shell " -"menerima sinyal\n" +" Definisikan dan aktivasi handlers yang harus dijalankan ketika shell menerima sinyal\n" " atau kondisi lain.\n" " \n" " ARG perintah dibaca dan dijalankan ketika shell menerima\n" " sinyal SIGNAL_SPEC. Jika ARG tidak ada (dan sebuah sinyal SIGNAL_SPEC\n" -" diberikan) atau `-', setiap sinyal yang dispesifikasikan akan direset " -"kenilai\n" -" original. Jika ARG adalah string kosong untuk setiap SIGNAL_SPEC " -"diabaikan oleh\n" +" diberikan) atau `-', setiap sinyal yang dispesifikasikan akan direset kenilai\n" +" original. Jika ARG adalah string kosong untuk setiap SIGNAL_SPEC diabaikan oleh\n" " shell dan oleh perintah yang dipanggil.\n" " \n" -" Jika sebuah SIGNAL_SPEC adalah EXIT(0) perintah ARG dijalankan pada saat " -"keluar dari shell. Jika\n" -" sebuah SIGNAL_SPEC adalah DEBUG, ARG dijalankan setiap perintah " -"sederhana.\n" +" Jika sebuah SIGNAL_SPEC adalah EXIT(0) perintah ARG dijalankan pada saat keluar dari shell. Jika\n" +" sebuah SIGNAL_SPEC adalah DEBUG, ARG dijalankan setiap perintah sederhana.\n" " \n" -" Jika tidak ada argumen yang diberikan, trap menampilkan daftar dari " -"perintah yang berasosiasi\n" +" Jika tidak ada argumen yang diberikan, trap menampilkan daftar dari perintah yang berasosiasi\n" " dengan setiap sinyal.\n" " \n" " Pilihan:\n" -" -l\tmenampilkan sebuah daftar dari nama sinyal dan nomor yang " -"berhubungan\n" -" -p\tmenampilkan perintah trap yang berasosiasi dengan setiap " -"SIGNAL_SPEC\n" +" -l\tmenampilkan sebuah daftar dari nama sinyal dan nomor yang berhubungan\n" +" -p\tmenampilkan perintah trap yang berasosiasi dengan setiap SIGNAL_SPEC\n" " \n" -" Setiap SIGNAL_SPEC yang ada di nama sinyal dalam atau nomor " -"sinyal. Nama sinyal\n" +" Setiap SIGNAL_SPEC yang ada di nama sinyal dalam atau nomor sinyal. Nama sinyal\n" " adalah case insensitive dan SIG prefix adalah opsional. sebuah\n" " sinyal dapat dikirim ke sebuah shell dengan \"kill -signal $$\".\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah SIGSPEC adalah tidak valid atau " -"sebuah pilihan tidak valid diberikan." +" Mengembalikan sukses kecuali sebuah SIGSPEC adalah tidak valid atau sebuah pilihan tidak valid diberikan." #: builtins.c:1400 #, 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" @@ -4748,32 +5001,25 @@ 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 "" "Tampilkan informasi tentang perintah yang diketik.\n" " \n" -" Untuk setiap NAMA, indikasikan bagaimana ini akan diinterpretasikan jika " -"digunakan sebagai sebuah\n" +" Untuk setiap NAMA, indikasikan bagaimana ini akan diinterpretasikan jika digunakan sebagai sebuah\n" " nama perintah.\n" " \n" " Pilihan:\n" -" -a\tmenampilkan seluruh lokasi yang berisi sebuah nama NAMA yang dapat " -"dijalankan;\n" +" -a\tmenampilkan seluruh lokasi yang berisi sebuah nama NAMA yang dapat dijalankan;\n" " \tmeliputi aliases, builtins, dan fungsi, jika dan hanya jika\n" " \tpilihan `-p' juga sedang tidak digunakan\n" " -f\tmenekan pencarian fungsi shell\n" -" -P\tmemaksa sebuah JALUR pencarian untuk setiap NAMA, bahkan jika ini " -"adalah sebuah alias,\n" +" -P\tmemaksa sebuah JALUR pencarian untuk setiap NAMA, bahkan jika ini adalah sebuah alias,\n" " \tbuiltin, atau fungsi, dan mengembalikan nama dari berkas disk\n" " \tyang akan dijalankan\n" " -p\tmengembalikan baik nama dari berkas disk yang akan dijalankan,\n" -" \tatau tidak sama sekali jika `type -t NAME' akan mengembalikan " -"`berkas'.\n" -" -t\tkeluarkan sebuah kata tunggal yang merupakan salah satu dari " -"`alias', `keyword',\n" -" \t`fungsi', `builtin', `berkas', atau `', jika NAMA adalah sebuah alias, " -"shell\n" +" \tatau tidak sama sekali jika `type -t NAME' akan mengembalikan `berkas'.\n" +" -t\tkeluarkan sebuah kata tunggal yang merupakan salah satu dari `alias', `keyword',\n" +" \t`fungsi', `builtin', `berkas', atau `', jika NAMA adalah sebuah alias, shell\n" " \treserved word, fungsi shell, builtin shell, berkas disk, atau\n" " \ttidak ditemukan\n" " \n" @@ -4781,16 +5027,57 @@ msgstr "" " NAMA\tNama perintah yang akan diinterpretasikan.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses jika seluruh dari NAMA ditemukan; gagal jika ada " -"yang tidak ditemukan." +" Mengembalikan sukses jika seluruh dari NAMA ditemukan; gagal jika ada yang tidak ditemukan." #: 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" +#| " -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" @@ -4837,8 +5124,7 @@ msgstr "" "Modifikasi batas sumber daya shell.\n" " \n" " memberikan kontrol terhadap sarana yang tersedia untuk proses\n" -" yang dimulai oleh shell, dalam sistem yang mengijinkan untuk kontrol " -"tersebut.\n" +" yang dimulai oleh shell, dalam sistem yang mengijinkan untuk kontrol tersebut.\n" " \n" " Pilihan:\n" " -S\tgunakan `soft' batas sarana\n" @@ -4860,24 +5146,18 @@ msgstr "" " -v\tukuran dari memori virtual\n" " -x\tjumlah maksimum dari berkas pengunci\n" " \n" -" Jika BATAS diberikan, maka nilai baru yang dispesifikasikan untuk " -"sarana;\n" +" Jika BATAS diberikan, maka nilai baru yang dispesifikasikan untuk sarana;\n" " nilai spesial LIMIT `soft', `hard', dan `unlimited' berarti untuk\n" -" soft limit saat ini, jika hard limit saat ini dan no limit, " -"respectively.\n" -" Jika tidak, nilai sekarang dari sarana yang dispesifikasikan " -"ditampilkan.\n" +" soft limit saat ini, jika hard limit saat ini dan no limit, respectively.\n" +" Jika tidak, nilai sekarang dari sarana yang dispesifikasikan ditampilkan.\n" " Jika tidak ada pilihan yang diberikan, maka -f diasumsikan.\n" " \n" -" Nilai adalah dalam 1024-byte increments, kecuali untuk -t, yang berarti " -"dalam detik\n" -" -p, yang berarti increment dalam 512 bytes, dan -u, yang berarti " -"unscaled dari\n" +" Nilai adalah dalam 1024-byte increments, kecuali untuk -t, yang berarti dalam detik\n" +" -p, yang berarti increment dalam 512 bytes, dan -u, yang berarti unscaled dari\n" " jumlah proses.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:1482 msgid "" @@ -4898,47 +5178,52 @@ msgid "" msgstr "" "Tampilkan atau set mask mode dari berkas.\n" " \n" -" Set pembuatan berkas pengguna mask dengan MODE. Jika MODE diabaikan, " -"tampilkan\n" +" Set pembuatan berkas pengguna mask dengan MODE. Jika MODE diabaikan, tampilkan\n" " nilai dari mask sekarang.\n" " \n" -" Jika MODE diawali dengan sebuah digit, ini diinterpretasikan sebagai " -"sebuah bilangan oktal;\n" -" jika tidak ini adalah sebuah mode simbolik seperti yang diterima oleh " -"chmod(1).\n" +" Jika MODE diawali dengan sebuah digit, ini diinterpretasikan sebagai sebuah bilangan oktal;\n" +" jika tidak ini adalah sebuah mode simbolik seperti yang diterima oleh chmod(1).\n" " \n" " Pilihan:\n" -" -p\tjika MODE diabaikan, keluarkan dalam sebuah format yang bisa " -"digunakan sebagai masukan\n" -" -S\tmembuat keluaran simbolik; jika tidak sebuah bilangan oktal adalah " -"keluarannya\n" +" -p\tjika MODE diabaikan, keluarkan dalam sebuah format yang bisa digunakan sebagai masukan\n" +" -S\tmembuat keluaran simbolik; jika tidak sebuah bilangan oktal adalah keluarannya\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali MODE tidak valid atau sebuah pilihan tidak " -"valid diberikan." +" Mengembalikan sukses kecuali MODE tidak valid atau sebuah pilihan tidak valid diberikan." #: 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" @@ -4951,44 +5236,36 @@ msgid "" msgstr "" "Tunggu untuk penyelesaian pekerjaan dan kembalikan status keluar.\n" " \n" -" Tunggu untuk proses yang diidentifikasikan oleh ID, yang mungkin sebuah " -"proses ID atau sebuah\n" +" Tunggu untuk proses yang diidentifikasikan oleh ID, yang mungkin sebuah proses ID atau sebuah\n" " spesifikasi pekerjaan, dan laporkan status selesainya. Jika ID tidak\n" -" diberikan, tunggu untuk seluruh proses anak yang aktif, dan status " -"kembalian\n" -" adalah nol. Jika ID adalah sebuah spesifikasi pekerjaan, tunggu untuk " -"seluruh proses\n" +" diberikan, tunggu untuk seluruh proses anak yang aktif, dan status kembalian\n" +" adalah nol. Jika ID adalah sebuah spesifikasi pekerjaan, tunggu untuk seluruh proses\n" " dalam pipeline pekerjaan.\n" " \n" " Status Keluar:\n" -" Mengembalikan status dari ID; gagal jika ID tidak valid atau sebuah " -"pilihan tidak\n" +" Mengembalikan status dari ID; gagal jika ID tidak valid atau sebuah pilihan tidak\n" " valid diberikan." #: 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 "" "Tunggu untuk penyelesaian proses dan kembalikan status keluar.\n" " \n" -" Tunggu untuk proses yang dispesifikasikan dan laporkan status " -"selesainya. Jika\n" +" Tunggu untuk proses yang dispesifikasikan dan laporkan status selesainya. Jika\n" " PID tidak diberikan, maka semua aktif proses anak ditunggu,\n" " dan kode kembalian adalah nol. PID dapat berupa proses ID.\n" " \n" " Status Keluar:\n" -" Mengembalikan status dari ID; gagal jika ID tidak valid atau sebuah " -"pilihan tidak valid\n" +" Mengembalikan status dari ID; gagal jika ID tidak valid atau sebuah pilihan tidak valid\n" " diberikan." #: builtins.c:1548 @@ -5005,11 +5282,9 @@ msgid "" msgstr "" "Jalankan perintah untuk setiap anggota dalam sebuah daftar.\n" " \n" -" `for' loop menjalankan urutan dari perintah untuk setiap anggota dalam " -"sebuah\n" +" `for' loop menjalankan urutan dari perintah untuk setiap anggota dalam sebuah\n" " daftar dari items. Jika `in KATA ...;' tidak ada, maka `in \"$@\"' yang\n" -" menjadi asumsi. Untuk setiap elemen dalam KATA, NAMA di set untuk elemen " -"tersebut, dan\n" +" menjadi asumsi. Untuk setiap elemen dalam KATA, NAMA di set untuk elemen tersebut, dan\n" " PERINTAH dijalankan.\n" " \n" " Status Keluar:\n" @@ -5068,14 +5343,12 @@ msgstr "" " \n" " WORDS diexpand, menghasilkan daftar dari kata.\n" " set dari kata yang diexpand ditampilkan dalam standar error, setiap\n" -" keluaran diawali dengan sebuah nomor. Jika `in WORDS' tidak ada, `in \"$@" -"\"'\n" +" keluaran diawali dengan sebuah nomor. Jika `in WORDS' tidak ada, `in \"$@\"'\n" " diasumsikan. Kemudian PS3 prompt ditampilkan dan sebuah baris dibaca\n" " dari standar masukan. Jika baris berisi dari nomor yang\n" " berhubungan dengan salah sata kata yang ditampilkan, maka NAMA diset\n" " ke WORD tersebut. Jika baris kosong, WORDS dan prompt\n" -" ditampilkan kembali. Jika EOF dibaca, perintah selesai. Baris yang " -"dibaca disimpan\n" +" ditampilkan kembali. Jika EOF dibaca, perintah selesai. Baris yang dibaca disimpan\n" " dalam variabel REPLY. PERINTAH dijalankan setelah setiap seleksi\n" " sampai perintah break dijalankan.\n" " \n" @@ -5099,10 +5372,8 @@ msgid "" msgstr "" "Melaporkan waktu yang dihabiskan dalam menjalan eksekusi pipeline.\n" " \n" -" Jalankan PIPELINE dan tampilkan ringkasan dari real time, user CPU " -"time,\n" -" dan sistem CPU time yang dihabiskan dalam menjalankan PIPELINE ketika " -"ini selesai.\n" +" Jalankan PIPELINE dan tampilkan ringkasan dari real time, user CPU time,\n" +" dan sistem CPU time yang dihabiskan dalam menjalankan PIPELINE ketika ini selesai.\n" " \n" " Pilihan:\n" " -p\tmenampilkan ringkasan waktu dalam format portable Posix\n" @@ -5122,8 +5393,7 @@ msgid "" msgstr "" "Menjalankan perintah berdasarkan pencocokan pola.\n" " \n" -" Secara selektif menjalankan PERINTAH berdasarkan dari KATA yang cocok " -"dengan POLA.\n" +" Secara selektif menjalankan PERINTAH berdasarkan dari KATA yang cocok dengan POLA.\n" " `|' digunakan untuk memisahkan beberapa pola. \n" " Status Keluar:\n" " Mengembalikan setatus dari perintah terakhir yang dijalankan." @@ -5132,17 +5402,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" @@ -5150,17 +5415,12 @@ msgid "" msgstr "" "Menjalankan perintah berdasarkan kondisi.\n" " \n" -" Daftar `if PERINTAH' dijalankan. Jika ini memberikan status keluaran " -"nol, maka\n" -" daftar `then PERINTAH' dijalankan. Jika tidak, setiap daftar dari `elif " -"PERINTAH' \n" -" dijalankan satu satu, dan jika ini memberikan status keluaran nol, untuk " -"setiap\n" -" daftar dari `then PERINTAH' yang dijalankan maka perintah `if' selesai. " -"Jika tidak,\n" +" Daftar `if PERINTAH' dijalankan. Jika ini memberikan status keluaran nol, maka\n" +" daftar `then PERINTAH' dijalankan. Jika tidak, setiap daftar dari `elif PERINTAH' \n" +" dijalankan satu satu, dan jika ini memberikan status keluaran nol, untuk setiap\n" +" daftar dari `then PERINTAH' yang dijalankan maka perintah `if' selesai. Jika tidak,\n" " daftar `else PERINTAH' dijalankan, jika ada. Status keluaran dari \n" -" seluruh construct adalah status keluaran dari perintah terakhir yang " -"dijalankan, atau nol\n" +" seluruh construct adalah status keluaran dari perintah terakhir yang dijalankan, atau nol\n" " jika tidak ada kondisi yang diperiksa benar.\n" " \n" " Status Keluar:\n" @@ -5202,7 +5462,6 @@ msgstr "" " Mengembalikan status dari perintah terakhir yang dijalankan." #: builtins.c:1671 -#, fuzzy msgid "" "Create a coprocess named NAME.\n" " \n" @@ -5223,15 +5482,14 @@ msgstr "" " Nama baku adalah \"COPROC\".\n" " \n" " Status Keluar:\n" -" Mengembalikan status keluar dari PERINTAH." +" Perintah coproc mengembalikan status keluar 0." #: builtins.c:1685 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" @@ -5240,10 +5498,8 @@ msgid "" msgstr "" "Definisikan fungsi shell.\n" " \n" -" Buat sebuah fungsi shell dengan nama NAMA. Ketika dipanggil sebagai " -"sebuah perintah sederhana,\n" -" NAMA menjalankan PERINTAH dalam context shell pemanggil. Ketika NAMA " -"dipanggil,\n" +" Buat sebuah fungsi shell dengan nama NAMA. Ketika dipanggil sebagai sebuah perintah sederhana,\n" +" NAMA menjalankan PERINTAH dalam context shell pemanggil. Ketika NAMA dipanggil,\n" " argumen dilewatkan ke fungsi sebagai $1...$n, dan nama fungsi\n" " dalam $FUNCNAME.\n" " \n" @@ -5262,8 +5518,7 @@ msgid "" msgstr "" "Grup perintah sebagai sebuah unit.\n" " \n" -" Jalankan sebuah set dari perintah dalam grup. Ini adalah salah satu cara " -"untuk meredirect\n" +" Jalankan sebuah set dari perintah dalam grup. Ini adalah salah satu cara untuk meredirect\n" " seluruh set dari perintah.\n" " \n" " Status Keluar:\n" @@ -5285,19 +5540,15 @@ msgstr "" "Melanjutkan pekerjaan dalam foreground.\n" " \n" " Sama dengan JOB_SPEC argumen untuk perintah `fg'. Melanjutkan sebuah\n" -" pekerjaan yang telah berhenti atau menjadi background. JOB_SPEC dapat " -"dispesifikasikan dengan nama job\n" -" atau nomor job. JOB_SPEC diikuti dengan sebuah `&' menempatkan job " -"dalam\n" -" background, seperti dalam spesifikasi pekerjaan yang telah " -"dispesifikasikan sebagai sebuah\n" +" pekerjaan yang telah berhenti atau menjadi background. JOB_SPEC dapat dispesifikasikan dengan nama job\n" +" atau nomor job. JOB_SPEC diikuti dengan sebuah `&' menempatkan job dalam\n" +" background, seperti dalam spesifikasi pekerjaan yang telah dispesifikasikan sebagai sebuah\n" " argumen untuk `bg'.\n" " \n" " Status Keluar:\n" " Mengembalikan status dari pekerjaan yang dilanjutkan." #: builtins.c:1726 -#, fuzzy msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5310,7 +5561,7 @@ 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." @@ -5319,12 +5570,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" @@ -5345,28 +5593,20 @@ msgstr "" "Menjalankan perintah kondisional.\n" " \n" " Mengembalikan sebuah status dari 0 atau 1 tergantung dari evaluasi dari\n" -" kondisi expresi EXPRESI. Expresi disusun dari primari yang sama dari " -"yang digunakan\n" -" oleh `test' builtin, dan boleh dikombinasikan dengan menggunakan " -"operator berikut\n" +" kondisi expresi EXPRESI. Expresi disusun dari primari yang sama dari yang digunakan\n" +" oleh `test' builtin, dan boleh dikombinasikan dengan menggunakan operator berikut\n" " \n" " ( EXPRESI )\tMengembalikan nilai dari EXPRESI\n" -" ! EXPRESI\t\tBenar jika kedua EXPR1 dan EXPR2 adalah benar; selain itu " -"salah\n" -" EXPR1 && EXPR2\tBenar jika kedua EXPR1 dan EXPR2 adalah benar; selain " -"itu salah\n" -" EXPR1 || EXPR2\tBenar jika salah satu EXPR1 atau EXPR2 adalah benar; " -"selain itu salah\n" -" \n" -" Ketika operator `==' dan `!=' digunakan, string yang disebelah kanan " -"dari \n" -" operator yang digunakan sebagai sebuah pola dan pencocokan pola " -"dilakukan.\n" +" ! EXPRESI\t\tBenar jika kedua EXPR1 dan EXPR2 adalah benar; selain itu salah\n" +" EXPR1 && EXPR2\tBenar jika kedua EXPR1 dan EXPR2 adalah benar; selain itu salah\n" +" EXPR1 || EXPR2\tBenar jika salah satu EXPR1 atau EXPR2 adalah benar; selain itu salah\n" +" \n" +" Ketika operator `==' dan `!=' digunakan, string yang disebelah kanan dari \n" +" operator yang digunakan sebagai sebuah pola dan pencocokan pola dilakukan.\n" " Ketika operator `=~' digunakan, string yang dikanan dari operator\n" " dicocokan sebagai sebuah ekspresi regular.\n" " \n" -" Operator && dan || tidak mengevaluasi EXPR2 jika EXPR1 tidak mencukupi " -"untuk\n" +" Operator && dan || tidak mengevaluasi EXPR2 jika EXPR1 tidak mencukupi untuk\n" " menentukan nilai dari expresi.\n" " \n" " Status Keluar:\n" @@ -5428,11 +5668,9 @@ msgstr "" "Nama variabel shell umum dan penggunaannya.\n" " \n" " BASH_VERSION\tInformasi versi dari Bash ini.\n" -" CDPATH\tSebuah daftar yang dipisahkan oleh titik dua dari direktori " -"untuk mencari\n" +" CDPATH\tSebuah daftar yang dipisahkan oleh titik dua dari direktori untuk mencari\n" " \t\tdirektori yang diberikan sebagai argumen untuk `cd'.\n" -" GLOBIGNORE\tSebuah daftar pola yang dipisahkan dengan titik dua " -"menjelaskan nama berkas yang\n" +" GLOBIGNORE\tSebuah daftar pola yang dipisahkan dengan titik dua menjelaskan nama berkas yang\n" " \t\tdiabaikan oleh pathname expansion.\n" " HISTFILE\tNama dari berkas dimana sejara perintah anda disimpan.\n" " HISTFILESIZE\tJumlah maksimum dari baris dimana berkas ini berisi.\n" @@ -5446,18 +5684,14 @@ msgstr "" " \t\tdari jumlah karakter EOF yang bisa diterima\n" " \t\tdalam sebuah baris dalam baris kosong sebelum shell keluar\n" " \t\t(default 10). Ketika diunset, EOF menandakan akhir dari masukan.\n" -" MACHTYPE\tSebuah kata yang menjelaskan system yang berjalan ketika Bash " -"berjalan.\n" +" MACHTYPE\tSebuah kata yang menjelaskan system yang berjalan ketika Bash berjalan.\n" " MAILCHECK\tSeberapa sering, dalam detik, Bash memeriksa pesan baru.\n" -" MAILPATH\tDaftar dari nama berkas yang dipisahkan oleh titik-dua dimana " -"Bash memeriksa\n" +" MAILPATH\tDaftar dari nama berkas yang dipisahkan oleh titik-dua dimana Bash memeriksa\n" " \t\tpesan baru.\n" " OSTYPE\tVersi Unix dari Versi Bash yang sedang berjalan.\n" -" PATH\tDaftar direktori yang dipisahkan oleh titik-dua untuk mencari " -"ketika\n" +" PATH\tDaftar direktori yang dipisahkan oleh titik-dua untuk mencari ketika\n" " \t\tmencari perintah.\n" -" PROMPT_COMMAND\tSebuah perintah yang dijalankan sebelum menampilkan " -"setiap\n" +" PROMPT_COMMAND\tSebuah perintah yang dijalankan sebelum menampilkan setiap\n" " \t\tmasukan utama.\n" " PS1\t\tKata prompt utama.\n" " PS2\t\tKata prompt kedua.\n" @@ -5466,14 +5700,11 @@ msgstr "" " TERM\tNama dari tipe terminal sekarang.\n" " TIMEFORMAT\tFormat keluaran dari statistik waktu yang ditampilkan oleh\n" " \t\t`time' kata yang direserved.\n" -" auto_resume\tTidak kosong berarti sebuah kata perintah akan munncul di " -"sebuah baris dengan\n" +" auto_resume\tTidak kosong berarti sebuah kata perintah akan munncul di sebuah baris dengan\n" " \t\tsendirinya adalah pertama dicari dalam daftar dari\n" -" \t\tpekerjaan yang terhenti sekarang. Jika ditemukan disana, maka " -"pekerjaan intu di foregroundkan.\n" +" \t\tpekerjaan yang terhenti sekarang. Jika ditemukan disana, maka pekerjaan intu di foregroundkan.\n" " \t\tNila dari `exact' berarti kata perintah harus\n" -" \t\tcocok secara tepat dalam daftar dari pekerjaan yang terhenti. " -"Sebuah\n" +" \t\tcocok secara tepat dalam daftar dari pekerjaan yang terhenti. Sebuah\n" " \t\tNila dari `substring' berarti bahwa kata perintah harus cocok\n" " \t\tdengan substring dari pekerjaan. Nilai yang lain berarti\n" " \t\tperintah harus diawali dari sebuah pekerjaan yang terhenti.\n" @@ -5482,12 +5713,39 @@ msgstr "" " \t\tpengganti sejarah, biasanya `!'. Karakter kedua\n" " \t\tdari `quick substitution', biasanya `^'. Karakter\n" " \t\tketiga adalah karakter `history comment'. biasanya `#',\n" -" HISTIGNORE\tSebuah daftar pola yang dipisahkan oleh titik dua yang " -"digunakan untuk menentukan dimana\n" +" HISTIGNORE\tSebuah daftar pola yang dipisahkan oleh titik dua yang digunakan untuk menentukan dimana\n" " \t\tperintah seharusnya disimpan dalam daftar sejarah.\n" #: builtins.c:1821 #, 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" @@ -5524,8 +5782,7 @@ msgstr "" " Tanpa argumen, menukar top dari dua direktori.\n" " \n" " Pilihan:\n" -" -n\tmenekan perubahan normal dari direktori ketika menambahkan " -"direktori\n" +" -n\tmenekan perubahan normal dari direktori ketika menambahkan direktori\n" " \tke stack, jadi hanya stack yang dimanipulasi.\n" " \n" " Argumen:\n" @@ -5543,12 +5800,35 @@ msgstr "" " Builtin `dirs' menampilkan direktori stack.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali ada sebuah argumen tidak valid diberikan " -"atau pemindahan\n" +" Mengembalikan sukses kecuali ada sebuah argumen tidak valid diberikan atau pemindahan\n" " direktori gagal." #: builtins.c:1855 #, 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" @@ -5581,30 +5861,50 @@ msgstr "" " direktori baru.\n" " \n" " Pilihan:\n" -" -n\tmenekan perubahan normal dari direktori ketika menghapus " -"direktori\n" +" -n\tmenekan perubahan normal dari direktori ketika menghapus direktori\n" " \tdari stack, jadi hanya stack yang dimanipulasi.\n" " \n" " Argumen:\n" " +N\tmenghapus masukan ke N dihitung dari kiri dari daftar\n" -" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd " -"+0'\n" +" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd +0'\n" " \tmenghapus direktori terakhir, `popd +1' sebelum terakhir.\n" " \n" " -N\tmenghapus masukan ke N dihitung dari kanan dari daftar\n" -" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd " -"-0'\n" +" \tyang ditampilkan oleh `dirs', dimulai dari nol. Sebagai contoh: `popd -0'\n" " \tmenghapus direktori terakhir, `popd -1' sebelum terakhir.\n" " \n" " Builtin `dirs' menampilkan direktori stack.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali ada sebuah argumen tidak valid diberikan " -"atau pemindahan\n" +" Mengembalikan sukses kecuali ada sebuah argumen tidak valid diberikan atau pemindahan\n" " direktori gagal." #: builtins.c:1885 #, 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" @@ -5635,33 +5935,44 @@ msgstr "" "Menampilkan direktori stack.\n" " \n" " Menampilkan daftar dari direktori yang diingat saat ini. Direktori\n" -" menemukan jalannya kedalam daftar dengan perintah `pushd'; anda dapat " -"memperoleh\n" +" menemukan jalannya kedalam daftar dengan perintah `pushd'; anda dapat memperoleh\n" " backup melalui daftar dengan perintah `popd'.\n" " \n" " Pilihan:\n" " -c\tmenghapus direktori stack dengan menghapus seluruh elemen.\n" -" -l\tjangan menampilkan versi yang diawali tilde dari direktori yang " -"relatif\n" +" -l\tjangan menampilkan versi yang diawali tilde dari direktori yang relatif\n" " \tke direktori rumah anda\n" " -p\tmenampilkan direktori stack dengan satu masukan setiap baris\n" -" -v\tmenampilkan direktori stack dengan satu masukan setiap baris " -"diawali\n" +" -v\tmenampilkan direktori stack dengan satu masukan setiap baris diawali\n" " \tdengan posisinya dalam stack\n" " Argumen:\n" -" +N\tmenampilkan masukan ke N dihitung dari kiri dari daftar yang " -"ditampilkan oleh\n" +" +N\tmenampilkan masukan ke N dihitung dari kiri dari daftar yang ditampilkan oleh\n" " \tdirs ketika dijalankan tanpa pilihan, dimulai dari nol.\n" " \n" -" -N\tmenampilkan masukan ke N dihitung dari kanan dari daftar yang " -"ditampilkan oleh\n" +" -N\tmenampilkan masukan ke N dihitung dari kanan dari daftar yang ditampilkan oleh\n" " \tdirs ketika dijalankan tanpa pilihan, dimulai dari nol. \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali ada sebuah pilihan tidak valid diberikan " -"atau sebuah error terjadi." +" Mengembalikan sukses kecuali ada sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:1916 #, 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" @@ -5688,19 +5999,46 @@ msgstr "" " \n" " Pilihan:\n" " -o\tbatasi OPTNAME ke definisi untuk digunakan dengan `set -o'\n" -" -p\ttampilkan setiap pilihan shell dengan sebuah indikasi dari " -"statusnya\n" +" -p\ttampilkan setiap pilihan shell dengan sebuah indikasi dari statusnya\n" " -q\ttekan keluaran\n" " -s\taktifkan (set) setiap OPTNAME\n" " -u\tnonaktifkan (unset) setiap OPTNAME\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses jika OPTNAME diaktifkan; gagal jika sebuah pilihan " -"tidak valid diberikan\n" +" Mengembalikan sukses jika OPTNAME diaktifkan; gagal jika sebuah pilihan tidak valid diberikan\n" " atau OPTNAME dinonaktifkan." #: builtins.c:1937 #, 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" @@ -5708,34 +6046,27 @@ 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 "" "Format dan tampilkan ARGUMEN dalam kontrol dari FORMAT.\n" @@ -5744,35 +6075,50 @@ msgstr "" " -v var\tkeluaran ditempatkan dalam sebuah nilai dari variabel\n" " shell VAR daripada dikirimkan ke keluaran standar.\n" " \n" -" FORMAT adalah sebuah karakter string yang berisi dari tiga tipe dari " -"objects: plain\n" -" karakter, yang disalin secara sederhana dari keluaran standar, karakter " -"escape\n" +" FORMAT adalah sebuah karakter string yang berisi dari tiga tipe dari objects: plain\n" +" karakter, yang disalin secara sederhana dari keluaran standar, karakter escape\n" " sequences yang mengubah dan menyalin keluaran standar, dan\n" " spesifikasi format, yang selalu menampilkan argumen\n" " \n" " Tambahan dari spesifikasi standar printf(1) formats dan\n" " printf(3), printf menginterprestasikan:\n" " \n" -" %b berarti untuk menexpand backslash escape sequences dalam argumen " -"yang sesuai\n" -" %q berarti meng-quote argumen dalam sebuah cara yang dapat digunakan " -"sebagai masukan shell.\n" +" %b berarti untuk menexpand backslash escape sequences dalam argumen yang sesuai\n" +" %q berarti meng-quote argumen dalam sebuah cara yang dapat digunakan sebagai masukan shell.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah penulisan atau penempatan\n" +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah penulisan atau penempatan\n" " error terjadi." #: 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" +#| " \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" @@ -5787,30 +6133,23 @@ 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 "" "Spesifikasikan bagaimana argumen akan diselesaikan oleh Readline.\n" " \n" -" Untuk setiap NAMA, spesifikasikan bagaimana argumen akan diselesaikan. " -"Jika tidak ada pilihan\n" -" yang diberikan, spesifikasi penyelesaian yang sudah ada akan ditampilkan " -"dalam cara\n" +" Untuk setiap NAMA, spesifikasikan bagaimana argumen akan diselesaikan. Jika tidak ada pilihan\n" +" yang diberikan, spesifikasi penyelesaian yang sudah ada akan ditampilkan dalam cara\n" " yang diperbolehkan untuk digunakan sebagai masukan.\n" " \n" " Pilihan:\n" -" -p\ttampilkan spesifikasi penyelesaian yang telah ada dalam format " -"yang berguna\n" -" -r\thapus sebuah spesifikasi penyelesaian untuk setiap NAMA, atau jika " -"tidak ada\n" +" -p\ttampilkan spesifikasi penyelesaian yang telah ada dalam format yang berguna\n" +" -r\thapus sebuah spesifikasi penyelesaian untuk setiap NAMA, atau jika tidak ada\n" " \tNAMA yang diberikan, seluruh spesifikasi penyelesaian\n" -" -D\taplikasikan pelengkapan dan aksi sebagai perintah baku tanpa " -"pelengkapan\n" +" -D\taplikasikan pelengkapan dan aksi sebagai perintah baku tanpa pelengkapan\n" " \tspesifik yang didefinisikan\n" " -E\taplikasikan pelengkapan dan aksi ke perintah \"empty\" --\n" " \tpelengkapan dilakukan di baris kosong\n" @@ -5819,16 +6158,14 @@ msgstr "" " huruf besar pilihan yang ditampilkan diatas.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:2001 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" @@ -5836,26 +6173,46 @@ msgid "" msgstr "" "Menampilkan kemungkinan penyelesaian tergantung dari pilihan.\n" " \n" -" Ditujukan untuk digunakan dari dalam sebuah fungsi shell yang " -"menghasilkan kemungkinan untuk completions.\n" +" Ditujukan untuk digunakan dari dalam sebuah fungsi shell yang menghasilkan kemungkinan untuk completions.\n" " Jika argumen WORD opsional yang diberikan, cocok dengan WORD telah\n" " dihasilkan.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"sebuah error terjadi." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:2016 #, 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" @@ -5879,12 +6236,9 @@ msgid "" msgstr "" "Modifikasi atau tampilkan pilihan penyelesaian.\n" " \n" -" Modifikasi pilihan penyelesaian untuk setiap NAMA, atau, jika tidaka ada " -"NAMA yang diberikan,\n" -" penyelesaian mulai dijalankan. Jika tidak ada OPSI yang diberikan, " -"tampilkan\n" -" pilihan penyelesaian untuk setiap NAMA atau spesifikasi penyelesaian " -"sekarang.\n" +" Modifikasi pilihan penyelesaian untuk setiap NAMA, atau, jika tidaka ada NAMA yang diberikan,\n" +" penyelesaian mulai dijalankan. Jika tidak ada OPSI yang diberikan, tampilkan\n" +" pilihan penyelesaian untuk setiap NAMA atau spesifikasi penyelesaian sekarang.\n" " \n" " Pilihan:\n" " \t-o option\tSet pilihan penyelesaian OPSI untuk setiap NAMA\n" @@ -5895,41 +6249,62 @@ msgstr "" " \n" " Argumen:\n" " \n" -" Setiap NAMA yang dirujuk dalam sebuah perintah untuk sebuah spesifikasi " -"penyelesaian harus\n" -" sebelumnya telah didefinisikan dengan menggunakan builtin `complete'. " -"Jika tidak ada NAMA\n" -" yang diberikan, compopt harus dipanggil oleh sebuah fungsi yang dibuat " -"oleh penyelesaian sekarang,\n" +" Setiap NAMA yang dirujuk dalam sebuah perintah untuk sebuah spesifikasi penyelesaian harus\n" +" sebelumnya telah didefinisikan dengan menggunakan builtin `complete'. Jika tidak ada NAMA\n" +" yang diberikan, compopt harus dipanggil oleh sebuah fungsi yang dibuat oleh penyelesaian sekarang,\n" " dan pilihan untuk menjalankan penyelesaian sekarang\n" " telah dimodifikasi.\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"NAMA tidak memiliki\n" +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau NAMA tidak memiliki\n" " spesifikasi penyelesaian yang terdefinisi." #: builtins.c:2047 #, 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" @@ -5942,13 +6317,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 "" "Baca baris dari standar masukan kedalam sebuah susunan variabel.\n" @@ -5958,34 +6331,26 @@ msgstr "" " ARRAY baku.\n" " \n" " Pilihan:\n" -" -n count\tSalin di baris COUNT. Jika COUNT adalah 0, semua baris " -"disalin.\n" -" -O origin\tAwal penempatan ke ARRAY di index ORIGIN. Indeks baku " -"adalah 0.\n" +" -n count\tSalin di baris COUNT. Jika COUNT adalah 0, semua baris disalin.\n" +" -O origin\tAwal penempatan ke ARRAY di index ORIGIN. Indeks baku adalah 0.\n" " -s count \tAbaikan baris COUNT pertama yang dibaca.\n" " -t\t\tHapus sebuah akhiran baris baru dari setiap baris yang dibaca.\n" -" -u fd\t\tBaca baris dari berkas deskripsi FD daripada dari masukan " -"standar.\n" -" -C callback\tEvaluasi CALLBACK untuk setiap waktu QUANTUM baris adalah " -"baca.\n" -" -c quantum\tSpesifikasikan jumlah dari baris yang dibaca diantara " -"setiap pemanggilan ke CALLBACK.\n" +" -u fd\t\tBaca baris dari berkas deskripsi FD daripada dari masukan standar.\n" +" -C callback\tEvaluasi CALLBACK untuk setiap waktu QUANTUM baris adalah baca.\n" +" -c quantum\tSpesifikasikan jumlah dari baris yang dibaca diantara setiap pemanggilan ke CALLBACK.\n" " \n" " Argumen:\n" " ARRAY\t\tNama variabel array yang digunakan untuk berkas data.\n" " \n" -" Jika -C Diberikan tanpa -c, default quantum adalah 5000. Ketika " -"CALLBACK\n" +" Jika -C Diberikan tanpa -c, default quantum adalah 5000. Ketika CALLBACK\n" " dievaluasi , ini diberikan ke indeks dari element 'array' selanjutnya\n" " untuk di-'assign' sebagai sebuah argumen tambahan.\n" " \n" -" Jika tidak diberikan dengan asal secara eksplisit, berkas peta akan " -"menghapus ARRAY sebelum\n" +" Jika tidak diberikan dengan asal secara eksplisit, berkas peta akan menghapus ARRAY sebelum\n" " ditempatkan kepadanya\n" " \n" " Status Keluar:\n" -" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau " -"ARRAY adalah baca-saja." +" Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau ARRAY adalah baca-saja." #: builtins.c:2083 msgid "" @@ -5997,10 +6362,6 @@ msgstr "" " \n" " Sebuah sinonim untuk `mapfile'." -#, fuzzy -#~ msgid "Copyright (C) 2019 Free Software Foundation, Inc." -#~ msgstr "Hak Cipta (C) 2013 Free Software Foundation, Inc." - #~ msgid "" #~ "Returns the context of the current subroutine call.\n" #~ " \n" @@ -6016,6 +6377,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 ":" @@ -6039,58 +6403,44 @@ msgstr "" #~ "; 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" +#~ " The value of EXPR indicates how many call frames to go back before the\n" #~ " current one; the top frame is frame 0." #~ msgstr "" #~ "; informasi tambahan ini dapat digunakan untuk\n" #~ " menyediakan penelusuran 'stack'.\n" #~ " \n" -#~ " Nilai dari EXPR mengindikasikan berapa banyak panggilan 'frame' untuk " -#~ "kembali\n" +#~ " Nilai dari EXPR mengindikasikan berapa banyak panggilan 'frame' untuk kembali\n" #~ " sebelum saat ini; 'frame' paling atas adalah 'frame' 0." #~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" #~ msgstr "Hak Cipta (C) 2009 Free Software Foundation, Inc.\n" -#~ msgid "" -#~ "License GPLv2+: GNU GPL version 2 or later \n" -#~ msgstr "" -#~ "Lisensi GPLv2+: GNU GPL versi 2 atau sesudahnya \n" +#~ msgid "License GPLv2+: GNU GPL version 2 or later \n" +#~ msgstr "Lisensi GPLv2+: GNU GPL versi 2 atau sesudahnya \n" #~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "" -#~ "xrealloc: tidak dapat menrealokasikan %lu bytes (%lu bytes teralokasikan)" +#~ msgstr "xrealloc: tidak dapat menrealokasikan %lu bytes (%lu bytes teralokasikan)" #~ msgid "xrealloc: cannot allocate %lu bytes" #~ msgstr "xrealloc: tidak dapat mengalokasikan %lu bytes" #~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" -#~ msgstr "" -#~ "xrealloc: %s: %d: tidak dapat melakukan reallokasi %lu bytes (%lu bytes " -#~ "teralokasi)" +#~ msgstr "xrealloc: %s: %d: tidak dapat melakukan reallokasi %lu bytes (%lu bytes teralokasi)" #~ msgid " " #~ msgstr " " #~ msgid "Without EXPR, returns returns \"$line $filename\". With EXPR," -#~ msgstr "" -#~ "Tanpa EXPR, mengembalikan kembalian \"$line $filename\". Dengan EXPR," +#~ msgstr "Tanpa EXPR, mengembalikan kembalian \"$line $filename\". Dengan EXPR," #~ msgid "returns \"$line $subroutine $filename\"; this extra information" -#~ msgstr "" -#~ "mengembalikan \"$line $subroutine $filename\"; informasi tambahan ini" +#~ msgstr "mengembalikan \"$line $subroutine $filename\"; informasi tambahan ini" #~ msgid "can be used used to provide a stack trace." #~ msgstr "dapat digunakan untuk menyediakan jejak sebuah stack." -#~ msgid "" -#~ "The value of EXPR indicates how many call frames to go back before the" -#~ msgstr "" -#~ "Nilai dari EXPR mengindikasikan berapa banyak call frames untuk kembali " -#~ "sebelum" +#~ msgid "The value of EXPR indicates how many call frames to go back before the" +#~ msgstr "Nilai dari EXPR mengindikasikan berapa banyak call frames untuk kembali sebelum" #~ msgid "current one; the top frame is frame 0." #~ msgstr "salah satu ini; top frame adalah frame 0." @@ -6105,63 +6455,43 @@ msgstr "" #~ msgstr "Tampilkan daftar dari direktori yang diingat sekarang. Direktori" #~ msgid "find their way onto the list with the `pushd' command; you can get" -#~ msgstr "" -#~ "menemukan jalannya sendiri kedalam daftar dengan perintah `pushd'; anda " -#~ "dapat memperoleh" +#~ msgstr "menemukan jalannya sendiri kedalam daftar dengan perintah `pushd'; anda dapat memperoleh" #~ msgid "back up through the list with the `popd' command." #~ msgstr "bantuan melalui daftar dari perintah `popd'." -#~ msgid "" -#~ "The -l flag specifies that `dirs' should not print shorthand versions" -#~ msgstr "" -#~ "Flag -l menspesifikasikan bahwa `dirs' seharusnya tidak menampilkan versi " -#~ "pendek" +#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions" +#~ msgstr "Flag -l menspesifikasikan bahwa `dirs' seharusnya tidak menampilkan versi pendek" -#~ 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 "dari direktori yang relatif dari direktori home anda. Ini berarti" #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" -#~ msgstr "" -#~ "bahwa `~/bin' mungkin ditampilkan sebagai `/homes/bfox/bin'. Pilihan -v" +#~ msgstr "bahwa `~/bin' mungkin ditampilkan sebagai `/homes/bfox/bin'. Pilihan -v" #~ msgid "causes `dirs' to print the directory stack with one entry per line," -#~ msgstr "" -#~ "menyebabkan `dirs' ditampilkan di stack direktori dengan satu masukan per " -#~ "baris," +#~ msgstr "menyebabkan `dirs' ditampilkan di stack direktori dengan satu masukan per baris," -#~ 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 "mendahului nama direktori dengan posisinya dalam stack. Pilihan -p" #~ msgid "flag does the same thing, but the stack position is not prepended." #~ msgstr "melakukan hal yang sama, tetapi posisi stack tidak didahului." -#~ msgid "" -#~ "The -c flag clears the directory stack by deleting all of the elements." -#~ msgstr "" -#~ "Pilihan -c menghapus direktori stack dengan cara menghapus seluruh elemen." +#~ msgid "The -c flag clears the directory stack by deleting all of the elements." +#~ msgstr "Pilihan -c menghapus direktori stack dengan cara menghapus seluruh elemen." -#~ msgid "" -#~ "+N displays the Nth entry counting from the left of the list shown by" -#~ msgstr "" -#~ "+N menampilkan masukan ke N dihitung dari kiri dari daftar yang " -#~ "ditampilkan oleh" +#~ msgid "+N displays the Nth entry counting from the left of the list shown by" +#~ msgstr "+N menampilkan masukan ke N dihitung dari kiri dari daftar yang ditampilkan oleh" #~ msgid " dirs when invoked without options, starting with zero." #~ msgstr " dirs ketika dipanggil tanpa pilihan, dimulai dengan nol." -#~ msgid "" -#~ "-N displays the Nth entry counting from the right of the list shown by" -#~ msgstr "" -#~ "-N menampilkan masukan ke N dihitung dari kanan dari daftar yang " -#~ "ditampilkan dengan" +#~ msgid "-N displays the Nth entry counting from the right of the list shown by" +#~ msgstr "-N menampilkan masukan ke N dihitung dari kanan dari daftar yang ditampilkan dengan" #~ msgid "Adds a directory to the top of the directory stack, or rotates" -#~ msgstr "" -#~ "menambahkan sebuah direktori ke ujung atas dari direktori stack, atau " -#~ "memutar" +#~ msgstr "menambahkan sebuah direktori ke ujung atas dari direktori stack, atau memutar" #~ msgid "the stack, making the new top of the stack the current working" #~ msgstr "stack, membuat sebuah top baru dari stack direktori yang dipakai" @@ -6173,8 +6503,7 @@ msgstr "" #~ msgstr "+N Memutar stack sehingga direktori ke N (dihitung" #~ msgid " from the left of the list shown by `dirs', starting with" -#~ msgstr "" -#~ " dari kiri dari daftar yang ditampilkan oleh `dirs', dimulai dari" +#~ msgstr " dari kiri dari daftar yang ditampilkan oleh `dirs', dimulai dari" #~ msgid " zero) is at the top." #~ msgstr " nol) ini dilakukan di top." @@ -6183,12 +6512,10 @@ msgstr "" #~ msgstr "-N Memutar stact sehingga direktori ke N (dihitung" #~ msgid " from the right of the list shown by `dirs', starting with" -#~ msgstr "" -#~ " dari kanan dari daftar yang ditampilkan oleh `dirs', dimulai dengan" +#~ msgstr " dari kanan dari daftar yang ditampilkan oleh `dirs', dimulai dengan" #~ msgid "-n suppress the normal change of directory when adding directories" -#~ msgstr "" -#~ "-n menekan perubahan normal dari direktori ketika menambahkan direktori" +#~ msgstr "-n menekan perubahan normal dari direktori ketika menambahkan direktori" #~ msgid " to the stack, so only the stack is manipulated." #~ msgstr " ke stack, jadi hanya stack yang dimanipulasi." @@ -6224,13 +6551,10 @@ msgstr "" #~ msgstr " yang terlihat oleh `dirs', dimulai dari nol. Contoh: `popd -0'" #~ msgid " removes the last directory, `popd -1' the next to last." -#~ msgstr "" -#~ " menghapus direktori terakhir, `popd -1' selanjutnya ke terakhir." +#~ msgstr " menghapus direktori terakhir, `popd -1' selanjutnya ke terakhir." -#~ msgid "" -#~ "-n suppress the normal change of directory when removing directories" -#~ msgstr "" -#~ "-n menekan perubahan normal dari direktori ketika menghapus direktori" +#~ msgid "-n suppress the normal change of directory when removing directories" +#~ msgstr "-n menekan perubahan normal dari direktori ketika menghapus direktori" #~ msgid " from the stack, so only the stack is manipulated." #~ msgstr " dari stack, sehingga hanya stack yang dimanipulasi." @@ -6257,8 +6581,7 @@ msgstr "" #~ "Exit from within a FOR, WHILE or UNTIL loop. If N is specified,\n" #~ " break N levels." #~ msgstr "" -#~ "Keluar dari dalam sebuah FOR, WHILE, atau UNTIL loop. jika N " -#~ "dispesifikasikan,\n" +#~ "Keluar dari dalam sebuah FOR, WHILE, atau UNTIL loop. jika N dispesifikasikan,\n" #~ " break N levels." #~ msgid "" @@ -6266,10 +6589,8 @@ msgstr "" #~ " shell builtin to be a function, but need the functionality of the\n" #~ " builtin within the function itself." #~ msgstr "" -#~ "Jalankan sebuah builtin shell. Ini akan berguna ketika anda mengharapkan " -#~ "untuk mengganti nama sebuah\n" -#~ " shell builting ke sebuah fungsi, tetapi membutuhkan sebuah " -#~ "fungsionalitas dari\n" +#~ "Jalankan sebuah builtin shell. Ini akan berguna ketika anda mengharapkan untuk mengganti nama sebuah\n" +#~ " shell builting ke sebuah fungsi, tetapi membutuhkan sebuah fungsionalitas dari\n" #~ " sebuah fungsi builtin itu sendiri." #~ msgid "" @@ -6277,8 +6598,7 @@ msgstr "" #~ " the physical directory, without any symbolic links; the -L option\n" #~ " makes pwd follow symbolic links." #~ msgstr "" -#~ "Tampilkan direktori yang sedang digunakan saat ini. Dengan pilihan -P, " -#~ "pwd menampilkan\n" +#~ "Tampilkan direktori yang sedang digunakan saat ini. Dengan pilihan -P, pwd menampilkan\n" #~ " direktori physical, tanpa symbolic link yang lain; dengan pilihan -L\n" #~ " membuat pwd mengikuti symbolic links." @@ -6288,23 +6608,16 @@ msgstr "" #~ 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" +#~ " 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 "" -#~ "Menjalankan PERINTAH dengan ARGS mengabaikan fungsi shell. Jika anda " -#~ "memiliki sebuah shell\n" -#~ " fungsi yang memanggil `ls', dan anda berharap untuk memanggil " -#~ "perintah `ls', anda dapat\n" -#~ " mengatakan \"command ls\". Jika pilihan -p diberikan, sebuah nilai " -#~ "default digunakan\n" +#~ "Menjalankan PERINTAH dengan ARGS mengabaikan fungsi shell. Jika anda memiliki sebuah shell\n" +#~ " fungsi yang memanggil `ls', dan anda berharap untuk memanggil perintah `ls', anda dapat\n" +#~ " mengatakan \"command ls\". Jika pilihan -p diberikan, sebuah nilai default digunakan\n" #~ " untuk PATH yang menjamin untuk mencari semua utilitis standar. Jika\n" -#~ " pilihan -V atau -v diberikan, sebuah string ditampilkan " -#~ "mendeskripsikan PERINTAH.\n" +#~ " pilihan -V atau -v diberikan, sebuah string ditampilkan mendeskripsikan PERINTAH.\n" #~ " Pilihan -V menghasilkan deskripsi yang lebih detail." #~ msgid "" @@ -6316,8 +6629,7 @@ msgstr "" #~ " \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" +#~ " -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" @@ -6331,12 +6643,10 @@ msgstr "" #~ " 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" +#~ " Using `+' instead of `-' turns off the given attribute instead. When\n" #~ " used in a function, makes NAMEs local, as with the `local' command." #~ msgstr "" -#~ "Declare variabel dan/atau memberikan atribut kepada mereka. Jika tidak " -#~ "ada NAMA yang\n" +#~ "Declare variabel dan/atau memberikan atribut kepada mereka. Jika tidak ada NAMA yang\n" #~ " diberikan, maka menampilkan nilai dari variabel. Pilihan -p\n" #~ " akan menampilkan atribut dan nilai dari setiap NAMA.\n" #~ " \n" @@ -6344,8 +6654,7 @@ msgstr "" #~ " \n" #~ " -a\tuntuk membuat aray NAMA (jika disupport)\n" #~ " -f\tuntuk memilih dari nama fungsi saja\n" -#~ " -F\tuntuk menampilkan nama fungsi (dan nomor baris dan source nama " -#~ "file jika\n" +#~ " -F\tuntuk menampilkan nama fungsi (dan nomor baris dan source nama file jika\n" #~ " \tdebugging) tanpa definisi\n" #~ " -i\tuntuk membuat NAMA memiliki atribut `integer'\n" #~ " -r\tuntuk membuat NAMA baca-saja\n" @@ -6355,15 +6664,12 @@ msgstr "" #~ " Variabel dengan atribut integer memiliki arithmetic evaluasi (lihat\n" #~ " `let') selesai ketika variabel diberikan ke.\n" #~ " \n" -#~ " Ketika menampilkan nilai dari variabel, -f menampilkan sebuah nama " -#~ "fungsi\n" +#~ " Ketika menampilkan nilai dari variabel, -f menampilkan sebuah nama fungsi\n" #~ " dan definisi. Pilihan -F menekan untuk menampikan nama\n" #~ " fungsi saja.\n" #~ " \n" -#~ " Menggunakan `+' daripada `-' mematikan atribut yang diberikan. " -#~ "Ketika\n" -#~ " sedang digunkan dalam sebuah fungsi, membuat NAMA lokal, seperti " -#~ "dalam perintah 'local'." +#~ " Menggunakan `+' daripada `-' mematikan atribut yang diberikan. Ketika\n" +#~ " sedang digunkan dalam sebuah fungsi, membuat NAMA lokal, seperti dalam perintah 'local'." #~ msgid "Obsolete. See `declare'." #~ msgstr "Kadaluarsa. Lihat `declare'." @@ -6373,16 +6679,12 @@ msgstr "" #~ " 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 "" -#~ "Membuat sebuah variabel lokal yang disebut NAMA, dan menampilkan NILAI-" -#~ "nya. LOKAL\n" +#~ "Membuat sebuah variabel lokal yang disebut NAMA, dan menampilkan NILAI-nya. LOKAL\n" #~ " hanya dapat digunakan dalam sebuah fungsi; ini membuat NAMA variabel\n" #~ " memiliki scope visibel terbatas untuk fungsi itu dan anaknya." -#~ msgid "" -#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed." -#~ msgstr "" -#~ "Keluaran dari ARGs. Jika pilihan -n dispesifikasikan, akhiran baris baru " -#~ "dihapus." +#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed." +#~ msgstr "Keluaran dari ARGs. Jika pilihan -n dispesifikasikan, akhiran baris baru dihapus." #~ msgid "" #~ "Enable and disable builtin shell commands. This allows\n" @@ -6396,36 +6698,25 @@ msgstr "" #~ " 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." +#~ " 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 "" #~ "Enable dan disable perintah builtin shell. Ini membolehkan\n" -#~ " anda untuk menggunakan perintah disk yang memiliki nama sama seperti " -#~ "sebuah NAMA\n" -#~ " shell builtin tanpa menspesifikasikan sebuah pathname full. Jika " -#~ "pilihan -n digunakan,\n" +#~ " anda untuk menggunakan perintah disk yang memiliki nama sama seperti sebuah NAMA\n" +#~ " shell builtin tanpa menspesifikasikan sebuah pathname full. Jika pilihan -n digunakan,\n" #~ " NAMA menjadi disabled; jika tidak NAMA menjadi enabled. Contoh,\n" #~ " gunakan `test' ditemukan dalam $PATH daripada dalam builtin versi\n" #~ " builtin shell, ketik `enable -n test'. Di system mensupport dynamic\n" -#~ " loading, pilihan -f mungkin bisa digunakan untuk menload builtin baru " -#~ "dari\n" +#~ " loading, pilihan -f mungkin bisa digunakan untuk menload builtin baru dari\n" #~ " shared object NAMAFILE. Pilihan -d akan menghapus sebuah builting\n" -#~ " yang sebelumnya diload dengan pilihan -f. Jika tidak ada nama pilihan " -#~ "yang diberikan, atau\n" +#~ " yang sebelumnya diload dengan pilihan -f. Jika tidak ada nama pilihan yang diberikan, atau\n" #~ " pilihan -p diberikan, daftar dari builtin ditampilkan.\n" -#~ " Pilihan -a berarti menampilkan setiap builtin dengan sebuah indikasi " -#~ "apakah\n" +#~ " Pilihan -a berarti menampilkan setiap builtin dengan sebuah indikasi apakah\n" #~ " atau tidak ini enabled. Pilihan -s membatasi keluaran ke POSIX.2\n" -#~ " `special' builtins. Pilihan -n menampilkan daftar dari semua yang " -#~ "builtins yang disabled." +#~ " `special' builtins. Pilihan -n menampilkan daftar dari semua yang builtins yang disabled." -#~ msgid "" -#~ "Read ARGs as input to the shell and execute the resulting command(s)." -#~ msgstr "" -#~ "Baca ARGs sebagai masukan ke shell dan jalankan untuk menghasilkan " -#~ "perintah(s)." +#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)." +#~ msgstr "Baca ARGs sebagai masukan ke shell dan jalankan untuk menghasilkan perintah(s)." #~ msgid "" #~ "Exec FILE, replacing this shell with the specified program.\n" @@ -6439,12 +6730,9 @@ msgstr "" #~ msgstr "" #~ "Exec FILE, menimpa shell ini dengan aplikasi yang dispesifikasikan.\n" #~ " Jika FILE tidak dispesifikasikan, redirectiions mengambil efek dalam\n" -#~ " shell ini. Jika argumen pertama adalah `-l', maka tempatkan sebuah " -#~ "dash dalam\n" -#~ " argument ke nol yang dilewatkan ke FILE, seperti yang dilakukan oleh " -#~ "login. Jika pilihan `-c'\n" -#~ " diberikan, FILE dijalankan dengan environmen kosong. Jika pilihan `-" -#~ "a'\n" +#~ " shell ini. Jika argumen pertama adalah `-l', maka tempatkan sebuah dash dalam\n" +#~ " argument ke nol yang dilewatkan ke FILE, seperti yang dilakukan oleh login. Jika pilihan `-c'\n" +#~ " diberikan, FILE dijalankan dengan environmen kosong. Jika pilihan `-a'\n" #~ " berarti menset argv[0] dari proses yang dijalankan ke NAMA.\n" #~ " Jika berkas tidak dapat dijalankan dan shell bukan interaktif,\n" #~ " maka shell keluar, unless pilihan shell `execfail' diset." @@ -6457,34 +6745,23 @@ msgstr "" #~ " 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" +#~ " 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." +#~ " 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 "" #~ "Untuk setiap NAMA, full pathname dari perintah ditentukan dan\n" #~ " diingat. Jika pilihan -p diberikan, PATHNAME digunakan sebagai\n" -#~ " full pathname dari NAME, dan tidak ada jalur pencarian yang " -#~ "dilakukan. Pilihan -r\n" -#~ " menyebabkan shell untuk melupakan semua lokasi yang diingat. Pilihan -" -#~ "d\n" +#~ " full pathname dari NAME, dan tidak ada jalur pencarian yang dilakukan. Pilihan -r\n" +#~ " menyebabkan shell untuk melupakan semua lokasi yang diingat. Pilihan -d\n" #~ " menyebabkan shell untuk melupakan lokasi dari setiap NAMA.\n" #~ " Jika pilihan -t diberikan ful pathname ke setiap NAMA\n" -#~ " yang bersesuaian ditampilkan. Jika beberapa argumen NAMA diberikan " -#~ "dengan\n" -#~ " pilihan -t, NAME ditampilkan sebelum hashed full pathname. Pilihan -" -#~ "l\n" -#~ " menyebabkan keluaran untuk ditampilkan dalam format yang biasa " -#~ "digunakan sebagai masukan.\n" -#~ " Jika tidak ada argumen yang diberikan, informasi mengenai perintah " -#~ "yang diingat akan ditampilkan." +#~ " yang bersesuaian ditampilkan. Jika beberapa argumen NAMA diberikan dengan\n" +#~ " pilihan -t, NAME ditampilkan sebelum hashed full pathname. Pilihan -l\n" +#~ " menyebabkan keluaran untuk ditampilkan dalam format yang biasa digunakan sebagai masukan.\n" +#~ " Jika tidak ada argumen yang diberikan, informasi mengenai perintah yang diingat akan ditampilkan." #~ msgid "" #~ "Display helpful information about builtin commands. If PATTERN is\n" @@ -6493,41 +6770,30 @@ msgstr "" #~ " restricts the output for each builtin command matching PATTERN to\n" #~ " a short usage synopsis." #~ msgstr "" -#~ "Menampilkan informasi yang berharga mengenai perintah builtin. Jika " -#~ "PATTERN\n" -#~ " dispesifikasikan, memberikan bantuan detail mengenail seluruh " -#~ "perintah yang cocok dengan PATTERN,\n" +#~ "Menampilkan informasi yang berharga mengenai perintah builtin. Jika PATTERN\n" +#~ " dispesifikasikan, memberikan bantuan detail mengenail seluruh perintah yang cocok dengan PATTERN,\n" #~ " jika tidak sebuah daftar dari builtings akan ditampilkan. Pilihan -s\n" -#~ " membatasi keluaran dari setiap perintah builtin yang cocok dengan " -#~ "PATTERN ke\n" +#~ " membatasi keluaran dari setiap perintah builtin yang cocok dengan PATTERN ke\n" #~ " ringkasan penggunaan singkat." #~ 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" +#~ " 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." +#~ " 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 "" #~ "Secara default, menghapus setiap JOBSPEC argumen dari tabel actif jobs.\n" -#~ " Jika pilihan -n diberikan, pekerjaan tidak dihapus dari tabel, tetap " -#~ "ditandai\n" -#~ " sehingga ketika SIGHUP tidak terkirim ke job ketika shell menerima " -#~ "sebuah\n" -#~ " SIGHUP. Pilihan -a, ketika JOBSPEC tidak diberikan, berarti menghapus " -#~ "seluruh\n" -#~ " pekerjaan dari job tabel; Pilihan -r berarti hanya menghapus " -#~ "pekerjaan yang berjalan." +#~ " Jika pilihan -n diberikan, pekerjaan tidak dihapus dari tabel, tetap ditandai\n" +#~ " sehingga ketika SIGHUP tidak terkirim ke job ketika shell menerima sebuah\n" +#~ " SIGHUP. Pilihan -a, ketika JOBSPEC tidak diberikan, berarti menghapus seluruh\n" +#~ " pekerjaan dari job tabel; Pilihan -r berarti hanya menghapus pekerjaan yang berjalan." #~ 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 "" -#~ "Menyebabkan sebuah fungsi untuk keluar dengan nilai kembalian " -#~ "dispesifikasikan oleh N. Jika N\n" +#~ "Menyebabkan sebuah fungsi untuk keluar dengan nilai kembalian dispesifikasikan oleh N. Jika N\n" #~ " diabaikan, maka status kembalian adalah status dari perintah terakhir." #~ msgid "" @@ -6539,12 +6805,9 @@ msgstr "" #~ msgstr "" #~ "Untuk setiap NAMA, hapus variabel atau fungsi yang berhubungan. Dengan\n" #~ " pilihan `-v', unset hanya berlaku di variabel. Dengan pilihan `-f',\n" -#~ " unset hanya berlaku untuk fungsi. Dengan tidak menggunakan dua " -#~ "pilihan itu,\n" -#~ " pertama akan mencoba mengunset variabel, dan jika itu gagal maka " -#~ "akan\n" -#~ " mencoba untuk mengunset sebuah fungsi. Beberapa variabel tidak dapat " -#~ "diunset. Lihat readonly." +#~ " unset hanya berlaku untuk fungsi. Dengan tidak menggunakan dua pilihan itu,\n" +#~ " pertama akan mencoba mengunset variabel, dan jika itu gagal maka akan\n" +#~ " mencoba untuk mengunset sebuah fungsi. Beberapa variabel tidak dapat diunset. Lihat readonly." #~ msgid "" #~ "NAMEs are marked for automatic export to the environment of\n" @@ -6556,36 +6819,28 @@ msgstr "" #~ " processing." #~ msgstr "" #~ "NAMA ditandai untuk otomatis export ke environment dari\n" -#~ " perintah yang akan dijalankan selanjutnya. Jika pilihan -f " -#~ "diberikan,\n" -#~ " NAMA akan menunjuk ke fungsi. Jika tidak ada NAMA diberikan, atau " -#~ "jika pilihan `-p'\n" +#~ " perintah yang akan dijalankan selanjutnya. Jika pilihan -f diberikan,\n" +#~ " NAMA akan menunjuk ke fungsi. Jika tidak ada NAMA diberikan, atau jika pilihan `-p'\n" #~ " diberikan, daftar dari seluruh nama yang diexport dalam shell ini\n" -#~ " ditampilkan. Sebuah argumen dari pilihan `-n' mengatakan untuk " -#~ "menghapus expor properti\n" -#~ " dari NAMA selanjutnya. Sebuah argumen dari `--' menonaktifkan " -#~ "pemrosesan\n" +#~ " ditampilkan. Sebuah argumen dari pilihan `-n' mengatakan untuk menghapus expor properti\n" +#~ " dari NAMA selanjutnya. Sebuah argumen dari `--' menonaktifkan pemrosesan\n" #~ " pilihan selanjutnya." #~ 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" +#~ " 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 "" -#~ "NAMA yang diberikan ditandai secara baca-saja dan nilai dari NAMA ini " -#~ "tidak\n" +#~ "NAMA yang diberikan ditandai secara baca-saja dan nilai dari NAMA ini tidak\n" #~ " boleh diubah oleh assignmen selanjutnya. Jika pilihan -f diberikan,\n" #~ " maka fungsi yang berhubungan dengan NAMA akan ditandai. Jika tidak\n" -#~ " ada argumen yang diberikan, atau jika pilihan `-p' diberikan, sebuah " -#~ "daftar dari seluruh nama baca-saja\n" +#~ " ada argumen yang diberikan, atau jika pilihan `-p' diberikan, sebuah daftar dari seluruh nama baca-saja\n" #~ " ditampilkan. Pilihan `-a' berarti memperlakukan setiap NAMA sebagai\n" -#~ " sebuah variabel array. Sebuah argumen dari `--' menonaktifkan " -#~ "pemrosesan\n" +#~ " sebuah variabel array. Sebuah argumen dari `--' menonaktifkan pemrosesan\n" #~ " pilihan selanjutnya." #~ msgid "" @@ -6600,96 +6855,73 @@ msgstr "" #~ " signal. The `-f' if specified says not to complain about this\n" #~ " being a login shell if it is; just suspend anyway." #~ msgstr "" -#~ "Suspend eksekusi dari shell ini sampai ini menerima sebuah sinyal " -#~ "SIGCONT\n" -#~ " Jika pilihan `-f' dispesifikasikan maka tidak komplain tentang ini " -#~ "menjadi\n" +#~ "Suspend eksekusi dari shell ini sampai ini menerima sebuah sinyal SIGCONT\n" +#~ " Jika pilihan `-f' dispesifikasikan maka tidak komplain tentang ini menjadi\n" #~ " sebuah login shell jika emang begitu. Hanya lakukan suspend saja." #~ msgid "" #~ "Print the accumulated user and system times for processes run from\n" #~ " the shell." #~ msgstr "" -#~ "Tampilkan waktu yang terakumulasi oleh pengguna dan system untuk proses " -#~ "yang berjalan dari\n" +#~ "Tampilkan waktu yang terakumulasi oleh pengguna dan system untuk proses yang berjalan dari\n" #~ " shell." #~ 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" +#~ " 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" +#~ " 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" +#~ " 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 "" -#~ "Untuk setiap NAMA, mengindikasikan bagaimana ini akan diinterpretasikan " -#~ "jika digunakan sebagai sebuah\n" +#~ "Untuk setiap NAMA, mengindikasikan bagaimana ini akan diinterpretasikan jika digunakan sebagai sebuah\n" #~ " nama perintah.\n" #~ " \n" -#~ " Jika sebuah pilihan -t digunakan, `type' mengeluarkan sebuah kata " -#~ "tunggal yang salah satu dari\n" -#~ " `alias', `keyword', `function', `builtin', `file', atau `', jika NAMA " -#~ "adalah sebuah\n" -#~ " alias, shell kata yang dipesan, shell fungsi, shell builtin, disk " -#~ "file,\n" +#~ " Jika sebuah pilihan -t digunakan, `type' mengeluarkan sebuah kata tunggal yang salah satu dari\n" +#~ " `alias', `keyword', `function', `builtin', `file', atau `', jika NAMA adalah sebuah\n" +#~ " alias, shell kata yang dipesan, shell fungsi, shell builtin, disk file,\n" #~ " atau tidak ditemukan, respectively.\n" #~ " \n" -#~ " Jika flag -p digunakan, `type' menampilkan semua dari tempat yang " -#~ "berisi\n" +#~ " Jika flag -p digunakan, `type' menampilkan semua dari tempat yang berisi\n" #~ " nama executable `file'. Ini meliputi aliases, builtings, dan\n" #~ " fungsi, jika dan hanya jika flag -p juga tidak digunakan.\n" #~ " \n" #~ " Flag -f menekan seluruh fungsi shell lookup.\n" #~ " \n" -#~ " Flag -P memaksa sebuah JALUR pencarian untuk setiap NAMA, bahkan jika " -#~ "ini merupakan sebuah alias,\n" +#~ " Flag -P memaksa sebuah JALUR pencarian untuk setiap NAMA, bahkan jika ini merupakan sebuah alias,\n" #~ " builtin, atau fungsi, dan mengembalikan nama ke disk file yang akan\n" #~ " dijalankan." #~ 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" +#~ " `-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" +#~ " interpreted as an octal number, otherwise it is a symbolic mode string\n" #~ " like that accepted by chmod(1)." #~ msgstr "" -#~ "File-creation mask pengguna diset ke MODE. Jika MODE diabaikan, atau " -#~ "jika\n" +#~ "File-creation mask pengguna diset ke MODE. Jika MODE diabaikan, atau jika\n" #~ " `-S' diberikan, nilai sekaran dari mask ditampilkan. Pilihan `-S'\n" -#~ " membuah keluaran symbolic; jika tidak sebuah bilangan octal " -#~ "dikeluarkan.\n" -#~ " Jika pilihan `-p' diberikan, dan MODE diabaikan, keluaran adalah " -#~ "dalam format\n" -#~ " yang bisa digunakan sebagai masukan. Jika MODE dimulai dengan sebuah " -#~ "digit, ini\n" -#~ " diinterpretasikan sebagai sebuah bilangan octal, jika tidak ini " -#~ "adalah sebuah symbolic mode string\n" +#~ " membuah keluaran symbolic; jika tidak sebuah bilangan octal dikeluarkan.\n" +#~ " Jika pilihan `-p' diberikan, dan MODE diabaikan, keluaran adalah dalam format\n" +#~ " yang bisa digunakan sebagai masukan. Jika MODE dimulai dengan sebuah digit, ini\n" +#~ " diinterpretasikan sebagai sebuah bilangan octal, jika tidak ini adalah sebuah symbolic mode string\n" #~ " yang diterima oleh chmod(1)." #~ msgid "" @@ -6698,12 +6930,9 @@ msgstr "" #~ " 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 "" -#~ "Menunggu sampai proses yang dispesifikasikan dan laporkan status " -#~ "selesainya. Jika\n" -#~ " N tidak diberikan, semua proses anak yang masih aktif ditunggu " -#~ "untuk,\n" -#~ " dan mengembalikan kode kembalian nol. N adalah sebuah proses ID; jika " -#~ "ini tidak diberikan,\n" +#~ "Menunggu sampai proses yang dispesifikasikan dan laporkan status selesainya. Jika\n" +#~ " N tidak diberikan, semua proses anak yang masih aktif ditunggu untuk,\n" +#~ " dan mengembalikan kode kembalian nol. N adalah sebuah proses ID; jika ini tidak diberikan,\n" #~ " semua proses anak dari shell ditunggu." #~ msgid "" @@ -6711,8 +6940,7 @@ msgstr "" #~ " Arguments on the command line along with NAME are passed to the\n" #~ " function as $0 .. $n." #~ msgstr "" -#~ "Buat sebuah perintah sederhana yang memanggil dengan NAMA yang " -#~ "menjalankan PERINTAH.\n" +#~ "Buat sebuah perintah sederhana yang memanggil dengan NAMA yang menjalankan PERINTAH.\n" #~ " Argumen dalam baris perintah dengan NAMA dilewatkan ke\n" #~ " fungsi sebagai $0 .. $n." @@ -6727,34 +6955,23 @@ msgstr "" #~ " not each is set." #~ msgstr "" #~ "Ubah nilai dari variabel yang mengontrol perilaku opsional.\n" -#~ " Pilihan -s berarti untuk mengaktifkan (set) setiap OPTNAME; pilihan -" -#~ "u\n" +#~ " Pilihan -s berarti untuk mengaktifkan (set) setiap OPTNAME; pilihan -u\n" #~ " mengunset setiap OPTNAME. tanda -q menekan keluaran; status keluaran\n" #~ " mengindikasikan apakah setiap OPTNAME diset atau diunset. Pilihan -o\n" #~ " membatasi OPTNAME ke nilai yang didefinisikan untuk digunakan dengan\n" -#~ " `set -o'. Tanpa pilihan, atau dengan pilihan -p, sebuah daftar dari " -#~ "seluruh\n" -#~ " pilihan yang bisa diset ditampilkan, tanpa sebuah indikasi apakah " -#~ "salah satu atau\n" +#~ " `set -o'. Tanpa pilihan, atau dengan pilihan -p, sebuah daftar dari seluruh\n" +#~ " pilihan yang bisa diset ditampilkan, tanpa sebuah indikasi apakah salah satu atau\n" #~ " bukan setiap dari variabel diset." #~ 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." +#~ " 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 "" #~ "Untuk setiap NAMA, spesifikasikan bagaimana argumen akan diselesaikan.\n" -#~ " Jika pilihan -p diberikan, atau tidak ada pilihan yang diberikan, " -#~ "completion\n" -#~ " spesifikasi yang telah ada ditampilkan dalam sebuah cara yang " -#~ "membolehkan mereka untuk\n" -#~ " digunakan sebagai masukan. Pilihan -r menghapus sebuah spesifikasi " -#~ "completion untuk\n" -#~ " setiap NAMA, atau jika tidak ada NAMA yang diberikan, untuk semua " -#~ "spesifikasi completion." +#~ " Jika pilihan -p diberikan, atau tidak ada pilihan yang diberikan, completion\n" +#~ " spesifikasi yang telah ada ditampilkan dalam sebuah cara yang membolehkan mereka untuk\n" +#~ " digunakan sebagai masukan. Pilihan -r menghapus sebuah spesifikasi completion untuk\n" +#~ " setiap NAMA, atau jika tidak ada NAMA yang diberikan, untuk semua spesifikasi completion." diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index c61c0b5837d0b5cdbd33064f297ed53e83694100..f947cdfe0cd07aa6019e6290d891b951ed0b7877 100644 GIT binary patch delta 4622 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 J$j}$2{2%Ha5C;GN diff --git a/po/pt_BR.po b/po/pt_BR.po index cddc1d903..47867bdda 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -22,7 +22,7 @@ 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 @@ -48,7 +48,7 @@ msgstr "%s: impossível atribuir a índice não numérico" #: arrayfunc.c:747 #, 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 #, c-format @@ -4049,7 +4049,7 @@ msgstr "" " -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" +" -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" diff --git a/po/ro.gmo b/po/ro.gmo index 3a69a47a6886390bdef097f5959f6420b3e57842..f1661443eafad896139ac7036520f813c3faf60b 100644 GIT binary patch delta 1478 zc-mdmTSyd97zgm9X6criX_{%e?(XdDZLX`9Ax4*nqAOI0U|tZxWT|AOpo{a+OHo2# z8nI{>@F5~d21E&qo-9&=g785yx*mBgzXh#Bm4$EFr!k4T$l?bxCNHL-LL?jfPUBw4LATd!zqXm;v>|YI6fNp zaeOlx_Ostv7=ZmS2FD?C5nueAU{!$c zF<1xp2RP3aSOM<^EM$d;=lGBZ=L5|6J6sP}+yQwKGY(1oUMF#32jM!{B5_@pSs_tp_BNmC9%{$U^e{icFYWNf`TC1C3qd`K`wMM$WqV1Lbw1;_$SD~ zI?^wKdu47>i_ERPEOP<3WhP{e$eeJ(9WW&`qxUj1U6dJcS>{3tLo8`Ui0}0<4EKe& zMad8o>4U4`tq?0S9AZL`;0E}N{VeeY4_Wvy2TPs3gAFhZQJY|6m@6L(bKtc5J`cO# zPZ)u%5oUDF^-hHS>d zu*HWcOP?NN#>K9cF}6pc>YNeRi*PG^7~|pl!GmZ62woK3Rl{yaAD^ZW^`3y zMneh%*$PX$sIY>++flICY9}7@CfXMmJ{f;%1qX1oUlw|iByf(t5)M# zXx13$G>kjMgnOW-b6k&(`aAzvZs=UVn9jhjbO!vZ zGgFVj((W=?sRIW0w9#N`69!9~GPp%g3}(Jy@KzMzPnB~>O>Skc$y+dJHn61kP44+P ztbw0RPFx!2LXO5cL9=UboVQ>Y);rfR&V?*0JDmpHD| z?SB~N!gCViUxf?csN4P&I*GrwC6@X-oCklo9kW85peV%mGCT>b5EnWUVyU0OMesee z;GYl!TS&hcHp$$gxXi6RE^`6>G83`~WKKBb4j7l2(Ui4sL~W5VZwvSGe+Fg##zu z=NZ`UR18L7BEpQ4t^*PF8;Wq;^9U21j&R{WBhDGZ{%1zHvOtulwi@CiHoMP9qO8ER zC=b~X#K9KtqAYz*B{TNADwTX6gBomhJqBxGs*;EAgVPW5i(Hi@S0O&4Ugb&?Di>y} z%;=2DjIOH;G^Db$vnnf?uCZUP#_?W_@oF?~@hDsWFp0of8IimZ(PO z^=j047TRF)n0Vj1#oE_QiM$ZomfkIL3v|t>Sx6YA|P_FwIDwDsT3fb*iyk zwW@ulQE!@2!%EGTUrNicG)s%6lD^LDvc`Rnj&{eN^zZiVkh*>9PM^QKwMUJ&_x9}V X@+Ui#P_j`eE%~n(JES_42RVNMUYfAX diff --git a/po/ro.po b/po/ro.po index 13ab3543d..b610e615d 100644 --- a/po/ro.po +++ b/po/ro.po @@ -6,10 +6,10 @@ # 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-08-25 10:11+0200\n" +"PO-Revision-Date: 2021-12-16 15:48+0100\n" "Last-Translator: Daniel Șerbănescu \n" "Language-Team: Romanian \n" "Language: ro\n" @@ -17,9 +17,8 @@ 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==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n" -"%100<=19) ? 1 : 2);\n" -"X-Generator: Poedit 2.2.3\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 3.0\n" "X-Poedit-SourceCharset: UTF-8\n" #: arrayfunc.c:66 @@ -78,6 +77,7 @@ msgstr "%s: lipsește separatorul două puncte" #: bashline.c:4555 #, fuzzy, c-format +#| msgid "%s: command not found" msgid "`%s': cannot unbind in command keymap" msgstr "%s: comandă negăsită" @@ -112,11 +112,13 @@ msgstr "" #: builtins/bind.def:252 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot read: %s" msgstr "%s: nu s-a putut crea: %s" #: builtins/bind.def:328 builtins/bind.def:358 #, fuzzy, c-format +#| msgid "%s: readonly function" msgid "`%s': unknown function name" msgstr "%s: funcție doar în citire (readonly)" @@ -132,6 +134,7 @@ msgstr "%s poate fi invocat prin " #: builtins/bind.def:378 builtins/bind.def:395 #, fuzzy, c-format +#| msgid "%s: command not found" msgid "`%s': cannot unbind" msgstr "%s: comandă negăsită" @@ -198,36 +201,43 @@ msgstr "%s: argument numeric necesar" #: builtins/common.c:207 #, fuzzy, c-format +#| msgid "%s: command not found" msgid "%s: not found" msgstr "%s: comandă negăsită" #: builtins/common.c:216 shell.c:857 #, fuzzy, c-format +#| msgid "%c%c: bad option" msgid "%s: invalid option" msgstr "%c%c: opțiune invalidă" #: builtins/common.c:223 #, fuzzy, c-format +#| msgid "%c%c: bad option" msgid "%s: invalid option name" msgstr "%c%c: opțiune invalidă" #: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373 #, fuzzy, c-format +#| msgid "`%s' is not a valid identifier" msgid "`%s': not a valid identifier" msgstr "`%s' nu este un identificator valid" #: builtins/common.c:240 #, fuzzy +#| msgid "bad signal number" msgid "invalid octal number" msgstr "număr de semnal invalid" #: builtins/common.c:242 #, fuzzy +#| msgid "bad signal number" msgid "invalid hex number" msgstr "număr de semnal invalid" #: builtins/common.c:244 expr.c:1569 #, fuzzy +#| msgid "bad signal number" msgid "invalid number" msgstr "număr de semnal invalid" @@ -253,6 +263,7 @@ msgstr "" #: builtins/common.c:274 builtins/common.c:276 #, fuzzy +#| msgid "argument expected" msgid "argument" msgstr "se așteaptă parametru" @@ -268,16 +279,19 @@ msgstr "" #: builtins/common.c:292 #, fuzzy, c-format +#| msgid "no job control in this shell" msgid "%s: no job control" msgstr "nici un control de job în acest shell" #: builtins/common.c:294 #, fuzzy +#| msgid "no job control in this shell" msgid "no job control" msgstr "nici un control de job în acest shell" #: builtins/common.c:304 #, fuzzy, c-format +#| msgid "%s: job has terminated" msgid "%s: restricted" msgstr "%s: jobul a fost terminat" @@ -292,6 +306,7 @@ msgstr "" #: builtins/common.c:323 #, fuzzy, c-format +#| msgid "pipe error: %s" msgid "write error: %s" msgstr "eroare de legătură (pipe): %s" @@ -312,6 +327,7 @@ msgstr "" #: builtins/common.c:701 builtins/common.c:703 #, fuzzy, c-format +#| msgid "%s: Ambiguous redirect" msgid "%s: ambiguous job spec" msgstr "%s: Redirectare ambiguă" @@ -321,11 +337,13 @@ msgstr "" #: builtins/common.c:1008 builtins/set.def:953 variables.c:3839 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot unset: readonly %s" msgstr "%s: nu s-a putut crea: %s" #: builtins/common.c:1013 builtins/set.def:932 variables.c:3844 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot unset" msgstr "%s: nu s-a putut crea: %s" @@ -354,6 +372,7 @@ msgstr "" #: builtins/declare.def:134 #, fuzzy +#| msgid "can only be used within a function; it makes the variable NAME" msgid "can only be used in a function" msgstr "poate fi folosit doar într-o funcție, și face ca variabila NUME" @@ -394,6 +413,7 @@ msgstr "" #: builtins/declare.def:838 #, fuzzy, c-format +#| msgid "$%s: cannot assign in this way" msgid "%s: cannot destroy array variables in this way" msgstr "$%s: nu se poate asigna în acest mod" @@ -408,6 +428,7 @@ msgstr "" #: builtins/enable.def:343 #, fuzzy, c-format +#| msgid "cannot open named pipe %s for %s: %s" msgid "cannot open shared object %s: %s" msgstr "nu pot deschide legătura numită %s pentru %s: %s" @@ -433,6 +454,7 @@ msgstr "" #: builtins/enable.def:543 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot delete: %s" msgstr "%s: nu s-a putut crea: %s" @@ -443,6 +465,7 @@ msgstr "%s: este director" #: builtins/evalfile.c:144 #, fuzzy, c-format +#| msgid "%s: cannot execute binary file" msgid "%s: not a regular file" msgstr "%s: nu se poate executa fișierul binar" @@ -458,6 +481,7 @@ msgstr "%s: nu se poate executa fișierul binar" #: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot execute: %s" msgstr "%s: nu s-a putut crea: %s" @@ -482,6 +506,7 @@ msgstr "" #: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417 #, fuzzy +#| msgid "%s: command not found" msgid "no command found" msgstr "%s: comandă negăsită" @@ -492,6 +517,7 @@ msgstr "" #: builtins/fc.def:444 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot open temp file: %s" msgstr "%s: nu s-a putut crea: %s" @@ -543,12 +569,12 @@ 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 "" #: builtins/help.def:224 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot open: %s" msgstr "%s: nu s-a putut crea: %s" @@ -580,11 +606,13 @@ msgstr "" #: builtins/history.def:451 #, fuzzy, c-format +#| msgid "%s: integer expression expected" msgid "%s: history expansion failed" msgstr "%s: se așteaptă expresie întreagă (integer)" #: builtins/inlib.def:71 #, fuzzy, c-format +#| msgid "%s: unbound variable" msgid "%s: inlib failed" msgstr "%s: variabilă fără limită" @@ -599,6 +627,7 @@ msgstr "" #: builtins/kill.def:274 #, fuzzy +#| msgid "Unknown error %d" msgid "Unknown error" msgstr "Eroare necunoscută %d" @@ -628,6 +657,7 @@ msgstr "" #: builtins/mapfile.def:299 #, fuzzy, c-format +#| msgid "%s: bad array subscript" msgid "%s: invalid array origin" msgstr "%s:subscriere interval invalid" @@ -684,6 +714,7 @@ msgstr "niciun alt director" #: builtins/pushd.def:360 #, fuzzy, c-format +#| msgid "%s requires an argument" msgid "%s: invalid argument" msgstr "%s necesită un parametru" @@ -714,12 +745,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 "" @@ -776,6 +805,7 @@ msgstr "" #: builtins/read.def:755 #, fuzzy, c-format +#| msgid "pipe error: %s" msgid "read error: %d: %s" msgstr "eroare de legătură (pipe): %s" @@ -785,26 +815,31 @@ msgstr "" #: builtins/set.def:869 #, fuzzy +#| msgid "can only be used within a function; it makes the variable NAME" msgid "cannot simultaneously unset a function and a variable" msgstr "poate fi folosit doar într-o funcție, și face ca variabila NUME" #: builtins/set.def:966 #, fuzzy, c-format +#| msgid "%s: unbound variable" msgid "%s: not an array variable" msgstr "%s: variabilă fără limită" #: builtins/setattr.def:189 #, fuzzy, c-format +#| msgid "%s: readonly function" msgid "%s: not a function" msgstr "%s: funcție doar în citire (readonly)" #: builtins/setattr.def:194 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot export" msgstr "%s: nu s-a putut crea: %s" #: builtins/shift.def:72 builtins/shift.def:79 #, fuzzy +#| msgid "shift [n]" msgid "shift count" msgstr "shift [n]" @@ -823,6 +858,7 @@ msgstr "" #: builtins/source.def:154 #, fuzzy, c-format +#| msgid "%s: command not found" msgid "%s: file not found" msgstr "%s: comandă negăsită" @@ -876,26 +912,31 @@ msgstr "" #: builtins/ulimit.def:426 #, fuzzy, c-format +#| msgid "%c%c: bad option" msgid "`%c': bad command" msgstr "%c%c: opțiune invalidă" #: builtins/ulimit.def:455 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot get limit: %s" msgstr "%s: nu s-a putut crea: %s" #: builtins/ulimit.def:481 #, fuzzy +#| msgid "CPU limit" msgid "limit" msgstr "limită CPU" #: builtins/ulimit.def:493 builtins/ulimit.def:793 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot modify limit: %s" msgstr "%s: nu s-a putut crea: %s" #: builtins/umask.def:115 #, fuzzy +#| msgid "bad signal number" msgid "octal number" msgstr "număr de semnal invalid" @@ -939,6 +980,7 @@ msgstr "tip rău de comandă" #: error.c:464 #, fuzzy +#| msgid "bad connector `%d'" msgid "bad connector" msgstr "conector greșit `%d'" @@ -972,6 +1014,7 @@ msgstr "" #: execute_cmd.c:2486 #, fuzzy +#| msgid "pipe error: %s" msgid "pipe error" msgstr "eroare de legătură (pipe): %s" @@ -1007,11 +1050,13 @@ msgstr "" #: execute_cmd.c:5854 #, fuzzy, c-format +#| msgid "%s: is a directory" msgid "%s: %s: bad interpreter" msgstr "%s: este director" #: execute_cmd.c:5891 #, fuzzy, c-format +#| msgid "%s: cannot execute binary file" msgid "%s: cannot execute binary file: %s" msgstr "%s: nu se poate executa fișierul binar" @@ -1022,6 +1067,7 @@ msgstr "" #: execute_cmd.c:6029 #, fuzzy, c-format +#| msgid "cannot duplicate fd %d to fd 0: %s" msgid "cannot duplicate fd %d to fd %d" msgstr "nu se poate duplica fd %d în fd 0: %s" @@ -1051,6 +1097,7 @@ msgstr "împărțire la 0" #: expr.c:592 #, fuzzy +#| msgid "bug: bad expassign token %d" msgid "bug: bad expassign token" msgstr "bug: identificator(token) expassign greșit %d" @@ -1072,6 +1119,7 @@ msgstr "`)' lipsă" #: expr.c:1107 expr.c:1487 #, fuzzy +#| msgid "syntax error: unexpected end of file" msgid "syntax error: operand expected" msgstr "eroare de sintaxă: sfârșit de fișier neașteptat" @@ -1103,6 +1151,7 @@ msgstr "%s: eroare în expresie\n" #: general.c:70 #, fuzzy +#| msgid "getwd: cannot access parent directories" msgid "getcwd: cannot access parent directories" msgstr "getwd: nu s-au putut accesa directoarele părinte" @@ -1113,12 +1162,13 @@ msgstr "" #: input.c:266 #, fuzzy, c-format +#| msgid "cannot allocate new file descriptor for bash input from fd %d: %s" 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 descriptor de fișier nou pentru inputul bash din fd %d: %s" #: input.c:274 #, fuzzy, c-format +#| msgid "check_bash_input: buffer already exists for new fd %d" msgid "save_bash_input: buffer already exists for new fd %d" msgstr "check_bash_input: buffer deja existent pentru fd nou %d" @@ -1209,6 +1259,7 @@ msgstr "setpgid copil (de la%ld la %ld)" #: jobs.c:2617 nojobs.c:664 #, fuzzy, c-format +#| msgid "wait: pid %d is not a child of this shell" 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" @@ -1224,6 +1275,7 @@ msgstr "" #: jobs.c:3564 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: no current jobs" msgstr "%s: nu s-a putut crea: %s" @@ -1258,6 +1310,7 @@ msgstr "(wd actual: %s)\n" #: jobs.c:4391 #, fuzzy +#| msgid "initialize_jobs: getpgrp failed: %s" msgid "initialize_job_control: getpgrp failed" msgstr "initialize_jobs: getpgrp eșuat: %s" @@ -1267,11 +1320,13 @@ msgstr "" #: jobs.c:4463 #, fuzzy +#| msgid "initialize_jobs: line discipline: %s" msgid "initialize_job_control: line discipline" msgstr "initialize_jobs: disciplină linie: %s" #: jobs.c:4473 #, fuzzy +#| msgid "initialize_jobs: getpgrp failed: %s" msgid "initialize_job_control: setpgid" msgstr "initialize_jobs: getpgrp eșuat: %s" @@ -1361,6 +1416,7 @@ msgstr "" #: lib/sh/netopen.c:168 #, fuzzy, c-format +#| msgid "unknown" msgid "%s: host unknown" msgstr "necunoscut" @@ -1417,11 +1473,13 @@ msgstr "eroare de sintaxă: expresie aritmetică necesară" #: make_cmd.c:319 #, fuzzy +#| msgid "syntax error: unexpected end of file" msgid "syntax error: `;' unexpected" msgstr "eroare de sintaxă: sfârșit de fișier neașteptat" #: make_cmd.c:320 #, fuzzy, c-format +#| msgid "syntax error" msgid "syntax error: `((%s))'" msgstr "eroare de sintaxă" @@ -1442,9 +1500,7 @@ msgstr "" #: parse.y:2393 #, c-format -msgid "" -"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line " -"truncated" +msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated" msgstr "" #: parse.y:2826 @@ -1462,6 +1518,7 @@ msgstr "EOF neașteptat în căutare după „]]”" #: parse.y:4701 #, fuzzy, c-format +#| msgid "syntax error near unexpected token `%s'" msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "eroare de sintaxă neașteptată lângă `%s'" @@ -1489,11 +1546,13 @@ msgstr "" #: parse.y:4865 #, fuzzy, c-format +#| msgid "%s: binary operator expected" msgid "unexpected token `%s', conditional binary operator expected" msgstr "%s: se așteaptă operator binar" #: parse.y:4869 #, fuzzy +#| msgid "%s: binary operator expected" msgid "conditional binary operator expected" msgstr "%s: se așteaptă operator binar" @@ -1508,16 +1567,19 @@ msgstr "" #: parse.y:4906 #, fuzzy, c-format +#| msgid "`:' expected for conditional expression" msgid "unexpected token `%c' in conditional command" msgstr "`:' așteptat după expresie condițională" #: parse.y:4909 #, fuzzy, c-format +#| msgid "`:' expected for conditional expression" msgid "unexpected token `%s' in conditional command" msgstr "`:' așteptat după expresie condițională" #: parse.y:4913 #, fuzzy, c-format +#| msgid "`:' expected for conditional expression" msgid "unexpected token %d in conditional command" msgstr "`:' așteptat după expresie condițională" @@ -1528,6 +1590,7 @@ msgstr "eroare de sintaxă neașteptată lângă `%s'" #: parse.y:6355 #, fuzzy, c-format +#| msgid "syntax error near unexpected token `%s'" msgid "syntax error near `%s'" msgstr "eroare de sintaxă neașteptată lângă `%s'" @@ -1593,26 +1656,31 @@ msgstr "" #: redir.c:204 #, fuzzy, c-format +#| msgid "%s: Ambiguous redirect" msgid "%s: ambiguous redirect" msgstr "%s: Redirectare ambiguă" #: redir.c:208 #, fuzzy, c-format +#| msgid "%s: Cannot clobber existing file" msgid "%s: cannot overwrite existing file" msgstr "%s: nu se poate accesa(clobber) fișierul existent" #: redir.c:213 #, fuzzy, c-format +#| msgid "%s: restricted: cannot specify `/' in command names" msgid "%s: restricted: cannot redirect output" msgstr "%s: limitat: nu se poate specifica `/' în numele comenzilor" #: redir.c:218 #, fuzzy, c-format +#| msgid "cannot make pipe for process subsitution: %s" msgid "cannot create temp file for here-document: %s" msgstr "nu pot face legătură (pipe) pentru substituția procesului: %s" #: redir.c:222 #, fuzzy, c-format +#| msgid "%s: cannot assign list to array member" msgid "%s: cannot assign fd to variable" msgstr "%s: nu pot asigna listă membrului intervalului" @@ -1622,6 +1690,7 @@ msgstr "" #: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284 #, fuzzy +#| msgid "redirection error" msgid "redirection error: cannot duplicate fd" msgstr "eroare de redirectare" @@ -1639,6 +1708,7 @@ msgstr "" #: shell.c:948 #, fuzzy, c-format +#| msgid "%c%c: bad option" msgid "%c%c: invalid option" msgstr "%c%c: opțiune invalidă" @@ -1658,6 +1728,7 @@ msgstr "" #: shell.c:1632 #, fuzzy, c-format +#| msgid "%s: is a directory" msgid "%s: Is a directory" msgstr "%s: este director" @@ -1667,6 +1738,7 @@ msgstr "Nu am nici un nume!" #: shell.c:2035 #, fuzzy, c-format +#| msgid "GNU %s, version %s\n" msgid "GNU bash, version %s-(%s)\n" msgstr "GNU %s, versiunea %s\n" @@ -1689,6 +1761,7 @@ msgstr "Opțiuni ale shell-ului:\n" #: shell.c:2043 #, fuzzy +#| msgid "\t-irsD or -c command\t\t(invocation only)\n" 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" @@ -1700,16 +1773,12 @@ msgstr "\t-%s sau -o opțiune\n" #: shell.c:2068 #, 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 #, 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 #, c-format @@ -1898,6 +1967,7 @@ msgstr "Semnal Necunoscut #%d" #: subst.c:1476 subst.c:1666 #, fuzzy, c-format +#| msgid "bad substitution: no `%s' in %s" msgid "bad substitution: no closing `%s' in %s" msgstr "substituție invalidă: nu există '%s' în %s" @@ -1908,21 +1978,25 @@ msgstr "%s: nu pot asigna listă membrului intervalului" #: subst.c:5910 subst.c:5926 #, fuzzy +#| msgid "cannot make pipe for process subsitution: %s" msgid "cannot make pipe for process substitution" msgstr "nu pot face legătură (pipe) pentru substituția procesului: %s" #: subst.c:5985 #, fuzzy +#| msgid "cannot make a child for process substitution: %s" msgid "cannot make child for process substitution" msgstr "nu pot crea un proces copil pentru substituirea procesului: %s" #: subst.c:6059 #, fuzzy, c-format +#| msgid "cannot open named pipe %s for %s: %s" msgid "cannot open named pipe %s for reading" msgstr "nu pot deschide legătura numită %s pentru %s: %s" #: subst.c:6061 #, fuzzy, c-format +#| msgid "cannot open named pipe %s for %s: %s" msgid "cannot open named pipe %s for writing" msgstr "nu pot deschide legătura numită %s pentru %s: %s" @@ -1933,21 +2007,25 @@ msgstr "nu se poate duplica țeava numită %s ca fd %d" #: subst.c:6213 #, fuzzy +#| msgid "bad substitution: no ending `}' in %s" msgid "command substitution: ignored null byte in input" msgstr "substituție invalidă: nu există ')' de final în %s" #: subst.c:6353 #, fuzzy +#| msgid "can't make pipes for command substitution: %s" msgid "cannot make pipe for command substitution" msgstr "nu pot face legături(pipes) pentru substituția de comenzi: %s" #: subst.c:6397 #, fuzzy +#| msgid "can't make a child for command substitution: %s" msgid "cannot make child for command substitution" msgstr "nu pot crea un copil pentru substituția de comenzi: %s" #: subst.c:6423 #, fuzzy +#| msgid "command_substitute: cannot duplicate pipe as fd 1: %s" msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: nu se poate duplica legătura (pipe) ca fd 1: %s" @@ -1963,11 +2041,13 @@ msgstr "" #: subst.c:7013 subst.c:7177 #, fuzzy, c-format +#| msgid "%s: unbound variable" msgid "%s: invalid variable name" msgstr "%s: variabilă fără limită" #: subst.c:7256 #, fuzzy, c-format +#| msgid "%s: parameter null or not set" msgid "%s: parameter not set" msgstr "%s: parametru null sau nesetat" @@ -1992,13 +2072,12 @@ 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" +msgid "future versions of the shell will force evaluation as an arithmetic substitution" msgstr "" #: subst.c:10367 #, fuzzy, c-format +#| msgid "bad substitution: no ending `}' in %s" msgid "bad substitution: no closing \"`\" in %s" msgstr "substituție invalidă: nu există ')' de final în %s" @@ -2041,11 +2120,13 @@ msgstr "lipsește ']'" #: test.c:899 #, fuzzy, c-format +#| msgid "syntax error: unexpected end of file" msgid "syntax error: `%s' unexpected" msgstr "eroare de sintaxă: sfârșit de fișier neașteptat" #: trap.c:220 #, fuzzy +#| msgid "bad signal number" msgid "invalid signal number" msgstr "număr de semnal invalid" @@ -2061,12 +2142,12 @@ msgstr "" #: trap.c:418 #, 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 "" #: trap.c:487 #, fuzzy, c-format +#| msgid "trap_handler: Bad signal %d" msgid "trap_handler: bad signal %d" msgstr "trap_handler: Semnal invalid %d" @@ -2100,6 +2181,7 @@ msgstr "" #: variables.c:4771 #, fuzzy, c-format +#| msgid "%s: parameter null or not set" msgid "%s has null exportstr" msgstr "%s: parametru null sau nesetat" @@ -2145,13 +2227,12 @@ msgid "Copyright (C) 2020 Free Software Foundation, Inc." msgstr "" #: version.c:47 version2.c:47 -msgid "" -"License GPLv3+: GNU GPL version 3 or later \n" +msgid "License GPLv3+: GNU GPL version 3 or later \n" msgstr "" #: version.c:86 version2.c:86 #, fuzzy, c-format +#| msgid "GNU %s, version %s\n" msgid "GNU bash, version %s (%s)\n" msgstr "GNU %s, versiunea %s\n" @@ -2165,21 +2246,25 @@ msgstr "" #: xmalloc.c:93 #, fuzzy, c-format +#| msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: nu pot aloca %lu octeți (%lu octeți alocați)" #: xmalloc.c:95 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: cannot allocate %lu bytes" msgstr "%s: nu s-a putut crea: %s" #: xmalloc.c:165 #, fuzzy, c-format +#| msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" msgstr "xmalloc: nu pot aloca %lu octeți (%lu octeți alocați)" #: xmalloc.c:167 #, fuzzy, c-format +#| msgid "%s: cannot create: %s" msgid "%s: %s:%d: cannot allocate %lu bytes" msgstr "%s: nu s-a putut crea: %s" @@ -2189,17 +2274,15 @@ msgstr "alias [-p] [nume[=valoare] ... ]" #: builtins.c:49 #, fuzzy +#| msgid "unalias [-a] [name ...]" msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] [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 [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-r keyseq] [keyseq:readline-function]" +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]" #: builtins.c:56 msgid "break [n]" @@ -2215,16 +2298,19 @@ msgstr "builtin [shell-builtin [arg ...]]" #: builtins.c:63 #, fuzzy +#| msgid "test [expr]" msgid "caller [expr]" msgstr "test [expr]" #: builtins.c:66 #, fuzzy +#| msgid "cd [-PL] [dir]" msgid "cd [-L|[-P [-e]] [-@]] [dir]" msgstr "cd [-PL] [dir]" #: builtins.c:68 #, fuzzy +#| msgid "pwd [-PL]" msgid "pwd [-LP]" msgstr "pwd [-PL]" @@ -2234,16 +2320,19 @@ msgstr "command [-pVv] comandă [arg ...]" #: builtins.c:78 #, fuzzy +#| msgid "declare [-afFrxi] [-p] name[=value] ..." msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" msgstr "declare [-afFrxi] [-p] nume[=valoare] ..." #: builtins.c:80 #, fuzzy +#| msgid "typeset [-afFrxi] [-p] name[=value] ..." msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." msgstr "typeset [-afFrxi] [-p] nume[=valoare] ..." #: builtins.c:82 #, fuzzy +#| msgid "local name[=value] ..." msgid "local [option] name[=value] ..." msgstr "local nume[=valoare] ..." @@ -2257,6 +2346,7 @@ msgstr "echo [-n] [arg ...]" #: builtins.c:92 #, fuzzy +#| msgid "enable [-pnds] [-a] [-f filename] [name ...]" msgid "enable [-a] [-dnps] [-f filename] [name ...]" msgstr "enable [-pnds] [-a] [-f nume_fișier] [nume ...]" @@ -2266,11 +2356,13 @@ msgstr "eval [arg ...]" #: builtins.c:96 #, fuzzy +#| msgid "getopts optstring name [arg]" msgid "getopts optstring name [arg ...]" msgstr "getopts optstring nume [arg]" #: builtins.c:98 #, fuzzy +#| msgid "exec [-cl] [-a name] file [redirection ...]" msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]" msgstr "exec [-cl] [-a nume] fișier [redirectare ...]" @@ -2280,11 +2372,13 @@ msgstr "exit [n]" #: builtins.c:102 #, fuzzy +#| msgid "logout" msgid "logout [n]" msgstr "logout" #: builtins.c:105 #, fuzzy +#| msgid "fc [-e ename] [-nlr] [first] [last] or fc -s [pat=rep] [cmd]" 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]" @@ -2294,26 +2388,27 @@ msgstr "fg [job_spec]" #: builtins.c:113 #, fuzzy +#| msgid "bg [job_spec]" msgid "bg [job_spec ...]" msgstr "bg [job_spec]" #: builtins.c:116 #, fuzzy +#| msgid "hash [-r] [-p pathname] [name ...]" msgid "hash [-lr] [-p pathname] [-dt] [name ...]" msgstr "hash [-r] [-p nume_cale] [nume ...]" #: builtins.c:119 #, fuzzy +#| msgid "help [pattern ...]" msgid "help [-dms] [pattern ...]" msgstr "help [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] [n] or history -awrn [filename] or history -ps arg [arg...]" +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...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2321,25 +2416,22 @@ msgstr "jobs [-lnprs] [jobspec ...] sau jobs -x comandă [args]" #: builtins.c:131 #, fuzzy +#| msgid "disown [jobspec ...]" msgid "disown [-h] [-ar] [jobspec ... | pid ...]" msgstr "disown [jobspec ...]" #: 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 | job]... or kill -l [sigspec]" +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]" #: 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 ...]" +msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" msgstr "" #: builtins.c:140 @@ -2348,21 +2440,25 @@ msgstr "return [n]" #: builtins.c:142 #, fuzzy +#| msgid "set [--abefhkmnptuvxBCHP] [-o option] [arg ...]" msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" msgstr "set [--abefhkmnptuvxBCHP] [-o opțiune] [arg ...]" #: builtins.c:144 #, fuzzy +#| msgid "unset [-f] [-v] [name ...]" msgid "unset [-f] [-v] [-n] [name ...]" msgstr "unset [-f] [-v] [nume ...]" #: builtins.c:146 #, fuzzy +#| msgid "export [-nf] [name ...] or export -p" msgid "export [-fn] [name[=value] ...] or export -p" msgstr "export [-nf] [nume ...] sau export -p" #: builtins.c:148 #, fuzzy +#| msgid "readonly [-anf] [name ...] or readonly -p" msgid "readonly [-aAf] [name[=value] ...] or readonly -p" msgstr "readonly [-anf] [nume ...] sau readonly -p" @@ -2372,11 +2468,13 @@ msgstr "shift [n]" #: builtins.c:152 #, fuzzy +#| msgid "source filename" msgid "source filename [arguments]" msgstr "nume fișier sursă" #: builtins.c:154 #, fuzzy +#| msgid ". filename" msgid ". filename [arguments]" msgstr ". nume fișier" @@ -2394,41 +2492,49 @@ msgstr "[ arg... ]" #: builtins.c:166 #, fuzzy +#| msgid "trap [arg] [signal_spec] or trap -l" msgid "trap [-lp] [[arg] signal_spec ...]" msgstr "trap [arg] [signal_spec] sau trap -l" #: builtins.c:168 #, fuzzy +#| msgid "type [-apt] name [name ...]" msgid "type [-afptP] name [name ...]" msgstr "type [-apt] nume [nume ...]" #: builtins.c:171 #, fuzzy +#| msgid "ulimit [-SHacdfmstpnuv] [limit]" msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" msgstr "ulimit [-SHacdfmstpnuv] [limită]" #: builtins.c:174 #, fuzzy +#| msgid "umask [-S] [mode]" msgid "umask [-p] [-S] [mode]" msgstr "umask [-S] [mod]" #: builtins.c:177 #, fuzzy +#| msgid "echo [-n] [arg ...]" msgid "wait [-fn] [-p var] [id ...]" msgstr "echo [-n] [arg ...]" #: builtins.c:181 #, fuzzy +#| msgid "wait [n]" msgid "wait [pid ...]" msgstr "wait [n]" #: builtins.c:184 #, fuzzy +#| msgid "for NAME [in WORDS ... ;] do COMMANDS; done" msgid "for NAME [in WORDS ... ] ; do COMMANDS; done" msgstr "for NUME [în EXPRESIE ... ;] execută COMENZI; done" #: builtins.c:186 #, fuzzy +#| msgid "for NAME [in WORDS ... ;] do COMMANDS; done" msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done" msgstr "for NUME [în EXPRESIE ... ;] execută COMENZI; done" @@ -2445,12 +2551,8 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case EXPRESIE în [TIPAR[[TIPAR]..) 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" @@ -2466,26 +2568,31 @@ msgstr "" #: builtins.c:202 #, fuzzy +#| msgid "function NAME { COMMANDS ; } or NAME () { COMMANDS ; }" msgid "function name { COMMANDS ; } or name () { COMMANDS ; }" msgstr "function NUME { COMENZI ; } sau NUME () { COMENZI ; }" #: builtins.c:204 #, fuzzy +#| msgid "{ COMMANDS }" msgid "{ COMMANDS ; }" msgstr "{ COMENZI }" #: builtins.c:206 #, fuzzy +#| msgid "fg [job_spec]" msgid "job_spec [&]" msgstr "fg [job_spec]" #: builtins.c:208 #, fuzzy +#| msgid "expression expected" msgid "(( expression ))" msgstr "se așteaptă expresie" #: builtins.c:210 #, fuzzy +#| msgid "expression expected" msgid "[[ expression ]]" msgstr "se așteaptă expresie" @@ -2495,11 +2602,13 @@ msgstr "variabile - Numele și înțelesurile unor variabile din shell" #: builtins.c:215 #, fuzzy +#| msgid "pushd [dir | +N | -N] [-n]" msgid "pushd [-n] [+N | -N | dir]" msgstr "pushd [dir | +N | -N] [-n]" #: builtins.c:219 #, fuzzy +#| msgid "popd [+N | -N] [-n]" msgid "popd [-n] [+N | -N]" msgstr "popd [+N | -N] [-n]" @@ -2509,6 +2618,7 @@ msgstr "dirs [-clpv] [+N] [-N]" #: builtins.c:226 #, fuzzy +#| msgid "shopt [-pqsu] [-o long-option] optname [optname...]" msgid "shopt [-pqsu] [-o] [optname ...]" msgstr "shopt [-pqsu] [-o opțiune lungă] nume_opt [nume_opt...]" @@ -2517,33 +2627,25 @@ msgid "printf [-v var] format [arguments]" msgstr "" #: 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 "" #: 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 "" #: builtins.c:239 #, fuzzy +#| msgid "unset [-f] [-v] [name ...]" msgid "compopt [-o|+o option] [-DEI] [name ...]" msgstr "unset [-f] [-v] [nume ...]" #: 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 "" #: 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 "" #: builtins.c:256 @@ -2561,8 +2663,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 "" @@ -2588,30 +2689,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" @@ -2646,8 +2742,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" @@ -2674,22 +2769,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" @@ -2705,13 +2794,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 "" @@ -2733,6 +2820,7 @@ msgstr "" #: builtins.c:442 #, fuzzy +#| msgid "No effect; the command does nothing. A zero exit code is returned." msgid "" "Null command.\n" " \n" @@ -2740,8 +2828,7 @@ msgid "" " \n" " Exit Status:\n" " Always succeeds." -msgstr "" -"Nici un efect, comanda nu face nimic. Un cod de ieșire zero este returnat." +msgstr "Nici un efect, comanda nu face nimic. Un cod de ieșire zero este returnat." #: builtins.c:453 msgid "" @@ -2764,8 +2851,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" @@ -2811,8 +2897,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" @@ -2846,8 +2931,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" @@ -2871,11 +2955,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" @@ -2926,8 +3008,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" @@ -2980,8 +3061,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" @@ -2989,13 +3069,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 "" #: builtins.c:715 @@ -3014,8 +3092,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 "" @@ -3023,15 +3100,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" @@ -3045,8 +3120,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 "" #: builtins.c:764 @@ -3065,10 +3139,8 @@ 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" @@ -3080,8 +3152,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" @@ -3117,8 +3188,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 "" #: builtins.c:842 @@ -3149,8 +3219,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." @@ -3227,8 +3296,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" @@ -3270,16 +3338,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" @@ -3291,8 +3356,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,10 +3374,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 "" @@ -3372,8 +3434,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 +3458,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" @@ -3427,8 +3487,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" @@ -3442,8 +3501,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" @@ -3550,8 +3608,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 +3629,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" @@ -3611,8 +3667,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" @@ -3623,8 +3678,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" @@ -3633,34 +3687,26 @@ 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 or a signal " -"number.\n" +" Each SIGNAL_SPEC is either a signal name in 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 "" #: builtins.c:1400 @@ -3689,16 +3735,14 @@ 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 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" @@ -3765,23 +3809,19 @@ msgstr "" 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" @@ -3797,14 +3837,12 @@ msgstr "" 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 "" @@ -3889,17 +3927,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" @@ -3946,8 +3979,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" @@ -3995,12 +4027,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" @@ -4188,34 +4217,27 @@ 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 "" @@ -4223,10 +4245,8 @@ msgstr "" 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,10 +4261,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." @@ -4255,8 +4273,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" @@ -4267,12 +4284,9 @@ msgstr "" 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" @@ -4299,22 +4313,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" @@ -4327,13 +4336,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 "" @@ -4472,9 +4479,7 @@ msgstr "" #~ 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" +#~ 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ă" @@ -4564,62 +4569,43 @@ msgstr "" #~ 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ă." +#~ 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" +#~ 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." +#~ 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 "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. " +#~ 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" +#~ 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 "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 " -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," +#~ 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 " 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." @@ -4628,14 +4614,10 @@ msgstr "" #~ msgstr " -l Listează numele funcţiilor." #~ msgid " -P List function names and bindings." -#~ msgstr "" -#~ " -P Listează numele funcţiilor şi legăturile (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 " -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)." @@ -4644,61 +4626,43 @@ msgstr "" #~ 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" +#~ 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." +#~ 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 " -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" +#~ 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 " -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." +#~ 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," +#~ 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." +#~ 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 " +#~ 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" @@ -4713,13 +4677,10 @@ msgstr "" #~ 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" +#~ 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" +#~ 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 (/)," @@ -4728,24 +4689,16 @@ msgstr "" #~ 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" +#~ 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" +#~ 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 "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 "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." @@ -4759,38 +4712,26 @@ msgstr "" #~ 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 "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" +#~ 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 "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 "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 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," +#~ 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" @@ -4834,38 +4775,29 @@ msgstr "" #~ msgid "name only." #~ msgstr "numele funcţiei." -#~ msgid "" -#~ "Using `+' instead of `-' turns off the given attribute instead. When" +#~ 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'." +#~ 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" +#~ 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." +#~ 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" +#~ 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ă:" +#~ msgstr "următorului caracterelor speciale (backslash-escaped) este activată:" #~ msgid "\t\\a\talert (bell)" #~ msgstr "\t\\a\talertă (clopoţel (bell))" @@ -4900,90 +4832,62 @@ msgstr "" #~ 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" +#~ 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 "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ă" +#~ 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 " +#~ 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" +#~ 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" +#~ 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'." +#~ 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ă" +#~ 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" +#~ 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ă" +#~ 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 " +#~ 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" +#~ 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" +#~ 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 "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." +#~ 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ă" +#~ 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," @@ -4992,8 +4896,7 @@ msgstr "" #~ 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" +#~ 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" @@ -5002,13 +4905,10 @@ msgstr "" #~ 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" +#~ 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," +#~ 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." @@ -5017,14 +4917,10 @@ msgstr "" #~ 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" +#~ 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" +#~ 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" @@ -5033,23 +4929,16 @@ msgstr "" #~ 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" +#~ 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" +#~ 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 " -#~ "'?'" +#~ 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" +#~ msgstr "va fi pus în NUME, OPTARG va fi desetat, şi un mesaj de diagnosticare va fi" #~ msgid "printed." #~ msgstr "afişat." @@ -5064,9 +4953,7 @@ msgstr "" #~ 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ă" +#~ 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." @@ -5078,12 +4965,10 @@ msgstr "" #~ 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" +#~ 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'" +#~ 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" @@ -5103,30 +4988,20 @@ msgstr "" #~ 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 "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" +#~ 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 " -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 " 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." @@ -5137,12 +5012,8 @@ msgstr "" #~ 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 " -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" @@ -5154,16 +5025,13 @@ msgstr "" #~ 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ă" +#~ 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ă" +#~ 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" +#~ msgstr "JOB_SPEC nu este prezent, este folosită noţiunea shell-ului despre jobul" #~ msgid "used." #~ msgstr "curent." @@ -5172,9 +5040,7 @@ msgstr "" #~ 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" +#~ msgstr "`&'. Dacă JOB_SPEC nu este prezent, va fi folosită noţiunea shell-ului despre" #~ msgid "job is used." #~ msgstr "jobul curent." @@ -5183,33 +5049,22 @@ msgstr "" #~ 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" +#~ 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ă. " +#~ 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" +#~ 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 "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" +#~ 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," +#~ 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." @@ -5223,97 +5078,65 @@ msgstr "" #~ 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" +#~ 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 "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." +#~ 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" +#~ 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ă" +#~ 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" +#~ 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." +#~ 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" +#~ 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 "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" +#~ 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." +#~ 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 "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 "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," +#~ 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 "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 "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)." @@ -5324,41 +5147,29 @@ msgstr "" #~ 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'" +#~ 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ă" +#~ 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ă" +#~ 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" +#~ 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 "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" +#~ 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" +#~ 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" @@ -5439,86 +5250,61 @@ msgstr "" #~ 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" +#~ 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" +#~ 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 "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 "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" +#~ 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 "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 "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." +#~ 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" +#~ 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 "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," +#~ 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 "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." +#~ 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." +#~ 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)." @@ -5526,11 +5312,8 @@ msgstr "" #~ 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 " -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." @@ -5560,9 +5343,7 @@ msgstr "" #~ 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" +#~ msgstr " emacs foloseşte o interfaţă de editare de linii stil emacs" #~ msgid " errexit same as -e" #~ msgstr " errexit la fel ca -e" @@ -5579,11 +5360,8 @@ msgstr "" #~ msgid " interactive-comments" #~ msgstr " interactive-comments" -#~ msgid "" -#~ " allow comments to appear in interactive commands" -#~ msgstr "" -#~ " permite comentariilor să apară în comenzi " -#~ "interactive." +#~ 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" @@ -5612,15 +5390,11 @@ msgstr "" #~ 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 " 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 " 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" @@ -5632,25 +5406,19 @@ msgstr "" #~ 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" +#~ 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 " -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 " 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." @@ -5662,86 +5430,61 @@ msgstr "" #~ 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." +#~ 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." +#~ 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" +#~ 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" +#~ 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" +#~ 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)." +#~ 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" +#~ 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 "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" +#~ 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." +#~ 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" +#~ 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'," +#~ 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), " +#~ 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" +#~ 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 "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." @@ -5753,26 +5496,21 @@ msgstr "" #~ 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'`," +#~ 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" +#~ 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" +#~ 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" +#~ 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," @@ -5781,30 +5519,20 @@ msgstr "" #~ 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 "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 "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" +#~ 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 "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." @@ -5813,12 +5541,10 @@ msgstr "" #~ 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." +#~ 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." +#~ 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 " @@ -5833,8 +5559,7 @@ msgstr "" #~ 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ă" +#~ 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ă." @@ -5855,30 +5580,22 @@ msgstr "" #~ 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)." +#~ 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." +#~ 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\"." +#~ 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ă." +#~ 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." +#~ 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ă." +#~ 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." @@ -5899,35 +5616,25 @@ msgstr "" #~ 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." +#~ 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." +#~ 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 " -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 " +#~ 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." +#~ 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." +#~ 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:" @@ -5956,19 +5663,14 @@ msgstr "" #~ 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 " 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 " True if STRING1 sorts after STRING2 lexicographically" +#~ msgstr " Adevărat dacă ŞIR1 se ordonează lexical după ŞIR2" #~ msgid "Other operators:" #~ msgstr "Alţi operatori:" @@ -5980,8 +5682,7 @@ msgstr "" #~ 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ă." +#~ 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," @@ -5992,11 +5693,8 @@ msgstr "" #~ 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 "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." @@ -6008,111 +5706,76 @@ msgstr "" #~ 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" +#~ 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" +#~ 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" +#~ 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" +#~ 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." +#~ 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 " +#~ 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" +#~ 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" +#~ 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 " +#~ 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 " -#~ msgstr "" -#~ "fiecare număr de semnal. SIGNAL_SPEC este ori un nume de semnal din " -#~ "" +#~ msgid "each signal number. SIGNAL_SPEC is either a signal name in " +#~ msgstr "fiecare număr de semnal. SIGNAL_SPEC este ori un nume de semnal din " -#~ 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 "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" +#~ 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" +#~ 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" +#~ 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', `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 "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" +#~ 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'." +#~ 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 "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." @@ -6127,8 +5790,7 @@ msgstr "" #~ 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" +#~ 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ă:" @@ -6176,17 +5838,13 @@ msgstr "" #~ 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." +#~ 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" +#~ 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" +#~ 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" @@ -6194,44 +5852,29 @@ msgstr "" #~ 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 "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 "`-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 "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)." +#~ 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 "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," +#~ 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" +#~ 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ă" @@ -6240,27 +5883,19 @@ msgstr "" #~ 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," +#~ 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" +#~ 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 "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 "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." @@ -6269,87 +5904,58 @@ msgstr "" #~ 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" +#~ 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 \"$@" -#~ "\"'" +#~ 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" +#~ 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" +#~ 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" +#~ 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ă" +#~ 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ă" +#~ 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" +#~ 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." +#~ 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 "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 "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 "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 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 "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ă." +#~ 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" @@ -6370,63 +5976,43 @@ msgstr "" #~ 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" +#~ 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" +#~ 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ă" +#~ 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 "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)." +#~ 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" +#~ 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" +#~ 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 "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ă." +#~ 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" +#~ msgstr "HISTSIZE Numărul maxim de linii de istoric care pot fi accesate" #~ msgid "\t\tshell can access." #~ msgstr "\t\tde un shell activ." @@ -6434,20 +6020,14 @@ msgstr "" #~ 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 "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 "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" +#~ 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" @@ -6456,38 +6036,28 @@ msgstr "" #~ 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)." +#~ 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." +#~ 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ă" +#~ 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ă." +#~ 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" +#~ 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" +#~ msgstr "PROMPT_COMMAND O comandă care va fi executată înainte de tipărirea fiecărui" #~ msgid "\t\tprimary prompt." #~ msgstr "\t\tprompt primar." @@ -6502,32 +6072,25 @@ msgstr "" #~ 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" +#~ 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)." +#~ 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" +#~ 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ă" +#~ 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." @@ -6535,22 +6098,17 @@ msgstr "" #~ 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 " 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" +#~ 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" +#~ 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" @@ -6562,45 +6120,34 @@ msgstr "" #~ 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" +#~ 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ă" +#~ 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." +#~ 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." +#~ 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" +#~ 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" +#~ 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." +#~ 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" @@ -6615,8 +6162,7 @@ msgstr "" #~ 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" +#~ 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ă." @@ -6651,10 +6197,8 @@ msgstr "" #~ 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 "-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ă." @@ -6663,85 +6207,61 @@ msgstr "" #~ 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" +#~ 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 "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 "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" +#~ 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," +#~ 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" +#~ 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 "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" +#~ 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" +#~ 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." +#~ 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" +#~ 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." +#~ 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 " +#~ 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ă" +#~ 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" +#~ msgstr "o listă a tuturor opţiunilor setabile, ceea ce indică dacă fiecare este" #~ msgid "not each is set." #~ msgstr "setată sau nu." diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index 6d2dc9f92280a3857cba3b92576b27e2c04c40a1..a13f7afbfa4da92d2e5cdcb40050dc13dc1677bd 100644 GIT binary patch literal 169521 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

    `Y;~n+0wlbZGYMnc)GEni{=^K}KQz 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 R|#9G-ZA3W^7K+qEZo!pwV0}s30f^in<;s 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 h~|1CQViR?H!EL0pq z%Z9YG3j1S^xRSQ%z-R&PfSk^;!|z$f-!728L5|@>Bn* zRtI_2T~$w`#$oa3kRjc=);pNrNG?SFi6?a2j{(N2x!$(trcJJla4Vrgyt%GjcAhME zS5(7fR(_%@7)xT3TZX$n`#$sS-tcF^3><)W%&&!SmzbLWOmyC-4p z;)F!Ssits8q;n3dCE2?TjOs`o2(lySle8*2*kscQq7rQ?I;)SlcVAGMMEM8Ird!r= zss*c~ARo}}^K!-WAFu!$Fa#blIk{bGk1~|$PN?3#>Nt1gwUOm*3R=%yNL;LEG=K|8 z;Y78PYSx2RXrkmp*1unvca*(ui$oni`ikZcSx{$ltET5iY=W5g5sULnBvIw5y$p3F z0#&I0@@$y+>@3)8r~P>M`@)Tw6zSiUx-|5Gv}--Wi;YCK6~kFkQ5YMU0Fi}%V1ba457cz!)TY2m!s#d7OYo`S)c9l6)zEIc4J4yibr z(%8`MamS;>CVf-N2BCk<{ClIB1ma4PS-PXk&Wbf3vr!JHSxHlq88Q~4mm39zaX4163Ls7X|klQP*c&=FE72Xa%toQO;;T>C_%w=bB1UYp(Po^s+G=<&p>XiZwOJvH<#t2-yu~=O z%{Pv?8xEnNyb|L%gQG(9R$FyDfU{wBDHm^k3d-n_uUYJ1HAV6c;e)hkTWw57e9mUF zXz}>xY@_(w=PZht2*iOH^#xng-FYLI5Jmf@s9Mx~!Lob1c7jH}6A#zWaX@rdPHkpm zc(g7aZDu7QmWUAP zcVU1L6|3mYbqv>$yt_m6aIrr3#$tl?C?I@M;b1E0rEo_pF=l*OZ&Ms>In!i@s)$S% z8#5?5G}KPfIFfBn=fGHjPzUMasyZc}b+M&t@7EeEBgVSf1cxO-o(jZ+YUHyZ`PE7h zl@WY;n;0U}s40%xsKJaxq|hSEUXd)}wcMigpGN>&Z(Xh0T7#&8c)7P!XP?$T% z0;xD_OMNOkdDuf|V61h$9wqBMZ3pT}ML8Vk&=}%AdM+eb$x$ee!?F zo*=WgoIU_@1yo|Q3zSt1X<_|(Cy!WXH-%Jh(b(kccnmjS#8x|N! z4OmW1n!V7?{K#t3EE9kDmiZgY{DnNx_zjB@KYhdW0XXGNpN;!W1IFje>co_9*?=B; z+qN^mH5@YXjOA%Pd6->Pe9L-A{cPhv4JAd-Y<1qeYB4~>xo^OV`O3w*1*-U2*|fX5 z!d;T5XhKn^6jr?IJ9a=6|BIdIWu6jJTXJOuBL3ej!k)bT(G_y?OHC8Qwk3|CbB!oF zJe9EH3N7*&v=D6#T2R9*ca=@6qfPXJsnmpvZa=bNzPL$)2mP-(^Yc*X8|Rgr<>lhu zA6eRz_!;O$tFw@Vt8>(dF8y-@WtIJ=PBDR0#gkcq3Gs_s znTxc}%i~EWQU5+zBR>6!jp}M?cYi;gI6Y;Z7r+;InV>59CZSpb5H3r;^rpI^CGzad%n0|R_f*~o3bJn z$KAgejYn5mrC7#zNS}=5t5Y^)+Ndg>-ozQkXE}_s%gqfKh=gK&f4-^pw}7plf5AN8 ztWHkR?nS*k2X*bTs!iJKl1diOUZVPFlj?LHSPN!h1BqPDgB)$oq0kA~9k#wVy5z4w*}&zJ3G9p)A?zg`=LD{oV~1KwoMe`uv4S^X3DQic8!l^?KZyGp&od z)5d9;q7xYDQ+Zm9Z^vWDyBqS|=WERPOj0$>P);3noOK(slp%`B>*9oYaY^?q78l#` z*`pWFgGb#v_SucVMdtYl>L~^G00E7X5$(DE5cPrrM;^Lr+4^+z^?VATMcH<-J?}pU z_eV+hkwb`zmbm83KIA3dhSZc5U||(mf{@D1U@VGnbDsx0zd=0Go(GCQw&x@6woZBX zaiMqMBY6A_k<@{2au|b?4`fsMj^~($LPX^FTa5*#gC2C|-4|fkssC2hP6cC_Hwm=f z#j_q6Fk|cGnY_*$jop-)9r=`4BU*NC%6b|5YW1Q^cYMQcs~S!mfvSpBvQaNf>&X4Y zyB)c2e>EemM{nf(6}C=1c5EAYHZOL*HO|j6rfSkFEf7r-#|oWhwwk9jk73P6)zn}% zywFFP@)(f?YwE^~EE@{0lZVNq(5ENeleicx_Cl|HPD#=|tbCg?D{VzWPB|+bRA-XD zZbRCtGz|9IO?}mq7ADL@16D?1>TTtgDIbkfWs*JzYr@0KKzBkD1DsCaDRjU#H(yCE zxtSml?ym4KqMya9oq5mzv*(s?8}*edY(ls3J`O9ranUd|B108r=+JZOIg0g z25O+b;GWpT#rMq9apx5T3apCKHbcM1^w_y`r^Qa6qtm4uR=^}DUEb4jmcANIZLk?A()RwYyZC@0wee)4 z**55lY^&Gq;=!|88%j7srIn(>rwfW&j-Ei%f9G)!;t^L@axXk z_r&x62gpxBp^4%VA0A>{M{(ST`*&04m!!KyBt6b%izz+0kIlGDLKklx01b6kU*0{= zdw#X~#x4+dV9U$cO?^Z-ZqZ=exp}3Kc_v8Zh%j=9q<*}wxYCyoY~98H@vvYW#8=Re z-_JG_8g3VZ`futK)o9mUypmkVu-`^Lcg| z9T&rWk&52jUp&@}Pw3Vvxv3XldjB0u>na{tdBbFo9jY~?x5ys0&Ou6+I(JH^w~u`T z)*7@Nes}Av;`82oSkIa~#d*d@F|rRoiw1>pe#6@W8FF{|@aTam_6l!?P~^FOO_{){ zK75RYLB{s~k5^_mFkDoT-gL>C#58ptbtvJE(X4dTzeSp?D8yNxZa)hOGhpCwrMHh%5h`nC;PaW?nkaczUGU+l++N6OmUI#<=c zmdfvym&6_si}}D|t?N?3^oH(k-lQY$>(65xDn_-kGTiiZnu=bVoqR(QFSprb1ekWSb)j@w=(f;+8LeBEalESL@+x=z&9?Vi7%>$^bktaFTrVHMX)LT^ zKFO(@Qt=fF zfXbrwBR0jM|A#$=2z84OUcXa(f$Vq7A$}SK86oKPvM8QB3L5TDhDX z#>p`I9J%j?!O%O^Mv1)PYu^o6G6@TuEf+32w-sB@PnZXf^yFn`|3t6BJhOw0$e?hh z>cRZDgM9O-d~QDs_P>e0^>z|-SEjXR7Lsu@T%Pq&J46=y53n*$3#t$zpdGbgM2q0Y z{3_heX&%BK>_wPR7FuD%e4P&v>vSH{9ybNW;{iOxM@CuEcWO?u-E#qa(lm2xp1hLA z^5Kz}^t9Uakd=^Gt*gL(Fg8IwnKu-cFm)SL9qoXNYJVOoT>gBd$henx9Ih)2jw{!P z)!EfhN{v#`i`YAqFLH#1g-wxrJu>bE9Zb?MY96LHB|Y+k%tO%@El2Y3DpwR5I17!< z8nR<(PPaM#PX|CG+o{-jAiD!kk>?zyBO<2LlSGG}oR%SjIu_ZL3fC&$B3VUS;FT8h z7ez_u2l_rJ3|wt2kRRlBb6H-b1ro+#z2!&x@!b0^n#HNBW=M@XlWD{i;7Nar&&<5< z2Uh^8@*0saWVIX7i-mOi8&!}<9W<7)~c^ytd(N64!(HxPUt$ zW$aKw%NTgncNiZrt4&x84xcm!DSU=X(B>aWW9hZCZv5-ZHl(JkX&asO$uK_JF+X93 zZl1_$qeWSTfn`2Z<~=RwkR|a%4yi>6GpU&6=0%KQhx9}+hAG+IcmO}{X+q24@OH7y z&V2{AD()?UllN6SkL{G1w#o)c!Z(-?G+$-}bKRlZQU=ZuwOrC+%#z)n+HyTPG~JF< zOWx)LG)8x^1rx8U3NM*6EFf#O>bQbDpXQzWbJAeRb%`H>`Gi!e$@CGJ!=Uo^V>O#i$w2He1;EQP)l5l7yd{uxL7-i59@9oDptW#r$_NoGij>XK$kE%-zjW#!K(fm-l;aoF(_&|9F}+ zJWTvCoX_r=G=H(-qELF?n~yP{5r!p=yWLWh(^7`WsS@5}xfdh2Z?_``6Jc!V?<4pe zBcDzOaWJY@u8GN+sabmHI=osYk|(BFRA||vM3^z_|rK1`0{{-X>v!PWZOSd=D4c3jzIYuN8oQC#mx*DQ-S;rZ^?Tk;1+ zbDzaZK{j+;()qospCl^!h2<8!x%SCAQJpkz6jFX7ikFvRB66=?939OA`?PUZ5k~Kg z<}?2v_tY!L@O#8-W4N#I8_S1uAnjw~SpMKJi-U0)EO_U4fgVj~ZPgZ_RLsTeWBD(G zf~|p@A(oP>jdy{9j5EVY4GRf%EGZkC8*=4+BQ@qNb;f3} zLfttIP@g=W+im8Zzv7Yc+)?}Wcs`4DZ@Y-bM)SqKXq45TY_8vn*eW}zN}WNjisnCd zB%vs-Oyn=mQI{)Pv{LlxTDIrtQa$sl)q7|SM#h!NzZ>%lH@7g=9VNz16Y7e-BY1A5 z`Fc48$>M^(9!iZ?oAuJKjdl>25Om^`)E{#@Q(u;nxmqVxM7AgWj&uV2++_aB1YmYg zbv>B4SW8o>yR01J%up>>`!RF^$y0y6xuFTGrK{~=l3$v_$M-;H%e6$ViRY&Aeyd$o zC)KuX<6+3**>R;!b!rU+b1TKl}Zi>@0QjDgJ06%r3l<#PjZV#w0oi* zQhyQ~W4JxiSyyN23EpRHT)AKri)&p>7ca)}HM*q`ZG+K)aN5Ji2`LL<(iw(_< zjr#Hx6h(WOc)_{}ZZaJVm=zIefZ&ah!#e6S;-=j*Q@j+zM+^>?1|9H#v*4NLrbDK@ zAiYJ@Oym96n(De0M_||1C8P!+9mC2mQABmn(KSo|_5a%B&;g;FWzc8nCgaky+DmxX zo~RNn(|Aw>o~)KP|KS-uJb{Uypb0Y(W{r8~LmFqJrt<)Yx*?8=$ssT^>4BlBOjEGE zbUl+#1Ld`WrtUqgi4)V(S>>t#Y2b}o4vZM72S$$6!@~5y3>>bOp7PW$l7u#^K!N>i zHt%~kRBMUJ77X_;U}>j=I$hAippO5&HiHK&^WGGvlM2_|P)p&WG8$m3=S+^C3@p4} zH!@-ki!5pd&0}?UA$n%Z)Muh~v?!d-{l}s2Mk?CYj_QGlBO*Xu0}zQ3@;cth87Nce zT^G%>c|d1Ul_SD%*^P2Y*GawSO1Tnv(ubl44wdd@sVrl3D2}moa(JJD>1&83B`a%- zitW2o>W+GAYEWi~<|^De!E?1%&1#y`ts{*Kw|c*urwLR9#_LIZhxo;O{*XMv-b-Cf zBKK&b_2i)Cb`kR^sAzlvpCJ+!@O(#2tw)`R$04v|SSkJXf^l1sva-8av#G^b=62o? zsK>+f%DqhLXtMe$e?a4k^W zLucv!M}w^L`V-ukZe0b%=;J=y?R0N7nZ%w&ymxPDxy8+XKnz&Ucq3SJOT+I7VZ7l)} zf36I|H8;r2kmx&f$M+sSE&TR$c}vs%35)gM@DN>j9b{8v2kg3s4{)eUR}>+Q@VB4o zF;*zWytgvz#Y-lhDsXsDlk)AIq>z(4jF-s1j}P@B239w#nKz|AeIE}L1+RjJ{ipl5 zttT1w7AshExSvn#bq8`Ryq}M}Q+mn$d=gzvWvvDThx0-)#@g;Lc5N@0Lyz)XO#`S$ zH+@X1oV-a;4_Jc+cc_vzfq?-^-l7`iH9EK89sO3KmFuEK8IqhJZCV-OvEhV16w7mhlClH1l2|9fs}VGoFl6S zZy+zL1SO1uF7Optv}BK|@rX&6nV;zN5MLmcKE!8sNyf05bs6bf?9%GLla}9oDKEbZ zg@_L3vI%i=T!?gLEkk*h_gl@Jjd|ZSOc0OIC2d!QT5$iAPv@QESvUVrJF1dCtZfJ(82t+fzT zI=7|r1r9px7?RDgubqKvU#dbgLxS2EG=p&-4-H>SMq_~sAXEn#MPDDe)md@T5GAeN|lKp zR)Si3_8eXql8?ubAx%~I&?cL^{wi+6O<%=BhRXX@6BBPW=9^b`-D)hr9f#OO(-RVO z;4rak758(XjuJ(u^He@iX^c8I&zdDq0L+?&6&2+;bE~X%DKjqjysKuPyWqMRFF0$K z?!CyD77h$6If<=UD#3n;v)VS&YkjEB(?YVd%PKePh8bI)vwi9lI0KZ+(sJur~_HeYkQX&YWXsc)^2TU+$iTv57faCzJ z&5ypR?2&ur?KNEND-jQ2I=AH|f$WEl9go&U z+#|fE9ZX#D!y|lJN6IRuZQzme%+CfM)G1@#iq!O!E#lM$J`WTBx`Bs?A(`9{U#4X8 z)9sT(SK5UqlTQ<&S^Qy}9vqau0_`(#JdXK@sw|!@p4`L-cu8}36E7Hy+9qf>w5@Qf zF-KcY2d=#4&0(8&N&fgzzM!Luj~Tz2FB3;M^Ci<|SB+||mno2oNYPh0YGg<i9M0xrM8g8+*R9nBhAf9i7_^y~!~GV}^HR$!f1=ecoiyOlU?goh z9VV7#Gj6G7h6PX$V9+X|+79wZ+Qb_mH!*@#w162`gh&ZR-?a2~ z%Tu5MI?*ITxAHjo+g4dy`N~NA4JspWgnk?f>A3>vseUfg_(4&5!{jCWwa4z;xE&|L zgl*X8`eGdEoB4cX2N{(rj%?#YJJQcgh!?i;z+Q$>B$+I)DES`pw8O=3&~|qH&I}eP2H)+=6{~+;;Y-9+s$aR?wh%7G>0IQvf{d+r) zM*O35dB~#V(9L$WokEt4rnGJRxiaaJr1M5Q%RSqgG+H^_hZ^vQt)%FRHt&l}-JF(X z*MLl-DVO{DC&R2jW7oJn10PAQC2!2gN=vub{w>}i7UFL?!0NVCUlN+3(>69Oc0hhiOjLz+++0^f1#Z>ECnU~zICk#br0KUB z%ew$JtI{&FQa3z|LIm(zuZyWWxz7+#o?ZKH$SmF;X`_`wUy`v@S^sc4 zlwT6GVyU{mL>UP9^P8f_E*{X%dFZSdzl%@lrZAzSVVidGpl(`bYI^E&y1iRm+QnCS ze=>GRA-A`B8zkN;B+Z?UoiK9VmLhZa;FT5P^FkgZNoXtL{5;j-;Ua$PZdy;x$?(8#KFPA&?B)S&bG)>h2TdlK3F{500G^sE z{OLMly-p5BB_!mwbfd^byBJ$ctK^zu9yC5$S3lw>PrKsJ=~)X(0R*DfC2t@xH-wNK zUN7dOI?@J@=upB#48b|BgpWZ=WR&nPP#0Xf6sIrfn(~|xnwEE}k+zsL<9ZHteTkvA z{=XIvBcb)b78kLlU`c$rhx>ZRpxa&^VKd$=IYj1OKEEBBU%%eVgDj&YMciw9`H+y- zBd1wgZZoLkOZkW)tsivPywt2JPpg+eho6@nXn+K2mJm&;2_a fj3R3G^JJZ5pAu4qJ6iVUYmY0RoIX*1Qv3e^&w$Rg diff --git a/po/zh_CN.po b/po/zh_CN.po index 4477a8124..8cbe65dec 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -9,47 +9,33 @@ # liushuyu , 2016. # Mingye Wang , 2015, 2016. # Boyuan Yang <073plan@gmail.com>, 2018, 2019, 2020. +# Wenbin Lv , 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" "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" +"PO-Revision-Date: 2022-01-12 18:01+0800\n" +"Last-Translator: Wenbin Lv \n" "Language-Team: Chinese (simplified) \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.0.1\n" #: arrayfunc.c:66 msgid "bad array subscript" @@ -59,57 +45,58 @@ msgstr "数组下标不正确" #: variables.c:3133 #, c-format msgid "%s: removing nameref attribute" -msgstr "%s:正在移除名称引用属性" +msgstr "%s: 正在移除名称引用属性" #: arrayfunc.c:446 builtins/declare.def:851 #, 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:无效的关联数组键" +msgstr "%s: 无效的关联数组键" #: arrayfunc.c:702 #, c-format msgid "%s: cannot assign to non-numeric index" -msgstr "%s:无法为非数字的索引赋值" +msgstr "%s: 无法为非数值的索引赋值" #: arrayfunc.c:747 #, c-format msgid "%s: %s: must use subscript when assigning associative array" -msgstr "%s:%s:为关联数组赋值时必须使用下标" +msgstr "%s: %s: 为关联数组赋值时必须使用下标" #: bashhist.c:452 #, c-format msgid "%s: cannot create: %s" -msgstr "%s:无法创建: %s" +msgstr "%s: 无法创建:%s" #: bashline.c:4310 msgid "bash_execute_unix_command: cannot find keymap for command" -msgstr "bash_execute_unix_command: 无法为命令找到键映射" +msgstr "bash_execute_unix_command: 无法找到命令的键映射" +# 为了可读性,不改动外层引号 #: bashline.c:4459 #, c-format msgid "%s: first non-whitespace character is not `\"'" -msgstr "%s:第一个非空字符不是“\"”" +msgstr "%s: 第一个非空白字符不是 `\"'" +# %c == ' 或 ",为了可读性,不改动外层引号 #: bashline.c:4488 #, c-format msgid "no closing `%c' in %s" -msgstr "%2$s 中没有闭合的“%1$c”" +msgstr "%2$s 中没有右 `%1$c'" #: bashline.c:4519 #, c-format msgid "%s: missing colon separator" -msgstr "%s:缺少冒号分隔符" +msgstr "%s: 缺少冒号分隔符" #: bashline.c:4555 -#, fuzzy, c-format -#| msgid "`%s': cannot unbind" +#, c-format msgid "`%s': cannot unbind in command keymap" -msgstr "“%s”: 无法解除绑定" +msgstr "\"%s\": 无法解除绑定命令键映射" #: braces.c:327 #, c-format @@ -124,12 +111,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 #, 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 +125,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 +146,12 @@ 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”: 无法解除绑定" +msgstr "\"%s\": 无法解除绑定" #: builtins/break.def:77 builtins/break.def:119 msgid "loop count" @@ -172,23 +159,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,18 +172,13 @@ 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" " \n" -" 不带有 EXPR 时,返回 \"$line $filename\"。带有 EXPR 时,返回\n" -" \"$line $subroutine $filename\";这个额外的信息可以被用于提供\n" -" 栈追踪。\n" +" 不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n" +" 返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n" +" 栈跟踪 (stack trace)。\n" " \n" -" EXPR 的值 显示了到当前调用帧需要回去多少个调用帧;顶部帧\n" -" 是第 0 帧。\n" -" \n" -" 退出状态:\n" -" 除非 shell 不在执行一个 shell 函数或者 EXPR 无效,否则返回结\n" -" 果为0。" +" <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。" #: builtins/cd.def:327 msgid "HOME not set" @@ -222,7 +190,7 @@ msgstr "参数太多" #: builtins/cd.def:342 msgid "null directory" -msgstr "空目录" +msgstr "空值目录" #: builtins/cd.def:353 msgid "OLDPWD not set" @@ -241,37 +209,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 #, 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 #, 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 #, c-format msgid "`%s': not a valid identifier" -msgstr "“%s”: 不是有效的标识符" +msgstr "\"%s\": 不是有效的标识符" #: builtins/common.c:240 msgid "invalid octal number" @@ -283,27 +251,27 @@ msgstr "无效的十六进制数" #: builtins/common.c:244 expr.c:1569 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 #, c-format msgid "%s: readonly variable" -msgstr "%s:只读变量" +msgstr "%s: 只读变量" #: builtins/common.c:274 #, c-format msgid "%s: %s out of range" -msgstr "%s:%s 越界" +msgstr "%s: %s超出范围" #: builtins/common.c:274 builtins/common.c:276 msgid "argument" @@ -312,17 +280,17 @@ msgstr "参数" #: builtins/common.c:276 #, c-format msgid "%s out of range" -msgstr "%s 越界" +msgstr "%s超出范围" #: builtins/common.c:284 #, c-format msgid "%s: no such job" -msgstr "%s:无此任务" +msgstr "%s: 无此任务" #: builtins/common.c:292 #, c-format msgid "%s: no job control" -msgstr "%s:无任务控制" +msgstr "%s: 无任务控制" #: builtins/common.c:294 msgid "no job control" @@ -331,78 +299,78 @@ msgstr "无任务控制" #: builtins/common.c:304 #, c-format msgid "%s: restricted" -msgstr "%s:受限的" +msgstr "%s: 受限" #: builtins/common.c:306 msgid "restricted" -msgstr "受限的" +msgstr "受限" #: builtins/common.c:314 #, c-format msgid "%s: not a shell builtin" -msgstr "%s:不是 shell 内建" +msgstr "%s: 不是 shell 内建" #: builtins/common.c:323 #, c-format msgid "write error: %s" -msgstr "写错误: %s" +msgstr "写入错误:%s" #: builtins/common.c:331 #, c-format msgid "error setting terminal attributes: %s" -msgstr "设定终端属性时出错: %s" +msgstr "设定终端属性时出错:%s" #: builtins/common.c:333 #, c-format msgid "error getting terminal attributes: %s" -msgstr "获取终端属性时出错: %s" +msgstr "获取终端属性时出错:%s" #: builtins/common.c:635 #, 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 #, c-format msgid "%s: ambiguous job spec" -msgstr "%s:模糊的任务声明" +msgstr "%s: 有歧义的任务说明符" #: builtins/common.c:964 msgid "help not available in this version" -msgstr "此版本内帮助不可用" +msgstr "帮助在当前版本中不可用" #: builtins/common.c:1008 builtins/set.def:953 variables.c:3839 #, 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 #, 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 #, c-format msgid "%s: no completion specification" -msgstr "%s:没有补全声明" +msgstr "%s: 没有补全规约" #: builtins/complete.def:688 msgid "warning: -F option may not work as you expect" -msgstr "警告: -F 选项可能不像您预期的那样工作" +msgstr "警告:-F 选项可能不像您预期的那样工作" #: builtins/complete.def:690 msgid "warning: -C option may not work as you expect" -msgstr "警告: -C 选项可能不像您预期的那样工作" +msgstr "警告:-C 选项可能不像您预期的那样工作" #: builtins/complete.def:838 msgid "not currently executing completion function" -msgstr "当前未执行补全功能" +msgstr "当前未在执行补全函数" #: builtins/declare.def:134 msgid "can only be used in a function" @@ -411,47 +379,47 @@ msgstr "只能在函数中使用" #: builtins/declare.def:363 builtins/declare.def:756 #, c-format msgid "%s: reference variable cannot be an array" -msgstr "%s:引用变量不能为数组" +msgstr "%s: 引用变量不能为数组" #: builtins/declare.def:374 variables.c:3385 #, 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 #, c-format msgid "%s: circular name reference" -msgstr "%s:循环变量名引用" +msgstr "%s: 循环的名称引用" #: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773 #, 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' 生成函数" +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:引号内的复合数组赋值已被弃用" +msgstr "%s: 带引号的复合数组赋值已被弃用" #: builtins/declare.def:838 #, c-format msgid "%s: cannot destroy array variables in this way" -msgstr "%s:无法以这种方式销毁数组变量" +msgstr "%s: 无法以这种方式销毁数组变量" #: builtins/declare.def:845 builtins/read.def:815 #, c-format msgid "%s: cannot convert associative to indexed array" -msgstr "%s:无法将关联数组转化为索引数组" +msgstr "%s: 无法将关联数组转换为索引数组" #: builtins/enable.def:143 builtins/enable.def:151 msgid "dynamic loading not available" @@ -460,58 +428,57 @@ msgstr "动态加载不可用" #: builtins/enable.def:343 #, c-format msgid "cannot open shared object %s: %s" -msgstr "无法打开共享对象 %s:%s" +msgstr "无法打开共享目标 %s:%s" #: builtins/enable.def:371 #, 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" +#, c-format msgid "%s: dynamic builtin already loaded" -msgstr "%s:未以动态方式加载" +msgstr "%s: 动态内建已经加载" #: builtins/enable.def:392 #, c-format msgid "load function for %s returns failure (%d): not loaded" -msgstr "为 %s 载入函数失败 (%d): 未载入" +msgstr "%s 的加载函数返回失败 (%d):未加载" #: builtins/enable.def:517 #, c-format msgid "%s: not dynamically loaded" -msgstr "%s:未以动态方式加载" +msgstr "%s: 未动态加载" #: builtins/enable.def:543 #, 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 #, 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 #, 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 "有已停止的任务。\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,23 +549,25 @@ 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 #, c-format msgid "%s: cannot open: %s" -msgstr "%s:无法打开: %s" +msgstr "%s: 无法打开:%s" #: builtins/help.def:524 #, c-format @@ -611,12 +580,12 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表。\n" -"输入 `help 名称' 以得到有关函数`名称'的更多信息。\n" -"使用 `info bash' 来获得关于 shell 的更多一般性信息。\n" -"使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息。\n" +"这些 shell 命令是内部定义的。输入 \"help\" 以获取本列表。\n" +"输入 \"help 名称\" 以得到有关函数 \"名称\" 的更多信息。\n" +"使用 \"info bash\" 来获得关于 shell 的更多一般性信息。\n" +"使用 \"man -k\" 或 \"info\" 来获取不在本列表中的命令的更多信息。\n" "\n" -"名称旁边的星号(*)表示该命令被禁用。\n" +"名称旁边的星号 (*) 表示该命令被禁用。\n" "\n" #: builtins/history.def:155 @@ -631,26 +600,26 @@ msgstr "历史位置" #: builtins/history.def:340 #, c-format msgid "%s: invalid timestamp" -msgstr "%s:无效时间戳" +msgstr "%s: 无效的时间戳" #: builtins/history.def:451 #, c-format msgid "%s: history expansion failed" -msgstr "%s:历史扩展失败" +msgstr "%s: 历史展开失败" #: builtins/inlib.def:71 #, c-format msgid "%s: inlib failed" -msgstr "%s:inlib 失败" +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:参数必须是进程或任务 ID" +msgstr "%s: 参数必须是进程或任务 ID" #: builtins/kill.def:274 msgid "Unknown error" @@ -663,36 +632,36 @@ msgstr "需要表达式" #: builtins/mapfile.def:178 #, c-format msgid "%s: not an indexed array" -msgstr "%s:不是一个索引数组" +msgstr "%s: 不是一个索引数组" #: builtins/mapfile.def:271 builtins/read.def:308 #, c-format msgid "%s: invalid file descriptor specification" -msgstr "%s:无效的文件描述符声明" +msgstr "%s: 指定的文件描述符无效" #: builtins/mapfile.def:279 builtins/read.def:315 #, c-format msgid "%d: invalid file descriptor: %s" -msgstr "%d: 无效的文件描述符: %s" +msgstr "%d: 无效的文件描述符:%s" #: builtins/mapfile.def:288 builtins/mapfile.def:326 #, c-format msgid "%s: invalid line count" -msgstr "%s:无效的行数" +msgstr "%s: 无效的行数" #: builtins/mapfile.def:299 #, c-format msgid "%s: invalid array origin" -msgstr "%s:无效的数组基数" +msgstr "%s: 无效的数组起始" #: builtins/mapfile.def:316 #, c-format msgid "%s: invalid callback quantum" -msgstr "%s:无效的回调量子" +msgstr "%s: 无效的回调间隔" #: builtins/mapfile.def:349 msgid "empty array variable name" -msgstr "空数组变量名" +msgstr "空的数组变量名" #: builtins/mapfile.def:370 msgid "array variable support required" @@ -701,31 +670,31 @@ msgstr "需要数组变量支持" #: builtins/printf.def:419 #, c-format msgid "`%s': missing format character" -msgstr "“%s”: 缺少格式字符" +msgstr "\"%s\": 缺少格式字符" #: builtins/printf.def:474 #, c-format msgid "`%c': invalid time format specification" -msgstr "“%c”:无效的时间格式声明" +msgstr "\"%c\": 指定的时间格式无效" #: builtins/printf.def:676 #, c-format msgid "`%c': invalid format character" -msgstr "“%c”:无效格式字符" +msgstr "\"%c\": 无效的格式字符" #: builtins/printf.def:702 #, c-format msgid "warning: %s: %s" -msgstr "警告: %s:%s" +msgstr "警告:%s: %s" #: builtins/printf.def:788 #, c-format msgid "format parsing problem: %s" -msgstr "格式解析问题: %s" +msgstr "格式解析出现问题:%s" #: builtins/printf.def:885 msgid "missing hex digit for \\x" -msgstr "使用了 \\x 但缺少十六进制位" +msgstr "使用了 \\x 但缺少十六进制数" #: builtins/printf.def:900 #, c-format @@ -739,7 +708,7 @@ msgstr "无其他目录" #: builtins/pushd.def:360 #, c-format msgid "%s: invalid argument" -msgstr "%s:无效参数" +msgstr "%s: 无效的参数" #: builtins/pushd.def:480 msgid "" @@ -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,37 +822,33 @@ 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 #, c-format msgid "%s: invalid timeout specification" -msgstr "%s:无效的超时声明" +msgstr "%s: 指定的超时时间无效" #: builtins/read.def:755 #, 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" @@ -898,21 +857,21 @@ msgstr "无法同时取消设定一个函数和一个变量" #: builtins/set.def:966 #, 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 "位移计数" +msgstr "移位次数" #: builtins/shopt.def:310 msgid "cannot set and unset shell options simultaneously" @@ -921,7 +880,7 @@ msgstr "无法同时设定和取消设定 shell 选项" #: builtins/shopt.def:428 #, 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 #, c-format msgid "%s: cannot get limit: %s" -msgstr "%s:无法获取 limit 值: %s" +msgstr "%s: 无法获取限制:%s" #: builtins/ulimit.def:481 msgid "limit" -msgstr "limit" +msgstr "限制" #: builtins/ulimit.def:493 builtins/ulimit.def:793 #, c-format msgid "%s: cannot modify limit: %s" -msgstr "%s:无法修改 limit 值: %s" +msgstr "%s: 无法修改限制:%s" #: builtins/umask.def:115 msgid "octal number" @@ -1006,32 +965,32 @@ 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 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 msgid "unknown command error" @@ -1052,21 +1011,21 @@ msgstr "错误的跳转" #: error.c:503 #, c-format msgid "%s: unbound variable" -msgstr "%s:未绑定的变量" +msgstr "%s: 未绑定的变量" #: eval.c:242 msgid "\atimed out waiting for input: auto-logout\n" -msgstr "\a 等待输入超时:自动注销\n" +msgstr "\a等待输入超时:自动注销\n" #: execute_cmd.c:537 #, c-format msgid "cannot redirect standard input from /dev/null: %s" -msgstr "无法从 /dev/null 重定向标准输入: %s" +msgstr "无法从 /dev/null 重定向标准输入:%s" #: execute_cmd.c:1297 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" -msgstr "时间格式: `%c': 无效的格式字符" +msgstr "时间格式:\"%c\": 无效的格式字符" #: execute_cmd.c:2362 #, c-format @@ -1085,42 +1044,42 @@ msgstr "eval: 超出最大 eval 嵌套层数 (%d)" #: execute_cmd.c:4805 #, c-format msgid "%s: maximum source nesting level exceeded (%d)" -msgstr "%s:超出最大 source 嵌套层数 (%d)" +msgstr "%s: 超出最大 source 嵌套层数 (%d)" #: execute_cmd.c:4913 #, c-format msgid "%s: maximum function nesting level exceeded (%d)" -msgstr "%s:超出最大函数嵌套层数 (%d)" +msgstr "%s: 超出最大函数嵌套层数 (%d)" #: execute_cmd.c:5467 #, c-format msgid "%s: restricted: cannot specify `/' in command names" -msgstr "%s:受限的: 无法在命令名中使用 `/'" +msgstr "%s: 受限:无法在命令名中使用 \"/\"" #: execute_cmd.c:5574 #, c-format msgid "%s: command not found" -msgstr "%s:未找到命令" +msgstr "%s: 未找到命令" #: execute_cmd.c:5816 #, c-format msgid "%s: %s" -msgstr "%s:%s" +msgstr "%s: %s" #: execute_cmd.c:5854 #, c-format msgid "%s: %s: bad interpreter" -msgstr "%s:%s:解释器错误" +msgstr "%s: %s: 错误的解释器" #: execute_cmd.c:5891 #, c-format msgid "%s: cannot execute binary file: %s" -msgstr "%s:无法执行二进制文件: %s" +msgstr "%s: 无法执行二进制文件:%s" #: execute_cmd.c:5977 #, c-format msgid "`%s': is a special builtin" -msgstr "“%s”: 特殊内建" +msgstr "\"%s\": 是特殊内建" #: execute_cmd.c:6029 #, c-format @@ -1129,7 +1088,7 @@ msgstr "无法复制文件描述符 %d 到文件描述符 %d" #: expr.c:263 msgid "expression recursion level exceeded" -msgstr "表达式递归层次越界" +msgstr "超出表达式递归层数上限" #: expr.c:291 msgid "recursion stack underflow" @@ -1153,11 +1112,11 @@ msgstr "除以 0" #: expr.c:592 msgid "bug: bad expassign token" -msgstr "错误:表达式赋值符号错误" +msgstr "bug: 错误的表达式赋值记号" #: expr.c:646 msgid "`:' expected for conditional expression" -msgstr "条件表达式需要 `:'" +msgstr "条件表达式需要 \":\"" #: expr.c:972 msgid "exponent less than 0" @@ -1165,28 +1124,28 @@ msgstr "指数小于 0" #: expr.c:1029 msgid "identifier expected after pre-increment or pre-decrement" -msgstr "预增符或预减符后应跟有标识符" +msgstr "前缀自增或前缀自减运算符之后需要标识符" #: expr.c:1056 msgid "missing `)'" -msgstr "缺少“)”" +msgstr "缺少 \")\"" #: expr.c:1107 expr.c:1487 msgid "syntax error: operand expected" -msgstr "语法错误: 需要操作数" +msgstr "语法错误:需要操作数" #: expr.c:1489 msgid "syntax error: invalid arithmetic operator" -msgstr "语法错误: 无效的算术运算符" +msgstr "语法错误:无效的算术运算符" #: expr.c:1513 #, 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 msgid "invalid arithmetic base" -msgstr "无效的算术进制" +msgstr "无效的算术底数" #: expr.c:1582 msgid "invalid integer constant" @@ -1194,12 +1153,12 @@ msgstr "无效的整数常数" #: expr.c:1598 msgid "value too great for base" -msgstr "数值太大不可为算术进制的基" +msgstr "值对于底数而言过大" #: expr.c:1647 #, c-format msgid "%s: expression error\n" -msgstr "%s:表达式错误\n" +msgstr "%s: 表达式错误\n" #: general.c:70 msgid "getcwd: cannot access parent directories" @@ -1208,17 +1167,17 @@ msgstr "getcwd: 无法访问父目录" #: input.c:99 subst.c:6069 #, 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" @@ -1237,7 +1196,7 @@ msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next" #: jobs.c:1283 #, c-format msgid "forked pid %d appears in running job %d" -msgstr "叉分 (fork) 出的的进程号 %d 出现在运行中的任务 %d 中" +msgstr "进程复制 (fork) 产生的 pid %d 出现在运行中的任务 %d 中" #: jobs.c:1402 #, c-format @@ -1247,12 +1206,12 @@ msgstr "删除进程组 %2$ld 中已停止的任务 %1$d" #: jobs.c:1511 #, 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 #, c-format msgid "describe_pid: %ld: no such pid" -msgstr "describe_pid: %ld: 无此进程号" +msgstr "describe_pid: %ld: 无此 pid" #: jobs.c:1865 #, c-format @@ -1298,22 +1257,22 @@ msgstr "(核心已转储)" #: jobs.c:2020 #, c-format msgid " (wd: %s)" -msgstr " (工作目录: %s)" +msgstr " (工作目录:%s)" #: jobs.c:2259 #, c-format msgid "child setpgid (%ld to %ld)" -msgstr "子进程 setpgid (%ld 到 %ld)" +msgstr "子进程 setpgid(%ld 到 %ld)" #: jobs.c:2617 nojobs.c:664 #, 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 #, c-format msgid "wait_for: No record of process %ld" -msgstr "wiat_for: 没有进程 %ld 的记录" +msgstr "wait_for: 没有进程 %ld 的记录" #: jobs.c:3236 #, c-format @@ -1323,17 +1282,17 @@ msgstr "wait_for_job: 任务 %d 已停止" #: jobs.c:3564 #, c-format msgid "%s: no current jobs" -msgstr "%s:无当前任务" +msgstr "%s: 无当前任务" #: jobs.c:3571 #, c-format msgid "%s: job has terminated" -msgstr "%s:任务已经终止" +msgstr "%s: 任务已经终止" #: jobs.c:3580 #, c-format msgid "%s: job %d already in background" -msgstr "%s:任务 %d 已在后台" +msgstr "%s: 任务 %d 已在后台" #: jobs.c:3806 msgid "waitchld: turning on WNOHANG to avoid indefinite block" @@ -1342,7 +1301,7 @@ msgstr "waitchld: 打开 WNOHANG 以避免无限阻塞" #: jobs.c:4320 #, c-format msgid "%s: line %d: " -msgstr "%s:行 %d: " +msgstr "%s: 第 %d 行:" #: jobs.c:4334 nojobs.c:919 #, c-format @@ -1352,7 +1311,7 @@ msgstr "(核心已转储)" #: jobs.c:4346 jobs.c:4359 #, c-format msgid "(wd now: %s)\n" -msgstr "(当前工作目录:%s)\n" +msgstr "(当前工作目录:%s)\n" #: jobs.c:4391 msgid "initialize_job_control: getpgrp failed" @@ -1373,7 +1332,7 @@ msgstr "initialize_job_control: setpgid" #: jobs.c:4494 jobs.c:4503 #, c-format msgid "cannot set terminal process group (%d)" -msgstr "无法设定终端进程组(%d)" +msgstr "无法设定终端进程组 (%d)" #: jobs.c:4508 msgid "no job control in this shell" @@ -1382,7 +1341,7 @@ msgstr "æ­¤ shell 中无任务控制" #: lib/malloc/malloc.c:353 #, c-format msgid "malloc: failed assertion: %s\n" -msgstr "malloc: 断言失败: %s\n" +msgstr "malloc: 断言失败:%s\n" #: lib/malloc/malloc.c:369 #, c-format @@ -1391,7 +1350,7 @@ msgid "" "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 msgid "unknown" @@ -1399,11 +1358,11 @@ msgstr "未知" #: lib/malloc/malloc.c:882 msgid "malloc: block on free list clobbered" -msgstr "malloc: 空闲链表中的块损坏" +msgstr "malloc: 空闲列表中的块损坏" #: lib/malloc/malloc.c:972 msgid "free: called with already freed block argument" -msgstr "free:调用时用了已经释放的块作为参数" +msgstr "free: 调用时用了已经释放的块作为参数" #: lib/malloc/malloc.c:975 msgid "free: called with unallocated block argument" @@ -1411,7 +1370,7 @@ msgstr "free: 调用时用了未分配的块作为参数" #: lib/malloc/malloc.c:994 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: 检测到下溢;mh_nbytes 越界" +msgstr "free: 检测到下溢;mh_nbytes 超出范围" #: lib/malloc/malloc.c:1001 msgid "free: underflow detected; magic8 corrupted" @@ -1419,15 +1378,15 @@ msgstr "free: 检测到下溢;magic8 损坏" #: lib/malloc/malloc.c:1009 msgid "free: start and end chunk sizes differ" -msgstr "free: 其实和末尾块大小不一致" +msgstr "free: 起始和末尾组块大小不一致" #: lib/malloc/malloc.c:1119 msgid "realloc: called with unallocated block argument" -msgstr "realloc:调用时用了未分配的块作为参数" +msgstr "realloc: 调用时用了未分配的块作为参数" #: lib/malloc/malloc.c:1134 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: 检测到下溢;mh_nbytes 越界" +msgstr "realloc: 检测到下溢;mh_nbytes 超出范围" #: lib/malloc/malloc.c:1141 msgid "realloc: underflow detected; magic8 corrupted" @@ -1435,41 +1394,41 @@ msgstr "realloc: 检测到下溢;magic8 损坏" #: lib/malloc/malloc.c:1150 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 已在表中显示为已分配?\n" #: lib/malloc/table.c:253 #, c-format msgid "register_free: %p already in table as free?\n" -msgstr "register_free: %p 在表中显示为已释放?\n" +msgstr "register_free: %p 已在表中显示为未分配?\n" #: lib/sh/fmtulong.c:102 msgid "invalid base" -msgstr "无效的基" +msgstr "无效的底数" #: 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" @@ -1478,22 +1437,22 @@ msgstr "不支持网络操作" #: locale.c:217 #, c-format msgid "setlocale: LC_ALL: cannot change locale (%s)" -msgstr "setlocale:LC_ALL:无法改变区域选项 (%s)" +msgstr "setlocale: LC_ALL: 无法改变区域选项 (%s)" #: locale.c:219 #, 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 #, c-format msgid "setlocale: %s: cannot change locale (%s)" -msgstr "setlocale:%s:无法改变区域选项 (%s)" +msgstr "setlocale: %s: 无法改变区域选项 (%s)" #: locale.c:294 #, 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 $_" @@ -1514,50 +1473,51 @@ msgstr "语法错误:需要算术表达式" #: make_cmd.c:319 msgid "syntax error: `;' unexpected" -msgstr "语法错误:需要 `;'" +msgstr "语法错误:未预期的 \";\"" #: make_cmd.c:320 #, c-format msgid "syntax error: `((%s))'" -msgstr "语法错误:`((%s))'" +msgstr "语法错误:\"((%s))\"" #: make_cmd.c:572 #, c-format msgid "make_here_document: bad instruction type %d" -msgstr "make_here_document:错误的指令类型 %d" +msgstr "make_here_document: 错误的指令类型 %d" #: make_cmd.c:657 #, 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 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" -msgstr "make_redirection:重定向指令“%d”越界" +msgstr "make_redirection: 重定向指令 \"%d\" 超出范围" #: 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 (%lu):行被截断" +msgstr "shell_getc: shell_input_line_size (%zu) 超过 SIZE_MAX (%lu):行已被截断" #: parse.y:2826 msgid "maximum here-document count exceeded" -msgstr "超出最大立即文档数量" +msgstr "超出最大立即文档计数" +# %c 可能为引号 #: parse.y:3581 parse.y:3957 parse.y:4556 #, c-format msgid "unexpected EOF while looking for matching `%c'" -msgstr "寻找匹配的“%c”时遇到了未预期的文件结束符" +msgstr "寻找匹配的 `%c' 时遇到了未预期的 EOF" #: parse.y:4696 msgid "unexpected EOF while looking for `]]'" -msgstr "寻找“]]”时遇到了未预期的文件结束符" +msgstr "寻找 \"]]\" 时遇到了未预期的 EOF" #: parse.y:4701 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" -msgstr "条件表达式中有语法错误:未预期的符号“%s”" +msgstr "条件表达式中有语法错误:未预期的记号 \"%s\"" #: parse.y:4705 msgid "syntax error in conditional expression" @@ -1566,16 +1526,16 @@ msgstr "条件表达式中有语法错误" #: parse.y:4783 #, c-format msgid "unexpected token `%s', expected `)'" -msgstr "未预期的符号“%s” ,需要“)”" +msgstr "未预期的记号 \"%s\",需要 \")\"" #: parse.y:4787 msgid "expected `)'" -msgstr "需要“)”" +msgstr "需要 \")\"" #: parse.y:4815 #, c-format msgid "unexpected argument `%s' to conditional unary operator" -msgstr "一元条件运算符使用了未预期的参数“%s”" +msgstr "一元条件运算符使用了未预期的参数 \"%s\"" #: parse.y:4819 msgid "unexpected argument to conditional unary operator" @@ -1584,7 +1544,7 @@ msgstr "一元条件运算符使用了未预期的参数" #: parse.y:4865 #, c-format msgid "unexpected token `%s', conditional binary operator expected" -msgstr "未预期的符号“%s”,需要二元条件运算符" +msgstr "未预期的记号 \"%s\",需要二元条件运算符" #: parse.y:4869 msgid "conditional binary operator expected" @@ -1593,7 +1553,7 @@ msgstr "需要二元条件运算符" #: parse.y:4891 #, c-format msgid "unexpected argument `%s' to conditional binary operator" -msgstr "二元条件运算符使用了未预期的参数“%s”" +msgstr "二元条件运算符使用了未预期的参数 \"%s\"" #: parse.y:4895 msgid "unexpected argument to conditional binary operator" @@ -1602,31 +1562,31 @@ msgstr "二元条件运算符使用了未预期的参数" #: parse.y:4906 #, c-format msgid "unexpected token `%c' in conditional command" -msgstr "条件命令中有未预期的符号“%c”" +msgstr "条件命令中有未预期的记号 \"%c\"" #: parse.y:4909 #, c-format msgid "unexpected token `%s' in conditional command" -msgstr "条件命令中有未预期的符号“%s”" +msgstr "条件命令中有未预期的记号 \"%s\"" #: parse.y:4913 #, c-format msgid "unexpected token %d in conditional command" -msgstr "条件命令中有未预期的符号 %d" +msgstr "条件命令中有未预期的记号 %d" #: parse.y:6336 #, c-format msgid "syntax error near unexpected token `%s'" -msgstr "未预期的符号“%s”附近有语法错误" +msgstr "未预期的记号 \"%s\" 附近有语法错误" #: parse.y:6355 #, c-format msgid "syntax error near `%s'" -msgstr "“%s”附近有语法错误" +msgstr "\"%s\" 附近有语法错误" #: parse.y:6365 msgid "syntax error: unexpected end of file" -msgstr "语法错误: 未预期的文件结尾" +msgstr "语法错误:未预期的文件结束符" #: parse.y:6365 msgid "syntax error" @@ -1639,27 +1599,27 @@ msgstr "使用 \"%s\" 退出 shell 。\n" #: parse.y:6602 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,7 +1628,7 @@ 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 @@ -1678,7 +1638,7 @@ msgstr "xtrace fd (%d) != fileno xtrace fp (%d)" #: print_cmd.c:1540 #, c-format msgid "cprintf: `%c': invalid format character" -msgstr "cprintf: `%c': 无效的格式字符" +msgstr "cprintf: \"%c\": 无效的格式字符" #: redir.c:149 redir.c:197 msgid "file descriptor out of range" @@ -1687,27 +1647,27 @@ msgstr "文件描述符超出范围" #: redir.c:204 #, c-format msgid "%s: ambiguous redirect" -msgstr "%s:模糊的重定向" +msgstr "%s: 有歧义的重定向" #: redir.c:208 #, c-format msgid "%s: cannot overwrite existing file" -msgstr "%s:无法覆盖已存在的文件" +msgstr "%s: 无法覆盖已存在的文件" #: redir.c:213 #, c-format msgid "%s: restricted: cannot redirect output" -msgstr "%s:受限的: 无法重定向输出" +msgstr "%s: 受限:无法重定向输出" #: redir.c:218 #, c-format msgid "cannot create temp file for here-document: %s" -msgstr "无法为立即文档创建临时文件: %s" +msgstr "无法为立即文档创建临时文件:%s" #: redir.c:222 #, c-format msgid "%s: cannot assign fd to variable" -msgstr "%s:无法将文件描述符赋值给变量" +msgstr "%s: 无法将文件描述符赋值给变量" #: redir.c:649 msgid "/dev/(tcp|udp)/host/port not supported without networking" @@ -1715,11 +1675,11 @@ msgstr "没有网络时不支持 /dev/(tcp|udp)/host/port" #: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284 msgid "redirection error: cannot duplicate fd" -msgstr "重定向错误: 无法复制文件描述符" +msgstr "重定向错误:无法复制文件描述符" #: shell.c:347 msgid "could not find /tmp, please create!" -msgstr "无法找到 /tmp ,请创建!" +msgstr "无法找到 /tmp,请创建!" #: shell.c:351 msgid "/tmp must be a valid directory name" @@ -1737,12 +1697,12 @@ msgstr "%c%c: 无效的选项" #: shell.c:1319 #, c-format msgid "cannot set uid to %d: effective uid %d" -msgstr "无法将 uid 设为 %d: 有效 uid %d" +msgstr "无法将 uid 设为 %d:有效 uid %d" #: shell.c:1330 #, c-format msgid "cannot set gid to %d: effective gid %d" -msgstr "无法将 gid 设为 %d: 有效 gid %d" +msgstr "无法将 gid 设为 %d:有效 gid %d" #: shell.c:1518 msgid "cannot start debugger; debugging mode disabled" @@ -1751,7 +1711,7 @@ msgstr "无法启动调试器;调试模式已禁用" #: shell.c:1632 #, c-format msgid "%s: Is a directory" -msgstr "%s:是一个目录" +msgstr "%s: 是一个目录" # 这个是查看用户的 /etc/passwd 信息得到的名字。既然是用户的名字,就叫做无名氏吧。(有点想写“红领巾”来着。) #: shell.c:1881 @@ -1774,15 +1734,15 @@ msgstr "" #: shell.c:2038 msgid "GNU long options:\n" -msgstr "GNU 长选项:\n" +msgstr "GNU 长选项:\n" #: shell.c:2042 msgid "Shell options:\n" -msgstr "Shell 选项:\n" +msgstr "Shell 选项:\n" #: shell.c:2043 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-ilrsD 或 -c <命令> 或 -O \t\t(仅适合调用)\n" #: shell.c:2062 #, c-format @@ -1792,25 +1752,25 @@ msgstr "\t-%s 或 -o <选项>\n" #: shell.c:2068 #, 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 #, 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 #, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" -"请使用“bashbug”命令来报告程序错误。\n" +"请使用 \"bashbug\" 命令来报告程序错误。\n" "请将翻译错误报告到 。\n" #: shell.c:2072 #, c-format msgid "bash home page: \n" -msgstr "bash 首页:\n" +msgstr "bash 主页:\n" #: shell.c:2073 #, c-format @@ -1840,23 +1800,23 @@ msgstr "退出" #: siglist.c:62 msgid "Illegal instruction" -msgstr "非法的指令" +msgstr "非法指令" #: siglist.c:66 msgid "BPT trace/trap" -msgstr "断点追踪/陷阱" +msgstr "断点跟踪或陷阱" #: siglist.c:74 msgid "ABORT instruction" -msgstr "放弃指令" +msgstr "中止指令" #: siglist.c:78 msgid "EMT instruction" -msgstr "模拟器陷阱指令" +msgstr "EMT 指令" #: siglist.c:82 msgid "Floating point exception" -msgstr "浮点数异常" +msgstr "浮点异常" #: siglist.c:86 msgid "Killed" @@ -1876,7 +1836,7 @@ msgstr "错误的系统调用" #: siglist.c:102 msgid "Broken pipe" -msgstr "管道破裂" +msgstr "断开的管道" #: siglist.c:106 msgid "Alarm clock" @@ -1892,7 +1852,7 @@ msgstr "紧急 I/O 状况" #: siglist.c:118 msgid "Stopped (signal)" -msgstr "已停止(信号)" +msgstr "已停止(信号)" #: siglist.c:126 msgid "Continue" @@ -1900,15 +1860,15 @@ msgstr "ç»§ç»­" #: siglist.c:134 msgid "Child death or stop" -msgstr "子进程已死或者停止" +msgstr "子进程已死或已停止" #: siglist.c:138 msgid "Stopped (tty input)" -msgstr "已停止(tty 输入)" +msgstr "已停止(tty 输入)" #: siglist.c:142 msgid "Stopped (tty output)" -msgstr "已停止(tty 输出)" +msgstr "已停止(tty 输出)" #: siglist.c:146 msgid "I/O ready" @@ -1924,12 +1884,12 @@ msgstr "文件限制" #: siglist.c:158 msgid "Alarm (virtual)" -msgstr "报警(虚拟)" +msgstr "闹钟(虚拟)" # Personally I treat this as something coming from alarm() by a profiler. #: siglist.c:162 msgid "Alarm (profile)" -msgstr "报警(分析)" +msgstr "闹钟(性能分析)" #: siglist.c:166 msgid "Window changed" @@ -1941,15 +1901,15 @@ msgstr "记录锁" #: siglist.c:174 msgid "User signal 1" -msgstr "用户信号1" +msgstr "用户信号 1" #: siglist.c:178 msgid "User signal 2" -msgstr "用户信号2" +msgstr "用户信号 2" #: siglist.c:182 msgid "HFT input data pending" -msgstr "HFT 待输入数据" +msgstr "HFT 输入数据待处理" #: siglist.c:186 msgid "power failure imminent" @@ -1991,12 +1951,12 @@ msgstr "未知信号 #%d" #: subst.c:1476 subst.c:1666 #, c-format msgid "bad substitution: no closing `%s' in %s" -msgstr "错误的替换: 在 %2$s 中没有闭合的 `%1$s'" +msgstr "错误的替换:在 %2$s 中没有右 `%1$s'" #: subst.c:3281 #, c-format msgid "%s: cannot assign list to array member" -msgstr "%s:无法将链表赋值给数组成员" +msgstr "%s: 无法将列表赋值给数组成员" #: subst.c:5910 subst.c:5926 msgid "cannot make pipe for process substitution" @@ -2009,7 +1969,7 @@ msgstr "无法为进程替换创建子进程" #: subst.c:6059 #, c-format msgid "cannot open named pipe %s for reading" -msgstr "无法打开命名管道 %s 以读取" +msgstr "无法打开命名管道 %s 进行读取" #: subst.c:6061 #, c-format @@ -2040,56 +2000,56 @@ msgstr "command_substitute: 无法将管道复制为文件描述符 1" #: subst.c:6883 subst.c:9952 #, c-format msgid "%s: invalid variable name for name reference" -msgstr "%s:无效的引用变量名" +msgstr "%s: 名称引用变量引用的变量名无效" #: subst.c:6979 subst.c:6997 subst.c:7169 #, c-format msgid "%s: invalid indirect expansion" -msgstr "%s:无效的间接展开" +msgstr "%s: 无效的间接展开" #: subst.c:7013 subst.c:7177 #, c-format msgid "%s: invalid variable name" -msgstr "%s:无效的变量名" +msgstr "%s: 无效的变量名" #: subst.c:7256 #, c-format msgid "%s: parameter not set" -msgstr "%s:参数未设置" +msgstr "%s: 参数未设置" #: subst.c:7258 #, c-format msgid "%s: parameter null or not set" -msgstr "%s:参数为空或未设置" +msgstr "%s: 参数为空或未设置" #: subst.c:7503 subst.c:7518 #, c-format msgid "%s: substring expression < 0" -msgstr "%s:子串表达式 < 0" +msgstr "%s: 子串表达式 < 0" #: subst.c:9281 subst.c:9302 #, c-format msgid "%s: bad substitution" -msgstr "%s:错误的替换" +msgstr "%s: 错误的替换" #: subst.c:9390 #, c-format msgid "$%s: cannot assign in this way" -msgstr "$%s:无法这样赋值" +msgstr "$%s: 无法这样赋值" #: subst.c:9814 msgid "future versions of the shell will force evaluation as an arithmetic substitution" -msgstr "未来版本的 shell 会强制估值为算术替换" +msgstr "未来版本的 shell 会强制求值为算术替换" #: subst.c:10367 #, c-format msgid "bad substitution: no closing \"`\" in %s" -msgstr "错误的替换: 在 %s 中没有闭合的 \"`\"" +msgstr "错误的替换:在 %s 中没有右 \"`\"" #: subst.c:11434 #, c-format msgid "no match: %s" -msgstr "无匹配: %s" +msgstr "无匹配:%s" #: test.c:147 msgid "argument expected" @@ -2098,54 +2058,54 @@ 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 #, c-format msgid "%s: binary operator expected" -msgstr "%s:需要二元表达式" +msgstr "%s: 需要二元运算符" #: test.c:756 test.c:759 #, c-format msgid "%s: unary operator expected" -msgstr "%s:需要一元表达式" +msgstr "%s: 需要一元运算符" #: test.c:881 msgid "missing `]'" -msgstr "缺少 `]'" +msgstr "缺少 \"]\"" #: test.c:899 #, c-format msgid "syntax error: `%s' unexpected" -msgstr "语法错误:需要 `%s'" +msgstr "语法错误:未预期的 \"%s\"" #: trap.c:220 msgid "invalid signal number" -msgstr "无效的信号数" +msgstr "无效的信号编号" #: trap.c:325 #, c-format msgid "trap handler: maximum trap handler level exceeded (%d)" -msgstr "trap handler: 超出最大的 trap handler 层次 (%d)" +msgstr "trap handler: 超出最大的 trap handler 层数 (%d)" #: trap.c:414 #, 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 #, 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 #, c-format @@ -2155,12 +2115,12 @@ msgstr "trap_handler: 错误的信号 %d" #: variables.c:421 #, c-format msgid "error importing function definition for `%s'" -msgstr "“%s”函数定义导入错误" +msgstr "导入 \"%s\" 的函数定义时出错" #: variables.c:833 #, c-format msgid "shell level (%d) too high, resetting to 1" -msgstr "shell 层次 (%d) 太高,重置为 1" +msgstr "shell 层数 (%d) 太高,重置为 1" #: variables.c:2674 msgid "make_local_variable: no function context at current scope" @@ -2169,12 +2129,12 @@ msgstr "make_local_variable: 当前作用域中没有函数上下文" #: variables.c:2693 #, c-format msgid "%s: variable may not be assigned value" -msgstr "%s:变量不可赋值" +msgstr "%s: 变量不可赋值" #: variables.c:3475 #, c-format msgid "%s: assigning integer to name reference" -msgstr "%s:将整数赋值给名称引用" +msgstr "%s: 将整数赋值给名称引用" #: variables.c:4404 msgid "all_local_variables: no function context at current scope" @@ -2193,7 +2153,7 @@ msgstr "%2$s 的 exportstr 中有无效的字符 %1$d" #: variables.c:4791 #, c-format msgid "no `=' in exportstr for %s" -msgstr "%s 的 exportstr 中没有“=”" +msgstr "%s 的 exportstr 中没有 \"=\"" #: variables.c:5331 msgid "pop_var_context: head of shell_variables not a function context" @@ -2210,25 +2170,25 @@ msgstr "pop_scope: shell_variables 的头部不是临时环境作用域" #: variables.c:6387 #, c-format msgid "%s: %s: cannot open as FILE" -msgstr "%s:%s:无法作为文件打开" +msgstr "%s: %s: 无法作为 FILE 打开" #: variables.c:6392 #, c-format msgid "%s: %s: invalid value for trace file descriptor" -msgstr "%s:%s:追踪文件描述符的值无效" +msgstr "%s: %s: 跟踪文件描述符的值无效" #: variables.c:6437 #, 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 自由软件基金会" +msgstr "Copyright (C) 2020 自由软件基金会" #: version.c:47 version2.c:47 msgid "License GPLv3+: GNU GPL version 3 or later \n" -msgstr "许可证 GPLv3+: GNU GPL 许可证第三版或者更新版本 \n" +msgstr "许可证 GPLv3+:GNU GPL 许可证第三版或者更新版本 \n" #: version.c:86 version2.c:86 #, c-format @@ -2246,22 +2206,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 +2245,7 @@ msgstr "continue [n]" #: builtins.c:60 msgid "builtin [shell-builtin [arg ...]]" -msgstr "builtin [shell 内建 [参数 ...]]" +msgstr "builtin [shell-内建 [参数 ...]]" #: builtins.c:63 msgid "caller [expr]" @@ -2313,7 +2273,7 @@ msgstr "typeset [-aAfFgiIlnrtux] [-p] 名称[=值] ..." #: builtins.c:82 msgid "local [option] name[=value] ..." -msgstr "local [option] 名称[=值] ..." +msgstr "local [选项] 名称[=值] ..." #: builtins.c:85 msgid "echo [-neE] [arg ...]" @@ -2349,15 +2309,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 +2333,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,7 +2349,7 @@ 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]" @@ -2437,7 +2397,7 @@ msgstr "[ 参数... ]" #: builtins.c:166 msgid "trap [-lp] [[arg] signal_spec ...]" -msgstr "trap [-lp] [[参数] 信号声明 ...]" +msgstr "trap [-lp] [[参数] 信号说明符 ...]" #: builtins.c:168 msgid "type [-afptP] name [name ...]" @@ -2453,11 +2413,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,15 +2429,15 @@ 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" @@ -2505,7 +2465,7 @@ msgstr "{ 命令 ; }" #: builtins.c:206 msgid "job_spec [&]" -msgstr "job_spec [&]" +msgstr "任务说明符 [&]" #: builtins.c:208 msgid "(( expression ))" @@ -2540,16 +2500,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 +2513,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 定界符] [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组]" +msgstr "readarray [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-c 间隔] [数组]" #: builtins.c:256 msgid "" @@ -2583,18 +2539,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 +2561,12 @@ msgid "" " \n" " Return success unless a NAME is not an existing alias." msgstr "" -"从别名定义列表中删除每一个“名字”。\n" +"从已定义的别名列表中删除每一个 <名称>。\n" " \n" " 选项:\n" " -a\t删除所有的别名定义\n" " \n" -" 返回成功,除非“名字”不是一个已存在的别名。" +" 返回成功,除非 <名称> 不是一个已存在的别名。" #: builtins.c:291 msgid "" @@ -2651,30 +2607,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当 <键序列> 被输入时,执行 。\n" +" -X 以可以重新用作输入的格式列出用 -x 绑定的键序列和命令。\n" " \n" " 退出状态:\n" -" 除非使用了无法辨认的选项或者错误发生,否则返回0." +" bind 返回 0,除非使用了无法识别的选项,或者有错误发生。" #: builtins.c:330 msgid "" @@ -2686,13 +2643,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 +2663,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 +2683,13 @@ msgid "" msgstr "" "执行 shell 内建。\n" " \n" -" 带参数 ARGs 执行 SHELL-BUILTIN 内建,并且不做命令查询\n" -" 在希望以 shell 函数的形式来重新实现 shell 内建,\n" -" 并且希望在函数之内执行该 shell 内建的情况下有用处。\n" +" 带 <参数> 执行 ,并且跳过命令查找流程。在希望以 shell 函数\n" +" 的形式重新实现 shell 内建,并且希望在该函数中执行该 shell 内建的情况下\n" +" 很有用。\n" " \n" " 退出状态:\n" -" 以 SHELL-BUILTIN 内建的退出状态为准,或者如果 SHELL-BUILTIN 不是一个\n" -" shell 内建时为假。" +" 返回 的退出状态,或者如果 不是一个 shell 内建\n" +" 时返回假。" #: builtins.c:369 msgid "" @@ -2749,18 +2706,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" -" 栈追踪。\n" +" 不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n" +" 返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n" +" 栈跟踪 (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 +2755,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 +2798,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 +2828,7 @@ msgid "" " Exit Status:\n" " Always succeeds." msgstr "" -"返回一个成功结果。\n" +"返回一个成功的结果。\n" " \n" " 退出状态:\n" " 总是成功。" @@ -2907,56 +2864,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 +2915,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 +2954,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 +2972,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 +3022,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横向制表符\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四个十六进制位。\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十六进制数。\n" +" \\UHHHHHHHH 值为 HHHHHHHH(十六进制)的 Unicode 字符。\n" +" \t\tHHHHHHHH 可以是一至八位的十六进制数。\n" " \n" " 退出状态:\n" -" 返回成功除非有写错误发生。" +" 返回成功,除非有写入错误发生。" #: builtins.c:597 msgid "" @@ -3142,15 +3063,15 @@ msgid "" " Exit Status:\n" " Returns success unless a write error occurs." msgstr "" -"写参数至标准输出设备。\n" +"将参数写到标准输出。\n" " \n" -" 在标准输出设备上显示 ARGs 参数和一个换行。\n" +" 在标准输出上显示 <参数>,后面跟一个换行。\n" " \n" " 选项:\n" -" -n\t不附加换行\n" +" -n\t不要追加换行\n" " \n" " 退出状态:\n" -" 除非写错误发生,否则返回成功。" +" 返回成功,除非有写入错误发生。" #: builtins.c:612 msgid "" @@ -3180,27 +3101,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" -" 输入 `enable -n test'。\n" +" 要使用 $PATH 中找到的 \"test\" 而不是 shell 内建的版本,\n" +" 请输入 \"enable -n test\"。\n" " \n" " 退出状态:\n" -" 返回成功,除非 NAME 不是一个 shell 内建或者有错误发生。" +" 返回成功,除非 <名称> 不是一个 shell 内建,或者有错误发生。" #: builtins.c:640 msgid "" @@ -3214,52 +3134,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 +3181,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 +3234,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 +3255,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 +3267,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 +3300,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" -" \n" -" 用 `fc -s [模式=替换 ...] [命令]' 的格式,COMMAND 命令会在 OLD=NEW\n" -" 替换之后被重新执行。\n" +" -e 编辑器名\t选择使用哪个编辑器。默认使用 FCEDIT,然后\n" +" \t\t\t是 EDITOR,然后是 vi\n" +" -l\t\t列出行而不编辑\n" +" -n\t\t列举时省略行号\n" +" -r\t\t反转行的顺序(新的在前)\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 +3333,11 @@ msgid "" msgstr "" "将任务移至前台。\n" " \n" -" 将以 JOB_SPEC 标识的任务放至前台,使其成为\n" -" 当前任务。如果 JOB_SPEC 不存在,shell 观念中的当前任务 \n" -" 将被使用。\n" +" 将以 <任务说明符> 指定的任务放至前台,使其成为当前任务。\n" +" 如果没有给出 <任务说明符>,shell 观念中的当前任务将会被使用。\n" " \n" " 退出状态:\n" -" 放至前台的命令状态,或者当错误发生时为失败。" +" 放至前台的命令的状态,或者当错误发生时则返回失败。" #: builtins.c:779 msgid "" @@ -3478,14 +3350,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 +3382,23 @@ msgid "" msgstr "" "记住或显示程序位置。\n" " \n" -" 确定并记住每一个给定 NAME 名称的命令的完整路径。\n" +" 确定并记住每个命令 <名称> 的完整路径名。\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 +3422,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" -" 返回成功,除非未找到 PATTERN 模式没有找到或者使用了无效选项。" +" 返回成功,除非没有找到 <模式>,或者使用了无效的选项。" #: builtins.c:842 msgid "" @@ -3602,32 +3471,30 @@ msgid "" msgstr "" "显示或操纵历史列表。\n" " \n" -" 带行号显示历史列表,将每个被修改的条目加上 `*' 前缀。\n" +" 带行号显示历史列表,将每个被修改的条目加上 \"*\" 前缀。\n" " 参数 N 会仅列出最后的 N 个条目。\n" " \n" " 选项:\n" -" -c\t删除所有条目从而清空历史列表。\n" -" -d 偏移量\t从指定位置删除历史列表。负偏移量将从历史条目末尾\n" -" \t\t开始计数\n" +" -c\t删除所有条目从而清空历史列表\n" +" -d 偏移量\t删除位于 <偏移量> 的历史条目。负的 <偏移量> 表示从\n" +" \t\t历史列表末尾开始倒数\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 +3521,22 @@ msgid "" msgstr "" "显示任务状态。\n" " \n" -" 列出活动的任务。JOBSPEC 限制仅输出指定的任务。\n" -" 不带选项时,所有活动任务的状态都会显示。\n" +" 列出活动的任务。<任务说明符> 限制仅输出指定的任务。\n" +" 不带选项时,显示所有活动任务的状态。\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限制仅输出已停止的任务\n" " \n" -" 如果使用了 -x 选项,ARG 参数中的所有任务声明会被替换为该任务\n" -" 的进程组头领的进程号,然后执行 COMMAND 命令。\n" +" 如果使用了 -x 选项,<参数> 中的所有任务说明符会被替换为该任务\n" +" 的进程组头领的进程 ID,然后用替换后的参数执行 <命令>。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的选项或者有错误发生。\n" -" 如果使用 -x 选项,则返回 COMMAND 命令的退出状态。" +" 如果使用了 -x 选项,则返回 <命令> 的退出状态。" #: builtins.c:906 msgid "" @@ -3689,17 +3556,17 @@ msgid "" msgstr "" "从当前 shell 中删除任务。\n" " \n" -" 从活动任务表中删除每一个 JOBSPEC 参数。不带任何\n" -" JOBSPEC 参数时,shell 使用观念中的当前任务。\n" +" 从活动任务列表中删除每一个 <任务说明符> 参数。不带任何 <任务说明符>\n" +" 时,shell 使用它的观念中的当前任务。\n" " \n" " 选项:\n" -" -a\t如果不提供 JOBSPEC 参数,则删除所有任务\n" -" -h\t标识每个 JOBSPEC 任务,从而当 shell 接收到 SIGHUP\n" +" -a\t如果不提供 <任务说明符>,则删除所有任务\n" +" -h\t标记每个 <任务说明符> 对应的任务,从而当 shell 接收到 SIGHUP\n" " \t\t信号时不发送 SIGHUP 给指定任务\n" " -r\t仅删除运行中的任务\n" " \n" " 退出状态:\n" -" 返回成功除非使用了无效的选项或者 JOBSPEC 声明。" +" 返回成功,除非使用了无效的选项或者 <任务说明符>。" #: builtins.c:925 msgid "" @@ -3725,21 +3592,22 @@ msgid "" msgstr "" "向一个任务发送一个信号。\n" " \n" -" 向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以\n" -" SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号。如果没有指定\n" -" SIGSPEC 或 SIGNUM,那么假定发送 SIGTERM 信号。\n" +" 向以 或者 <任务说明符> 指定的进程发送一个以 <信号说明符> 或\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 +3652,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增加,减少\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" @@ -3808,18 +3674,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 "" @@ -3866,38 +3733,38 @@ 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 选项,从文件描述符 中\n" +" 读取。该行会被分割成字段,如同分割词语一样,并且第一个词被赋值给第一个\n" +" <名称>,第二个词被赋值给第二个 <名称>,以此类推,剩下所有的词被赋值给\n" +" 最后一个 <名称>。只有 $IFS 中的字符会被视为词语分隔符。\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但是分隔符仍然有效,如果遇到分隔符之前读取了不足 nchars 个字符。\n" -" -N nchars\t在准确读取了 nchars 个字符之后返回,除非遇到文件结束符或者读超时,\n" -" \t\t任何的分隔符都被忽略\n" -" -p prompt\t在尝试读取之前输出 PROMPT 提示符并且不带\n" -" \t\t换行符\n" +" -i 文本\t使用 <文本> 作为 Readline 的初始文字\n" +" -n 字符数\t读取 <字符数> 个字符之后返回,而不是等到读取换行符。\n" +" \t\t但是如果读取了不到 <字符数> 个字符就遇到了分隔符,\n" +" \t\t则分隔符仍然生效\n" +" -N 字符数\t仅在恰好读取了 <字符数> 个字符之后返回,除非遇到 EOF\n" +" \t\t或者读取超时。忽略所有的分隔符\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如果超过了超时时间,则返回状态码大于 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如果超过了超时时间,则退出状态大于 128\n" +" -u fd\t从文件描述符 中读取,而不是标准输入\n" " \n" " 退出状态:\n" -" 返回码为零,除非遇到了文件结束符、读超时(且返回码不大于128)、\n" -" 出现了变量赋值错误或者无效的文件描述符作为参数传递给了 -u 选项。" +" 返回码为零,除非遇到了文件结束符、读取超时(此时返回码大于 128)、\n" +" 发生了变量赋值错误,或者 -u 选项的参数中的文件描述符无效。" #: builtins.c:1041 msgid "" @@ -3912,12 +3779,11 @@ msgid "" msgstr "" "从一个 shell 函数返回。\n" " \n" -" 使一个函数或者被引用的脚本以指定的返回值 N 退出。\n" -" 如果 N 被省略,则返回状态就是\n" -" 函数或脚本中的最后一个执行的命令的状态。\n" +" 使一个函数或者被 source 的脚本退出,返回值为 N。如果 N 被\n" +" 省略,则返回状态为函数或脚本中最后一个被执行的命令的返回状态。\n" " \n" " 退出状态:\n" -" 返回 N,或者如果 shell 不在执行一个函数或引用脚本时,失败。" +" 返回 N,或者如果 shell 不在执行一个函数或脚本时,返回失败。" #: builtins.c:1054 msgid "" @@ -4004,81 +3870,74 @@ 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 msgid "" @@ -4102,19 +3961,21 @@ 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 msgid "" @@ -4133,20 +3994,20 @@ 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" -" 则导出前将 VALUE 作为赋值。\n" +" 标记每个 <名称>,将其自动导出到后续执行的命令的环境。\n" +" 如果提供了 <值>,则导出前将其赋值为 <值>。\n" " \n" " 选项:\n" -" -f\t指 shell 函数\n" -" -n\t删除每个 NAME 名称的导出属性\n" +" -f\t所指代的是 shell 函数\n" +" -n\t删除每个 <名称> 的 \"导出\" 属性\n" " -p\t显示所有导出的变量和函数的列表\n" " \n" -" `--' 的参数禁用进一步的选项处理。\n" +" 参数 \"--\" 禁用后续的选项处理。\n" " \n" " 退出状态:\n" -" 返回成功,除非使用了无效的选项或者 NAME 名称。" +" 返回成功,除非使用了无效的选项,或者 <名称> 无效。" #: builtins.c:1180 msgid "" @@ -4170,19 +4031,19 @@ msgid "" msgstr "" "标记 shell 变量为不可改变。\n" " \n" -" 标记每一个 NAME 名称为只读;这些 NAME 变量的值将不可以被后续的赋值\n" -" 操作所改变。如果提供了 VALUE,则在标记为只读之前将 VALUE 值赋给变量。\n" +" 标记每一个 <名称> 为只读;这些 <名称> 的值将不可以被后续的赋值操作\n" +" 所改变。如果提供了 <值>,则在标记为只读之前将 <值> 赋给变量。\n" " \n" " 选项:\n" -" -a\t指下标数组变量\n" -" -A\t指关联数组标量\n" -" -f\t指 shell 函数\n" -" -p\t显示只读变量或函数列表,取决于是否提供了 -f 选项\n" +" -a\t所指代的是索引数组变量\n" +" -A\t所指代的是关联数组变量\n" +" -f\t所指代的是 shell 函数\n" +" -p\t显示所有只读变量或者函数的列表,取决于是否提供了 -f 选项\n" " \n" -" `--' 的参数禁用进一步的选项处理。\n" +" 参数 \"--\" 禁用后续的选项处理。\n" " \n" " 退出状态:\n" -" 返回成功,除非使用了无效的选项或者 NAME 名称。" +" 返回成功,除非使用了无效的选项,或者 <名称> 无效。" #: builtins.c:1202 msgid "" @@ -4196,11 +4057,11 @@ 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 为负或者大于 $#。" +" 返回成功,除非 N 为负数或者大于 $#。" #: builtins.c:1214 builtins.c:1229 msgid "" @@ -4217,12 +4078,13 @@ 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 msgid "" @@ -4237,16 +4099,16 @@ 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强制挂起,即使此 shell 是登录 shell。\n" " \n" " 退出状态:\n" -" 返回成功,除非没有启用任务控制或者有错误发生。" +" 返回成功,除非没有启用任务控制,或者有错误发生。" #: builtins.c:1261 msgid "" @@ -4328,77 +4190,82 @@ 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 如果文件描述符 已在一个终端上打开则为真。\n" +" -u 文件 如果 <文件> 设置了 setuid 位则为真。\n" +" -w 文件 如果 <文件> 对您是可写的则为真。\n" +" -x 文件 如果 <文件> 对您是可执行的则为真。\n" +" -O 文件 如果 <文件> 是被您(有效 uid)所有的则为真。\n" +" -G 文件 如果 <文件> 是被您的组(有效 gid)所有的则为真。\n" +" -N 文件 如果 <文件> 上次读取之后被修改过则为真。\n" +" \n" +" 文件1 -nt 文件2 如果 <文件1> 新于 <文件2> 则为真(根据修改日期)。\n" +" \n" +" 文件1 -ot 文件2 如果 <文件1> 旧于 <文件2> 则为真。\n" " \n" -" 其他操作符:\n" +" 文件1 -ef 文件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" +" 字符串运算符:\n" " \n" -" arg1 OP arg2 算术测试。OP操作符可以是 -eq、-ne、\n" -" -lt、-le、-gt、或 -ge 中的一个。\n" +" -z 字符串 如果 <字符串> 为空则为真。\n" " \n" -" 二元算术操作返回真,如果 ARG1 参数等于、不等于、\n" -" 小于、小于等于、大于、或者大于等于 ARG2 参数。\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 msgid "" @@ -4407,10 +4274,9 @@ msgid "" " 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 msgid "" @@ -4422,12 +4288,11 @@ 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. @@ -4466,32 +4331,34 @@ 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打印一个信号名称和它们对应的编号的列表\n" -" -p\t打印与每个 SIGNAL_SPEC 信号相关联的陷阱命令\n" +" -l\t打印信号名称以及和它们对应的编号的列表\n" +" -p\t打印与每个 <信号说明符> 相关联的陷阱命令\n" " \n" -" 每一个 SIGNAL_SPEC 信号可以是 中的信号名称或者信号编号。\n" -" 信号名称大小写敏感且可以使用 SIG 前缀。信号可用 \"kill -信号 $$\"\n" -" 发送给 shell。\n" +" 每一个 <信号说明符> 可以是 中的信号名称或者信号编号。信号名称\n" +" 是大小写敏感的,并且 SIG 前缀是可选的。可以使用 \"kill -信号 $$\" 给 shell\n" +" 发送信号。\n" " \n" " 退出状态:\n" -" 返回成功,除非使用了无效的选项或者 SIGSPEC。" +" 返回成功,除非使用了无效的 <信号说明符>,或者无效的选项。" #: builtins.c:1400 msgid "" @@ -4521,76 +4388,29 @@ msgid "" " Exit Status:\n" " Returns success if all of the NAMEs are found; fails if any are not found." msgstr "" -"显示命令类型的信息。\n" +"显示关于命令类型的信息。\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." msgid "" "Modify shell resource limits.\n" " \n" @@ -4640,45 +4460,47 @@ 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套接字缓存尺寸\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报告当前的所有限制\n" +" -b\t套接字缓冲区大小\n" +" -c\t创建的核心文件的最大大小\n" +" -d\t一个进程的数据段的最大大小\n" +" -e\t调度优先级 (nice) 的最大值\n" +" -f\tshell 及其子进程可以写的最大文件大小\n" +" -i\t可以挂起的最大信号数量\n" " -k\t分配给此进程的最大 kqueue 数量\n" -" -l\t一个进程可以锁定的最大内存尺寸\n" -" -m\t最大的内存进驻尺寸\n" -" -n\t最多的打开的文件描述符个数\n" -" -p\t管道缓冲区尺寸\n" -" -q\tPOSIX 信息队列的最大字节数\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" +" -s\t最大栈大小\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 为无范围的进程数量。\n" +" 限制值的单位都是 1024 字节,除了 -t 单位是秒,-p 单位是 512 字节,\n" +" -u 为未经缩放的进程数量。\n" " \n" " 退出状态:\n" -" 返回成功,除非使用了无效的选项或者错误发生。" +" 返回成功,除非使用了无效的选项,或者有错误发生。" #: builtins.c:1482 msgid "" @@ -4699,39 +4521,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." msgid "" "Wait for job completion and return exit status.\n" " \n" @@ -4760,17 +4562,24 @@ msgid "" msgstr "" "等待任务完成并返回退出状态。\n" " \n" -" 等待以 ID 编号识别的进程,其中 ID 可以是进程编号或者任务声明,\n" -" 并报告它的终止状态。如果 ID 没有给出,则等待所有的当前活跃子\n" -" 进程,并且返回状态为零。如果 ID 是任务声明,等待任务管道中的\n" -" 所有进程。\n" +" 等待以 指定的进程,其中 可以是进程 ID 或者任务说明符,\n" +" 并报告它的终止状态。如果没有指定 ,则等待当前活跃的所有子\n" +" 进程,并且返回状态为零。如果 是任务说明符,则等待该任务的\n" +" 流水线中的所有进程。\n" +" \n" +" 若给定了 -n 选项,从 列表中等待单个任务完成,或者,\n" +" 如果没有提供 ,等待下一个任务完成并返回其退出状态。\n" " \n" -" 若给定了 -n 选项,等待下一个任务完成并返回其状态。\n" +" 若给定了 -p 选项, 被返回退出状态的任务的进程 ID 或任务 ID 将被赋值\n" +" 给选项的参数指定的 <变量>。该变量会首先被取消设定,然后才会进行赋值。\n" +" 该选项只有和 -n 选项同时使用时才有用。\n" +" \n" +" 若给定了 -f 选项,且启用了任务控制,则等待指定的 终止,\n" +" 而不是等待它改变状态。\n" " \n" -" 若给定了 -f 选项,且已启用了任务控制,则等待指定的 ID 终止\n" -" 而非等待它改变状态。\n" " 退出状态:\n" -" 返回最后一个 ID 进程的状态;如果使用了无效的 ID 或者选项则失败。" +" 返回最后一个 的状态;如果使用了无效的 ,或者使用了无效的\n" +" 选项,或者给定了 -n 选项但 shell 没有尚未等待的子进程,则失败。" #: builtins.c:1533 msgid "" @@ -4786,11 +4595,11 @@ msgid "" msgstr "" "等待进程完成并且返回退出状态。\n" " \n" -" 等待指定进程并报告它的终止状态。如果没有提供 PID,则当前所有的活跃\n" -" 子进程都会被等待,并且返回码为零。PID 必须为进程号。\n" +" 等待以 指定的进程并报告它的终止状态。如果没有提供 ,则等待当前\n" +" 所有活跃的子进程,并且返回码为零。 必须为进程 ID。\n" " \n" " 退出状态:\n" -" 返回进程 ID 的状态;如果 PID 是无效的进程号或者指定了无效的选项则失败。" +" 返回最后一个 的状态;如果 无效,或者使用了无效的选项,则失败。" #: builtins.c:1548 msgid "" @@ -4806,9 +4615,9 @@ msgid "" msgstr "" "为列表中的每个成员执行命令。\n" " \n" -" “for”循环为列表中的每个成员执行一系列的命令。如果没有\n" -" “in <词语> ...;”则假定使用“in \"$@\"”。对于 <词语> 中的每\n" -" 个元素,<名称> 变量被设定为该元素后执行 <命令>。\n" +" \"for\" 循环为列表中的每个成员执行一系列的命令。\n" +" 如果没有 \"in 词语 ...;\" ,则假定使用 `in \"$@\"'。对于 <词语> 中的\n" +" 每个元素,<名称> 被设定为该元素,然后执行 <命令>。\n" " \n" " 退出状态:\n" " 返回最后执行的命令的状态。" @@ -4832,13 +4641,13 @@ 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" " 返回最后执行的命令的状态。" @@ -4864,14 +4673,14 @@ msgid "" msgstr "" "从列表中选取词并且执行命令。\n" " \n" -" <词语...> 被展开,生成一个词的列表。展开的词集合被打印\n" -" 在标准错误输出设备上,每个以一个数字做前缀。如果没有 `in WORDS'\n" -" 则假定使用`in \"$@\"'。PS3提示符会被显示并且从标准输入读入一行\n" -" 如果该行由被显示的词对应的数字组成,则 NAME 变量被设定为相应\n" -" 的词。如果行为空,则 WORDS 变量和提示符被重新显示。如果读取了\n" -" 文件结束符,则命令完成。读入任何其他的值会导致 NAME 变量被设定\n" -" 为空。读入的行被存放在变量 REPLY 中。COMMANDS 命令在每次选择\n" -" 之后执行直到执行一个 break 命令。\n" +" <词语> 被展开,生成一个词语列表。展开后的词语集合被打印到\n" +" 标准错误,每个词语前面打印一个数字。如果没有 \"in 词语\" ,则假定\n" +" 使用 `in \"$@\"'。然后,会显示一个 PS3 提示符,并且从标准输入读取\n" +" 一行。如果该行是所显示的词之一所对应的数字,则 <名称> 被设定为\n" +" 相应的词。如果该行为空,则会重新显示 <词语> 和提示符。如果读到了\n" +" EOF,则命令完成。读入任何其他的值会导致 <名称> 变量被设定为空。\n" +" 读入的行被存放在变量 REPLY 中。<命令> 会在每次选择之后被执行,\n" +" 直到执行到 break 命令。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -4891,18 +4700,18 @@ 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 msgid "" @@ -4916,8 +4725,8 @@ msgid "" msgstr "" "基于模式匹配来执行命令。\n" " \n" -" 基于 PATTERN 模式匹配的词 WORD,有选择的执行 COMMANDS 命令。\n" -" `|' 用于分隔多个模式。\n" +" 根据和 <词语> 匹配的 <模式> ,选择性地执行 <命令>。\n" +" \"|\" 用于分隔多个模式。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -4939,11 +4748,11 @@ msgid "" msgstr "" "根据条件执行命令。\n" " \n" -" `if COMMANDS'列表被执行。如果退出状态为零,则执行`then COMMANDS' \n" -" 列表。否则按顺序执行每个 `elif COMMANDS'列表,并且如果它的退出状态为\n" -" 零,则执行对应的 `then COMMANDS' 列表并且 if 命令终止。否则如果存在的\n" -" 情况下,执行 `else COMMANDS'列表。整个结构的退出状态是最后一个执行\n" -" 的命令的状态,或者如果没有条件测试为真的话,为零。\n" +" 执行 \"if 命令\" 列表。如果退出状态为零,则执行 \"then 命令\" 列表。\n" +" 否则按顺序执行每个 \"elif 命令\" 列表,如果某一个的退出状态为零,则执行\n" +" 对应的 \"then 命令\" 列表,然后 if 命令完成。否则,执行 \"else 命令\"\n" +" 列表(如果有的话)。整个结构的退出状态是最后一个执行的命令的状态,\n" +" 或者如果没有一个条件的测试结果为真,则退出状态为零。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -4958,10 +4767,10 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" -"只要测试成功即执行命令。\n" +"只要测试仍然成功,就执行命令。\n" " \n" -" 只要在 `while' COMMANDS 中的最终命令返回结果为0,则\n" -" 展开并执行 COMMANDS 命令。\n" +" 只要 \"while\" 的 <命令> 中的最后一个命令的退出状态仍然为 0,\n" +" 就展开并执行 <命令>。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -4976,10 +4785,10 @@ msgid "" " Exit Status:\n" " Returns the status of the last command executed." msgstr "" -"当测试不同过时执行命令。\n" +"只要测试仍然不成功,就执行命令。\n" " \n" -" `until' COMMANDS 命令的最终命令返回状态不为 0 时,\n" -" 展开并执行 COMMANDS 命令。\n" +" 只要 \"until\" 的 <命令> 中的最后一个命令的退出状态仍然不为 0,\n" +" 就展开并执行 <命令>。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -4996,15 +4805,15 @@ 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 msgid "" @@ -5020,13 +4829,12 @@ 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 msgid "" @@ -5040,8 +4848,7 @@ msgid "" msgstr "" "将命令组合为一个单元。\n" " \n" -" 运行组中的命令集合。这是对整个命令集合\n" -" 做重定向的方法之一。\n" +" 运行一个组中的命令集合。这是对整个命令集合进行重定向的方法之一。\n" " \n" " 退出状态:\n" " 返回最后一个执行的命令的状态。" @@ -5059,27 +4866,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." msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -5089,13 +4886,12 @@ 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 msgid "" @@ -5123,23 +4919,24 @@ 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 msgid "" @@ -5194,47 +4991,43 @@ 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 msgid "" @@ -5272,22 +5065,22 @@ msgstr "" " 新的栈顶。不带参数时,交换栈顶的两个目录。\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 msgid "" @@ -5317,24 +5110,22 @@ 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 msgid "" @@ -5366,24 +5157,25 @@ msgid "" msgstr "" "显示目录栈。\n" " \n" -" 显示当前记住的目录列表。通过 `pushd' 命令可以将目录存入列表\n" -" 中;`popd' 命令可用于遍历弹出列表。\n" +" 显示当前记住的目录列表。 使用 \"pushd\" 命令将目录加入这个列表;\n" +" 使用 \"popd\" 命令逐个回到之前加入列表的目录。\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 msgid "" @@ -5406,20 +5198,20 @@ 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 msgid "" @@ -5452,49 +5244,30 @@ 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" +" %(格式)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." msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" @@ -5522,23 +5295,22 @@ 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 msgid "" @@ -5553,12 +5325,11 @@ msgid "" msgstr "" "依据选项显示可能的补全。\n" " \n" -" 意图在能产生可能的补全的 shell 函数内部使用。\n" -" 如果提供了可选的 WORD 参数,则产生按照 WORD\n" -" 进行的匹配。\n" +" 设计意图是在用来生成可能的补全的 shell 函数的内部使用。\n" +" 如果提供了可选的 <词语> 参数,则依据 <词语> 产生匹配。\n" " \n" " 退出状态:\n" -" 除非使用了无效选项或者错误发生,否则返回成功。" +" 返回成功,除非使用了无效的选项,或者有错误发生。" #: builtins.c:2016 msgid "" @@ -5590,25 +5361,25 @@ 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\" 命令补全改变选项\n" -" \t-E\t\t为 \"empty\" 命令补全改变选项\n" -" \t-I\t\t为首单词的补全改变选项\n" +" \t-o 选项\t\t为每个 <名称> 设定补全选项 <选项>\n" +" \t-D\t\t修改 \"默认\" (default) 命令的补全选项\n" +" \t-E\t\t修改 \"空\" (empty) 命令的补全选项\n" +" \t-I\t\t修改首个单词的补全选项\n" " \n" -" 使用 `+o' 而不是 `-o' 可以关闭指定的选项。\n" +" 使用 \"+o\" 代替 \"-o\" 可以关闭指定的选项。\n" " \n" " 参数:\n" " \n" -" 每个 NAME 名称都对应一个之前以通过 `complete' 内建定义了的补全声明的\n" -" 命令。如果不提供 NAME 名称,当前生成补全的函数必须调用 compopt,\n" -" 并且当前执行的补全生成器选项会被修改。\n" +" 每个 <名称> 都对应一个之前已通过 \"complete\" 内建定义了补全规约的命令。\n" +" 如果没有提供 <名称>,compopt 必须由当前正在生成补全的函数进行调用,\n" +" 并且当前正在执行的补全生成器的选项会被修改。\n" " \n" " 退出状态:\n" -" 返回成功,除非使用了无效的选项或者 NAME 名称没有定义补全声明。" +" 返回成功,除非使用了无效的选项,或者 <名称> 没有定义补全规约。" #: builtins.c:2047 msgid "" @@ -5644,31 +5415,32 @@ 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" +" 从文件描述符 中读取。默认的 <数组> 是 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从文件描述符 中读取行,而不是标准输入\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 msgid "" @@ -5678,7 +5450,7 @@ msgid "" msgstr "" "从一个文件中读取行到数组变量中。\n" " \n" -" 一个 `mapfile'的同义词。" +" 同 \"mapfile\"。" #~ msgid "" #~ "Returns the context of the current subroutine call.\n" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo index 75d5bc104669660fe3e9a809123a74531457ea52..c9e58a044fb1e7b2e0e080b95d8ea291d00b808b 100644 GIT binary patch delta 12319 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 delta 12221 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 EFEgLS9RL6T diff --git a/po/zh_TW.po b/po/zh_TW.po index 665d53e0e..01d188370 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -5,13 +5,13 @@ # Zi-You Dai , 2008. # Mingye Wang (Arthur2e5) , 2015. # Wei-Lun Chao , 2015. -# Yi-Jyun Pan , 2018, 2019, 2020. +# Yi-Jyun Pan , 2018, 2019, 2020, 2021. msgid "" msgstr "" "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: 2020-12-08 06:39+0800\n" +"PO-Revision-Date: 2021-05-09 20:48+0800\n" "Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -20,7 +20,7 @@ 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.4.2\n" +"X-Generator: Poedit 2.4.3\n" #: arrayfunc.c:66 msgid "bad array subscript" @@ -144,7 +144,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,15 +157,11 @@ 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" diff --git a/print_cmd.c b/print_cmd.c index 3c8c2d8ff..9f3f670c8 100644 --- a/print_cmd.c +++ b/print_cmd.c @@ -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-2021 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -440,7 +440,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 +959,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); } } diff --git a/quit.h b/quit.h index db8a776b5..0af1d121f 100644 --- 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 fa92b4d41..2f249c229 100644 --- 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; @@ -808,8 +809,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 +946,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 +1068,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 +1133,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 +1229,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 +1453,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 +1509,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 64a3d2669..340dc1c02 100644 --- 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 ce8087f77..c91efdaad 100644 --- 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 +#elif defined (MALLOC_DEBUG) && defined (USING_BASH_MALLOC) +# include #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: @@ -1352,6 +1376,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 +1455,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 8b41792fc..475f7d888 100644 --- 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; + 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 e6537d267..840d57754 100644 --- 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 a564e3cd9..0217be53d 100644 --- 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. @@ -31,14 +31,10 @@ # 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 diff --git a/siglist.c b/siglist.c index d8361dd79..ec706c90b 100644 --- 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 +#include "command.h" #include "general.h" #include diff --git a/stringlib.c b/stringlib.c index 745e5363a..e76ce38dc 100644 --- a/stringlib.c +++ b/stringlib.c @@ -178,17 +178,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; + int do_glob, escape_backslash; + + do_glob = flags & 1; + escape_backslash = flags & 2; len = STRLEN (text); rlen = len + strlen (string) + 2; @@ -225,6 +230,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 2b76256c6..a9cb4e214 100644 --- 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-2021 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,14 @@ 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; #if defined (JOB_CONTROL) && defined (PROCESS_SUBSTITUTION) extern PROCESS *last_procsub_child; @@ -287,7 +293,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 +306,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 +322,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 +333,18 @@ 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 *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 +368,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 +445,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 +465,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) { @@ -1737,12 +1741,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 +1763,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 +1819,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 +1847,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 +1975,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 +2187,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 +2301,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 +2318,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 +3307,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); } @@ -3596,7 +3623,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); } @@ -3686,7 +3713,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 +3725,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 @@ -3719,6 +3754,105 @@ cond_expand_word (w, special) } #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; + int sindex, c, translen, retind, retsize, 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 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, 1, retsize, 16); + ret[retind++] = c; + break; + } + if (peekc == '\'') + { + /* We overload SX_COMPLETE below */ + news = skip_single_quoted (string, slen, ++sindex, SX_COMPLETE); + 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); + 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; + } + } + + ret[retind] = 0; + return ret; +} + /* Call expand_word_internal to expand W and handle error returns. A convenience function for functions that don't want to handle any errors or free any memory before aborting. */ @@ -3844,7 +3978,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 +4086,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 +4111,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 +4424,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 +5401,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 +5417,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 +5630,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 +6253,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 +6270,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,12 +6301,32 @@ 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; + char *istring, buf[COMSUB_PIPEBUF], *bufp; int istring_index, c, tflag, skip_ctlesc, skip_ctlnul; int mb_cur_max; size_t istring_size; @@ -6316,15 +6471,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) { @@ -6505,7 +6683,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 +6805,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 +6924,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)) @@ -6800,12 +6985,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 +7001,33 @@ 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 */ + } + else if (es.subtype == 1 && 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 +7234,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 +7382,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 +7413,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 +7439,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 +7637,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 +7650,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 +7708,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 +7720,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 +7760,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 +7776,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 +7805,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 +7829,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 +7846,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 +7996,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 +8090,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 +8117,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,6 +8157,7 @@ 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 */ @@ -7938,9 +8171,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,7 +8188,7 @@ 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; @@ -7965,11 +8198,9 @@ parameter_brace_transform (varname, value, ind, xform, rtype, quoted, pflags, fl if (valid_parameter_transform (xform) == 0) { this_command_name = oname; -#if 0 /* TAG: bash-5.2 Martin Schulte 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 +8304,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 +8321,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 +8409,36 @@ 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; + } + else if (c == '&') return 1; + ADVANCE_CHAR (s, slen, sindex); } return 0; } -#endif char * pat_subst (string, pat, rep, mflags) @@ -8210,12 +8454,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 @@ -8274,7 +8513,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 +8571,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 +8625,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 +8641,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; @@ -8463,6 +8703,15 @@ parameter_brace_patsub (varname, value, ind, patsub, quoted, pflags, flags) 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. The replacement string already undergoes quote removal + above, so users need to make sure any desired backslash makes it + through that. */ + 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 +8871,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 +8888,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 +9065,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 +9112,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 +9352,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 +9377,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 +9458,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 +9493,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 +9522,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 +9561,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 +9573,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 +9606,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; @@ -9402,11 +9678,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 +9718,9 @@ bad_substitution: break; } free (name); +#if defined (ARRAY_VARS) + flush_eltstate (&es); +#endif if (ret == 0) { @@ -9458,7 +9743,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 +10121,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 +10236,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 +10292,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 () { @@ -10080,6 +10478,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; @@ -10117,6 +10516,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 +10581,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 +10604,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 +10648,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 +10673,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 +10686,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 +10706,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) { @@ -10477,6 +10893,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 +10927,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) @@ -10843,6 +11261,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 +11371,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); } } @@ -11191,6 +11613,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 +12195,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 +12213,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 +12368,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 +12468,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 +12480,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 +12518,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 134765158..4dcd9d8e1 100644 --- 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. */ @@ -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. */ diff --git a/support/Makefile.in b/support/Makefile.in index 0289e0acf..f7de7ac21 100644 --- a/support/Makefile.in +++ b/support/Makefile.in @@ -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) diff --git a/support/bashbug.sh b/support/bashbug.sh index 01e9f0147..940f70654 100644 --- a/support/bashbug.sh +++ b/support/bashbug.sh @@ -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 diff --git a/support/bashbug.sh.in b/support/bashbug.sh.in index d4b48c903..d6759d76b 100644 --- a/support/bashbug.sh.in +++ b/support/bashbug.sh.in @@ -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 diff --git a/support/bashversion.c b/support/bashversion.c index 4f86b1346..ad02d46ea 100644 --- a/support/bashversion.c +++ b/support/bashversion.c @@ -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. diff --git a/support/config.guess b/support/config.guess old mode 100755 new mode 100644 index 0fc11edb2..7f76b6228 --- a/support/config.guess +++ b/support/config.guess @@ -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 . -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 + /* 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' /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 - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # 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" </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 <&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" diff --git a/support/config.sub b/support/config.sub old mode 100755 new mode 100644 index c874b7a9d..9b62e37c4 --- a/support/config.sub +++ b/support/config.sub @@ -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 ." 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 <&2 @@ -1749,6 +1784,8 @@ case $kernel-$os in ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; nto-qnx*) ;; os2-emx) diff --git a/support/shobj-conf b/support/shobj-conf index 5a3f9776e..cd7634dfa 100755 --- a/support/shobj-conf +++ b/support/shobj-conf @@ -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' diff --git a/support/signames.c b/support/signames.c index aba4842ae..35ecf4416 100644 --- a/support/signames.c +++ b/support/signames.c @@ -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. diff --git a/test.c b/test.c index e2fd78b35..0b96456a1 100644 --- 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? */ diff --git a/test.h b/test.h index ea3c33e95..ffd79e5e0 100644 --- 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. @@ -27,11 +27,12 @@ #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 **)); diff --git a/tests/alias.right b/tests/alias.right index 9e33036b5..475f8b31c 100644 --- a/tests/alias.right +++ b/tests/alias.right @@ -2,6 +2,7 @@ alias: 0 alias: 0 ./alias.tests: line 38: qfoo: command not found quux +hi bar value bar diff --git a/tests/alias.tests b/tests/alias.tests index 0280c16de..c270661c5 100644 --- a/tests/alias.tests +++ b/tests/alias.tests @@ -49,6 +49,14 @@ 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 diff --git a/tests/arith.right b/tests/arith.right index c74602e3c..02687815d 100644 --- a/tests/arith.right +++ b/tests/arith.right @@ -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") diff --git a/tests/arith.tests b/tests/arith.tests index 1a3501aaa..e9ab57651 100644 --- a/tests/arith.tests +++ b/tests/arith.tests @@ -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 diff --git a/tests/array-at-star b/tests/array-at-star old mode 100755 new mode 100644 diff --git a/tests/array.right b/tests/array.right index 2d1c51db5..62278852a 100644 --- a/tests/array.right +++ b/tests/array.right @@ -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] = ./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] = argv[2] = argv[1] = 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" ) diff --git a/tests/array.tests b/tests/array.tests index ba8e2254d..d0bb08b74 100644 --- a/tests/array.tests +++ b/tests/array.tests @@ -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 diff --git a/tests/array15.sub b/tests/array15.sub index 47796b95c..12f5391ef 100644 --- a/tests/array15.sub +++ b/tests/array15.sub @@ -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 diff --git a/tests/array27.sub b/tests/array27.sub index 44ed444dd..e2a1e7083 100644 --- a/tests/array27.sub +++ b/tests/array27.sub @@ -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 index 000000000..f73c2d1c6 --- /dev/null +++ b/tests/array29.sub @@ -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 . +# +# 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 index 000000000..14f97980c --- /dev/null +++ b/tests/array30.sub @@ -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 . +# +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 diff --git a/tests/assoc.right b/tests/assoc.right index e9aa9172c..9a1662c45 100644 --- a/tests/assoc.right +++ b/tests/assoc.right @@ -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] = argv[2] = +argv[3] = <12> +argv[4] = +argv[5] = +argv[1] = +argv[2] = <12> argv[3] = argv[4] = -argv[1] = -argv[2] = -argv[3] = argv[1] = argv[2] = -argv[3] = -argv[4] = -argv[1] = +argv[3] = <12> +argv[4] = +argv[5] = +argv[1] = ./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] = argv[2] = @@ -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] = +argv[2] = +argv[3] = +argv[4] = <1> +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[6] = +argv[7] = +argv[8] = <1> +argv[1] = +argv[1] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[6] = <1> +argv[7] = +argv[8] = +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 diff --git a/tests/assoc.tests b/tests/assoc.tests index 8d5c89275..c656536b5 100644 --- a/tests/assoc.tests +++ b/tests/assoc.tests @@ -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 + diff --git a/tests/assoc11.sub b/tests/assoc11.sub index 13111a52b..9d9afae95 100644 --- a/tests/assoc11.sub +++ b/tests/assoc11.sub @@ -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 index 000000000..359dc0b37 --- /dev/null +++ b/tests/assoc12.sub @@ -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 . +# +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 index 000000000..7e669727d --- /dev/null +++ b/tests/assoc13.sub @@ -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 index 000000000..95df04925 --- /dev/null +++ b/tests/assoc14.sub @@ -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 . +# + +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 index 000000000..c47b15358 --- /dev/null +++ b/tests/assoc15.sub @@ -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 . +# + +# 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=(   ) +declare -p var + +recho "${var[@]@k}" +eval foo=\( "${var[@]@k}" \) +declare -p foo + +var=( []= ) +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]= ) +declare -p var + +declare -a foo +recho "${var[@]@Q}" +eval foo=\( "${var[@]@Q}" \) +declare -p foo + +var=(  ) +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 index 000000000..ae8296b30 --- /dev/null +++ b/tests/assoc16.sub @@ -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 . +# + +# 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 index 000000000..a98aaa158 --- /dev/null +++ b/tests/assoc17.sub @@ -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 . +# +# 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 index 000000000..059760932 --- /dev/null +++ b/tests/assoc18.sub @@ -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 . +# + +# 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] <</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 diff --git a/tests/builtins5.sub b/tests/builtins5.sub index d36e03a5e..4fcf793dd 100644 --- a/tests/builtins5.sub +++ b/tests/builtins5.sub @@ -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[@]} - diff --git a/tests/case.right b/tests/case.right index 557bcadfb..d33c8c5af 100644 --- a/tests/case.right +++ b/tests/case.right @@ -14,6 +14,7 @@ no no no ok +esac ok 1 ok 2 ok 3 diff --git a/tests/case.tests b/tests/case.tests index 2ffcb9063..7ad4c683a 100644 --- a/tests/case.tests +++ b/tests/case.tests @@ -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 diff --git a/tests/complete.right b/tests/complete.right index 5bc89a055..c8bf1dc0c 100644 --- a/tests/complete.right +++ b/tests/complete.right @@ -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 diff --git a/tests/comsub-eof.right b/tests/comsub-eof.right index 426779852..cd5ab6923 100644 --- a/tests/comsub-eof.right +++ b/tests/comsub-eof.right @@ -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 `)' diff --git a/tests/comsub-eof0.sub b/tests/comsub-eof0.sub index 7b0775fb1..7490faabc 100644 --- a/tests/comsub-eof0.sub +++ b/tests/comsub-eof0.sub @@ -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 <. +# +: ${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 +: $(case x in x) ;; x) done esac) +: $(case x in x) ;; x) done ;; esac) +: $(case x in x) (esac) esac) + +# 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.right b/tests/comsub.right index a329c832d..318e40fae 100644 --- a/tests/comsub.right +++ b/tests/comsub.right @@ -55,3 +55,12 @@ d \ g d \ g +ok 1 +ok 2 +ok 3 +ok 4 +ok 5 +ok 6 +ok 7 +ok 8 +ok 8 diff --git a/tests/comsub.tests b/tests/comsub.tests index 478630248..7d6c83036 100644 --- a/tests/comsub.tests +++ b/tests/comsub.tests @@ -73,3 +73,4 @@ ${THIS_SH} ./comsub1.sub ${THIS_SH} ./comsub2.sub ${THIS_SH} ./comsub3.sub ${THIS_SH} ./comsub4.sub +${THIS_SH} ./comsub5.sub diff --git a/tests/comsub5.sub b/tests/comsub5.sub new file mode 100644 index 000000000..1ec41645c --- /dev/null +++ b/tests/comsub5.sub @@ -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 . +# + +# this is a new feature: expanding aliases when initially parsing command +# substitutions + +shopt -s expand_aliases + +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 )' + +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/cond.right b/tests/cond.right index 59a4a8869..a72a1537e 100644 --- a/tests/cond.right +++ b/tests/cond.right @@ -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 diff --git a/tests/cond.tests b/tests/cond.tests index aa6a81047..c0747e981 100644 --- a/tests/cond.tests +++ b/tests/cond.tests @@ -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 diff --git a/tests/cprint.right b/tests/cprint.right index 200007241..269136dc2 100644 --- a/tests/cprint.right +++ b/tests/cprint.right @@ -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; diff --git a/tests/dollar-at-star b/tests/dollar-at-star old mode 100755 new mode 100644 diff --git a/tests/dynvar.tests b/tests/dynvar.tests index 5aefab64e..3abfc2526 100644 --- a/tests/dynvar.tests +++ b/tests/dynvar.tests @@ -50,15 +50,20 @@ 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 ;; +'') echo "cannot get current time using date/gawk/perl/python" >&2 ;; +*) echo "current time via $D and EPOCHSECONDS possible mismatch|$now1|$now2" >&2 ;; esac -unset now1 now2 +unset now1 now2 D LC_ALL=C # force decimal point to `.' now1=$EPOCHREALTIME diff --git a/tests/errors.right b/tests/errors.right index be0c8959a..e63f98e29 100644 --- a/tests/errors.right +++ b/tests/errors.right @@ -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 +./errors.tests: line 185: syntax error near unexpected token `)' +./errors.tests: line 185: `: $( for z in 1 2 3; do )' +./errors.tests: line 186: syntax error near unexpected token `done' +./errors.tests: line 186: `: $( 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 @@ -197,4 +199,4 @@ ok 6 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 304: `!!': not a valid identifier diff --git a/tests/errors.tests b/tests/errors.tests index 531b625bb..65cf830e0 100644 --- a/tests/errors.tests +++ b/tests/errors.tests @@ -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 diff --git a/tests/errors7.sub b/tests/errors7.sub index add8782a7..544e3e4c1 100644 --- a/tests/errors7.sub +++ b/tests/errors7.sub @@ -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/exec.right b/tests/exec.right index 0a249ddad..8664e97f2 100644 --- a/tests/exec.right +++ b/tests/exec.right @@ -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 diff --git a/tests/exec3.sub b/tests/exec3.sub index 4f2f8e21a..81b53b72b 100644 --- a/tests/exec3.sub +++ b/tests/exec3.sub @@ -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 . +# +# 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 diff --git a/tests/exp.right b/tests/exp.right index 4e88ca9b1..60241a1db 100644 --- a/tests/exp.right +++ b/tests/exp.right @@ -227,15 +227,16 @@ argv[2] = argv[1] = argv[1] = argv[1] = -declare -- var="xyz" +declare -- var=$'x\001y\177z' argv[1] = argv[2] = <--> -argv[3] = +argv[3] = +var=x\001y\177z$ declare -- var="x\001y\177z"$ argv[1] = <$'x\001y\177z'> argv[1] = var=$'x\001y\177z' -./exp8.sub: line 29: xyz: syntax error: invalid arithmetic operator (error token is "z") +./exp8.sub: line 30: xyz: syntax error: invalid arithmetic operator (error token is "z") declare -a array=() declare -a array=([0]=$'x\001y\177z') argv[1] = @@ -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" diff --git a/tests/exp.tests b/tests/exp.tests index 3e69db4fa..61a39d3b4 100644 --- a/tests/exp.tests +++ b/tests/exp.tests @@ -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 index 000000000..80e14635a --- /dev/null +++ b/tests/exp13.sub @@ -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 . +# +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 diff --git a/tests/exp8.sub b/tests/exp8.sub index 4c2870caf..7dd5a286f 100644 --- a/tests/exp8.sub +++ b/tests/exp8.sub @@ -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} diff --git a/tests/exportfunc.right b/tests/exportfunc.right index ff7fc8d91..890bdfa4b 100644 --- a/tests/exportfunc.right +++ b/tests/exportfunc.right @@ -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 diff --git a/tests/exportfunc.tests b/tests/exportfunc.tests index b2742d2ce..d06b1a33b 100644 --- a/tests/exportfunc.tests +++ b/tests/exportfunc.tests @@ -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(){ _;}</dev/null +unset A100 A1000 # CVE-2014-6278 diff --git a/tests/extglob.right b/tests/extglob.right index 691f6879d..2974cecaf 100644 --- a/tests/extglob.right +++ b/tests/extglob.right @@ -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 diff --git a/tests/extglob.tests b/tests/extglob.tests index 4cb671a8a..7a7cf91bf 100644 --- a/tests/extglob.tests +++ b/tests/extglob.tests @@ -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 diff --git a/tests/extglob2.sub b/tests/extglob2.sub index f4a3b3745..1088111f3 100644 --- a/tests/extglob2.sub +++ b/tests/extglob2.sub @@ -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 index 000000000..5e2aafbe5 --- /dev/null +++ b/tests/extglob6.sub @@ -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 . +# +# 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 index 000000000..5fab9cdab --- /dev/null +++ b/tests/extglob7.sub @@ -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 diff --git a/tests/func.tests b/tests/func.tests index fffe3d2b3..e35ec2b85 100644 --- a/tests/func.tests +++ b/tests/func.tests @@ -11,6 +11,12 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +# 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)) diff --git a/tests/getopts10.sub b/tests/getopts10.sub index cc8acb0cf..49b2bfe9c 100644 --- a/tests/getopts10.sub +++ b/tests/getopts10.sub @@ -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 diff --git a/tests/glob.right b/tests/glob.right index 949669050..723ee7b46 100644 --- a/tests/glob.right +++ b/tests/glob.right @@ -121,6 +121,10 @@ a\*b a\*b* é/* é/* +a aa b bb +.a .aa .b .bb a aa b bb +.a .aa .b .bb +. .. .a .aa .b .bb argv[1] = argv[2] = argv[3] = @@ -135,7 +139,7 @@ argv[2] = argv[3] = argv[4] = 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] = argv[1] = <*> argv[1] = diff --git a/tests/glob.tests b/tests/glob.tests index b35d7336f..02d530261 100644 --- a/tests/glob.tests +++ b/tests/glob.tests @@ -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 index 000000000..7c14c0d24 --- /dev/null +++ b/tests/glob10.sub @@ -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 . +# + +# 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 diff --git a/tests/glob5.sub b/tests/glob5.sub index 5735715db..a0dd623fa 100644 --- a/tests/glob5.sub +++ b/tests/glob5.sub @@ -11,6 +11,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +[ $UID -eq 0 ] && { echo "glob5.sub: the test suite should not be run as root" >&2 ; } + ORIGD=$PWD : ${TMPDIR:=/var/tmp} diff --git a/tests/glob6.sub b/tests/glob6.sub index f26ae4d65..88429838c 100644 --- a/tests/glob6.sub +++ b/tests/glob6.sub @@ -12,6 +12,7 @@ # along with this program. If not, see . # # 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} diff --git a/tests/heredoc.right b/tests/heredoc.right index f6e53beae..33da5238a 100644 --- a/tests/heredoc.right +++ b/tests/heredoc.right @@ -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,33 @@ argv[2] = argv[1] = argv[2] = argv[3] = +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'} +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 29: 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 diff --git a/tests/heredoc.tests b/tests/heredoc.tests index 430302f58..d10a7c104 100644 --- a/tests/heredoc.tests +++ b/tests/heredoc.tests @@ -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 index 000000000..1d5fff096 --- /dev/null +++ b/tests/heredoc6.sub @@ -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 . +# + +# test $'...' and $"..." strings in here documents (problem through bash-5.1) + +pat=$'no\t' +x=$'no\tOK' +y=notOK + +cat <. +# + +# 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 <. # +# 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" diff --git a/tests/history.right b/tests/history.right index 379de48b9..5273de6bc 100644 --- a/tests/history.right +++ b/tests/history.right @@ -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 diff --git a/tests/history.tests b/tests/history.tests index 53321f051..5826d1304 100644 --- a/tests/history.tests +++ b/tests/history.tests @@ -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 index 000000000..a21d8d38b --- /dev/null +++ b/tests/history6.sub @@ -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 . +# +: ${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 diff --git a/tests/jobs.right b/tests/jobs.right index 5d03b76b9..3151858ca 100644 --- a/tests/jobs.right +++ b/tests/jobs.right @@ -31,6 +31,7 @@ i killed it ./jobs5.sub: line 40: wait: %8: no such job 2: ok 2 2: ok 3 +127 child1 exit status 0 [1]+ Running sleep 20 & ./jobs7.sub: line 5: fg: no current jobs diff --git a/tests/jobs4.sub b/tests/jobs4.sub index 7ecd7123a..9f1cd0408 100644 --- a/tests/jobs4.sub +++ b/tests/jobs4.sub @@ -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 diff --git a/tests/jobs5.sub b/tests/jobs5.sub index e6ffb44e6..25c72c60b 100644 --- a/tests/jobs5.sub +++ b/tests/jobs5.sub @@ -59,3 +59,8 @@ 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 $? diff --git a/tests/jobs7.sub b/tests/jobs7.sub index 3e76db37b..582365ff5 100644 --- a/tests/jobs7.sub +++ b/tests/jobs7.sub @@ -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 diff --git a/tests/lastpipe.right b/tests/lastpipe.right index cca5938d8..84e1e2ea3 100644 --- a/tests/lastpipe.right +++ b/tests/lastpipe.right @@ -18,3 +18,5 @@ A2 B1 B2 HI -- 42 -- 0 42 +x=x +x=x diff --git a/tests/lastpipe.tests b/tests/lastpipe.tests index 775e81dd2..f9d669ddc 100644 --- a/tests/lastpipe.tests +++ b/tests/lastpipe.tests @@ -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 index 000000000..b9222b8ac --- /dev/null +++ b/tests/lastpipe3.sub @@ -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 diff --git a/tests/mapfile.right b/tests/mapfile.right index 143d6ddc1..4452232d5 100644 --- a/tests/mapfile.right +++ b/tests/mapfile.right @@ -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 diff --git a/tests/mapfile.tests b/tests/mapfile.tests index 01f1f2e55..c2ea7d24d 100644 --- a/tests/mapfile.tests +++ b/tests/mapfile.tests @@ -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 diff --git a/tests/misc/run-r2.sh b/tests/misc/run-r2.sh old mode 100755 new mode 100644 diff --git a/tests/misc/sigint-1.sh b/tests/misc/sigint-1.sh old mode 100755 new mode 100644 diff --git a/tests/misc/sigint-2.sh b/tests/misc/sigint-2.sh old mode 100755 new mode 100644 diff --git a/tests/misc/sigint-3.sh b/tests/misc/sigint-3.sh old mode 100755 new mode 100644 diff --git a/tests/misc/sigint-4.sh b/tests/misc/sigint-4.sh old mode 100755 new mode 100644 diff --git a/tests/nameref.right b/tests/nameref.right index 296105c96..83e9ee5b8 100644 --- a/tests/nameref.right +++ b/tests/nameref.right @@ -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: v: @@ -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") diff --git a/tests/nameref15.sub b/tests/nameref15.sub index cce8fbd94..e9a09eeb4 100644 --- a/tests/nameref15.sub +++ b/tests/nameref15.sub @@ -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 diff --git a/tests/nameref18.sub b/tests/nameref18.sub index a29fe379d..7a32877f3 100644 --- a/tests/nameref18.sub +++ b/tests/nameref18.sub @@ -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" diff --git a/tests/nameref19.sub b/tests/nameref19.sub index b00f68e52..d4b900e81 100644 --- a/tests/nameref19.sub +++ b/tests/nameref19.sub @@ -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 index 000000000..4e44fbb35 --- /dev/null +++ b/tests/nameref22.sub @@ -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 . +# + +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 index 000000000..358c381e1 --- /dev/null +++ b/tests/nameref23.sub @@ -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 diff --git a/tests/new-exp.right b/tests/new-exp.right index 752bba5ce..b35782e3a 100644 --- a/tests/new-exp.right +++ b/tests/new-exp.right @@ -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> <''> <'gh'> @@ -625,7 +625,7 @@ c Sub = 0 2 4 8 <'ab cd'> <'4'> <'ab cd'> <> -argv[1] = +argv[1] = < > <' \t\n'> @@ -703,11 +703,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] = +argv[3] = <1> +argv[4] = +argv[5] = <2> +argv[6] = +argv[7] = <3> +argv[8] = declare -a foo=() ai declare -ai foo @@ -719,6 +729,36 @@ 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 b c d e f g +& & & & & & & +a a a a a a a +3 3 3 3 3 3 3 +abc defg +abc defg +abc defg +abc defg +abc defg +& defg +& defg +abcdefg +abcdefg +&defg +&defg +\abcdefg +&defg +&defg +\&defg +\&defg +\\&defg argv[1] = argv[1] = diff --git a/tests/new-exp.tests b/tests/new-exp.tests index 079426cb5..c542313f1 100644 --- a/tests/new-exp.tests +++ b/tests/new-exp.tests @@ -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 diff --git a/tests/new-exp10.sub b/tests/new-exp10.sub index bf9ebe7aa..8c1f364e6 100644 --- a/tests/new-exp10.sub +++ b/tests/new-exp10.sub @@ -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 diff --git a/tests/new-exp14.sub b/tests/new-exp14.sub index b8bda8de5..ce963763c 100644 --- a/tests/new-exp14.sub +++ b/tests/new-exp14.sub @@ -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 . +# + +# test the other uses of the 'K' tranform 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 index 000000000..34ad8a7b1 --- /dev/null +++ b/tests/new-exp16.sub @@ -0,0 +1,63 @@ +# 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 . +# + +HOME=/homes/chet +string=abcdefg +set -- a b c + +# 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//?/"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/"$rep"} + +shopt -u patsub_replacement + +echo "${string/abc/&}" +echo ${string/abc/\&} +echo "${string/abc/\\&}" +echo "${string/abc/"\\&"}" +echo ${string/abc/"$rep"} diff --git a/tests/nquote.right b/tests/nquote.right index e3ae55585..5c9a51662 100644 --- a/tests/nquote.right +++ b/tests/nquote.right @@ -35,6 +35,10 @@ argv[1] = ;foo argv[1] = <^I> argv[1] = <'A^IB'> +argv[1] = +argv[1] = <$'a\tb\tc'> + AD +E hello' world hello world! hello' world! @@ -62,3 +66,5 @@ argv[1] = <^?> 0000000 esc fs gs rs us del nl 0000007 \q +foo +./nquote4.sub: line 6: quux: command not found diff --git a/tests/nquote.tests b/tests/nquote.tests index 20d6415d3..068df365b 100644 --- a/tests/nquote.tests +++ b/tests/nquote.tests @@ -128,6 +128,14 @@ 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 diff --git a/tests/nquote4.sub b/tests/nquote4.sub new file mode 100644 index 000000000..0d4a4955f --- /dev/null +++ b/tests/nquote4.sub @@ -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/posix2.right b/tests/posix2.right index 40aea0399..5d3f734a4 100644 --- a/tests/posix2.right +++ b/tests/posix2.right @@ -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 diff --git a/tests/posix2.tests b/tests/posix2.tests index 9b6c0932f..0f5fce153 100644 --- a/tests/posix2.tests +++ b/tests/posix2.tests @@ -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" diff --git a/tests/posixexp.right b/tests/posixexp.right index e6bdbf4bd..77e981c1d 100644 --- a/tests/posixexp.right +++ b/tests/posixexp.right @@ -275,14 +275,14 @@ argv[2] = [ 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 +5: OK OK OK -5: $'not\ttoo\nbad' +5: 'not too +bad' "A" A argv[1] = <"A"> argv[1] = argv[1] = ./posixexp.tests: line 97: unexpected EOF while looking for matching `}' -./posixexp.tests: line 98: syntax error: unexpected end of file diff --git a/tests/precedence.tests b/tests/precedence.tests old mode 100755 new mode 100644 diff --git a/tests/printf2.sub b/tests/printf2.sub index 45c48d4c4..94a2bb109 100644 --- a/tests/printf2.sub +++ b/tests/printf2.sub @@ -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 index 000000000..e68936598 --- /dev/null +++ b/tests/quotearray.right @@ -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 index 000000000..e1ed83b0e --- /dev/null +++ b/tests/quotearray.tests @@ -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 . +# + +# 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 index 000000000..19741b1f9 --- /dev/null +++ b/tests/quotearray1.sub @@ -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 . +# + +# 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 index 000000000..056f8ca2f --- /dev/null +++ b/tests/quotearray2.sub @@ -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 . +# + +# 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 index 000000000..65f950d5d --- /dev/null +++ b/tests/quotearray3.sub @@ -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 . +# + +# 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 index 000000000..964aac751 --- /dev/null +++ b/tests/quotearray4.sub @@ -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 . +# + +# 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 index 000000000..5366a9997 --- /dev/null +++ b/tests/quotearray5.sub @@ -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 . +# + +# 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 diff --git a/tests/read.right b/tests/read.right index 114408376..ec3d686a9 100644 --- a/tests/read.right +++ b/tests/read.right @@ -30,19 +30,24 @@ argv[1] = argv[1] = 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,16 @@ 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 diff --git a/tests/read.tests b/tests/read.tests index 7384f05f4..6132b6fe8 100644 --- a/tests/read.tests +++ b/tests/read.tests @@ -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 diff --git a/tests/read1.sub b/tests/read1.sub index b3b85157d..cf003986f 100644 --- a/tests/read1.sub +++ b/tests/read1.sub @@ -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 | { diff --git a/tests/read2.sub b/tests/read2.sub index 41698e468..d35301153 100644 --- a/tests/read2.sub +++ b/tests/read2.sub @@ -11,27 +11,36 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +: ${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 << 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 diff --git a/tests/read3.sub b/tests/read3.sub index d413f7dba..8a2404013 100644 --- a/tests/read3.sub +++ b/tests/read3.sub @@ -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 index 000000000..a9204ac51 --- /dev/null +++ b/tests/read7.sub @@ -0,0 +1,61 @@ +# 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 . +# +# 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 << $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 diff --git a/tests/rsh.right b/tests/rsh.right index a91974a59..5f64049b6 100644 --- a/tests/rsh.right +++ b/tests/rsh.right @@ -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 diff --git a/tests/run-all b/tests/run-all index b8219b2d0..1f7492395 100644 --- a/tests/run-all +++ b/tests/run-all @@ -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 diff --git a/tests/run-execscript b/tests/run-execscript index de786442b..c3ed53e60 100644 --- a/tests/run-execscript +++ b/tests/run-execscript @@ -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 . +# + 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 diff --git a/tests/run-minimal b/tests/run-minimal index ade30b152..0c3a2e5fb 100644 --- a/tests/run-minimal +++ b/tests/run-minimal @@ -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 index 000000000..06e5e6ebb --- /dev/null +++ b/tests/run-quotearray @@ -0,0 +1,2 @@ +${THIS_SH} ./quotearray.tests >${BASH_TSTOUT} 2>&1 +diff ${BASH_TSTOUT} quotearray.right && rm -f ${BASH_TSTOUT} diff --git a/tests/shopt.right b/tests/shopt.right index 8cf46db60..d617c1d72 100644 --- a/tests/shopt.right +++ b/tests/shopt.right @@ -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 diff --git a/tests/tilde.tests b/tests/tilde.tests index 374f3e6d6..20268a731 100644 --- a/tests/tilde.tests +++ b/tests/tilde.tests @@ -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 diff --git a/tests/tilde2.right b/tests/tilde2.right index fce04687e..f383e3a3f 100644 --- a/tests/tilde2.right +++ b/tests/tilde2.right @@ -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 diff --git a/tests/tilde2.tests b/tests/tilde2.tests index cc5dba9f6..d2415cb35 100644 --- a/tests/tilde2.tests +++ b/tests/tilde2.tests @@ -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 index 000000000..c35ea5003 --- /dev/null +++ b/tests/tilde3.sub @@ -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 . +# +# 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 diff --git a/tests/type.right b/tests/type.right index f876715a0..bbc228e85 100644 --- a/tests/type.right +++ b/tests/type.right @@ -54,12 +54,12 @@ f () foo is a function foo () { - echo $(&${fd[1]}- } +./vredir8.sub: line 12: $fd: Bad file descriptor diff --git a/tests/vredir.tests b/tests/vredir.tests index ea59eecd3..bd4cb7752 100644 --- a/tests/vredir.tests +++ b/tests/vredir.tests @@ -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 index 000000000..e87b45b3c --- /dev/null +++ b/tests/vredir8.sub @@ -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 1b27fb3a3..8c0547559 100644 --- 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; @@ -311,9 +311,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 */ @@ -475,9 +473,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 +566,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 +583,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 +978,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 +1362,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 +1523,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 ef64a6803..89402a1bc 100644 --- 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)); diff --git a/unwind_prot.c b/unwind_prot.c index 5703777fe..ec82393d5 100644 --- a/unwind_prot.c +++ b/unwind_prot.c @@ -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 #endif -#if STDC_HEADERS +#if defined (HAVE_STDDEF_H) # include #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 diff --git a/variables.c b/variables.c index 73f157fb5..6cb77186d 100644 --- a/variables.c +++ b/variables.c @@ -1,6 +1,6 @@ /* variables.c -- Functions for hacking shell variables. */ -/* 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. @@ -199,6 +199,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)); @@ -664,6 +667,8 @@ initialize_shell_variables (env, privmode) /* 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 +1278,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 +1333,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 +1341,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 +1387,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 +1415,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 +1425,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 +1442,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 +1450,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 +1475,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 +1483,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 +1493,6 @@ get_epochrealtime (var) SHELL_VAR *var; { char buf[32]; - char *p; struct timeval tv; gettimeofday (&tv, NULL); @@ -1498,10 +1500,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 +1508,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 +1562,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 +1571,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 +1581,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 +1595,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 +1609,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 +1831,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); } @@ -2527,7 +2495,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 +2815,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 +2871,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 +3104,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 +3268,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 +3401,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 +3441,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 +3462,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 +3590,7 @@ assign_in_env (word, flags) if (legal_identifier (name) == 0) { sh_invalidid (name); + free (name); return (0); } @@ -5670,7 +5656,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 +6265,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 +6296,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 */ } } diff --git a/variables.h b/variables.h index c73eb4e52..15fd49f2c 100644 --- a/variables.h +++ b/variables.h @@ -1,6 +1,6 @@ /* variables.h -- data structures for shell variables. */ -/* 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. @@ -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)); diff --git a/version.c b/version.c index 8c1568ae4..94c85bd22 100644 --- 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 \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 78b38250b..111d41f57 100644 --- 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 . */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -45,11 +45,11 @@ 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/bash/bash-20220112/parse.y" #include "config.h" @@ -168,7 +168,10 @@ typedef void *alias_t; 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 +197,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 +204,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 +250,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 @@ -464,11 +464,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 +520,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 328 "/usr/local/src/bash/bash-20220112/parse.y" WORD_DESC *word; /* the word that we read. */ int number; /* the number that we read. */ @@ -534,7 +537,7 @@ union YYSTYPE ELEMENT element; PATTERN_LIST *pattern; -#line 538 "y.tab.c" +#line 541 "y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -545,8 +548,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 +606,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 +700,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 + . */ +#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 +809,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 +982,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 +1011,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 +1040,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, 385, 385, 396, 404, 413, 428, 445, 455, 457, + 461, 467, 473, 479, 485, 491, 497, 503, 509, 515, + 521, 527, 533, 539, 545, 551, 558, 565, 572, 579, + 586, 593, 599, 605, 611, 617, 623, 629, 635, 641, + 647, 653, 659, 665, 671, 677, 683, 689, 695, 701, + 707, 713, 719, 725, 733, 735, 737, 741, 745, 756, + 758, 762, 764, 766, 782, 784, 788, 790, 792, 794, + 796, 798, 800, 802, 804, 806, 808, 812, 817, 822, + 827, 832, 837, 842, 847, 854, 860, 866, 872, 880, + 885, 890, 895, 900, 905, 910, 915, 922, 927, 932, + 939, 941, 943, 945, 949, 951, 982, 989, 993, 999, + 1004, 1021, 1026, 1043, 1050, 1052, 1054, 1059, 1063, 1067, + 1071, 1073, 1075, 1079, 1080, 1084, 1086, 1088, 1090, 1094, + 1096, 1098, 1100, 1102, 1104, 1108, 1110, 1119, 1125, 1131, + 1132, 1139, 1143, 1145, 1147, 1154, 1156, 1158, 1162, 1163, + 1166, 1168, 1170, 1174, 1175, 1184, 1199, 1217, 1234, 1236, + 1238, 1245, 1248, 1252, 1254, 1260, 1266, 1286, 1309, 1311, + 1334, 1338, 1340, 1342, 1344 }; #endif @@ -1063,18 +1088,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 +1109,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 +1119,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, - 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, + 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, 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, + 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, 50, 51, 52, 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, -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 +1477,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 +1518,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 +1542,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 +1660,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 +1689,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 +1726,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 +1755,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 +1783,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 +1794,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 +1816,7 @@ yysetstate: } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + if (yystate == YYFINAL) YYACCEPT; @@ -1919,8 +1928,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 386 "/usr/local/src/bash/bash-20220112/parse.y" { /* Case of regular command. Discard the error safety net,and return the command just parsed. */ @@ -1931,11 +1940,23 @@ yyreduce: parser_state |= PST_EOFTOKEN; YYACCEPT; } -#line 1935 "y.tab.c" +#line 1944 "y.tab.c" break; - case 3: -#line 393 "/Users/chet/src/bash/src/parse.y" + case 3: /* inputunit: comsub */ +#line 397 "/usr/local/src/bash/bash-20220112/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 1956 "y.tab.c" + break; + + case 4: /* inputunit: '\n' */ +#line 405 "/usr/local/src/bash/bash-20220112/parse.y" { /* Case of regular command, but not a very interesting one. Return a NULL command. */ @@ -1944,11 +1965,11 @@ yyreduce: parser_state |= PST_EOFTOKEN; YYACCEPT; } -#line 1948 "y.tab.c" +#line 1969 "y.tab.c" break; - case 4: -#line 402 "/Users/chet/src/bash/src/parse.y" + case 5: /* inputunit: error '\n' */ +#line 414 "/usr/local/src/bash/bash-20220112/parse.y" { /* Error during parsing. Return NULL command. */ global_command = (COMMAND *)NULL; @@ -1963,11 +1984,11 @@ yyreduce: YYABORT; } } -#line 1967 "y.tab.c" +#line 1988 "y.tab.c" break; - case 5: -#line 417 "/Users/chet/src/bash/src/parse.y" + case 6: /* inputunit: error yacc_EOF */ +#line 429 "/usr/local/src/bash/bash-20220112/parse.y" { /* EOF after an error. Do ignoreeof or not. Really only interesting in non-interactive shells */ @@ -1984,11 +2005,11 @@ yyreduce: YYABORT; } } -#line 1988 "y.tab.c" +#line 2009 "y.tab.c" break; - case 6: -#line 434 "/Users/chet/src/bash/src/parse.y" + case 7: /* inputunit: yacc_EOF */ +#line 446 "/usr/local/src/bash/bash-20220112/parse.y" { /* Case of EOF seen by itself. Do ignoreeof or not. */ @@ -1996,495 +2017,495 @@ yyreduce: handle_eof_input_unit (); YYACCEPT; } -#line 2000 "y.tab.c" +#line 2021 "y.tab.c" break; - case 7: -#line 444 "/Users/chet/src/bash/src/parse.y" + case 8: /* word_list: WORD */ +#line 456 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); } -#line 2006 "y.tab.c" +#line 2027 "y.tab.c" break; - case 8: -#line 446 "/Users/chet/src/bash/src/parse.y" + case 9: /* word_list: word_list WORD */ +#line 458 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-1].word_list)); } -#line 2012 "y.tab.c" +#line 2033 "y.tab.c" break; - case 9: -#line 450 "/Users/chet/src/bash/src/parse.y" + case 10: /* redirection: '>' WORD */ +#line 462 "/usr/local/src/bash/bash-20220112/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 2043 "y.tab.c" break; - case 10: -#line 456 "/Users/chet/src/bash/src/parse.y" + case 11: /* redirection: '<' WORD */ +#line 468 "/usr/local/src/bash/bash-20220112/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 2053 "y.tab.c" break; - case 11: -#line 462 "/Users/chet/src/bash/src/parse.y" + case 12: /* redirection: NUMBER '>' WORD */ +#line 474 "/usr/local/src/bash/bash-20220112/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 2063 "y.tab.c" break; - case 12: -#line 468 "/Users/chet/src/bash/src/parse.y" + case 13: /* redirection: NUMBER '<' WORD */ +#line 480 "/usr/local/src/bash/bash-20220112/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 2073 "y.tab.c" break; - case 13: -#line 474 "/Users/chet/src/bash/src/parse.y" + case 14: /* redirection: REDIR_WORD '>' WORD */ +#line 486 "/usr/local/src/bash/bash-20220112/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 2083 "y.tab.c" break; - case 14: -#line 480 "/Users/chet/src/bash/src/parse.y" + case 15: /* redirection: REDIR_WORD '<' WORD */ +#line 492 "/usr/local/src/bash/bash-20220112/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 2093 "y.tab.c" break; - case 15: -#line 486 "/Users/chet/src/bash/src/parse.y" + case 16: /* redirection: GREATER_GREATER WORD */ +#line 498 "/usr/local/src/bash/bash-20220112/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 2103 "y.tab.c" break; - case 16: -#line 492 "/Users/chet/src/bash/src/parse.y" + case 17: /* redirection: NUMBER GREATER_GREATER WORD */ +#line 504 "/usr/local/src/bash/bash-20220112/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 2113 "y.tab.c" break; - case 17: -#line 498 "/Users/chet/src/bash/src/parse.y" + case 18: /* redirection: REDIR_WORD GREATER_GREATER WORD */ +#line 510 "/usr/local/src/bash/bash-20220112/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 2123 "y.tab.c" break; - case 18: -#line 504 "/Users/chet/src/bash/src/parse.y" + case 19: /* redirection: GREATER_BAR WORD */ +#line 516 "/usr/local/src/bash/bash-20220112/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 2133 "y.tab.c" break; - case 19: -#line 510 "/Users/chet/src/bash/src/parse.y" + case 20: /* redirection: NUMBER GREATER_BAR WORD */ +#line 522 "/usr/local/src/bash/bash-20220112/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 2143 "y.tab.c" break; - case 20: -#line 516 "/Users/chet/src/bash/src/parse.y" + case 21: /* redirection: REDIR_WORD GREATER_BAR WORD */ +#line 528 "/usr/local/src/bash/bash-20220112/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 2153 "y.tab.c" break; - case 21: -#line 522 "/Users/chet/src/bash/src/parse.y" + case 22: /* redirection: LESS_GREATER WORD */ +#line 534 "/usr/local/src/bash/bash-20220112/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 2163 "y.tab.c" break; - case 22: -#line 528 "/Users/chet/src/bash/src/parse.y" + case 23: /* redirection: NUMBER LESS_GREATER WORD */ +#line 540 "/usr/local/src/bash/bash-20220112/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 2173 "y.tab.c" break; - case 23: -#line 534 "/Users/chet/src/bash/src/parse.y" + case 24: /* redirection: REDIR_WORD LESS_GREATER WORD */ +#line 546 "/usr/local/src/bash/bash-20220112/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 2183 "y.tab.c" break; - case 24: -#line 540 "/Users/chet/src/bash/src/parse.y" + case 25: /* redirection: LESS_LESS WORD */ +#line 552 "/usr/local/src/bash/bash-20220112/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 2194 "y.tab.c" break; - case 25: -#line 547 "/Users/chet/src/bash/src/parse.y" + case 26: /* redirection: NUMBER LESS_LESS WORD */ +#line 559 "/usr/local/src/bash/bash-20220112/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 2205 "y.tab.c" break; - case 26: -#line 554 "/Users/chet/src/bash/src/parse.y" + case 27: /* redirection: REDIR_WORD LESS_LESS WORD */ +#line 566 "/usr/local/src/bash/bash-20220112/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 2216 "y.tab.c" break; - case 27: -#line 561 "/Users/chet/src/bash/src/parse.y" + case 28: /* redirection: LESS_LESS_MINUS WORD */ +#line 573 "/usr/local/src/bash/bash-20220112/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 2227 "y.tab.c" break; - case 28: -#line 568 "/Users/chet/src/bash/src/parse.y" + case 29: /* redirection: NUMBER LESS_LESS_MINUS WORD */ +#line 580 "/usr/local/src/bash/bash-20220112/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 2238 "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 587 "/usr/local/src/bash/bash-20220112/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 2249 "y.tab.c" break; - case 30: -#line 582 "/Users/chet/src/bash/src/parse.y" + case 31: /* redirection: LESS_LESS_LESS WORD */ +#line 594 "/usr/local/src/bash/bash-20220112/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 2259 "y.tab.c" break; - case 31: -#line 588 "/Users/chet/src/bash/src/parse.y" + case 32: /* redirection: NUMBER LESS_LESS_LESS WORD */ +#line 600 "/usr/local/src/bash/bash-20220112/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 2269 "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 606 "/usr/local/src/bash/bash-20220112/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 2279 "y.tab.c" break; - case 33: -#line 600 "/Users/chet/src/bash/src/parse.y" + case 34: /* redirection: LESS_AND NUMBER */ +#line 612 "/usr/local/src/bash/bash-20220112/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 2289 "y.tab.c" break; - case 34: -#line 606 "/Users/chet/src/bash/src/parse.y" + case 35: /* redirection: NUMBER LESS_AND NUMBER */ +#line 618 "/usr/local/src/bash/bash-20220112/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 2299 "y.tab.c" break; - case 35: -#line 612 "/Users/chet/src/bash/src/parse.y" + case 36: /* redirection: REDIR_WORD LESS_AND NUMBER */ +#line 624 "/usr/local/src/bash/bash-20220112/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 2309 "y.tab.c" break; - case 36: -#line 618 "/Users/chet/src/bash/src/parse.y" + case 37: /* redirection: GREATER_AND NUMBER */ +#line 630 "/usr/local/src/bash/bash-20220112/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 2319 "y.tab.c" break; - case 37: -#line 624 "/Users/chet/src/bash/src/parse.y" + case 38: /* redirection: NUMBER GREATER_AND NUMBER */ +#line 636 "/usr/local/src/bash/bash-20220112/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 2329 "y.tab.c" break; - case 38: -#line 630 "/Users/chet/src/bash/src/parse.y" + case 39: /* redirection: REDIR_WORD GREATER_AND NUMBER */ +#line 642 "/usr/local/src/bash/bash-20220112/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 2339 "y.tab.c" break; - case 39: -#line 636 "/Users/chet/src/bash/src/parse.y" + case 40: /* redirection: LESS_AND WORD */ +#line 648 "/usr/local/src/bash/bash-20220112/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 2349 "y.tab.c" break; - case 40: -#line 642 "/Users/chet/src/bash/src/parse.y" + case 41: /* redirection: NUMBER LESS_AND WORD */ +#line 654 "/usr/local/src/bash/bash-20220112/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 2359 "y.tab.c" break; - case 41: -#line 648 "/Users/chet/src/bash/src/parse.y" + case 42: /* redirection: REDIR_WORD LESS_AND WORD */ +#line 660 "/usr/local/src/bash/bash-20220112/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 2369 "y.tab.c" break; - case 42: -#line 654 "/Users/chet/src/bash/src/parse.y" + case 43: /* redirection: GREATER_AND WORD */ +#line 666 "/usr/local/src/bash/bash-20220112/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 2379 "y.tab.c" break; - case 43: -#line 660 "/Users/chet/src/bash/src/parse.y" + case 44: /* redirection: NUMBER GREATER_AND WORD */ +#line 672 "/usr/local/src/bash/bash-20220112/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 2389 "y.tab.c" break; - case 44: -#line 666 "/Users/chet/src/bash/src/parse.y" + case 45: /* redirection: REDIR_WORD GREATER_AND WORD */ +#line 678 "/usr/local/src/bash/bash-20220112/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 2399 "y.tab.c" break; - case 45: -#line 672 "/Users/chet/src/bash/src/parse.y" + case 46: /* redirection: GREATER_AND '-' */ +#line 684 "/usr/local/src/bash/bash-20220112/parse.y" { source.dest = 1; redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2388 "y.tab.c" +#line 2409 "y.tab.c" break; - case 46: -#line 678 "/Users/chet/src/bash/src/parse.y" + case 47: /* redirection: NUMBER GREATER_AND '-' */ +#line 690 "/usr/local/src/bash/bash-20220112/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 2419 "y.tab.c" break; - case 47: -#line 684 "/Users/chet/src/bash/src/parse.y" + case 48: /* redirection: REDIR_WORD GREATER_AND '-' */ +#line 696 "/usr/local/src/bash/bash-20220112/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 2429 "y.tab.c" break; - case 48: -#line 690 "/Users/chet/src/bash/src/parse.y" + case 49: /* redirection: LESS_AND '-' */ +#line 702 "/usr/local/src/bash/bash-20220112/parse.y" { source.dest = 0; redir.dest = 0; (yyval.redirect) = make_redirection (source, r_close_this, redir, 0); } -#line 2418 "y.tab.c" +#line 2439 "y.tab.c" break; - case 49: -#line 696 "/Users/chet/src/bash/src/parse.y" + case 50: /* redirection: NUMBER LESS_AND '-' */ +#line 708 "/usr/local/src/bash/bash-20220112/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 2449 "y.tab.c" break; - case 50: -#line 702 "/Users/chet/src/bash/src/parse.y" + case 51: /* redirection: REDIR_WORD LESS_AND '-' */ +#line 714 "/usr/local/src/bash/bash-20220112/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 2459 "y.tab.c" break; - case 51: -#line 708 "/Users/chet/src/bash/src/parse.y" + case 52: /* redirection: AND_GREATER WORD */ +#line 720 "/usr/local/src/bash/bash-20220112/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 2469 "y.tab.c" break; - case 52: -#line 714 "/Users/chet/src/bash/src/parse.y" + case 53: /* redirection: AND_GREATER_GREATER WORD */ +#line 726 "/usr/local/src/bash/bash-20220112/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 2479 "y.tab.c" break; - case 53: -#line 722 "/Users/chet/src/bash/src/parse.y" + case 54: /* simple_command_element: WORD */ +#line 734 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; } -#line 2464 "y.tab.c" +#line 2485 "y.tab.c" break; - case 54: -#line 724 "/Users/chet/src/bash/src/parse.y" + case 55: /* simple_command_element: ASSIGNMENT_WORD */ +#line 736 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; } -#line 2470 "y.tab.c" +#line 2491 "y.tab.c" break; - case 55: -#line 726 "/Users/chet/src/bash/src/parse.y" + case 56: /* simple_command_element: redirection */ +#line 738 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; } -#line 2476 "y.tab.c" +#line 2497 "y.tab.c" break; - case 56: -#line 730 "/Users/chet/src/bash/src/parse.y" + case 57: /* redirection_list: redirection */ +#line 742 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.redirect) = (yyvsp[0].redirect); } -#line 2484 "y.tab.c" +#line 2505 "y.tab.c" break; - case 57: -#line 734 "/Users/chet/src/bash/src/parse.y" + case 58: /* redirection_list: redirection_list redirection */ +#line 746 "/usr/local/src/bash/bash-20220112/parse.y" { register REDIRECT *t; @@ -2493,35 +2514,35 @@ yyreduce: t->next = (yyvsp[0].redirect); (yyval.redirect) = (yyvsp[-1].redirect); } -#line 2497 "y.tab.c" +#line 2518 "y.tab.c" break; - case 58: -#line 745 "/Users/chet/src/bash/src/parse.y" + case 59: /* simple_command: simple_command_element */ +#line 757 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL); } -#line 2503 "y.tab.c" +#line 2524 "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 759 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command)); } -#line 2509 "y.tab.c" +#line 2530 "y.tab.c" break; - case 60: -#line 751 "/Users/chet/src/bash/src/parse.y" + case 61: /* command: simple_command */ +#line 763 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = clean_simple_command ((yyvsp[0].command)); } -#line 2515 "y.tab.c" +#line 2536 "y.tab.c" break; - case 61: -#line 753 "/Users/chet/src/bash/src/parse.y" + case 62: /* command: shell_command */ +#line 765 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2521 "y.tab.c" +#line 2542 "y.tab.c" break; - case 62: -#line 755 "/Users/chet/src/bash/src/parse.y" + case 63: /* command: shell_command redirection_list */ +#line 767 "/usr/local/src/bash/bash-20220112/parse.y" { COMMAND *tc; @@ -2537,330 +2558,330 @@ yyreduce: tc->redirects = (yyvsp[0].redirect); (yyval.command) = (yyvsp[-1].command); } -#line 2541 "y.tab.c" +#line 2562 "y.tab.c" break; - case 63: -#line 771 "/Users/chet/src/bash/src/parse.y" + case 64: /* command: function_def */ +#line 783 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2547 "y.tab.c" +#line 2568 "y.tab.c" break; - case 64: -#line 773 "/Users/chet/src/bash/src/parse.y" + case 65: /* command: coproc */ +#line 785 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2553 "y.tab.c" +#line 2574 "y.tab.c" break; - case 65: -#line 777 "/Users/chet/src/bash/src/parse.y" + case 66: /* shell_command: for_command */ +#line 789 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2559 "y.tab.c" +#line 2580 "y.tab.c" break; - case 66: -#line 779 "/Users/chet/src/bash/src/parse.y" + case 67: /* shell_command: case_command */ +#line 791 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2565 "y.tab.c" +#line 2586 "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 793 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); } -#line 2571 "y.tab.c" +#line 2592 "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 795 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); } -#line 2577 "y.tab.c" +#line 2598 "y.tab.c" break; - case 69: -#line 785 "/Users/chet/src/bash/src/parse.y" + case 70: /* shell_command: select_command */ +#line 797 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2583 "y.tab.c" +#line 2604 "y.tab.c" break; - case 70: -#line 787 "/Users/chet/src/bash/src/parse.y" + case 71: /* shell_command: if_command */ +#line 799 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2589 "y.tab.c" +#line 2610 "y.tab.c" break; - case 71: -#line 789 "/Users/chet/src/bash/src/parse.y" + case 72: /* shell_command: subshell */ +#line 801 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2595 "y.tab.c" +#line 2616 "y.tab.c" break; - case 72: -#line 791 "/Users/chet/src/bash/src/parse.y" + case 73: /* shell_command: group_command */ +#line 803 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2601 "y.tab.c" +#line 2622 "y.tab.c" break; - case 73: -#line 793 "/Users/chet/src/bash/src/parse.y" + case 74: /* shell_command: arith_command */ +#line 805 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2607 "y.tab.c" +#line 2628 "y.tab.c" break; - case 74: -#line 795 "/Users/chet/src/bash/src/parse.y" + case 75: /* shell_command: cond_command */ +#line 807 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2613 "y.tab.c" +#line 2634 "y.tab.c" break; - case 75: -#line 797 "/Users/chet/src/bash/src/parse.y" + case 76: /* shell_command: arith_for_command */ +#line 809 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2619 "y.tab.c" +#line 2640 "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 813 "/usr/local/src/bash/bash-20220112/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 2649 "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 818 "/usr/local/src/bash/bash-20220112/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 2658 "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 823 "/usr/local/src/bash/bash-20220112/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 2667 "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 828 "/usr/local/src/bash/bash-20220112/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 2676 "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 833 "/usr/local/src/bash/bash-20220112/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 2685 "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 838 "/usr/local/src/bash/bash-20220112/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 2694 "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 843 "/usr/local/src/bash/bash-20220112/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 2703 "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 848 "/usr/local/src/bash/bash-20220112/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 2712 "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 855 "/usr/local/src/bash/bash-20220112/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 2722 "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 861 "/usr/local/src/bash/bash-20220112/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 2732 "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 867 "/usr/local/src/bash/bash-20220112/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 2742 "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 873 "/usr/local/src/bash/bash-20220112/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 2752 "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 881 "/usr/local/src/bash/bash-20220112/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 2761 "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 886 "/usr/local/src/bash/bash-20220112/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 2770 "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 891 "/usr/local/src/bash/bash-20220112/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 2779 "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 896 "/usr/local/src/bash/bash-20220112/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 2788 "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 901 "/usr/local/src/bash/bash-20220112/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 2797 "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 906 "/usr/local/src/bash/bash-20220112/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 2806 "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 911 "/usr/local/src/bash/bash-20220112/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 2815 "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 916 "/usr/local/src/bash/bash-20220112/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 2824 "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 923 "/usr/local/src/bash/bash-20220112/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 2833 "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 928 "/usr/local/src/bash/bash-20220112/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 2842 "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 933 "/usr/local/src/bash/bash-20220112/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 2851 "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 940 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2836 "y.tab.c" +#line 2857 "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 942 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2842 "y.tab.c" +#line 2863 "y.tab.c" break; - case 101: -#line 932 "/Users/chet/src/bash/src/parse.y" + case 102: /* function_def: FUNCTION WORD function_body */ +#line 944 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2848 "y.tab.c" +#line 2869 "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 946 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); } -#line 2854 "y.tab.c" +#line 2875 "y.tab.c" break; - case 103: -#line 938 "/Users/chet/src/bash/src/parse.y" + case 104: /* function_body: shell_command */ +#line 950 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 2860 "y.tab.c" +#line 2881 "y.tab.c" break; - case 104: -#line 940 "/Users/chet/src/bash/src/parse.y" + case 105: /* function_body: shell_command redirection_list */ +#line 952 "/usr/local/src/bash/bash-20220112/parse.y" { COMMAND *tc; @@ -2889,29 +2910,45 @@ yyreduce: tc->redirects = (yyvsp[0].redirect); (yyval.command) = (yyvsp[-1].command); } -#line 2893 "y.tab.c" +#line 2914 "y.tab.c" break; - case 105: -#line 971 "/Users/chet/src/bash/src/parse.y" + case 106: /* subshell: '(' compound_list ')' */ +#line 983 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_subshell_command ((yyvsp[-1].command)); (yyval.command)->flags |= CMD_WANT_SUBSHELL; } -#line 2902 "y.tab.c" +#line 2923 "y.tab.c" + break; + + case 107: /* comsub: DOLPAREN compound_list ')' */ +#line 990 "/usr/local/src/bash/bash-20220112/parse.y" + { + (yyval.command) = (yyvsp[-1].command); + } +#line 2931 "y.tab.c" + break; + + case 108: /* comsub: DOLPAREN newline_list ')' */ +#line 994 "/usr/local/src/bash/bash-20220112/parse.y" + { + (yyval.command) = (COMMAND *)NULL; + } +#line 2939 "y.tab.c" break; - case 106: -#line 978 "/Users/chet/src/bash/src/parse.y" + case 109: /* coproc: COPROC shell_command */ +#line 1000 "/usr/local/src/bash/bash-20220112/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 2948 "y.tab.c" break; - case 107: -#line 983 "/Users/chet/src/bash/src/parse.y" + case 110: /* coproc: COPROC shell_command redirection_list */ +#line 1005 "/usr/local/src/bash/bash-20220112/parse.y" { COMMAND *tc; @@ -2928,20 +2965,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 2969 "y.tab.c" break; - case 108: -#line 1000 "/Users/chet/src/bash/src/parse.y" + case 111: /* coproc: COPROC WORD shell_command */ +#line 1022 "/usr/local/src/bash/bash-20220112/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 2978 "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 1027 "/usr/local/src/bash/bash-20220112/parse.y" { COMMAND *tc; @@ -2958,257 +2995,259 @@ 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 2999 "y.tab.c" break; - case 110: -#line 1022 "/Users/chet/src/bash/src/parse.y" + case 113: /* coproc: COPROC simple_command */ +#line 1044 "/usr/local/src/bash/bash-20220112/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 3008 "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 1051 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); } -#line 2977 "y.tab.c" +#line 3014 "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 1053 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); } -#line 2983 "y.tab.c" +#line 3020 "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 1055 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); } -#line 2989 "y.tab.c" +#line 3026 "y.tab.c" break; - case 114: -#line 1038 "/Users/chet/src/bash/src/parse.y" + case 117: /* group_command: '{' compound_list '}' */ +#line 1060 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_group_command ((yyvsp[-1].command)); } -#line 2995 "y.tab.c" +#line 3032 "y.tab.c" break; - case 115: -#line 1042 "/Users/chet/src/bash/src/parse.y" + case 118: /* arith_command: ARITH_CMD */ +#line 1064 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_arith_command ((yyvsp[0].word_list)); } -#line 3001 "y.tab.c" +#line 3038 "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 1068 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[-1].command); } -#line 3007 "y.tab.c" +#line 3044 "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 1072 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-2].command), (yyvsp[0].command), (COMMAND *)NULL); } -#line 3013 "y.tab.c" +#line 3050 "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 1074 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[0].command)); } -#line 3019 "y.tab.c" +#line 3056 "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 1076 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (yyvsp[0].command)); } -#line 3025 "y.tab.c" +#line 3062 "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 1081 "/usr/local/src/bash/bash-20220112/parse.y" { (yyvsp[0].pattern)->next = (yyvsp[-1].pattern); (yyval.pattern) = (yyvsp[0].pattern); } -#line 3031 "y.tab.c" +#line 3068 "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 1085 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); } -#line 3037 "y.tab.c" +#line 3074 "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 1087 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); } -#line 3043 "y.tab.c" +#line 3080 "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 1089 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); } -#line 3049 "y.tab.c" +#line 3086 "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 1091 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); } -#line 3055 "y.tab.c" +#line 3092 "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 1095 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3061 "y.tab.c" +#line 3098 "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 1097 "/usr/local/src/bash/bash-20220112/parse.y" { (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3067 "y.tab.c" +#line 3104 "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 1099 "/usr/local/src/bash/bash-20220112/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3073 "y.tab.c" +#line 3110 "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 1101 "/usr/local/src/bash/bash-20220112/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 3116 "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 1103 "/usr/local/src/bash/bash-20220112/parse.y" { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[-1].pattern); } -#line 3085 "y.tab.c" +#line 3122 "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 1105 "/usr/local/src/bash/bash-20220112/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 3128 "y.tab.c" break; - case 132: -#line 1087 "/Users/chet/src/bash/src/parse.y" + case 135: /* pattern: WORD */ +#line 1109 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); } -#line 3097 "y.tab.c" +#line 3134 "y.tab.c" break; - case 133: -#line 1089 "/Users/chet/src/bash/src/parse.y" + case 136: /* pattern: pattern '|' WORD */ +#line 1111 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-2].word_list)); } -#line 3103 "y.tab.c" +#line 3140 "y.tab.c" break; - case 134: -#line 1098 "/Users/chet/src/bash/src/parse.y" + case 137: /* compound_list: newline_list list0 */ +#line 1120 "/usr/local/src/bash/bash-20220112/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 3150 "y.tab.c" break; - case 136: -#line 1107 "/Users/chet/src/bash/src/parse.y" + case 138: /* compound_list: newline_list list1 */ +#line 1126 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3121 "y.tab.c" +#line 3158 "y.tab.c" break; - case 138: -#line 1114 "/Users/chet/src/bash/src/parse.y" + case 140: /* list0: list1 '&' newline_list */ +#line 1133 "/usr/local/src/bash/bash-20220112/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 3169 "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 1144 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); } -#line 3138 "y.tab.c" +#line 3175 "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 1146 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); } -#line 3144 "y.tab.c" +#line 3181 "y.tab.c" break; - case 142: -#line 1129 "/Users/chet/src/bash/src/parse.y" + case 144: /* list1: list1 '&' newline_list list1 */ +#line 1148 "/usr/local/src/bash/bash-20220112/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 3192 "y.tab.c" break; - case 143: -#line 1136 "/Users/chet/src/bash/src/parse.y" + case 145: /* list1: list1 ';' newline_list list1 */ +#line 1155 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); } -#line 3161 "y.tab.c" +#line 3198 "y.tab.c" break; - case 144: -#line 1138 "/Users/chet/src/bash/src/parse.y" + case 146: /* list1: list1 '\n' newline_list list1 */ +#line 1157 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); } -#line 3167 "y.tab.c" +#line 3204 "y.tab.c" break; - case 145: -#line 1140 "/Users/chet/src/bash/src/parse.y" + case 147: /* list1: pipeline_command */ +#line 1159 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3173 "y.tab.c" +#line 3210 "y.tab.c" break; - case 148: -#line 1148 "/Users/chet/src/bash/src/parse.y" + case 150: /* list_terminator: '\n' */ +#line 1167 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = '\n'; } -#line 3179 "y.tab.c" +#line 3216 "y.tab.c" break; - case 149: -#line 1150 "/Users/chet/src/bash/src/parse.y" + case 151: /* list_terminator: ';' */ +#line 1169 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = ';'; } -#line 3185 "y.tab.c" +#line 3222 "y.tab.c" break; - case 150: -#line 1152 "/Users/chet/src/bash/src/parse.y" + case 152: /* list_terminator: yacc_EOF */ +#line 1171 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = yacc_EOF; } -#line 3191 "y.tab.c" +#line 3228 "y.tab.c" break; - case 153: -#line 1166 "/Users/chet/src/bash/src/parse.y" + case 155: /* simple_list: simple_list1 */ +#line 1185 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); if (need_here_doc) gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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 3247 "y.tab.c" break; - case 154: -#line 1179 "/Users/chet/src/bash/src/parse.y" + case 156: /* simple_list: simple_list1 '&' */ +#line 1200 "/usr/local/src/bash/bash-20220112/parse.y" { if ((yyvsp[-1].command)->type == cm_connection) (yyval.command) = connect_async_list ((yyvsp[-1].command), (COMMAND *)NULL, '&'); @@ -3218,95 +3257,99 @@ yyreduce: gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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 3269 "y.tab.c" break; - case 155: -#line 1195 "/Users/chet/src/bash/src/parse.y" + case 157: /* simple_list: simple_list1 ';' */ +#line 1218 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[-1].command); if (need_here_doc) gather_here_documents (); if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token) { +itrace("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 3288 "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 1235 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); } -#line 3251 "y.tab.c" +#line 3294 "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 1237 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); } -#line 3257 "y.tab.c" +#line 3300 "y.tab.c" break; - case 158: -#line 1214 "/Users/chet/src/bash/src/parse.y" + case 160: /* simple_list1: simple_list1 '&' simple_list1 */ +#line 1239 "/usr/local/src/bash/bash-20220112/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 3311 "y.tab.c" break; - case 159: -#line 1221 "/Users/chet/src/bash/src/parse.y" + case 161: /* simple_list1: simple_list1 ';' simple_list1 */ +#line 1246 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), ';'); } -#line 3274 "y.tab.c" +#line 3317 "y.tab.c" break; - case 160: -#line 1224 "/Users/chet/src/bash/src/parse.y" + case 162: /* simple_list1: pipeline_command */ +#line 1249 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3280 "y.tab.c" +#line 3323 "y.tab.c" break; - case 161: -#line 1228 "/Users/chet/src/bash/src/parse.y" + case 163: /* pipeline_command: pipeline */ +#line 1253 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3286 "y.tab.c" +#line 3329 "y.tab.c" break; - case 162: -#line 1230 "/Users/chet/src/bash/src/parse.y" + case 164: /* pipeline_command: BANG pipeline_command */ +#line 1255 "/usr/local/src/bash/bash-20220112/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 3339 "y.tab.c" break; - case 163: -#line 1236 "/Users/chet/src/bash/src/parse.y" + case 165: /* pipeline_command: timespec pipeline_command */ +#line 1261 "/usr/local/src/bash/bash-20220112/parse.y" { if ((yyvsp[0].command)) (yyvsp[0].command)->flags |= (yyvsp[-1].number); (yyval.command) = (yyvsp[0].command); } -#line 3306 "y.tab.c" +#line 3349 "y.tab.c" break; - case 164: -#line 1242 "/Users/chet/src/bash/src/parse.y" + case 166: /* pipeline_command: timespec list_terminator */ +#line 1267 "/usr/local/src/bash/bash-20220112/parse.y" { ELEMENT x; @@ -3326,11 +3369,11 @@ yyreduce: token_to_read = ';'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } -#line 3330 "y.tab.c" +#line 3373 "y.tab.c" break; - case 165: -#line 1262 "/Users/chet/src/bash/src/parse.y" + case 167: /* pipeline_command: BANG list_terminator */ +#line 1287 "/usr/local/src/bash/bash-20220112/parse.y" { ELEMENT x; @@ -3351,17 +3394,17 @@ yyreduce: token_to_read = ';'; parser_state &= ~PST_REDIRLIST; /* make_simple_command sets this */ } -#line 3355 "y.tab.c" +#line 3398 "y.tab.c" break; - case 166: -#line 1285 "/Users/chet/src/bash/src/parse.y" + case 168: /* pipeline: pipeline '|' newline_list pipeline */ +#line 1310 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); } -#line 3361 "y.tab.c" +#line 3404 "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 1312 "/usr/local/src/bash/bash-20220112/parse.y" { /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ COMMAND *tc; @@ -3384,41 +3427,41 @@ yyreduce: (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); } -#line 3388 "y.tab.c" +#line 3431 "y.tab.c" break; - case 168: -#line 1310 "/Users/chet/src/bash/src/parse.y" + case 170: /* pipeline: command */ +#line 1335 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.command) = (yyvsp[0].command); } -#line 3394 "y.tab.c" +#line 3437 "y.tab.c" break; - case 169: -#line 1314 "/Users/chet/src/bash/src/parse.y" + case 171: /* timespec: TIME */ +#line 1339 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = CMD_TIME_PIPELINE; } -#line 3400 "y.tab.c" +#line 3443 "y.tab.c" break; - case 170: -#line 1316 "/Users/chet/src/bash/src/parse.y" + case 172: /* timespec: TIME TIMEOPT */ +#line 1341 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3406 "y.tab.c" +#line 3449 "y.tab.c" break; - case 171: -#line 1318 "/Users/chet/src/bash/src/parse.y" + case 173: /* timespec: TIME TIMEIGN */ +#line 1343 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3412 "y.tab.c" +#line 3455 "y.tab.c" break; - case 172: -#line 1320 "/Users/chet/src/bash/src/parse.y" + case 174: /* timespec: TIME TIMEOPT TIMEIGN */ +#line 1345 "/usr/local/src/bash/bash-20220112/parse.y" { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } -#line 3418 "y.tab.c" +#line 3461 "y.tab.c" break; -#line 3422 "y.tab.c" +#line 3465 "y.tab.c" default: break; } @@ -3500,6 +3543,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 +3604,7 @@ yyerrlab1: `-------------------------------------*/ yyacceptlab: yyresult = 0; - goto yyreturn; + goto yyreturnlab; /*-----------------------------------. @@ -3568,24 +3612,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 +3654,7 @@ yyreturn: return yyresult; } -#line 1322 "/Users/chet/src/bash/src/parse.y" +#line 1347 "/usr/local/src/bash/bash-20220112/parse.y" /* Initial size to allocate for tokens, and the @@ -3908,7 +3950,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; @@ -4117,8 +4159,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 +4182,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 +4208,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 +4226,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 +4251,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 +4293,6 @@ free_string_list () pushed_string_list = (STRING_SAVER *)NULL; } -#endif /* ALIAS || DPAREN_ARITHMETIC */ - void free_pushed_string_input () { @@ -4340,12 +4382,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) @@ -4410,17 +4447,19 @@ read_a_line (remove_quoted_newline) the secondary prompt. This is used to read the lines of a here document. REMOVE_QUOTED_NEWLINE is non-zero if we should remove newlines quoted with backslashes while reading the line. It is - non-zero unless the delimiter of the here document was quoted. */ + non-zero unless the delimiter of the here document was quoted. + If it is zero, we don't perform $'...' and $"..." expansion because + we treat the lines as if they are between double quotes. */ char * read_secondary_line (remove_quoted_newline) int remove_quoted_newline; { - char *ret; + char *ret, *t; 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)) @@ -4435,7 +4474,23 @@ read_secondary_line (remove_quoted_newline) maybe_add_history (ret); } #endif /* HISTORY */ - return ret; + if (ret == 0) + return ret; + if (remove_quoted_newline == 0) + return (savestring (ret)); + + t = ret; + while (t = strchr (t, '$')) + { + if (t[1] == '\'' || t[1] == '"') + break; + else + t++; + } + if (t == 0) + return (savestring (ret)); + t = expand_string_dollar_quote (ret, 1); + return t; } /* **************************************************************** */ @@ -4656,9 +4711,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 +4857,7 @@ shell_getc (remove_quoted_newline) shell_input_line_size = 0; prompt_string_pointer = ¤t_prompt_string; if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); goto restart_read; } @@ -4899,7 +4951,9 @@ next_alias_char: #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 +4962,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 +5034,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 () { @@ -5082,7 +5189,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 +5199,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 +5299,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 +5364,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); @@ -5594,9 +5713,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); } @@ -5811,6 +5928,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) == '|') @@ -5879,7 +5999,7 @@ parse_matched_pair (qc, open, close, lenp, flags) /* Possible reprompting. */ if (ch == '\n' && SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); /* Don't bother counting parens or doing anything else if in a comment or part of a case statement */ @@ -5904,6 +6024,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if (tflags & LEX_PASSNEXT) /* last char was backslash */ { tflags &= ~LEX_PASSNEXT; + /* XXX - PST_NOEXPAND? */ if (qc != '\'' && ch == '\n') /* double-quoted \ disappears. */ { if (retind > 0) @@ -6016,6 +6137,7 @@ parse_matched_pair (qc, open, close, lenp, flags) if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0)) { /* Translate $'...' here. */ + /* PST_NOEXPAND */ ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen); free (nestret); @@ -6038,22 +6160,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); + } + 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 +6296,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 +6347,109 @@ 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; + char *ret, *tcmd; + int retlen; + sh_parser_state_t ps; + 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; - - while (count) - { -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; -#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; - } - } - - /* Possible reprompting. */ - if (ch == '\n' && SHOULD_PROMPT ()) - prompt_again (); - - /* 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; - } - - 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 - - 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 \ disappears. */ - { - if (retind > 0) - retind--; /* swallow previously-added backslash */ - continue; - } - - 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; - } - } + save_parser_state (&ps); - /* 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); - } - } + pushed_string_list = (STRING_SAVER *)NULL; + parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND; - /* 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 - } + shell_eof_token = close; - /* 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; - } + saved_global = global_command; /* might not be necessary */ + global_command = (COMMAND *)NULL; - 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);*/ - } + need_here_doc = 0; + esacs_needed_count = expecting_in_token = 0; - /* Add this character. */ - RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64); - ret[retind++] = ch; + current_token = '\n'; /* XXX */ - /* If we just read the ending character, don't bother continuing. */ - if (count == 0) - break; + token_to_read = DOLPAREN; /* let's trick the parser */ - if MBTEST(ch == '\\') /* backslashes */ - tflags |= LEX_PASSNEXT; + r = yyparse (); - 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 (need_here_doc > 0) + { + internal_debug("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s"); + gather_here_documents (); + } - if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0)) - { - /* Translate $'...' here. */ - ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen); - free (nestret); + parsed_command = global_command; - 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 (EOF_Reached) + /* yyparse() has already called yyerror() */ + return (&matched_pair_error); + else if (r != 0) + { + /* parser_error (start_lineno, _("could not parse command substitution")); */ + jump_to_top_level (DISCARD); + } - 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 (current_token != shell_eof_token) + { +INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, shell_eof_token)); + token_to_read = current_token; + return (&matched_pair_error); + } - CHECK_NESTRET_ERROR (); - APPEND_NESTRET (); + restore_parser_state (&ps); - FREE (nestret); - } - if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0) - tflags |= LEX_WASDOL; - else - tflags &= ~LEX_WASDOL; + tcmd = make_command_string (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 +6459,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,26 +6478,28 @@ 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; - /* 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 */ @@ -6797,14 +6507,8 @@ xparse_dolparen (base, string, indp, flags) /* 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 @@ -6818,14 +6522,14 @@ xparse_dolparen (base, string, indp, flags) 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 +6541,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 +6570,72 @@ 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; + + 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 +6652,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 +6678,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 +6813,7 @@ cond_skip_newlines () while ((cond_token = read_token (READ)) == '\n') { if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); } return (cond_token); } @@ -7326,6 +7099,13 @@ 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 @@ -7462,7 +7242,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 +7260,7 @@ read_token_word (character) return -1; if (peek_char == '\'') { + /* PST_NOEXPAND */ ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen); free (ttok); @@ -7487,18 +7272,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, @@ -7609,7 +7403,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 \ pair) unless we are within single quotes or pass_next_character is @@ -7767,8 +7561,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 +7584,7 @@ reserved_word_acceptable (toksym) case UNTIL: case WHILE: case 0: + case DOLPAREN: return 1; default: #if defined (COPROCESS_SUPPORT) @@ -7957,7 +7754,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; @@ -8494,7 +8292,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 +8455,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 +8531,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; } } @@ -8766,7 +8571,7 @@ parse_string_to_word_list (s, flags, whom) { WORD_LIST *wl; int tok, orig_current_token, orig_line_number, orig_input_terminator; - int orig_line_count; + int orig_line_count, orig_parser_state; int old_echo_input, old_expand_aliases, ea; #if defined (HISTORY) int old_remember_on_history, old_history_expansion_inhibited; @@ -8797,7 +8602,11 @@ 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; + parser_state |= PST_COMPASSIGN|PST_REPARSE; + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + } while ((tok = read_token (READ)) != yacc_EOF) { @@ -8840,7 +8649,7 @@ parse_string_to_word_list (s, flags, whom) shell_input_line_terminator = orig_input_terminator; if (flags & 1) - parser_state &= ~(PST_COMPASSIGN|PST_REPARSE); + parser_state = orig_parser_state; if (wl == &parse_string_error) { @@ -8860,12 +8669,14 @@ parse_compound_assignment (retlenp) { WORD_LIST *wl, *rl; int tok, orig_line_number, orig_token_size, orig_last_token, assignok; + int orig_parser_state; char *saved_token, *ret; saved_token = token; orig_token_size = token_buffer_size; orig_line_number = line_number; orig_last_token = last_read_token; + orig_parser_state = parser_state; last_read_token = WORD; /* WORD to allow reserved words here */ @@ -8875,6 +8686,8 @@ parse_compound_assignment (retlenp) assignok = parser_state&PST_ASSIGNOK; /* XXX */ wl = (WORD_LIST *)NULL; /* ( */ + orig_parser_state = parser_state; + parser_state &= ~PST_NOEXPAND; parser_state |= PST_COMPASSIGN; while ((tok = read_token (READ)) != ')') @@ -8882,7 +8695,7 @@ parse_compound_assignment (retlenp) if (tok == '\n') /* Allow newlines in compound assignments */ { if (SHOULD_PROMPT ()) - prompt_again (); + prompt_again (0); continue; } if (tok != WORD && tok != ASSIGNMENT_WORD) @@ -8904,7 +8717,7 @@ parse_compound_assignment (retlenp) token = saved_token; token_buffer_size = orig_token_size; - parser_state &= ~PST_COMPASSIGN; + parser_state = orig_parser_state; if (wl == &parse_string_error) { @@ -8956,6 +8769,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 +8795,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 +8835,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 +8861,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 +8874,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 41bdea08e..9c1959c58 100644 --- 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 . */ + along with this program. If not, see . */ /* 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 328 "/usr/local/src/bash/bash-20220112/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 */ -- 2.47.2

    ;@;QQu{zT+yY_f2n|=QZw{ZNQm+IpdX>GQu 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 z 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�ng%4(bbc9c<_y0Qf}nG=`2@NNFx% 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%0DtaB<8D^f1u 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

    N%8V^f{Rv@~m9Zp?at~ew4 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%0Dtm{A;6tLt+=;qSOjCSQT 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%0D(fJYsCV8(}Tl#?q5JX0}6AD(h)id?37QtLROm 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