error messages
[bash-3.0 frozen]
+
+ 7/27
+ ----
+doc/Makefile.in
+ - small fixes
+
+[bash-3.0-released]
+
+ 7/28
+ ----
+array.c
+ - in array_insert(), make sure the value to be added is non-NULL before
+ calling savestring() on it
+
+builtins/reserved.def
+ - fix description of `CDPATH'
+
+lib/readline/display.c
+ - when expanding a prompt that spans multiple lines with embedded
+ newlines, set prompt_physical_chars from the portion after the
+ final newline, not the preceding portion. Bug reported by
+ "Ralf S. Engelschall" <rse@engelschall.com>
+
+make_cmd.c
+ - explicitly declare `lineno' in function prologue for make_case_command
+
+builtins/evalfile.c
+ - include `trap.h' for declaration for run_return_trap
+
+bashline.c
+ - fix a `return' without a value in enable_hostname_completion
+
+general.c
+ - include test.h for extern declaration for test_eaccess
+
+externs.h
+ - add declaration for zcatfd
+++ /dev/null
- 4/9/2001
- --------
-[bash-2.05 released]
-
- 4/10
- ----
-redir.c
- - check return value of fclose() in write_here_document() for error
- returns; don't just rely on fwrite() failing
-
-support/bashbug.sh
- - set TMPDIR to /tmp if it's null or unset
- - use $TMPDIR in the TEMP tempfile name template
- - fixed the call to `mktemp', if it exists, to make it more portable
-
-jobs.c
- - if WCONTINUED is not defined, define it to 0 and add a define for
- WIFCONTINUED(wstatus) which expands to 0
- - add WCONTINUED to the flags passed to waitpid(2) in waitchld()
- - don't increment children_exited if waitpid's status is WIFCONTINUED,
- since we don't want to call a SIGCHLD trap handler in this case
- - in waitchld(), we set child->running to 1 if WIFCONTINUED(status)
- is non-zero
- - make sure pretty_print_job doesn't check for the core dump bit if
- the process has been continued; it's only valid if the job is dead
- - in set_job_status_and_cleanup, set the job to JRUNNING if job_state
- is non-zero and the job was previously marked as JSTOPPED
-
-configure.in
- - add -DBROKEN_DIRENT_D_INO to interix LOCAL_CFLAGS
-
-lib/glob/glob.c
- - if BROKEN_DIRENT_D_INO is defined, define REAL_DIR_ENTRY to 1
-
-jobs.c
- - in kill_pid, we only need to block and unblock SIGCHLD if the
- `group' argument is non-zero, since otherwise we just call `kill'
- on the pid argument
-
-version.c
- - update copyright date to 2001
-
-bashline.c
- - prog_complete_return needs to take a `const char *' as its first
- argument
- - history_completion_generator needs to take a `const char *' as
- its first argument, and `text' needs to be a `const char *'
-
- 4/11
- ----
-redir.c
- - fixed a weird typo in redir_special_open, case RF_DEVFD, added
- call to all_digits before call to legal_number
- - fixed do_redirection_internal to call legal_number instead of atol(3)
- when translating r_duplicating_{in,out}put_word, so it handles
- overflow better
- - produce an error message in redirection_error for out-of-range
- file descriptors
- - change allocation strategy in redirection_error so we don't have to
- malloc scratch memory if redirection_expand() fails
-
-jobs.h
- - added defines for `running' member of a struct process
-
-general.c
- - fix legal_number to return 0 when strtol(3) reports overflow or
- underflow
-
-parse.y
- - changed read_token_word to call legal_number instead of atoi(3)
-
-input.c
- - return -1/EBADF from close_buffered_fd if fd is < 0
-
-command.h
- - fixed bogus comment about IS_DESCRIPTOR in description of the
- REDIRECTEE struct
-
-print_cmd.c
- - change cprintf's 'd' modifier code to display negative numbers as
- an out-of-range value. We can do this only because the only use
- of %d is to output file descriptor numbers in redirections
-
-support/mksignames.c
- - need to include config.h to get a possible value for
- UNUSABLE_RT_SIGNALS
-
- 4/16
- ----
-lib/readline/doc/rluser.texinfo
- - corrected a small error in one description of M-DEL
-
- 4/17
- ----
-stringlib.c
- - need to initialize `ind' before calls to RESIZE_MALLOCED_BUFFER
- in strcreplace()
-
-support/bashversion.c
- - new file, prints bash version information
-
-Makefile.in
- - rules for building bashversion and linking it to version.o
-
- 4/24
- ----
-conftypes.h
- - new file with HOSTTYPE, OSTYPE, MACHTYPE, etc. defines from
- variables.h
-
-variables.h, version.c
- - include conftypes.h
-
-patchlevel.h
- - new file, contains define for PATCHLEVEL. Doing away with the old
- scheme of having the information in configure.in
-
-version.c
- - include patchlevel.h
-
-Makefile.in
- - run bashversion -p to find patch level rather than have configure
- substitute in a value
- - pass -S ${top_srcdir} to support/mkversion.sh
-
-support/mkversion.sh
- - don't put PATCHLEVEL define into version.h, but accept and ignore
- a -p option
- - take a new -S srcdir option
- - find the patch level by parsing it out of patchlevel.h
-
-configure.in
- - hard-code BASHVERS assignment instead of reading it from a file
- - remove BASHPATCH; don't substitute it
-
-_distribution,_patchlevel
- - removed
-
- 4/26
- ----
-shell.c
- - call init_noninteractive() in open_shell_script if forced_interactive
- is non-zero (the shell was started with -i) and fd_is_tty is 0
- (the script file is a real file, not something like /dev/stdin),
- since it wasn't done earlier
-
-builtins/printf.def
- - change for POSIX.2 compliance when conversion errors are encountered
- when processing %d, %u, and floating point conversion operators
- (print a warning message, return the value accumulated at the time
- of the error -- which is always 0 -- and exit with a non-zero status)
-
-command.h
- - added CMD_COMMAND_BUILTIN for use by the `command' builtin and the
- code in execute_cmd.c
-
-builtins/command.def
- - add CMD_COMMAND_BUILTIN to the created command's flags
-
- 5/1
- ---
-configure.in
- - add call to AC_C_CONST to test `const' compiler behavior
- - add call to AC_C_INLINE to test `inline' compiler behavior
- - add call to AC_C_STRINGIZE to test cpp #x stringizing operator
-
-config.h.in
- - add `#undef const' for configure to substitute
- - add `#undef inline' for configure to substitute
- - add `#undef HAVE_STRINGIZE' for configure to substitute
-
-include/stdc.h
- - remove code that defines or undefines `const' and `inline'
- - change the __STRING macro to be defined depending on the value
- of HAVE_STRINGIZE
-
-lib/malloc/malloc.c
- - change the __STRING macro to be defined depending on the value
- of HAVE_STRINGIZE
-
-lib/readline/{readline,rlprivate}.h
- - moved rl_get_termcap to readline.h, making it a public function
-
-lib/readline/readline.h
- - new #define, RL_READLINE_VERSION, hex-encoded library version
- number, currently set to 0x0402
- - new public int variable, rl_readline_version
-
-lib/readline/readline.c
- - #define RL_READLINE_VERSION if it is not already defined (which it
- should be in readline.h)
- - initialize rl_readline_version to RL_READLINE_VERSION
-
-lib/readline/doc/rltech.texinfo
- - documented rl_get_termcap
- - documented rl_readline_version
-
-jobs.c
- - job_exit_status should return an int, not a WAIT (undetected
- before because on most POSIX-like systems a WAIT is really an int)
-
-builtins/evalfile.c
- - added FEVAL_REGFILE (file must be a regular file) to accepted
- _evalfile flags
- - fc_execute_file() adds FEVAL_REGFILE to _evalfile flags. This
- means that startup files and files read with `.' no longer need
- to be regular files
-
- 5/2
- ---
-
-lib/termcap/Makefile.in
- - fix target for installed termcap library (normally unused)
-
-lib/tilde/Makefile.in
- - fix install target to install in $(libdir) (normally unused)
-
-Makefile.in
- - don't make $(man3dir) since there's nothing installed there
-
-Makefile.in,doc/Makefile.in
- - change `man1ext' to `.1', `man3ext' to `.3'
- - change appropriate install targets to use new values of man[13]ext
- - use `test ...' instead of `[...]'
- - add support for DESTDIR root installation prefix, for package
- building (installdirs, install, install-strip, uninstall targets)
-
-builtins/common.c
- - new function int get_exitstat(WORD_LIST *list) returns an eight-bit
- exit status value for use in return, exit, logout builtins
-
-builtins/common.h
- - extern declaration for get_exitstat()
-
-builtins/{exit,return}.def
- - call get_exitstat where appropriate
-
-builtins/printf.def
- - add support for "'" flag character as posix 1003.2-200x d6 says
- - fix core dump when user-supplied field width or precision is 0
- - fix to printstr() to handle zero-length precision with `%b' format
- specifier (printf '%.0b-%.0s\n' foo bar)
- - fix to printstr() to treat a negative field width as a positive
- field width with left-justification
- - fix to mklong to avoid static buffers, which can always be overrun
- by someone sufficiently motivated
-
-bashline.c
- - change var in add_host_name to type `size_t' for passing to xrealloc
-
- 5/3
- ---
-execute_cmd.c
- - change restore_signal_mask to accept a sigset_t *, since a sigset_t
- may not fit into a pointer, change call
-
-unwind_prot.c
- - use a union UWP in restore_variable when restoring a variable whose
- size is the same as sizeof(int), the reverse of the method used to
- store it in unwind_protect_int
-
-builtins/printf.def
- - use a #define LENMODS containing the length modifiers instead of
- testing against each possible modifier character, save any mod
- character found
- - add support for ISO C99 length specifiers `j', `t', and `z'
- - if `L' modifier is supplied with a floating point conversion char,
- pass a `long double' to printf if HAVE_LONG_DOUBLE is defined
-
-configure.in,config.h.in
- - call AC_C_LONG_DOUBLE to check for `long double'; define
- HAVE_LONG_DOUBLE if supported
-
-bashline.c
- - fix an inadvertantly-unclosed comment in attempt_shell_completion
- - make set_saved_history return a value
- - make dynamic_complete_history return a useful value
-
-{make_cmd,execute_cmd,shell,subst,trap,variables,input,unwind_prot,test,
-pcomplete}.c
- - removed some declared-but-unused variables
-
-builtins/{cd,enable,fc,set,setattr,type,umask,printf,complete}.def
- - removed some declared-but-unused variables
-
-lib/sh/{zread,netopen}.c
- - removed some declared-but-unused variables
-
-execute_cmd.c
- - in execute_arith_command, use a long variable to hold the result
- of evalexp(), since that's what it returns
-
-builtins/evalstring.c
- - make cat_file return -1 on a read or write error
-
-lib/sh/stringlib.c
- - make merge_stringlists() return the right value
-
- 5/7
- ---
-pcomplete.c
- - remove typo that caused empty declaration (;;)
-
-parse.y
- - fix yyerror() to accept a single string argument; fix callers
-
-trap.c
- - cast pointer to long instead of int when printing message with
- internal_warning() in run_pending_traps()
-
-subst.c
- - fix process_substitute to handle stdin being closed
-
-test.c
- - change `while' to `if' in and() and or(), since the loop isn't
- actually performed -- there's an unconditional `return' in the
- loop body
- - check for integer overflow of arguments to `-t'
-
-lib/sh/netopen.c
- - change _getserv() to reject negative port/service numbers
-
-expr.c
- - fix strlong() to not convert the base specification from long to
- int before checking for overflow, since truncation on machines
- where sizeof(int) != sizeof(long) may mask errors
-
-builtins/{jobs,kill,wait}.def
- - use legal_number instead of atoi when converting strings to pid_t;
- check for numeric overflow
-
-input.c
- - fix for cygwin in b_fill_buffer -- off-by-one error when checking
- buffer for \r\n termination
-
-general.h
- - new #define INT_STRLEN_BOUND(t), computes max length of string
- representing integer value of type T, possibly including a sign
- character
- - include <limits.h> if it's present
-
-{execute_cmd,findcmd,test}.c
- - don't include <limits.h>, since general.h does it now
-
-{execute_cmd,lib/sh/itos,pcomplete,print_cmd,subst,variables}.c
- - use INT_STRLEN_BOUND instead of static array sizes when converting
- various strings to integer values
-
-shell.h
- - struct fd_bitmap now uses an `int' size, since it's bounded by
- the number of file descriptors, which must fit into an `int'
-
-execute_cmd.c
- - FD_BITMAP_DEFAULT_SIZE is now 32, not 32L
- - new_fd_bitmap takes an `int' size parameter, not a `long'
-
-execute_cmd.h
- - change prototype for new_fd_bitmap()
-
-test.c
- - fix test_stat to check for overflow when parsing the integer file
- descriptor number; return ENOENT instead of EBADF for files that
- are not open
-
-hashlib.c
- - don't discard the upper 32 bits of the random value, if present
-
-lib/readline/shell.c
- - use the same INT_STRLEN_BOUND mechanism to decide how much space to
- allocated in sh_set_lines_and_columns
-
- 5/8
- ---
-aclocal.m4
- - add check for libtinfo (termcap-specific portion of ncurses-5.2) to
- BASH_CHECK_LIB_TERMCAP
- - new macro, RL_LIB_READLINE_VERSION, checks version of installed
- readline library and (optionally) writes version #defines to
- config.h. Bash doesn't use the version defines
-
-configure.in
- - call RL_LIB_READLINE_VERSION instead of support/rlvers.sh
-
-execute_cmd.c
- - fix execute_shell_script and the WHITECHAR and STRINGCHAR macros
- to check array bounds before indexing into the sample string
-
-unwind_prot.[ch]
- - import new versions submitted by Paul Eggert <eggert@twinsun.com>
- with a couple of changes for backwards compatibility, so the rest
- of the source doesn't need to be changed yet
-
-jobs.c
- - use unwind_protect_var on last_made_pid in run_sigchld_trap
-
-builtins/bind.def
- - use unwind_protect_var on rl_outstream
-
-general.c
- - rework print_rlimtype to use INT_STRLEN_BOUND and handle the
- most negative number correctly
-
-expr.c
- - `tokval' should have been a `long', since all arithmetic is done
- as longs
-
-builtins/history.def
- - consolidate tests for valid history position in one block to
- avoid duplicate code and strings
-
-builtins/ulimit.def
- - fix check for overflow when setting limit to work when int is 32
- bits and RLIMTYPE is 64
-
-lib/sh/tmpfile.c
- - don't truncate the result of time(3) to int; just use time_t,
- since it's being assigned to an `unsigned long'
-
-mailcheck.c
- - use legal_number instead of atoi in time_to_check_mail() to catch
- more numeric errors; consolidate error checking in one block
- - last_time_mail_checked should be a time_t
-
- 5/9
- ---
-builtins/set.def
- - recognize `set [-+]o nolog' if HISTORY is defined
-
-bashline.c
- - new variable `dont_save_function_defs', set by `set -o nolog';
- currently ignored
-
-command.h
- - the `dest' member of a REDIRECTEE is now an `int'
-
-parse.y,redir.c
- - changed uses of `redir.test' (where redir is a REDIRECTEE) since
- it's now an int
-
-lib/readline/rlstdc.h
- - don't mess around with `const', rely on configure to supply a
- proper definition if the compiler doesn't support it
-
-lib/tilde/tilde.h
- - include <config.h> if HAVE_CONFIG_H is defined
- - don't mess around with `const', rely on configure
-
-builtins/shopt.def
- - new read-only `shopt' option, login_shell, non-zero if shell is a
- login shell (as decided by shell.c)
- - new function set_login_shell(), sets shopt private value of
- login_shell
-
-builtins/common.h
- - new extern declaration for set_login_shell
-
-shell.c
- - call set_login_shell after setting value of login_shell (in
- main() and set_shell_name())
-
-parse.y
- - added new `\A' prompt string escape sequence: time in 24-hour
- HH:MM format
-
-configure.in, config.h.in
- - check for <grp.h>, define HAVE_GRP_H if found
-
-builtins/complete.def
- - add new `-A group/-g' option to complete group names
-
-pcomplete.h
- - new define for CA_GROUP, used with group name completion
-
-pcomplete.c
- - add code to support CA_GROUP group name completion
-
-bashline.c
- - new function, bash_groupname_completion_function(), supports
- programmable completion of group names
-
-bashline.h
- - extern declaration for bash_groupname_completion_function
-
-lib/readline/bind.c
- - new inputrc variable, `match-hidden-files', controls completion
- matching files beginning with a `.' (on Unix)
-
-lib/readline/complete.c
- - new variable, _rl_match_hidden_files, mirrors `match-hidden-files'
- inputrc variable
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_match_hidden_files
-
-builtins/hash.def
- - new `-t' option to list hash values for each filename argument
-
-builtins/read.def
- - alarm(3) takes an `unsigned int' argument, not int
- - check for arithmetic overflow with -t and -n options
-
-input.c
- - check for read error before doing \r\n translation on cygwin in
- b_fill_buffer
- - reset bp->b_used to 0 instead of leaving it at -1 on read error
- in b_fill_buffer
-
-builtins/shopt.def
- - new functions, shopt_setopt(name, mode) and
- shopt_listopt(name, mode) to give the rest of the shell an easy
- interface
-
-builtins/common.h
- - extern declarations for shopt_setopt and shopt_listopt
-
-shell.c
- - new invocation options -O and +O, to list or set/unset shopt
- options like +o/-o sets and unsets `set -o' options
-
-doc/{bash.1,bashref.texi}
- - document `set -o nolog'
- - document `login_shell' shopt option
- - document new `\A' prompt string escape sequence
- - document new `-t' option to `hash'
- - document new `[+-]O' invocation option
-
-doc/bashref.texi
- - add text to `Invoking Bash' section defining a login shell; text
- taken from man page
-
-doc/bash.1, lib/readline/doc/rluser.texinfo
- - documented new complete/compgen `-A group/-g' option
-
-lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
- - documented new `match-hidden-files' inputrc variable
-
- 5/10
- ----
-configure.in
- - fix AC_CHECK_PROG(ar, ...)
- - add AC_CHECK_TYPE for ssize_t
-
-config.h.in
- - new #undef for ssize_t
-
-lib/sh/zread.c
- - int -> ssize_t fixes to mirror modern declarations of read and write
- - the `off' variable in zsyncfd should be an off_t since it computes
- a file offset
- - the local buffer `lbuf' is now char, since it's not nice to pass
- unsigned char * to read(2), and the values from it are assigned to
- a char anyway
- - lind and lused are now size_t, since they index into a buffer
- - set lused to 0 on read error
-
-lib/sh/zwrite.c
- - change second argument to type `char *', since ISO C says you have
- to pass a `char *' to `write'
-
-externs.h
- - fix extern declarations of zread, zread1, zreadc, and zwrite
- - prototype extern declaration of qsort_string_compare
- - add extern declaration for history_delimiting_chars() from parse.y
-
-input.h
- - b_used and b_inputp members ofr struct BSTREAM are now size_t
-
-builtins/evalstring.c
- - the number of chars read with zread in cat_file should be assigned
- to a variable of type ssize_t
-
-input.c
- - the number of chars read with zread in b_fill_buffer should be
- assigned to a variable of type ssize_t
- - `localbuf' is now type char[], since POSIX says you shouldn't pass
- unsigned char * to read(2)
- - in getc_with_restart(), use a variable of type unsigned char to
- get a value from the local buffer and return it
- - in ungetc_with_restart, explicitly return the character arg passed
- to avoid relying on localbuf being unsigned char
-
-subst.c
- - the number of chars read with zread in read_comsub should be
- assigned to a variable of type ssize_t
-
-mksyntax.c
- - instead of casting to unsigned char * in addcstr, use a variable
- of type unsigned char and let the compiler do the work
-
-parse.y
- - instead of casting to unsigned char * in yy_readline_get, use a
- variable of type unsigned char and let the compiler do the work
- - ditto for yy_string_get and shell_getc (cast to unsigned char)
-
-subst.c
- - instead of casting to unsigned char when assigning to ifscmap in
- expand_word_internal, use a variable of type unsigned char and
- let the compiler do the work
-
-lib/sh/strtrans.c
- - instead of casting to unsigned char in ansic_quote, use a variable
- of type unsigned char and let the compiler do the work
-
-builtins/evalstring.c
- - remove extern declarations for zwrite and run_trap_cleanup; they're
- in externs.h
- - prototype cat_file forward declaration
-
-Makefile.in
- - remove -I$(includedir) from INCLUDES and SUBDIR_INCLUDES
-
-aclocal.m4
- - change RL_LIB_READLINE_VERSION to set RL_PREFIX, RL_LIBDIR,
- and RL_INCLUDEDIR to what it used to test the installed readline
- library version for use by the caller
- - change RL_LIB_READLINE_VERSION to not compute ac_cv_rl_prefix if
- the caller has already assigned it a value
- - rename _rl_prefix -> ac_cv_rl_prefix, _rl_libdir -> ac_cv_rl_libdir,
- _rl_includedir -> ac_cv_rl_includedir
-
-configure.in
- - change testing of whether to use the value of
- $opt_with_installed_readline to be != no, to allow the user to
- specify a prefix where the installed readline library may be found
- - if --with-installed-readline=PREFIX is supplied, set ac_cv_rl_prefix
- to PREFIX before calling RL_LIB_READLINE_VERSION
- - if --with-installed-readline[=PREFIX] is supplied, don't set
- RL_LIBDIR and RL_INCLUDEDIR; let RL_LIB_READLINE_VERSION take care
- of it, set RL_INCLUDE=-I${RL_INCLUDEDIR}
- - if --with-installed-readline[=PREFIX] is supplied, and we're
- linking with the history library, assign $RL_LIBDIR to HIST_LIBDIR
- so we use the same version of the installed readline and history
- libraries
-
-Makefile.in, builtins/Makefile.in
- - have configure substitute RL_INCLUDEDIR, set RL_INCLUDEDIR variable
-
-doc/bashref.texi
- - updated description of --with-installed-readline configure option
-
-general.c
- - moved QSFUNC typedef here from builtins/common.c
-
-{alias,bashline,variables,lib/sh/stringvec}.c
- - cast fourth argument to qsort to (QSFUNC *)
-
-alias.c
- - prototype forward declaration of qsort_alias_compare
-
-bashhist.c
- - include <glob/glob.h> for extern declaration of glob_pattern_p
- - remove extern declaration of history_delimiting_chars; it's now
- in externs.h
- - prototype forward declarations of histignore_item_func,
- maybe_add_history, and bash_add_history
-
-bracecomp.c
- - remove extern declaration for sh_backslash_quote; it's in externs.h
-
-braces.c
- - remove extern declaration for extract_command_subst; it's in subst.h
- - prototype forward declarations for expand_amble, array_concat, and
- brace_gobbler
-
-error.c
- - prototype extern declaration of give_terminal_to, fix bad call
-
-{execute_cmd,expr,findcmd,jobs,mailcheck,nojobs,pcomplete,print_cmd,redir,
-shell}.c
- - prototype all static forward function declarations
-
-pcomplete.c
- - changed some function parameters to `const char *' to avoid discarding
- const qualifier
-
-make_cmd.c
- - make_bare_word, make_word_flags, and make_word now take a
- `const char *' string argument
-
-make_cmd.h
- - changed extern declarations for make_bare_word and make_word
-
-print_cmd.c
- - cprintf now takes a `const char *' as its first argument, like
- xprintf and printf
- - the conditional define for xprintf should have been HAVE_VPRINTF,
- not HAVE_VFPRINTF
-
-shell.c
- - in isnetconn(), the return value of sizeof() is size_t
-
-aclocal.m4
- - add inclusion of stddef.h if STDC_HEADERS is defined to 1 in
- BASH_CHECK_TYPE
-
-configure.in
- - add a call to BASH_CHECK_TYPE for socklen_t (type of third argument
- to getpeername(2))
-
- 5/11
- ----
-lib/readline/bind.c
- - make `useq' a char array to pass to rl_macro_bind in
- rl_parse_and_bind
-
-lib/readline/{{bind,isearch}.c,rlprivate.h}
- - _rl_isearch_terminators is now a char *, not unsigned char *
-
-{subst,variables,lib/sh/tmpfile}.c
- - dollar_dollar_pid is now a `pid_t' instead of `int'
-
-variables.c
- - sbrand() now takes an `unsigned long' to set the seed value
- - changed last_random_value to type int, since it's always between
- 0 and 32767
- - use strtoul to convert the value in assign_random instead of atoi
- - take out casts in any arguments to sbrand()
- - take out cast to int in call to inttostr in set_ppid()
-
-subst.c
- - don't cast last_asynchronous_pid when passing to itos()
-
-{sig,subst}.c
- - prototype all static forward function declarations
-
- 5/14
- ----
-{test,trap,variables}.c
- - prototype all static forward function declarations
-
-variables.c
- - free_variable_hash_data() now takes a PTR_T, a `generic pointer'
-
-builtins/{alias,bind,break,cd,complete,declare,enable,exit,fc,fg_bg,help,
-history,jobs,pushd,read,set,trap,umask,
- - prototype all static forward function declarations
-
-builtins/read.def
- - reset_eol_delim now takes a `char *' arg, since that's what the
- unwind_protect functions pass it, and it ignores its arguments
- anyway
-
-lib/readline/{histsearch,input,kill,rltty,search,vi_mode}.c
- - prototype all static forward function declarations
-
-lib/tilde/tilde.c
- - prototype all static forward function declarations
- - tilde_find_prefix, tilde_find_suffix, isolate_tilde_prefix, and
- glue_prefix_and_suffix now take `const char *' arguments where
- appropriate
-
-configure.in,config.h.in
- - check for vsnprintf, define HAVE_VSNPRINTF if found
-
-lib/readline/display.c
- - use vsnprintf() in rl_message if it's available; if we don't, at
- least set the last character in msg_buf to 0 to avoid overrun --
- we really can't do anything about overflow at this point. if it's
- available, this fixes buffer overflow problems in rl_message
-
- 5/15
- ----
-lib/readline/histexpand.c
- - in get_history_word_specifier, allow any character to terminate
- a `:first-' modifier, not just `:' and null. This is what csh
- appears to do. This allows things like `!:0- xyzzy' to replace the
- last argument with xyzzy
-
- 5/18
- ----
-configure.in, config.h.in
- - check for <stdint.h>, define HAVE_STDINT_H if found
- - check for intmax_t in <stdint.h>, define intmax_t as long if not
- found
-
- 5/21
- ----
-builtins/kill.def
- - change to use strerror() for error message when kill(2) fails
-
-aclocal.m4
- - new macro, BASH_C_LONG_LONG, check for `long long'
-
-configure.in, config.h.in
- - call BASH_C_LONG_LONG, define HAVE_LONG_LONG if found
-
-lib/sh/snprintf.c
- - new file, with implementations of snprintf, vsnprintf, asprintf,
- and vasprintf, derived from inetutils version
-
-Makefile.in, lib/sh/Makefile.in
- - add snprintf.c/snprintf.o
-
-configure.in, config.h.in
- - add checks for snprintf, asprintf, vasprintf, with appropriate
- cpp defines
-
-lib/readline/{rldefs,xmalloc}.h, lib/readline/xmalloc.c
- - xmalloc and xrealloc now take `size_t' arguments, like their bash
- counterparts
-
-externs.h,lib/sh/itos.c
- - inttostr and itos now take `long' arguments
- - inttostr takes a `size_t' argument for the buffer size
-
-{expr,lib/malloc/malloc,variables,general}.c
- - fixed calls to itos() by removing casts, etc.
-
-subst.[ch]
- - get_dollar_var_value now takes a long, not an int
- - sub_append_number now takes a long, not an int
-
-subst.c
- - in parameter_brace_expand_word, use a long and legal_number to
- translate ${N}, to avoid overflow
- - in parameter_brace_expand_length, use a long and legal_number to
- translate ${#N}, to avoid overflow
- - in do_array_element_assignment, array_expand_index,
- array_value_internal, use arrayind_t instead of int
- - let verify_substring_values take long * arguments for the return
- value of evalexp()
- - pass long * arguments to verify_substring_values in
- parameter_brace_substring
- - parameter_brace_expand_length now returns `long'
- - parameter_brace_expand now uses a long variable for the return
- value of parameter_brace_expand_length
- - param_expand now uses a long variable for the return value from
- evalexp
- - array_length reference now returns an `arrayind_t', since it can
- return the num_elements member of an array, which is of type
- arrayind_t
-
-subst.h
- - array_expand_index now returns an `arrayind_t'
-
-array.[ch]
- - array_subrange now takes arrayind_t arguments, not `int'
- - dup_array_subrange now uses arrayind_t local variable to do
- array indexing
- - use long to print array indices in print_element
-
-variables.c
- - null_array_assign, assign_dirstack, bind_array_variable
- now take arrayind_t arguments as array indices
- - assign_array_var_from_word_list, assign_array_var_from_string,
- unbind_array_element now use arrayind_t local variables for
- array indexing
-
-variables.h
- - change extern declaration of bind_array_variable
-
-builtins/common.[ch]
- - get_numeric_arg now returns a `long', since it usually returns
- the value of legal_number()
-
-builtins/{shift,break}.def
- - use long variables for the return value of get_numeric_arg
-
-builtins/history.def
- - convert string argument to int only if it's in range
-
-builtins/pushd.def
- - set_dirstack_element and get_dirstack_element now take `long'
- index arguments
- - get_dirstack_index now takes a `long' index argument, since it's
- passed the converted value from legal_number
-
-lib/sh/timeval.c
- - in print_timeval, don't assume that the number of minutes fits into
- an int, since it's just seconds/60.
-
-lib/sh/clock.c
- - ditto for print_clock_t
-
- 5/22
- ----
-shell.c
- - since the -O option settings may possibly be overridden by the
- normal shell initialization or posix initialization, save the
- invocation options on an alist (with add_shopt_to_alist) and
- process them after basic initialization (with run_shopt_alist)
-
- 5/23
- ----
-trap.h
- - new define, BASH_NSIG, all system signals plus special bash traps
-
-trap.c, builtins/trap.def
- - use BASH_NSIG for array bounds and loops where appropriate
-
-trap.c
- - change decode_signal to disallow numeric signal numbers above
- NSIG -- this means you can only reference special traps like
- DEBUG by name
- - new SPECIAL_TRAP(s) macro to test whether s is one of the special
- bash traps (currently DEBUG and EXIT)
- - change reset_or_restore_signal_handlers so command substitution
- doesn't inherit the debug trap (like ksh93), and child processes
- don't have to rely on initialize_traps being run to get rid of
- any debug trap
-
-support/mksignames.c
- - add extra "ERR" signal name, value NSIG+1, allocate space for it
- and write it out in signal_names[]
-
-trap.h
- - new define: ERROR_TRAP == NSIG+1, change BASH_NSIG to NSIG+2
- - extern declarations for set_error_trap, run_error_trap
- - new define: TRAP_STRING(s), expands to trap_list[s] if signal S
- is trapped and not ignored, NULL otherwise
-
-trap.c
- - add ERROR_TRAP to SPECIAL_TRAPS define
- - initialize ERROR_TRAP stuff in initialize_traps
- - new function: set_error_trap(command), sets the ERR trap string
- - new function: run_error_trap(command), runs the ERR trap string
- - set trap string for ERROR_TRAP to NULL in free_trap_strings
- - change reset_or_restore_signal_handlers so child processes don't
- inherit the ERR trap
- - add case to call run_error_trap in maybe_call_trap_handler
-
-execute_cmd.c
- - in execute_command_internal, keep track of ERR trap and call it if
- necessary
- - use TRAP_STRING to get the value of debug and error traps
- - in execute_function, arrange things so the ERR trap is not inherited
- by shell functions, and is saved and restored like the DEBUG trap
-
-doc/{bash.1,bashref.texi}
- - documented new ERR trap
-
-tests/{trap.{tests,right},trap2.sub,trap2a.sub}
- - added ERR trap tests
-
-subst.c
- - on machines without /dev/fd, change the named pipe fifo list to a
- list of structs containing pathname and proc information
- - change unlink_fifo_list to kill the proc in the fifo list with
- signal 0 and not remove the fifo if the proc is still alive. This
- should fix the problem on those backward systems without /dev/fd
- where fifos were removed when a job using process substitution was
- suspended
-
- 5/24
- ----
-examples/loadables/getconf.h
- - new file, with basic defines needed to make getconf work minimally
- on POSIX systems without the necessary definitions
-
-examples/loadables/getconf.c
- - replacement functions for confstr, sysconf, pathconf for systems
- that lack them, providing a minimal posix interface
- - heavily augmented getconf, now supports all POSIX.1-200x,
- POSIX.2-200x, Solaris 7, AIX 4.2 getconf variables
-
- 5/29
- ----
-builtins/setattr.def
- - make `readonly', `export', and `declare' print `invisible' variables
- as just a command and variable name, without a value, when listing
- all variables (as POSIX.2-200x d6 requires)
-
- 5/30
- ----
-
-configure.in
- - upgraded to autoconf-2.50 on main development machine, so require
- autoconf-2.50 in preparation for using some if its new features
- - call AC_C_PROTOTYPES
- - remove call to AC_EXEEXT, which now does the wrong thing
- - changed AC_INIT to new flavor
- - added call to AC_CONFIG_SRCDIR
- - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS
- - AC_RETSIGTYPE -> AC_TYPE_SIGNAL
-
-configure.in, aclocal.m4, config.h.in
- - removed call to BASH_LARGE_FILE_SUPPORT, use AC_SYS_LARGEFILE
- standard support, with new macros _FILE_OFFSET_BITS and
- _LARGE_FILES
- - removed definition of BASH_LARGE_FILE_SUPPORT
-
-doc/bashref.texi
- - document new `--enable-largefile' configure option
-
-lib/readline/readline.c
- - change rl_set_prompt to call rl_expand_prompt unconditionally, so
- local_prompt and local_prompt_prefix get set correctly
-
- 6/6
- ---
-lib/readline/complete.c
- - don't append `/' or ` ' to a match when completing a symlink that
- resolves to a directory, unless the match doesn't add anything
- to the word. This means that a tab will complete the word up to
- the full name, but not add anything, and a subsequent tab will add
- a slash. Change to append_to_match; callers changed
-
-hashlib.c
- - new function, hash_table_nentries (table), returns the number of
- items in TABLE
-
-hashlib.h
- - extern declaration for hash_table_nentries
-
-configure.in
- - configure without bash malloc on openbsd; they claim it needs
- eight-bit alignment (which the bash malloc provides, but...)
-
- 7/2
- ---
-stringlib.c
- - only call RESIZE_MALLOCED_BUFFER from strsub() if the replacement
- string length is > 0, avoid possible hangs if replacement is null
-
-subst.c
- - don't include input.h; no longer needed
-
-configure.in
- - remove calls to AC_SYS_RESTARTABLE_SYSCALLS and
- BASH_SYS_RESTARTABLE_SYSCALLS; the results are no longer used
-
-config.h.in
- - remove define for HAVE_RESTARTABLE_SYSCALLS
-
-aclocal.m4
- - removed definition of BASH_SYS_RESTARTABLE_SYSCALLS; no longer used
-
-execute_cmd.c
- - changed select command so `return' no longer terminates the select
- command, so it can be used to return from an enclosing function.
- This is as ksh (88 and 93) does it
-
-lib/readline/vi_mode.c
- - fix trivial typo in declaration of vi_motion; `t' appears twice;
- the second instance should be `T'
-
- 7/3
- ---
-configure.in
- - don't add -static to LDFLAGS on Solaris 2.x. This means that the
- auxiliary programs will be built as dynamic executables, but that
- should do no harm
-
- 7/5
- ---
-lib/glob/fnmatch.c
- - fix the code that processes **(pattern) to short-circuit if the
- pattern is ill-formed or lacks a trailing `)' -- this fixes the
- segfault on **(/*)
-
-Makefile.in, builtins/Makefile.in
- - split CCFLAGS into CCFLAGS_FOR_BUILD and CFLAGS, to aid in
- cross-compilation
- - build programs that use $(CC_FOR_BUILD) using $(CCFLAGS_FOR_BUILD)
-
-configure.in, config.h.in
- - check for getaddrinfo(3), define HAVE_GETADDRINFO if found
-
-lib/sh/netopen.c
- - implemented a version of _netopen (_netopen6) that uses
- getaddrinfo(3) if available, use if HAVE_GETADDRINFO is defined.
- old _netopen is _netopen4; _netopen now calls either _netopen6
- or _netopen4 as appropriate
-
- 7/9
- ---
-builtins/exit.def
- - don't source ~/.bash_logout if subshell_environment is non-zero
-
-execute_command.c
- - in execute_until_or_while, handle the case where `breaking' is
- set in the loop test (e.g., by the job control code when a job
- is stopped with SIGTSTP), but the return value from the test is
- something that would cause the loop to break. Need to decrement
- `breaking' in this case
-
- 7/10
- ----
-execute_cmd.c
- - in execute_in_subshell, make sure a command of type cm_subshell
- inherits its `enclosing' command's CMD_IGNORE_RETURN flag
-
-variables.c
- - in maybe_make_export_env, don't allow restricted shells to put
- exported functions in the export environment
-
- 7/11
- ----
-lib/glob/strmatch.h
- - renamed old fnmatch.h
- - changed guard #ifdef to _STRMATCH_H
- - include system <fnmatch.h> if HAVE_LIBC_FNM_EXTMATCH is defined
-
-lib/glob/strmatch.c
- - renamed old fnmatch.c
- - include "strmatch.h"
- - if HAVE_LIBC_FNM_EXTMATCH is defined, define a dummy version of
- strmatch() that just calls fnmatch(3)
-
-lib/glob/glob.c
- - include "strmatch.h"
- - fnmatch -> strmatch
-
-Makefile.in, lib/glob/Makefile.in
- - fnmatch -> strmatch
-
-{bashhist,execute_cmd,pathexp,pcomplete,shell,stringlib,subst,test}.c,
-pathexp.h,builtins/help.def
- - include <glob/strmatch.h>
- - fnmatch -> strmatch
-
-execute_cmd.c
- - broke the code that parses the interpreter name from a #! line
- out from execute_shell_script to a new function, getinterp()
- - call getinterp from execute_shell_script
- - use return value from getinterp in error message about bad
- #! interpreter in shell_execve
-
- 7/12
- ----
-lib/readline/isearch.c
- - the last isearch string is now remembered in a new static variable,
- last_isearch_string
- - if ^R^R is typed, readline now searches for the remembered isearch
- string, if one exists
-
- 7/24
- ----
-pcomplete.h
- - extern declaration for completions_to_stringlist()
-
- 7/25
- ----
-builtins/complete.def
- - make compgen handle -o default option
- - make compgen return success only if sl->list_len is non-zero,
- indicating that there are items on the list
-
- 7/31
- ----
-execute_cmd.c
- - in execute_connection, force stdin to /dev/null for asynchronous
- commands if job control is not active, not just if the shell is
- running a shell script (since you can run `set -m' in a script)
-
-lib/readline/rltty.c
- - make sure _rl_tty_restore_signals resets `tty_sigs_disabled' on
- successful restoration of the terminal modes
- - make sure _rl_tty_disable_signals turns off IXON so that ^S and
- ^Q can be read by rl_quoted_insert
-
- 8/1
- ---
-aclocal.m4
- - new check for FNM_EXTMATCH being defined in <fnmatch.h>, as Ullrich
- Drepper intends to do for new versions of GNU libc
-
-config.h.in
- - new definition for HAVE_LIBC_FNM_EXTMATCH
-
-configure.in
- - check for fnmatch, but don't define anything in config.h
- - call BASH_FUNC_FNMATCH_EXTMATCH to check for FNM_EXTMATCH
-
- 8/2
- ---
-alias.h
- - remove bogus extern declaration for xmalloc()
- - include "stdc.h"
- - add prototype declarations for all extern function declarations
-
-xmalloc.c,lib/readline/xmalloc.c
- - fix xmalloc to return a PTR_T
- - fix xrealloc to return a PTR_T and take a PTR_T as first argument
-
-include/ansi_stdlib.h
- - extern declarations for malloc and realloc have them return PTR_T
-
-xmalloc.h
- - new file, with extern declarations for functions in xmalloc.c
-
-general.h
- - removed extern declarations for functions in xmalloc.c
- - include xmalloc.h
-
-Makefile.in,builtins/Makefile.in
- - update dependencies to include xmalloc.h
-
-parse.y,{alias,array,bashline,bracecomp,execute_cmd,findcmd,flags,general,
-hashcmd,locale,mailcheck,make_cmd,pathexp,pcomplete,print_cmd,stringlib,
-subst,unwind_prot,variables}.c
-builtins/{common,evalfile}.c
-builtins/{cd,command,enable,exec,printf,read,set}.def
-lib/sh/{makepath,netopen,pathphys,setlinebuf,shquote,snprintf,stringlist,
-strtrans,tmpfile}.c
-lib/readline/{util,terminal,shell,readline,macro,kill,isearch,input,
-histfile,histexpand,display,complete,bind}.c
- - make sure all calls to xmalloc are cast to the right return value
-
-siglist.c
- - include xmalloc.h
-
-parse.y,{alias,bashline,bracecomp,expr,make_cmd,nojobs,print_cmd,subst}.c
-builtins/{fc,printf,read}.def
-lib/sh/snprintf.c, lib/tilde/tilde.c
-lib/readline/{bind,display,histexpand,isearch,macro,util,vi_mode}.c
- - make sure all calls to xrealloc are cast to the right return value
-
-lib/sh/{netopen,setlinebuf,shquote,snprintf}.c, lib/tilde/tilde.c
- - include xmalloc.h, remove extern declaration of xmalloc
-
-lib/readline/xmalloc.h
- - xmalloc and xrealloc should return PTR_T
-
-lib/readline/rldefs.h
- - don't include an extern declaration for xmalloc
-
- 8/7
- ---
-support/shobj-conf
- - fixed up commented-out stanzas for HP's unbundled C compiler on
- HP/UX
-
-support/bashbug.sh
- - force the subject to be changed from the default
-
-lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
- - document that transpose-words swaps the last two words on the line
- if point is at the end of the line
-
- 8/9
- ---
-stringlib.c
- - fix possible infinite recursion problem with null pattern in
- strsub()
-
-hashlib.c
- - new function copy_hash_table to copy a hash table using a caller-
- supplied function to copy item data (defaults to savestring())
-
-hashlib.h
- - new extern declaration for copy_hash_table
-
-builtins/declare.def
- - changes so that declare [-a] var=value assigns `value' to element 0
- of array variable `var' like ksh93
- - change so that declare [-a] var[N]=value assigns `value' to element
- N of array variable `var' like ksh93
-
- 8/13
- ----
-arrayfunc.c
- - new file, for miscellaneous array functions
-
-arrayfunc.h
- - new file, extern declarations for functions in arrayfunc.c
-
-variables.c
- - move convert_var_to_array, bind_array_variable,
- assign_array_from_string, assign_array_var_from_word_list,
- assign_array_var_from_string, quote_array_assignment_chars,
- skipsubscript, unbind_array_element, print_array_assignment
- to arrayfunc.c
-
-shell.h
- - include arrayfunc.h after variables.h
-
-variables.h
- - remove above extern function declarations moved to arrayfunc.h
- - add extern declaration for var_lookup
-
-Makefile.in
- - add arrayfunc.c, arrayfunc.h in appropriate places
- - add arrayfunc.h to dependencies
-
-subst.c
- - move valid_array_reference, array_expand_index, array_variable_part,
- array_value_internal, array_value (now global), get_array_value,
- do_array_element_assignment to arrayfunc.c
-
-subst.h
- - extern declarations for functions above moved to arrayfunc.h
-
-arrayfunc.h
- - extern declarations for above functions from subst.c
-
-subst.[ch]
- - string_list_dollar_star and string_list_dollar_at are now global
- functions
- - quote_escapes is now a global function
-
-subst.c
- - maybe_expand_string -> expand_string_if_necessary
- - expand_string_to_string -> expand_string_to_string_internal
- - new functions: expand_string_to_string and
- expand_string_unsplit_to_string, which call
- expand_string_to_string_internal with expand_string and
- expand_string_unsplit as the FUNC arguments, respectively
-
-arrayfunc.c
- - change array_expand_index to call expand_string_to_string instead
- of maybe_expand_string
-
- 8/14
- ----
-shell.c
- - in execute_env_file, call expand_string_unsplit_to_string
-
-mailcheck.c
- - in check_mail, call expand_string_to_string
-
-variables.c
- - in assign_in_env, call expand_string_unsplit_to_string
-
-arrayfunc.c
- - new function, array_variable_name, splits an array reference into
- a name (which is returned as a new string) and subscript
- - change array_variable_part to just call array_variable_name and
- look up the string returned with find_variable
- - new function, find_or_make_array_variable (name, flags) which will
- look up an array variable and convert a string variable to an
- array if necessary. The FLAGS argument, if non-zero, says to
- check the readonly and noassign attributes and fail if either is set
-
-builtins/read.def
- - make `read -a aname' honor any readonly status of `aname'
- - read -a now calls find_or_make_array_variable with FLAGS value 1
-
-arrayfunc.[ch], subst.c, builtins/{declare,read}.def
- - do_array_element_assignment -> assign_array_element
-
- 8/20
- ----
-parse.y
- - changed `for' command grammar to allow missing word list after `IN'
- token, like latest POSIX drafts require
-
-lib/sh/tmpfile.c
- - in sh_mktmpname(), check for filenum == 0 and init to non-zero number
- in this case. it can happen on arithmetic overflow
-
-support/mkversion.sh
- - added `[0-9].[0-9][0-9][a-z]' as an acceptable value for a
- distribution to allow for intermediate versions, like 2.05a
-
-support/config.guess
- - removed the addition of the output of `/usr/bin/objformat' when
- creating the canonical name on FreeBSD machines, so the canonical
- name is once again `freebsd4.2' instead of `freebsdelf4.2'
-
- 8/22
- ----
-lib/readline/{rlstdc,history,keymaps,readline,rldefs,rlprivate,rlshell,
-rltypedefs,xmalloc}.h
-lib/readline/{bind,compat,complete,display,funmap,histexpand,histsearch,
-input,isearch,kill,nls,parens,readline,rltty,search,shell,signals,vi_mode
- - changed __P to PARAMS
-
-lib/tilde/tilde.[ch]
- - changed __P to PARAMS
-
-{Makefile,configure}.in
- - changed the version number to 2.05a
- - changed the release status to `alpha1'
-
- 8/23
- ----
-support/shobj-conf
- - support for building shared libraries on Darwin/MacOS X
-
-siglist.h
- - extern declaration for strsignal() to compensate for lack of
- a definition in some system include files
-
-jobs.c
- - remove casts from strsignal() calls
-
-[bash-2.05a-alpha1 frozen]
-
- 8/27
- ----
-[bash-2.05a-alpha1 released]
-
- 8/27
- ----
-execute_cmd.c
- - fix eval_arith_for_expr to handle the case where the expanded
- word list is NULL, returning 0 in this case
-
-print_cmd.c
- - in print_function_def, make sure that func_redirects is assigned
- a value before being used
-
- 8/28
- ----
-alias.c
- - include <ctype.h> for definition of isalpha()
-
-bashhist.h
- - add prototypes for extern function declarations
-
-flags.c
- - include bashhist.h for extern function declarations
-
-mksyntax.c
- - include <unistd.h> if HAVE_UNISTD_H is defined in config.h
-
-parse.y
- - include test.h for extern function declarations
-
-externs.h
- - change extern declaration for setlinebuf to sh_setlinebuf
-
-stringlib.c
- - include <glob/glob.h> for extern function declarations
-
-variables.h
- - add function prototypes for all of the sv_* functions
-
-builtins/common.h
- - add extern declarations for set_shellopts() and parse_shellopts()
- from builtins/set.def
-
-variables.c
- - include "hashcmd.h" for extern declaration for flush_hashed_filenames
- - include "pathexp.h" for extern declaration for setup_glob_ignore
-
-lib/malloc/malloc.c
- - cast to `long' instead of `int' in memalign for 64-bit machines
-
-{pcomplete,trap}.c
- - changed printf escape sequences used to print pointers to %p
-
-lib/readline/undo.c
- - include "xmalloc.h" for extern function declaration
-
-input.h
- - add function prototypes to extern declarations for getc_with_restart
- and ungetc_with_restart
-
-variables.[ch]
- - changed type of `function' member of `struct name_and_function' to
- `sv_func_t', which is defined and prototyped in variables.h
- - map_over now takes an `sh_var_map_func_t *'
-
-shell.h
- - start of a set of function pointer typedefs like those in
- lib/readline/rltypedefs.h
-
-hashlib.[ch]
- - second paramter to flush_hash_table is now an `sh_free_func_t *'
-
-trap.c
- - parameter to reset_or_restore_signal_handlers is now an
- `sh_resetsig_func_t *'
-
-pcomplete.h, pcomplib.c
- - function pointer argument to print_all_compspecs is now an
- `sh_csprint_func_t *'
- - function pointer `list_getter' element of an `ITEMLIST' is now
- prototyped with __P((...)) instead of using `Function *'
-
-jobs.[ch]
- - `j_cleanup' member of a JOB is now an `sh_vptrfunc_t *'
-
-alias.c
- - map_over_aliases now takes an `sh_alias_map_func_t *'
- - free_alias_data now takes a `PTR_T'
-
-pathexp.c
- - function pointer argument to ignore_globbed_names is now an
- `sh_ignore_func_t *'
-
-bashline.c
- - function pointer argument to _ignore_completion_names is now an
- `sh_ignore_func_t *'
-
-pathexp.h,{bashhist,bashline.c
- - `item_func' member of a `struct ignorevar' is now an
- `sh_iv_item_func_t *'
-
-builtins/evalfile.c
- - `errfunc' is now an `sh_vmsg_func_t *'
-
-jobs.c
- - map_over_job now takes an `sh_job_map_func_t *' as its first argument
-
-array.[ch]
- - function pointer argument to array_walk is now an
- `sh_ae_map_func_t *'
-
-general.c
- - tilde_expansion_preexpansion_hook has type `tilde_hook_func_t *',
- and so the assignment in tilde_initialize doesn't need a cast
-
-list.c
- - map_over_words now takes an `sh_icpfunc_t *' as its second argument
-
-input.h
- - the `getter' and `ungetter' function pointer members of a
- BASH_INPUT are now of types `sh_cget_func_t *' and
- `sh_cunget_func_t *' respectively
- - init_yy_io now takes an `sh_cget_func_t *' as its first argument and
- an `sh_cunget_func_t *' as its second
-
-parse.y
- - init_yy_io now takes an `sh_cget_func_t *' as its first argument and
- an `sh_cunget_func_t *' as its second
- - initialize_bash_input casts bash_input.getter and bash_input.ungetter
- appropriately
-
-builtins/mkbuiltins.c
- - make the extern function definitions written to builtext.h have
- prototypes with __P((...))
- - include "stdc.h"
- - change Function to mk_handler_func_t
- - fixed comment_handler to take the right number of args
- - prototyped all the handler functions with __P((...))
-
-builtins.h
- - the `function' member of a struct builtin is now of type
- `sh_builtin_func_t *'
-
-builtins/common.[ch]
- - last_shell_builtin, this_shell_builtin are now of type
- `sh_builtin_func_t *'
- - find_shell_builtin, builtin_address, find_special_builtin now return
- `sh_builtin_func_t *'
-
-builtins/exit.def, {execute_cmd,jobs,nojobs,variables}.c, parse.y
- - changed all declarations of last_shell_builtin and this_shell_builtin
-
-execute_cmd.c
- - execute_builtin, execute_builtin_or_function,
- execute_subshell_builtin_or_function now take an
- `sh_builtin_func_t *' instead of a `Function *' for argument
- - changed appropriate variables from `Function *' to
- `sh_builtin_func_t *'
-
-builtins/{bind,builtin,enable,read,setattr}.def
- - replaced uses of `Function *' in variable declarations with
- appropriate types (sh_builtin_func_t * or rl_command_func_t *)
-
-builtins/set.def
- - set_func and get_func members of binary_o_options are now of types
- `setopt_set_func_t *' and `setopt_get_func_t *', which are
- prototyped
-
-builtins/shopt.def
- - set_func member of shopt_vars is now of type `shopt_set_func_t *'
-
-bashline.c
- - enable_hostname_completion now returns `int' (the old value of
- perform_hostname_completion)
-
-[The only use of Function and VFunction now is for unwind-protects]
-
- 9/4
- ---
-lib/sh/getcwd.c
- - use const define from config.h rather than `CONST'
- - use PTR_T define from xmalloc.h rather than `PTR'
- - include xmalloc.h for PTR_T
- - remove PATH_MAX define, rely on value from maxpath.h
-
-{general,mailcheck}.c, lib/sh/{pathcanon,pathphys}.c
- - don't include maxpath.h directly; it's already included by shell.h
-
-lib/sh/mailstat.c
- - new `mailstat()' implementation, to stat a mailbox file for
- mail checking. handles maildir-style mail directories with one
- file per message and creates a dummy stat struct from them
-
-lib/sh/Makefile.in
- - add mailstat.c and mailstat.o in the appropriate places
-
-lib/malloc/malloc.c
- - augmented implementation with wrapper functions that pass in file
- and line number information from cpp. currently unused, but a
- placeholder for future debugging and use tracking
-
-lib/malloc/shmalloc.h
- - new file, extern declarations for allocation wrapper functions for
- use by the shell (and others, I guess)
-
-xmalloc.[ch]
- - wrapper functions for xmalloc, xfree, xrealloc (sh_ prefixed) that
- pass cpp line number information through to the malloc functions,
- if USING_BASH_MALLOC is defined
-
- 9/5
- ---
-lib/malloc/gmalloc.c
- - removed; no longer part of distribution
-
-lib/malloc/Makefile.in
- - removed references to gmalloc.[co]
-
-configure.in, doc/bashref.texi
- - removed references to `--with-glibc-malloc' configure option
-
-{configure,Makefile}.in
- - changed the way bash malloc is configured into the Makefile, making
- it more like how readline is configured. If the bash malloc is
- not configured in, nothing in lib/malloc will be built
-
- 9/6
- ---
-lib/malloc/imalloc.h
- - new file, some internal malloc definitions
-
-lib/malloc/mstats.h
- - new file, definitions for malloc statistics structs and functions
-
-lib/malloc/trace.c
- - new file, malloc tracing functions (currently just print messages
- to stderr), code is #ifdef MALLOC_TRACE
-
-lib/malloc/stats.c
- - new file, moved malloc stats code from malloc.c to here
-
-lib/malloc/malloc.c
- - moved some definitions to imalloc.h
- - moved stats code to stats.c
- - malloc tracing calls added to internal_{malloc,realloc,free}, all
- #ifdef MALLOC_TRACE
-
-lib/malloc/Makefile.in, Makefile.in
- - added {imalloc,mstats}.h, {trace,stats}.c
-
-parse.y
- - changed decode_prompt_string to save and restore $?
- (last_command_exit_value) around calls to expand_prompt_string(),
- so command substitutions in PS1, etc. don't change $?
-
-{array,subst}.c
- - a couple more arrayind_t fixes from Paul Eggert
-
-configure.in
- - remove redundant check for wait3(2)
-
-redir.h
- - fixed a typo (stdin_redirs -> stdin_redirects)
-
- 9/10
- ----
-execute_cmd.c
- - remove check for \n and \r from WHITESPACE macro, since those
- chars are not whitespace as returned by the whitespace(c) macro
- - getinterp now takes a `char *' as first arg, not unsigned char *
- - execute_shell_script now takes a `char *' as first arg, not
- unsigned char *
- - fix typo in forward declaration for `initialize_subshell'
-
-general.[ch]
- - check_binary_file now takes a (char *) argument, not unsigned char *
- - pass unsigned char to isspace and isprint because of ISO C fuckup
- - bash_tilde_expand now takes a `const char *' as its argument
-
-builtins/evalfile.c, shell.c
- - buffer passed to check_binary_file is char, not unsigned char
-
-parse.y
- - fix extern declaration for yyerror()
- - yyerror now takes a `const char *' as first arg
-
-{error,jobs}.c
- - fixes to printf-style functions to handle pids wider than an int
-
-lib/readline/{isearch,vi_mode}.c
- - fix call to rl_message in rl_display_search (remove extra arg)
-
-variables.c
- - fix missing argument to builtin_error in make_local_variable
-
-builtins/getopts.def
- - since getopts takes no options, change while loop calling
- internal_getopts to a simple `if' check
-
-builtins/printf.def
- - since printf takes no options, change while loop calling
- internal_getopts to a simple `if' check
-
-lib/readline/bind.c
- - remove _SET_BELL macro, expand code inline
-
-lib/readline/input.c
- - change _rl_input_available to use either select or FIONREAD,
- but not both
-
-lib/readline/readline.c
- - fix rl_digit_loop to remove unreachable code at end of loop
-
-{bashhist,bashline,expr,jobs,redir,shell}.c, builtins/fc.def, lib/sh/snprintf.c
- - bracket unused functions with #ifdef INCLUDE_UNUSED/#endif
- - remove some unused variables
-
-execute_cmd.c
- - remove #ifdef'd code that allowed `return' to terminate a select
- statement
-
-expr.c
- - remove some extraneous tests from strlong()
-
-array.h
- - arrayind_t is now a long, since shell arithmetic is performed as
- longs
- - remove second declaration of new_array_element
-
-builtins/printf.def
- - in mklong, xrealloc cannot return NULL, so don't check for it
- - remove some #if 0 code
- - fix core dump triggered by a format specification with more than
- one `*'
- - remove `foundmod', since its value mirrors `modchar != 0'
- - include "common.h" for builtin_{error,usage} declarations
-
-Makefile.in,builtins/Makefile.in
- - updated some dependencies due to new include files
-
-pcomplete.c
- - include "execute_cmd.h" for declaration of execute_shell_function
-
-arrayfunc.c
- - include <stdio.h> for printf
- - include "builtins/common.h" for builtin_error declaration
-
-builtins/evalstring.c
- - include "../trap.h" for run_trap_cleanup declaration
-
-builtins/help.def
- - include "common.h" instead of locally declaring builtin_error
- and builtin_usage
-
-error.h
- - add extern declaration for itrace()
- - add prototype to extern declaration of get_name_for_error
- - file_error now takes a `const char *' as first argument
-
-externs.h
- - added prototype for sh_setlinebuf declaration, bracketed with
- NEED_SH_SETLINEBUF_DECL so we don't need stdio.h everywhere
- - add extern declaration for parse.y:return_EOF()
-
-shell.c
- - add NEED_SH_SETLINEBUF_DECL before including shell.h
-
-lib/readline/callback.c
- - include <stdlib.h> or "ansi_stdlib.h" for abort declaration
-
-quit.h
- - remove declaration of throw_to_top_level
-
-subst.c
- - remove unused extern declaration for getopts_reset
-
-lib/sh/netopen.c
- - include <shell.h> for legal_number, etc.
- - add prototype for inet_aton extern declaration
-
-lib/sh/clock.c
- - include <stdc.h> for __P declaration
- - add extern declaration for get_clk_tck
-
-support/mkversion.sh
- - changed so that extern function declarations for functions in
- version.c (moved from externs.h) are in the generated version.h
-
-shell.h
- - include version.h
-
-version.c
- - various `char *' version variables are now `const char *'
-
-general.h
- - add prototype for same_file, bracketed with _POSIXSTAT_H
- #ifdef, since that's what include/posixstat.h defines
-
-builtins/common.[ch]
- - _evalfile, maybe_execute_file, source_file, and fc_execute_file
- now take a `const char *' as their first argument
-
-eval.c
- - removed extern declaration of yyparse; it's in externs.h
-
-parse.y
- - added prototypes to static forward function declarations
- - changed local `all_digits' variable in read_token_word () to
- all_digit_token to avoid clash with all_digits() function in
- general.c
-
-{bashhist,copy_cmd,make_cmd,hashlib,mailcheck}.c
- - added prototypes for static function declarations
-
-shell.h
- - add extern declarations for interactive, interactive_shell,
- changed c files with extern declarations
-
-pcomplete.c
- - changed it_init_aliases to avoid shadowing global variable
- `aliases'
-
-bashline.c,pathexp.c,general.h
- - sh_ignore_func_t is now a pointer to a function taking a
- `const char *'; users changed
-
-configure.in
- - test for <strings.h>
-
-config.h.in
- - add #undef HAVE_STRINGS_H
-
-bashansi.h
- - change like recommended in autoconf manual
-
- 9/11
- ----
-[a date which will live in infamy. prayers for the victims.]
-
-execute_cmd.c
- - don't use an absolute index into abuf in mkfmt, use
- sizeof(abuf) to compute last index
-
-builtins/common.c
- - fix read_octal to do a better job of detecting overflow while
- iterating through the string
-
-builtins/umask.def
- - change octal-print mode to print 4 digits, like other shells
- - cast umask to unsigned long to avoid problems on systems where
- it's wider than an int (POSIX doesn't guarantee that mode_t is
- no wider than an int, but real-world systems use int)
-
-builtins/printf.def
- - mklong can never return NULL (it uses xrealloc), so the mainline
- doesn't need to check for NULL returns
- - new function, getldouble (long double *), to get long doubles
- - mklong now takes a `char *' as its second argument, the modifier(s)
- to use
- - changed use of `modchar' to handle more than a single modifier
- character
- - changed to handle `long double' and `L' formats better, rather
- than discarding long double information
- - since printf now follows the POSIX.2 rules for conversion errors,
- we can dispense with the status returns from the get* functions
- - make the get* functions as similar in structure as possible,
- removing type casts, etc.
-
-lib/sh/timeval.c,execute_cmd.c
- - change some instances of `long' to `time_t', for systems where
- a time_t is bigger than a long
-
-jobs.c
- - include "posixtime.h" instead of <sys/time.h>
-
-config.h.in
- - add defines for HAVE_DECL_CONFSTR, HAVE_DECL_STRTOLD,
- HAVE_DECL_SBRK, HAVE_DECL_PRINTF
- - remove defines for SBRK_DECLARED and PRINTF_DECLARED
- - add _GNU_SOURCE define
-
-configure.in
- - add AC_CHECK_DECLS for strtold, confstr, sbrk, printf
- - remove call to BASH_FUNC_SBRK_DECLARED
- - remove call to BASH_FUNC_PRINTF
-
-xmalloc.c, lib/malloc/malloc.c
- - change check of SBRK_DECLARED to HAVE_SBRK_DECL
-
-print_cmd.c
- - change PRINTF_DECLARED to HAVE_DECL_PRINTF
-
-builtins/evalstring.c, builtins/common.h
- - parse_and_execute now takes a `const char *' as its second argument
-
-input.h,parse.y
- - with_input_from_* functions now take a `const char *' as their
- second argument
- - init_yy_io now takes a `const char *' as its fourth argument
-
-parse.y,externs.h
- - parse_string_to_word_list now takes a `const char *' as its second
- argument
-
-tests/builtins.right
- - change output to account for extra digit in umask output
-
-pcomplib.c
- - free_progcomp now takes a PTR_T argument
-
-builtins/bashgetopt.h
- - include <stdc.h>
- - add prototypes to extern declarations
-
-builtins/shopt.def
- - add prototypes to static function declarations
-
-builtins/{fc,umask,wait}.def, builtins/{bashgetopt,common}.c
- - include <ctype.h> for isdigit macro (referenced by `digit(x)')
-
-lib/readline/complete.c
- - added more static function declarations with prototypes
-
- 9/12
- ----
-lib/sh/tmpfile.c
- - use `^' instead of `*' in sh_mktmpname to make filenames a bit
- more random
-
-include/stdc.h,lib/readline/rldstdc.h
- - add __attribute__ definition
-
-builtins/common.h
- - add printf __attribute__ to declaration of builtin_error
-
-error.h
- - add printf __attribute__ to declaration of programming_error,
- report_error, parser_error, fatal_error, sys_error, internal_error,
- internal_warning
-
-lib/readline/readline.h
- - add printf __attribute__ to declaration of rl_message
-
-pcomplete.c
- - add printf __attribute__ to declaration of debug_printf
-
-print_cmd.c
- - add printf __attribute__ to declarations of cprintf, xprintf
-
-include/chartypes.h
- - new file, includes <ctype.h> and defines macros that check for
- safe (ascii) arguments before calling the regular ctype macros
-
-{alias,bashline,execute_cmd,expr,findcmd,general,locale,mksyntax,stringlib,subst,variables}.c
-parse.y
-builtins/{bashgetopt,common}.c
-builtins/{fc,printf,umask,wait}.def
-lib/glob/strmatch.c
-lib/sh/{oslib,pathcanon,pathphys,snprintf,strcasecmp,strindex,stringvec,strtod,strtol,strtrans}.c
-examples/loadables/{head,sleep}.c
- - include "chartypes.h" or <chartypes.h> instead of <ctype.h>
-
-Makefile.in,{builtins,lib/{glob,sh}}/Makefile.in
- - update dependencies to include chartypes.h
-
-lib/sh/inet_aton.c
- - use `unsigned char' instead of `char' to pass to ctype.h functions
-
-lib/sh/netopen.c
- - check for '0' <= host[0] <= '9' in _getaddr instead of using
- isdigit
-
-subst.c,lib/sh/shquote.c
- - change array subscripts into sh_syntaxtab from `char' to
- `unsigned char'
-
-{alias,bashline,execute_cmd,expr,general,subst}.c, parse.y
-builtins/{fc,printf,umask,wait}.def builtins/{bashgetopt,common}.c
-lib/sh/{pathcanon,pathphys,snprintf,strcasecmp,strindex,strtod,strtol,strtrans}.c
-examples/loadables/{head,sleep}.c
- - change to use some of the new macros in chartypes.h
- - remove old local macro definitions now provided by chartypes.h
-
-general.h
- - remove definition of isletter, ISOCTAL, digit, digit_value
- - change legal_variable_starter and legal_variable_char to use
- chartypes.h macros
- - change ABSPATH to use chartypes.h macros
-
-lib/readline/util.c
- - change to use Paul Eggert's FUNCTION_FOR_MACRO define to define
- function replacements for macros in chardefs.h
-
-lib/readline/chardefs.h
- - added some of the same macros as in chartypes.h
- - change _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p,
- _rl_to_upper, _rl_to_lower to use new IS* macros
- - added _rl_isident macro from vi_mode.c:isident
-
-lib/readline/{bind,complete,nls}.c
- - change to use some of the new macros from chardefs.h
-
-lib/readline/vi_mode.c
- - isident -> _rl_isident
- - remove local defines of macros in chardefs.h
-
-lib/sh/strtol.c
- - updated to new version, modified from glibc 2.2.4 and sh-utils-2.0.
- This one can do strtoll and strtoull, if necessary
-
- 9/13
- ----
-builtins/ulimit.def
- - changed get_limit so it retrieves both hard and soft limits
- instead of one or the other
- - changed callers of get_limit
- - changed getmaxvm to take soft limit, hard limit as arguments
- - changed getmaxuprc to just take a single argument, the value
- - changed calls to printone() to pass soft limit or hard limit
- depending on `mode' instead of using old current_limit variable
- - moved check for out-of-range limits in ulimit_internal into the
- block that converts a string argument to a value of type rlim_t
- - changed RESOURCE_LIMITS struct to break the description into a
- description string and separate scale factor string
- - changed print_all_limits to print a single error message if
- get_limit fails, including limits[i].description now that the
- scale factor has been removed from the description string
- - removed DESCFMT define, since it's now used only in printone()
- - changed printone to print the option character associated with a
- particular limit if we're printing multiple limits
- - changed calls to builtin_error to print the description associated
- with a limit if setting or getting the limit fails
- - added support for new POSIX 1003.1-200x rlim_t values:
- RLIM_SAVED_CUR and RLIM_SAVED_MAX, which expand to the current
- soft and hard limits, whatever they are
- - changed printone to print `hard' or `soft' if the current limit is
- RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively
- - changed ulimit_internal to handle new `hard' and `soft' arguments
- - changed help text do describe the special limit arguments `hard',
- `soft', and `unlimited'
-
-doc/{bash.1,bashref.texi}
- - documented new `hard' and `soft' limit arguments to `ulimit'
-
-hashlib.[ch]
- - find_hash_item now takes a `const char *' is its first argument
- - hash_string now takes a `const char *' is its first argument
- - remove_hash_item now takes a `const char *' as its first argument
-
-pcomplib.c
- - removed cast from first argument to find_hash_item in find_compspec
-
-general.[ch]
- - absolute_program now takes a `const char *' as its argument
- - absolute_pathname now takes a `const char *' as its argument
-
-lib/glob/glob.[ch]
- - glob_pattern_p now takes a `const char *' as its argument
-
-bashline.c
- - removed cast from first argument to absolute_program in
- command_word_completion_function
- - removed cast from first argument to glob_pattern_p in
- attempt_shell_completion
-
-findcmd.[ch]
- - find_absolute_program, find_user_command, find_path_file,
- search_for_command, user_command_matches now take a
- `const char *' as their first argument
- - file_status, executable_file, is_directory, executable_or_directory
- now take a `const char *' as their argument
- - _find_user_command_internal, find_user_command_internal,
- find_user_command_in_path
-
-lib/sh/makepath.c, externs.h
- - changed sh_makepath so it takes `const char *' for its first
- two arguments
-
-hashcmd.[ch]
- - find_hashed_filename now takes a `const char *' as its first arg
- - remove_hashed_filename now takes a `const char *' as its first arg
-
-variables.[ch]
- - new_shell_variable, var_lookup, shell_var_from_env_string,
- find_name_in_env_array, bind_function, makunbound,
- bind_name_in_env_array, bind_tempenv_variable, bind_variable
- now take a `const char *' as their first arg
- - find_function, make_new_variable, find_tempenv_variable,
- find_variable_internal, find_variable, set_func_read_only,
- set_func_auto_export, all_variables_matching_prefix, assign_in_env,
- assignment, kill_local_variable, make_local_variable, unbind_variable
- now take a `const char *' as their arg
- - mk_env_string now takes `const char *' arguments
-
-arrayfunc.[ch]
- - skipsubscript now takes a `const char *' as its argument
-
- 9/17
- ----
-lib/readline/complete.c
- - attempt to preserve case of what the user typed in
- compute_lcd_of_matches if we're ignoring case in completion
-
-builtins/{let,pushd}.def,{execute_cmd,expr}.c
- - change some 0L constants to 0 and let the compiler sort it out
-
- 9/18
- ----
-lib/malloc/alloca.c
- - alloca now takes a `size_t' argument
-
-include/memalloc.h
- - if we're providing an extern function declaration for alloca,
- use `void *' and prototype if __STDC__ is defined
- - if HAVE_ALLOCA_H is defined, but C_ALLOCA is defined, don't
- define HAVE_ALLOCA
-
- 9/19
- ----
-subst.c
- - do_assignment_internal, do_assignment, and do_assignment_no_expand
- now take a `const char *' as their first argument
-
-general.h
- - a `sh_assign_func_t' is now a function taking a `const char *' and
- returning int
-
-hashcmd.c
- - free_filename_data now takes a `PTR_T' argument to agree with the
- typedef for `sh_free_func_t'
-
-lib/sh/snprintf.c
- - use TYPE_MAXIMUM define like strtol.c instead of huge constants
-
- 9/20
- ----
-lib/sh/snprintf.c
- - don't bother to compile the bulk of the body unless HAVE_SNPRINTF
- or HAVE_ASPRINTF is not defined
-
- 9/24
- ----
-flags.c
- - ignore `set -n' if the shell was started interactively
-
-lib/readline/readline.c
- - initialize readline_echoing_p to 0; let the terminal-specific code
- in rltty.c set it appropriately
-
-lib/malloc/malloc.c
- - changed internal_memalign() slightly to avoid compiler warnings about
- negating an unsigned variable (-alignment -> (~alignment + 1))
-
- 9/27
- ----
-lib/readline/readline.c
- - changed rl_newline to set _rl_history_saved_point appropriately
- for the {previous,next}_history code
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_history_preserve_point
-
-lib/readline/bind.c
- - new bindable variable, `history-preserve-point', sets value of
- _rl_history_preserve_point
-
- 10/1
- ----
-lib/malloc/table.c
- - new file, with a map of allocated (and freed) memory for debugging
- multiple frees, etc. Indexed by hash on values returned by
- malloc(); holds size, file and line number info for last alloc or
- free and a couple of statistics pointers
-
-lib/malloc/malloc.c
- - a few cleanups; added calls for registering allocations and frees
- if MALLOC_REGISTER is defined
- - replaced MALLOC_RETURN with explicit MALLOC_NOTRACE define
- - reordered fields in `struct...minfo' in `union mhead' to restore
- eight-byte alignment
- - added explicit checks for underflow in free and realloc since
- checking mh_magic2 is not sufficient to detect everything (it's
- no longer the last field in the struct, and thus not the bytes
- immediately preceding what's returned to the user)
- - new function, xbotch, for printing file and line number info for
- the failed assertion before calling botch() (programming_error())
-
-configure.in
- - replaced call to BASH_C_LONG_LONG with call to
- AC_CHECK_TYPES([long long])
- - moved the C compiler tests before the tests for various
- system types, so we can know whether we have `long long'
- before testing for 64-bit types
- - if we have `long long', check for sizeof(long long) and save value
-
-aclocal.m4
- - changed BASH_TYPE_BITS64_T to check `long long' before `long', but
- after `double'
-
- 10/2
- ----
-lib/malloc/malloc.c
- - made malloc and realloc both agree on the rounding for a request of
- size N (round up to nearest multiple of 8 after adjusting for
- malloc overhead); uses new ALLOCATED_BYTES macro
- - realloc and free now use new IN_BUCKET macro for underflow checks
-
-execute_cmd.c
- - fixed time_command() to use `time_t' instead of `long' to hold
- time stamps
-
-lib/sh/clock.c
- - clock_t_to_secs now takes a `time_t *' second argument
- - fixed print_clock_t to call clock_t_to_secs with right arguments
-
-lib/sh/timeval.c
- - fixed print_timeval to make `minutes' a `long' and make its
- structure identical to print_clock_t
-
-redir.c
- - changed redirection_error to check for EBADF and use the file
- descriptor being redirected from in the error message if it
- is >= 0
-
-Makefile.in
- - changed release status to `beta1'
-
-lib/glob/collsyms.h
- - added a few ASCII symbols to the posix_collsyms array
-
- 10/3
- ----
-aclocal.m4
- - fixed typo in BASH_TYPE_BITS64_T
-
-configure.in
- - added check for unsigned chars with AC_C_CHAR_UNSIGNED
-
-config.h.in
- - added PROTOTYPES and __CHAR_UNSIGNED__ #defines
-
-general.h
- - if CHAR_MAX is not define by <limits.h>, provide a definition
-
-builtins/printf.def
- - change tescape() to mask \0 and \x escape sequences with 0xFF
- - change tescape() to process at most two hex digits after a `\x'
-
-lib/sh/strtrans.c
- - change strtrans() to mask \0 and \x escape sequences with 0xFF
- - change strtrans() to process at most two hex digits after a `\x'.
- This affects `echo -e' and $'...' processing
-
-lib/readline/bind.c
- - changed rl_translate_keyseq() to process at most two hex digits
- after a `\x'
-
-lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
- - changed documentation for key binding escape sequences to specify
- that at most two hex digits after \x are translated
- - changed documentation for key binding to specify that the result
- of \nnn or \xhh escapes is an eight-bit value, not just ASCII
-
-doc/{bash.1,bashref.texi}
- - changed documentation of $'...' to specify that at most two hex
- digits after \x are translated
- - changed `echo' documentation to specify that at most two hex
- digits after \x are translated
- - changed documentation for `echo' and $'...' to specify that the
- result of \nnn or \xhh escapes is an eight-bit value, not just ASCII
-
- 10/4
- ----
-lib/malloc/malloc.c
- - changed interface for xbotch to pass memory address and error code
- as two additional arguments
- - call mregister_describe_mem from xbotch to get the last allocation
- or free before the botch
-
-configure.in
- - call AC_CHECK_DECLS([strsignal])
-
-config.h.in
- - add HAVE_DECL_STRSIGNAL
-
-siglist.h
- - make declaration of strsignal() dependent on !HAVE_DECL_STRSIGNAL
-
- 10/5
- ----
-support/texi2html
- - upgraded to version 1.64
-
- 10/9
- ----
-aclocal.m4
- - added check for `long long' to BASH_TYPE_PTRDIFF_T
-
-configure.in
- - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ
-
-aclocal.m4
- - replaced body of BASH_STRUCT_TERMIOS_LDISC with call to
- AC_CHECK_MEMBER(struct termios.c_line, ...)
- - replaced body of BASH_STRUCT_TERMIO_LDISC with call to
- AC_CHECK_MEMBER(struct termios.c_line, ...)
-
-[bash-2.05a-beta1 frozen]
-
- 10/10
- -----
-lib/sh/snprintf.c
- - fixed exponent() to not smash the trailing zeros in the fraction
- when using %g or %G with an `alternate form'
- - fixed exponent() to handle the optional precision with %g and %G
- correctly (number of significant digits before the exponent)
-
- 10/11
- -----
-expr.c
- - fixed strlong() to correct the values of `@' and `_' when
- translating base-64 constants (64#@ == 62 and 64#_ == 64), for
- compatibility with ksh
-
-lib/sh/itos.c
- - added a slightly more flexible fmtlong() function that takes a
- base argument and flags (for future use)
- - rewrote itos and inttostr in terms of fmtlong
-
-lib/sh/fmtulong.c
- - new file, converts unsigned long to string. hooks for `unsigned
- long long' in the future. unused as yet
-
- 10/15
- -----
-lib/readline/rltty.c
- - change the SET_SPECIAL macro to avoid possible (but highly
- unlikely) negative array subscripts
-
-error.h
- - add __attribute__ to extern declaration of itrace (even though the
- function isn't defined in released versions of bash)
-
-bashansi.h
- - include <strings.h> if HAVE_STRINGS_H is defined, to get any extra
- function declarations provided therein
-
-copy_cmd.c
- - fix typo in forward declaration for copy_arith_for_command
-
-lib/malloc/stats.c
- - make the accumulators in _print_malloc_stats be `unsigned long'
- instead of `int'
-
-externs.h, sig.h
- - add `__noreturn__' gcc attribute to exit_shell and jump_to_top_level
- declarations
-
-lib/sh/mailstat.c, support/bashversion.c
- - include <bashansi.h> for some string function declarations
-
-lib/malloc/shmalloc.h
- - added extern declarations of functions that do malloc debugging
-
-lib/readline/{isearch,readline,vi_mode}.c
- - make sure we index into _rl_keymap with a non-negative index
-
-parse.y
- - make sure we index into sh_syntaxtab with a non-negative index
-
-lib/readline/vi_mode.c
- - bound the vi_mark_chars array with the number of characters between
- 'a' and 'z' rather than using a fixed amount
- - don't use _rl_lowercase_p when deciding whether the char read by
- rl_vi_set_mark is a valid mark; just use 'a' <= char <= 'z'
-
-lib/readline/chardefs.h
- - conditionally include memory.h and strings.h as in general.h
- - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software
- - add defines for ISPRINT(c), ISLOWER(c) and ISUPPER(c)
- - fix defines for _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p,
- _rl_pure_alphabetic, ALPHABETIC, _rl_to_upper, _rl_to_lower,
- and _rl_isident to work on systems with signed chars
-
-include/chartypes.h
- - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software
-
-lib/sh/{strcasecmp,strtod,strtol}.c
- - don't pass possibly-negative characters to tolower() or toupper()
-
-lib/glob/strmatch.c
- - don't bother testing for isupper in FOLD; rely on TOLOWER macro
- from <chartypes.h> to do it
- - don't use local definitions of isblank, et al.; rely on macros
- from <chartypes.h>
-
-lib/readline/{display,readline}.c, mksyntax.c
- - use new ISPRINT macro instead of isprint()
-
-builtins/{kill.def,mkbuiltins.c},{error,execute_cmd,jobs,nojobs,subst}.c
- - don't assume that a pid_t fits into an int for printing and other
- uses
-
-variables.[ch]
- - the unused put_gnu_argv_flags_into_env now takes a `long' pid
- argument
-
-configure.in, config.h.in
- - call AC_STRUCT_ST_BLOCKS, define HAVE_STRUCT_STAT_ST_BLOCKS if found
- - check for strtoull(), define HAVE_STRTOULL if found
- - check for uintmax_t, define to `unsigned long' if not found
-
-lib/sh/mailstat.c
- - don't use st_blocks member of struct stat unless
- HAVE_STRUCT_STAT_ST_BLOCKS is defined; otherwise use the st_nlink
- field to return the total number of messages in a maildir-style
- mail directory
-
-general.h,{alias,expr,general,subst,variables}.c
-builtins/{printf,read}.def
-lib/readline/{bind,complete,nls}.c
-lib/sh/{pathcanon,pathphys,shquote,snprintf,strindex,strtod,strtol,strtrans}.c
- - cast args to ctype macros to unsigned char for systems with signed
- chars; other fixes for signed chars
-
-lib/sh/{fmtullong,strtoull.c}
- - new files, more support for `long long'
-
-Makefile.in, lib/sh/Makefile.in
- - make fmtullong.o and strtoull.o part of libsh
-
-lib/sh/itos.c
- - remove local copy of fmtlong; use fmtulong instead
- - new functions: uitos, uinttostr work on `unsigned long'
-
-lib/sh/snprintf.c
- - fixes to make `unsigned long long' work (%llu)
- - fixes to make unsigned formats not print the sign when given
- an unsigned long that is greater than LONG_MAX
-
-externs.h
- - extern declarations for fmtulong, fmtulloing, strtoull
- - extern declarations for uitos, uinttostr
-
- 10/16
- -----
-configure.in
- - move header checks before function checks
- - move c compiler tests before header checks
- - check for <inttypes.h> with BASH_HEADER_INTTYPES
- - change type checks for intmax_t, uintmax_t to not attempt to
- include <stdint.h>
- - check for strtoimax, strtoumax, strtoll, strtol, strtoull, strtoul
- with BASH_CHECK_DECL (for declarations in header files) and
- AC_REPLACE_FUNCS (for availability and LIBOBJS substitution)
- - remove check for have_long_long around sizeof check for long long
- (since autoconf will give it a size of 0 if the type isn't found)
-
-config.h.in
- - add a define for HAVE_INTTYPES_H
- - add a define for HAVE_UNSIGNED_LONG_LONG
- - add defines for HAVE_STRTOIMAX, HAVE_STRTOUMAX, HAVE_STRTOLL
-
-aclocal.m4
- - new func, BASH_HEADER_INTTYPES, which just calls AC_CHECK_HEADERS
- on <inttypes.h>; separate so it can be AC_REQUIREd
- - AC_REQUIRE([BASH_HEADER_INTTYPES]) in BASH_CHECK_TYPE
- - include <inttypes.h> in BASH_CHECK_TYPE if HAVE_INTTYPES_H is
- defined
- - change AC_DEFINE to AC_DEFINE_UNQUOTED in BASH_CHECK_TYPE
- - new `long long' checking macros: BASH_TYPE_LONG_LONG and
- BASH_TYPE_UNSIGNED_LONG_LONG
- - new BASH_CHECK_DECL
-
-lib/sh/{strto[iu]max,strtoll}.c, lib/sh/Makefile.in, Makefile.in
- - new files
-
-externs.h
- - extern declarations for strtoll, strtoimax, strtoumax
-
-lib/malloc/alloca.c
- - include <bashtypes.h> for size_t
-
-builtins/printf.def
- - new functions: getllong, getullong, getintmax, getuintmax; return
- long long, unsigned long long, intmax_t, uintmax_t respectively
- - builtin printf now handles `ll' and `j' length modifiers directly
-
-lib/sh/Makefile.in
- - use LIBOBJS to decide whether or not the strto* functions are
- needed
-
- 10/17
- -----
-configure.in
- - call AC_REPLACE_FUNCS(rename)
- - move getcwd, strpbrk, strcasecmp, strerror, strtod
- from AC_CHECK_FUNCS to AC_REPLACE_FUNCS
- - only call BASH_FUNC_GETCWD if $ac_func_getcwd == "yes"
- - call BASH_CHECK_SYS_SIGLIST
- - if we don't have vprintf but have _doprnt, call AC_LIBOBJ(vprint)
-
-lib/sh/Makefile.in
- - remove rename, getcwd, inet_aton, strpbrk, strcasecmp, strerror,
- strtod, vprint from OBJECTS; picked up from LIBOBJS
-
-aclocal.m4
- - change BASH_FUNC_GETCWD to call AC_LIBOBJ(getcwd) if the libc
- getcwd(3) calls popen(3)
- - change BASH_FUNC_INET_ATON to call AC_LIBOBJ(inet_aton) if it's
- not found in libc or as a #define even with the special includes
- - BASH_KERNEL_RLIMIT_CHECK -> BASH_CHECK_KERNEL_RLIMIT
- - BASH_DEFAULT_MAILDIR -> BASH_SYS_DEFAULT_MAILDIR
- - BASH_JOB_CONTROL_MISSING -> BASH_SYS_JOB_CONTROL_MISSING
- - BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS
- - BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE
- - BASH_DUP2_CLOEXEC_CHECK -> BASH_FUNC_DUP2_CLOEXEC_CHECK
- - BASH_PGRP_SYNC -> BASH_SYS_PGRP_SYNC
- - BASH_RLIMIT_TYPE -> BASH_TYPE_RLIMIT
- - BASH_FUNC_PRINTF -> BASH_DECL_PRINTF
- - BASH_FUNC_SBRK_DECLARED -> BASH_DECL_SBRK
- - BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T
- - BASH_CHECK_SOCKLIB -> BASH_CHECK_LIB_SOCKET
- - new macro, BASH_CHECK_SYS_SIGLIST, encapsulates all the checks for
- sys_siglist, _sys_siglist, and strsignal(), sets SIGLIST_O to
- siglist.o if appropriate
-
-Makefile.in
- - use SIGLIST_O variable to decide whether or not we need siglist.o
-
-{execute_cmd,subst}.c
- - change a couple of instances of ISDIGIT to DIGIT, where we really,
- really only want ascii digits
-
-ansi_stdlib.h
- - don't need a declaration for atol()
-
- 10/18
- -----
-
-aclocal.m4
- - new macro, BASH_FUNC_PRINTF_A_FORMAT, checks for printf support
- for %a, %A conversion specifiers, defines HAVE_PRINTF_A_FORMAT
- if successful
-
-configure.in
- - call AC_CHECK_FUNCS for isascii
- - call BASH_FUNC_PRINTF_A_FORMAT
-
-config.h.in
- - add a define for HAVE_ISASCII
- - add a define for HAVE_PRINTF_A_FORMAT
-
-lib/sh/snprintf.c
- - for long double output, fall back to sprintf using ldfallback()
- function for floating point formats
- - support %a, %A using dfallback() or ldfallback() if
- HAVE_PRINTF_A_FORMAT is defined
- - fix bug in vasprintf that returned wrong value in its first
- argument if the buffer holding the result string got reallocated
- - fixed PUT_CHAR macro to increment the counter even if we've
- exceeded the buffer size, for the return value from
- vsnprintf/snprintf
- - fix vsnprintf_internal to not use counter < length as a loop
- condition, but always process the entire format string (for
- the return value from vsnprintf/snprintf)
-
-builtins/printf.def
- - support %a, %A if HAVE_PRINTF_A_FORMAT is defined
-
-include/typemax.h
- - new file, with the TYPE_MAXIMUM stuff that's duplicated in several
- files in lib/sh
-
-lib/sh/{fmtulong,strtol,snprintf}.c
- - include <typemax.h> instead of having the definitions in each file
-
-lib/sh/Makefile.in
- - updated dependencies for typemax.h
-
- 10/22
- -----
-configure.in
- - call AC_CHECK_FUNCS on ctype.h functions/macros that bash redefines
- in chartypes.h
-
-config.h.in
- - defines for HAVE_IS{ASCII,BLANK,GRAPH,PRINT,SPACE,XDIGIT}
-
-include/chartypes.h, lib/glob/strmatch.c, lib/readline/chardefs.h
- - don't redefine some is* ctype macros/functions if HAVE_ISXXX is
- defined (meaning that an appropriate function, but not a macro,
- exists)
-
-lib/sh/strtrans.c
- - new function, ansic_shouldquote, returns 1 if argument string
- contains non-printing chars that should be quoted with $'...'
-
-externs.h
- - new declaration for ansic_shouldquote()
-
-variables.c
- - change print_var_value to ansi C quote the string if we're not in
- posix mode and the variable's value contains non-printing chars,
- to use the regular shell single quoting if the value contains
- shell meta-characters, and to just output the string otherwise
-
-lib/sh/shquote.c
- - add `break' to `case '~':' to avoid fallthrough and extra test
-
-doc/bashref.texi
- - note that in POSIX mode, `set' displays variable values that
- include nonprinting characters without quoting, unless they
- contain shell metacharacters
-
-builtins/printf.def, lib/sh/snprintf.c
- - handle `F' conversion specifier as equivalent to 'f'
-
-parse.y, {nojobs,variables}.c
- - a couple of cleanups for when building a minimal configuration
-
-nojobs.c
- - new function: stop_making_children(), just sets
- already_making_children to 0 (like stop_pipeline)
-
-subst.c
- - call stop_making_children from subst.c:command_substitute if
- JOB_CONTROL is not defined. This fixes the bug where the wrong
- process is waited for (and its status returned) when using
- command substitution in a null command in a shell function
-
-builtins/printf.def
- - new variable `tw' used to keep track of the total number of
- characters written by a single call to `printf' -- to be
- used for the `%n' conversion, which will be added later. It
- gets reset each time we reuse the format string, which is what
- ksh93 seems to do
-
- 10/23
- -----
-variables.c
- - new function, bind_var_to_int (char *var, long val)
-
-variables.h
- - extern declaration for bind_var_to_int
-
-lib/sh/netopen.c
- - use gai_strerror() for error messages when getaddrinfo() fails
- - use PF_INET if DEBUG is defined, since IPv6 doesn't work for me
-
-Makefile.in
- - pass DEBUG=${DEBUG} down to makes in some subdirectories
-
-{builtins,lib/{glob,sh}}/Makefile.in
- - append ${DEBUG} to LOCAL_CFLAGS value, passed by top-level Makefile
-
-builtins/printf.def
- - added support for %n format conversion char (number of chars printed
- so far from current format string)
-
- 10/24
- -----
-variables.c
- - if posixly_correct is set, the default value of $MAILCHECK is 600
- - use legal_number instead of atoi in adjust_shell_level
- - treat non-numeric assignments to SECONDS as 0 in assign_seconds
- - new function, init_funcname_var; sets FUNCNAME as a dynamic variable
- if it's not set in the initial environment
- - new function, init_groups_var; sets GROUPS as a dynamic array
- variable if it's not set in the initial environment
- - new function, init_dirstack_var; sets DIRSTACK as a dynamic array
- variable if it's not set in the initial environment
- - new function, init_seconds_var; sets SECONDS as a dynamic
- variable using any valid integer value in the initial environment
- as the initial value, as if an assignment had been performed
- - call init_funcname_var, init_groups_var, init_dirstack_var,
- init_seconds_var from initialize_dynamic_variables
- - non-numeric values assigned to LINENO are treated as 0
- - change initialize_shell_variables to not auto-export PATH or TERM
- - change set_home_var to not auto-export HOME
- - change set_shell_var to not auto-export SHELL
- - broke the code that sets HOSTNAME, HOSTTYPE, MACHTYPE, OSTYPE
- out into a separate function, set_machine_vars; none of those
- variables are auto-exported
- - bash no longer un-exports SSH_CLIENT or SSH2_CLIENT
-
-shell.c
- - changed isnetconn() to check SSH_CLIENT and SSH2_CLIENT only if
- SSH_SOURCE_BASHRC is defined in config-top.h
-
-config-top.h
- - added a commented-out definition for SSH_SOURCE_BASHRC
-
- 10/25
- -----
-
-Makefile.in
- - changed RELSTATUS to `rc1' (release candidate 1)
-
- 10/29
- -----
-locale.c
- - fixed an `=' vs. `==' typo in set_locale_var when parsing
- LC_NUMERIC
-
-doc/{bash.1,bashref.texi}
- - document what bash does with $POSIXLY_CORRECT
-
-doc/builtins.1
- - some updates
-
-builtins/psize.sh
- - some mktemp(1) changes
-
-lib/readline/readline.c
- - change rl_backward to check for rl_point < 0 and reset to 0 if so
-
-lib/readline/util.c
- - don't compile in _rl_strpbrk if HAVE_STRPBRK is defined
-
-lib/readline/rlprivate.h
- - remove extern declaration of _rl_strpbrk
-
-lib/readline/rldefs.h
- - #define _rl_strpbrk as strpbrk if HAVE_STRPBRK is define, otherwise
- add extern declaration of _rl_strpbrk from rlprivate.h
-
-{mailcheck,shell,variables}.c
- - make sure to include posixtime.h to get any prototype for time(3)
- in scope
-
-{array,eval,execute_cmd,mksyntax,subst}.c, parse.y
-builtins/common.c
-lib/sh/pathcanon.c
- - a few changes as the result of `gcc -Wall' patches from solar
- designer
-
-builtins/read.def, parse.y
- - change some calls to free() to xfree()
-
-builtins/set.def
- - make sure unset_builtin() resets unset_array to 0 each time through
- the loop, because it's set (and used) depending on the current
- argument
-
-shell.h
- - new define, USE_VAR, to force the compiler to not put a particular
- variable in a register -- helpful if registers are not restored
- by setjmp/longjmp
-
-builtins/{evalfile.c,{read,wait}.def}, {eval,execute_cmd,shell,test}.c
- - use USE_VAR for some variables
-
-subst.c
- - fixed a case in expand_word_internal where a NULL pointer could
- have been passed to free() (though free() should ignore it)
- - fixed a case at the end of expand_word_internal where LIST could
- have been used uninitialized (it makes gcc happy, though it
- doesn't happen in practice)
-
-test.c
- - give test_syntax_error(), beyond(), and integer_expected_error()
- the `__noreturn__' attribute for gcc
-
-unwind_prot.c
- - in clear_unwind_protect_list(), convert `flags' to `long' (via
- assignment to a `long' variable) before casting to `char *', in
- case pointers and longs are 64 bits and ints are 32 (makes no
- difference on 32-bit machines)
-
- 10/30
- -----
-print_cmd.c
- - fixed cprintf to avoid gcc warning about assigning const pointer
- to non-const (discarding type qualifier)
-
-{make_cmd,pcomplete,test}.c,parse.y
- - some minor changes to shut up gcc warnings
-
-lib/sh/tmpfile.c
- - fixed sh_mktmpfp to avoid file descriptor leaks in the case that
- sh_mktmpfd succeeds but fdopen fails for some reason
- - change sh_mktmpfd to use the same scheme for computing `filenum'
- as sh_mktmpname
- - change get_sys_tmpdir to prefer P_tmpdir if P_tmpdir is defined
- - changed sh_mktmpname and sh_mktmpfd to avoid trying to assign to
- `nameroot' if `nameroot == 0' (duh)
- - add code to sh_mktmpfd to use mkstemp(3) if USE_MKSTEMP is defined
- - add code to sh_mktmpname to use mktemp(3) if USE_MKTEMP is defined
-
-support/{fixlinks,mkclone}
- - use mktemp if it's available for the symlink test
- - use $TMPDIR instead of hardcoding /tmp; default to /tmp
- - use a better filename for the symlink test instead of `z'
-
-support/bashbug.sh
- - more changes inspired by a patch from solar designer
-
-lib/malloc/Makefile.in
- - new target `alloca', which builds libmalloc.a with alloca.o only
- (for systems without alloca that are configured --without-bash-malloc)
-
-configure.in
- - if we don't have a working alloca and are not configured to build
- the bash malloc library, make a malloc library containing only
- alloca.o
-
-aclocal.m4
- - slight change to RL_LIB_READLINE_VERSION to deal with minor version
- numbers with a letter appended (like 4.2a)
-
- 10/31
- -----
-doc/{bash.1,bashref.texi}
- - slight change to note that only interactive shells resend a SIGHUP
- to all jobs before exiting
-
-externs.h
- - declare strto[ui]max only if NEED_STRTOIMAX_DECL is defined. This
- keeps picky compilers from choking because intmax_t is not defined
- (MacOS X 10.1)
-
-builtins/printf.def
- - #define NEED_STRTOIMAX_DECL before including shell.h
-
- 11/1
- ----
-general.c
- - check in bash_tilde_expand() for an unquoted tilde-prefix; don't
- bother passing the string to tilde_expand unless the prefix is
- unquoted
-
-shell.c
- - fix a problem with $LINENO when executing commands supplied with
- the -c invocation option when ONESHOT is defined
-
-[bash-2.05a-rc1 frozen]
-
-builtins/printf.def
- - fix the %n conversion to require that the variable name supplied
- be a valid shell identifier
-
-variables.c
- - improve random number generator slightly by using the upper 16
- bits of the running random number instead of the lower 16, which
- are incrementally more random
-
- 11/2
- ----
-configure.in
- - if RL_INCLUDEDIR ends up being /usr/include, don't put
- -I$(RL_INCLUDEDIR) into CFLAGS
-
- 11/5
- ----
-doc/{bash.1,bashref.texi}
- - correct description of POSIXLY_CORRECT to note that the shell enters
- posix mode *before* the startup files are read if POSIXLY_CORRECT
- is in the initial environment
-
-variables.c
- - fix function prologues for init_dirstack_var and init_groups_var
- to agree with caller (no arguments)
-
-jobs.c
- - fix forward function declarations for pipe_read and pipe_close
-
-subst.c
- - removed `inline' attribute from skip_double_quoted because it can
- potentially be called recursively
-
-bashline.c
- - quick fix to bashline.c:attempt_shell_completion programmable
- completion code to just punt if the end of the command word found
- by find_cmd_end is <= the start found by find_cmd_start (the bug
- is probably in find_cmd_start -- fix later)
-
-pcomplete.c
- - fix gen_matches_from_itemlist to return if the stringlist is null
- after any cleaning or initialization, before trying to use it
- - fix GEN_COMPS to only bother to try to append the STRINGLIST
- returned by gen_matches_from_itemlist to `glist' if it's non-NULL
-
-lib/sh/stringlist.c
- - make copy_stringlist return NULL if the STRINGLIST * passed as an
- argument is NULL
- - make append_stringlist call copy_stringlist only if M2 is non-NULL;
- otherwise just return NULL if m1 is NULL
- - make word_list_to_stringlist return 0 immediately if the passed
- LIST argument is NULL
- - make realloc_stringlist call alloc_stringlist if the passed
- STRINGLIST argument (`sl') is 0, just like realloc calls malloc
-
-subst.c
- - in skip_to_delim(), if we have an unclosed ${, and it's at the end
- of the string (string[i] == '{', string[i+1] == '{' and
- string[i+2] == 0, return si (i +2) immediately without bothering
- to call extract_dollar_brace_string or extract_delimited_string
- - in skip_to_delim(), if string[i] is 0 after a call to
- extract_dollar_brace_string or extract_delimited_string (meaning we
- have an unclosed ${ or other expansion, return i immediately without
- doing a `continue' (which will increment i past the end of string)
- - in split_at_delims, don't increment te by 1 if it's pointing to a
- delimiter. this has the effect of skipping the first delimiter
- char in a possibly multi-character delimiter, and ignoring
- single-char delimiters like `>'
-
-configure.in
- - use AC_CHECK_MEMBERS([struct stat.st_blocks]) instead of a call to
- AC_STRUCT_ST_BLOCKS to avoid configure changing LIBOBJS if the test
- fails
-
-general.c
- - introduce two new variables: bash_tilde_{prefixes,suffixes}, set
- to the additional prefixes and suffixes bash wants to pass to the
- tilde expansion code (reserved for post-bash-2.05a fix)
-
-aclocal.m4
- - add missing `test' in BASH_CHECK_SYS_SIGLIST
-
- 11/7
- ----
-lib/readline/vi_mode.c
- - fix rl_vi_goto_mark to explicitly check that the desired mark is
- between 'a' and 'z', since some locales have lowercase letters
- outside that range, which could cause a negative subscript
-
-include/chartypes.h
- - remove superfluous `#undef ISASCII'
-
-lib/sh/strto[iu]max.c
- - changes from Paul Eggert to work around buggy compilers and catch
- configuration errors at compile time
-
-aclocal.m4
- - new macro, BASH_C_LONG_DOUBLE, identical to AC_C_LONG_DOUBLE but
- with a fix for Irix 5.3 (not called, since I'm not sure it's the
- right thing to do -- the C standard allows double and long double
- to be the same size)
-
-lib/sh/snprintf.c
- - only try to write the trailing NUL in vsnprintf_internal if
- data->length is >= 0, since if it's not, we probably don't have
- a buffer
-
-Makefile.in
- - changed RELSTATUS to `release'
-
- 11/8
- ----
-lib/sh/strtol.c
- - make sure chars passed to toupper are cast to unsigned
-
-unwind_prot.c
- - change clear_unwind_protect_list to not require a cast from `int'
- to `char *'
-
-lib/readline/chardefs.h
- - make _rl_digit_p succeed only for ascii digits, since that's what
- most callers assume
-
- 11/13
- -----
-doc/bashref.texi
- - added `ERR' trap and [-+]O invocation option to section listing
- differences from the Bourne shell
-
- 11/15
- -----
-[bash-2.05a released]
-
- 11/19
- -----
-include/stdc.h
- - new define, INLINE, defined as `inline' for gcc and empty otherwise
-
-subst.c
- - make skip_double_quoted, sub_append_string have INLINE attribute
-
-trap.c
- - use BASH_NSIG as upper limit for signal names in signal_name()
-
-lib/readline/bind.c
- - use RL_COMMENT_BEGIN_DEFAULT in output for rl-comment-begin value
-
-error.c
- - fix sys_error to save value of errno around calls to fprintf
-
-doc/Makefile.in
- - added rules to create PDF files from postscript and dvi input
-
-MANIFEST.doc
- - added {article,bash,bashref,rose94}.pdf
-
-doc/bash.1
- - rearranged some `.PD 0' and `.TP' directives so man2html will
- handle them better (shouldn't affect groff output)
-
-support/man2html.c
- - small fix to handle quoted string arguments to directives like
- `.BR' without mangling the output
-
- 11/20
- -----
-{arrayfunc,variables}.c
- - changed calling sequence for dynamic array variable `assign'
- functions to (SHELL_VAR *self, char *value, arrayind_t ind)
- - changed calling sequence for dynamic variable assign functions
- to the same as array variable assign_func. Now this can be
- prototyped
-
-variables.h
- - the assign_func member of a `struct variable' is now of type
- `sh_var_assign_func_t', which is prototyped
- - the dynamic_value member of a `struct variable' is now of type
- `sh_var_value_func_t', which is prototyped
-
-variables.c
- - changed to use `sh_var_assign_func_t' and `sh_var_value_func_t'
-
-builtins/cd.def
- - when in posix mode, if the new directory name formed by PWD and
- the argument passed by the user cannot be canonicalized, and the
- -P option has not been supplied, return failure immediately
- - if canonicalization failed, but the fallback to the directory
- name specified by the user succeeds, reset the current working
- directory
-
-lib/readline/{input.c,rlprivate.h}
- - renamed rl_unget_char to _rl_unget_char; made library global
-
-lib/readline/{{bind,readline}.c,{keymaps,rlprivate}.h}
- - support for `key subsequences'; allows a key sequence and a function
- mapped to a subsequence of that key sequence. Primarily to allow
- arrow keys to be bound in readline vi insert mode, while preserving
- the ESC function to switch to command mode.
-
-lib/readline/{input.c,rlprivate.h}
- - new function, _rl_input_queued(T), does a check with select or
- FIONREAD with a timeout of `T' (which is generally 0)
-
-lib/readline/readline.c
- - change _rl_dispatch_subseq to test for input in the queue if we
- get ESC while in vi insertion mode if the keymap entry type for
- ESC is ISKMAP. If _rl_input_queued returns non-zero, we assume
- that an arrow key sequence has been pressed and go ahead with the
- subsequence. If it returns zero, we assume that the user pressed
- ESC to switch into command mode, and dispatch to that right away.
- This avoids forcing the user to press another key before switching
- into command mode
-
- 11/21
- -----
-lib/readline/readline.c
- - bind common arrow key sequences in vi insertion keymap
-
-lib/readline/terminal.c
- - bind termcap definition's arrow keys in vi insertion keymap
-
-lib/readline/bind.c
- - check for rl_vi_movement_mode in _rl_bind_if_unbound, so
- binding the arrow keys can work
-
-lib/readline/readline.c
- - since _rl_bind_if_unbound does the check of what's currently
- bound to the key sequence, the check in bind_arrow_keys_internal
- was redundant
- - bind_arrow_keys_internal now takes a Keymap argument and handles
- saving and restoring _rl_keymap; changed bind_arrow_keys
- accordingly
-
-builtins/fc.def
- - fix from Paul Eggert to substitute the nearest history number in
- range if an out-of-range value is supplied. POSIX requires this
-
-lib/sh/pathcanon.c
- - fix from Corrina Vinschen for the special `cygdrive' prefix on
- Cygwin
-
-bashhist.c
- - split the history adding code into more pieces:
- check_history_control (char *line) checks LINE against the value
- of HISTCONTROL, returning 1 if LINE should be saved and 0 if not
-
- check_add_history (char *line) calls check_history_control and
- history_should_ignore (line) and saves the line with
- bash_add_history if the checks indicate that it should be saved
-
- maybe_add_history just calls check_add_history to set the value
- of first_line_saved
-
-bashhist.h
- - extern declaration for check_add_history()
-
-shell.c
- - don't call load_history() from the interactive shell startup
- code if history_lines_this_session is > 0, indicating that we've
- already saved some lines in the history and that we probably
- don't want to overwrite them
-
-builtins/history.def
- - call check_add_history from push_history, so `history -s xx'
- works even when in a compound command whose first line has not
- been saved. (Caveat: in a compound command when the first
- line has been saved, the line supplied to history -s will become
- part of the compound command's history entry. Of course, the
- delete_history call could remove the compound command from the
- history entirely)
-
-bashline.c
- - use sh_makepath instead of xmalloc/sprintf in
- command_word_completion_function
-
-lib/readline/complete.c
- - get_y_or_n now takes an int FOR_PAGER argument; caller changed
- If FOR_PAGER is non-zero, get_y_or_n returns appropriate values
- for a more-like pager: `newline' or `return' return 2; `q' or
- `Q' return 0
- - there is now a mini internal more-like pager for displaying a
- list of completions that exceeds the screen height (new function
- _rl_internal_pager, called from rl_display_match_list)
-
- 11/24
- -----
-command.h
- - new flag, W_TILDEEXP, says to do tilde expansion on an
- assignment word
-
-execute_cmd.c
- - fix_assignment_words now sets W_TILDEEXP for assignment word
- arguments to `assignment builtins'
-
-general.c
- - bash_tilde_expand now takes a second argument indicating whether
- or not it's being invoked in an `assignment context'
-
-general.h
- - change extern declaration for bash_tilde_expand
-
-{bashline,execute_cmd,findcmd,general,variables}.c
-builtins/evalfile.c
-lib/sh/makepath.c
- - fix callers of bash_tilde_expand appropriately
-
-subst.c
- - fix callers of bash_tilde_expansion appropriately
- - add (currently commented-out) code that would tilde expand assignment
- statement arguments to assignment builtins (W_TILDEEXP flag set)
- even when the shell is in posix mode
-
-bashline.c
- - fix attempt_shell_completion to turn off
- rl_filename_completion_desired when doing command name completion,
- so no slash gets appended to the name if there happens to be a
- directory with the same name in the current directory
-
- 11/26
- -----
-lib/readline/rltech.texinfo
- - a couple of additions to the rl_stuff_char description
-
-parse.y
- - turn off echo_input_at_read in parse_string_to_word_list, so `set -v'
- doesn't give extra lines of output when doing compound array
- assignment
-
-subst.c
- - fix split_at_delims to handle skipping over a `\n' if it's a
- delimiter (use spctabnl(c) instead of whitespace(c))
-
- 11/27
- -----
-support/config.{guess,sub}
- - updated (with bash changes) to latest version from gnu.org
-
-sig.h
- - add prototype for set_signal_handler declaration
-
-builtins/setattr.def
- - add prototype to extern declaration of declare_builtin
-
-builtins/times.def
- - add no_options call, since times takes no options
-
-lib/sh/spell.c
- - add prototypes to forward declarations for midist and spdist
-
-lib/sh/strtrans.c
- - add explicit int return type to ansic_shouldquote declaration
-
-lib/readline/rldefs.h, lib/readline/{macro,readline,util,undo}.c
- - move define for SWAP to rldefs.h, removed from various C files
-
-lib/readline/vi_mode.c
- - removed define for exchange(), changed to use SWAP instead
-
-lib/readline/bind.c
- - added some static forward function declarations
- - find_boolean_var, find_string_var now take a `const char *' argument
-
-lib/readline/signals.c
- - added static forward declaration for rl_maybe_set_sighandler
-
-lib/readline/readline.c
- - add some common key bindings for the HOME and END keys in
- bind_arrow_keys_internal
-
-lib/readline/terminal.c
- - fetch the `@7' termcap string; it's sent by the END key
- - attempt to bind the terminal's END key to rl_end_of_line in
- bind_termcap_arrow_keys; I don't know why I was using `kH'
- instead of `@7'
-
-doc/builtins.1
- - remove `case', `for', `if', `until', `while' from NAME section;
- those are not shell builtins
-
- 11/28
- -----
-stringlib.c
- - new function, find_token_in_alist, takes a token value and an
- ALIST argument, and returns the string correspoinding to the
- token if found in the alist
-
-externs.h
- - new extern declaration for find_token_in_alist()
-
-subst.c
- - string_list_internal is no longer static
-
-subst.h
- - new extern declaration for string_list_internal()
-
-parse.y
- - new alist array of other tokens returned by read_token which are
- not reserved words in word_token_alist[]
- - reworked error reporting: new functions print_offending_line,
- which prints the line containing the syntax error,
- error_token_from_token, which takes the current token and tries to
- figure out its textual representation, and error_token_from_text,
- which does the old job of finding the bad token by analyzing the
- text of shell_input_line at the current index
- - report_syntax_error now tries to figure out the token that caused
- the syntax error by first looking at current_token and falling
- back to the old method of textual analysis if that fails
- - report_syntax_error doesn't say the token resulting from the textual
- analysis of the input line is an `unexpected token'; it just
- says there is a `syntax error near xxx'
- - changed conditional command error reporting to use the value
- returned by error_token_from_token if it's not null instead of
- just using the token value in the message, since current_token
- ends up being set to -1, and the text of the message from
- report_syntax_error might not be exactly right
- - change parse_string_to_word_list to set current_token to the
- offending token returned by read_token before calling yyerror()
- to make the error reporting do the right thing
-
-aclocal.m4
- - fixed typo in BASH_CHECK_LIB_TERMCAP
-
-configure.in
- - add check for isinf(3); define HAVE_ISINF_IN_LIBC if found
-
-config.h.in
- - add define for HAVE_ISINF_IN_LIBC
-
-lib/sh/snprintf.c
- - check for Inf and NaN, using isinf and isnan if they're found in
- libc
- - use the current locale for thousands separator and decimal point
- - recognize "'" flag; not implemented yet
- - fix for snprintf/vsnprintf with length of 0 and string argument of
- 0 with non-zero length
-
-builtins/read.def
- - TMOUT is now the default timeout for `read' (and select) if set,
- like ksh93 when reading from the terminal
- - edit_line (called by read -e) now just does readline's filename
- completion by setting rl_attempted_completion_function to NULL,
- since e.g., doing command completion for the first word on the
- line wasn't really useful
-
-execute_cmd.c
- - changed select_command to return failure status if select_query
- returns NULL, indicating that read_builtin returned
- EXECUTION_FAILURE
-
-doc/{bash.1,bashref.texi}
- - documented new TMOUT behavior
- - slight change to the description of the test `-ef' option
-
-doc/bashref.texi
- - added item to posix mode section describing failure behavior of
- cd when invoked in logical mode and the pathname formed by
- combining $PWD and the directory argument does not refer to an
- existing directory
-
- 11/29
- -----
-execute_cmd.c
- - fix execute_function to call dispose_function_env after
- merge_function_env if the shell is in posix mode (fixes debian
- bash bug #117673)
-
-lib/readline/readline.c
- - rl_forward -> rl_forward_char; rl_forward function for compatibility
- - rl_backward -> rl_backward_char; rl_forward function for
- compatibility
- - new functions, rl_forward_byte, rl_backward_byte, for future use
-
-lib/readline/readline.h
- - extern declarations for rl_forward_char, rl_backward_char,
- rl_forward_byte, rl_backward_byte
-
-lib/readline/{emacs_keymap,funmap,vi_keymap,vi_mode
- - rl_forward -> rl_forward_char
- - rl_backward -> rl_backward_char
-
-lib/readline/funmap.c
- - new bindable names, `backward-byte' and `forward-byte'
-
-aclocal.m4
- - new function, BASH_CHECK_MULTIBYTE, encapsulates checks for
- multibyte code
-
-config.h.in
- - add necessary defines for multibyte include files and functions
-
-configure.in
- - add call to BASH_CHECK_MULTIBYTE
-
-config-bot.h
- - add code to define HANDLE_MULTIBYTE if prerequisites are met
-
-lib/sh/xstrchr.c
- - new file, xstrchr() is strchr(3) that handles multibyte characters
-
-bashhist.c
- - first_line_saved -> current_command_first_line_saved; variable is
- now global
-
-bashhist.h
- - extern declaration for current_command_first_line_saved
-
- 11/30
- -----
-bashhist.c
- - break the code that actually calls add_history out of
- bash_add_history into a new function, really_add_history;
- bash_add_history now calls really_add_history
- - check_add_history takes a second `force' argument telling it
- whether to call bash_add_history (force == 0) or really_add_history
- (force != 0)
-
-builtins/history.def
- - in push_history, call delete_last_history if the current command
- has more than one line, the first line was saved, and
- command-oriented history is active. This takes care of deleting
- the right history element if `history -s' is used within a
- compound or multiline command
- - in push_history, call check_add_history with second argument of 1
- to skip check of current_command_line_count and add the arguments
- to history -s as a single separate history entry
-
- 12/3
- ----
-lib/readline/complete.c
- - append a slash to completed names which are symlinks to directories
- if the new variable _rl_complete_mark_symlink_dirs is non-zero
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_complete_mark_symlink_dirs
-
-lib/readline/bind.c
- - new bindable variable, `mark-symlinked-directories', mirrors the
- value of _rl_complete_mark_symlink_dirs
-
-doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo}
- - documented new `mark-symlinked-directories' variable
-
- 12/4
- ----
-variables.[ch]
- - set_pipestatus_array now takes a second argument with the number
- of processes in the array
- - changed set_pipestatus_array to just modify the value in place if
- the existing array has one element and the new array has one
- element, and to modify existing values in place if new array has
- more elements than existing array
-
-variables.c, jobs.c
- - changed set_pipestatus_array callers
-
-jobs.c
- - moved call to setjstatus() from set_job_status_and_cleanup to
- wait_for, since set_job_status_and_cleanup is part of the SIGCHLD
- signal handler call path, and race conditions accessing the
- PIPESTATUS array will result for things like
-
- while true; do date; done | cat > /dev/null
-
- 12/5
- ----
-xmalloc.h
- - don't redefine xmalloc, xrealloc, and xfree if DISABLE_MALLOC_WRAPPERS
- is #defined
-
-config.h.in
- - #undef for DISABLE_MALLOC_WRAPPERS
-
-configure.in
- - define DISABLE_MALLOC_WRAPPERS if the --with-purify option is
- supplied
-
-lib/malloc/trace.c
- - new function, malloc_trace_bin(N), traces allocations and frees
- to bucket N (uses the same type of bitmap as `busy')
-
-lib/malloc/table.c
- - fix wraparound search problem in find_entry when searching for a
- free entry when the table is full
-
- 12/6
- ----
-lib/malloc/table.c
- - keep an `overflow bucket' around to use when the table is full,
- so find_entry always returns a valid pointer when FIND_ALLOC
- is set
- - new static variable to keep a count of the number of MT_ALLOC
- entries in the mem_table
-
-lib/sh/{oslib,clktck}.c
- - if HAVE_LIMITS_H is defined, include <limits.h>
-
-lib/sh/oslib.c
- - new function, getmaxgroups() returns max number of simultaneous
- groups
- - new function, getmaxchild(), returns max number of simultaneous
- user processes
-
-general.c
- - removed forest of #defines for getmaxgroups()
-
-externs.h
- - new extern declaration for getmaxgroups()
- - new extern declaration for getmaxchild()
- - new extern declaration for isnetconn()
-
-lib/sh/netconn.c,shell.c
- - new file, isnetconn() from shell.c moved here
-
-Makefile.in, lib/sh/Makefile.in
- - necessary changes for netconn.c
-
-builtins/ulimit.def
- - changed getmaxuprc() to just call getmaxchild() and massage the
- return value appropriately
-
-{jobs,nojobs}.c
- - use the value returned by getmaxchild() in
- mark_dead_jobs_as_notified instead of static CHILD_MAX
-
-jobs.c
- - new function, compact_jobs_list, removes some number of jobs from
- the jobs table and reallocates the table, copying the jobs that
- are left from the old table to the new. Compaction happens from
- the beginning of the list and removes dead jobs, and we make sure
- to keep the last CHILD_MAX jobs as POSIX.2 requires
- - call compact_jobs_list from stop_pipeline if we're in a subshell,
- there are no free jobs in the jobs table, and the jobs table is
- at or above some maximum limit
-
-execute_cmd.c
- - change eval_arith_for_expr to set this_command_name to `((' before
- calling evalexp, since it might be changed by evaluating the
- loop body between evalexp calls
-
-trap.c
- - change reset_signal to turn off the SIG_TRAPPED flag for the
- given signal, so shell builtins and functions running in command
- substitutions don't run the signal handlers (traps are not supposed
- to be inherited by command substitutions)
-
-parse.y
- - changed parse_string_to_word_list to turn off alias expansion
- while parsing the array assignment
-
- 12/9
- ----
-alias.c
- - fix add_alias so that redefining an alias's value also resets the
- EXPANDNEXT flag
-
- 12/10
- -----
-parse.y
- - new function, token_is_assignment, called to check whether the text
- before `=' makes up a valid assignment token before trying to parse
- a compound assignment statement
- - new function, parse_compound_assignment, to parse a compound
- assignment statement instead of using parse_matched_pair; handles
- comments and error reporting in the parser instead of waiting until
- expansion time
- - changed parse_compound_assignment and parse_string_to_word_list to
- allow reserved words in compound array assignments
-
-lib/readline/doc/rltech.texinfo
- - changed the documentation for rl_callback_read_char and
- rl_callback_handler_remove to say what happens to the terminal
- settings and what needs to be done to reset them
-
- 12/11
- -----
-bashline.c
- - add emacs_edit_and_execute_command, bound to C-xC-e, like vi-mode
- `v' command
- - add bindable command name `edit-and-execute-command', bound to
- run emacs_edit_and_execute_command()
-
-lib/glob/strmatch.c
- - add support for ksh93-like [:word:] character class (isalnum + `_')
-
-doc/{bash.1,bashref.texi}
- - add note to section describing lists to clarify that a sequence of
- one or more newlines may be used to delimit a command, equivalent
- to a semicolon
- - document new [:word:] pattern matching character class
-
-doc/bash.1, lib/readline/doc/rluser.texinfo
- - document `edit-and-execute-command' and its default emacs-mode
- binding
-
-include/chartypes.h
- - add defines for TOCTRL and UNCTRL if they're not already defined
-
-lib/readline/chardefs.h
- - #undef UNCTRL if it's defined to avoid cpp redefinition warnings
-
-lib/sh/strtrans.c
- - add \cX (Control-X) escape for $'...' to ansicstr()
- - change ansic_quote() to allocate at least four chars for each char
- in the string argument, to account for \0xx octal values
- - change ansic_quote() to no longer call sprintf for non-printable
- characters; just translate the string to octal directly
-
-print_cmd.c
- - change xtrace_print_word_list to call ansic_quote() if
- ansic_shouldquote() indicates that there are nonprinting characters
- in a word
-
-builtins/type.def
- - changed deprecated long option parsing to just replace the word
- in the list with the equivalent short option (-type -> -t) instead
- of removing words from the list
- - changed describe_command to take a single flags argument instead
- of two int args; changed caller
- - type now has two new options: -f suppresses function lookup (like
- command), and -P forces a PATH search for the name(s)
-
-builtins/common.h
- - flags for describe_command are here
- - changed extern declaration of describe_command
-
-builtins/command.def
- - changed call to describe_command to use flags from common.h, and
- the right number of arguments
-
-doc/{bash.1,bashref.texi}
- - documented new -f and -P options to `type'
-
- 12/12
- -----
-lib/readline/rldefs.h
- - fixed prototype for _rl_strnicmp
-
-execute_cmd.c
- - select_query now takes a new argument, an int flag saying whether
- or not to print the menu the first time through the loop. An
- empty line in response to the prompt will always cause the menu
- to be reprinted
- - changed execute_select_command to cause select_query to reprint
- the menu only if REPLY is set to NULL, if KSH_COMPATIBLE_SELECT
- is defined
-
-config-top.h
- - define KSH_COMPATIBLE_SELECT, with a comment about its meaning
-
-lib/readline/readline.c
- - change rl_insert_comment to toggle if given an explicit numeric
- argument: if the first characters on the line don't specify a
- comment, insert one; if they do, delete the comment text
-
-doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo}
- - documented new behavior of insert-comment with a numeric argument
-
- 12/13
- -----
-lib/malloc/watch.c
- - new file, implements watchpoint functions
-
-lib/malloc/watch.h
- - new file, define some `events' for watchpoints and extern function
- and variable declarations for watchpoint code
-
-lib/malloc/imalloc.h
- - #define MALLOC_WATCH if MALLOC_DEBUG is defined
- - add __P define as in include/stdc.h if not already defined
-
-lib/malloc/malloc.c
- - remove __P define, now in imalloc.h
- - include watch.h if MALLOC_WATCH is defined
- - added calls to _malloc_ckwatch in internal_malloc, internal_free,
- and internal_realloc
-
-include/stdc.h
- - augment __P define to allow prototypes if PROTOTYPES is defined
-
-lib/readline/rlstdc.h
- - augment PARAMS define to allow prototypes if PROTOTYPES is defined
-
-lib/malloc/Makefile.in, Makefile.in
- necessary changes to include watch.c in libmalloc
-
-lib/readline/readline.c
- - fix rl_delete_text to make sure that the starting position is >= 0
- - _rl_init_line_state (called by readline via readline_initialize)
- now sets rl_mark to 0
- - rl_get_{next,previous}_history set rl_mark to 0 if rl_point is at
- the end of the line and rl_end otherwise in emacs mode
-
-lib/readline/kill.c
- - rl_yank_nth_arg_internal and rl_paste_clipboard now set the mark
- at point before calling rl_insert_text, like rl_yank
- - rl_kill_full_line now resets rl_mark to 0
- - rl_kill_line and rl_backward_kill_line now set rl_mark to the
- point after the kill in emacs mode
- - rl_kill_word and rl_backward_kill_word now set rl_mark to the
- point after the kill in emacs mode
- - rl_unix_word_rubout and rl_unix_line_discard now set rl_mark to
- the point after the kill in emacs mode
-
-lib/readline/search.c
- - noninc_search saves and restores the mark, since it can be changed
- while reading the search string
- - noninc_dosearch sets the mark at the end of the line, making the
- region bound the `inserted' text since rl_point is set to 0
- - rl_history_search_internal sets the mark at the end of the line,
- for the same reason
-
-lib/readline/isearch.c
- - rl_search_history now saves and restores the mark
- - if no matching lines are found at all when doing an isearch, leave
- point where it was instead of moving it to the end of the line
-
- 12/17
- -----
-lib/readline/rlmbutil.h
- - new file, place for multi-byte character defines and extern
- declarations
-
-lib/readline/{bind.c,readline.c,rlprivate.h}
- - new bindable variable, `byte-oriented', tracks value of
- rl_byte_oriented variable
-
-lib/readline/mbutil.c
- - new file, with multibyte char utility functions
-
-lib/readline/{complete,display,readline,util,vi_mode}.c
- - new code for multibyte characters, derived from IBM patch
-
- 12/18
- -----
-lib/sh/tmpfile.c
- - include posixtime.h for time() extern declaration
-
-support/bashversion.c
- - include <unistd.h> if it's available
-
-lib/readline/{histexpand,input,isearch,search}.c
- - new code for multibyte characters, derived from IBM patch
-
-lib/readline/readline.h
- - include rltypedefs.h
-
- 12/19
- -----
-lib/readline/complete.c
- - slight change to mark-directories code to avoid adding a slash if
- point is at the end of the line (rl_line_buffer[rl_point] == '\0')
- and the previous character was a slash
- - change printable_part to not return empty pathnames, which could
- happen when completing filenames and a filename with a trailing
- slash was passed as the argument. If the portion following the
- trailing slash is NULL, ignore it and look for a previous slash.
- If there's no previous slash, just return the filename argument
- - new variable, rl_completion_mark_symlink_dirs, mirrors the value
- of (user-settable with a variable) _rl_complete_mark_symlink_dirs
- but may be modified by application-specific completion functions
- when appropriate (set in rl_complete_internal and rl_menu_complete)
-
-lib/readline/readline.h
- - extern declaration for rl_completion_mark_symlink_dirs
-
-pcomplete.c
- - if one of the actions is CA_DIRECTORY, set
- rl_completion_mark_symlink_dirs to indicate that we want the
- trailing slash (might have to relax this)
-
-lib/readline/doc/rltech.texinfo
- - documented rl_completion_mark_symlink_dirs variable
-
-lib/readline/doc/rluser.texinfo, doc/bash.1
- - documented the fact that `complete -d' and `complete -o dirnames'
- force readline to append a slash to symlinks to directories
-
-builtins/enable.def
- - changed enable_shell_builtin to disallow enabling disabled
- builtins in a restricted shell
-
-doc/{bash.1,bashref.texi}
- - documented new enable behavior in restricted shells
-
-doc/Makefile.in
- - new rule to make an `RBASH' file documenting the restrictions
- imposed by a restricted shell
-
-expr.c
- - broke the code that evaluates variables and returns results out
- of readtok() into a new function: expr_streval()
- - expr_streval() now performs the standard unset variable error
- behavior if `set -u' has been executed and it's asked to look
- up an unset variable
- - broke the code that frees up the expression context stack into
- a new function: expr_unwind()
-
-variables.c
- - fixed bind_int_variable so it handles array element assignment,
- so expressions like `b[7]++' and `b[0] = 42' work right
- - new function, get_variable_value, returns the string value of
- the SHELL_VAR * passed as an argument
- - get_string_value now calls get_variable_value with a non-null
- result from find_variable
-
- 12/20
- -----
-lib/readline/rlmbutil.h, mbutil.c
- - combined _rl_find_next_mbchar and _rl_find_next_nonzero_mbchar into
- a single function
- - combined _rl_find_prev_mbchar and _rl_find_prev_nonzero_mbchar into
- a single function
-
-lib/readline/{display,readline,vi_mode}.c
- - changed callers of _rl_find_next_mbchar and
- _rl_find_next_nonzero_mbchar
-
-lib/readline/{complete,display,histexpand,readline,vi_mode}.c
- - changed callers of _rl_find_prev_mbchar and
- _rl_find_prev_nonzero_mbchar
-
- 12/20
- -----
-lib/sh/mktime.c
- - new file, from glibc/gawk, compiled in if system doesn't have a
- working mktime(3)
-
-lib/sh/strftime.c
- - new file, from gawk, compiled in if system doesn't have a
- working strftime(3)
-
-lib/sh/Makefile.in, Makefile.in
- - changes for mktime.c, strftime.c
-
-configure.in
- - call AC_FUNC_MKTIME, AC_STRUCT_TM, AC_STRUCT_TIMEZONE
- - call AC_REPLACE_FUNC(strftime)
-
-config.h.in
- - add defines for TM_IN_SYS_TIME, HAVE_TZSET, HAVE_TM_ZONE,
- HAVE_STRUCT_TM_TM_ZONE, HAVE_STRFTIME
-
-externs.h
- - provide an extern declaration for strftime if HAVE_STRFTIME is
- not defined and NEED_STRFTIME_DECL is
-
-lib/tilde/tilde.h
- - header files should not include <config.h>
-
-parse.y
- - replace code in decode_prompt_string that chops up value returned
- by ctime(3) with calls to strftime -- as a result, the expansion
- of \@ has changed slightly (since it depends on the locale)
- - added new \D{format} prompt string escape; `format' is passed to
- strftime(3). Empty format is the same as `%X' (locale-specific
- representation of the current time)
- - combined cases for '\\', '\a', '\e', and '\r' in same case branch
- in decode_prompt_string
-
-doc/{bash.1,bashref.texi}
- - documented new \D{format} prompt string expansion
-
-builtins/printf.def
- - use ISO C PRIdMAX instead of INTMAX_CONV
- - pass length of format modifiers to mklong instead of computing it
- with strlen()
-
-lib/sh/{fmtulong,fmtullong}.c
- - changes from Paul Eggert to make more general
-
-arrayfunc.c
- - when converting a variable to an array, make sure to unset the
- dynamic_value and assign_func members of the struct variable,
- since they're not valid anymore
-
- 12/27
- -----
-configure.in
- - use AC_HELP_STRING in AC_ARG_WITH and AC_ARG_ENABLE
- - remove AC_ARG_ENABLE for largefile, since AC_SYS_LARGEFILE adds
- one
-
- 1/2/2002
- --------
-{alias,bashline,execute_cmd,general,shell,subst,variables,arrayfunc}.c,general.h
- - changed some calls to strchr to calls to xstrchr for multibyte
- characters
-
-include/shmbutil.h
- - add extern declaration for xstrchr to avoid including externs.h
- where it's not appropriate
-
-{braces,make_cmd,pathexp,subst,arrayfunc}.c, lib/sh/xstrchr.c
- - include shmbutil.h
-
-{stringlib,subst}.c, {externs,subst}.h
- - moved substring() from subst.c to stringlib.c, moved declaration
- from subst.h to externs.h
-
-lib/sh/xmbsrtowcs.c
- - new file, replacement function for mbsrtowcs
-
-lib/sh/Makefile.in
- - add entries for xmbsrtowcs.c
-
-Makefile.in
- - add dependencies on shmbutil.h to appropriate object files
-
-lib/glob/strmatch.c
- - break character-class testing out into separate function:
- is_cclass, in prep for multibyte changes
-
-{braces,make_cmd}.c
- - changes for multibyte characters
-
-builtins/printf.def
- - changes from Paul Eggert to just use intmax_t everywhere an
- int/long/quad is needed and print with "%ld" if the number
- fits in a long and %PRIdMAX otherwise
- - remove getlong, getulong, getllong, getullong, since they're
- no longer needed
- - use a new type `floatmax_t' to print floating point numbers, the
- widest-available floating point type (like `intmax_t'); new
- function `getfloatmax' that calls strtold or strtod as appropriate
- - remove getdouble, getldouble, since they're no longer needed
-
-lib/sh/fmtumax.c
- - new file, string-to-[u]intmax_t conversion, just includes
- fmtulong.c with the right defines
-
-Makefile.in, lib/sh/Makefile.in
- - additions for fmtumax.c
-
-bashtypes.h
- - include <inttypes.h> if it's available
-
-expr.c
- - arithmetic is now in intmax_t instead of long
-
-externs.h
- - extern declaration for fmtumax
- - change extern declarations for evalexp, itos, inttostr,
- uitos, uinttostr since they now return or use intmax_t instead
- of long
-
-{execute_cmd,general,mailcheck,subst,variables}.c, parse.y
-{array,general,subst,test,variables}.h
-lib/sh/{itos,netopen}.c
-builtins/{bashgetopt,common}.c, builtins/common.h
-builtins/{break,fc,history,jobs,let,printf,pushd,read,shift,wait}.def
- - changes for intmax_t shell arithmetic conversion
-
-doc/{bashref.texi,bash.1}
- - documented long->intmax_t shell arithmetic conversion
-
-sig.c
- - in initialize_terminating_signals, if we've already trapped a
- terminating signal, don't reset the signal handler for it
-
- 1/3
- ---
-{arrayfunc,pathexp}.c, parse.y
- - changes for multibyte chars
-
-parse.y, lib/sh/strtrans.c
- - moved ansiexpand from parse.y to lib/sh/strtrans.c
-
-parse.y, locale.c
- - moved mk_msgstr and localeexpand from parse.y to locale.c
-
-parse.y
- - new function, yy_input_name, returns name of input file from
- bash_input.name
- - broke the code that parses ((...)) constructs out of read_token
- into a new function, parse_dparen()
-
-externs.h
- - new extern declaration for ansiexpand(), mk_msgstr(), and
- localeexpand()
-
-input.h
- - new extern declaration for yy_input_name()
-
-{error,locale}.c
- - use yy_input_name for error and other messages
-
-execute_cmd.c
- - change shell_execve to make sure that the file is executable
- before looking at the interpreter to find out why the execve()
- failed (avoids misleading error message)
-
-lib/glob/glob.c
- - move code that matches leading `.' and skips those filenames into
- a separate function: skipname(), so there can be unibyte and
- multibyte versions of that function
-
- 1/7
- ---
-subst.c
- - more changes for multibyte characters
-
-print_cmd.c
- - change semicolon() so it doesn't output a `;' immediately after a
- newline, since that results in a null command, which is a syntax
- error
-
-variables.c
- - fix indirection_level_string to turn off set -x while evaluating
- PS4
-
- 1/8
- ---
-builtins/set.def
- - make -o options into one struct, instead of separate structs for
- option names corresponding to flags and non-flag option names.
- This has the side effect of sorting the option names in output
-
-lib/glob/glob.c
- - new function, mbskipname(), multibyte char version of skipname()
- - removed all #ifndef SHELL code, this will never be used outside
- the shell
-
-include/posixdir.h
- - move REAL_DIR_ENTRY define here from lib/glob/glob.c
-
-lib/glob/glob_loop.c
- - new file, included in glob.c for unibyte and multibyte versions of
- glob_pattern_p
- - added some forward static function declarations with prototypes
- - more changes for multibyte character handling
-
-lib/glob/Makefile.in
- - make glob.c depend on glob_loop.c
- - changes for xmbsrtowcs.[co]
-
-lib/glob/xmbsrtowcs.c
- - moved here from lib/sh, since the matching functions use it, and
- libglob.a is linked after libsh.a
-
- 1/9
- ---
-lib/glob/smatch.c
- - new file, with strmatch (now xstrmatch) and associated functions,
- with changes for multibyte chars
-
-lib/glob/sm_loop.c
- - new file, included by smatch.c, with `generic' versions of matching
- functions that are compiled twice: once each for single-byte and
- multibyte characters
-
-lib/glob/strmatch.c
- - strip out everything except strmatch(), which either calls fnmatch
- (if HAVE_LIBC_FNM_EXTMATCH is defined) or xstrmatch
-
-lib/glob/collsyms.c
- - changes for multibyte chars
-
-lib/glob/Makefile.in, Makefile.in
- - changes for new source files
-
- 1/10
- ----
-lib/readline/complete.c
- - new function, rl_completion_mode (rl_command_func_t *func), returns
- the appropriate value to pass to rl_complete_internal depending on
- FUNC and the value of `show-all-if-ambiguous'. This allows
- application completion functions to present the same interface as
- rl_complete
-
-lib/readline/readline.h
- - new extern declaration for rl_completion_mode()
-
-lib/readline/doc/rltech.texinfo
- - documented rl_completion_mode
-
-lib/readline/readline.[ch]
- - bumped the version number to 4.3, changing the relevant cpp defines
-
-configure.in
- - require that an installed readline version be at least readline-4.3
-
-bashline.c
- - converted bash-specific completion functions to use
- rl_completion_mode instead of passing TAB unconditionally
-
-builtins/bashgetopt.c
- - the `#' option specifier now means a required numeric argument,
- not an optional one
-
-builtins/type.def
- - when converting [-]-{path,type,all} to -[pta], don't bother
- freeing and reallocating the option string; just change opt[1]
- and null opt[2]
-
-lib/sh/snprintf.c
- - support %ls/%S and %lc/%C for wide strings and characters,
- respectively, if HANDLE_MULTIBYTE is defined
-
-mailcheck.c
- - don't print a message about new mail if the file has not grown,
- even if the access time is less than the modification time
-
- 1/14
- ----
-lib/readline/readline.c
- - new function, rl_replace_line, to replace the readline line buffer
- with the text supplied as an argument
- - new function, rl_replace_from_history, replaces readline line
- buffer with text from history entry passed as argument (undocumented,
- not in readline.h because it requires a definition of
- HIST_ENTRY for the prototype)
-
-lib/readline/readlne.h
- - new extern declaration for rl_replace_line
-
-lib/readline/doc/rltech.texinfo
- - documented rl_replace_line
-
-lib/readline/{isearch,readline,search}.c
- - use rl_replace_line and rl_replace_from_history where appropriate
-
-lib/readline/readline.c
- - broke the code that sets point after moving through the history
- (_rl_history_preserve_point and _rl_history_saved_point) out
- into a separate function, _rl_history_set_point()
-
-lib/readline/{complete.c,rlprivate.h}
- - find_completion_word -> _rl_find_completion_word
- - free_match_list -> _rl_free_match_list
-
-lib/readline/complete.c
- - postprocess_matches and _rl_free_match_list now return immediately
- if passed a null match list
-
-variables.c
- - new function, find_local_variable, finds a local variable by name
- at the current variable context
- - in find_variable_internal, call find_local_variable before searching
- any of the temporary environments if variable_context > 0 (meaning
- we're in a shell function). This lets a local variable
- override a variable whose value was passed in the `function
- environment'
-
- 1/15
- ----
-variables.h, execute_cmd.c
- - declare variables describing the temporary environments in
- variables.h instead of in C files
-
-findcmd.c, builtins/setattr.def
- - instead of calling find_tempenv_variable, use find_variable_internal
- and check whether the returned SHELL_VAR * has the tempvar
- attribute
-
-variables.c
- - tentative change to lookup order in find_variable_internal so that
- function local variables are found before variables in
- function_env when executing a shell function
- - change make_local_variable to handle making a local variable when
- a variable with the same name already appears in one of the
- temporary environments
- - broke the body of make_var_array out into a new function:
- static char **make_env_array_from_var_list (SHELL_VAR **vars)
- - new function, make_var_array_internal, takes a hash table to look
- in and a pointer to a mapping function and returns a char **
- environment-style list
- - make_var_array now just calls make_var_array_internal
- - new mapping function, local_and_exported, returns all local variables
- in the current variable context with the export attribute set
- - new function, make_local_export_array, returns an environment-style
- char ** array of exported local variables in current context
- - change environment creation order in maybe_make_export_env to
- add variables to the environment in opposite order that
- find_variable_internal uses. This means that local variables in
- shell functions override variables with the same name in the
- function_env
- - change make_local_variable to set the initial value of the
- variable it creates to NULL to make the `is set' and `is null'
- tests that the expansion code does work right
- - change make_local_variable to inherit the value of a variable with
- the same name from the temporary enviroment
-
- 1/16
- ----
-Makefile.in
- - link bashversion with buildversion.o instead of version.o, for
- cross-compiling. version.o is for the target system;
- buildversion.o is for the build system
-
-error.c
- - add line numbers to internal_error() messages if the shell is
- not interactive and running a shell script or a -c command
- - report_error now prints non-zero line numbers for non-interactive
- shells
-
-test.c
- - test_syntax_error now calls builtin_error() instead of printing
- its own messages
-
-builtins/common.c
- - builtin_error now prints line numbers if a non-interactive shell
- is running a shell script or a -c command
-
-print_cmd.c
- - in cprintf, remove free_argp, since it's not used
-
-builtins/history.def
- - make `history -n' increment the number of history lines in this
- session by the number of lines read from the history file
-
-arrayfunc.c
- - fix array_value_internal to expand the subscript even if the
- variable is unset, so side effects produced by the arithmetic
- evaluation will take place
-
-lib/readline/doc/{rluser,rltech}.texinfo
- - some fixes for printing in @smallbook format from Brian
- Youmans
-
- 1/17
- ----
-jobs.h
- - new PRUNNING, PSTOPPED, PDEADPROC defines for PROCESSes, analogous
- to RUNNING, STOPPED, and DEADJOB defines for jobs
-
-jobs.c
- - use PS_RUNNING, PS_DONE, PS_STOPPED values for `running' field
- of a PROCESS
- - find_pipeline and find_job now take an additional flags argument
- that, if non-zero, means to find only running processes; changed
- all callers
- - changed calls to find_pipeline and find_job made from waitchld
- to find only running processes
- - find_pipeline takes a third argument: an int *. If it looks in
- the jobs list to find the pid, and the arg is non-null, it passes
- the job index back to the caller. Used to avoid calls to
- find_pipeline immediately followed by find_job with the same PID
-
-nojobs.c
- - a couple of changes to make sure that set_pid_status is never
- called with a pid argument of 0 or -1
-
-trap.c
- - change trap_handler to longjmp to wait_intr_buf (set by wait_builtin)
- if a signal is received for which a trap has been set during
- execution of the wait builtin (need to include builtins.h and
- builtins/builtext.h and declare some extern variables for the
- right things to check)
- - new variable to keep track of which signal caused the longjmp to
- wait_intr_buf, set by trap_handler (wait_signal_received)
-
-builtins/wait.def
- - set the return value of wait when a longjmp(wait_intr_buf, 1) is
- done to 128 + wait_signal_received
-
-{jobs,nojobs}.c
- - set wait_signal_received to SIGINT in wait_sigint_handler before
- the longjmp(wait_intr_buf, 1)
-
- 1/18
- ----
-bashline.c
- - turn off rl_filename_completion_desired when completing a command
- name with a single match only if the first char of that match is
- not a `/'
- - if there are multiple identical matches for a command name in
- attempt_shell_completion, turn off rl_filename_completion_desired
- if the first char is not a `/' to avoid readline appending a
- slash if there's a directory with the same name in the current
- directory
-
- 1/22
- ----
-lib/readline/complete.c
- - new variable, _rl_page_completions, to control whether we want to
- run the internal pager when listing completions (defaults to 1)
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_page_completions
-
-lib/readline/bind.c
- - new bindable variable, `page-completions', controls value of
- _rl_page_completions
-
-lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
- - documented `page-completions' variable
-
-Makefile.in
- - use $(INSTALL_SCRIPT) instead of $(INSTALL_PROGRAM) to install
- `bashbug'
-
-aclocal.m4
- - fix small quoting problem in RL_LIB_READLINE_VERSION macro
-
-lib/readline/terminal.c
- - fetch and save terminal's `vs' and `ve' cursor control attributes
- - fetch and save terminal's `kI' attribute (string sent by Insert)
- - new function, _rl_set_cursor, sets cursor to normal (insert mode)
- or very visible (overwrite mode)
-
-lib/readline/readline.c
- - new global variable, rl_insert_mode
- - new function to toggle overwrite mode, rl_overwrite_mode
- - each new line starts in insert mode
- - switching to vi mode or emacs mode resets to insert mode
- - reset cursor to normal before returning line
- - _rl_replace_text now returns the number of characters inserted,
- the return value from rl_insert_text
- - new function, _rl_insert_or_replace_text (const char *string, int insert),
- either inserts STRING or replaces the number of chars in STRING
- with STRING starting at rl_point, depending on value of INSERT
- - renamed rl_insert to _rl_insert_char, rl_insert just calls
- _rl_insert_char with the same arguments when in insert mode
- - new function, _rl_overwrite_char, handles self-insert in overwrite
- mode. Does multibyte chars by reading an entire multibyte character
- before entering overwrite loop
- - new function, _rl_overwrite_rubout, handles RUBOUT when in
- overwrite mode, called from rl_rubout
- - new function, _rl_rubout_char, old body of rl_rubout; rl_rubout
- calls this when not in overwrite mode
-
-lib/readline/readline.h
- - extern declarations for rl_insert_mode and rl_overwrite_mode()
-
-lib/readline/rldefs.h
- - define constants for values of rl_insert_mode
-
-lib/readline/rlprivate.h
- - extern declarations for _rl_set_cursor and _rl_set_insert_mode
- - change type of _rl_replace_text to return int
- - extern declarations for _rl_insert_char, _rl_rubout_char
-
-lib/readline/funmap.c
- - new bindable name `overwrite-mode', bound to rl_overwrite_mode
-
-lib/readline/rlconf.h
- - define CURSOR_MODE if you want the cursor to show insert or
- overwrite mode (only available if both `vs' and `ve' capabilities
- are present)
-
-lib/readline/{complete,parens,readline,search,vi_mode}.c
- - change calls to rl_insert to _rl_insert_char
-
-lib/readline/{readline,search}.c
- - change calls to rl_rubout to _rl_rubout_char to avoid overwrite
- mode problems
-
-lib/readline/vi_mode.c
- - fix rl_vi_overstrike to just call _rl_overwrite_char, which
- handles multibyte chars
-
-lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1
- - document new `overwrite-mode' command
-
- 1/23
- ----
-lib/readline/readline.c
- - return 0 immediately from rl_insert_text if the string to insert
- is NULL or ""
-
-bashline.c
- - if a numeric argument is given to one of the bash-specific glob
- pattern completion functions (including TAB), append a `*' to
- the word before generating matches
- - in attempt_shell_completion, when doing glob completion, only
- set the match list to NULL if rl_completion_type == TAB and
- there is more than one completion. This permits listing completions
- with double tabs and displaying ambiguous completions
- - new function, bash_glob_complete_word, appends a `*' to the word
- to be completed and then globs it. It uses a new filename
- quoting function (bash_glob_quote_filename) to avoid quoting
- globbing characters in the filename if there are no matches or
- multiple matches
-
-lib/readline/complete.c
- - set completion_changed_buffer to 0 in rl_complete_internal if
- no matches were produced by the completion generator function
- - new variable, rl_completion_suppress_append, suppresses appending
- of rl_completion_append_character. Settable by application
- completion functions, always 0 when application completion
- functions are called (set to 0 by rl_complete_internal and
- rl_menu_complete)
- - broke the code that assigns default values to readline completion
- variables out of rl_complete_internal and rl_menu_complete into
- a new function, set_completion_defaults (int what_to_do)
-
-lib/readline/readline.h
- - extern declaration for rl_completion_suppress_append
-
-lib/readline/doc/rluser.texinfo, doc/bash.1
- - documented behavior of glob-expand-word and glob-list-expansions
- when supplied a numeric argument
- - documented glob-complete-word
-
-lib/readline/doc/rltech.texinfo
- - documented rl_completion_suppress_append
-
- 1/24
- ----
-lib/readline/text.c
- - new file, text and character handling functions from readline.c
-
-lib/readline/misc.c
- - new file, miscellanous bindable functions and their supporting
- code from readline.c
-
-Makefile.in, lib/readline/Makefile.in
- - changes for text.c, misc.c
-
-lib/readline/bind.c
- - change ISKMAP case of rl_invoking_keyseqs_in_map to output
- ESC as "\M-" instead of "\e" -- it's closer to the documentation
- - change _rl_get_keyname to output ESC as \e instead of \C-[
- (it's easier to understand)
-
-pcomplete.h
- - new flag, COPT_NOSPACE
-
-builtins/complete.def
- - new `-o nospace' option for complete and compgen (though it doesn't
- really do anything for compgen, since that doesn't hand anything
- off to readline)
-
-bashline.c
- - if a programmable completion specifies COPT_NOSPACE, set
- rl_completion_suppress_append = 1
-
-lib/readline/doc/rluser.texinfo
- - documented new `-o nospace' option to complete and compgen
-
-doc/{bash.1,bashref.texi}
- - documented $'\cX' escape sequence (forgot to before)
-
- 1/28
- ----
-variables.c
- - make_new_variable now takes the HASH_TABLE * as its second
- argument; changed callers
- - new function, bind_variable_in_table, takes the HASH_TABLE * as
- its third paramter; bind_variable calls bind_variable_in_table
- with shell_variables as third argument
-
-variables.h
- - new struct var_context, variable context (per-scope -- global,
- function local, etc.)
-
-variables.[ch],builtins/common.[ch]
- - moved functions that push and pop a variable context from
- builtins/common.c to variables.c; move extern function
- declarations to variables.h
- - new function, all_local_variables
- - variable_in_context is now static, used only by all_local_variables
-
-variables.[ch],execute_cmd.c
- - push_context now takes the function name as an argument for
- future use
- - push_context takes an indication of whether or not the function is
- executing in a subshell and saves the positional parameters only
- if not in a subshell
- - new functions for managing a stack of variable contexts and
- scopes: new_var_context, dispose_var_context, push_var_context,
- pop_var_context, push_scope, pop_scope
-
-builtins/declare.def
- - call all_local_variables instead of map_over (...) in declare_internal
- - don't call make_local_variable if we're looking at functions
- ((flags_on & att_function) != 0), since it's wasted
- - make sure VAR is set to NULL if check for variable_context fails
- and we didn't just create or fetch a local variable in
- declare_internal
- - in non-function branch of declare_internal, only call find_variable
- if VAR is NULL -- if it's not null, we just created or fetched a
- local variable and don't need to do it again
-
- 1/29
- ----
-variables.[ch]
- - the temporary environments (temporary_env, builtin_env, function_env)
- are now HASH_TABLEs instead of argv-style arrays of strings (this
- is an intermediate step on the way to the new lcc-inspired symbol
- table scope structure)
- - new internal attribute for variables: att_propagate. This means
- to propagate the value out of the temporary environment up the
- (for now implicit) chain of variable scopes when the containing
- temporary environment is deleted
-
-variables.c
- - assign_in_env now adds to the HASH_TABLE temporary_env instead
- of making environment-style strings in an array of strings
- - changed the way the temporary environments are merged into the
- shell variable table to account for the new HASH_TABLE temp
- environments
- - changed the way the export environment is created due to the new
- structure of the temporary environments
- - new function, bind_variable_internal (name, value, table), binds
- NAME to have VALUE in TABLE without searching the temporary
- environments
- - removed: shell_var_from_env_string, bind_name_in_env_array
- - variable_in_context now checks the att_local attribute and makes
- sure the variable is not invisible
- - local_and_exported now makes sure the variable is not invisible
-
-execute_cmd.c
- - we no longer need to copy the temporary environment to function_env
- or builtin_env, we can simply use variable assignments
-
-{findcmd,subst,variables}.c, builtins/{declare,setattr}.def
- - since variables from the temporary environments are no longer turned
- into SHELL_VARs on the fly, don't dispose the SHELL_VAR returned
- by find_variable or find_variable_internal
- - need to savestring() the value returned by find_variable if it has
- the tempvar attribute before calling bind_variable on it, because
- bind_variable will search and bind into the temporary environments
- and will free the old value before binding the new. For temporary
- environments, these two pointers will be the same, and
- bind_tempenv_variable will end up using freed memory
-
-builtins/{declare,setattr}.def
- - set the att_propagate attribute when exporting or making readonly
- variables from the temp environment (i.e., `var=value declare -x var'
- or `var=value export var' sets the propagate attribute on the entry
- for `var' in the temporary environment HASH_TABLE)
-
-lib/readline/isearch.c
- - ^W when reading isearch string yanks the current word out of the
- current line into the search string, skipping the portion already
- matched
- - ^Y when reading isearch string yanks the rest of the current line
- into the search string, skipping the portion already matched
-
- 1/30
- ----
-{print_cmd,variables}.c
- - moved indirection_level_string() from variables.c to print_cmd.c
-
-{externs,variables}.h
- - moved extern declaration of indirection_level_string to externs.h
-
-{general,variables}.c
- - moved assignment() from variables.c to general.c
-
-{general,variables}.h
- - moved extern declaration of assignment() to general.h
-
-{externs,input}.h
- - moved extern declaration of decode_prompt_string to externs.h
-
-print_cmd.c
- - include flags.h, don't include stdc.h
-
-variables.c
- - moved some functions around to group functions better
- - changed new_shell_variable to explicitly initialize each member
- of the created struct variable instead of calling bzero()
- - make_new_variable now just calls new_shell_variable instead
- of duplicating what it does
- - removed some code in bind_function that duplicated what
- new_variable does on the newly-created SHELL_VAR
- - since there are no local function variables (functions are always
- made at the global scope), kill_all_local_variables() doesn't
- need to consider functions
-
- 1/31
- ----
-variables.c
- - sort the array of special variables
- - short-circuit the search in stupidly_hack_special_variables if
- the passed name can't be found in the rest of the array
- (that is, if name[0] < special_vars[i].name[0])
-
-lib/readline/history.c
- - unstifle_history() was returning values exactly opposite of
- the documentation
-
-lib/readline/doc/{hsuser.texinfo,history.3}
- - clarified the unstifle_history() documentation a little
-
- 2/4
- ---
-variables.c
- - in bind_variable, don't call bind_tempenv_variable after a
- find_tempenv_variable succeeds -- just change the value inline.
- There's no reason to look it up twice
- - change makunbound to only call stupidly_hack_special_variables
- if we're not unsetting a function
-
-variables.[ch]
- - new function, unbind_function, like makunbound but doesn't mess
- with previous contexts or calling stupidly_hack_special_variables
-
-builtins/set.def
- - change unset_builtin to call either unbind_func or unbind_variable
-
-builtins/getopts.def
- - call unbind_variable(name) instead of makunbound(name, shell_variables)
-
- 2/5
- ---
-lib/glob/sm_loop.c
- - use malloc instead of xmalloc in BRACKMATCH and handle failures
-
-error.c
- - add extern declaration of executing_line_number with prototype,
- since execute_cmd.h can't be included without including other
- files
-
-lib/readline/parens.c
- - include <unistd.h>
-
-lib/malloc/stats.c
- - include <unistd.h>
- - add extern declaration of malloc_free_blocks() with prototype
-
-pathexp.c
- - added some forward declarations with prototypes for static functions
-
-lib/readline/rlprivate.h
- - removed declarations of rl_untranslate_keyseq, rl_discard_argument,
- rl_stop_output, rl_alphabetic since they appear in readline.h
-
- 2/6
- ---
-{arrayfunc,execute_cmd,pcomplete,shell}.c
- - change calls to makunbound(name, shell_variables) to
- unbind_variable (name)
-
- 2/7
- ---
-builtins/getopt.c
- - don't defer incrementing of OPTIND when an invalid option is
- encountered until the next call to sh_getopt() -- what if OPTIND
- is reset before that next call? This means that OPTIND is always
- incremented to the next option to be handled when an option is
- returned, whether it's valid or not. This is what POSIX-2002
- says to do.
-
-syntax.h
- - new #define, CSUBSTOP
-
-mksyntax.c
- - add "-=?+" with value CSUBSTOP to the syntax table. These are the
- valid expansion operators OP in ${param[:]OPword}
-
-subst.c
- - use table lookup for CSUBSTOP in VALID_PARAM_EXPAND_CHAR
- - new flags for the string extraction functions: EX_NOALLOC. This
- indicates that the functions are being used only to skip over
- strings and the result won't be used, so the substring shouldn't
- be allocated, copied, and freed
- - new flag for string_extract: EX_VARNAME. This serves the same
- purpose as the old `varname' parameter. parameter_brace_expand()
- changed appropriately
- - extract_delimited_string and extract_dollar_brace_string now take
- an additional `flags' argument, which may include EX_NOALLOC
- - changed callers of extract_delimited_string and
- extract_dollar_brace_string appropriately
- - string_extract now understands EX_NOALLOC; callers changed
- - some smaller code cleanups
- - converted char_is_quoted(), unclosed_pair(), and skip_to_delim()
- to understand multibyte characters
-
- 2/11
- ----
-variables.[ch]
- - moved to a symbol organization inspired by lcc. The basic structure
- is no longer a HASH_TABLE, but a VAR_CONTEXT, which includes a hash
- table as one of its members. VAR_CONTEXTs are linked together to do
- variable scoping. One nice thing about this is that the entire
- symbol table doesn't need to be searched at function scope exit to
- remove local variables. Fixes problems with only one instance of
- builtin_env and function_env, even though it really is a stack
- - shell_variables is now a VAR_CONTEXT *, with a global_variables
- variable that points to the bottom of the stack for fast access
- - function-scope local variables (assignments specified on the command
- line before a function call) and function-local variables (declared
- with the `local' builtin) have been unified in the same variable
- context, replacing function_env
- - assignment statements preceding the `.' and `eval' builtins are now
- a separate variable scope VAR_CONTEXT, replacing builtin_env
- - temporary_env (a HASH_TABLE) is now the only separate environment
- - changes to export environment creation, variable binding, variable
- lookup, local variable propagation all changed to work with the
- new symbol table/scope structure
- - a SHELL_VAR no longer has a `prev_context' member; it's not needed
-
-execute_cmd.c
- - changes to push_context calls to include any temporary variables in
- temporary_env; pop_context takes care of propagating any temporary
- variables if necessary
- - calls to push_scope if `eval' or `.' is called with a list of
- preceding variable assignments, and pop_scope called at end of
- builtin's execution. pop_scope takes care of merging temporary
- variables into the shell environment when appropriate
-
-builtins/{setattr,declare}.def
- - changes to account for variable assignments preceding `local',
- `export', `readonly', `declare', etc. to work with the new
- variable scoping implementation
-
-shell.c
- - since shell_variables is now a VAR_CONTEXT, call
- delete_all_contexts() when the shell is reinitializing instead of
- delete_all_variables()
-
-builtins/common.c
- - new function, get_job_by_name(), used by execute_simple_command()
- for the `auto_resume' stuff and get_job_spec()
-
-builtins/common.h
- - new set of #defined constants for flags argument to
- get_job_by_name()
-
- 2/12
- ----
-command.h
- - new redirection operator: r_reading_string for `here strings'
-
-parse.y
- - new token, LESS_LESS_LESS, for new redirection `here string'
- operator: [N]<<< word
- - recognize LESS_LESS_LESS and create the appropriate redirection
-
-{dispose_cmd,copy_cmd,make_cmd,print_cmd}.c
- - recognize r_reading_string and do the right thing (dispose_redirects,
- copy_redirect, print_redirection, and make_redirection, respectively)
-
-redir.c
- - here_document_to_fd now takes the redirection operator as its
- second argument
- - new function, write_here_string, expands a here string and writes it
- to the here document file descriptor
- - here_document_to_fd calls write_here_string for r_reading_string
- operator
- - handle r_reading_string in do_redirection_internal() and
- stdin_redirection()
-
- 2/18
- ----
-doc/{bash.1,bashref.texi}
- - documented here strings
-
-{configure,Makefile}.in
- - bumped version number up to bash-2.05b and the release status
- to alpha1
-
-expr.c
- - make expr_streval understand that variables with the `invisible'
- attribute are really unset, and accessing such a variable when
- `set -u' is set should be an error
-
-variables.h
- - new accessor macros: var_isset(var) and var_isnull(var), test
- whether var->value is NULL
-
-{eval,subst,variables}.c, builtins/{declare,setattr}.def
- - be more consistent about using value_cell(var) instead of
- directly referencing var->value
- - use var_isset and var_isnull where appropriate
-
-builtins/help.def
- - augmented a couple of help strings with pointers to `info' and
- `man -k'
-
- 2/14
- ----
-variables.h
- - new macros to use when setting variable values directly instead of
- through bind_variable and its siblings
-
-{arrayfunc,variables}.c
- - use var_setarray and other lvalue macros instead of assigning to
- var->value directly
-
-builtins/setattr.def
- - change show_var_attributes to show function definitions separately
- from function attributes. This allows the output of `declare -f'
- (with other flags), `export -f', and `readonly -f' to be reused as
- shell input, instead of the old
-
- declare -f[flags] func()
- {
- foo
- }
-
- which has syntax errors. When in posix mode, `export -fp' and
- `readonly -fp' still don't print function definitions
-
- 2/16
- ----
-parse.y
- - comment out calls to discard_parser_constructs; no need to call
- empty functions
-
- 2/18
- ----
-lib/sh/memset.c
- - replacement function for memset(3)
-
-lib/sh/Makefile.in, Makefile.in
- - additions for memset.c
-
-configure.in,config.h.in
- - check for memset, define HAVE_MEMSET if found, add memset.o to
- LIBOBJS if not
-
-lib/malloc/malloc.c
- - removed zmemset(), replaced with calls to memset(3)
-
-{subst,execute_cmd,lib/sh/netopen}.c
- - replaced calls to bzero with calls to memset
-
-subst.c
- - word_split() now takes a second argument: the value of $IFS, so
- it doesn't have to look up IFS every time
- - word_list_split() now calls getifs() and passes the result to
- each call to word_split() as its second arg
- - do a quick scan for CTLNUL in remove_quoted_nulls before allocating
- new string, copying old string to it, copying over original string
- and freeing new string
-
-eval.c
- - don't bother calling dispose_used_env_vars if temporary_env is NULL
-
-execute_cmd.c
- - fix fix_assignment_words to only look up the builtin corresponding
- to the first word if one of the words in the list is marked as
- W_ASSIGNMENT
-
-hashlib.c
- - renamed hash_string to hash_bucket, which better reflects what it
- does
- - extracted the portion of hash_bucket that computes the hash out
- into a new hash_string()
- - made new body of hash_bucket into a macro HASH_BUCKET; function
- just calls the macro
- - calls to hash_bucket in this file now call HASH_BUCKET macro
- - in add_hash_item, just add a new item at the front of the appropriate
- bucket list instead of at the end
-
-hashcmd.h
- - reduced FILENAME_HASH_BUCKETS to 53 from 107
-
- 2/19
- ----
-hashlib.[ch]
- - find_hash_item, remove_hash_item, add_hash_item all take a new
- third `flags' argument
- - add_hash_item doesn't call find_hash_item if HASH_NOSRCH passed in
- flags arg
- - find_hash_item will create a new hash table entry if HASH_CREATE is
- passed in flags arg
- - new function, hash_walk, takes a pointer to a function and a table
- and calls the function for each item in the table. If the function
- returns < 0, the walk is terminated
- - fixed flush_hash_table to set table->nentries to 0 after freeing
- all entries
- - BUCKET_CONTENTS now has a new `khash' member, what key hashes to;
- set by HASH_BUCKET macro (which calls hash_string), assigned in
- find_hash_item (HASH_CREATE) and add_hash_item
- - find_hash_item and remove_hash_item check `khash' against the
- hash of the string argument before calling strcmp
-
-{alias,hashlib,hashcmd,pcomplib,variables}.c
- - changed all calls to {find,remove,add}_hash_item
-
-builtins/hash.def
- - return immediately from print_hashed_commands if there are no
- entries in the hash table (this eliminates need for `any_printed'
- variable)
- - change print_hashed_commands to use hash_walk
-
-alias.c
- - short-circuit all_aliases and map_over_aliases if
- HASH_ENTRIES(aliases) == 0
- - simplify map_over_aliases by just allocating enough room in the
- returned list for all entries in the aliases hash table, instead
- of doing the check and xrealloc
- - add_alias now calls add_hash_item with HASH_NOSRCH argument
-
-pcomplete.h
- - sh_csprint_func_t is no more; use hash_wfunc instead
-
-pcomplib.c
- - short-circuit print_all_compspecs if HASH_ENTRIES(prog_completes)
- is 0
- - print_all_compspecs now takes a `hash_wfunc *' argument
- - print_all_compspecs now just calls hash_walk
-
-builtins/complete.def
- - new function, print_compitem, takes a BUCKET_CONTENTS *, extracts
- the right info, and calls print_one_completion
-
-variables.c
- - short-circuit map_over_funcs if HASH_ENTRIES(shell_functions) == 0
- - short-circuit flatten if the passed table has no entries
- - bind_variable_internal takes a new fourth argument: `hflags',
- to pass to hash table functions
- - make_new_variable now passes HASH_NOSRCH flag to add_hash_item
- - set_if_not now calls bind_variable_internal and passes
- HASH_NOSRCH as flags argument
- - bind_function now calls add_hash_item with HASH_NOSRCH argument
- - fixed make_local_variable: old_var == 0 && was_tmpvar can never
- be true
- - if we didn't find an old variable in make_local_variable, call
- bind_variable_internal with HASH_NOSRCH argument
- - fix push_temp_var to reset variable context to 0 if binding into
- global_variables->table
-
-parse.y
- - fix to parse_compound_assignment to avoid core dumps on empty
- compound array assignments
-
-subst.c
- - getifs() is now global so read_builtin can call it
-
-subst.h
- - extern declaration for getifs()
-
- 2/20
- ----
-hashlib.c
- - changed hash_string to use a better hash function
- - changed HASH_BUCKET to use masking rather than modulus to hash a
- string to a bucket -- HASH TABLES MUST NOW BE SIZED BY POWERS
- OF TWO
-
-hashlib.h
- - DEFAULT_HASH_BUCKETS is now 64
-
-hashcmd.h
- - FILENAME_HASH_BUCKETS is now 64
-
-pcomplib.c
- - COMPLETE_HASH_BUCKETS is now 32
-
-variables.c
- - TEMPENV_HASH_BUCKETS is now 4
-
-alias.c
- - new define, ALIAS_HASH_BUCKETS, set to 16, used to size alias table
-
-hashlib.c
- - removed initialize_hash_table; folded code into make_hash_table
- - fixed copy_bucket_array to copy the `khash' member of an item
- - renamed functions to be more systematic and easier for me:
- make_hash_table -> hash_create
- hash_table_nentries -> hash_size
- copy_hash_table -> hash_copy
- find_hash_item -> hash_search
- remove_hash_item -> hash_remove
- add_hash_item -> hash_insert
- flush_hash_table -> hash_flush
- dispose_hash_table -> hash_dispose
- print_table_stats -> hash_pstats
- get_hash_bucket -> hash_items
- - changed hash_search to short-circuit if table->nentries == 0 and
- HASH_CREATE has not been passed in the flags argument
-
-{alias,variables,hashcmd,pcomplib}.c
- - renamed calls to all renamed functions from hashlib.c
-
-builtins/kill.def
- - don't drop a leading `-' in a pid argument
- - call kill_pid with an explicit third argument of 1 if the pid
- argument to kill is < -1, rather than rely on the behavior of
- kill(2)
-
- 2/21
- ----
-subst.c
- - quoted_strchr is no longer declared `inline'
- - skip_double_quoted is no longer declared `inline'
- - string_extract_double_quoted is no longer declared `inline'
-
-lib/readline/input.c
- - rl_gather_tyi is now an `int' valued function; returns the number
- of characters read (0 or 1) or -1 on error
- - if rl_gather_tyi() returns -1 to rl_read_key(), set rl_done to 1
- and return a newline; something is wrong with the input fd
-
- 2/25
- ----
-variables.[ch]
- - IFS is now a special variable
- - new special var function, sv_ifs(), called when IFS is set or unset
- - call setifs() when IFS is first set in initialize_shell_variables
- - call setifs() from make_local_variable and assign_in_env if
- appropriate
- - if assign_in_env() is called with a var assignment like `VAR=',
- make the value in the new SHELL_VAR created be "" like
- do_assignment_internal does, since certain parts of the shell use
- a NULL value as evidence that the variable is unset (though
- attributes may have been assigned)
- - if push_temp_var pushes something up to the global_variables table,
- make sure that the context is set to 0
- - new function dispose_temporary_env, called by both
- dispose_used_env_vars and merge_temporary_env with different `free
- func' function pointers; calls sv_ifs after disposing the temporary
- environment
- - push_exported_var now calls bind_variable_internal instead of
- bind_variable
- - pop_scope and pop_context now call sv_ifs
-
-subst.[ch]
- - new global variables used to keep track of IFS state, to avoid
- having to call find_variable("IFS") all the time:
-
- ifs_var the SHELL_VAR for IFS
- ifs_value ifs_var ? value_cell (ifs_var) : " \t\n"
- ifs_cmap bitmap of characters in ifs_value
- ifs_firstc first character in ifs_value
-
- - new function setifs(), sets the aforementioned ifs variables each
- time IFS is set or unset, and at nested scope exit
- - instead of calling getifs() from inside subst.c, use ifs_value
- - getifs() now just returns ifs_value
- - use ifs_firstc in string_list_dollar_star()
- - only call member() in issep() if separators is more than one char
- - don't cache a bitmap every time expand_word_internal() is called;
- use ifs_cmap instead
- - new macro, isifs(c), checks whether C is in ifs_cmap
-
-builtins/read.def
- - use issep() and isifs() macros instead of looking at $IFS directly
-
-syntax.h
- - make sure macros that access sh_syntaxtab cast the argument to
- `unsigned char' before array access
- - new macros: issyntype(c, type) and notsyntype(c, type), check
- sh_syntaxtab[c] for a particular flag value `type'
-
- 2/26
- ----
-hashlib.h
- - the `data' member of a `BUCKET_CONTENTS' is now a PTR_T
-
-{hashlib,alias,variables,hashcmd,pcomplib}.c
- - removed some casts when assigning to and using `data' member of a
- `BUCKET_CONTENTS'
-
-subst.c
- - in split_at_delims, call make_word_list instead of allocating and
- initializing a WORD_LIST * directly
-
-make_cmd.[ch]
- - add_string_to_list is now just a macro that calls make_word_list
- - make_simple_command now calls make_word_list instead of allocating
- a WORD_LIST * directly
-
- 2/27
- ----
-copy_cmd.c
- - copy_word now calls make_bare_word to allocate the copy
- - copy_word_list now calls make_word_list to allocate the copy
-
-shell.h
- - include `ocache.h' for simple object caching
- - call cmd_init() to initialize the WORD_DESC and WORD_LIST object
- caches
-
-{make,dispose}_cmd.c
- - allocate WORD_DESC * and WORD_LIST * vars from their respective
- ocaches, and return them to the cache when disposing
-
-jobs.c
- - renamed old `waiting_for_job' variable to `queue_sigchld', which
- better reflects its intent: sigchld_handler does not call waitchld
- if `queue_sigchld' is non-zero, it simply increments the count of
- waiting children
- - cleanup_dead_jobs now just sets and clears queue_sigchld instead of
- blocking and unblocking SIGCHLD; it calls waitchld at the end if
- `sigchld' is non-zero, but that's not really necessary
- - in setjstatus, only call xrealloc if `statsize' is less than the
- number of processes passed -- no reason to do it if they're the
- same
-
- 2/28
- ----
-sig.[ch]
- - reinitialize_signals is no more; initialize_signals takes an
- argument saying whether or not we are reinitializing
-
-builtins/exec.def
- - reinitialize_signals() -> initialize_signals(1)
-
-test.c
- - fix filecomp() to work right when one file has a non-positive
- timestamp and the other file does not exist
-
-doc/{bash.1,bashref.texi}
- - document what happens for test's -nt and -ot operators when one
- file operand exists and the other does not
-
-jobs.c
- - if we haven't messed with SIGTTOU, just manipulate queue_sigchld
- in notify_of_job_status instead of calling sigprocmask()
- - list_one_job now calls pretty_print_job directly instead of going
- through print_job
- - pretty_print_job now must be called with SIGCHLD blocked or held
- instead of blocking SIGCHLD itself
- - changed start_job so that it doesn't call UNBLOCK_CHILD and then
- immediately call BLOCK_CHILD again (explicitly or via last_pid()),
- call find_last_pid instead of last_pid and then UNBLOCK_CHILD
- - changed wait_for_job the same way
- - find_last_pid now takes a second argument: block; uses BLOCK_CHILD
- if `block' is 1, not otherwise. Changed existing calls:
- find_last_pid(j) -> find_last_pid(j, 0)
- last_pid(j) -> find_last_pid(j, 1)
- `last_pid()' is now gone
- - rewrote wait_for_background_pids(); it was a little strange
-
-copy_cmd.c
- - copy_if_command: don't copy null false_case commands
- - copy_simple_command: don't copy a null redirection list
-
-subst.c
- - in get_word_from_string and list_string, just check for " \t\n"
- directly rather than calling strcmp
- - in get_word_from_string and strip_trailing_ifs_whitespace, use
- isifs() instead of issep(), since they're never called with
- separators != $IFS
- - change issep() to call isifs if separators is longer than one
- character, since it's never called with anything but "", " ",
- or $IFS
-
- 3/1
- ---
-sig.h
- - enclose the BLOCK_SIGNAL macro in a do {...} while (0) loop, at it
- should have been all along
-
-lib/readline/doc/rltech.texinfo
- - document that readline defaults to stdin/stdout if rl_instream/
- rl_outstream are NULL
-
-lib/readline/terminal.c
- - if an application is using a custom redisplay function,
- rl_resize_terminal just calls rl_forced_update_display to tell
- (*rl_redisplay_func) to update the display, otherwise call
- _rl_redisplay_after_sigwinch
-
-lib/readline/readline.c
- - change readline_internal_setup() so the change to vi insertion mode
- happens even if readline_echoing_p is 0
- - don't print the prompt to rl_outstream in readline_internal_setup
- if we're not echoing and the caller has defined a custom redisplay
- function -- let the redisplay function deal with it
-
-configure.in
- - new option: --enable-mem-scramble, controls memory scrambling on
- free() (on by default; only affects use of bash malloc)
-
-config.h.in
- - new option MEMSCRAMBLE, controlled by --enable-mem-scramble
-
- 3/5
- ---
-parse.y
- - added ksh-like behavior of [...] to read_token_word: if a `[' is
- seen in an assignment context and the previous characters in the
- token form a valid identifier, parse the [...] with
- parse_matched_pair to allow spaces (and newlines) in the subscript
-
-bashline.c
- - new function bash_servicename_completion_function, for completing
- service names from /etc/services
-
-bashline.h
- - new extern declaration for bash_servicename_completion_function
-
-builtins/complete.def
- - allow new `-s/-A service' option to complete and compgen builtins
-
-pcomplete.h
- - new CA_SERVICE define, new ITEMLIST variable it_services
-
-pcomplete.c
- - add callback to bash_servicename_completion_function to generate
- list of matching service names for completion
-
-doc/bash.1,lib/readline/doc/rluser.texinfo
- - documented new `-s/-A service' option to complete and compgen
-
- 3/6
- ---
-builtins/read.def
- - change hard-coded `0' to new variable `fd' (initially 0) in
- preparation for adding `-u fd' option
-
-bashline.c
- - bash_directory_completion_hook calls expand_prompt_string instead
- of expand_string (it does the right thing). This keeps expansion
- errors from causing a longjmp, which shouldn't happen because of
- completion
- - command_subst_completion_function was augmented very slightly to
- do filename completion on a non-command-word in a command
- substitution
- - command_subst_completion_function now skips over the lcd that
- rl_completion_matches puts in matches[0] if there is more than
- one possible completion
-
- 3/7
- ---
-builtins/read.def
- - only add the unwind_protect to free `rlbuf' if `edit' is non-zero,
- since we won't be using readline otherwise
-
-lib/sh/zread.c
- - renamed zread1 -> zreadintr
-
-redir.c
- - small change to redirection_error() to make a slightly better
- guess about the invalid file descriptor if the redirection op is
- r_duplicating_input or r_duplicating_output
-
-include/stdc.h
- - new macro, SH_VA_START, to encapsulate the difference between
- stdarg va_start and varargs va_start
-
-{error,pcomplete,print_cmd}.c,builtins/common.c,lib/sh/snprintf.c
- - use SH_VA_START
-
- 3/8
- ---
-builtins/read.def
- - support for the ksh-like `-u fd' option
-
-general.c
- - new function sh_validfd(fd), returns 1 if fd is a valid open file
- descriptor
-
-general.h
- - extern decl for sh_validfd
-
-bashline.c
- - don't call posix_readline_initialize() from initialize_readline();
- sv_strict_posix() should already have taken care of it
-
- 3/11
- ----
-{error,pcomplete,print_cmd}.c, builtins/common.c
- - removed non-varargs versions of functions
-
-builtins/printf.def
- - if the string argument to %q has non-printing characters, call
- ansic_quote to quote it rather than sh_backslash_quote
-
-variables.h
- - new attribute: att_trace (and corresponding trace_p() macro).
- Functions with this attribute will inherit the DEBUG trap.
- Currently ignored for variables
-
-builtins/declare.def
- - new `-t' option to declare/typeset toggle the `att_trace' attribute
-
-builtins/setattr.def
- - check for att_trace and output `-t' flag in show_var_attributes
-
-execute_cmd.c
- - if a function is being traced (it has the `-t' attribute set),
- don't turn off the DEBUG trap when it executes
-
-doc/{bash.1,bashref.texi}
- - document the new `-t' option to declare/typeset
-
- 3/12
- ----
-execute_cmd.c
- - don't execute the debug trap in the `cm_simple:' case of
- execute_command_internal; run it in execute_simple_command so we
- get the line number information right when executing in a shell
- function
- - run a DEBUG trap before executing ((...)) arithmetic commands,
- like ksh93
- - run a DEBUG trap before executing [[...]] conditional commands,
- like ksh93
-
-eval.c
- - add a static forward declaration for alrm_catcher()
-
-general.c
- - add static forward declarations for bash_special_tilde_expansions,
- unquoted_tilde_word, initialize_group_array
-
-variables.h
- - add extern declarations for sh_get_env_value, map_over_funcs,
- local_exported_variables
-
-variables.c
- - add static forward declarations for dispose_temporary_env,
- make_func_export_array
-
-bashhist.c
- - add static forward declaration for check_history_control
-
-configure.in
- - add a call to AC_CHECK_DECLS for strcpy
-
-config.h.in
- - add placeholder for HAVE_DECL_STRCPY define, set by configure
-
-general.h
- - don't declare strcpy if HAVE_DECL_STRCPY is defined with a non-zero
- value
-
-sig.h
- - add prototype to typedef of SigHandler
-
-lib/readline/histlib.h
- - removed extern declaration of strcpy()
- - include string.h/strings.h directly in histlib.h instead of source
- files
-
-lib/readline/{histexpand,histfile,history,histsearch}.c
- - don't include string.h/strings.h now that histlib.h includes it
-
-lib/tilde/tilde.c
- - removed extern declaration of strcpy(), rely on string.h/strings.h
-
-command.h
- - four new redirection types: r_move_input, r_move_output,
- r_move_input_word, r_move_output_word, for
- [N]<&word- and [N]>&word- from ksh93
-
-print_cmd.c
- - changes to print r_move_input[_word] and r_move_output[_word]
-
-copy_cmd.c
- - changes to copy r_move_input[_word] and r_move_output[_word]
-
-dispose_cmd.c
- - changes to dispose r_move_input_word and r_move_output_word
-
-make_cmd.c
- - changes to make r_move_input[_word] and r_move_output[_word] from
- r_duplicating_{input,output}_word, which is how the new redirs
- are passed by the parser
-
-redir.c
- - changes to make r_move_input[_word] and r_move_output[_word] do
- the right thing when executed
-
-builtins/read.def
- - print an error message and return failure immediately if zread/zreadc
- return < 0
-
-doc/{bash.1,bashref.texi}
- - documented new [n]<&word- and [n]>&word- redirections
-
- 3/13
- ----
-lib/readline/isearch.c
- - enabled code to allow chars bound to rl_rubout to delete characters
- from the incremental search string
-
-shell.c
- - add `-l' invocation option to parse_shell_options; equivalent to
- `--login'
- - fixed set_login_shell to check first char of base pathname of argv0
- for `-', like other shells
- - move the check for make_login_shell after the call to
- parse_shell_options because the `-l' option might set it
-
-doc/{bash.1,bashref.texi}
- - documented new `-l' invocation option
-
-array.c
- - new function, array_shift, shifts an array left by a specified
- number of elements
- - array_walk is now compiled in by default
- - array_to_assignment_string now takes a second argument: int quoted.
- If non-zero, the result is single-quoted before being returned
- - quoted_array_assignment_string has been removed
-
-array.[ch]
- - renamed most of the array functions so that all have an array_
- prefix and are more systematically named
- - array_slice now preserves the indicies from the original array
- - change array_to_assign to use a static buffer for expanding the
- array indices, instead of malloc/free
-
-{arrayfunc,subst,variables}.c, builtins/read.def
- - changed calls to various array functions to use new names
-
-lib/sh/stringvec.c, externs.h
- - renamed all of the functions to have a strvec_ prefix and to have
- a more sensible name scheme
- - strvec_search's arguments are now supplied in reverse order, so
- the char **array is first, like the other functions
- - new function, strvec_resize, xrealloc for strvecs
-
-{alias,array,bracecomp,braces,bashline,execute_cmd,findcmd,general,pathexp,
-pcomplete,variables}.c
-lib/sh/stringlist.c
-builtins/{bind,complete,exec,getopts,pushd,set}.def
- - change calls to all functions from lib/sh/stringvec.c
- - use strvec_resize where appropriate
-
-externs.h
- - only declare dup2() if HAVE_DUP2 is undefined or DUP2_BROKEN is
- defined
-
-lib/readline/{macro,readline,util}.c, lib/readline/rlprivate.h
- - _rl_defining_kbd_macro is gone, use RL_ISSTATE(RL_STATE_MACRODEF)
-
-lib/readline/readline.h
- - new struct readline_state, encapsulates most of readline's internal
- state in case you need reentrancy or nested calls to readline()
- - extern declarations for rl_save_state, rl_restore_state
-
-lib/readline/readline.c
- - add (undocumented) int rl_save_state (struct readline_state *),
- int rl_restore_state (struct readline_state *)
-
- 3/14
- ----
-array.[ch]
- - new function, array_rshift, shifts an array right by a specified
- number of elements, optionally inserting a new element 0
-
-examples/bashdb/bashdb
- - new single-file version of bash debugger, originally modified from
- version in bash-2.04 by Gary Vaughan (the old debugger still
- appears in examples/obashdb). This version has a more gdb-like
- command set
-
-examples/bashdb/bashdb.el
- - new emacs bashdb debugger mode from Masatake YAMATO <jet@gyve.org>
-
-execute_cmd.c
- - don't make $LINENO relative to function start unless the shell is
- currently interactive -- this is what ksh93 does and what I
- believe to be the intent of POSIX.2 (this required changing some
- of the test checks because the output has changed)
- - run the debug trap for each command in an arithmetic for expression,
- like ksh93 does
-
-lib/readline/vi_mode.c
- - redid rl_vi_subst (binding func for `s' and `S') in terms of
- rl_vi_change_to: `S' == `cc' and `s' == `c '. This makes undo
- work right
-
- 3/18
- ----
-hashlib.c
- - fixed hash_walk to return if the item function returns < 0, instead
- of breaking out of the current hash chain
-
-array.c
- - fixed array_walk to return if the item function returns < 0, like
- hash_walk
-
-lib/sh/stringlist.c, externs.h
- - new function: strlist_walk, takes a stringlist and a pointer to an
- item func. Like other _walk funcs, if item func returns < 0 the
- walk is cancelled
- - new function: strlist_flush, frees items in the contained list
- with strvec_flush
- - renamed functions to have a strlist_ prefix and be more systematic
-
-pcomplib.c,pcomplete.h
- - removed redundant `progcomp_initialized' variable
- - renamed functions to have `progcomp_' or `compspec_' prefixes
- like the hash library
-
-{bashline,pcomplete}.c,builtins/complete.def
- - fixed calls to stringlist functions to use new names
- - fixed calls to functions in pcomplib.c to use new names
-
-pcomplete.c
- - made the debugging code #ifdef DEBUG -- it should be mature enough
-
-builtins/hash.def,parse.y
- - use REVERSE_LIST(x, t) instead of (t)reverse_list(x)
-
-list.c,{externs,general}.h
- - renamed the list functions to have a list_ prefix, changed callers
-
-externs.h,{execute_cmd,stringlib,subst}.c,builtins/common.c,lib/sh/stringvec.c
- - word_list_to_argv -> strvec_from_word_list
- - argv_to_word_list -> strvec_to_word_list
- - moved functions to lib/sh/stringvec.c
-
-lib/sh/stringvec.c
- - changed name of second argument to strvec_from_word_list from `copy'
- to `alloc' so the use of `copy' between strvec_from_word_list and
- strvec_to_word_list isn't as confusing
- - changed name and sense of second argument to
- strvec_to_word_list from `copy' to `alloc' for the same reason --
- now both functions agree on semantics of second argument
-
-lib/sh/stringlist.c
- - ditto for strlist_from_word_list and strlist_to_word_list
-
-subst.c
- - changed callers of strvec_to_word_list
-
- 3/19
- ----
-builtins/hash.def
- - added `-l' option to list table or individual targets in reusable
- format
- - added `-d' option to remove one or more names from the table of
- hashed commands (provides `unhash' or `unalias -t' functionality)
-
-doc/{bash.1,bashref.texi}
- - documented new `-l' and `-d' options to `hash'
-
-hashcmd.[ch]
- - renamed functions to have a `phash_' prefix and follow new naming
- convention
- - phash_remove now returns an int: 1 if command not in hash table,
- 0 if filename removed OK
-
-{findcmd,variables}.c, builtins/{hash,type}.def
- - changed callers to use new names from hashcmd.c
-
-builtins/common.[ch]
- - new function, sh_notfound(s), prints standard `not found' message
- - new function, sh_invalidid(s), prints standard `invalid identifier'
- message
- - new function, sh_restricted(s), prints standard `restricted' message
- for restricted shells
- - new function, sh_invalidnum(s), prints standard `invalid number'
- message
- - renamed bad_option to sh_invalidopt, changed to print
- `invalid option' instead of `unknown option'
- - new function, sh_invalidoptname, prints standard `invalid option
- name' for long options
- - new function, sh_badjob (s), prints standard `no such job' message
- - new function, sh_invalidsig (s), prints standard `invalid signal
- specification' message
- - new function, sh_nojobs (s), prints standard `no job control' message
- - new function, sh_needarg (s), prints standard `option requires an
- argument' message
- - new function, sh_neednumarg (s), prints standard `numeric
- argument required' message
- - new function, sh_badpid(s), prints standard `not a pid...' message
- - new function, sh_erange (s, desc) prints standard `out of range'
- message, optionally using `desc' to say what the argument is
-
-builtins/{alias,command,declare,exec,hash,type}.def
- - call sh_notfound() instead of calling builtin_error directly
-
-builtins/{declare,getopts,read,set,setattr}.def
- - call sh_invalidid() instead of calling builtin_error directly
-
-builtins/{cd,command,enable,exec,hash,source}.def
- - call sh_restricted() instead of calling builtin_error directly
-
-builtins/{printf,read,ulimit}.def, builtins/common.c
- - call sh_invalidnum instead of calling builtin_error directly
-
-builtins/{complete,declare,pushd,set}.def, builtins/bashgetopt.c
- - call sh_invalidopt instead of bad_option or builtin_error directly
-
-builtins/{complete,set,shopt}.def
- - call sh_invalidoptname instead of builtin_error directly
-
-builtins/{fg_bg,jobs,kill,wait}.def
- - call sh_badjob instead of calling builtin_error directly
-
-builtins/common.c, builtins/{kill,signal}.def
- - call sh_invalidsig instead of calling builtin_error directly
-
-builtins/{fg_bg,suspend,wait}.def
- - call sh_nojobs instead of calling builtin_error directly
-
-builtins/{common,bashgetopt}.c, builtins/{hash,kill}.def
- - call sh_neednumarg and sh_needarg where required
-
-builtins/{kill,wait}.def
- - call sh_badpid where required
-
-builtins/{break,fc,history,pushd,shift,ulimit,umask}.def
- - call sh_erange where appropriate
-
-builtins/printf.def
- - new static function, printf_erange, prints standard out-of-range
- warning message
-
-builtins/set.def
- - changed so that calls to sh_invalidopt always include the leading
- `+' or `-'
-
-builtins/shopt.def
- - changed SHOPT_ERROR macro to shopt_error function
-
-builtins/bind.def
- - regularized error messages to `bind: object: error string' like
- other error messages
-
-builtins.h
- - the `short_doc' member of a `struct builtin' is now of type
- `const char *'
- - the strings in `long_doc' array of a struct builtin are now const
-
-builtins/mkbuiltins.c
- - changes for new `const' members of struct builtin
-
- 3/20
- ----
-lib/readline/histfile.c
- - use pointers instead of indexing into buffer when reading the
- contents of the history file in read_history_range and
- history_truncate_file
-
- 3/21
- ----
-lib/readline/histfile.c
- - new file, with code to mmap the history file for reading and
- writing (depends on HAVE_MMAP, currently nothing checks for that)
-
- 3/25
- ----
-error.[ch]
- - new function, err_badarraysub(s), calls report_error with standard
- `bad array subscript' message
- - new function, err_unboundvar(s), calls report_error with standard
- `unbound variable' message
- - new function, err_readonly(s), calls report_error with standard
- `readonly variable' message
-
-{arrayfunc,subst}.c
- - call err_badarraysub where appropriate
-
-{expr,subst}.c
- - call err_unboundvar where appropriate
-
-{arrayfunc,variables}.c
- - call err_readonly where appropriate
-
-shell.c
- - changed text of bad option error messages to be the same as that
- printed for builtin errors
-
-builtins/common.c
- - changed sh_invalidopt to print the invalid option before the rest
- of the error message (required some tests to be modified)
- - new function, sh_readonly, calls builtin_error with standard
- `readonly variable' message
-
-variables.c,builtins/declare.def
- - call sh_readonly where appropriate
-
-lib/sh/stringvec.c
- - added strvec_remove (sv, s), removes S from SV and shuffles rest of
- elements down 1
-
-lib/sh/stringlist.c
- - added strlist_remove(sl, s), just calls strvec_remove on the
- component list
-
-externs.h
- - new extern declarations for strvec_remove and strlist_remove
- - fixed extern declaration for strvec_search; the arguments were
- reversed (unimportant, it's not compiled into the shell)
-
-subst.c
- - change param_expand to call quote_escapes on values retrieved when
- expanding the positional parameters
- - change parameter_brace_expand_word to quote escapes on values
- retrieved when expanding the positional parameters
- - fix parameter_brace_substring to quote escape characters on unquoted
- substrings extracted from variable values (needed to separate case
- VT_VARIABLE from VT_ARRAYMEMBER for this, since, because
- get_var_and_type calls array_value for VT_ARRAYMEMBER, we need to
- skip over quoted characters in an already-appropriately-quoted
- string to find the substring we want)
- - fix parameter_brace_substring to quote escape characters in the
- value returned by pos_params when expanding subsets of the
- positional parameters and not within double quotes (in which case
- pos_params() quotes the string for us)
- - fix parameter_brace_substring to quote escape characters in the
- value returned by array_subrange when expanding subsets of an
- array and not within double quotes (in which case
- array_subrange() quotes the string for us)
- - new function, quoted_strlen(s), does strlen(s) while skipping over
- characters quoted with CTLESC (#ifdef INCLUDE_UNUSED, since it's
- not used yet)
- - changed pos_params() so it always returns a list whose members are
- quoted strings if (quoted&(Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) != 0
-
-arrayfunc.c
- - fix array_value to consistently call quote_escapes, even when a
- non-array variable is being subscripted with element 0, in which
- case we return the variable value
-
-lib/sh/strtrans.c
- - make the for_echo parameter to ansicstr a `flags' parameter that
- has its old `for echo' meaning if flags&1 is non-zero (which is
- consistent with the old code)
- - Added code to the `flags' parameter to ansicstr so that if flags&2
- is non-zero, CTLESC and CTLNUL are escaped with CTLESC in the
- expanded string
- - change ansiexpand() to call ansicstr with a `flags' parameter of 2
-
- 3/26
- ----
-lib/readline/histfile.c
- - when reading and writing the history file, use malloc instead of
- xmalloc and handle failures gracefully, so the application doesn't
- abort if the history file or history list is too big
-
- 3/27
- ----
-arrayfunc.c
- - changed array_value_internal to take an additional `int *'
- parameter, in which is returned the type of array indexing
- performed (array[@] vs. array or array[index])
- - changed array_value and get_array_value to take a corresponding
- extra parameter and pass it to array_value_internal
- - changed array_value_internal to no longer return newly-allocated
- memory or quote CTLESC and CTLNUL in the returned string if
- `simple' array indexing (subscript not `@' or `*') is being
- performed. This makes it more like a variable lookup
-
-arrayfunc.h
- - changed prototypes for array_value and get_array_value
-
-expr.c
- - added new parameter to call to get_array_value in expr_streval
- - don't need to free memory returned by get_array_value any more
-
-subst.c
- - quote_escapes now works with multibyte characters
- - dequote_string now works with multibyte characters
- - dequote_escapes is now needed, so it's compiled in, and it
- now works with multibyte characters
- - remove_quoted_escapes now just calls dequote_escapes and copies the
- result over the argument string
- - remove_quoted_nulls now returns its char * argument, parallels
- remove_quoted_escapes
- - parameter_brace_expand_word now passes the new argument to
- array_value and quotes CTLESC and CTLNUL in the result if it's a
- `simple' array expansion by calling quote_escapes
- - get_var_and_type now returns VT_ARRAYMEMBER for references like
- ${array} where `array' is an array variable (just like ${array[0]}).
- Documented (in comment) that a VT_VARIABLE return value means that
- quote_escapes has been called at some point
- - changed callers of get_var_and_type to no longer free value if
- VT_ARRAYMEMBER is returned as type
- - changed parameter_brace_substring and parameter_brace_patsub to
- call dequote_escapes on the value from get_var_and_type if the
- type is VT_VARIABLE, since the substring and pattern substitution
- code doesn't understand CTLESC quoting
- - parameter_brace_substring no longer needs to call quoted_substring
- for the VT_ARRAYMEMBER case
- - changed parameter_brace_patsub to call quote_escapes on the result
- of pat_subst for the VT_VARIABLE and VT_ARRAYMEMBER cases, and to
- quote the returned string in the VT_ARRAYVAR and VT_POSPARAMS cases
- if the `MATCH_QUOTED' flag isn't set (if it is, the pattern
- substitution functions perform any necessary quoting)
- - quoted_substring is no longer used; it's now #ifdef INCLUDE_UNUSED
-
-lib/malloc/mstats.h
- - new member in _malstats: u_bits32_t bytesreq, the total number of
- bytes requested by the caller via calls to malloc() and realloc()
-
-lib/malloc/stats.c
- - print bytesreq member in _print_malloc_stats
- - don't print statistics for buckets for which nmal == 0 (no mallocs)
-
-lib/malloc/malloc.c
- - modified internal_malloc, internal_realloc to keep running total of
- number of bytes requested by calling application
-
-shell.c
- - sh_exit is now compiled in; exit_shell calls sh_exit
-
-error.c
- - changed fatal_error, report_error, parser_error to call sh_exit
-
- 3/28
- ----
-subst.[ch]
- - changed Q_NOQUOTE to Q_PATQUOTE; it makes the intent more clear
-
-subst.c
- - moved code from parameter_brace_expand into a new function that
- dispatches for pattern substitution: parameter_brace_remove_pattern
- - changed structure of parameter_brace_remove_pattern to be like
- parameter_brace_patsub and its ilk: call get_var_and_type to
- isolate the variable name, move the pattern isolation code out of
- the various *_remove_pattern functions into
- parameter_brace_remove_pattern and pass the results to the various
- functions, use a switch on the return value from get_var_and_type
- to decide which function to call, regularized the arguments to the
- separate pattern removal functions
- - parameter_brace_remove_pattern now properly quotes escape chars in
- the returned value
- - changed get_var_and_type to call dequote_escapes on the `value'
- parameter for case VT_VARIABLE and return the result in *valp,
- so the calling functions don't have to do it themselves; changed
- callers appropriately
- - fixed getpattern() where it broke posix compliance: if you enclose
- a pattern removal spec in double quotes, the outer double quotes
- have no effect on the pattern (POSIX.1-200x 2.6.2). This uncovered
- a bug in the test suite (!)
-
-pathexp.c
- - fixed a problem with quote_string_for_globbing where it would change
- consecutive CTLESC chars all to \ instead of changing every other
- quoted char
-
- 3/31
- ----
-lib/malloc/{malloc,stats}.c
- - moved declaration of _mstats to malloc.c so stats.o doesn't get
- linked into the shell if the stats functions aren't called
-
- 4/2
- ---
-lib/glob/smatch.c
- - introduce `XCHAR' define, which is the type of arguments passed to
- strcoll/strcmp/strlen and their wide-character equivalents, added
- appropriate casts
- - static arrays in single-byte version of rangecmp() are `char', not
- `unsigned char', so compilers don't complain about calls to strcoll
-
-lib/glob/sm_loop.c
- - casts for `XCHAR' and `XCHAR *' arguments to libc functions
- - use prototype declaration for BRACKMATCH if `PROTOTYPES' is defined
- to avoid problems with type promotion (unsigned char -> int)
-
-lib/glob/collsyms.h
- - `name' member of struct _COLLSYM is now of type `XCHAR *', since
- some compilers don't like `unsigned char *' initializers from
- constant strings
-
-[bash-2.05b-alpha1 released]
-
- 4/3
- ---
-builtins/{evalstring.c,common.h}
- - new flag for parse_and_execute, SEVAL_NOFREE, means to not free
- the argument string when finished
-
-lib/readline/text.c
- - fixed a trivial typo in _rl_insert_char when reading multibyte
- char sequences
- - replace calls to ding() with rl_ding()
-
-include/chartypes.h
- - remove SIGN_EXTEND_CHAR and TOASCII macros; they're unused
-
-make_cmd.c
- - include dispose_cmd.h for extern function declarations
-
-lib/glob/glob.c
- - include `shmbutil.h' and `xmalloc.h' for extern function declarations
-
-lib/glob/smatch.c
- - include `xmalloc.h' for extern function declarations
-
-shell.c
- - fix maybe_make_restricted to use its argument instead of global
- `shell_name'
-
-version.c
- - update copyright message to include this year
-
-lib/readline/display.c
- - fixes from Jiro SEKIBA <jir@yamato.ibm.com> to fix autowrapping
- when using multibyte characters
-
-lib/glob/sm_loop.c
- - fixed a problem in BRACKMATCH where not enough memory was allocated
- to hold a multibyte character when parsing POSIX.2 char class names
-
-support/config.{guess,sub}
- - updated via patch from Paul Eggert with latest GNU additions
-
-variables.c
- - var_lookup should use its `vcontext' argument instead of
- unconditionally using `shell_variables'
-
- 4/4
- ---
-builtins/bind.def,doc/{bash.1,bashref.texi}
- - changed the usage summary and help text to make it clear that any
- readline command that may appear in ~/.inputrc may be supplied as
- one of the non-option arguments to `bind'
-
-builtins/mkbuiltins.c
- - added support for `-H' option, which means to write long documentation
- for each builtin to a separate file in the `helpfiles' directory
-
-builtins/Makefile.in
- - new target `helpdoc', just creates long doc files in helpfiles
- directory
-
-lib/sh/zcatfd.c
- - new file, with zcatfd(int fd, int ofd, char *fn); dumps data from
- FD to OFD
-
-Makefile.in,lib/sh/Makefile.in
- - added zcatfd.c, zcatfd.o member of libsh.a
-
-builtins/evalstring.c
- - changed cat_file to call zcatfd(fd, 1, fn)
-
-builtins/{shopt,colon}.def
- - removed the $DOCNAME directive for `shopt', `true', and `false';
- just use the names
- - changed $DOCNAME for `:' to just be `colon' instead of
- `colon_builtin'
-
-builtins/reserved.def
- - added help entries for ((, [[, `for (('
-
-builtins/let.def
- - add id++, id--, ++id, --id, ** to help text
-
- 4/8
- ---
-builtins/bashgetopt.[ch]
- - changed to allow options beginning with `+', enabled by a leading
- `+' in the option string
- - new variable, list_opttype, set to `-' or `+'
-
-builtins/{common.c,{builtin,eval,exit,fg_bg,let,printf,pushd,return,source,wait}.def
- - changes to allow a `--' option for every builtin that accepts
- operands but not options, as per posix.1-2001
-
-builtins/{declare,setattr}.def
- - use internal_getopt for parsing options, now that it supports `+'
-
-builtins/set.def
- - use internal_getopt for initial option parse, now that it supports
- a leading `+'
-
-
-{configure,Makefile}.in, builtins/{Makefile.in,help.def,mkbuiltins.c}
- - support for a new configure option, ``--enable-separate-helpfiles'',
- moves the `long' help text to separate help files, installed by
- default into ${datadir}/bash, one file per builtin. Off by
- default -- it saves 47K, but it's only 47K, and it's in the text
- segment
-
-flags.c
- - build internal_getopt() option string argument from flags array at
- runtime in shell.c
-
-shell.c
- - new variable to control writing malloc stats at exit:
- malloc_trace_at_exit, 0 by default
-
-lib/malloc/malloc.c
- - heavily updated:
- o partial page allocated on first call to malloc to make
- subsequent sbrks page-aligned no longer wasted
- o begin and end range guards are now the same value: the chunk
- requested
- o coalescing code was changed to attempt to coalesce first two
- adjacent blocks on the free list; enabled by default
- o blocks of size 32 are now candidates for larger block
- splitting, since 32 is the most popular size
- o blocks of size 32 are now candidates for smaller block
- coalescing
- o the IN_BUCKET check was changed to just make sure that the
- size isn't too big for the bucket, since the `busy block'
- checking code may increase the bucket by one or more,
- meaning that the old check would fail and cause a panic when
- a chunk allocated in such a way was freed
- o bin sizes are now precomputed and looked up in an array
- rather than being computed at runtime
- o moved the _mstats declaration here to avoid the stats code
- being linked in even when no stats functions were called
- (only matters if MALLOC_DEBUG is defined)
- o malloc now keeps track of the address of the top of the heap
- and will return large chunks to the system with calls to
- sbrk with a negative argument when freeing the top chunk.
- Two thresholds: LESSCORE_FRC means to unconditionally return
- memory to the system; LESSCORE_MIN means to return memory if
- there's at least one block already on the free list
-
-lib/malloc/mstats.h
- - stats struct now keeps track of number of block coalesces by bin,
- and the number of times memory was returned to the system by bin
-
-lib/malloc/stats.c
- - trace_malloc_stats now takes a second argument: the name of the file
- to write to. The first `%p' in the template file name is replaced
- by the pid
-
- 4/9
- ---
-lib/malloc/imalloc.h
- - added some macros derived from dlmalloc and glibc malloc to inline
- memcpy and memset if the requested size is <= 32 bytes
-
-lib/malloc/malloc.c
- - use MALLOC_MEMSET instead of memset in internal_{malloc,free}
-
-include/ocache.h
- - use OC_MEMSET (variant of MALLOC_MEMSET) in ocache_free
-
-configure.in, config.h.in
- - check for getservent(), define HAVE_GETSERVENT if found
-
-bashline.c
- - punt immediately from bash_servicename_completion_function if
- HAVE_GETSERVENT is not defined (cygwin seems to not define it)
- - include "input.h" for extern save_token_state() and
- restore_token_state() declarations
- - change bash_execute_unix_command to call parse_and_execute with
- SEVAL_NOHIST flag so the command doesn't get saved on the history
- list
- - change bash_execute_unix_command to save and restore the current
- command line count and the token state (last_read_token, etc.).
- Everything else is saved by either parse_and_execute directly or
- the call it makes to push_stream(). The shell_input_line stuff
- doesn't need to be saved and restored; it's not computed until
- readline() returns
-
- 4/10
- ----
-lib/glob/glob.[ch]
- - glob_filename and glob_vector now take an additional `flags' arg
- - define GX_MARKDIRS as possible flag value for glob_filename and
- glob_vector
-
-lib/sh/snprintf.c
- - fixed some bugs with handling of `g' and `G' formats
- - make sure numtoa returns the fractional part correctly when passed 0
- - implemented thousands grouping for `'' flag character
-
-lib/sh/rename.c
- - a few changes to make it more bulletproof
-
- 4/11
- ----
-lib/glob/glob.c
- - added the couple of dozen lines of code to glob_dir_to_array to
- finish implementing GX_MARKDIRS
-
-builtins/set.def
- - changed unset builtin so that it no longer considers unsetting an
- unset variable or function to be an error
-
-lib/readline/display.c
- - fix to rl_redisplay for a problem which caused display to be messed
- up when the last line of a multi-line prompt (possibly containing
- invisible characters) was longer than the screen width
-
- 4/15
- ----
-aclocal.m4
- - use AC_DEFINE_UNQUOTED in BASH_SYS_DEFAULT_MAIL_DIR instead of
- enumerating all of the possible values and using AC_DEFINE
-
- 4/16
- ----
-Makefile.in, {builtins,support}/Makefile.in
- - new variables, CFLAGS_FOR_BUILD and CPPFLAGS_FOR_BUILD, substituted
- by `configure'
- - changed CCFLAGS_FOR_BUILD to BASE_CCFLAGS, removing $(CPPFLAGS);
- CCFLAGS and CCFLAGS_FOR_BUILD now include $(BASE_CCFLAGS) with
- (possibly) different values for CPPFLAGS and CFLAGS
- - GCC_LINT_CFLAGS now includes $(BASE_CCFLAGS) and $(CPPFLAGS)
- instead of CCFLAGS_FOR_BUILD
- - new variable, LDFLAGS_FOR_BUILD, right now equivalent to LDFLAGS
- - remove $(CPPFLAGS) from recipes for buildversion, mksignames, and
- mksyntax
-
-configure.in
- - compute and substitute CFLAGS_FOR_BUILD, CPPFLAGS_FOR_BUILD, and
- LDFLAGS_FOR_BUILD
- - changed qnx to use LOCAL_LDFLAGS and LOCAL_LIBS instead of putting
- everything in LOCAL_LDFLAGS
-
-builtins/Makefile.in
- - remove $(PROFILE_FLAGS) from recipe for building `mkbuiltins'
- - use LDFLAGS_FOR_BUILD instead of LDFLAGS in recipe for building
- `mkbuiltins'
-
-Makefile.in
- - use $(CC_FOR_BUILD) and $(CCFLAGS_FOR_BUILD) to build auxiliary
- test programs (printenv, recho, zecho)
-
-support/Makefile.in
- - use CC_FOR_BUILD and CCFLAGS_FOR_BUILD in recipe for building
- `man2html'
-
-lib/tilde/Makefile.in
- - substitute PROFILE_FLAGS, use PROFILE_FLAGS in $(CCFLAGS)
-
- 4/25
- ----
-Makefile.in, configure.in
- - moved RELSTATUS to configure.in; configure substitutes it into
- the generated Makefile
-
-lib/sh/snprintf.c
- - fix wchars() to deal with systems where MB_CUR_MAX is not a
- constant expression
-
- 5/2
- ---
-lib/sh/shquote.c
- - add `,' to list of chars that are backslash-quoted. It doesn't
- hurt normal usage and prevents filenames with commas from being
- inappropriately split by brace expansion after using
- complete-into-braces
-
- 5/6
- ---
-lib/sh/xstrchr.c
- - we only need the check of MB_CUR_MAX and the slow code for a
- few encodings, and even then only for a subset of the charset
-
-arrayfunc.c
- - some speedups for skipsubscript and multibyte chars from Bruno Haible
-
-locale.c
- - changed set_lang to call setlocale(LC_ALL, ...) if LC_ALL doesn't
- already have a value, but doesn't change any shell variables
-
-include/shmbutil.h
- - major speedups from Bruno Haible, mostly concerned with reducing
- the number of strlen(3) calls
-
-subst.c
- - change callers of macros in shmbutil.h to add extra argument as
- necessary
- - skip_single_quoted and skip_double_quoted take another argument:
- the length of the string; mostly useful when using multibyte chars
- - many speedups from precomputing string lengths at function start
- - fixed a small bug in de_backslash in the midst of rewriting for
- better efficiency
-
-{braces,make_cmd,pathexp}.c
- - change callers of macros in shmbutil.h to add extra argument as
- necessary
-
-pathexp.c
- - fix a one-too-far problem with multibyte chars in
- unquoted_glob_pattern_p
-
-braces.c
- - brace_gobbler takes a new argument, the length of the passed string
- - expand_amble takes a new argument, the length of the passed string
-
- 5/7
- ---
-subst.c
- - modified remove_quoted_nulls to eliminate the memory allocation and
- do the copy in place using the same strategy as de_backslash
-
-lib/readline/{rldefs.h,complete.c}
- - new define RL_QF_OTHER_QUOTE, so _rl_find_completion_word can note
- that it found a quoting character other than \'" that appears in
- rl_completer_quote_characters
-
- 5/9
- ---
-jobs.c
- - save and restore old value of jobs_list_frozen when calling trap
- handlers from set_job_status_and_cleanup to avoid seg faults when
- running recursive trap handlers
-
- 5/10
- ----
-builtins/common.h
- - new #defines to use for value of changed_dollar_vars (provides
- information about the caller who wants to blow away the old dollar
- variables)
-
-builtins/common.c
- - changed set_dollar_vars_changed to set changed_dollar_vars to one
- of the ARGS_* values depending on the caller and environment
-
-builtins/source.def
- - source restores the positional parameters unless the `set' builtin
- was called to specify a new set while not executing a shell function
-
- 5/13
- ----
-POSIX
- - new file, was in CWRU/POSIX.NOTES
-
-doc/{Makefile.in,Makefile}
- - changed `posix' rule to modify ../POSIX
-
-doc/mkposix
- - write to `POSIX' by default
-
-lib/sh/strtrans.c
- - when ansicstr is parsing a format string for `echo -e' (or the
- equivalent xpg_echo option is enabled), obey the POSIX-2001/SUSv3
- standard and accept 0-3 octal digits after a leading `0'
-
-doc/{bash.1,bashref.texi}
- - updated `echo' description to note that up to three octal digits
- are now accepted following `\0'
-
- 5/16
- ----
-doc/Makefile.in
- - remove the generated documentation on `make distclean' if the
- build directory and source directory are not the same
-
-Makefile.in
- - descend into `support' subdirectory on a `make clean' and
- `make distclean'
- - remove parser-built, y.tab[ch] on a `make distclean' if the build
- directory and source directory are not the same
-
-support/Makefile.in
- - support various `clean' targets and remove man2html.o and man2html
-
-{configure,Makefile}.in
- - move values for DEBUG and MALLOC_DEBUG into configure.in; on by
- default for development versions; off by default for releases
- (off for profiling, too)
-
- 5/21
- ----
-parse.y
- - modified the grammar to allow a simple_list followed by yacc_EOF
- to terminate a command. This fixes problems with things like
- a backslash-newline at the end of an `eval'd string
- - change handle_eof_input_unit() to reset the token state before
- calling prompt_again(), in case the prompt to be evaluated contains
- a command substitution
-
- 5/23
- ----
-lib/readline/vi_mode.c
- - fix `r' command (rl_vi_change_char) when HANDLE_MULTIBYTE is defined
- but MB_CUR_MAX == 1
-
- 5/24
- ----
-lib/malloc/watch.c
- - don't try to print `file' argument to _watch_warn if it's null
-
-lib/malloc/malloc.c
- - changed guard checking code in internal_{malloc,free,realloc} to
- access memory as (char *) and copy into a union instead of
- casting and dereferencing a pointer to u_bits32_t, since that
- results in unaligned accesses which will cause Sparcs to upchuck
-
- 5/30
- ----
-[bash-2.05b-beta1 released]
-
-lib/readline/text.c
- - fixed a problem with rl_transpose_chars on systems supporting
- multibyte characters with a locale that doesn't have any multibyte
- chars
-
- 6/4
- ---
-expr.c
- - fix a/=0 and a%=0 to throw evaluation errors rather than core dumps
-
-lib/readline/display.c
- - fix core dump when line wrapping a multibyte character (line
- accidentally dropped from the original patch)
-
-lib/readline/mbutil.c
- - fix reversed return value from _rl_is_mbchar_matched; fixes problem
- with backward-char-search
-
- 6/10
- ----
-lib/sh/getenv.c
- - fix getenv to not free value returned by find_tempenv_variable
- - add setenv, putenv, unsetenv for completeness
-
- 6/12
- ----
-shell.c
- - change init_noninteractive to init expand_aliases to the value of
- posixly_correct
- - don't initialize expand_aliases to posixly_correct anywhere else.
- This allows the -O expand_aliases invocation option to work correctly
-
-general.c
- - fix move_to_high_fd to not try the dup2 unless the fd loop results
- in an fd > 3; just return the passed file descriptor otherwise
- - use HIGH_FD_MAX, defined in general.h, instead of hard-coded 256
- as highest file descriptor to try
-
-subst.c
- - in process_substitute, call move_to_high_fd with `maxfd' parameter
- of -1 instead of 64, so move_to_high_fd will use its maximum
-
- 6/21
- ----
-lib/malloc/malloc.c
- - don't bother calling MALLOC_MEMSET if the requested size is 0
-
-builtins/setattr.def
- - note in short doc that export and readonly can take assignment
- statements as arguments
-
-error.c
- - new function, error_prolog(), to capture common error message
- prefix code (except for parser errors)
-
- 6/25
- ----
-aclocal.m4
- - add tests for standard-conforming declarations for putenv and
- unsetenv in system header files
-
-{configure,config.h}.in
- - call BASH_FUNC_STD_PUTENV and BASH_FUNC_STD_UNSETENV, define
- HAVE_STD_GETENV and HAVE_STD_UNSETENV, respectively, if they
- succeed
-
-lib/sh/getenv.c
- - change putenv and unsetenv to take differing prototypes in
- stdlib.h into account
-
- 6/27
- ----
-[bash-2.05b-beta2 released]
-
- 6/28
- ----
-builtins/common.c
- - fix get_job_spec so that %N works when N is the size of the jobs
- list (%8 means job 8, but the 7th member of the jobs array, so
- it's OK if N == job_slots because the function returns N-1)
-
- 7/1
- ---
-shell.c
- - turn off line editing if $EMACS is set to `t'
-
- 7/10
- ----
-builtins/set.def
- - remove mention of `-i' from long help doc, since it has no effect
-
- 7/17
- ----
-[bash-2.05b released]
-
- 7/18
- ----
-
-lib/malloc/malloc.c
- - make sure that the `free_return' label has a non-empty statement
- to branch to
-
- 7/19
- ----
-locale.c
- - only call setlocale() from set_lang() if HAVE_SETLOCALE is defined;
- otherwise just return 0
-
-lib/readline/mbutil.c
- - only try to memset `ps' in _rl_get_char_len if it's non-NULL. Ditto
- for _rl_adjust_point
-
- 7/23
- ----
-execute_cmd.c
- - fix for executing_line_number() when compiling without conditional
- commands, dparen arithmetic or the arithmetic for command
-
-
- 7/24
- ----
-support/Makefile.in
- - fix maintainer-clean, distclean, mostlyclean targets
-
-builtins/common.c
- - fix bug in sh_nojobs where it doesn't pass the right number of args
- to builtin_error
-
-bashline.c
- - when using command completion and trying to avoid appending a slash
- if there's a directory with the same name in the current directory,
- use absolute_pathname() instead of just checking whether the first
- char of the match is a slash to catch things like ./ and ../
-
-examples/complete/bashcc-1.0.1.tar.gz
- - a package of completions for Clear Case, from Richard S. Smith
- (http://www.rssnet.org/bashcc.html)
-
-input.c
- - fix check_bash_input to call sync_buffered_stream if the passed fd
- is 0 and the shell is currently reading input from fd 0 -- all it
- should cost is maybe an additional read system call, and it fixes
- the bug where an input redirection to a builtin inside a script
- which is being read from stdin causes the already-read-and-buffered
- part of the script to be thrown away, e.g.:
-
- bash < x1
-
- where x1 is
-
- hostname
- read Input < t.in
- echo $Input
- echo xxx
-
-execute_cmd.c
- - in initialize_subshell(), call unset_bash_input (0) to not mess with
- fd 0 if that's where bash thinks it's reading input from. Fixes
- bug reported by jg@cs.tu-berlin.de on 17 July 2002. Should be a way
- to check whether or not the current fd 0 at the time of the call has
- not been redirected, like in the bug report. Also might eventually
- want to throw in a sync_buffered_stream if bash is reading input
- from fd 0 in a non-interactive shell into a buffered stream, so the
- stream is sync'd -- might be necessary for some uses
-
- 7/25
- ----
-lib/readline/signals.c
- - make sure rl_catch_sigwinch is declared even if SIGWINCH is not
- defined, so the readline state saving and restoring functions in
- readline.c are always the same size even if SIGWINCH is not defined,
- and undefined references don't occur when SIGWINCH is not defined
-
- 7/30
- ----
-bashline.c
- - augment patch from 7/24 to not disable rl_filename_completion_desired
- if the first char of the match is `~'
-
-lib/readline/bind.c
- - when creating `shadow' keymaps `bound' to ANYOTHERKEY, don't bind
- a key whose type is ISFUNC but whose function is the `fake'
- rl_do_lowercase_version (fixes debian bash bug #154123)
-
-lib/readline/readline.c
- - don't call _rl_vi_set_last from _rl_dispatch_subseq if
- key == ANYOTHERKEY (when truncated to `sizeof(char)', it will be 0,
- which strchr will find in `vi_textmod')
-
- 7/31
- ----
-lib/readline/input.c
- - fix rl_gather_tyi to only slurp up one line of available input, even
- if more than one line is available (fixes debian bash bug #144585)
-
- 8/3
- ---
-bashline.c
- - better fix for command completion problem -- test for directory
- explicitly with test_for_directory before turning off
- rl_filename_completion_desired, since that's the case we're trying
- to protect against
-
- 8/5
- ---
-include/shmbutil.h
- - fix ADVANCE_CHAR macro to advance the string pointer if mbrlen
- returns 0, indicating that the null wide character (wide string
- terminator) was found (debian bash bug #155436)
-
-lib/readline/mbutil.c
- - fix _rl_adjust_point to increment the string pointer if mbrlen
- returns 0
-
-support/shobj-conf
- - fix for the `-install_name' value in SHLIB_XLDFLAGS assignment for
- Darwin from the fink folks
-
- 8/6
- ---
-builtins/exit.def
- - broke code that runs ~/.bash_logout out into a separate function:
- bash_logout()
-
-builtins/common.h
- - extern declaration for bash_logout()
-
-eval.c
- - call bash_logout() from alrm_catcher(), so timed-out login shells
- run ~/.bash_logout before processing the exit trap
-
-lib/sh/strtrans.c
- - implemented $'\x{hexdigits}' expansion from ksh93
-
-configure.in
- - define RECYCLES_PIDS in LOCAL_CFLAGS for cygwin; don't bother to
- link with -luser32
-
-examples/loadables/strftime.c
- - new loadable builtin, interface to strftime(3)
-
- 8/7
- ---
-parse.y
- - parse_arith_cmd now takes a second argument, a flag saying whether
- or not to add double quotes to a parsed arithmetic command; changed
- callers
- - changed parse_dparen so it tells parse_arith_cmd to not add the
- double quotes and therefore doesn't need to remove them
- - change parse_dparen to add W_NOGLOB|W_NOSPLIT|W_QUOTED flags to word
- created when parsing (( ... )) arithmetic command, since the double
- quotes are no longer added
-
-make_cmd.c
- - in make_arith_for_expr, set the flags on the created word to
- W_NOGLOB|W_NOSPLIT|W_QUOTED
-
-execute_cmd.c
- - change execute_arith_command to expand the expression with
- expand_words_no_vars, like the arithmetic for command code does
- - fix execute_arith_command to handle the case where the expanded
- expression results in a NULL word without crashing
-
-tests/{arith-for,cprint}.tests
- - change expected output to account for no longer adding quotes to
- ((...)) commands
-
- 8/8
- ---
-print_cmd.c
- - take out the space after printing the `((' and before printing the
- `))' in print_arith_command, print_arith_for_command, and
- xtrace_print_arith_cmd
-
-tests/{arith-for,cprint}.tests
- - change expected output to account for no longer adding leading and
- trailing spaces when printing ((...)) and arithmetic for commands
-
- 8/17
- ----
-subst.c
- - fix issep() define to handle case where separators[0] == '\0', in
- which case it always returns false
-
-lib/readline/histexpand.c
- - fix off-by-one error in history_expand_internal when using the `g'
- modifier that causes it to skip every other match when matching a
- single character (reported by gjyun90@resl.auto.inha.ac.kr)
-
-doc/{bash.1,bashref.texi}
- - make sure that the name=word form of argument to declare/typeset,
- export, and readonly is documented in the description
-
- 8/30
- ----
-lib/readline/histexpand.c
- - make history_expand_internal understand double quotes, because
- single quotes are not special inside double quotes, according to
- our shell-like quoting conventions. We don't want unmatched
- single quotes inside double-quoted strings inhibiting history
- expansion
- - make `a' modifier equivalent to `g' modifier for compatibility with
- the BSD csh
- - add a `G' modifier that performs a given substitution once per word
- (tokenized as the shell would do it) like the BSD csh `g' modifier
-
- 8/31
- ----
-braces.c
- - when compiling for the shell, treat ${...} like \{...} instead of
- trying to peek backward when we see a `{'. This makes it easier
- to handle things like \${, which should be brace expanded because
- the $ is quoted
-
- 9/7
- ---
-aclocal.m4
- - redirect stdin from /dev/null in BASH_CHECK_DEV_FD before testing
- the readability of /dev/fd/0, so we're dealing with a known quantity
-
- 9/11
- ----
-[prayers for the victims of 9/11/01]
-
-shell.c
- - fix maybe_make_restricted to handle a restricted login shell with a
- base pathname of `-rbash' and skip over any leading `-'
-
- 9/13
- ----
-builtins/evalstring.c
- - in parse_and_execute, make sure we don't try to run unwind-protects
- back to `pe_dispose' after a longjmp back to top_level if the
- pe_dispose frame hasn't been initialized
-
-lib/readline/display.c
- - fix problem with prompt overwriting previous output when the output
- doesn't contain a newline in a multi-byte locale. This also should
- fix the problem of bash slowing down drastically on long lines when
- using a multi-byte locale, because it no longer tries to rewrite the
- entire line each time. Patch from Jiro SEKIBA <jir@yamato.ibm.com>
-
-parse.y
- - move the typedef for alias_t that is compiled in if ALIAS is not
- defined up before the prototype for push_string, since that takes
- an alias_t * parameter
-
-lib/readline/terminal.c
- - bind the termcap description's left and right arrow keys to
- rl_backward_char and rl_forward_char, respectively, instead of
- rl_forward and rl_backward (which are just there for backwards
- compatibility)
-
-aclocal.m4
- - when testing readability of /dev/stdin, redirect stdin from /dev/null
- to make sure it's a readable file
-
- 9/17
- ----
-config-bot.h
- - don't test __STDC__ when deciding whether or not to use stdarg.h;
- just use it if it's present
-
-tests/read2.sub
- - redirect from /dev/tty when using `read -t'
-
- 9/20
- ----
-builtins/history.def
- - when reading `new' entries from the history file with `history -n',
- fix increment of history_lines_this_session by taking any change
- in history_base into account
-
-lib/sh/pathphys.c
- - changes to sh_physpath to deal with pathnames that end up being
- longer than PATH_MAX without dumping core
-
-lib/readline/doc/{history.3,hsuser.texinfo},doc/ bash.1
- - documented new `a' and `G' history modifiers
-
- 9/25
- ----
-lib/readline/misc.c
- - when traversing the history list with arrow keys in vi insertion
- mode, put the cursor at the end of the line (like in emacs mode)
-
-mksyntax.c
- - don't try to use \a and \v unless __STDC__ is defined; use the
- ascii integer equivalents otherwise
- - include "config.h" in the generated syntax.c file for a possible
- definition of `const'
-
-doc/{bash.1,bashref.texi}
- - document the meaning of a null directory in $PATH
-
- 9/26
- ----
-parse.y
- - fix set_line_mbstate to handle case where mbrlen() returns 0,
- indicating the null wide character
- - fix set_line_mbstate so we don't directly compare a char variable
- to EOF, since char can (and is) unsigned on some machines
-
-bashline.c
- - change bash_execute_unix_command to save a little bit more state:
- last_shell_builtin, this_shell_builtin, last_command_exit_value
-
- 9/27
- ----
-execute_cmd.c
- - tentative change to execute_simple_command to avoid freeing freed
- memory in the case where bash forks early but still ends up calling
- execute_disk_command, without passing newly-allocated memory to
- make_child. This may fix the core dumps with the linux-from-scratch
- folks
-
- 9/28
- ----
-Makefile.in,{builtins,lib/sh}/Makefile.in
- - fix up dependencies, mostly on ${BUILD_DIR}/version.h, so that
- parallel makes work with GNU and BSD makes
-
-shell.h
- - new struct to save partial parsing state when doing things like
- bash_execute_unix_command and other operations that execute
- commands while a line is being entered and parsed
-
-parse.y
- - new functions, save_parser_state() and restore_parser_state(), to
- save and restore partial parsing state
-
-bashline.c
- - change bash_execute_unix_command to call {save,restore}_parser_state
-
-builtins/jobs.def
- - change execute_list_with_replacements to eliminate a run_unwind_frame
- in favor of calling the cleanup explicitly and discarding the frame
-
-execute_cmd.c
- - change execute_for_command to avoid a run_unwind_frame in the case
- where the loop variable is readonly or otherwise not assignable
- - change execute_select_command and execute_simple_command to use
- discard_unwind_frame by running the cleanup code explicitly, instead
- of using run_unwind_frame
- - make sure execute_select_command decreases loop_level even on error
-
- 9/30
- ----
-doc/{bash.1,bashref.texi}
- - fixed description of `unset' now that unsetting a previously-unset
- variable is no longer an error
-
- 10/3
- ----
-{configure,config.h}.in
- - augment check for strtold with additional check to detect the
- horribly broken hp/ux 11.x implementation that returns `long_double';
- defines STRTOLD_BROKEN if so
-
-builtins/printf.def
- - define floatmax_t as `double' if STRTOLD_BROKEN is defined
-
- 10/5
- ----
-lib/readline/keymaps.c
- - don't automatically bind uppercase keys to rl_do_lowercase_version
- in rl_make_bare_keymap
-
-lib/readline/readline.c
- - explicitly check for ANYOTHERKEY binding to rl_do_lowercase_version
- and dispatch to lowercase of key when a prefix is not matched
-
- 10/12
- -----
-bashline.c
- - set COMP_WORDBREAKS in enable_hostname_completion to the value
- of rl_completer_word_break_characters
-
-variables.c
- - new special variable COMP_WORDBREAKS, controls the value of
- rl_completer_word_break_characters
-
-variables.h
- - new extern declaration for sv_comp_wordbreaks()
-
-subst.c
- - change split_at_delims to behave more like shell word splitting if
- the passed value for the delimiters is NULL, indicating that the
- function is to use $IFS to split
-
-{execute_cmd,jobs,test,findcmd,input,make_cmd,redir,shell}.c
-builtins/mkbuiltins.c,builtins/{fc,history,source,umask}.def
-lib/sh/netconn.c
-lib/termcap/termcap.c
-lib/readline/histfile.c
- - make sure all inclusions of <sys/file.h> are protected by
- HAVE_SYS_FILE_H
-
-bashline.c
- - don't turn off rl_filename_completion_desired in
- attempt_shell_completion if the partial pathname contains a slash.
- This still doesn't solve the problem of partial pathname completion
- starting with a directory in the current directory without a
- leading `./'. There's no way to tell the difference between that
- and a file found in $PATH (which may contain `.') at the point that
- attempt_shell_completion acts
-
- 10/18
- -----
-locale.c
- - don't set lc_all to the default locale when LC_ALL is being unset
- - new function, reset_locale_vars(), called to recompute the correct
- locale variable values when LC_ALL is unset
- - changed set_lang to not set LC_ALL, which it never should have been
- doing in the first place, and to maintain a local variable `lang'
- corresponding to $LANG
- - change get_locale_var to use the precedence posix.2 specifies:
- LC_ALL overrides individual variables; LANG, if set, is the default
- - change set_locale_var to call get_locale_var to get the appropriate
- value for the variable being set or unset
- - call get_locale_var instead of using passed value in set_locale_var
- to get the defaulting and precedence right
-
-lib/readline/nls.c
- - new function, _rl_get_locale_var(), which does the same thing as
- locale.c:get_locale_var(), with the right precedence and defaulting,
- using sh_get_env_value to get the right bash variable values
- - if HAVE_SETLOCALE is defined, _rl_init_eightbit first calls
- _rl_get_locale_var to get the right value for LC_CTYPE, and uses
- that in the call to setlocale. If _rl_get_locale_var returns NULL,
- call setlocale() to get the current international environment, and,
- finally, if that returns null, call setlocale with a second argument
- of "" to force the implementation's `native' environment
-
-pcomplete.c
- - change gen_wordlist_completions to dequote the text before comparing
- it against the expanded word list
- - changed gen_matches_from_itemlist to do the same thing
-
-bashline.c
- - new global function, bash_dequote_word, calls bash_dequote_filename
- on the text passed. Used by the programmable completion code
-
-lib/readline/histfile.c
- - make sure that whenever read_history_range returns a non-zero value
- that it sets errno to some useful value
-
- 10/19
- -----
-variables.c
- - COMP_WORDBREAKS is now a dynamic variable, mirroring value of
- rl_completer_word_break_characters. Makes sure that the variable
- always points to dynamic memory if it's not null or the readline
- default
-
-bashline.c
- - change enable_hostname_completion to manage a dynamic value of
- rl_completer_word_break_characters, since assignments to
- COMP_WORDBREAKS can change its value unpredictably
-
-lib/readline/{complete.c,readline.h}
- - rl_completer_word_break_characters no longer has `const' attribute
-
-bashline.c
- - clean up necessary places due to rl_completer_word_break_characters
- no longer being `const'
-
-doc/{bash.1,bashref.texi}
- - document new COMP_WORDBREAKS variable
-
- 10/21
- -----
-print_cmd.c
- - fix indirection_level_string to handle the case where the decoded
- $PS4 is null without seg faulting
-
- 10/22
- -----
-builtins/shift.def
- - make sure that there is actually an argument when reporting a shift
- count that exceeds the number of positional paramters and
- shift_verbose is enabled
-
-lib/readline/rltty.c
- - change SET_SPECIAL to call a new function, set_special_char, since
- it contains a block. It's called infrequently, so the performance
- impact of making it a function should be negligible, and it helps
- debugging
-
- 10/29
- -----
-bashline.c
- - make sure the editor in VI_EDIT_COMMAND and EMACS_EDIT_COMMAND is
- quoted; it might contain spaces (e.g., `emacs -nw')
-
-aclocal.m4
- - cache ac_cv_rl_version in RL_LIB_READLINE_VERSION macro
-
-configure.in
- - change logic that sets RL_INCLUDEDIR so that it doesn't try to set
- a bogus include path if the argument to --with-installed-readline
- is `yes' -- helps with cross-compiling
-
-lib/readline/histexpand.c
- - fix history_tokenize_word so that it handles <( and >( better
-
- 10/30
- -----
-redir.c
- - fix write_here_string so it handles the case where `herestr' expands
- to NULL without seg faulting
-
- 10/31
- -----
-mailcheck.c
- - reverse logic flip from bash-2.05 that handled systems that don't
- change the atime when the mailbox is accessed; make sure the file
- is bigger before we report new mail. This is the case in the vast
- majority of cases. Reported by jim@jtan.com
-
- 11/5
- ----
-parse.y
- - change action for `for x; { list; }' and corresponding `select'
- production to use \"$@\" instead of just $@, as it is with all the
- other actions
-
- 11/9
- ----
-parse.y
- - new flag for parse_matched_pair: P_DQUOTE, indicating that the
- pair of characters being matched is between double quotes
- - parse_matched_pair now passes P_DQUOTE down to recursive calls:
- if the open char to be matched is a `"' or the passed-in flags
- include P_DQUOTE, set the local `rflags' variable to P_DQUOTE and
- pass `rflags' down to recursive calls
- - if `rflags' includes P_DQUOTE, don't try to ansiexpand $'...' or
- locale expand $"..."; consistent with other quoting constructs
-
- 11/11
- -----
-doc/{bash.1,bashref.texi}
- - explicitly note that variables referenced in arithmetic expressions
- without using `$' evaluate to 0 if they are null or unset
- - note that a null variable value evaluates to 0 when used in an
- arithmetic context, like when a variable with the `-i' attribute is
- assigned a null value
- - document the ${!prefix@} expansion as equivalent to ${!prefix*}
-
- 11/12
- -----
-doc/{bash.1,bashref.texi}
- - note that the value of an arithmetic expression is as in C
- - change the wording to note that `arithmetic evaluation' (not
- arithmetic expansion, which has a different meaning) is performed
- on the value assigned to a variable whose integer attribute is set
-
- 11/13
- -----
-execute_cmd.c
- - fix execute_disk_command so it calls exit() after printing the error
- message in a restricted shell context if the shell has already forked
- (nofork != 0 && there are no pipes)
-
- 11/19
- -----
-builtins/type.def
- - don't report on aliases unless expand_aliases is set and the parser
- is performing alias expansion; changed tests/type.tests and
- tests/type.right accordingly
-
- 11/25
- -----
-general.c
- - fix for full pathnames including drive letters on cygwin from
- Corinna (convert to posix-style paths, which the rest of the
- code handles much better)
-
-lib/readline/text.c
- - fixes to overwrite mode from jimmy@is-vn.bg:
- o in _rl_overwrite_char, do the overwrite mode self-insert
- as one group, even when overwriting more than 1 char
- o in _rl_overwrite_char, do the insert before the delete so
- that an undo positions the cursor on the character restored,
- not to the right of it
- o in _rl_overwrite_rubout, don't do rl_insert_char(' ') unless
- rl_point < rl_end. Since overwrite-mode self-insert acts as
- in insert-mode when at eol, make rubout behave like
- insert-mode rubout
-
- 11/30
- -----
-lib/readline/misc.c
- - call rl_replace_line with `1' as second parameter if we're going to
- immediately overwrite the undo list
-
-lib/readline/search.c
- - in make_history_line_current, use _rl_replace_text to make the line
- replacement an undoable operation. Affects all non-incremental
- search functions.
-
-parse.y
- - make behavior introduced on 11/9 dependent on extended_quote
- variable, controllable by extquote shopt option. Default setting is
- on for backwards compatibility
-
-builtins/shopt.def
- - new `extquote' option to control extended_quote variable
-
- 12/3
- ----
-jobs.c
- - change message printed when attempting to put a background job in
- the background with `bg' to include the job id and make the
- statement declarative
-
- 12/10
- -----
-bashhist.h
- - define explicit flag values for history_control
-
-variables.c
- - change sv_history_control to use new flag values
- - change sv_history_control to parse $HISTCONTROL as a colon-separated
- list of values for the history_control variable
-
-bashhist.c
- - change check_history_control to use new flag values and restructure
- to remove case statement
- - new function hc_erasedups(line); removes all entries matching LINE
- from the history list
- - call hc_erasedups() from check_add_history after we've determined
- that we're saving the line
-
-doc/{bash.1,bashref.texi}
- - documented new options available for $HISTCONTROL and that it can
- be a colon-separated list of history control options
-
- 12/11
- -----
-subst.c
- - fix pat_subst() to not increment `e' (pointer to the end of the
- matched portion of the string) until after we're sure we're going
- around the loop again; fixes problem with empty replacements for
- a pattern that doesn't match (bug reported by Don Coleman
- <don@coleman.org>)
-
- 12/17
- -----
-lib/readline/display.c
- - fixes to multibyte redisplay from jir@yamato.ibm.com (Jiro SEKIBA):
- o speed up calculation of first difference between old and new
- lines in the common case
- o don't try to see if we're in the middle of a multbyte char
- in update_line (we'll see how this one works out)
-
- 12/18
- -----
-doc/bashref.texi
- - make it clear that the `command-list' function definition may be
- terminated by an ampersand before the closing brace
-
- 12/28
- -----
-redir.c
- - set `expanding_redir' flag when expanding words in a redirection
-
-subst.c
- - new function, exp_jump_to_top_level(), to do any word expansion
- cleanup before a call to jump_to_top_level from within that file;
- sets expanding_redir back to 0 before jump_to_top_level
-
-variables.c
- - in find_variable(), don't call find_variable_internal with a second
- parameter of 1 if expanding_redir is non-zero
- - in find_variable_internal(), don't search the temporary env if
- subshell_environment includes SUBSHELL_FORK (indicating a simple
- command) and expanding_redir is non-zero
-
-parse.y
- - increment line_number when we read a \<newline> pair
-
-array.c
- - added array_unshift_element and array_shift_element (which just call
- array_shift and array_rshift, respectively), for bash debugger
- support
-
- 1/4/2003
- --------
-doc/{bash.1,bashref.texi}
- - note in the section describing the execution environment passed to
- children that subshells inherit shell functions marked for export
- - note in the section describing shell functions the possibility
- that exported functions may result in two entries in the environment
- with the same name
-
-parse.y
- - when pushing an alias expansion onto the pushed_string list, append
- a space to the expanded definition to make the parser's lookahead
- work without using the `mustpop' hack in shell_getc
-
- 1/8
- ---
-shell.c
- - change calls to exit() with EX_USAGE as a parameter to use
- EX_BADUSAGE instead, since EX_USAGE is defined as 258 and is
- technically out of range
-
- 1/14
- ----
-aclocal.m4
- - check for the termcap functions in libc first: if we don't have
- to link in another library, let's not do it
- - change the test for mbstate_t to use AC_TRY_COMPILE instead of
- AC_TRY_RUN
-
-doc/{bash.1,bashref.texi}
- - document that bash turns line editing off if environment variable
- EMACS is set to `t' when it starts up
-
-doc/bash.1
- - minor change to give the ftp url for the latest version of bash in
- the bug reports section
-
-lib/readline/histexpand.c
- - in get_history_event, cast a couple of `const char *' variables to
- `char *' in function call parameter lists to avoid compiler warnings
-
- 1/21
- ----
-builtins/cd.def
- - change `cd -' so it prints the current working directory after a
- successful chdir even when the shell is not interactive
-
- 1/31
- ----
-lib/readline/doc/rltech.texinfo
- - clarified exactly what is meant by the term `application-specific
- completion function', made its use consistent, and documented
- what variables are changed before such a function is called
-
-lib/readline/input.c
- - new function, _rl_pushed_input_available(), returns non-zero if
- there are characters in the input queue managed by rl_get_char
- and _rl_unget_char
-
-lib/readline/rlprivate.h
- - new extern declaration for _rl_pushed_input_available
-
-lib/readline/callback.c
- - change rl_callback_read_char to check _rl_pushed_input_available
- and loop if there's something there, so characters don't languish
- until more keyboard input is read
-
-execute_cmd.c
- - new variable, last_command_exit_signal, non-zero if
- last_command_exit_value result from wait_for was result of a signal
-
-nojobs.c
- - keep track of whether or not a given pid was killed by a signal with
- a new flag in the pid_list array
- - new function int find_termsig_by_pid(pid_t pid) to get the
- terminating signal, if any, for a particular pid
- - new function int get_termsig(WAIT status) returns the terminating
- signal corresponding to status
- - set last_command_exit_signal in wait_for and the various wait_for_xx
- functions
-
-jobs.c
- - new functions, process_exit_signal and job_exit_signal, return the
- signal that killed a given process or job, if a signal caused its
- death
- - set last_command_exit_signal in wait_for by calling job_exit_signal
- or process_exit_signal appropriately
-
-subst.c
- - don't resend SIGINT to ourselves unless last_command_exit_signal is
- SIGINT and last_command_exit_value == 128 + SIGINT. This fixes the
- $(exit 130) bug reported by Paul Jarc
-
-expr.c
- - new function, expr_bind_variable, calls bind_int_variable and
- then stupidly_hack_special_variables. This fixes the
- `let OPTIND=1' bug
-
-bashline.c
- - change history_and_alias_expand_line and shell_expand_line to call
- history_expand_line_internal so calls to pre_process_line are
- localized
- - change history_expand_line_internal and cleanup_expansion_error to
- temporarily turn off hist_verify before calling pre_process_line
- to avoid the effects described by teirllm@dms.auburn.edu
-
-parse.y
- - don't unconditionally turn off PST_ALEXPNEXT in push_string. This
- fixes the multiple alias expansion bug reported by Paul Jarc.
-
-lib/readline/vi_mode.c
- - change rl_vi_subst to push `l' instead of ` ' -- it should be
- equivalent, but this has been reported to fix a problem in multibyte
- locales
-
-lib/readline/readline.h
- - new state flag value RL_STATE_TTYCSAVED, indicates that save_tty_chars
- has been called. Since it's only used and visible internally, it's
- undocumented
-
-lib/readline/rltty.h
- - changed all of the members of _rl_tty_chars struct to `unsigned char'
-
-lib/readline/rltty.c
- - set the RL_STATE_TTYCSAVED after save_tty_chars is called
- - new function, rl_tty_unset_default_bindings(), resets bindings for
- everything rl_tty_set_default_bindings() messes with back to
- rl_insert, so rl_tty_set_default_bindings can be called again with
- possible changes
- - new function that does the bulk of the work for
- rltty_set_default_bindings: _rl_bind_tty_special_chars()
- - change prepare_terminal_settings so that it can track changes to the
- terminal special chars made by stty(1): unset the bindings with
- rl_tty_unset_default_bindings before calling save_tty_chars, and
- _rl_tty_set_default_bindings after, with the new values from
- get_tty_settings(). This implements a long-standing request, most
- recently made by Tim Waugh of Red Hat.
-
-lib/readline/readline.h
- - extern declaration for rl_tty_unset_default_bindings()
-
-lib/readline/readline.c
- - new function, reset_default_bindings, calls
- rl_tty_unset_default_bindings() to reset the terminal special chars
- back to rl_insert and then read the new ones
-
-lib/readline/doc/rltech.texinfo
- - documented rl_tty_unset_default_bindings()
-
- 2/1
- ---
-[prayers and condolences to the families of the space shuttle crew members]
-
-aclocal.m4
- - add checks for mbrtowc and mbrlen in BASH_CHECK_MULTIBYTE
- - new check, BASH_FUNC_CTYPE_NONASCII, checks whether or not the ctype
- functions handle non-ascii characters correctly
-
-config.h.in
- - add HAVE_MBRTOWC and HAVE_MBRLEN
- - add NO_MULTIBYTE_SUPPORT for new configure argument
- - add CTYPE_NON_ASCII
-
-config-bot.h, lib/readline/rlmbutil.h
- - make sure that mbrtowc, mbrlen, and wcwidth are all present before
- turning on HANDLE_MULTIBYTE
- - turn off multibyte chars if NO_MULTIBYTE_SUPPORT is defined
-
-configure.in
- - new argument --enable-multibyte (enabled by default), allows
- multibyte support to be turned off even on systems that support it
-
-lib/readline/chardefs.h
- - define NON_NEGATIVE as 1 if CTYPE_NON_ASCII is defined
-
- 2/3
- ---
-config.h.in
- - add HAVE_WCTOMB
-
-aclocal.m4
- - check for wctomb in BASH_CHECK_MULTIBYTE
-
- 2/4
- ---
-lib/readline/vi_mode.c
- - in _rl_vi_change_mbchar_case, make sure the result from wctomb()
- is NULL-terminated before trying to insert it with rl_insert_text()
-
- 2/5
- ---
-lib/readline/display.c
- - fix to update_line to avoid problems on systems with multibyte
- characters when moving between history lines when the new line
- has more glyphs but fewer bytes (twaugh@redhat.com)
-
-lib/readline/vi_mode.c
- - use wcrtomb() instead of wctomb() in _rl_vi_change_mbchar_case
-
-pcomplete.c
- - fix init_itemlist_from_varlist to handle the case where the
- `varlist' is NULL
-
-doc/{bash.1,bashref.texi}
- - clarified when a simple command may fail without the shell exiting
- when -e is set
-
- 2/13
- ----
-parse.y
- - when bash is started with --nolineediting, ignore \[ and \] when
- decoding the prompt string
-
-subst.c
- - fix remove_quoted_nulls so that a string with a CTLESC appearing
- after a CTLNUL (which was removed) does not leave characters in
- the string inappropriately
-
- 2/14
- ----
-builtins/common.h
- - new flag value for parse_and_execute(): SEVAL_RESETLINE, which
- allows the caller to specify whether or not the internal idea
- of the line number should be reset to 1
-
-builtins/evalstring.c
- - parse_and_execute() now tells push_string to reset the line
- number only if the SEVAL_RESETLINE flag is set by the caller
-
- 2/15
- ----
-builtins/evalfile.c
- - pass SEVAL_RESETLINE from _evalfile() to parse_and_execute()
-
-subst.c
- - if the shell is currently interactive, pass SEVAL_RESETLINE to
- parse_and_execute() when doing command substitution
-
-jobs.c
- - add SEVAL_RESETLINE to parse_and_execute while running SIGCHLD trap
-
-command.h
- - add `line' members to case_com, for_com, select_com
- - rearranged order of members in some of the command structs, so
- `flags' and `line' are first
- - added a `source_file' member to the function_def struct; keeps
- track of where the function was defined
-
-doc/Makefile.in
- - add some new suffix rules: .dvi.ps
-
-doc/{bash.1,bashref.texi}
- - added text to the description of the `trap' builtin tightening up
- the language describing when the ERR trap will be run
-
-error.c
- - if $BASH_SOURCE (internally-maintained) exists, use BASH_SOURCE[0]
- in get_name_for_error if the shell is not interactive
-
-array.h
- - new convenience defines: array_push and array_pop
-
-variables.c
- - change get_funcname to return this_shell_function->name only if
- arrays have not been compiled into the shell
- - change init_funcname_var to initialize FUNCNAME as an array variable
- if we have arrays
- - new function: get_self(SHELL_VAR *self), a degenerate `dynamic_value'
- function for dynamic variables
- - new function: init_dynamic_array_var(), a generic dynamic array
- variable initializer to handle the common case
- - use init_dynamic_array_var() instead of explicit init_dirstack_var()
- - use init_dynamic_array_var() instead of explicit init_groups_var()
- - new dynamic array variables: BASH_ARGC, BASH_ARGV, BASH_SOURCE,
- BASH_LINENO, initialized with init_dynamic_array_var
-
-shell.c
- - initialize BASH_LINENO, BASH_SOURCE, FUNCNAME in open_shell_script
-
-{execute_cmd,trap}.c
- - take out trap_line_number, since parse_and_execute doesn't reset the
- line number any more when running the trap commands
-
-make_cmd.c
- - augment make_function_def to get source file name and call
- bind_function_def to save the entire FUNCTION_DEF
-
-variables.c
- - new hash table: shell_function_defs, keeps table of shell function
- definitions including source file and line number info corresponding
- to shell_functions table
- - new functions: find_function_def and bind_function_def to manage
- the shell_function_defs hash table
- - new function: unbind_function_def to remove a function definition
- from the shell_function_defs table (right now uncalled)
-
-variables.h
- - extern declaration for bind_function_def, find_function_def
- - new extern declaration for unbind_function_def
-
-execute_cmd.c
- - in function prologue and epilogue, push and pop FUNCNAME,
- BASH_SOURCE, and BASH_LINENO information
-
-dispose_cmd.c
- - broke the code that disposes a FUNCTION_DEF out into two new
- functions: dispose_function_def and dispose_function_def_contents
-
-dispose_cmd.h
- - new extern declarations for dispose_function_def_contents and
- dispose_function_def
-
-copy_cmd.c
- - move body of copy_function_def (other than allocating a new
- FUNCTION_DEF) to copy_function_def_contents
- - make sure to copy the new source_file member of a function_def in
- copy_function_def_contents
- - copy_function_def is no longer static, copy_function_def_contents
- is not either
-
-command.h
- - new extern declaration for copy_function_def_contents and
- copy_function_def
-
-parse.y
- - keep a stack of line numbers where case, select, and for commands
- start, with a maximum nesting level of 128; increment when reading
- word after `for', `select' or `case' in read_token_word; decrement
- in grammar actions after parsing a complete for, arith_for, select,
- or case command
- - create for, case, arith_for, and select commands with an extra
- line number (word_lineno[word_top]) argument
-
-make_cmd.c
- - make_for_or_select, make_for_command, make_case_command, and
- make_select_command all take an extra `line_number' argument
-
-make_cmd.h
- - corresponding changes to extern declarations for those functions
-
- 2/16
- ----
-{execute_cmd,shell,variables}.c
- - follow each call to remember_args with a call to push_args or
- pop_args to manage the BASH_ARGV and BASH_ARGC arrays. Only set
- when the shell is started to run shell script or runs a shell
- function. Doesn't handle `set' or `shift' yet, nor `source'.
-
-execute_cmd.c
- - keep track of the level of subshells with a new variable, manipulated
- in execute_in_subshell
- - set currently_executing_command in execute_command_internal(),
- even if we're running a trap
- - better line number management when executing simple commands,
- conditional commands, for commands in execute_command_internal()
- and the various functions that implement the commands
- (execute_cond_command, execute_for_command, execute_etc.)
-
-variables.c
- - new dynamic variable BASH_SUBSHELL, with new get_subshell and
- assign_subshell functions to manipulate it
- - new functions push_args (WORD_LIST *list) and pop_args (void) to
- manage the BASH_ARGC and BASH_ARGV dynamic array variables
-
-variables.h
- - new extern declarations for push_args and pop_args
-
-builtins/evalfile.c
- - in _evalfile, do appropriate things to the FUNCNAME, BASH_ARGV,
- BASH_ARGC, BASH_SOURCE, and BASH_LINENO variables
-
-support/mksignames.c
- - add another fake signal for `trap'; make NSIG+2 == `RETURN'
-
-trap.c
- - _run_trap_internal now returns an int: the exit value of the command
- run as the result of the trap
- - run_debug_trap now returns an int: the exit value of the command
- run as the result of the trap
- - RETURN is a new special trap
- - new function: set_return_trap(char *command) interface for the rest
- of the shell, like set_{debug,error}_trap
- - new function: run_return_trap()
- - command substitution and other child processes don't inherit the
- return trap
-
-trap.h
- - new extern declaration for set_return_trap() and run_return_trap
- - new defines for RETURN_TRAP; increment BASH_NSIG
- - change extern declaration for run_debug_trap() since it now returns
- an int
-
-shell.c
- - new invocation long option: --debugger, turns on debugging and
- sets internal `debugging_mode' variable
-
-execute_cmd.c
- - new code to save return trap when executing a shell function, so
- shell functions don't inherit it
- - run debug trap before binding the variable and running the action
- list in a `for' command
- - run debug trap before binding the selection variable and running
- the query in a `select' command
- - run debug trap before running matcher in a `case' command
-
-builtins/set.def
- - new `set -o functrace' (set -T), causes DEBUG trap to be inherited
- by shell functions
- - new `set -o errtrace' (set -E), causes ERR trap to be inherited
- by shell functions
-
-flags.c
- - new flags -E and -T, control error_trace_mode and
- function_trace_mode respectively
-
-flags.h
- - new extern declarations for error_trace_mode and function_trace_mode
-
- 2/17
- ----
-doc/bashref.texi
- - changed the `dircategory' as per Karl Berry's suggestion
-
-doc/texinfo.tex
- - update to version of 2003/02/04 from texinfo.org
-
-support/texi2dvi
- - update to version 1.14 from texinfo-4.5 distribution
-
- 2/20
- ----
-support/config.{guess,sub}
- - update to versions of 2002/11/30
-
-lib/readline/doc/manvers.texinfo
- - renamed to version.texi to match other GNU software
- - UPDATE-MONTH variable is now `UPDATED-MONTH'
-
-lib/readline/doc/{hist,rlman,rluserman}.texinfo
- - include version.texi
-
-doc/version.texi
- - new file, with standard stuff matching other GNU distributions
-
-{doc,lib/readline/doc}/Makefile.in
- - include right stuff for `version.texi'
-
-lib/readline/doc/{rluserman,rlman,hist}.texinfo
- - use @copying and @insertcopying and @ifnottex instead of @ifinfo
- - add FDL as an appendix entitled `Copying This Manual'
-
-lib/readline/doc/{rltech,rluser,hstech,hsuser}.texi
- - changed the suffix from `texinfo' to `texi'
-
-lib/readline/doc/{rlman,rluserman}.texinfo, doc/bashref.texi
- - include rltech.texi,rluser.texi,hstech.texi, and hsuser.texi
-
-lib/readline/doc/Makefile.in,doc/Makefile.in
- - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi
-
-lib/readline/doc/{rlman,rluserman}.texinfo
- - changed the suffix from `texinfo' to `texi'
-
-lib/readline/doc/hist.texinfo
- - renamed to history.texi
-
- 2/25
- ----
-pathnames.h.in
- - moved pathnames.h here so value of DEBUGGER_START_FILE can be
- substituted by configure
-
-aclocal.m4
- - added AM_PATH_LISPDIR for debugger
-
-configure.in
- - added some variables: `bashvers', `relstatus' to use info in more
- than one place
- - call AM_PATH_LISPDIR
- - new option: --enable-debugger, sets DEBUGGER cpp option
- - new option with AC_ARG_VAR: DEBUGGER_START_FILE
- - make `pathnames.h' a file generated by configure
-
-Makefile.in
- - add rule to create pathnames.h
-
-builtins/declare.def
- - added extra line number and source file name to `declare -F' output
- if `--debugger' is used at startup
-
-builtins/evalfile.c
- - call run_return_trap from source_file before returning the result
- from _evalfile()
-
-execute_cmd.c
- - call run_return_trap in execute_function before restoring the old
- context
-
-builtins/source.def
- - arrange to save and restore DEBUG traps when sourcing files if
- function_trace_mode (set -o functrace) is not set
-
-print_cmd.c
- - broke print_for_command, print_select_command, print_case_command
- into two functions each: one to print the `header' and one for
- the body
- - print_cond_command is no longer static
- - print_arith_command now takes a WORD_LIST *, since it doesn't
- actually do anything with the ARITH_COM it's passed except print
- the enclosed WORD_LIST
- - print_arith_command is no longer static
-
-externs.h
- - extern declarations for print_{for,select,case}_command_head,
- print_cond_command, print_arith_command
-
-{.,builtins,lib/sh}/Makefile.in
- - corrected dependencies on pathnames.h, since it's now created in
- the build directory
-
- 3/5
- ---
-lib/glob/glob.c
- - handle alloca() failing (it's supposed to return NULL)
- - use malloc() (with its attendent bookkeeping) instead of alloca()
- in glob_filename()
-
-subst.c
- - check whether shell_glob_filename returns NULL in
- glob_expand_word_list
- - change parameter_brace_expand_rhs to handle cases like
- ${a[2]:=value} by properly creating the array element instead of a
- variable named `a[2]' (reported by <opengeometry@yahoo.ca>)
-
-variables.c
- - change bind_int_variable to use valid_array_reference instead
- of looking for `['
-
-lib/readline/vi_mode.c
- - check for `a' in _rl_vi_done_inserting so the text inserted by an
- `a' command can be reinserted with a `.'
-
-lib/readline/readline.c
- - when entering vi insertion mode in readline_internal_setup(), make
- sure that _rl_vi_last_key_before_insert is set to `i' so that undo
- groups and redo work better (reported by <opengeometry@yahoo.ca>)
-
-lib/glob/sm_loop.c
- - handle ?(...) in a pattern immediately following a `*', instead of
- ignoring the `(' and treating the `?' as a single-char match, as
- long as FNM_EXTFLAG is set (reported by <anderson110@poptop.llnl.gov>)
-
-aclocal.m4
- - new test for presence of struct timezone, BASH_STRUCT_TIMEZONE
-
-config.h.in
- - add HAVE_STRUCT_TIMEZONE
-
-configure.in
- - call BASH_STRUCT_TIMEZONE
-
-execute_cmd.c
- - don't try to use `struct timezone' in calls to gettimeofday unless
- HAVE_STRUCT_TIMEZONE is defined; use (void *)NULL otherwise
-
- 3/20
- ----
-execute_cmd.c
- - new variable, the_printed_command_except_trap, saves the command
- being executed before a trap is executed, for the debugger
-
-trap.c
- - if in debugging mode, let command substitutions and other child
- processes inherit the DEBUG and ERR traps if the `functrace'
- (which is really a bad name, given this semantic) or `errtrace'
- options, respectively, have been set
-
-shell.c
- - local_pending_command renamed to command_execution_string; no longer
- static
-
-variables.c
- - new dynamic variable, BASH_COMMAND, set to the command string
- currently executing, or the one that caused a trap to execute
- (mapped to the_printed_command_except_trap)
- - new variable, BASH_EXECUTION_STRING, set to the argument to the
- -c invocation option, if the shell was started that way
-
- 3/22
- ----
-execute_cmd.c
- - changed execute_for_command, eval_arith_for_expr,
- execute_select_command, execute_arith_command, execute_cond_command,
- execute_simple_command to implement new DEBUG trap semantics
- for the debugger: if the DEBUG trap commands return a non-zero
- status and debugging_mode is non-zero, we skip the command to be
- executed
-
-trap.c
- - change run_debug_trap for the debugger: if we're in the debugger
- and the DEBUG trap returns 2 while we're in a function or sourced
- script, we force a `return'
-
-shell.c
- - new function, start_debugger(), that sources the debugger start file
- and turns the debugger on
-
-builtins/shopt.def
- - new settable option, `extdebug', turns on debugging_mode, as if
- --debugger had been supplied at invocation (but does not source
- debugger startup file)
-
-trap.c
- - make sure that run_exit_trap arranges for `returns' to come back
- there, too, so a `return' executed by an `exit' invoked within a
- shell function behaves correctly
-
-support/shobj-conf
- - change darwin/MacOS X stanza based on advice from mac os x developers
-
-lib/sh/mailstat.c
- - set the atime member of the synthesized stat struct to 0 if `cur/'
- is empty, rather than leaving it undefined
-
- 3/24
- ----
-builtins/caller.def
- - new builtin to provide a call stack for the debugger
-
-builtins/evalfile.c
- - added a second `flags' argument to source_file()
- - new flag value for flags argument to _evalfile(): FEVAL_NOPUSHARGS.
- If included in flags arg, it means to not manipulate the BASH_ARGV
- and BASH_ARGC arrays
-
-builtins/common.h
- - change prototype for source_file()
-
-builtins/source.def
- - add flag value to call to source_file(): set to 1 if we replaced
- the positional parameters
- - add call to push_args if additional arguments supplied to the
- source builtin
- - add call to pop_args in maybe_pop_dollar_vars
-
-execute_cmd.c
- - run the debug trap in execute_function so the debugger can stop
- before the first command in a function body is executed
- - modify subshell_level before executing a builtin or function in a
- subshell
- - print `for', `select', `case' command heads when set -x is enabled
-
-print_cmd.c
- - `xtrace_print_word_list' now takes an additional flags argument,
- which, if non-zero, says to print indirection_level_string()
- - new functions to print for, select, and case command heads when
- set -x is enabled
- - add spaces after `((' and before `))' in xtrace_print_arith_command
-
-externs.h
- - changed extern declaration for xtrace_print_word_list
- - new declarations for xtrace_print_{for,case,select}_command_head()
-
-subst.c
- - modify subshell_level when executing a command substitution
-
- 3/25
- ----
-execute_cmd.c
- - use `line_number' in executing_line_number instead of looking into
- the current command if it's a simple command; rearrange code to
- make this simpler to compile in and out
- - need to save and restore value of currently_executing_command around
- calls to debug trap and return trap in execute_function
-
-make_cmd.c
- - make sure make_arith_for_command() disposes the WORD_LIST * it is
- passed, since nothing else does and it's not used directly
-
- 3/28
- ----
-Makefile.in
- - fixed dependencies for `error.o' on shell.h and version.h -- makes
- parallel makes (gmake -j 4) work correctly
-
-doc/{bash.1,bashref.texi}
- - documented all new features added to support the debugger
-
- 4/1
- ---
-lib/sh/shquote.c
- - make sure CTLESC and CTLNUL characters are escaped with CTLESC
- by sh_double_quote, sh_backslash_quote and
- sh_backslash_quote_for_double_quotes
- Fixes vulnerability reported by svdb@stack.nl
-
-shell.h
- - new `pipestatus' member of sh_parser_state_t, to save and restore
- $PIPESTATUS
-
-parse.y
- - changes to save_parser_state and restore_parser_state to save and
- restore $PIPESTATUS
-
-builtins/read.def
- - add a call to word_list_remove_quoted_nulls before assigning the
- word list read from standard input to an array variable. Fixes
- bug reported by holzhey@ppprs1.phy.tu-dresden.de
-
- 4/3
- ---
-execute_cmd.c
- - in execute_null_command, if redirections are supplied, make sure
- things like 3</etc/passwd are undone immediately, since they're
- being done in the current shell
- - functions now inherit the RETURN trap only if function tracing is
- on for that function or globally
-
-lib/readline/misc.c
- - in rl_replace_from_history, don't force rl_replace_line to clear
- the undo_list, since it might point directly at an undo list
- from a history entry (to which we have no handle)
-
- 4/4
- ---
-trap.c
- - initialize RETURN_TRAP stuff appropriately in initialize_traps()
- - let command substitutions inherit the RETURN trap if we're in
- the debugger and function tracing has been enabled
-
-redir.c
- - do_redirections and do_redirection_internal now take a single
- flags argument instead of multiple boolean flags
-
-redir.h
- - new #defines for flags argument to do_redirection{s,_internal}
-
-execute_cmd.c
- - change all calls to do_redirection to use new flag values
-
-parse.y
- - new function, free_pushed_string_input(), an external interface to
- clear the pushed_string list (alias expansion)
- - new define SHOULD_PROMPT to say when it's OK to call prompt_again
- (if the shell is currently interactive and is reading input from
- the terminal or readline)
- - make sure shell_getc and read_secondary_line only call prompt_again
- if SHOULD_PROMPT evaluates to true
- - prompt_again shouldn't do anything if the shell is currently in the
- middle of expanding a multiline alias, since we won't be printing a
- prompt anyway
-
-externs.h
- - new extern declaration for free_pushed_string_input()
-
-execute_cmd.c
- - command_substitute and process_substitute now call
- free_pushed_string_input because they shouldn't deal with any
- partial alias expansion the parent shell may have started
-
- 4/5
- ---
-braces.c
- - added {x..y} brace expansion, shorthand for {x,x+1,x+2,...,y}:
- x, y can be integers or single characters; the sequence can be
- ascending or descending; increment is always 1. Beware that
- something like {a..A} can lead to non-letters.
-
- 4/7
- ---
-subst.c
- - change extract_delimited_string and extract_dollar_brace_string to
- return NULL on an expansion error when no_longjmp_on_fatal_error
- is set, so the calling functions don't assume that the expansion
- was successful (primarily the prompt expansion and completion code)
-
-doc/{bash.1,bashref.texi}
- - documented new sequence generation feature of brace expansion
-
- 4/8
- ---
-lib/sh/strstr.c
- - replacement for strstr(3), in case the C library doesn't provide it
-
-configure.in
- - check for strstr, add to LIBOBJS if not found
-
-array.c
- - array_walk now takes a third void * argument; it's passed to `func'
- as its second argument
-
-array.h
- - change sh_ae_map_func_t prototype to add void * second argument
-
- 4/10
- ----
-array.c
- - new function: array_keys_to_word_list, returns a list of indices for
- a given array
-
-array.h
- - new extern declaration for array_keys_to_word_list
-
-arrayfunc.c
-3 - new function: char *array_keys(), returns a string with keys for a
- given array, with the appropriate quoting
-
-arrayfunc.h
- - new extern declaration for array_keys
-
-subst.c
- - code to implement ksh93-like ${!array[@]} expansion (array[*] works,
- too), which expands to all the keys (indices) of ARRAY
-
-doc/{bash.1,bashref.texi}
- - documented new ${!array[@]} expansion
-
- 4/19
- ----
-builtins/setattr.def
- - remove any mention of the `-n' option from readonly builtin's short
- and long documentation
-
-pcomplib.c
- - fix progcomp_insert to increase the refcount on the `cs' argument
- before calling hash_insert -- fixes the problem of multiple calls
- to progcomp_insert with the same compspec
-
-doc/bash.1
- - add mention of characters that inhibit history expansion when found
- immediately following an unquoted `!'
-
-bashline.c
- - convert the code conditionally compiled in by the NO_FORCE_FIGNORE
- #define to something runtime-tunable with the `force_fignore'
- variable (opposite sense). force_fignore is 1 by default
-
-builtins/shopt.def
- - new tunable `shopt' option: `force_fignore', controls force_fignore
- variable and behavior of FIGNORE handling
-
-lib/readline/complete.c
- - new variable, _rl_complete_show_unmodified, causes completer to list
- possible completions if more than one completion and partial
- completion cannot be done
- - new value for what_to_do argument to rl_complete_internal, `@',
- indicating that we want the show-unmodified behavior
- - change rl_completion_type to return `@' when appropriate
-
-lib/readline/bind.c
- - new bindable variable, show-all-if-unmodified, which controls value
- of _rl_complete_show_unmodified
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_complete_show_unmodified
-
-lib/readline/doc/rluser.texi
- - documented show-all-if-unmodified
-
-lib/readline/doc/rltech.texi
- - documented new `@' value for second argument to rl_complete_internal
- - documented new return value from rl_completion_type
-
- 4/22
- ----
-lib/readline/signals.c
- - in rl_set_signal, set sa_flags to SA_RESTART for SIGWINCH, if we
- have POSIX signals -- this is what most applications expect, and
- they're not prepared to deal with EINTR
-
- 4/25
- ----
-bashline.c
- - take out attempts to suppress readline filename completion when
- attempting command completion and there is a directory with the
- same name in the current directory. #if 0'd for now; maybe make
- it conditional later
-
-error.c
- - new variable, gnu_error_format, causes non-interactive errors with
- line numbers to be printed in the `gnu style' (filename:lineno:)
- instead of the `shell style' (filename: line lineno:) by
- error_prolog and parser_error
-
-version.h,support/mkversion
- - don't put extern function declarations into created version.h any
- more
-
-version.c,externs.h
- - add extern declarations for show_shell_version() and
- shell_version_string(), since they're no longer in version.h
- (this backs out change from 9/10/2001)
-
-shell.h
- - don't include version.h
-
-Makefile.in
- - remove unneeded dependencies on version.h -- only version.o
- needs it now
-
-builtins/shopt.def
- - new option `gnu_errfmt', changes error messages with line numbers
- to use the `standard' gnu format
-
-pcomplete.h
- - new COPT_BASHDEFAULT and COPT_PLUSDIRS defines
-
-bashline.c
- - if the COPT_BASHDEFAULT flag is set, try the rest of the bash
- default completions if a compspec with that flag set generates
- no matches
- - broke bash completions out into separate function:
- bash_default_completion(const char *text, int start, int end,
- int qc, int in_command_position); change attempt_shell_completion
- to call it
-
-bashline.h
- - new extern declaration for bash_default_completion
-
-builtins/complete.def
- - added code to compgen to call bash_default_completion if a compspec
- with the COPT_BASHDEFAULT flag set generates no matches from the
- programmable completion options
-
-doc/{bash.1,bashref.texi}
- - document new `gnu_errfmt' shopt option
-
-doc/bash.1,lib/readline/doc/rluser.texi
- - document new `-o bashdefault' option to complete and compgen
-
- 4/26
- ----
-pcomplete.c
- - if a compspec has the COPT_PLUSDIRS flag set, generate any
- directory name completions and add them to the set of possible
- completions as the last thing in gen_compspec_completions
-
-builtins/complete.def
- - add new `-o plusdirs' option to complete and compgen; means to
- do directory name completion in addition to other actions
- specified by the compspec, and do it last
-
- 5/12
- ----
-copy_cmd.c
- - fix copy_{for,select,case}_command to copy the line member
-
- 5/13
- ----
-lib/readline/rlmbutil.h,include/shmbutil.h
- - new #define MB_INVALIDCH, evaluates to true if return value from
- mbrtowc or mbrlen denotes an invalid multibyte character
- - new #define MB_NULLWCH, evaluates to true if return value from
- mbrtowc or mbrlen denotes a null multibyte character
-
-lib/readline/complete.c
- - new function, fnwidth(), returns printed length of a filename,
- correctly handling multibyte characters
- - new function, fnprint(), displays a filename on rl_outstream
- correctly handling multibyte characters
- - use fnwidth() instead of simple strlen() for length calculations
- in display_matches
-
-lib/readline/{display,mbutil}.c
- - use MB_INVALIDCH and MB_NULLWCH as appropriate
-
- 5/21
- ----
-configure.in
- - turn off the builtin malloc on GNU/FreeBSD systems (GNU userland,
- FreeBSD kernel)
-
- 5/24
- ----
-pcomplete.c
- - in programmable_completions, copy the compspec before using it to
- generate the possible completions, allowing the completion for the
- command to be changed by the compspec itself without causing a
- core dump because the shell frees freed memory (reported by
- marcus.harnish@gmx.net)
-
-parse.y
- - in shell_getc, don't call notify_and_cleanup in an interactive shell
- unless the shell is currently reading from the terminal and would
- print a prompt. This fixes programmable completions printing job
- notifications (reported by r.d.green@lancaster.ac.uk)
- - use SHOULD_PROMPT macro consistently
-
-shell.c
- - use get_string_value instead of getenv when looking up $TERM and
- $EMACS to see whether the shell is running under emacs
- - check for `TERM=dumb' as well as `EMACS=t' to decide whether or
- not to turn off command-line editing in emacs shell windows
- (reported by jik@kamens.brookline.ma.us)
-
- 5/28
- ----
-expr.c
- - save and restore the `evalbuf' context, since evalexp can be
- called recursively (e.g. a[b[c]])
-
- 5/29
- ----
-builtins/common.c
- - in display_signal_list, when displaying for `kill -l' in posix mode,
- display signal names without the `SIG' prefix
-
-doc/bashref.texi
- - documented changed to posix mode behavior of kill -l
-
-builtins/kill.def
- - changed the error message printed when argument is not a pid or
- job id
-
-doc/{bash.1,bashref.texi}
- - fixed a slight inconsistency in the different sections describing
- the `promptvars' option
-
-doc/Makefile.in
- - new rule to create `bash.info' from `bashref.info' by running sed
- to change the internal references. This makes the installed
- bash.info work right
- - make the install target install bash.info after it's been modified
- from bashref.info
-
- 5/30
- ----
-builtins/cd.def
- - after testing with ferror(), call clearerr if ferror() evaluates
- to true
-
-execute_cmd.c
- - call clearerr(stdout) after executing a builtin or function,
- before restoring any redirections
-
-bashhist.c
- - initialize history_comment_char in bash_history_initialize
-
-builtins/alias.def
- - if posix mode is enabled, and the `-p' option is not supplied, don't
- list aliases with a preceding `alias ', as POSIX.2 specifies
-
-doc/bashref.texi
- - note new posix mode behavior of displaying alias names and values
- - note new posix mode behavior of trap builtin not checking first
- argument to be a possible signal specification
- - note new posix mode behavior of `kill' not accepting signal names
- with a leading `SIG'
-
-include/stdc.h,lib/readline/rlstdc.h
- - don't check the __STRICT_ANSI__ define when deciding whether or not
- to #undef __attribute__
-
-trap.[ch]
- - decode_signal and signal_object_p take an additional flags arg to
- satisfy POSIX.2 signal name translation requirements
- - change decode_signal to honor the new DSIG_NOCASE (match case-
- insensitively) and DSIG_SIGPREFIX (allow signal specifications
- with the `SIG' prefix) flags
-
-builtins/{common.c,{trap,kill}.def}
- - change calls to decode_signal to add the new argument with
- appropriate values. For kill, POSIX.2 says case-insensitive without
- the `SIG' prefix. For trap, POSIX.2 says applications may decode
- case-insensitively and with the SIG prefix
-
-builtins/trap.def
- - when in posix mode, don't check for the first argument being a
- possible signal spec and revert the signal handling to the
- original disposition
-
- 6/1
- ---
-shell.h
- - new MATCH_STARSUB define, to tell the callers of the various pattern
- substitution and removal functions that call string_list to treat
- "$*" and "${array[*]}" appropriately
-subst.c
- - if get_var_and_type encounters an array variable subscripted by `*'
- or `$*', return VT_STARSUB or'd into the variable type value
- - callers of get_var_and_type check for VT_STARSUB in the returned type
- this will fix problems with ${*...} not being separated with the
- first character of $IFS when double-quoted
- - in parameter_brace_patsub, set MATCH_STARSUB if VT_STARSUB is set by
- get_var_and_type
- - change pos_params_pat_subst to call string_list_dollar_star if
- the match flags include MATCH_STARSUB
- - change parameter_brace_substring to call array_subrange with an
- additional argument indicating the character indexing the array
-
-array.c
- - change array_patsub to join the modified array elements with the
- first character of $IFS if MATCH_STARSUB is set in the match flags
- passed in
- - array_subrange now takes an additional argument indicating the
- index type -- used to separate with first char of $IFS if the
- index char is `*' and the expression is double-quoted
-
-array.h
- - change prototype declaration of array_subrange to add additional arg
-
- 6/2
- ---
-doc/FAQ
- - merged in some updates about POSIX from Andrew Josey
-
- 6/3
- ---
-bashjmp.h
- - new value for jump_to_top_level: ERREXIT
-
-{eval,shell,subst,trap}.c,builtins/evalstring.c
- - ERREXIT is (for now) equivalent to EXITPROG as a value from
- jump_to_top_level
-
- 6/9
- ---
-doc/bash.1,lib/readline/doc/readline.3
- - documented new `show-all-if-unmodified' readline variable
-
- 6/14
- ----
-lib/readline/history.c
- - new function, histdata_t free_history_entry (HIST_ENTRY *h),
- frees H and its line, returning the application-specific data
- - use free_history_entry where appropriate
-
-lib/readline/history.h
- - extern declaration for free_history_entry()
-
-lib/readline/doc/{history.3,hstech.texi}
- - document free_history_entry
-
- 6/16
- ----
-lib/readline/readline.[ch]
- - changed varions defines for readline/history library versions to 5.0
-
-subst.c
- - pass information about whether or not an indirectly-expanded variable
- contains ${array[@]}, ${array[*]}, $@, or $*
- - new function, chk_atstar, performs checks for ${array[@]},
- ${array[*]}, $@, or $* for the parameter_brace_expand* functions and
- sets flags (passed as args) to the results
- - call chk_atstar from parameter_brace_expand_indir and
- parameter_brace_expand
-
- 6/28
- ----
-doc/{bash.1,bashref.texi}
- - clarified that (...) commands are executed in a subshell environment
-
- 6/30
- ----
-lib/readline/bind.c
- - fix a problem with parsing nested if statements in inputrc files
- (fix from dimakar@yahoo.com)
-
- 7/3
- ---
-{jobs,nojobs}.c
- - fix places that use the return value from strsignal() to check
- for NULL return values using a new function, j_strsignal()
-
-builtins/kill.def
- - removed JOB_CONTROL restriction; kill is now available as a builtin
- when the shell is built without job control
-
- 7/10
- ----
-jobs.c
- - some systems have WIFCONTINUED but not WCONTINUED; separate the
- #defines
-
- 7/14
- ----
-lib/readline/history.h
- - new `timestamp' member of a HIST_ENTRY
- - extern declarations for add_history_time and history_get_time
-
-lib/readline/doc/{history.3,hstech.texi}
- - document add_history_time and history_get_time
-
-lib/readline/history.c
- - implementations of history_get_time and add_history_time
- - change add_history to initialize the timestamp information
- - change free_history_entry to free the timestamp
- - change replace_history_entry to duplicate the timestamp
- - change history_total_bytes to add the memory taken by the time
- stamps
-
-bashhist.c,builtins/history.def
- - use free_history_entry where appropriate
-
-lib/readline/histfile.c
- - changes to read_history_range to deal with new history file format
- including timestamps
- - changes to history_do_write to write out the timestamp information
- - changes to history_truncate_file to understand the timestamp
- information
-
- 7/22
- ----
-doc/{bash.1,bashref.texi}
- - fixed function declaration documentation to specify that any compound
- command may be used as the function body, not just a group command
-
- 7/23
- ----
-lib/readline/histfile.c
- - don't allocate space for null timestamps in history_do_write, and
- don't write out null timestamp entries
-
-parse.y
- - fix CHECK_FOR_RESERVED_WORD to call time_command_acceptable() and
- return TIME if the token is "time" and `time' is legal in that
- context
-
- 7/29
- ----
-lib/sh/fmtulong.c
- - include <inttypes.h> for possible definitions of intmax_t, uintmax_t
- (reported by ro@techfak.uni-bielefeld.de)
-
- 7/30
- ----
-parse.y
- - remove checking for `time' reserved word from special_case_tokens();
- use regular mechanism in CHECK_FOR_RESERVED_WORD. This allows `time'
- to be aliased. (Reported by Glenn Morris
- <gmorris+gmane@ast.cam.ac.uk>)
-
- 7/31
- ----
-lib/readline/history.h
- - extern declaration for history_write_timestamps
-
-lib/readline/histfile.c
- - don't write timestamps to the history file in history_do_write
- unless history_write_timestamps is set to non-zero by the application
- (set to 0 by default)
-
-lib/readline/doc/{hstech.texi,history.3}
- - document history_write_timestamps
-
-variables.[ch]
- - new special variable function, HISTTIMEFORMAT; special function
- sets history_write_timestamps to 1 if HISTTIMEFORMAT is set
-
- 8/4
- ---
-builtins/history.def
- - added support for printing time stamps based on the value of the
- HISTTIMEFORMAT variable when displaying history entries
-
-doc/{bash.1,bashref.texi}
- - added description of new HISTTIMEFORMAT variable
-
- 8/5
- ---
-config-top.h
- - remove /usr/ucb from any default paths
-
-mailcheck.c
- - make_default_mailpath now returns NULL if DEFAULT_MAIL_DIRECTORY
- is not defined
- - remember_mail_dates now returns if make_default_mailpath returns
- NULL
-
-config-bot.h
- - reorganized the sections; provide an explicit placeholder for
- builders to #undef any feature defines they don't want that
- configure creates for them, like the default mail path
-
- 8/9
- ---
-config.h.in
- - add HAVE_REGEX_H, HAVE_REGCOMP, HAVE_REGEXEC for detection of POSIX.2
- regular expression functions
- - add COND_REGEXP define to enable and disable the =~ operator for
- matching extended regular expressions in [[...]] commands
-
-configure.in
- - new option, --enable-cond-regexp, enables =~ and code to perform
- regular expression matching in [[...]]
-
-config-bot.h
- - undef COND_REGEXP if the OS doesn't provide posix regexp support
-
-doc/bashref.texi
- - documnent new --enable-cond-regexp option to configure
-
- 8/18
- ----
-support/shobj-conf
- - support for shared objects on FreeBSD-gnu (from Robert Millan)
-
- 8/25
- ----
-lib/sh/shmatch.c
- - new file, shell interface to posix extended regular expression
- matching
-
-externs.h
- - new extern declarations for functions in shmatch.c
-
-execute_cmd.c
- - incorporate code into execute_cond_node that does extended regular
- expression matching for the =~ operator
-
-parse.y
- - add `=~' to the list of binary operators accepted by the conditional
- command parser
-
-doc/{bash.1,bashref.texi}
- - documented =~ conditional binary operator and the BASH_REMATCH
- variable
-
- 8/27
- ----
-lib/readline/display.c
- - take multibyte characters into account when looking for quoted
- substrings on which to do completion (fix from jir@yamato.ibm.com)
-
-lib/readline/util.c
- - fix typo in _rl_strpbrk
-
-lib/readline/rldefs.h
- - use function version of _rl_strpbrk in multibyte locales, because
- it understands to skip over special characters in multibyte
- character sequences
-
- 8/28
- ----
-jobs.c
- - in wait_for, check for window size changes if a job that exits due
- to a signal or is stopped was in the foreground, not just if it's
- the current job
-
- 9/10
- ----
-support/config.{guess,sub}
- - add support to recognize FreeBSD running on the amd64
-
-subst.c
- - if the new `fail_glob_expansion' variable is non-zero, globbing that
- fails to match anything causes an expansion error
-
-builtins/shopt.def
- - new `failglob' expansion: if enabled, failed globs cause an error
-
-test/shopt.right
- - take `failglob' into account
-
-doc/{bash.1,bashref.texi}
- - documented new `failglob' option and its effects
-
- 9/12
- ----
-findcmd.c
- - fix file_status to treat the mode bits and uid right -- in particular,
- don't assume the `other' bits always apply. Bug reported by
- <moseley@hank.org>; fix inspired by <carlo@alinoe.com>
-
-command.h
- - new word flag: W_NOCOMSUB, meaning to not perform command
- substitution on a word
-
-subst.c
- - new flag for param_expand: PF_NOCOMSUB. If non-zero, $(...)
- command substitutions are not expanded, but returned unchanged
- - change expand_word_internal to pass through `` command substitutions
- unchanged if (word->flags & W_NOCOMSUB) != 0
- - change expand_word_internal to pass PF_NOCOMSUB to param_expand
- if (word->flags & W_NOCOMSUB) != 0
-
-builtins/shopt.def
- - rename set_interactive_comments to set_shellopts_after_change, which
- more accurately reflects its purpose
-
-syntax.h
- - add a define for isblank() in case the system doesn't provide one
-
-jobs.c
- - change raw_job_exit_status to understand `pipefail', using the new
- `pipefail_opt' variable
-
-flags.[ch]
- - declare pipefail_opt
- - reset pipefail_opt to 0 in reset_shell_flags
-
-builtins/set.def
- - add `set -o pipefail' and document it in help output
-
-doc/{bash.1,bashref.texi}
- - document `set -o pipefail' and the effect of the pipefail option
-
-mksyntax.c,syntax.h
- - sh_syntaxtab is no longer `const'
- - new generated variable, sh_syntabsiz, set to number of entries in
- sh_syntaxtab, written to generated syntax.c
-
-locale.c
- - new function, locale_setblanks(), sets each member of the current
- locale's <blank> class to have the CSHBRK flag in sh_syntaxtab
-
- 9/17
- ----
-arrayfunc.c
- - change convert_var_to_array to not set array[0] to a NULL value
- (if the scalar variable had no value; e.g., after being created
- with `local arrayvar')
-
-lib/readline/display.c
- - save and restore the value of prompt_invis_chars_first_line in
- rl_{save,restore}_prompt, and reinitialize it to 0 before printing
- something in the message area
-
-lib/readline/bind.c
- - new functions: rl_bind_keyseq_if_unbound_in_map(ks, func, kmap);
- binds key sequence KS to function FUNC in keymap KMAP, and
- rl_bind_keyseq_if_unbound (ks, func); binds key sequence KS to
- function FUNC in the current keymap
-
-lib/readline/readline.h
- - extern function declarations for rl_bind_keyseq_if_unbound_in_map and
- rl_bind_keyseq_if_unbound
-
-lib/readline/{readline,terminal}.c
- - _rl_bind_if_unbound -> rl_bind_keyseq_if_unbound
-
-lib/readline/{bind.c,rlprivate.h}
- - remove _rl_bind_if_unbound
-
- 9/18
- ----
-lib/readline/doc/rltech.texi
- - document rl_bind_keyseq_if_unbound and
- rl_bind_keyseq_if_unbound_in_map
-
- 9/19
- ----
-lib/readline/bind.c
- - new functions rl_bind_key_if_unbound_in_map and
- rl_bind_key_if_unbound; analogous to (and implemented in terms of)
- keyseq functions
- - rl_bind_keyseq_in_map: a new function, equivalent to rl_set_key
- (which remains for backwards compatibility); changed callers to
- use it
- - new function, rl_bind_keyseq, equivalent to rl_bind_keyseq_in_map
- with a third argument of _rl_keymap
-
-lib/readline/readline.h
- - extern declarations for rl_bind_key_if_unbound_in_map and
- rl_bind_key_if_unbound
- - extern declarations for rl_bind_keyseq_in_map and rl_bind_keyseq
-
-lib/readline/doc/rltech.texi
- - document rl_bind_keyseq and rl_bind_keyseq_in_map
-
-configure.in
- - require at least readline-5.0
-
-config-bot.h
- - define SYS_SIGLIST_DECLARED if it's not defined, but
- HAVE_DECL_SYS_SIGLIST is, to deal with differences between
- autoconf versions
-
-bashline.c
- - use rl_bind_key_if_unbound_in_map when binding bash keybindings in
- initialize_readline(), so inputrc files can override them
-
- 9/22
- ----
-lib/readline/histsearch.c
- - do better bounds checking for history_offset and history_length in
- history_search_internal
-
-builtins/history.def
- - in delete_last_history(), make sure we don't leave the history
- offset longer than the history length after calling delete_histent
-
- 9/23
- ----
-jobs.c
- - small change to notify_of_job_status so job status messages get
- printed even if the shell was started to run `-c command'. The
- old behavior was intentional, but I cannot remember why, so we'll
- try it the other way for a while (debian bash bug #211693)
-
- 9/24
- ----
-jobs.c
- - slightly modify change from 9/23 so that jobs started to run
- command substitutions don't print job status messages
-
- 9/25
- ----
-lib/readline/search.c
- - when reading a non-incremental search string from the terminal,
- use a separate undo list rather than chaining it to the undo list
- from the rest of the line, since the whole undo list will get
- freed when the search string is complete
-
-lib/readline/readline.h
- - changed the defines guarding the stdarg prototype for rl_message to
- match what's actually used in display.c, where it's defined
-
- 9/26
- ----
-[bash-3.0-alpha released]
-
- 9/29
- ----
-lib/sh/shmatch.c
- - fix to build correctly when arrays are not compiled into the shell
-
-subst.c
- - fix command substitution to run any exit trap defined in the
- command substitution before returning; the exit trap is not inherited
- from the calling shell
-
-lib/readline/shell.c
- - change sh_set_lines_and_columns to free the memory allocated and
- passed to setenv(), since setenv is specified by POSIX to allocate
- new memory and copy its arguments
-
-jobs.c
- - change logic in make_child so that every child process attempts to
- set the terminal's process group to the pipeline's process group
- when PGRP_PIPE is defined, just like when it's undefined. This is
- reported to fix some tricky synchronization problems on Red Hat
- Enterprise Linux 3. Fix from Ernie Petrides <petrides@redhat.com>.
-
- 9/30
- ----
-builtins/printf.def
- - tescape no longer needs a `trans_squote' argument, since it's the
- same as the `sawc' argument. The `sawc' argument now means to do
- the %b argument processing if non-null
- - fix processing of octal constants for %b arguments (\0 followed by
- up to three octal digits) and other escape sequences (\ followed by
- up to three octal digits)
- - hex constants `\xHHH' are now allowed to contain any positive
- number of digits; previously they were restricted to two [removed]
- - allow two new escape sequences: \" and \?, for compatibility with
- ksh93 and ANSI C
-
-doc/{bash.1,bashref.texi}
- - documented processing that printf performs for arguments to %b
- escape sequences
-
-lib/sh/strtrans.c
- - add \" and \? to escape sequences recognized by `echo -e'
-
- 10/1
- ----
-version.c
- - use snprintf instead of sprintf if configure tells us we have it
-
- 10/3
- ----
-subst.c
- - in list_remove_pattern, take into account the fact that one of the
- list elements may be NULL, and don't free the result of
- remove_pattern() without checking
- - in remove_pattern, return savestring(param) if *param == '\0',
- since callers expect to free() non-null return values
-
- 10/4
- ----
-subst.c
- - change verify_substring_values to make it clearer that the first
- offset deals with array indices and the second deals with numbers
- of elements, when doing array subranges with ${a[@]:e1:e2}
-
-array.c
- - change array_subrange to make it explicit that the second offset
- argument is a count of the desired number of elements, not an
- ending index. This deals with sparse arrays correctly.
-
- 10/6
- ----
-variables.c
- - fix memory leak in assign_in_env
-
- 10/8
- ----
-subst.c
- - in parameter_brace_expand, check that the last characters are `]}'
- before checking for ${!array[@]}
-
-execute_cmd.c,builtins/source.def
- - push and pop the args (BASH_ARGV and BASH_ARGC) when executing a
- shell function or sourcing a script only when in debugging mode
-
- 10/11
- -----
-arrayfunc.c
- - make sure array_variable_name returns values for the SUBP and LENP
- arguments if they're non-null, since callers expect to use them
- even if the array subscript is bad
-
-error.c
- - call exit_shell instead of sh_exit from parser_error and
- report_error so the right things happen (running exit trap, doing
- the right interactive cleanup, etc.)
-
-lib/readline/complete.c
- - new variable, rl_completion_quote_character, set to any quote char
- readline thinks it finds before any application completion
- function is called
- - new variable, rl_completion_suppress_quote, settable by an
- application-specific completion function. If set to non-zero, the
- completion code does not append a closing quote in append_to_match
-
-lib/readline/readline.h
- - extern declarations for rl_completion_quote_character and
- rl_completion_suppress_quote
-
-bashline.c
- - set rl_completion_suppress_quote in command_subst_completion_function
- because that would be inserted before any closing "`" or ")", which
- is somewhat disconcerting
-
-lib/readline/doc/rltech.texi
- - documented rl_completion_suppress_quote and
- rl_completion_quote_character
-
- 10/13
- -----
-bashhist.c
- - use sv_histchars instead of setting history_comment_char directly in
- bash_initialize_history so assignments to $histchars made in
- ~/.bashrc are honored
-
- 10/21
- -----
-trap.c
- - make sure run_exit_trap sets `running_trap' appropriately
- - new variable, trap_saved_exit_value, set to last_command_exit_value
- before running any trap commands; available to the rest of the
- shell; use trap_saved_exit_value to replace some function-local
- variables
-
-builtins/exit.def
- - if the shell is running the exit trap, and no argument is given
- to `exit', use trap_saved_exit_value as the exit status instead
- of the last command exit value (which could be the previous command
- run in the exit trap), as required by POSIX.2
-
- 10/25
- -----
-doc/{bash.1,bashref.texi}
- - add `alias' to the list of documented `assignment statement' builtins
-
- 11/1
- ----
-doc/bash.1
- - remove the `.' from the sample $PATH value
-
-parse.y
- - make sure parse_compound_assignment prompts with $PS2 if it reads
- a newline while parsing the compound assignment statement. Bug
- reported by Stephane Chazelas
- - parse_string_to_word_list now takes a new second argument: `int flags'
- - new parser state flag: PST_COMPASSIGN; indicates that the shell is
- parsing a compound assignment statement
- - parse_string_to_word_list turns on PST_COMPASSIGN if `flags' arg
- has low bit set
- - turn PST_COMPASSIGN on and off in parse_compound_assignment
-
-externs.h
- - change prototype declaration for parse_string_to_word_list
-
-arrayfunc.c
- - change call to parse_string_to_word_list to add new flags arg
-
-general.c
- - assignment() takes a new `flags' second argument
- - if `flags' is non-zero, accept `[' as a legal assignment statement
- starter character (for parsing compound array assignments)
-
-general.h
- - add new argument to prototype declaration for assignment()
-
-parse.y,{subst,variables}.c, builtins/{setattr,declare}.def
- - change calls to assignment() (parse.y calls with flags == 1 when
- parser_state inlcudes PST_COMPASSIGN)
-
-arrayfunc.c
- - in assign_array_var_from_string(), don't treat an expanded word
- of the form [ind]=value specially unless the W_ASSIGNMENT flag is
- set. This means that words that are the result of expansions but
- happen to have the same format as compound assignment statement
- words will not be treated as such. For instance
-
- v='[12]=foobar'
- a=( $v )
-
- will result in a[0]='[12]=foobar' instead of a[12]=foobar. This
- is closer to how `regular' assignment statements are treated and
- compatible with ksh93. Bug reported by Stephane Chazelas
-
-shell.c
- - new --protected argument, disables command substitution when used
- with --wordexp (like --wordexp, it remains undocumented)
- - change run_wordexp to turn on the W_NOCOMSUB flag in each word
- to be expanded if protected_mode is set
-
- 11/7
- ----
-doc/{bash.1,bashref.texi}
- - clarified the language concerning inherited signal dispositions and
- when traps are run
-
-support/shobj-conf
- - slight changes to the darwin (Mac OS X) stanza for MacOS X 10.3
- (for the readline shared library builds, which shares this script)
-
-lib/readline/histexpand.c
- - change to make `^' behave as equivalent to word one, as csh does,
- and as the documentation states
-
-lib/readline/display.c
- - in update_line, make sure to use col_lendiff in all calculations
- where the cursor position is concerned (like when calculating
- the value of _rl_last_c_pos). Fixes bug reported by Andreas
- Schwab
-
- 11/12
- -----
-trap.c
- - make _run_trap_internal catch `return' builtin longjmps and clean
- up before longjmping on to where the return was intended to go
- (fixes bug with not turning off SIG_INPROGRESS flag when `return'
- executed in trap command)
-
- 11/18
- -----
-builtins/cd.def
- - in posix mode, set errno to ENOTDIR if canonicalization fails,
- unless the canonicalization functions leave it set to ENOENT
-
- 11/25
- -----
-make_cmd.c
- - in make_simple_command, don't blindly dereference element.redirect
-
-parse.y
- - the list_terminator production now has an `int' value so it can be
- used in other grammar productions
- - add a rule that makes `time' on a line by itself time a null
- command (this is iffy)
-
- 11/28
- -----
-subst.c
- - change the pattern substitution code (${var//pat/rep}) to use the
- same pattern expansion function (getpattern()) as the pattern
- removal expansions. This has the effect of no longer performing
- quote removal on the pattern before trying to match it. This
- fixes an incompatibility with ksh93 reported on comp.unix.shell
-
-nojobs.c
- - add replacement function for siginterrupt on the off chance that a
- system has posix signals but lacks siginterrrupt
-
-lib/readline/display.c
- - fix from Tim Waugh at Red Hat to speed up inserting characters into
- long lines in a UTF-8 environment by optimizing the calculation of
- the first difference between old and new lines by checking to see
- whether the old line is a subset of the new
-
- 11/29
- -----
-lib/malloc/stats.c
- - break code that opens file (and interprets %p) into separate function
- _imalloc_fopen(char *s, char *fn, char *def, char *defbuf, size_t defsiz)
- for use by rest of library
- - default stats file is now `stats.PID'
-
-lib/malloc/trace.c
- - new function, malloc_set_tracefn (char *s, char *fn), sets tracing
- to the file named by FN (with %p interpolated as the pid), using
- some default if FN is NULL
-
-lib/malloc/shmalloc.h
- - new extern declaration for malloc_set_tracefn
-
- 12/4
- ----
-execute_cmd.c
- - combined several common strings from do_piping() into one
- dup_error() function
-
-builtins/common.[ch]
- - new function, `sh_notbuiltin(s)' prints error message about s not
- being a shell builtin
-
-builtins/{builtin,enable}.def
- - call sh_notbuiltin instead of using literal string
-
-{arrayfunc,expr,error}.c
- - use one string variable for `bad array subscript' error message; use
- in calls to various error reporting functions
-
-Makefile.in
- - add variables for localedir and the PACKAGE_* variables, auto-set
- by configure
-
-configure.in
- - un-cache values for gettext, textdomain, and bindtextdomain if they're
- not in libc but in libintl so the right variables get set
-
-bashintl.h
- - add necessary defines for marking strings to be translated using
- gettext
-
-locale.c
- - set textdomain and directory in set_default_locale
- - don't call textdomain with the value of $TEXTDOMAIN, since we don't
- want to override the default domain ("bash")
- - don't call bindtextdomain unless default_domain already has a value
- - when translating $"..." strings, use dgettext with the script's
- default domain (value of $TEXTDOMAIN)
-
- 12/9
- ----
-builtins/mkbuiltins.c
- - include "bashintl.h" in the generated "builtins.c"
-
-support/{config.rpath,mkinstalldirs}
- - new files to support gettext i18n
-
-ABOUT-NLS
- - new readme file for gettext internationalization
-
-po/{Makefile.in.in,Rules-quot,boldquot.sed,en@boldquot.header,en@quot.header,insert-header.sin,quot.sed,remove-potcdate.sin}
-po/{POTFILES.in,bash.pot}
- - new files for gettext
-
-lib/intl
- - new directory, with libintl stuff from gettext
-
-aclocal.m4
- - add m4 files from gettext distribution needed by libintl
-
-configure.in
- - create po/Makefile.in and lib/intl/Makefile in AC_OUTPUT
- - add call to AM_GNU_GETTEXT to initialize gettext stuff
-
-Makefile.in
- - use mkinstalldirs instead of mkdirs in the `installdirs' target
- - changes for intl/ and po/ subdirectories in build and install
- - changes to have libintl linked in, as determined by configure
- - changes to have libintl built, just in case it's used (though I'd
- rather not)
-
- 12/10
- -----
-config.h.in
- - additional #defines required by the libintl library
- - add ENABLE_NLS define for AM_GNU_GETTEXT
- - take out defines for HAVE_{BINDTEXTDOMAIN,GETTEXT,TEXTDOMAIN}
-
-configure.in
- - removed old tests for libintl and gettext/textdomain/bindtextdomain
-
-locale.c
- - remove HAVE_GETTEXT code; we have gettext unconditionally now
-
-bashintl.h
- - change to include "gettext.h" and remove the conditional code based
- on whether or not gettext is present
-
- 12/16
- -----
-lib/readline/vi_mode.c
- - fix problem with rl_vi_eWord that caused it to skip over the last
- character of a word if invoked while point was on the next-to-last
- character
-
- 12/18
- -----
-{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c
-{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c
-{subst,test,trap,variables,version,xmalloc}.c
-parse.y
-builtins/{common,evalfile,getopt}.c
-builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def
-builtins/{hash,help,history,jobs,kill,printf,pushd,read,return,set,setattr}.def
-builtins/{shift,shopt,source,suspend,type,ulimit,umask}.def
-lib/sh/{fmtulong,netopen}.c
- - include "bashintl.h" for gettext defines
-
-Makefile.in
- - add `-DBUILDTOOL' to CFLAGS for buildversion.o
-
-bashintl.h
- - if `BUILDTOOL' is defined, define ENABLE_NLS to 0 so we don't have
- to compile and link in the gettext stuff
-
-Makefile.in,lib/sh/Makefile.in,builtins/Makefile.in
- - update dependencies on bashintl.h and include/gettext.h
-
- 12/19
- -----
-{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c
-{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c
-{subst,test,trap,variables,version,xmalloc}.c
-builtins/{common,evalfile,getopt}.c
-builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def
-builtins/{hash,help,history,jobs,kill,let,printf,pushd,read,return,set}.def
-builtins/{setattr,shift,shopt,source,suspend,type,ulimit,umask}.def
-lib/sh/{fmtulong,netopen}.c
-lib/malloc/{malloc,stats,table,watch}.c
- - mark up strings in source files for gettext processing
-
-lib/malloc/imalloc.h
- - include "bashintl.h" if SHELL is defined, otherwise make _(x) an
- identity define
-
-lib/malloc/Makefile.in
- - add dependencies on ${topdir}/bashintl.h and ${BASHINCDIR}/gettext.h
-
- 12/21
- -----
-bashline.c
- - make sure we index into rl_line_buffer with indexes > 0 in
- attempt_shell_completion
-
- 12/31
- -----
-Makefile.in
- - descend into `po' and run make recursively for the various clean
- targets
-
- 1/4
- ---
-include/shmbutil.h
- - two new macros: BACKUP_CHAR(str, strsize, i), which backs up one
- multibyte character in STR starting at index I, and
- BACKUP_CHAR_P(str, strsize, p), which backs up one multibyte
- character in STR starting at P, which is a char *
-
- 1/6
- ---
-pcomplete.c
- - in pcomp_filename_completion_function, use the quote character
- readline found (and assigned to rl_complete_quote_character) when
- dequoting the filename by a completion call from readline (when
- rl_dispatching != 0)
-
-bashline.c
- - ditto for bash_directory_completion_matches
-
- 1/7
- ---
-lib/readline/complete.c
- - new variable, rl_completion_found_quote, set to non-zero value if
- readline finds what it thinks is quoting in the word to be completed
-
-lib/readline/readline.h
- - extern declaration for rl_completion_found_quote
-
- 1/8
- ---
-lib/readline/doc/rltech.texi
- - documented rl_completion_found_quote
-
-lib/readline/complete.c
- - in compute_lcd_of_matches, if it looks like what the user typed was
- dequoted before generating filename matches, dequote the user's
- text again before figuring out the case-insensitive lcd
-
- 1/9
- ---
-lib/readline/display.c
- - fix from Edward Catmur <ed@catmur.co.uk> to logic that handles
- invisible characters in prompt string. Original code was wrong
- about local_prompt_prefix; it gave incorrect results when prompt
- contained invisible characters after a line break
-
- 1/10
- ----
-subst.c
- - new function, mb_substring(), does character (possibly multibyte)
- oriented rather than strictly byte-oriented substring extraction.
- The passed indices, rather than strictly indexing into the string,
- indicate character positions that need to be calculated. From
- Tim Waugh <twaugh@redhat.com>
- - change parameter_brace_substring to use mb_substring if necessary
-
-included/shmbutil.h
- - new define SADD_MBQCHAR_BODY, common code for adding a quoted
- (preceded by CTLESC) multibyte character to an accumulating string
- in the subst.c expansion code
-
-subst.c
- - use SADD_MBQCHAR_BODY in expand_word_internal
- - new static function, mb_getcharlens, allocates and returns an array
- of character lengths for (possibly multibyte) characters in the
- argument string
- - change pattern matching operations to use while loops instead of
- for loops to handle multibyte characters better (no more simple
- increment or decrement)
- - change pattern matching operations to use multibyte character
- operations instead of simple increments and decrements. Don't
- use BACKUP_CHAR_P -- use the mblen array instead, because that
- avoids the N**2 behavior of having to count from the beginning
- of the string each time you want to back up one character. Changes
- to remove_pattern and match_pattern
-
- 1/12
- ----
-lib/readline/display.c
- - make expand_prompt count multbyte characters in the prompt string
- by using _rl_find_next_mbchar (and copying possibly more than one
- byte) instead of a simple increment and single byte copy
-
- 1/13
- ----
-lib/readline/display.c
- - expand_prompt takes a new reference argument -- it returns
- the actual count of (possibly multibyte) characters displayed
- on the screen
- - don't short-circuit in expand_prompt unless we're not going to
- be using any multibyte characters
- - change calls to expand_prompt to pass an argument for the
- number of physical characters the prompt occupies
- (prompt_physical_chars)
- - initialize `lpos' (the physical cursor position) from
- prompt_physical_chars in rl_redisplay
-
-lib/readline/mbutil.c
- - in _rl_find_prev_mbchar_internal, if mbrtowc returns -1 or -2, and
- we assume that the character is a single-byte char, make sure we
- update `prev' so it doesn't get lost. Fixes problems encountered
- when a non-ascii char is the last char on the line and we're moving
- back past it with ^B, and other display problems caused by the same
- situation
-
- 1/15
- ----
-lib/readline/doc/rltech.texi
- - document RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE in the
- description of rl_expand_prompt()
-
- 1/20
- ----
-bashline.c
- - in initialize_readline, make sure M-C-j and M-C-m are still bound to
- vi-editing-mode before unbinding them -- they may have been rebound
- in an inputrc
-
-variables.c
- - in unbind_variable, unset attributes other than `local' and exported
- (if the variable came from a temporary environment) when unsetting a
- local variable inside a function
-
- 1/21
- ----
-configure.in
- - add libintl build directory to the list of include directories if
- it's being built (using INTL_BUILDDIR)
-
-Makefile.in,{builtins,lib/{sh,malloc}}/Makefile.in
- - substitute LIBBUILD as ${BUILD_DIR}/${LIBSUBDIR}
- - define INTL_BUILDDIR as ${LIBBUILD}/intl
-
-{builtins,lib/sh}/Makefile.in
- - make sure INTL_INC is added to the list of include directories
- - make sure INTL_LIBSRC is defined with the correct value
-
-{configure,Makefile,{builtins,lib/sh}/Makefile}.in
- - substitute LIBINTL_H as ${INTL_BUILDDIR}/libintl.h
-
-Makefile.in,builtins/Makefile.iin
- - all files depending on bashintl.h also depend on ${LIBINTL_H}
- (which may be empty)
-
-Makefile.in
- - make a rule telling how to build lib/intl/libintl.h if necessary
-
- 1/24
- ----
-builtins/read.def
- - make sure that the array name supplied as an argument to -a is a
- valid identifier
-
-parse.y
- - make the \W expansion abbreviate $HOME with a ~ (seems to be more
- useful)
-
-doc/{bash.1,bashref.texi}
- - document new behavior of \W
-
-subst.c
- - make sure parameter_brace_expand_rhs uses the first character of
- $IFS when making the string to return from the expanded word
- (which, in the case of "$@" or $@, contains multiple words that
- need to be separated)
-
- 1/25
- ----
-builtins/common.c
- - change get_job_spec to make `%' by itself or an empty argument
- return NO_JOB
-
-jobs.h
- - new possible value for a job spec return value: BAD_JOBSPEC
- (for syntactically invalid specs, like the empty string)
-
-shell.c
- - in open_shell_script, check to see whether or not we can find and
- open the filename argument before setting dollar_vars[0] or
- manipulating BASH_SOURCE, so the error messages come out better
-
-subst.c
- - in string_list_internal, short-circuit right away to savestring()
- if the list only has a single element
-
- 1/28
- ----
-lib/readline/rltypedefs.h
- - new set of typedefs for functions returning char * with various
- arguments (standard set)
-
-lib/readline/complete.c
- - new function pointer, rl_completion_word_break_hook, called by
- _rl_find_completion_word, used to set word break characters at
- completion time, allowing them to be position-based
-
-lib/readline/doc/rltech.texi
- - documented rl_completion_word_break_hook
-
-lib/readline/kill.c
- - added new rl_unix_filename_rubout, which deletes one filename
- component in a Unix pathname backward (delimiters are whitespace
- and `/')
-
-lib/readline/readline.h
- - extern declaration for rl_unix_filename_rubout
-
-lib/readline/funmap.c
- - new bindable readline command `unix-filename-rubout'
-
-lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
- - documented `unix-filename-rubout'
-
- 1/29
- ----
-lib/readline/histexpand.c
- - change history_tokenize_internal to handle non-whitespace delimiter
- characters by creating separate fields (like the shell does when
- splitting on $IFS)
-
- 1/30
- ----
-lib/glob/xmbsrtowcs.c
- - new function, xdupmbstowcs, for convenience: calls xmbsrtowcs
- while allocating memory for the new wide character string
- - some small efficiency improvments to xmbsrtowcs
-
-include/shmbutil.h
- - extern declaration for xdupmbstowcs
-
-lib/glob/strmatch.h
- - include config.h for definition of HANDLE_MULTIBYTE
- - remove the HAVE_LIBC_FNM_EXTMATCH tests
- - new extern declaration for wcsmatch(whchar_t *, wchar_t *, int)
-
-configure.in
- - remove call to BASH_FUNC_FNMATCH_EXTMATCH; it's no longer used
-
-lib/glob/smatch.c
- - simplify xstrmatch() by using xdupmbstowcs() instead of inline code
-
-lib/glob/glob.c
- - modify mbskipname() to avoid the use of alloca
- - simplify mbskipname() by using xdupmbstowcs() instead of inline code
- - simplify glob_pattern_p() by using xdupmbstowcs() instead of
- inline code
- - fix memory leak in wdequote_pathname
- - simplify wdequote_pathname() by using xdupmbstowcs() instead of
- inline code
-
-lib/glob/strmatch.c
- - new function, wcsmatch(), `exported' wide-character equivalent of
- strmatch()
-
-subst.c
- - old match_pattern is now match_upattern
- - match_pattern now either calls match_upattern or converts
- mbstrings to wide chars and calls match_wpattern
- - match_upattern reverted to old non-multibyte code
- - new function: match_pattern_wchar, wide character version of
- match_pattern_char
-
- 2/1
- ---
-subst.c
- - old remove_pattern is now remove_upattern
- - remove_upattern reverted to old non-multibyte code (pre-Waugh patch)
- - new multibyte version of remove_pattern: remove_wpattern
- - remove_pattern now calls either remove_upattern or converts a
- multibyte string to a wide character string and calls
- remove_wpattern
- - new function, wcsdup, wide-character version of strdup(3)
-
- 2/4
- ---
-print_cmd.c
- - temporarily translate a >&filename redirection from
- r_duplicating_output_word to r_err_and_out (as the expansion code
- in redir.c does) so it prints without a leading `1' (file
- descriptor)
-
- 2/5
- ---
-aclocal.m4
- - add a check for wcsdup to BASH_CHECK_MULTIBYTE
-
-config.h.in
- - add HAVE_WCSDUP define
-
- 2/9
- ---
-builtins/shift.def
- - fix a call to sh_erange that possibly dereferences a NULL pointer
-
- 2/12
- ----
-general.c
- - start at a general set of file property checking functions:
- file_isdir(), file_iswdir() (is writable directory)
-
-general.h
- - extern declarations for new functions
-
-lib/sh/tmpfile.c
- - use file_iswdir() to make sure the temporary directory used for
- here documents and other temp files is writable in get_sys_tmpdir()
-
- 2/17
- ----
-bashline.c
- - fix conditional binding of emacs-mode M-~ -- there is a default
- binding for it (rl_tilde_expand), so a straight call to
- rl_bind_key_if_unbound_in_map doesn't do the right thing
-
- 2/27
- ----
-[bash-3.0-beta1 released]
-
- 2/29
- ----
-subst.c
- - fixed expansion so referencing $a, when a is an array variable
- without an element assigned to index 0, exits the shell when
- `-u' is enabled
-
-expr.c
- - make the exponentiation operator (**) associative, so things like
- 2**3**4 work right (change `if' to `while')
-
- 3/3
- ---
-lib/sh/strftime.c
- - SCO Unix 3.2, like Solaris, requires that the system's `timezone'
- variable be declared as long
-
-lib/readline/{bind,histfile,input,parens}.c
- - changes for Tandem (including `floss.h' (?))
-
- 3/4
- ---
-subst.c
- - change param_expand to quote the entire expanded string instead
- of just the escape characters if the expansion appears between
- double quotes or in a here-document (for simple variable expansions
- or expansions of positional parameters)
-
- 3/8
- ---
-subst.c
- - analogous changes to parameter_brace_expand_word to fix the same
- quoting problem as on 3/4; fix callers to understand that the
- value returned might be quoted now and should be dequoted if
- necessary
- - add a `quoted' argument to get_var_and_type, change callers
- - change today's fix and fix from 3/4 to not call quote_string if the
- value is "" (because quote_string turns that into CTLNUL\0)
-
- 3/9
- ---
-builtins/cd.def
- - resetpwd() now takes a `caller' argument so it can be used by pwd
- as well as cd
- - change pwd_builtin to call resetpwd() if sh_physpath() fails to
- return a valid pathname
-
- 3/14
- ----
-expr.c
- - reworked exp0 and readtok() to make post-increment and post-decrement
- into real tokens, which may be separated from their accompanying
- variables by whitesapce
- - made analogous changes to readtok() to make pre-increment and
- pre-decrement work when separated from their accompanying identifier
- by whitespace
-
- 3/18
- ----
-lib/readline/misc.c
- - in rl_maybe_unsave_line, don't force rl_replace_line to clear
- the undo_list, since it might point directly at an undo list
- from a history entry (to which we have no handle)
-
- 3/19
- ----
-lib/readline/display.c
- - rl_save_prompt and rl_restore_prompt now save and restore the value
- of prompt_physical_chars
- - set prompt_physical_chars in rl_redisplay when expand_prompt has
- not been called (e.g., when rl_display_prompt is set and is not
- equal to rl_prompt, like when searching)
-
-lib/readline/histexpand.c
- - don't call add_history in history_expand if the `:p' modifier is
- supplied; leave that to the calling application. This means that
- `history -p', for example, will not add anything to the history
- list (as documented), nor will history expansions invoked by
- emacs-mode M-C-e line editing
-
-config-bot.h
- - check whether HAVE_DECL_SYS_SIGLIST is defined to 1 rather than just
- defined, to work around newer versions of autoconf defining it to 0
-
-config.h.in
- - change default status of HAVE_MALLOC to #undef instead of #define
-
-bashhist.c
- - extern declarations for rl_done and rl_dispatching
- - don't call re_edit from pre_process_line unless rl_dispatcing is zero,
- so we don't call it from something like shell-expand-line
- - change pre_process_line to add an expanded history specification
- that returned `print only' to the history list, since history_expand
- no longer does it (and, when using readline, do it only when
- rl_dispatching is zero)
-
- 3/22
- ----
-config.h.in,aclocal.m4
- - change bash-specific functions that look in struct dirent to define
- HAVE_STRUCT_DIRENT_xxx, like AC_CHECK_MEMBERS does (though the
- functions are otherwise the same)
- - new function, BASH_STRUCT_DIRENT_D_NAMLEN, define
- HAVE_STRUCT_DIRENT_D_NAMLEN if struct dirent has a `d_namlen' member
-
-configure.in
- - call BASH_STRUCT_DIRENT_D_NAMLEN
-
-include/posixdir.h
- - use new and renamed HAVE_STRUCT_DIRENT_D_xxx defines
-
- 4/7
- ---
-builtins/cd.def
- - ensure that we print out a non-null pathname after getting a
- directory from CDPATH and canonicalizing it (e.g., if the result
- exceeds PATH_MAX in length and the_current_working_directory is
- set to NULL)
-
- 4/12
- ----
-print_cmd.c
- - new function to print out assignment statements when `set -x' has
- been enabled: xtrace_print_assignment
-
-externs.h
- - extern declaration for xtrace_print_assignment
-
- 4/13
- ----
-{subst,variables}.c
- - call xtrace_print_assignment instead of using inline code
-
-jobs.c
- - if turning on job control when it was previously off, set
- pipeline_pgrp to 0 in set_job_control so make_child puts
- subsequent children in their own process group
-
- 4/14
- ----
-general.c
- - new function, legal_alias_name, called to decide whether an
- argument to add_alias is a valid alias name -- essentially any
- character except one which must be quoted to the shell parser
- and `/'
-
-general.h
- - new extern declaration for legal_alias_name
-
-builtins/alias.def
- - `unalias' now returns failure status if no NAME arguments are
- supplied and -a is not given
- - call legal_alias_name to make sure alias name is valid before
- calling add_alias from alias_builtin
-
- 4/19
- ----
-include/shmbutil.h
- - include <config.h> for definition of HANDLE_MULTIBYTE rather than
- duplicating logic
-
- 4/20
- ----
-
-doc/{bash.1,bashref.texi}
- - make sure $0 is consistently referred to as a `special parameter'
- - document which characters are now not allowed in alias names
-
- 4/23
- ----
-
-builtins/{jobs,kill,wait}.def
- - removed requirement that job control be enabled to use job control
- notation, as SUSv3 implies
-
-subst.c
- - based on a message from David Korn, change param_expand to not call
- string_list_dollar_star if the only quoting is Q_HERE_DOCUMENT --
- quoted here documents are like double quoting, but not exactly
- - analogous changes to list_remove_pattern and pos_params
-
- 4/24
- ----
-lib/readline/doc/rluser.texi
- - fix error in description of emacs-mode C-xC-e command (uses $VISUAL
- instead of $FCEDIT)
-
- 4/28
- ----
-support/bashbug.sh
- - integrate a patch from Stefan Nordhausen
- <nordhaus@informatik.hu-berlin.de> that reduces race conditions
- by using a temporary directory inside $TMPDIR and creating the
- temp files in that
-
- 4/30
- ----
-builtins/common.c
- - use pathconf(".", _PC_PATH_MAX) where available to size the argument
- to getcwd() rather than using a straight PATH_MAX
-
-builtins/cd.def
- - if get_working_directory fails and returns null (causing resetpwd
- to return NULL), use set_working_directory to set $PWD to the
- absolute pathname for which chdir just succeeded
-
- 5/1
- ---
-lib/readline/vi_mode.c
- - in rl_vi_change_to, call _rl_vi_set_last with rl_numeric_arg instead
- of `last', since they're equal at call time and rl_vi_domove can
- change rl_numeric_arg (which vi apparently updates). Fixes redo bug
- of `c2....' reported by Marion Berryman <mwberryman@copper.net>
-
- 5/4
- ---
-parse.y
- - fix decode_prompt_string to properly deal with strftime() returning 0
-
- 5/6
- ---
-variables.c
- - in make_local_array_variable, return an already-existing local array
- variable immediately rather than creating a new array (causing a
- memory leak)
-
- 5/8
- ---
-lib/readline/vi_mode.c
- - change rl_vi_domove to set rl_explicit_arg before calling
- rl_digit_loop1 so that multi-digit numeric arguments work right
- - _rl_vi_last_command is no longer static
-
-lib/readline/rlprivate.h
- - new extern declaration for _rl_vi_last_command
-
-lib/readline/text.c
- - change rl_newline to only call _rl_vi_reset_last if the last command
- (_rl_vi_last_command) is not a text modification command. This lets
- the last-command and last-argument work across command lines
-
- 5/13
- ----
-builtins/common.c
- - use getcwd(0,0) rather than providing a fixed pathname with a fixed
- length (PATH_MAX) so getcwd() will allocate sufficient memory
-
-aclocal.m4
- - change BASH_FUNC_GETCWD to check whether or not getcwd(0,0) will
- allocate memory for the returned value -- nobody implements that
- and getcwd-via-popen, so it should capture the old test as well
-
- 5/27
- ----
-
-builtins/trap.def
- - the historical behavior of assuming that a signal's handling should
- be set to its original disposition is only in effect if a single
- argument is given, otherwise the first argument is assumed to be a
- command to execute
- - when in posix mode, if trap gets a single argument, display an
- error message and return EX_USAGE
- - change the help message and usage string to better explain trap's
- behavior
-
-doc/{bash.1,bashref.texi}
- - describe the new default behavior when the first argument is a
- signal spec
- - note that signal names are case insensitive and the SIG prefix is
- optional in arguments to `trap'
- - note that signal name arguments to `kill' are case-insensitive
-
-lib/readline/display.c
- - make sure rl_on_new_line_with_prompt sets rl_display_prompt to
- rl_prompt (just to make sure it's set)
- - have rl_on_new_line_with_prompt use local_prompt if it's set
-
- 6/2
- ---
-subst.c
- - in string_extract_double_quoted, cope with extract_delimited_string
- returning NULL, as it can when attempting completion on an unclosed
- command substitution
-
- 6/24
- ----
-lib/readline/complete.c
- - change print_filename to add a `/' to listed directory names if
- `mark-directories' has been enabled
-
-builtins/umask.def
- - make sure that the mask passed to parse_symbolic_mode has all but
- the operative low eight bits masked off, to avoid complementing
- all 0s to -1, which is the error return code. This makes things
- like `a=rwx' and `ugo=rwx' work and turn off the umask
-
- 6/26
- ----
-builtins/getopts.def
- - when `getopts' reaches the end of options, unset OPTARG before
- returning EOF. In response to a bug report from Apple
-
-configure.in
- - when cross-compiling, don't set CPPFLAGS_FOR_BUILD and
- LDFLAGS_FOR_BUILD from CPPFLAGS and LDFLAGS, respectively, since
- those are for the target instead of the build platform (report
- from robert@schwebel.de)
-
-shell.c
- - a shell whose standard error (but not standard output) is directed
- to a terminal should be interactive, according to POSIX/SUS. This
- means that sh > sh.out will start an interactive shell. Bug report
- from llattanzi@apple.com
-
-doc/{bash.1,bashref.texi}
- - change mention of standard output to standard error in definition
- of interactive shell
-
-lib/readline/vi_mode.c
- - new convenience function, rl_vi_start_inserting, calls
- _rl_vi_set_last to save the last textmod command state and then calls
- rl_vi_insertion_mode to enter insert mode
- - change functions to use rl_vi_start_inserting
-
-lib/readline/readline.h
- - extern declaration for rl_vi_start_inserting
-
-bashline.c
- - new function for vi-mode completion, bash_vi_complete. Does
- filename expansion as POSIX specifies, unlike the default readline
- bindings (which don't know about globbing). Bound to `\', `*',
- and `=' in vi command keymap. Internals very similar to
- rl_vi_complete; just calls bash glob expansion functions
-
-lib/readline/vi_mode.c
- - change rl_vi_change_char so that an entire change is a single
- undoable event, rather than each individual change in a [count]r
- command
- - fix rl_vi_change_char so that replacing characters up to EOL works
- rather than generating rl_ding
- - fix rl_vi_change_case so that replacing characters up to EOL works
- rather than generating rl_ding
-
- 6/28
- ----
-builtins/echo.def
- - call clearerr(stdout) before writing anything and testing its
- failure or success
-
- 6/29
- ----
-bashline.c
- - only set rl_explicit_arg in bash_glob_complete_word if readline is
- in emacs mode; let bash_vi_complete take care of setting it in vi
- mode
- - fix bash_vi_complete to only set rl_explicit_arg unless the posix
- conditions are met: no globbing characters in the vi `bigword'
- being completed
-
- 6/30
- ----
-[bash-3.0-rc1 released]
-
- 7/1
- ---
-lib/readline/complete.c
- - make sure `extension_char' is initialized before deciding whether
- or not the append a `/' to a possible completion when visible-stats
- is not enabled
-
- 7/2
- ---
-subst.c
- - fix a boundary overrun in string_extract_double_quoted that could
- occur when the word completion code attempts to expand an incomplete
- construct (like a quoted unclosed command substitution)
-
- 7/4
- ---
-subst.c
- - set tempenv_assign_error to non-zero if an assignment to the
- temporary environment fails for some reason (e.g., attempted
- assignment to a readonly variable)
-
-execute_cmd.c
- - fix execute_simple_command to force a non-interactive shell in
- POSIX mode to exit if an assignment to the temporary environment
- preceding a special builtin fails (bug report from
- llattanzi@apple.com)
-
- 7/5
- ---
-bashline.c
- - in bash_directory_completion_hook, don't perform word expansions
- if the filename appears to have been completed from the file
- system rather than typed in by the user. Bug reported by Tim
- Waugh <twaugh@redhat.com>
-
- 7/7
- ---
-lib/readline/misc.c
- - if _rl_maybe_save_line is being asked to save a line other than
- what's already saved, free up the current saved line and save the
- current contents of rl_line_buffer. Bug reported by
- llattanzi@apple.com
-
- 7/12
- ----
-lib/readline/input.c
- - do better EOF detection in rl_gather_tyi -- if a read returns 0 when
- the fd is in non-blocking mode, stuff an EOF into the input stream
- (reported by mattias@virtutech.se)
-
- 7/13
- ----
-lib/readline/vi_mode.c
- - make sure rl_vi_put honors `count' arguments and yanks things
- multiple times if requested
-
- 7/16
- ----
-builtins/umask.def
- - make sure that the `who' part of the umask symbolic mode argument
- defaults to `a' if it's missing
-
-flags.c
- - make sure that maybe_make_restricted only gets called after the
- shell is initialized, so `bash -r' doesn't result in inappropriate
- error messages
-
-[bash-3.0 frozen]
--- /dev/null
+CWRU.chlog
\ No newline at end of file
--- /dev/null
+This file is set.def, from which is created set.c.
+It implements the "set" and "unset" builtins in Bash.
+
+Copyright (C) 1987, 1989, 1991 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 1, 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; see the file COPYING. If not, write to the Free Software
+Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+$PRODUCES set.c
+
+#include <stdio.h>
+#include "../shell.h"
+#include "../flags.h"
+
+#include "bashgetopt.h"
+
+extern int interactive;
+extern int noclobber, posixly_correct;
+#if defined (READLINE)
+extern int rl_editing_mode, no_line_editing;
+#endif /* READLINE */
+
+$BUILTIN set
+$FUNCTION set_builtin
+$SHORT_DOC set [--abefhkmnptuvxldBCHP] [-o option] [arg ...]
+ -a Mark variables which are modified or created for export.
+ -b Notify of job termination immediately.
+ -e Exit immediately if a command exits with a non-zero status.
+ -f Disable file name generation (globbing).
+ -h Locate and remember function commands as functions are
+ defined. Function commands are normally looked up when
+ the function is executed.
+ -i Force the shell to be an "interactive" one. Interactive shells
+ always read `~/.bashrc' on startup.
+ -k All keyword arguments are placed in the environment for a
+ command, not just those that precede the command name.
+ -m Job control is enabled.
+ -n Read commands but do not execute them.
+ -o option-name
+ Set the variable corresponding to option-name:
+ allexport same as -a
+ braceexpand same as -B
+#if defined (READLINE)
+ emacs use an emacs-style line editing interface
+#endif /* READLINE */
+ errexit same as -e
+ histexpand same as -H
+ ignoreeof the shell will not exit upon reading EOF
+ interactive-comments
+ allow comments to appear in interactive commands
+ monitor same as -m
+ noclobber disallow redirection to existing files
+ noexec same as -n
+ noglob same as -f
+ nohash same as -d
+ notify save as -b
+ nounset same as -u
+ physical same as -P
+ posix change the behavior of bash where the default
+ operation differs from the 1003.2 standard to
+ match the standard
+ privileged same as -p
+ verbose same as -v
+#if defined (READLINE)
+ vi use a vi-style line editing interface
+#endif /* READLINE */
+ xtrace same as -x
+ -p Turned on whenever the real and effective user ids do not match.
+ Disables processing of the $ENV file and importing of shell
+ functions. Turning this option off causes the effective uid and
+ gid to be set to the real uid and gid.
+ -t Exit after reading and executing one command.
+ -u Treat unset variables as an error when substituting.
+ -v Print shell input lines as they are read.
+ -x Print commands and their arguments as they are executed.
+ -l Save and restore the binding of the NAME in a FOR command.
+ -d Disable the hashing of commands that are looked up for execution.
+ Normally, commands are remembered in a hash table, and once
+ found, do not have to be looked up again.
+#if defined (BRACE_EXPANSION)
+ -B the shell will perform brace expansion
+#endif /* BRACE_EXPANSION */
+#if defined (BANG_HISTORY)
+ -H Enable ! style history substitution. This flag is on
+ by default.
+#endif /* BANG_HISTORY */
+ -C If set, disallow existing regular files to be overwritten
+ by redirection of output.
+ -P If set, do not follow symbolic links when executing commands
+ such as cd which change the current directory.
+
+Using + rather than - causes these flags to be turned off. The
+flags can also be used upon invocation of the shell. The current
+set of flags may be found in $-. The remaining n ARGs are positional
+parameters and are assigned, in order, to $1, $2, .. $n. If no
+ARGs are given, all shell variables are printed.
+$END
+
+/* An a-list used to match long options for set -o to the corresponding
+ option letter. */
+struct {
+ char *name;
+ int letter;
+} o_options[] = {
+ { "allexport", 'a' },
+#if defined (BRACE_EXPANSION)
+ { "braceexpand",'B' },
+#endif
+ { "errexit", 'e' },
+ { "histexpand", 'H' },
+ { "monitor", 'm' },
+ { "noexec", 'n' },
+ { "noglob", 'f' },
+ { "nohash", 'd' },
+#if defined (JOB_CONTROL)
+ { "notify", 'b' },
+#endif /* JOB_CONTROL */
+ {"nounset", 'u' },
+ {"physical", 'P' },
+ {"privileged", 'p' },
+ {"verbose", 'v' },
+ {"xtrace", 'x' },
+ {(char *)NULL, 0},
+};
+
+#define MINUS_O_FORMAT "%-15s\t%s\n"
+
+void
+list_minus_o_opts ()
+{
+ register int i;
+ char *on = "on", *off = "off";
+
+ printf (MINUS_O_FORMAT, "noclobber", (noclobber == 1) ? on : off);
+
+ if (find_variable ("ignoreeof") || find_variable ("IGNOREEOF"))
+ printf (MINUS_O_FORMAT, "ignoreeof", on);
+ else
+ printf (MINUS_O_FORMAT, "ignoreeof", off);
+
+ printf (MINUS_O_FORMAT, "interactive-comments",
+ interactive_comments ? on : off);
+
+ printf (MINUS_O_FORMAT, "posix", posixly_correct ? on : off);
+
+#if defined (READLINE)
+ if (no_line_editing)
+ {
+ printf (MINUS_O_FORMAT, "emacs", off);
+ printf (MINUS_O_FORMAT, "vi", off);
+ }
+ else
+ {
+ /* Magic. This code `knows' how readline handles rl_editing_mode. */
+ printf (MINUS_O_FORMAT, "emacs", (rl_editing_mode == 1) ? on : off);
+ printf (MINUS_O_FORMAT, "vi", (rl_editing_mode == 0) ? on : off);
+ }
+#endif /* READLINE */
+
+ for (i = 0; o_options[i].name; i++)
+ {
+ int *on_or_off, zero = 0;
+
+ on_or_off = find_flag (o_options[i].letter);
+ if (on_or_off == FLAG_UNKNOWN)
+ on_or_off = &zero;
+ printf (MINUS_O_FORMAT, o_options[i].name, (*on_or_off == 1) ? on : off);
+ }
+}
+
+set_minus_o_option (on_or_off, option_name)
+ int on_or_off;
+ char *option_name;
+{
+ int option_char = -1;
+
+ if (STREQ (option_name, "noclobber"))
+ {
+ if (on_or_off == FLAG_ON)
+ bind_variable ("noclobber", "");
+ else
+ unbind_variable ("noclobber");
+ stupidly_hack_special_variables ("noclobber");
+ }
+ else if (STREQ (option_name, "ignoreeof"))
+ {
+ unbind_variable ("ignoreeof");
+ unbind_variable ("IGNOREEOF");
+ if (on_or_off == FLAG_ON)
+ bind_variable ("IGNOREEOF", "10");
+ stupidly_hack_special_variables ("IGNOREEOF");
+ }
+
+#if defined (READLINE)
+ else if ((STREQ (option_name, "emacs")) || (STREQ (option_name, "vi")))
+ {
+ if (on_or_off == FLAG_ON)
+ {
+ rl_variable_bind ("editing-mode", option_name);
+
+ if (interactive)
+ with_input_from_stdin ();
+ no_line_editing = 0;
+ }
+ else
+ {
+ int isemacs = (rl_editing_mode == 1);
+ if ((isemacs && STREQ (option_name, "emacs")) ||
+ (!isemacs && STREQ (option_name, "vi")))
+ {
+ if (interactive)
+ with_input_from_stream (stdin, "stdin");
+ no_line_editing = 1;
+ }
+ else
+ builtin_error ("not in %s editing mode", option_name);
+ }
+ }
+#endif /* READLINE */
+ else if (STREQ (option_name, "interactive-comments"))
+ interactive_comments = (on_or_off == FLAG_ON);
+ else if (STREQ (option_name, "posix"))
+ {
+ posixly_correct = (on_or_off == FLAG_ON);
+ unbind_variable ("POSIXLY_CORRECT");
+ unbind_variable ("POSIX_PEDANTIC");
+ if (on_or_off == FLAG_ON)
+ {
+ bind_variable ("POSIXLY_CORRECT", "");
+ stupidly_hack_special_variables ("POSIXLY_CORRECT");
+ }
+ }
+ else
+ {
+ register int i;
+ for (i = 0; o_options[i].name; i++)
+ {
+ if (STREQ (option_name, o_options[i].name))
+ {
+ option_char = o_options[i].letter;
+ break;
+ }
+ }
+ if (option_char == -1)
+ {
+ builtin_error ("%s: unknown option name", option_name);
+ return (EXECUTION_FAILURE);
+ }
+ if (change_flag (option_char, on_or_off) == FLAG_ERROR)
+ {
+ bad_option (option_name);
+ return (EXECUTION_FAILURE);
+ }
+ }
+ return (EXECUTION_SUCCESS);
+}
+
+/* Set some flags from the word values in the input list. If LIST is empty,
+ then print out the values of the variables instead. If LIST contains
+ non-flags, then set $1 - $9 to the successive words of LIST. */
+set_builtin (list)
+ WORD_LIST *list;
+{
+ int on_or_off, flag_name, force_assignment = 0;
+
+ if (!list)
+ {
+ SHELL_VAR **vars;
+
+ vars = all_shell_variables ();
+ if (vars)
+ {
+ print_var_list (vars);
+ free (vars);
+ }
+
+ vars = all_shell_functions ();
+ if (vars)
+ {
+ print_var_list (vars);
+ free (vars);
+ }
+
+ return (EXECUTION_SUCCESS);
+ }
+
+ /* Check validity of flag arguments. */
+ if (*list->word->word == '-' || *list->word->word == '+')
+ {
+ register char *arg;
+ WORD_LIST *save_list = list;
+
+ while (list && (arg = list->word->word))
+ {
+ char c;
+
+ if (arg[0] != '-' && arg[0] != '+')
+ break;
+
+ /* `-' or `--' signifies end of flag arguments. */
+ if (arg[0] == '-' &&
+ (!arg[1] || (arg[1] == '-' && !arg[2])))
+ break;
+
+ while (c = *++arg)
+ {
+ if (find_flag (c) == FLAG_UNKNOWN && c != 'o')
+ {
+ char s[2];
+ s[0] = c; s[1] = '\0';
+ bad_option (s);
+ if (c == '?')
+ builtin_usage ();
+ return (c == '?' ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+ }
+ }
+ list = list->next;
+ }
+ list = save_list;
+ }
+
+ /* Do the set command. While the list consists of words starting with
+ '-' or '+' treat them as flags, otherwise, start assigning them to
+ $1 ... $n. */
+ while (list)
+ {
+ char *string = list->word->word;
+
+ /* If the argument is `--' or `-' then signal the end of the list
+ and remember the remaining arguments. */
+ if (string[0] == '-' && (!string[1] || (string[1] == '-' && !string[2])))
+ {
+ list = list->next;
+
+ /* `set --' unsets the positional parameters. */
+ if (string[1] == '-')
+ force_assignment = 1;
+
+ /* Until told differently, the old shell behaviour of
+ `set - [arg ...]' being equivalent to `set +xv [arg ...]'
+ stands. Posix.2 says the behaviour is marked as obsolescent. */
+ else
+ {
+ change_flag ('x', '+');
+ change_flag ('v', '+');
+ }
+
+ break;
+ }
+
+ if ((on_or_off = *string) &&
+ (on_or_off == '-' || on_or_off == '+'))
+ {
+ int i = 1;
+ while (flag_name = string[i++])
+ {
+ if (flag_name == '?')
+ {
+ builtin_usage ();
+ return (EXECUTION_SUCCESS);
+ }
+ else if (flag_name == 'o') /* -+o option-name */
+ {
+ char *option_name;
+ WORD_LIST *opt;
+
+ opt = list->next;
+
+ if (!opt)
+ {
+ list_minus_o_opts ();
+ continue;
+ }
+
+ option_name = opt->word->word;
+
+ if (!option_name || !*option_name || (*option_name == '-'))
+ {
+ list_minus_o_opts ();
+ continue;
+ }
+ list = list->next; /* Skip over option name. */
+
+ if (set_minus_o_option (on_or_off, option_name) != EXECUTION_SUCCESS)
+ return (EXECUTION_FAILURE);
+ }
+ else
+ {
+ if (change_flag (flag_name, on_or_off) == FLAG_ERROR)
+ {
+ char opt[3];
+ opt[0] = on_or_off;
+ opt[1] = flag_name;
+ opt[2] = '\0';
+ bad_option (opt);
+ builtin_usage ();
+ return (EXECUTION_FAILURE);
+ }
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ list = list->next;
+ }
+
+ /* Assigning $1 ... $n */
+ if (list || force_assignment)
+ remember_args (list, 1);
+ return (EXECUTION_SUCCESS);
+}
+
+$BUILTIN unset
+$FUNCTION unset_builtin
+$SHORT_DOC unset [-f] [-v] [name ...]
+For each NAME, remove the corresponding variable or function. Given
+the `-v', unset will only act on variables. Given the `-f' flag,
+unset will only act on functions. With neither flag, unset first
+tries to unset a variable, and if that fails, then tries to unset a
+function. Some variables (such as PATH and IFS) cannot be unset; also
+see readonly.
+$END
+
+#define NEXT_VARIABLE() any_failed++; list = list->next; continue;
+
+unset_builtin (list)
+ WORD_LIST *list;
+{
+ int unset_function, unset_variable, unset_array, opt, any_failed;
+ char *name;
+
+ unset_function = unset_variable = unset_array = any_failed = 0;
+
+ reset_internal_getopt ();
+ while ((opt = internal_getopt (list, "fv")) != -1)
+ {
+ switch (opt)
+ {
+ case 'f':
+ unset_function = 1;
+ break;
+ case 'v':
+ unset_variable = 1;
+ break;
+ default:
+ builtin_usage ();
+ return (EXECUTION_FAILURE);
+ }
+ }
+
+ list = loptend;
+
+ if (unset_function && unset_variable)
+ {
+ builtin_error ("cannot simultaneously unset a function and a variable");
+ return (EXECUTION_FAILURE);
+ }
+
+ while (list)
+ {
+ SHELL_VAR *var;
+ int tem;
+#if defined (ARRAY_VARS)
+ char *t;
+#endif
+
+ name = list->word->word;
+
+#if defined (ARRAY_VARS)
+ if (!unset_function && valid_array_reference (name))
+ {
+ t = strchr (name, '[');
+ *t++ = '\0';
+ unset_array++;
+ }
+#endif
+
+ var = unset_function ? find_function (name) : find_variable (name);
+
+ if (var && !unset_function && non_unsettable_p (var))
+ {
+ builtin_error ("%s: cannot unset", name);
+ NEXT_VARIABLE ();
+ }
+
+ /* Posix.2 says that unsetting readonly variables is an error. */
+ if (var && readonly_p (var))
+ {
+ builtin_error ("%s: cannot unset: readonly %s",
+ name, unset_function ? "function" : "variable");
+ NEXT_VARIABLE ();
+ }
+
+ /* Unless the -f option is supplied, the name refers to a variable. */
+#if defined (ARRAY_VARS)
+ if (var && unset_array)
+ {
+ if (array_p (var) == 0)
+ {
+ builtin_error ("%s: not an array variable", name);
+ NEXT_VARIABLE ();
+ }
+ else
+ tem = unbind_array_element (var, t);
+ }
+ else
+#endif /* ARRAY_VARS */
+ tem = makunbound (name, unset_function ? shell_functions : shell_variables);
+
+ /* This is what Posix.2 draft 11+ says. ``If neither -f nor -v
+ is specified, the name refers to a variable; if a variable by
+ that name does not exist, a function by that name, if any,
+ shall be unset.'' */
+ if ((tem == -1) && !unset_function && !unset_variable)
+ tem = makunbound (name, shell_functions);
+
+ if (tem == -1)
+ any_failed++;
+ else if (!unset_function)
+ stupidly_hack_special_variables (name);
+
+ list = list->next;
+ }
+
+ if (any_failed)
+ return (EXECUTION_FAILURE);
+ else
+ return (EXECUTION_SUCCESS);
+}
--- /dev/null
+/* unwind_prot.h - Macros and functions for hacking unwind protection. */
+
+/* Copyright (C) 1993 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 2, 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; see the file COPYING. If not, write to the Free Software
+ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#if !defined (_UNWIND_PROT_H)
+#define _UNWIND_PROT_H
+
+/* Run a function without interrupts. */
+extern void begin_unwind_frame ();
+extern void discard_unwind_frame ();
+extern void run_unwind_frame ();
+extern void add_unwind_protect ();
+extern void remove_unwind_protect ();
+extern void run_unwind_protects ();
+extern void unwind_protect_var ();
+
+/* Define for people who like their code to look a certain way. */
+#define end_unwind_frame()
+
+/* How to protect an integer. */
+#define unwind_protect_int(X) unwind_protect_var (&(X), (char *)(X), sizeof (int))
+
+/* How to protect a pointer to a string. */
+#define unwind_protect_string(X) \
+ unwind_protect_var ((int *)&(X), (X), sizeof (char *))
+
+/* How to protect any old pointer. */
+#define unwind_protect_pointer(X) unwind_protect_string (X)
+
+/* How to protect the contents of a jmp_buf. */
+#define unwind_protect_jmp_buf(X) \
+ unwind_protect_var ((int *)(X), (char *)(X), sizeof (procenv_t))
+
+#endif /* _UNWIND_PROT_H */
po/Rules-quot f
po/bash.pot f
po/boldquot.sed f
-po/builtins.pot f
po/en@quot.header f
po/en@boldquot.header f
po/en@quot.po f
*/
array_dispose_element(new);
free(element_value(ae));
- ae->value = savestring(v);
+ ae->value = v ? savestring(v) : (char *)NULL;
return(0);
} else if (element_index(ae) > i) {
ADD_BEFORE(ae, new);
@%:@! /bin/sh
-@%:@ From configure.in for Bash 3.0, version 3.165, from autoconf version AC_ACVERSION.
+@%:@ From configure.in for Bash 3.0, version 3.166, from autoconf version AC_ACVERSION.
@%:@ Guess values for system-dependent variables and create Makefiles.
@%:@ Generated by GNU Autoconf 2.57 for bash 3.0-release.
@%:@
-for ac_header in stdlib.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-@%:@include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc in
- yes:no )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
- no:yes )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_malloc_0_nonnull=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#if STDC_HEADERS || HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-int
-main ()
-{
-exit (malloc (0) ? 0 : 1);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_malloc_0_nonnull=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6
-if test $ac_cv_func_malloc_0_nonnull = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_MALLOC 1
-_ACEOF
-
-else
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_MALLOC 0
-_ACEOF
-
- LIB@&t@OBJS="$LIB@&t@OBJS malloc.$ac_objext"
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define malloc rpl_malloc
-_ACEOF
-
-fi
-
-
-
-
for ac_header in stdlib.h unistd.h
do
'configure.in'
],
{
- 'AC_HEADER_DIRENT' => 1,
- 'AC_PROG_CC' => 1,
+ 'AC_STRUCT_TM' => 1,
'AC_TYPE_PID_T' => 1,
- 'AC_FUNC_MALLOC' => 1,
- 'AC_FUNC_MBRTOWC' => 1,
- 'AC_FUNC_LSTAT' => 1,
- 'AC_HEADER_TIME' => 1,
- 'AH_OUTPUT' => 1,
+ 'AC_CANONICAL_SYSTEM' => 1,
+ 'm4_pattern_forbid' => 1,
+ 'AC_FUNC_OBSTACK' => 1,
+ 'AC_PROG_LEX' => 1,
'AC_FUNC_GETMNTENT' => 1,
- 'AC_PROG_CPP' => 1,
+ 'AC_FUNC_REALLOC' => 1,
+ 'AC_FUNC_MEMCMP' => 1,
+ 'AC_FUNC_GETPGRP' => 1,
+ 'AC_CANONICAL_HOST' => 1,
+ 'AC_HEADER_DIRENT' => 1,
+ 'AC_PROG_AWK' => 1,
+ 'AC_HEADER_SYS_WAIT' => 1,
+ 'AM_CONDITIONAL' => 1,
+ 'AC_FUNC_ALLOCA' => 1,
+ 'AC_FUNC_MMAP' => 1,
'AC_TYPE_MODE_T' => 1,
- 'm4_pattern_allow' => 1,
- 'AC_PROG_YACC' => 1,
+ 'AC_TYPE_SIZE_T' => 1,
+ 'AC_C_INLINE' => 1,
+ 'AC_FUNC_GETGROUPS' => 1,
+ 'AC_FUNC_FSEEKO' => 1,
+ 'AM_AUTOMAKE_VERSION' => 1,
+ 'AC_FUNC_STRCOLL' => 1,
+ 'AC_INIT' => 1,
+ 'AC_CONFIG_SUBDIRS' => 1,
+ 'AM_MAINTAINER_MODE' => 1,
+ 'AM_PROG_CC_C_O' => 1,
+ 'AC_FUNC_STRFTIME' => 1,
+ 'AM_INIT_AUTOMAKE' => 1,
+ 'AC_TYPE_OFF_T' => 1,
+ 'AC_PROG_LN_S' => 1,
'AC_FUNC_MKTIME' => 1,
- 'AC_CHECK_TYPES' => 1,
- 'AC_PROG_CXX' => 1,
+ 'AC_PROG_LIBTOOL' => 1,
+ 'AC_TYPE_UID_T' => 1,
+ 'AC_FUNC_MALLOC' => 1,
'AC_HEADER_MAJOR' => 1,
- 'AC_CHECK_FUNCS' => 1,
+ 'AC_FUNC_MBRTOWC' => 1,
+ 'AC_PROG_CPP' => 1,
+ 'AC_FUNC_UTIME_NULL' => 1,
+ 'AC_DECL_SYS_SIGLIST' => 1,
'AC_CHECK_HEADERS' => 1,
- 'AC_INIT' => 1,
- 'AC_STRUCT_TIMEZONE' => 1,
- 'AM_MAINTAINER_MODE' => 1,
- 'AC_PROG_MAKE_SET' => 1,
- 'AC_FUNC_CHOWN' => 1,
- 'AC_FUNC_ERROR_AT_LINE' => 1,
- 'AC_CONFIG_FILES' => 1,
- 'AC_CANONICAL_HOST' => 1,
- 'AC_LIBSOURCE' => 1,
+ 'm4_include' => 1,
+ 'AC_HEADER_STAT' => 1,
+ 'AC_FUNC_GETLOADAVG' => 1,
+ 'AC_PROG_GCC_TRADITIONAL' => 1,
+ 'AC_TYPE_SIGNAL' => 1,
'AC_PROG_RANLIB' => 1,
- 'AC_FUNC_MMAP' => 1,
- 'AC_CHECK_MEMBERS' => 1,
- 'AC_FUNC_STRTOD' => 1,
- 'AM_PROG_CC_C_O' => 1,
- 'AC_FUNC_CLOSEDIR_VOID' => 1,
'AC_FUNC_VPRINTF' => 1,
- 'AC_PROG_LEX' => 1,
- 'AC_FUNC_STAT' => 1,
- 'AC_REPLACE_FNMATCH' => 1,
- 'AC_STRUCT_TM' => 1,
- 'AC_FUNC_STRCOLL' => 1,
+ 'AC_PROG_YACC' => 1,
'AC_FUNC_STRNLEN' => 1,
- 'm4_include' => 1,
- 'AC_CONFIG_AUX_DIR' => 1,
- 'AC_FUNC_STRERROR_R' => 1,
- 'AC_CANONICAL_SYSTEM' => 1,
- 'AC_CHECK_LIB' => 1,
- 'AC_STRUCT_ST_BLOCKS' => 1,
- 'AC_PATH_X' => 1,
+ 'AC_FUNC_FORK' => 1,
+ 'AH_OUTPUT' => 1,
+ 'AC_STRUCT_TIMEZONE' => 1,
+ 'AC_HEADER_TIME' => 1,
+ 'AC_FUNC_STAT' => 1,
'AC_FUNC_SELECT_ARGTYPES' => 1,
- 'AC_FUNC_MEMCMP' => 1,
+ 'AC_PROG_CC' => 1,
'include' => 1,
- 'AC_C_VOLATILE' => 1,
+ 'AC_CHECK_MEMBERS' => 1,
+ 'AC_PROG_INSTALL' => 1,
+ 'AC_FUNC_ERROR_AT_LINE' => 1,
'AM_GNU_GETTEXT' => 1,
- 'AC_DECL_SYS_SIGLIST' => 1,
+ 'AC_FUNC_STRTOD' => 1,
+ 'AC_HEADER_STDC' => 1,
+ 'AC_CHECK_FUNCS' => 1,
+ 'AC_LIBSOURCE' => 1,
+ 'AC_REPLACE_FNMATCH' => 1,
+ 'AC_CONFIG_FILES' => 1,
+ 'AC_CHECK_TYPES' => 1,
+ 'AC_CONFIG_HEADERS' => 1,
+ 'AC_FUNC_CLOSEDIR_VOID' => 1,
+ 'AC_C_CONST' => 1,
+ 'AC_FUNC_STRERROR_R' => 1,
+ 'AC_FUNC_CHOWN' => 1,
'AC_FUNC_SETPGRP' => 1,
- 'AC_FUNC_OBSTACK' => 1,
- 'AM_CONDITIONAL' => 1,
- 'AC_FUNC_REALLOC' => 1,
- 'AC_FUNC_WAIT3' => 1,
- 'AC_FUNC_STRFTIME' => 1,
- 'AC_SUBST' => 1,
- 'AC_PROG_LIBTOOL' => 1,
- 'AC_FUNC_FSEEKO' => 1,
- 'AC_HEADER_STAT' => 1,
- 'AC_C_INLINE' => 1,
- 'AC_DEFINE_TRACE_LITERAL' => 1,
- 'AC_FUNC_GETGROUPS' => 1,
- 'AC_FUNC_GETLOADAVG' => 1,
- 'AC_PROG_INSTALL' => 1,
- 'm4_pattern_forbid' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
- 'AC_TYPE_SIGNAL' => 1,
- 'AC_PROG_GCC_TRADITIONAL' => 1,
- 'AC_PROG_LN_S' => 1,
- 'AM_INIT_AUTOMAKE' => 1,
- 'AM_AUTOMAKE_VERSION' => 1,
- 'AC_FUNC_ALLOCA' => 1,
- 'AC_PROG_AWK' => 1,
- 'AC_CONFIG_HEADERS' => 1,
- 'AC_FUNC_GETPGRP' => 1,
- 'AC_TYPE_OFF_T' => 1,
- 'AC_FUNC_UTIME_NULL' => 1,
- 'AC_TYPE_SIZE_T' => 1,
+ 'AC_CHECK_LIB' => 1,
+ 'AC_FUNC_WAIT3' => 1,
+ 'AC_PROG_MAKE_SET' => 1,
'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
- 'AC_CONFIG_SUBDIRS' => 1,
- 'AC_FUNC_FORK' => 1,
- 'AC_TYPE_UID_T' => 1,
- 'AC_HEADER_SYS_WAIT' => 1,
- 'AC_HEADER_STDC' => 1,
- 'AC_C_CONST' => 1
+ 'AC_FUNC_LSTAT' => 1,
+ 'm4_pattern_allow' => 1,
+ 'AC_CONFIG_AUX_DIR' => 1,
+ 'AC_PROG_CXX' => 1,
+ 'AC_DEFINE_TRACE_LITERAL' => 1,
+ 'AC_C_VOLATILE' => 1,
+ 'AC_PATH_X' => 1,
+ 'AC_STRUCT_ST_BLOCKS' => 1,
+ 'AC_SUBST' => 1
}
], 'Request' )
);
#undef HAVE_MALLOC_H])
m4trace:configure.in:682: -1- AH_OUTPUT([HAVE_STDIO_EXT_H], [/* Define to 1 if you have the <stdio_ext.h> header file. */
#undef HAVE_STDIO_EXT_H])
-m4trace:configure.in:684: -1- AC_FUNC_MALLOC
-m4trace:configure.in:684: -1- AC_CHECK_HEADERS([stdlib.h])
-m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H])
-m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC])
-m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and
- to 0 otherwise. */
-#undef HAVE_MALLOC])
-m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC])
-m4trace:configure.in:684: -1- AC_LIBSOURCE([malloc.c])
-m4trace:configure.in:684: -1- AC_SUBST([LIB@&t@OBJS])
-m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([malloc])
-m4trace:configure.in:684: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc])
m4trace:configure.in:685: -1- AC_FUNC_MMAP
m4trace:configure.in:685: -1- AC_CHECK_HEADERS([stdlib.h unistd.h])
m4trace:configure.in:685: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
/* See if we have anything to do. */
at = strchr (rl_completer_word_break_characters, '@');
if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0))
- return;
+ return old_value;
/* We have something to do. Do it. */
nval = (char *)xmalloc (strlen (rl_completer_word_break_characters) + 1 + on_or_off);
#include "../flags.h"
#include "../input.h"
#include "../execute_cmd.h"
+#include "../trap.h"
#if defined (HISTORY)
# include "../bashhist.h"
$DOCNAME variable_help
$SHORT_DOC variables - Some variable names and meanings
BASH_VERSION Version information for this Bash.
-CDPATH A colon separated list of directories to search
- when the argument to `cd' is not found in the current
- directory.
+CDPATH A colon-separated list of directories to search
+ for directries given as arguments to `cd'.
GLOBIGNORE A colon-separated list of patterns describing filenames to
be ignored by pathname expansion.
#if defined (HISTORY)
--- /dev/null
+This is the Bash FAQ, version 3.26, for Bash version 2.05b.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A: The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+A9) What's the `POSIX Shell and Utilities standard'?
+A10) What is the bash `posix mode'?
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+Section E: Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A: The Basics
+
+A1) What is it?
+
+Bash is a Unix command interpreter (shell). It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming. Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion. Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation. The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2) What's the latest version?
+
+The latest version is 2.05b, first made available on Wednesday, 17
+July, 2002.
+
+A3) Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors. The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 2.05b:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
+
+A4) On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX. All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'. The build process
+will attempt to discover the version of UNIX you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution. Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet.
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface. This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions as part of their CYGWIN
+project. For more information about the project, look at the URLs
+
+http://www.cygwin.com/
+http://sourceware.cygnus.com/cygwin
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases. Cygnus has also done a
+port of bash-2.05 to the CYGWIN environment, and it is available as
+part of their current release.
+
+Bash-2.05b should require no local Cygnus changes to build and run under
+CYGWIN.
+
+The Cygnus port works only on Intel machines. There is a port of bash
+(I don't know which version) to the alpha/NT environment available from
+
+ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project. For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2. The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark has begun to work with bash-2.05, but I don't know the status.
+
+Ports of bash-1.12 and bash-2.0 are available for OS/2 from
+
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
+
+I haven't looked at either, but the second appears to be a binary-only
+distribution. Beware.
+
+I have received word that Bash (I'm not sure which version, but I
+believe that it's at least bash-2.02.1) is the standard shell on
+BeOS.
+
+A6) How can I build bash with gcc?
+
+Bash configures to use gcc by default if it is available. Read the
+file INSTALL in the distribution for more information.
+
+A7) How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell. Other
+systems use `passwd -s' or `passwd -e'. If one of these works for
+you, that's all you need. Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell. For this, you may need the assistance of your
+friendly local system administrator.
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks. The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+ if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file. If you must put the command in ~/.cshrc, use something
+like
+
+ if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+ [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+ exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell. Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE. CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts. If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing. It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files. You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+ if [ -n "$DT" ]; then
+ [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+ fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+ BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+ unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+
+You must add the full pathname to bash to the file /etc/shells. As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell.
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP.
+
+A9) What's the `POSIX Shell and Utilities standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX. There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management. Each area of standardization is
+assigned to a working group in the 1003 series.
+
+The POSIX Shell and Utilities standard was originally developed by
+IEEE Working Group 1003.2 (POSIX.2). Today it has been merged with
+the original 1003.1 Working Group and is maintained by the Austin
+Group (a joint working group of the IEEE, The Open Group and
+ISO/IEC SC22/WG15). Today the Shell and Utilities are a volume
+within the set of documents that make up IEEE Std 1003.1-2001, and
+thus now the former POSIX.2 (from 1992) is now part of the current
+POSIX.1 standard (POSIX 1003.1-2001).
+
+The Shell and Utilities volume concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs. The standard is freely
+available on the web at http://www.UNIX-systems.org/version3/ .
+Work continues at the Austin Group on maintenance issues; see
+http://www.opengroup.org/austin/ to join the discussions.
+
+Bash is concerned with the aspects of the shell's behavior defined
+by the POSIX Shell and Utilities volume. The shell command
+language has of course been standardized, including the basic flow
+control and program execution constructs, I/O redirection and
+pipelining, argument handling, variable expansion, and quoting.
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'. Other utilities appear in the sections of POSIX not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'.
+POSIX also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing. Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The latest version of the POSIX Shell and Utilities standard is
+available (now updated to the 2003 Edition incorporating the
+Technical Corrigendum 1), as part of the Single UNIX Specification
+Version 3 at
+
+http://www.UNIX-systems.org/version3/
+
+A10) What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX shell
+specification, there are areas where the bash default behavior
+differs from that spec. The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely.
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+
+The raison d'etre for bash-2.05b is to make a second intermediate
+release containing the first of the new features to be available
+in bash-3.0 and get feedback on those features before proceeding.
+The major new feature is multibyte character support in both Bash
+and Readline.
+
+Bash-2.05b contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-2.05b
+distribution):
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+ [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+ supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+ and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator: <<< word
+
+o when displaying variables, function attributes and definitions are shown
+ separately, allowing them to be re-used as input (attempting to re-use
+ the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+ new DEBUG trap semantics, the command set has been made more gdb-like,
+ and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+ function start if the shell is interactive -- if the shell is running a
+ script, $LINENO expands to the line number in the script. This is as
+ POSIX-2001 requires
+
+
+A short feature history dating from Bash-2.0:
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+ login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+ HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+ completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+ when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+ `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+ processing pattern matching bracket expressions, as POSIX requires.
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+ per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+ port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+ of the aspects of that compspec. Valid values are:
+
+ default - perform bash default completion if programmable
+ completion produces no matches
+ dirnames - perform directory name completion if programmable
+ completion produces no matches
+ filenames - tell readline that the compspec produces filenames,
+ so it can do things like append slashes to
+ directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+ in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+ way that allows them to be reused as input. This affects `declare' and
+ `declare -p' as well. This only happens when the shell is not in POSIX
+ mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+ examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+ command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+ for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially: /dev/fd/N,
+ /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+ /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+ to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+ function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+ respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+ with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+ point at the end of the line when the search string is empty, like
+ reverse-search-history, and forward-search-history
+o A new function for applications: rl_on_new_line_with_prompt()
+o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes. A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+ whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+ compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+ as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+ startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03. For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+ bash versions) that is more page-oriented, more conservative
+ with memory usage, does not `orphan' large blocks when they
+ are freed, is usable on 64-bit machines, and has allocation
+ checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+ $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+ alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+ shell functions
+one-dimensional arrays with a new compound assignment statement,
+ appropriate expansion constructs and modifications to some
+ of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+ string translation
+new expansions to do substring extraction, pattern replacement, and
+ indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+ MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+ (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+ visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+ (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 2.05b.
+They are detailed in the file COMPAT in the bash distribution. That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell. The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+ long invocation options
+ [+-]O invocation option
+ -l invocation option
+ `!' reserved word to invert pipeline return value
+ `time' reserved word to time pipelines and shell builtins
+ the `function' reserved word
+ the `select' compound command and reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ new $'...' and $"..." quoting
+ the $(...) form of command substitution
+ the $(<filename) form of command substitution, equivalent to
+ $(cat filename)
+ the ${#param} parameter value length operator
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+ expansion of positional parameters beyond $9 with ${num}
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+ TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+ LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+ ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+ HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+ PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+ SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+ auto_resume
+ DEBUG trap
+ ERR trap
+ variable arrays with new compound assignment syntax
+ redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+ prompt string special char translation and variable expansion
+ auto-export of variables in initial environment
+ command search finds functions before builtins
+ bash return builtin will exit a file sourced with `.'
+ builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+ export -n/-f/-p/name=value, pwd -L/-P,
+ read -e/-p/-a/-t/-n/-d/-s/-u,
+ readonly -a/-f/name=value, trap -l, set +o,
+ set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+ unset -f/-v, ulimit -m/-p/-u,
+ type -a/-p/-t/-f/-P, suspend -f, kill -n,
+ test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+ bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+ bash restricted shell mode is more extensive
+ bash allows functions and variables with the same name
+ brace expansion
+ tilde expansion
+ arithmetic expansion with $((...)) and `let' builtin
+ the `[[...]]' extended conditional command
+ process substitution
+ aliases and alias/unalias builtins
+ local variables in functions and `local' builtin
+ readline and command-line editing with programmable completion
+ command history and history/fc builtins
+ csh-like history expansion
+ other new bash builtins: bind, command, compgen, complete, builtin,
+ declare/typeset, dirs, enable, fc, help,
+ history, logout, popd, pushd, disown, shopt,
+ printf
+ exported functions
+ filename generation when using output redirection (command >a*)
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ variable assignments preceding commands affect only that command,
+ even for builtins and functions
+ posix mode
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+ /dev/tcp/host/port, /dev/udp/host/port
+
+Things sh has that bash does not:
+ uses variable SHACCT to do shell accounting
+ includes `stop' builtin (bash can use alias stop='kill -s STOP')
+ `newgrp' builtin
+ turns on job control if called as `jsh'
+ $TIMEOUT (like bash $TMOUT)
+ `^' is a synonym for `|'
+ new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+ redirection to/from compound commands causes sh to create a subshell
+ bash does not allow unbalanced quotes; sh silently inserts them at EOF
+ bash does not mess with signal 11
+ sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+ bash splits only the results of expansions on IFS, using POSIX.2
+ field splitting rules; sh splits all words on IFS
+ sh does not allow MAILCHECK to be unset (?)
+ sh does not allow traps on SIGALRM or SIGCHLD
+ bash allows multiple option arguments when invoked (e.g. -x -v);
+ sh allows only a single option argument (`sh -x -v' attempts
+ to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+ On Solaris 2.4 and earlier versions, sh goes into an infinite
+ loop.)
+ sh exits a script if any builtin fails; bash exits only if one of
+ the POSIX.2 `special' builtins fails
+
+C2) How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+ long invocation options
+ [-+]O invocation option
+ -l invocation option
+ `!' reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ arithmetic in largest machine-supported size (intmax_t)
+ posix mode and posix conformance
+ command hashing
+ tilde expansion for assignment statements that look like $PATH
+ process substitution with named pipes if /dev/fd is not available
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+ TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+ HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+ IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+ PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+ GROUPS, FUNCNAME, histchars, auto_resume
+ prompt expansion with backslash escapes and command substitution
+ redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+ more extensive and extensible editing and programmable completion
+ builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+ exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+ jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+ read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+ set -o braceexpand/-o histexpand/-o interactive-comments/
+ -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+ -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+ typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+ disown, printf, complete, compgen
+ `!' csh-style history expansion
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ `**' arithmetic operator to do exponentiation
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+ arrays of unlimited size
+ TMOUT is default timeout for `read' and `select'
+
+Things ksh88 has or uses that bash does not:
+ tracked aliases (alias -t)
+ variables: ERRNO, FPATH, EDITOR, VISUAL
+ co-processes (|&, >&p, <&p)
+ weirdly-scoped functions
+ typeset +f to list all function names without definitions
+ text of command history kept in a file, not memory
+ builtins: alias -x, cd old new, fc -e -, newgrp, print,
+ read -p/-s/var?prompt, set -A/-o gmacs/
+ -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+ typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+ using environment to pass attributes of exported variables
+ arithmetic evaluation done on arguments to some builtins
+ reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+ ksh runs last command of a pipeline in parent shell context
+ bash has brace expansion by default (ksh88 compile-time option)
+ bash has fixed startup file for all interactive shells; ksh reads $ENV
+ bash has exported functions
+ bash command search finds functions before builtins
+ bash waits for all commands in pipeline to exit before returning status
+ emacs-mode editing has some slightly different key bindings
+
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-2.05b:
+ associative arrays
+ floating point arithmetic and variables
+ math library functions
+ ${!name[sub]} name of subscript for associative array
+ `.' is allowed in variable names to create a hierarchical namespace
+ more extensive compound assignment syntax
+ discipline functions
+ `sleep' and `getconf' builtins (bash has loadable versions)
+ typeset -n and `nameref' variables
+ KEYBD trap
+ variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+ .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+ backreferences in pattern matching (\N)
+ `&' operator in pattern lists for matching
+ print -f (bash uses printf)
+ `fc' has been renamed to `hist'
+ `.' can execute shell functions
+ exit statuses between 0 and 255
+ set -o pipefail
+ `+=' variable assignment operator
+ FPATH and PATH mixing
+ getopts -a
+ -I invocation option
+ DEBUG trap now executed before each simple command, instead of after
+ printf %H, %P, %T, %Z modifiers, output base for %d
+ lexical scoping for local variables in `ksh' functions
+ no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-2.05b:
+ [n]<&word- and [n]>&word- redirections (combination dup and close)
+ for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+ ?:, ++, --, `expr1 , expr2' arithmetic operators
+ expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+ ${!param*}
+ compound array assignment
+ the `!' reserved word
+ loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+ `command', `builtin', `disown' builtins
+ new $'...' and $"..." quoting
+ FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+ set -o notify/-C
+ changes to kill builtin
+ read -A (bash uses read -a)
+ read -t/-d
+ trap -p
+ exec -c/-a
+ `.' restores the positional parameters when it completes
+ POSIX.2 `test'
+ umask -S
+ unalias -a
+ command and arithmetic substitution performed on PS1, PS4, and ENV
+ command name completion
+ ENV processed only for interactive shells
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh. In tcsh, `which' and its cousin `where'
+are builtins. On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked. Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment. The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell. If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+ which()
+ {
+ builtin type "$@"
+ }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+ where()
+ {
+ builtin type -a "$@"
+ }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded. Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code. This affords the greatest degree of sh
+compatibility.
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+ Remove smallest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the suffix matched by the pattern deleted.
+
+ x=file.c
+ echo ${x%.c}.o
+ -->file.o
+
+${parameter%%word}
+
+ Remove largest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the suffix matched by the pattern deleted.
+
+ x=posix/src/std
+ echo ${x%%/*}
+ -->posix
+
+${parameter#word}
+ Remove smallest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the prefix matched by the pattern deleted.
+
+ x=$HOME/src/cmd
+ echo ${x#$HOME}
+ -->/src/cmd
+
+${parameter##word}
+ Remove largest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the prefix matched by the pattern deleted.
+
+ x=/one/two/three
+ echo ${x##*/}
+ -->three
+
+
+Given
+ a=/a/b/c/d
+ b=b.xxx
+
+ csh bash result
+ --- ---- ------
+ $a:h ${a%/*} /a/b/c
+ $a:t ${a##*/} d
+ $b:r ${b%.*} b
+ $b:e ${b##*.} xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does.
+The details can be found in the documentation. We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh. Here is
+how you use it:
+
+Start csh in the normal way for you. (e.g., `csh')
+
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+
+ alias | bash aliasconv.sh >bash_aliases
+
+Edit `bash_aliases', carefully reading through any created
+functions. You will need to change the names of some csh specific
+variables to the bash equivalents. The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1. You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+
+ alias cd 'cd \!*; echo $cwd'
+
+is converted to the bash function:
+
+ cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+
+ cd () { command cd "$@"; echo "$PWD" ; }
+
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent. This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment.
+
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+
+Use
+ command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents. Most, however, can be emulated with very little trouble.
+
+ksh-88 feature Bash equivalent
+-------------- ---------------
+compiled-in aliases set up aliases in .bashrc; some ksh aliases are
+ bash builtins (hash, history, type)
+coprocesses named pipe pairs (one for read, one for write)
+typeset +f declare -F
+cd, print, whence function substitutes in examples/functions/kshenv
+autoloaded functions examples/functions/autoload is the same as typeset -fu
+read var?prompt read -p prompt var
+
+ksh-93 feature Bash equivalent
+-------------- ---------------
+sleep, getconf Bash has loadable versions in examples/loadables
+${.sh.version} $BASH_VERSION
+print -f printf
+hist alias hist=fc
+$HISTEDIT $FCEDIT
+
+Section E: How can I get bash to do certain things, and why does bash do
+ things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+
+Here is the set of rules for processing test arguments.
+
+ 0 Args: False
+ 1 Arg: True iff argument is not null.
+ 2 Args: If first arg is !, True iff second argument is null.
+ If first argument is unary, then true if unary test is true
+ Otherwise error.
+ 3 Args: If second argument is a binary operator, do binary test of $1 $3
+ If first argument is !, negate two argument test of $2 $3
+ If first argument is `(' and third argument is `)', do the
+ one-argument test of the second argument.
+ Otherwise error.
+ 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+ Otherwise unspecified
+ 5 or more Args: unspecified. (Historical shells would use their
+ current algorithm).
+
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal. Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it.
+For example, in:
+
+ ps -aux | head
+
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader. In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE.
+
+You can build a version of bash that will not report SIGPIPE errors
+by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
+config-top.h.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen. The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen.
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space.
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence.
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes. It affects all commands run in pipelines, not just
+simple calls to `read'. For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline. A subprocess cannot affect its
+parent's environment. When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell. When the subshell exits, the value of the variable
+is lost.
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command. The output can then be assigned to a
+variable:
+
+ grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+ ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments. If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+ /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+ OIFS="$IFS"
+ IFS=.
+ set -- $(/usr/local/bin/ipaddr)
+ IFS="$OIFS"
+ A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters. If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+ $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'. It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation. The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them.
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default. Run
+configure with the --enable-xpg-echo-default option to turn this
+on. Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime. Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix. The only
+thing that can be suspended is the process group. This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies. These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+ ...
+
+subdirs-clean:
+ for d in ${SUBDIRS}; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+ for d in ; do
+ ( cd $d && ${MAKE} ${MFLAGS} clean )
+ done
+
+In versions of bash before bash-2.05a, this was a syntax error. If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline. The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded. These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+ subdirs=$SUBDIRS ; for d in $$subdirs; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+The latest drafts of the updated POSIX standard have changed this: the
+word list is no longer required. Bash versions 2.05a and later accept
+the new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal. This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]).
+This is what POSIX.2 and SUSv3/XPG6 specify.
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters). Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+ AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'. Others collate like
+
+ aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1). If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+ export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z]. This will prevent things like
+
+ rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility. Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group. Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH. (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group. This foreground process group receives the SIGWINCH; bash
+does not. Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash. Enable it with `shopt -s checkwinsize'.
+
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+When substring expansion of the form ${param:offset[:length} is used,
+an `offset' that evaluates to a number less than zero counts back from
+the end of the expanded value of $param.
+
+When a negative `offset' begins with a minus sign, however, unexpected things
+can happen. Consider
+
+ a=12345678
+ echo ${a:-4}
+
+intending to print the last four characters of $a. The problem is that
+${param:-word} already has a well-defined meaning: expand to word if the
+expanded value of param is unset or null, and $param otherwise.
+
+To use negative offsets that begin with a minus sign, separate the
+minus sign and the colon with a space.
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input. When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves. As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry. For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution.
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap. Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool. If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include.
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct').
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash. This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb.
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server. When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null.
+So far, so good.
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns. The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory.
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed. You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2. You can change this
+character to whatever you want using `stty'. For example, to
+change the line kill character to control-u, type
+
+ stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+
+The actual command in question is something like
+
+ < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error. Redirections may only precede `simple
+commands'. A subshell construct such as the above is one of the shell's
+`compound commands'. A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell). While most commands of the form
+
+ cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct. It will not apply with `patch'; you must
+modify parse.y by hand. Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK. This introduces a large
+number of reduce/reduce conflicts into the shell grammar.
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+ set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+ $if mode=emacs
+ [...]
+ $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use. The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
+the compilation should complete successfully.
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits. For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input. Use `stty' to do this:
+
+ stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+ stty pass8
+
+You may also need
+
+ stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters. You use readline variables to do
+this. These variables can be set in your .inputrc or using the bash
+`bind' builtin. Here's an example using `bind':
+
+ bash$ bind 'set convert-meta off'
+ bash$ bind 'set meta-flag on'
+ bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist. The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name. The
+`builtin' builtin executes the builtin command given as its first
+argument directly.
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+ cd()
+ {
+ builtin cd "$@" && xtitle "$HOST: $PWD"
+ }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient.
+
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly. You can use
+
+ ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+ var1=var2
+ var2=z
+ echo ${!var1}
+
+For sh compatibility, use the `eval' builtin. The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on.
+
+For example, this expression prints the value of the last positional
+parameter:
+
+ eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed. In versions of bash later than bash-2.0,
+
+ echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar. I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3). The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+ TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+ TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed. The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME. The \W
+expansion gives the basename of the current directory. To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD. Here are some examples:
+
+ PS1='\w$ ' # current directory with tilde
+ PS1='\W$ ' # basename of current directory
+ PS1='$PWD$ ' # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3. The following `for'
+loop will do the trick:
+
+ for f in *.foo; do
+ mv $f ${f%foo}bar
+ done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick. The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+ echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+
+Use the `bashbug' script to report bugs. It is built and
+installed at the same time as bash. It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment.
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug. Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution. It should
+contain at least the following files:
+
+bash.1 an extensive, thorough Unix-style manual page
+builtins.1 a manual page covering just bash builtin commands
+bashref.texi a reference manual in GNU tex`info format
+bashref.info an info version of the reference manual
+FAQ this file
+article.ms text of an article written for The Linux Journal
+readline.3 a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
+Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X. Look for it in fine bookstores near you. This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details). The publisher
+will donate $1 to the Free Software Foundation for each copy sold.
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+a better bash debugger (a minimally-tested version is included with bash-2.05b)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+better internationalization using GNU `gettext'
+date-stamped command history
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+ variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `+=' variable assignment operator
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+ associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2003. Never make predictions.
+
+
+This document is Copyright 1995-2003 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
--- /dev/null
+This is the Bash FAQ, version 3.24, for Bash version 2.05b.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A: The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+A9) What's the `POSIX 1003.2 standard'?
+A10) What is the bash `posix mode'?
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+Section E: Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A: The Basics
+
+A1) What is it?
+
+Bash is a Unix command interpreter (shell). It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming. Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion. Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation. The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2) What's the latest version?
+
+The latest version is 2.05b, first made available on Wednesday, 17
+July, 2002.
+
+A3) Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors. The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 2.05b:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
+
+A4) On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX. All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'. The build process
+will attempt to discover the version of UNIX you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution. Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet.
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface. This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions as part of their CYGWIN
+project. For more information about the project, look at the URLs
+
+http://www.cygwin.com/
+http://sourceware.cygnus.com/cygwin
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases. Cygnus has also done a
+port of bash-2.05 to the CYGWIN environment, and it is available as
+part of their current release.
+
+Bash-2.05b should require no local Cygnus changes to build and run under
+CYGWIN.
+
+The Cygnus port works only on Intel machines. There is a port of bash
+(I don't know which version) to the alpha/NT environment available from
+
+ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project. For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2. The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark has begun to work with bash-2.05, but I don't know the status.
+
+Ports of bash-1.12 and bash-2.0 are available for OS/2 from
+
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
+
+I haven't looked at either, but the second appears to be a binary-only
+distribution. Beware.
+
+I have received word that Bash (I'm not sure which version, but I
+believe that it's at least bash-2.02.1) is the standard shell on
+BeOS.
+
+A6) How can I build bash with gcc?
+
+Bash configures to use gcc by default if it is available. Read the
+file INSTALL in the distribution for more information.
+
+A7) How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell. Other
+systems use `passwd -s' or `passwd -e'. If one of these works for
+you, that's all you need. Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell. For this, you may need the assistance of your
+friendly local system administrator.
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks. The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+ if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file. If you must put the command in ~/.cshrc, use something
+like
+
+ if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+ [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+ exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell. Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE. CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts. If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing. It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files. You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+ if [ -n "$DT" ]; then
+ [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+ fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+ BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+ unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+
+You must add the full pathname to bash to the file /etc/shells. As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell.
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP.
+
+A9) What's the `POSIX 1003.2 standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX. There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management. Each area of standardization is
+assigned to a working group in the 1003 series.
+
+The POSIX Shell and Utilities standard has been developed by IEEE
+Working Group 1003.2 (POSIX.2). It concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs. An initial version of the
+standard has been approved and published by the IEEE, and work is
+currently underway to update it.
+
+Bash is concerned with the aspects of the shell's behavior
+defined by POSIX.2. The shell command language has of course
+been standardized, including the basic flow control and program
+execution constructs, I/O redirection and pipelining, argument
+handling, variable expansion, and quoting.
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'. Other utilities appear in the sections of POSIX.2 not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'.
+POSIX.2 also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing. Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The Open Group has made an older version of its Single Unix
+Specification (version 2), which is very similar to POSIX.2,
+available on the web at
+
+http://www.opengroup.org/onlinepubs/007908799/
+
+The Single Unix Specification, version 3, is available on the web at
+
+http://www.opengroup.org/onlinepubs/007904975/
+
+A10) What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX.2 shell
+specification, there are areas where the bash default behavior
+differs from that spec. The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely.
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+
+The raison d'etre for bash-2.05b is to make a second intermediate
+release containing the first of the new features to be available
+in bash-3.0 and get feedback on those features before proceeding.
+The major new feature is multibyte character support in both Bash
+and Readline.
+
+Bash-2.05b contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-2.05b
+distribution):
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+ [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+ supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+ and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator: <<< word
+
+o when displaying variables, function attributes and definitions are shown
+ separately, allowing them to be re-used as input (attempting to re-use
+ the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+ new DEBUG trap semantics, the command set has been made more gdb-like,
+ and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+ function start if the shell is interactive -- if the shell is running a
+ script, $LINENO expands to the line number in the script. This is as
+ POSIX-2001 requires
+
+
+A short feature history dating from Bash-2.0:
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+ login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+ HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+ completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+ when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+ `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+ processing pattern matching bracket expressions, as POSIX requires.
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+ per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+ port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+ of the aspects of that compspec. Valid values are:
+
+ default - perform bash default completion if programmable
+ completion produces no matches
+ dirnames - perform directory name completion if programmable
+ completion produces no matches
+ filenames - tell readline that the compspec produces filenames,
+ so it can do things like append slashes to
+ directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+ in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+ way that allows them to be reused as input. This affects `declare' and
+ `declare -p' as well. This only happens when the shell is not in POSIX
+ mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+ examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+ command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+ for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially: /dev/fd/N,
+ /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+ /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+ to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+ function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+ respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+ with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+ point at the end of the line when the search string is empty, like
+ reverse-search-history, and forward-search-history
+o A new function for applications: rl_on_new_line_with_prompt()
+o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes. A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+ whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+ compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+ as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+ startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03. For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+ bash versions) that is more page-oriented, more conservative
+ with memory usage, does not `orphan' large blocks when they
+ are freed, is usable on 64-bit machines, and has allocation
+ checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+ $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+ alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+ shell functions
+one-dimensional arrays with a new compound assignment statement,
+ appropriate expansion constructs and modifications to some
+ of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+ string translation
+new expansions to do substring extraction, pattern replacement, and
+ indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+ MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+ (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+ visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+ (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 2.05b.
+They are detailed in the file COMPAT in the bash distribution. That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell. The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+ long invocation options
+ [+-]O invocation option
+ -l invocation option
+ `!' reserved word to invert pipeline return value
+ `time' reserved word to time pipelines and shell builtins
+ the `function' reserved word
+ the `select' compound command and reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ new $'...' and $"..." quoting
+ the $(...) form of command substitution
+ the $(<filename) form of command substitution, equivalent to
+ $(cat filename)
+ the ${#param} parameter value length operator
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+ expansion of positional parameters beyond $9 with ${num}
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+ TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+ LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+ ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+ HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+ PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+ SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+ auto_resume
+ DEBUG trap
+ ERR trap
+ variable arrays with new compound assignment syntax
+ redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+ prompt string special char translation and variable expansion
+ auto-export of variables in initial environment
+ command search finds functions before builtins
+ bash return builtin will exit a file sourced with `.'
+ builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+ export -n/-f/-p/name=value, pwd -L/-P,
+ read -e/-p/-a/-t/-n/-d/-s/-u,
+ readonly -a/-f/name=value, trap -l, set +o,
+ set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+ unset -f/-v, ulimit -m/-p/-u,
+ type -a/-p/-t/-f/-P, suspend -f, kill -n,
+ test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+ bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+ bash restricted shell mode is more extensive
+ bash allows functions and variables with the same name
+ brace expansion
+ tilde expansion
+ arithmetic expansion with $((...)) and `let' builtin
+ the `[[...]]' extended conditional command
+ process substitution
+ aliases and alias/unalias builtins
+ local variables in functions and `local' builtin
+ readline and command-line editing with programmable completion
+ command history and history/fc builtins
+ csh-like history expansion
+ other new bash builtins: bind, command, compgen, complete, builtin,
+ declare/typeset, dirs, enable, fc, help,
+ history, logout, popd, pushd, disown, shopt,
+ printf
+ exported functions
+ filename generation when using output redirection (command >a*)
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ variable assignments preceding commands affect only that command,
+ even for builtins and functions
+ posix mode
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+ /dev/tcp/host/port, /dev/udp/host/port
+
+Things sh has that bash does not:
+ uses variable SHACCT to do shell accounting
+ includes `stop' builtin (bash can use alias stop='kill -s STOP')
+ `newgrp' builtin
+ turns on job control if called as `jsh'
+ $TIMEOUT (like bash $TMOUT)
+ `^' is a synonym for `|'
+ new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+ redirection to/from compound commands causes sh to create a subshell
+ bash does not allow unbalanced quotes; sh silently inserts them at EOF
+ bash does not mess with signal 11
+ sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+ bash splits only the results of expansions on IFS, using POSIX.2
+ field splitting rules; sh splits all words on IFS
+ sh does not allow MAILCHECK to be unset (?)
+ sh does not allow traps on SIGALRM or SIGCHLD
+ bash allows multiple option arguments when invoked (e.g. -x -v);
+ sh allows only a single option argument (`sh -x -v' attempts
+ to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+ On Solaris 2.4 and earlier versions, sh goes into an infinite
+ loop.)
+ sh exits a script if any builtin fails; bash exits only if one of
+ the POSIX.2 `special' builtins fails
+
+C2) How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+ long invocation options
+ [-+]O invocation option
+ -l invocation option
+ `!' reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ arithmetic in largest machine-supported size (intmax_t)
+ posix mode and posix conformance
+ command hashing
+ tilde expansion for assignment statements that look like $PATH
+ process substitution with named pipes if /dev/fd is not available
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+ TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+ HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+ IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+ PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+ GROUPS, FUNCNAME, histchars, auto_resume
+ prompt expansion with backslash escapes and command substitution
+ redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+ more extensive and extensible editing and programmable completion
+ builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+ exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+ jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+ read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+ set -o braceexpand/-o histexpand/-o interactive-comments/
+ -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+ -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+ typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+ disown, printf, complete, compgen
+ `!' csh-style history expansion
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ `**' arithmetic operator to do exponentiation
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+ arrays of unlimited size
+ TMOUT is default timeout for `read' and `select'
+
+Things ksh88 has or uses that bash does not:
+ tracked aliases (alias -t)
+ variables: ERRNO, FPATH, EDITOR, VISUAL
+ co-processes (|&, >&p, <&p)
+ weirdly-scoped functions
+ typeset +f to list all function names without definitions
+ text of command history kept in a file, not memory
+ builtins: alias -x, cd old new, fc -e -, newgrp, print,
+ read -p/-s/var?prompt, set -A/-o gmacs/
+ -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+ typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+ using environment to pass attributes of exported variables
+ arithmetic evaluation done on arguments to some builtins
+ reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+ ksh runs last command of a pipeline in parent shell context
+ bash has brace expansion by default (ksh88 compile-time option)
+ bash has fixed startup file for all interactive shells; ksh reads $ENV
+ bash has exported functions
+ bash command search finds functions before builtins
+ bash waits for all commands in pipeline to exit before returning status
+ emacs-mode editing has some slightly different key bindings
+
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-2.05b:
+ associative arrays
+ floating point arithmetic and variables
+ math library functions
+ ${!name[sub]} name of subscript for associative array
+ `.' is allowed in variable names to create a hierarchical namespace
+ more extensive compound assignment syntax
+ discipline functions
+ `sleep' and `getconf' builtins (bash has loadable versions)
+ typeset -n and `nameref' variables
+ KEYBD trap
+ variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+ .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+ backreferences in pattern matching (\N)
+ `&' operator in pattern lists for matching
+ print -f (bash uses printf)
+ `fc' has been renamed to `hist'
+ `.' can execute shell functions
+ exit statuses between 0 and 255
+ set -o pipefail
+ `+=' variable assignment operator
+ FPATH and PATH mixing
+ getopts -a
+ -I invocation option
+ DEBUG trap now executed before each simple command, instead of after
+ printf %H, %P, %T, %Z modifiers, output base for %d
+ lexical scoping for local variables in `ksh' functions
+ no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-2.05b:
+ [n]<&word- and [n]>&word- redirections (combination dup and close)
+ for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+ ?:, ++, --, `expr1 , expr2' arithmetic operators
+ expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+ ${!param*}
+ compound array assignment
+ the `!' reserved word
+ loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+ `command', `builtin', `disown' builtins
+ new $'...' and $"..." quoting
+ FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+ set -o notify/-C
+ changes to kill builtin
+ read -A (bash uses read -a)
+ read -t/-d
+ trap -p
+ exec -c/-a
+ `.' restores the positional parameters when it completes
+ POSIX.2 `test'
+ umask -S
+ unalias -a
+ command and arithmetic substitution performed on PS1, PS4, and ENV
+ command name completion
+ ENV processed only for interactive shells
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh. In tcsh, `which' and its cousin `where'
+are builtins. On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked. Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment. The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell. If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+ which()
+ {
+ builtin type "$@"
+ }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+ where()
+ {
+ builtin type -a "$@"
+ }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded. Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code. This affords the greatest degree of sh
+compatibility.
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+ Remove smallest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the suffix matched by the pattern deleted.
+
+ x=file.c
+ echo ${x%.c}.o
+ -->file.o
+
+${parameter%%word}
+
+ Remove largest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the suffix matched by the pattern deleted.
+
+ x=posix/src/std
+ echo ${x%%/*}
+ -->posix
+
+${parameter#word}
+ Remove smallest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the prefix matched by the pattern deleted.
+
+ x=$HOME/src/cmd
+ echo ${x#$HOME}
+ -->/src/cmd
+
+${parameter##word}
+ Remove largest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the prefix matched by the pattern deleted.
+
+ x=/one/two/three
+ echo ${x##*/}
+ -->three
+
+
+Given
+ a=/a/b/c/d
+ b=b.xxx
+
+ csh bash result
+ --- ---- ------
+ $a:h ${a%/*} /a/b/c
+ $a:t ${a##*/} d
+ $b:r ${b%.*} b
+ $b:e ${b##*.} xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does.
+The details can be found in the documentation. We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh. Here is
+how you use it:
+
+Start csh in the normal way for you. (e.g., `csh')
+
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+
+ alias | bash aliasconv.sh >bash_aliases
+
+Edit `bash_aliases', carefully reading through any created
+functions. You will need to change the names of some csh specific
+variables to the bash equivalents. The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1. You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+
+ alias cd 'cd \!*; echo $cwd'
+
+is converted to the bash function:
+
+ cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+
+ cd () { command cd "$@"; echo "$PWD" ; }
+
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent. This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment.
+
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+
+Use
+ command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents. Most, however, can be emulated with very little trouble.
+
+ksh-88 feature Bash equivalent
+-------------- ---------------
+compiled-in aliases set up aliases in .bashrc; some ksh aliases are
+ bash builtins (hash, history, type)
+coprocesses named pipe pairs (one for read, one for write)
+typeset +f declare -F
+cd, print, whence function substitutes in examples/functions/kshenv
+autoloaded functions examples/functions/autoload is the same as typeset -fu
+read var?prompt read -p prompt var
+
+ksh-93 feature Bash equivalent
+-------------- ---------------
+sleep, getconf Bash has loadable versions in examples/loadables
+${.sh.version} $BASH_VERSION
+print -f printf
+hist alias hist=fc
+$HISTEDIT $FCEDIT
+
+Section E: How can I get bash to do certain things, and why does bash do
+ things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+
+Here is the set of rules for processing test arguments.
+
+ 0 Args: False
+ 1 Arg: True iff argument is not null.
+ 2 Args: If first arg is !, True iff second argument is null.
+ If first argument is unary, then true if unary test is true
+ Otherwise error.
+ 3 Args: If second argument is a binary operator, do binary test of $1 $3
+ If first argument is !, negate two argument test of $2 $3
+ If first argument is `(' and third argument is `)', do the
+ one-argument test of the second argument.
+ Otherwise error.
+ 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+ Otherwise unspecified
+ 5 or more Args: unspecified. (Historical shells would use their
+ current algorithm).
+
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal. Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it.
+For example, in:
+
+ ps -aux | head
+
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader. In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE.
+
+You can build a version of bash that will not report SIGPIPE errors
+by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
+config-top.h.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen. The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen.
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space.
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence.
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes. It affects all commands run in pipelines, not just
+simple calls to `read'. For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline. A subprocess cannot affect its
+parent's environment. When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell. When the subshell exits, the value of the variable
+is lost.
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command. The output can then be assigned to a
+variable:
+
+ grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+ ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments. If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+ /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+ OIFS="$IFS"
+ IFS=.
+ set -- $(/usr/local/bin/ipaddr)
+ IFS="$OIFS"
+ A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters. If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+ $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'. It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation. The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them.
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default. Run
+configure with the --enable-xpg-echo-default option to turn this
+on. Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime. Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix. The only
+thing that can be suspended is the process group. This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies. These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+ ...
+
+subdirs-clean:
+ for d in ${SUBDIRS}; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+ for d in ; do
+ ( cd $d && ${MAKE} ${MFLAGS} clean )
+ done
+
+In versions of bash before bash-2.05a, this was a syntax error. If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline. The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded. These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+ subdirs=$SUBDIRS ; for d in $$subdirs; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+The latest drafts of the updated POSIX standard have changed this: the
+word list is no longer required. Bash versions 2.05a and later accept
+the new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal. This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]).
+This is what POSIX.2 and SUSv3/XPG6 specify.
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters). Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+ AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'. Others collate like
+
+ aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1). If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+ export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z]. This will prevent things like
+
+ rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility. Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group. Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH. (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group. This foreground process group receives the SIGWINCH; bash
+does not. Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash. Enable it with `shopt -s checkwinsize'.
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input. When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves. As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry. For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution.
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap. Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool. If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include.
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct').
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash. This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb.
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server. When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null.
+So far, so good.
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns. The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory.
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed. You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2. You can change this
+character to whatever you want using `stty'. For example, to
+change the line kill character to control-u, type
+
+ stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+
+The actual command in question is something like
+
+ < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error. Redirections may only precede `simple
+commands'. A subshell construct such as the above is one of the shell's
+`compound commands'. A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell). While most commands of the form
+
+ cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct. It will not apply with `patch'; you must
+modify parse.y by hand. Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK. This introduces a large
+number of reduce/reduce conflicts into the shell grammar.
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+ set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+ $if mode=emacs
+ [...]
+ $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use. The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
+the compilation should complete successfully.
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits. For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input. Use `stty' to do this:
+
+ stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+ stty pass8
+
+You may also need
+
+ stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters. You use readline variables to do
+this. These variables can be set in your .inputrc or using the bash
+`bind' builtin. Here's an example using `bind':
+
+ bash$ bind 'set convert-meta off'
+ bash$ bind 'set meta-flag on'
+ bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist. The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name. The
+`builtin' builtin executes the builtin command given as its first
+argument directly.
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+ cd()
+ {
+ builtin cd "$@" && xtitle "$HOST: $PWD"
+ }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient.
+
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly. You can use
+
+ ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+ var1=var2
+ var2=z
+ echo ${!var1}
+
+For sh compatibility, use the `eval' builtin. The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on.
+
+For example, this expression prints the value of the last positional
+parameter:
+
+ eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed. In versions of bash later than bash-2.0,
+
+ echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar. I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3). The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+ TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+ TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed. The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME. The \W
+expansion gives the basename of the current directory. To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD. Here are some examples:
+
+ PS1='\w$ ' # current directory with tilde
+ PS1='\W$ ' # basename of current directory
+ PS1='$PWD$ ' # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3. The following `for'
+loop will do the trick:
+
+ for f in *.foo; do
+ mv $f ${f%foo}bar
+ done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick. The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+ echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+
+Use the `bashbug' script to report bugs. It is built and
+installed at the same time as bash. It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment.
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug. Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution. It should
+contain at least the following files:
+
+bash.1 an extensive, thorough Unix-style manual page
+builtins.1 a manual page covering just bash builtin commands
+bashref.texi a reference manual in GNU tex`info format
+bashref.info an info version of the reference manual
+FAQ this file
+article.ms text of an article written for The Linux Journal
+readline.3 a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
+Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X. Look for it in fine bookstores near you. This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details). The publisher
+will donate $1 to the Free Software Foundation for each copy sold.
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+a better bash debugger (a minimally-tested version is included with bash-2.05b)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+better internationalization using GNU `gettext'
+date-stamped command history
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+ variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `+=' variable assignment operator
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+ associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2002. Never make predictions.
+
+
+This document is Copyright 1995-2003 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
--- /dev/null
+This is the Bash FAQ, version 3.24, for Bash version 2.05b.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A: The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+A9) What's the `POSIX 1003.2 standard'?
+A10) What is the bash `posix mode'?
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+Section E: Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A: The Basics
+
+A1) What is it?
+
+Bash is a Unix command interpreter (shell). It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming. Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion. Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation. The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2) What's the latest version?
+
+The latest version is 2.05b, first made available on Wednesday, 17
+July, 2002.
+
+A3) Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors. The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 2.05b:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
+
+A4) On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX. All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'. The build process
+will attempt to discover the version of UNIX you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution. Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet.
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface. This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions as part of their CYGWIN
+project. For more information about the project, look at the URLs
+
+http://www.cygwin.com/
+http://sourceware.cygnus.com/cygwin
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases. Cygnus has also done a
+port of bash-2.05 to the CYGWIN environment, and it is available as
+part of their current release.
+
+Bash-2.05b should require no local Cygnus changes to build and run under
+CYGWIN.
+
+The Cygnus port works only on Intel machines. There is a port of bash
+(I don't know which version) to the alpha/NT environment available from
+
+ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project. For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2. The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark has begun to work with bash-2.05, but I don't know the status.
+
+Ports of bash-1.12 and bash-2.0 are available for OS/2 from
+
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
+
+I haven't looked at either, but the second appears to be a binary-only
+distribution. Beware.
+
+I have received word that Bash (I'm not sure which version, but I
+believe that it's at least bash-2.02.1) is the standard shell on
+BeOS.
+
+A6) How can I build bash with gcc?
+
+Bash configures to use gcc by default if it is available. Read the
+file INSTALL in the distribution for more information.
+
+A7) How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell. Other
+systems use `passwd -s' or `passwd -e'. If one of these works for
+you, that's all you need. Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell. For this, you may need the assistance of your
+friendly local system administrator.
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks. The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+ if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file. If you must put the command in ~/.cshrc, use something
+like
+
+ if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again. ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+ [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+ exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell. Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE. CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts. If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing. It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files. You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+ if [ -n "$DT" ]; then
+ [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+ fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+ BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+ unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+ machine. Why not?
+
+You must add the full pathname to bash to the file /etc/shells. As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell.
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP.
+
+A9) What's the `POSIX 1003.2 standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX. There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management. Each area of standardization is
+assigned to a working group in the 1003 series.
+
+The POSIX Shell and Utilities standard has been developed by IEEE
+Working Group 1003.2 (POSIX.2). It concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs. An initial version of the
+standard has been approved and published by the IEEE, and work is
+currently underway to update it.
+
+Bash is concerned with the aspects of the shell's behavior
+defined by POSIX.2. The shell command language has of course
+been standardized, including the basic flow control and program
+execution constructs, I/O redirection and pipelining, argument
+handling, variable expansion, and quoting.
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'. Other utilities appear in the sections of POSIX.2 not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'.
+POSIX.2 also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing. Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The Open Group has made an older version of its Single Unix
+Specification (version 2), which is very similar to POSIX.2,
+available on the web at
+
+http://www.opengroup.org/onlinepubs/007908799/
+
+The Single Unix Specification, version 3, is available on the web at
+
+http://www.opengroup.org/onlinepubs/007904975/
+
+A10) What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX.2 shell
+specification, there are areas where the bash default behavior
+differs from that spec. The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely.
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B: The latest version
+
+B1) What's new in version 2.05b?
+
+The raison d'etre for bash-2.05b is to make a second intermediate
+release containing the first of the new features to be available
+in bash-3.0 and get feedback on those features before proceeding.
+The major new feature is multibyte character support in both Bash
+and Readline.
+
+Bash-2.05b contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-2.05b
+distribution):
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+ [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+ supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+ and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator: <<< word
+
+o when displaying variables, function attributes and definitions are shown
+ separately, allowing them to be re-used as input (attempting to re-use
+ the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+ new DEBUG trap semantics, the command set has been made more gdb-like,
+ and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+ function start if the shell is interactive -- if the shell is running a
+ script, $LINENO expands to the line number in the script. This is as
+ POSIX-2001 requires
+
+
+A short feature history dating from Bash-2.0:
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+ login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+ HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+ completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+ when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+ `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+ processing pattern matching bracket expressions, as POSIX requires.
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+ per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+ port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+ of the aspects of that compspec. Valid values are:
+
+ default - perform bash default completion if programmable
+ completion produces no matches
+ dirnames - perform directory name completion if programmable
+ completion produces no matches
+ filenames - tell readline that the compspec produces filenames,
+ so it can do things like append slashes to
+ directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+ in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+ way that allows them to be reused as input. This affects `declare' and
+ `declare -p' as well. This only happens when the shell is not in POSIX
+ mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+ examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+ command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+ for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially: /dev/fd/N,
+ /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+ /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+ to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+ function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+ respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+ with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+ point at the end of the line when the search string is empty, like
+ reverse-search-history, and forward-search-history
+o A new function for applications: rl_on_new_line_with_prompt()
+o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes. A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+ whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+ compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+ as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+ startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03. For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+ bash versions) that is more page-oriented, more conservative
+ with memory usage, does not `orphan' large blocks when they
+ are freed, is usable on 64-bit machines, and has allocation
+ checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+ $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+ alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+ shell functions
+one-dimensional arrays with a new compound assignment statement,
+ appropriate expansion constructs and modifications to some
+ of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+ string translation
+new expansions to do substring extraction, pattern replacement, and
+ indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+ MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+ (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+ visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+ (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+ bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 2.05b.
+They are detailed in the file COMPAT in the bash distribution. That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C: Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell. The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+ long invocation options
+ [+-]O invocation option
+ -l invocation option
+ `!' reserved word to invert pipeline return value
+ `time' reserved word to time pipelines and shell builtins
+ the `function' reserved word
+ the `select' compound command and reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ new $'...' and $"..." quoting
+ the $(...) form of command substitution
+ the $(<filename) form of command substitution, equivalent to
+ $(cat filename)
+ the ${#param} parameter value length operator
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+ expansion of positional parameters beyond $9 with ${num}
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+ TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+ LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+ ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+ HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+ PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+ SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+ auto_resume
+ DEBUG trap
+ ERR trap
+ variable arrays with new compound assignment syntax
+ redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+ prompt string special char translation and variable expansion
+ auto-export of variables in initial environment
+ command search finds functions before builtins
+ bash return builtin will exit a file sourced with `.'
+ builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+ export -n/-f/-p/name=value, pwd -L/-P,
+ read -e/-p/-a/-t/-n/-d/-s/-u,
+ readonly -a/-f/name=value, trap -l, set +o,
+ set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+ unset -f/-v, ulimit -m/-p/-u,
+ type -a/-p/-t/-f/-P, suspend -f, kill -n,
+ test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+ bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+ bash restricted shell mode is more extensive
+ bash allows functions and variables with the same name
+ brace expansion
+ tilde expansion
+ arithmetic expansion with $((...)) and `let' builtin
+ the `[[...]]' extended conditional command
+ process substitution
+ aliases and alias/unalias builtins
+ local variables in functions and `local' builtin
+ readline and command-line editing with programmable completion
+ command history and history/fc builtins
+ csh-like history expansion
+ other new bash builtins: bind, command, compgen, complete, builtin,
+ declare/typeset, dirs, enable, fc, help,
+ history, logout, popd, pushd, disown, shopt,
+ printf
+ exported functions
+ filename generation when using output redirection (command >a*)
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ variable assignments preceding commands affect only that command,
+ even for builtins and functions
+ posix mode
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+ /dev/tcp/host/port, /dev/udp/host/port
+
+Things sh has that bash does not:
+ uses variable SHACCT to do shell accounting
+ includes `stop' builtin (bash can use alias stop='kill -s STOP')
+ `newgrp' builtin
+ turns on job control if called as `jsh'
+ $TIMEOUT (like bash $TMOUT)
+ `^' is a synonym for `|'
+ new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+ redirection to/from compound commands causes sh to create a subshell
+ bash does not allow unbalanced quotes; sh silently inserts them at EOF
+ bash does not mess with signal 11
+ sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+ bash splits only the results of expansions on IFS, using POSIX.2
+ field splitting rules; sh splits all words on IFS
+ sh does not allow MAILCHECK to be unset (?)
+ sh does not allow traps on SIGALRM or SIGCHLD
+ bash allows multiple option arguments when invoked (e.g. -x -v);
+ sh allows only a single option argument (`sh -x -v' attempts
+ to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+ On Solaris 2.4 and earlier versions, sh goes into an infinite
+ loop.)
+ sh exits a script if any builtin fails; bash exits only if one of
+ the POSIX.2 `special' builtins fails
+
+C2) How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+ long invocation options
+ [-+]O invocation option
+ -l invocation option
+ `!' reserved word
+ arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+ arithmetic in largest machine-supported size (intmax_t)
+ posix mode and posix conformance
+ command hashing
+ tilde expansion for assignment statements that look like $PATH
+ process substitution with named pipes if /dev/fd is not available
+ the ${!param} indirect parameter expansion operator
+ the ${!param*} prefix expansion operator
+ the ${param:offset[:length]} parameter substring operator
+ the ${param/pat[/string]} parameter pattern substitution operator
+ variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+ TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+ HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+ IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+ PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+ GROUPS, FUNCNAME, histchars, auto_resume
+ prompt expansion with backslash escapes and command substitution
+ redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+ more extensive and extensible editing and programmable completion
+ builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+ exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+ jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+ read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+ set -o braceexpand/-o histexpand/-o interactive-comments/
+ -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+ -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+ typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+ disown, printf, complete, compgen
+ `!' csh-style history expansion
+ POSIX.2-style globbing character classes
+ POSIX.2-style globbing equivalence classes
+ POSIX.2-style globbing collating symbols
+ egrep-like extended pattern matching operators
+ case-insensitive pattern matching and globbing
+ `**' arithmetic operator to do exponentiation
+ redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+ arrays of unlimited size
+ TMOUT is default timeout for `read' and `select'
+
+Things ksh88 has or uses that bash does not:
+ tracked aliases (alias -t)
+ variables: ERRNO, FPATH, EDITOR, VISUAL
+ co-processes (|&, >&p, <&p)
+ weirdly-scoped functions
+ typeset +f to list all function names without definitions
+ text of command history kept in a file, not memory
+ builtins: alias -x, cd old new, fc -e -, newgrp, print,
+ read -p/-s/var?prompt, set -A/-o gmacs/
+ -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+ typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+ using environment to pass attributes of exported variables
+ arithmetic evaluation done on arguments to some builtins
+ reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+ ksh runs last command of a pipeline in parent shell context
+ bash has brace expansion by default (ksh88 compile-time option)
+ bash has fixed startup file for all interactive shells; ksh reads $ENV
+ bash has exported functions
+ bash command search finds functions before builtins
+ bash waits for all commands in pipeline to exit before returning status
+ emacs-mode editing has some slightly different key bindings
+
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-2.05b:
+ associative arrays
+ floating point arithmetic and variables
+ math library functions
+ ${!name[sub]} name of subscript for associative array
+ `.' is allowed in variable names to create a hierarchical namespace
+ more extensive compound assignment syntax
+ discipline functions
+ `sleep' and `getconf' builtins (bash has loadable versions)
+ typeset -n and `nameref' variables
+ KEYBD trap
+ variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+ .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+ backreferences in pattern matching (\N)
+ `&' operator in pattern lists for matching
+ print -f (bash uses printf)
+ `fc' has been renamed to `hist'
+ `.' can execute shell functions
+ exit statuses between 0 and 255
+ set -o pipefail
+ `+=' variable assignment operator
+ FPATH and PATH mixing
+ getopts -a
+ -I invocation option
+ DEBUG trap now executed before each simple command, instead of after
+ printf %H, %P, %T, %Z modifiers, output base for %d
+ lexical scoping for local variables in `ksh' functions
+ no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-2.05b:
+ [n]<&word- and [n]>&word- redirections (combination dup and close)
+ for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+ ?:, ++, --, `expr1 , expr2' arithmetic operators
+ expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+ ${!param*}
+ compound array assignment
+ the `!' reserved word
+ loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+ `command', `builtin', `disown' builtins
+ new $'...' and $"..." quoting
+ FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+ set -o notify/-C
+ changes to kill builtin
+ read -A (bash uses read -a)
+ read -t/-d
+ trap -p
+ exec -c/-a
+ `.' restores the positional parameters when it completes
+ POSIX.2 `test'
+ umask -S
+ unalias -a
+ command and arithmetic substitution performed on PS1, PS4, and ENV
+ command name completion
+ ENV processed only for interactive shells
+
+Section D: Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+ `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh. In tcsh, `which' and its cousin `where'
+are builtins. On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked. Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment. The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell. If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+ which()
+ {
+ builtin type "$@"
+ }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+ where()
+ {
+ builtin type -a "$@"
+ }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded. Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code. This affords the greatest degree of sh
+compatibility.
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way.
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+ Remove smallest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the suffix matched by the pattern deleted.
+
+ x=file.c
+ echo ${x%.c}.o
+ -->file.o
+
+${parameter%%word}
+
+ Remove largest suffix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the suffix matched by the pattern deleted.
+
+ x=posix/src/std
+ echo ${x%%/*}
+ -->posix
+
+${parameter#word}
+ Remove smallest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ smallest portion of the prefix matched by the pattern deleted.
+
+ x=$HOME/src/cmd
+ echo ${x#$HOME}
+ -->/src/cmd
+
+${parameter##word}
+ Remove largest prefix pattern. The WORD is expanded to produce
+ a pattern. It then expands to the value of PARAMETER, with the
+ largest portion of the prefix matched by the pattern deleted.
+
+ x=/one/two/three
+ echo ${x##*/}
+ -->three
+
+
+Given
+ a=/a/b/c/d
+ b=b.xxx
+
+ csh bash result
+ --- ---- ------
+ $a:h ${a%/*} /a/b/c
+ $a:t ${a##*/} d
+ $b:r ${b%.*} b
+ $b:e ${b##*.} xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does.
+The details can be found in the documentation. We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh. Here is
+how you use it:
+
+Start csh in the normal way for you. (e.g., `csh')
+
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+
+ alias | bash aliasconv.sh >bash_aliases
+
+Edit `bash_aliases', carefully reading through any created
+functions. You will need to change the names of some csh specific
+variables to the bash equivalents. The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1. You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+
+ alias cd 'cd \!*; echo $cwd'
+
+is converted to the bash function:
+
+ cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+
+ cd () { command cd "$@"; echo "$PWD" ; }
+
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent. This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment.
+
+D5) How can I pipe standard output and standard error from one command to
+ another, like csh does with `|&'?
+
+Use
+ command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+ ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents. Most, however, can be emulated with very little trouble.
+
+ksh-88 feature Bash equivalent
+-------------- ---------------
+compiled-in aliases set up aliases in .bashrc; some ksh aliases are
+ bash builtins (hash, history, type)
+coprocesses named pipe pairs (one for read, one for write)
+typeset +f declare -F
+cd, print, whence function substitutes in examples/functions/kshenv
+autoloaded functions examples/functions/autoload is the same as typeset -fu
+read var?prompt read -p prompt var
+
+ksh-93 feature Bash equivalent
+-------------- ---------------
+sleep, getconf Bash has loadable versions in examples/loadables
+${.sh.version} $BASH_VERSION
+print -f printf
+hist alias hist=fc
+$HISTEDIT $FCEDIT
+
+Section E: How can I get bash to do certain things, and why does bash do
+ things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+
+Here is the set of rules for processing test arguments.
+
+ 0 Args: False
+ 1 Arg: True iff argument is not null.
+ 2 Args: If first arg is !, True iff second argument is null.
+ If first argument is unary, then true if unary test is true
+ Otherwise error.
+ 3 Args: If second argument is a binary operator, do binary test of $1 $3
+ If first argument is !, negate two argument test of $2 $3
+ If first argument is `(' and third argument is `)', do the
+ one-argument test of the second argument.
+ Otherwise error.
+ 4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+ Otherwise unspecified
+ 5 or more Args: unspecified. (Historical shells would use their
+ current algorithm).
+
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal. Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it.
+For example, in:
+
+ ps -aux | head
+
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader. In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE.
+
+You can build a version of bash that will not report SIGPIPE errors
+by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
+config-top.h.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+ wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen. The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen.
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space.
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence.
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+ the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes. It affects all commands run in pipelines, not just
+simple calls to `read'. For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline. A subprocess cannot affect its
+parent's environment. When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell. When the subshell exits, the value of the variable
+is lost.
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command. The output can then be assigned to a
+variable:
+
+ grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+ ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments. If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+ /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+ OIFS="$IFS"
+ IFS=.
+ set -- $(/usr/local/bin/ipaddr)
+ IFS="$OIFS"
+ A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters. If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+ $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+ in arguments to `echo'. Bash doesn't interpret these characters. Why
+ not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'. It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation. The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them.
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default. Run
+configure with the --enable-xpg-echo-default option to turn this
+on. Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime. Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix. The only
+thing that can be suspended is the process group. This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies. These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+ ...
+
+subdirs-clean:
+ for d in ${SUBDIRS}; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+ for d in ; do
+ ( cd $d && ${MAKE} ${MFLAGS} clean )
+ done
+
+In versions of bash before bash-2.05a, this was a syntax error. If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline. The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded. These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+ subdirs=$SUBDIRS ; for d in $$subdirs; do \
+ ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+ done
+
+The latest drafts of the updated POSIX standard have changed this: the
+word list is no longer required. Bash versions 2.05a and later accept
+the new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal. This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+ with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]).
+This is what POSIX.2 and SUSv3/XPG6 specify.
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters). Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+ AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'. Others collate like
+
+ aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1). If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+ export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z]. This will prevent things like
+
+ rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility. Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+ notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group. Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH. (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group. This foreground process group receives the SIGWINCH; bash
+does not. Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash. Enable it with `shopt -s checkwinsize'.
+
+Section F: Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input. When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves. As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry. For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution.
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap. Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool. If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2. Why do globbing expansions and filename
+ completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include.
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct').
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash. This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb.
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+ `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server. When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null.
+So far, so good.
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns. The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory.
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed. You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2. You can change this
+character to whatever you want using `stty'. For example, to
+change the line kill character to control-u, type
+
+ stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+ redirection before a subshell command?
+
+The actual command in question is something like
+
+ < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error. Redirections may only precede `simple
+commands'. A subshell construct such as the above is one of the shell's
+`compound commands'. A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell). While most commands of the form
+
+ cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct. It will not apply with `patch'; you must
+modify parse.y by hand. Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK. This introduces a large
+number of reduce/reduce conflicts into the shell grammar.
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+ set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+ $if mode=emacs
+ [...]
+ $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+ HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use. The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
+the compilation should complete successfully.
+
+Section G: How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits. For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input. Use `stty' to do this:
+
+ stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+ stty pass8
+
+You may also need
+
+ stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters. You use readline variables to do
+this. These variables can be set in your .inputrc or using the bash
+`bind' builtin. Here's an example using `bind':
+
+ bash$ bind 'set convert-meta off'
+ bash$ bind 'set meta-flag on'
+ bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+ still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist. The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name. The
+`builtin' builtin executes the builtin command given as its first
+argument directly.
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+ cd()
+ {
+ builtin cd "$@" && xtitle "$HOST: $PWD"
+ }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient.
+
+G3) How can I find the value of a shell variable whose name is the value
+ of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly. You can use
+
+ ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+ var1=var2
+ var2=z
+ echo ${!var1}
+
+For sh compatibility, use the `eval' builtin. The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on.
+
+For example, this expression prints the value of the last positional
+parameter:
+
+ eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed. In versions of bash later than bash-2.0,
+
+ echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar. I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+ looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3). The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+ TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+ TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+ TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed. The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME. The \W
+expansion gives the basename of the current directory. To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD. Here are some examples:
+
+ PS1='\w$ ' # current directory with tilde
+ PS1='\W$ ' # basename of current directory
+ PS1='$PWD$ ' # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3. The following `for'
+loop will do the trick:
+
+ for f in *.foo; do
+ mv $f ${f%foo}bar
+ done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick. The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+ all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+ echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H: Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+ advice?
+
+Use the `bashbug' script to report bugs. It is built and
+installed at the same time as bash. It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment.
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug.
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug. Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution. It should
+contain at least the following files:
+
+bash.1 an extensive, thorough Unix-style manual page
+builtins.1 a manual page covering just bash builtin commands
+bashref.texi a reference manual in GNU tex`info format
+bashref.info an info version of the reference manual
+FAQ this file
+article.ms text of an article written for The Linux Journal
+readline.3 a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn
+Shell book. The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X. Look for it in fine bookstores near you. This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details). The publisher
+will donate $1 to the Free Software Foundation for each copy sold.
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+a better bash debugger (a minimally-tested version is included with bash-2.05b)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+better internationalization using GNU `gettext'
+date-stamped command history
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+ variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `+=' variable assignment operator
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+ associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2002. Never make predictions.
+
+
+This document is Copyright 1995-2003 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
--- /dev/null
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\" Chet Ramey
+.\" Information Network Services
+.\" Case Western Reserve University
+.\" chet@po.CWRU.Edu
+.\"
+.\" Last Change: Mon Apr 14 17:57:24 EDT 2003
+.\"
+.\" bash_builtins, strip all but Built-Ins section
+.if \n(zZ=1 .ig zZ
+.if \n(zY=1 .ig zY
+.TH BASH 1 "2003 April 14" "GNU Bash-3.0"
+.\"
+.\" There's some problem with having a `@'
+.\" in a tagged paragraph with the BSD man macros.
+.\" It has to do with `@' appearing in the }1 macro.
+.\" This is a problem on 4.3 BSD and Ultrix, but Sun
+.\" appears to have fixed it.
+.\" If you're seeing the characters
+.\" `@u-3p' appearing before the lines reading
+.\" `possible-hostname-completions
+.\" and `complete-hostname' down in READLINE,
+.\" then uncomment this redefinition.
+.\"
+.de }1
+.ds ]X \&\\*(]B\\
+.nr )E 0
+.if !"\\$1"" .nr )I \\$1n
+.}f
+.ll \\n(LLu
+.in \\n()Ru+\\n(INu+\\n()Iu
+.ti \\n(INu
+.ie !\\n()Iu+\\n()Ru-\w\a\\*(]X\au-3p \{\\*(]X
+.br\}
+.el \\*(]X\h\a|\\n()Iu+\\n()Ru\a\c
+.}f
+..
+.\"
+.\" File Name macro. This used to be `.PN', for Path Name,
+.\" but Sun doesn't seem to like that very much.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.SH NAME
+bash \- GNU Bourne-Again SHell
+.SH SYNOPSIS
+.B bash
+[options]
+[file]
+.SH COPYRIGHT
+.if n Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.
+.if t Bash is Copyright \(co 1989-2002 by the Free Software Foundation, Inc.
+.SH DESCRIPTION
+.B Bash
+is an \fBsh\fR-compatible command language interpreter that
+executes commands read from the standard input or from a file.
+.B Bash
+also incorporates useful features from the \fIKorn\fP and \fIC\fP
+shells (\fBksh\fP and \fBcsh\fP).
+.PP
+.B Bash
+is intended to be a conformant implementation of the IEEE
+POSIX Shell and Tools specification (IEEE Working Group 1003\.2).
+.SH OPTIONS
+In addition to the single-character shell options documented in the
+description of the \fBset\fR builtin command, \fBbash\fR
+interprets the following options when it is invoked:
+.PP
+.PD 0
+.TP 10
+.BI \-c "\| string\^"
+If the
+.B \-c
+option is present, then commands are read from
+.IR string .
+If there are arguments after the
+.IR string ,
+they are assigned to the positional parameters, starting with
+.BR $0 .
+.TP
+.B \-i
+If the
+.B \-i
+option is present, the shell is
+.IR interactive .
+.TP
+.B \-l
+Make
+.B bash
+act as if it had been invoked as a login shell (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-r
+If the
+.B \-r
+option is present, the shell becomes
+.I restricted
+(see
+.SM
+.B "RESTRICTED SHELL"
+below).
+.TP
+.B \-s
+If the
+.B \-s
+option is present, or if no arguments remain after option
+processing, then commands are read from the standard input.
+This option allows the positional parameters to be set
+when invoking an interactive shell.
+.TP
+.B \-D
+A list of all double-quoted strings preceded by \fB$\fP
+is printed on the standard ouput.
+These are the strings that
+are subject to language translation when the current locale
+is not \fBC\fP or \fBPOSIX\fP.
+This implies the \fB\-n\fP option; no commands will be executed.
+.TP
+.B [\-+]O [\fIshopt_option\fP]
+\fIshopt_option\fP is one of the shell options accepted by the
+\fBshopt\fP builtin (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+If \fIshopt_option\fP is present, \fB\-O\fP sets the value of that option;
+\fB+O\fP unsets it.
+If \fIshopt_option\fP is not supplied, the names and values of the shell
+options accepted by \fBshopt\fP are printed on the standard output.
+If the invocation option is \fB+O\fP, the output is displayed in a format
+that may be reused as input.
+.TP
+.B \-\-
+A
+.B \-\-
+signals the end of options and disables further option processing.
+Any arguments after the
+.B \-\-
+are treated as filenames and arguments. An argument of
+.B \-
+is equivalent to \fB\-\-\fP.
+.PD
+.PP
+.B Bash
+also interprets a number of multi-character options.
+These options must appear on the command line before the
+single-character options to be recognized.
+.PP
+.PD 0
+.TP
+.B \-\-debugger
+Arrange for the debugger profile to be executed before the shell
+starts. Turns on extended debugging mode (see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below) and shell function tracing (see the description of the
+\fB\-o functrace\fP option to the
+.B set
+builtin below).
+.TP
+.B \-\-dump\-po\-strings
+Equivalent to \fB\-D\fP, but the output is in the GNU \fIgettext\fP
+\fBpo\fP (portable object) file format.
+.TP
+.B \-\-dump\-strings
+Equivalent to \fB\-D\fP.
+.TP
+.B \-\-help
+Display a usage message on standard output and exit successfully.
+.TP
+\fB\-\-init\-file\fP \fIfile\fP
+.PD 0
+.TP
+\fB\-\-rcfile\fP \fIfile\fP
+.PD
+Execute commands from
+.I file
+instead of the standard personal initialization file
+.I ~/.bashrc
+if the shell is interactive (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-\-login
+Equivalent to \fB\-l\fP.
+.TP
+.B \-\-noediting
+Do not use the GNU
+.B readline
+library to read command lines when the shell is interactive.
+.TP
+.B \-\-noprofile
+Do not read either the system-wide startup file
+.FN /etc/profile
+or any of the personal initialization files
+.IR ~/.bash_profile ,
+.IR ~/.bash_login ,
+or
+.IR ~/.profile .
+By default,
+.B bash
+reads these files when it is invoked as a login shell (see
+.SM
+.B INVOCATION
+below).
+.TP
+.B \-\-norc
+Do not read and execute the personal initialization file
+.I ~/.bashrc
+if the shell is interactive.
+This option is on by default if the shell is invoked as
+.BR sh .
+.TP
+.B \-\-posix
+Change the behavior of \fBbash\fP where the default operation differs
+from the POSIX 1003.2 standard to match the standard (\fIposix mode\fP).
+.TP
+.B \-\-restricted
+The shell becomes restricted (see
+.SM
+.B "RESTRICTED SHELL"
+below).
+.TP
+.B \-\-verbose
+Equivalent to \fB\-v\fP.
+.TP
+.B \-\-version
+Show version information for this instance of
+.B bash
+on the standard output and exit successfully.
+.PD
+.SH ARGUMENTS
+If arguments remain after option processing, and neither the
+.B \-c
+nor the
+.B \-s
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands.
+If
+.B bash
+is invoked in this fashion,
+.B $0
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+.B Bash
+reads and executes commands from this file, then exits.
+\fBBash\fP's exit status is the exit status of the last command
+executed in the script.
+If no commands are executed, the exit status is 0.
+An attempt is first made to open the file in the current directory, and,
+if no file is found, then the shell searches the directories in
+.SM
+.B PATH
+for the script.
+.SH INVOCATION
+A \fIlogin shell\fP is one whose first character of argument zero is a
+.BR \- ,
+or one started with the
+.B \-\-login
+option.
+.PP
+An \fIinteractive\fP shell is one started without non-option arguments
+and without the
+.B \-c
+option
+whose standard input and output are
+both connected to terminals (as determined by
+.IR isatty (3)),
+or one started with the
+.B \-i
+option.
+.SM
+.B PS1
+is set and
+.B $\-
+includes
+.B i
+if
+.B bash
+is interactive,
+allowing a shell script or a startup file to test this state.
+.PP
+The following paragraphs describe how
+.B bash
+executes its startup files.
+If any of the files exist but cannot be read,
+.B bash
+reports an error.
+Tildes are expanded in file names as described below under
+.B "Tilde Expansion"
+in the
+.SM
+.B EXPANSION
+section.
+.PP
+When
+.B bash
+is invoked as an interactive login shell, or as a non-interactive shell
+with the \fB\-\-login\fP option, it first reads and
+executes commands from the file \fI/etc/profile\fP, if that
+file exists.
+After reading that file, it looks for \fI~/.bash_profile\fP,
+\fI~/.bash_login\fP, and \fI~/.profile\fP, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The
+.B \-\-noprofile
+option may be used when the shell is started to inhibit this behavior.
+.PP
+When a login shell exits,
+.B bash
+reads and executes commands from the file \fI~/.bash_logout\fP, if it
+exists.
+.PP
+When an interactive shell that is not a login shell is started,
+.B bash
+reads and executes commands from \fI~/.bashrc\fP, if that file exists.
+This may be inhibited by using the
+.B \-\-norc
+option.
+The \fB\-\-rcfile\fP \fIfile\fP option will force
+.B bash
+to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP.
+.PP
+When
+.B bash
+is started non-interactively, to run a shell script, for example, it
+looks for the variable
+.SM
+.B BASH_ENV
+in the environment, expands its value if it appears there, and uses the
+expanded value as the name of a file to read and execute.
+.B Bash
+behaves as if the following command were executed:
+.sp .5
+.RS
+.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP
+.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
+.RE
+.sp .5
+but the value of the
+.SM
+.B PATH
+variable is not used to search for the file name.
+.PP
+If
+.B bash
+is invoked with the name
+.BR sh ,
+it tries to mimic the startup behavior of historical versions of
+.B sh
+as closely as possible,
+while conforming to the POSIX standard as well.
+When invoked as an interactive login shell, or a non-interactive
+shell with the \fB\-\-login\fP option, it first attempts to
+read and execute commands from
+.I /etc/profile
+and
+.IR ~/.profile ,
+in that order.
+The
+.B \-\-noprofile
+option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name
+.BR sh ,
+.B bash
+looks for the variable
+.SM
+.BR ENV ,
+expands its value if it is defined, and uses the
+expanded value as the name of a file to read and execute.
+Since a shell invoked as
+.B sh
+does not attempt to read and execute commands from any other startup
+files, the
+.B \-\-rcfile
+option has no effect.
+A non-interactive shell invoked with the name
+.B sh
+does not attempt to read any other startup files.
+When invoked as
+.BR sh ,
+.B bash
+enters
+.I posix
+mode after the startup files are read.
+.PP
+When
+.B bash
+is started in
+.I posix
+mode, as with the
+.B \-\-posix
+command line option, it follows the POSIX standard for startup files.
+In this mode, interactive shells expand the
+.SM
+.B ENV
+variable and commands are read and executed from the file
+whose name is the expanded value.
+No other startup files are read.
+.PP
+.B Bash
+attempts to determine when it is being run by the remote shell
+daemon, usually \fIrshd\fP.
+If
+.B bash
+determines it is being run by \fIrshd\fP, it reads and executes
+commands from \fI~/.bashrc\fP, if that file exists and is readable.
+It will not do this if invoked as \fBsh\fP.
+The
+.B \-\-norc
+option may be used to inhibit this behavior, and the
+.B \-\-rcfile
+option may be used to force another file to be read, but
+\fIrshd\fP does not generally invoke the shell with those options
+or allow them to be specified.
+.PP
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the \fB\-p\fP option is not supplied, no startup
+files are read, shell functions are not inherited from the environment, the
+.SM
+.B SHELLOPTS
+variable, if it appears in the environment, is ignored,
+and the effective user id is set to the real user id.
+If the \fB\-p\fP option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+.SH DEFINITIONS
+.PP
+The following definitions are used throughout the rest of this
+document.
+.PD 0
+.TP
+.B blank
+A space or tab.
+.TP
+.B word
+A sequence of characters considered as a single unit by the shell.
+Also known as a
+.BR token .
+.TP
+.B name
+A
+.I word
+consisting only of alphanumeric characters and underscores, and
+beginning with an alphabetic character or an underscore. Also
+referred to as an
+.BR identifier .
+.TP
+.B metacharacter
+A character that, when unquoted, separates words. One of the following:
+.br
+.RS
+.PP
+.if t \fB| & ; ( ) < > space tab\fP
+.if n \fB| & ; ( ) < > space tab\fP
+.RE
+.PP
+.TP
+.B control operator
+A \fItoken\fP that performs a control function. It is one of the following
+symbols:
+.RS
+.PP
+.if t \fB\(bv\(bv & && ; ;; ( ) | <newline>\fP
+.if n \fB|| & && ; ;; ( ) | <newline>\fP
+.RE
+.PD
+.SH "RESERVED WORDS"
+\fIReserved words\fP are words that have a special meaning to the shell.
+The following words are recognized as reserved when unquoted and either
+the first word of a simple command (see
+.SM
+.B SHELL GRAMMAR
+below) or the third word of a
+.B case
+or
+.B for
+command:
+.if t .RS
+.PP
+.B
+.if n ! case do done elif else esac fi for function if in select then until while { } time [[ ]]
+.if t ! case do done elif else esac fi for function if in select then until while { } time [[ ]]
+.if t .RE
+.RE
+.SH "SHELL GRAMMAR"
+.SS Simple Commands
+.PP
+A \fIsimple command\fP is a sequence of optional variable assignments
+followed by \fBblank\fP-separated words and redirections, and
+terminated by a \fIcontrol operator\fP. The first word
+specifies the command to be executed, and is passed as argument zero.
+The remaining words are passed as arguments to the invoked command.
+.PP
+The return value of a \fIsimple command\fP is its exit status, or
+128+\fIn\^\fP if the command is terminated by signal
+.IR n .
+.SS Pipelines
+.PP
+A \fIpipeline\fP is a sequence of one or more commands separated by
+the character
+.BR | .
+The format for a pipeline is:
+.RS
+.PP
+[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ \fB|\fP \fIcommand2\fP ... ]
+.RE
+.PP
+The standard output of
+.I command
+is connected via a pipe to the standard input of
+.IR command2 .
+This connection is performed before any redirections specified by the
+command (see
+.SM
+.B REDIRECTION
+below).
+.PP
+If the reserved word
+.B !
+precedes a pipeline, the exit status of that
+pipeline is the logical NOT of the exit status of the last command.
+Otherwise, the status of the pipeline is the exit status of the last
+command.
+The shell waits for all commands in the pipeline to
+terminate before returning a value.
+.PP
+If the
+.B time
+reserved word precedes a pipeline, the elapsed as well as user and
+system time consumed by its execution are reported when the pipeline
+terminates.
+The \fB\-p\fP option changes the output format to that specified by POSIX.
+The
+.SM
+.B TIMEFORMAT
+variable may be set to a format string that specifies how the timing
+information should be displayed; see the description of
+.SM
+.B TIMEFORMAT
+under
+.B "Shell Variables"
+below.
+.PP
+Each command in a pipeline is executed as a separate process (i.e., in a
+subshell).
+.SS Lists
+.PP
+A \fIlist\fP is a sequence of one or more pipelines separated by one
+of the operators
+.BR ; ,
+.BR & ,
+.BR && ,
+or
+.BR \(bv\(bv ,
+and optionally terminated by one of
+.BR ; ,
+.BR & ,
+or
+.BR <newline> .
+.PP
+Of these list operators,
+.B &&
+and
+.B \(bv\(bv
+have equal precedence, followed by
+.B ;
+and
+.BR &,
+which have equal precedence.
+.PP
+A sequence of one or more newlines may appear in a \fIlist\fP instead
+of a semicolon to delimit commands.
+.PP
+If a command is terminated by the control operator
+.BR & ,
+the shell executes the command in the \fIbackground\fP
+in a subshell. The shell does not wait for the command to
+finish, and the return status is 0. Commands separated by a
+.B ;
+are executed sequentially; the shell waits for each
+command to terminate in turn. The return status is the
+exit status of the last command executed.
+.PP
+The control operators
+.B &&
+and
+.B \(bv\(bv
+denote AND lists and OR lists, respectively.
+An AND list has the form
+.RS
+.PP
+\fIcommand1\fP \fB&&\fP \fIcommand2\fP
+.RE
+.PP
+.I command2
+is executed if, and only if,
+.I command1
+returns an exit status of zero.
+.PP
+An OR list has the form
+.RS
+.PP
+\fIcommand1\fP \fB\(bv\(bv\fP \fIcommand2\fP
+.PP
+.RE
+.PP
+.I command2
+is executed if and only if
+.I command1
+returns a non-zero exit status. The return status of
+AND and OR lists is the exit status of the last command
+executed in the list.
+.SS Compound Commands
+.PP
+A \fIcompound command\fP is one of the following:
+.TP
+(\fIlist\fP)
+\fIlist\fP is executed in a subshell. Variable assignments and builtin
+commands that affect the shell's environment do not remain in effect
+after the command completes. The return status is the exit status of
+\fIlist\fP.
+.TP
+{ \fIlist\fP; }
+\fIlist\fP is simply executed in the current shell environment.
+\fIlist\fP must be terminated with a newline or semicolon.
+This is known as a \fIgroup command\fP.
+The return status is the exit status of
+\fIlist\fP.
+Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and
+\fB}\fP are \fIreserved words\fP and must occur where a reserved
+word is permitted to be recognized. Since they do not cause a word
+break, they must be separated from \fIlist\fP by whitespace.
+.TP
+((\fIexpression\fP))
+The \fIexpression\fP is evaluated according to the rules described
+below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1. This is exactly equivalent to
+\fBlet "\fIexpression\fP"\fR.
+.TP
+\fB[[\fP \fIexpression\fP \fB]]\fP
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression \fIexpression\fP.
+Expressions are composed of the primaries described below under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" .
+Word splitting and pathname expansion are not performed on the words
+between the \fB[[\fP and \fB]]\fP; tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as \fB\-f\fP must be unquoted to be recognized
+as primaries.
+.if t .sp 0.5
+.if n .sp 1
+When the \fB==\fP and \fB!=\fP operators are used, the string to the
+right of the operator is considered a pattern and matched according
+to the rules described below under \fBPattern Matching\fP.
+The return value is 0 if the string matches or does not match
+the pattern, respectively, and 1 otherwise.
+Any part of the pattern may be quoted to force it to be matched as a
+string.
+.if t .sp 0.5
+.if n .sp 1
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+.if t .sp 0.5
+.if n .sp 1
+.RS
+.PD 0
+.TP
+.B ( \fIexpression\fP )
+Returns the value of \fIexpression\fP.
+This may be used to override the normal precedence of operators.
+.TP
+.B ! \fIexpression\fP
+True if
+.I expression
+is false.
+.TP
+\fIexpression1\fP \fB&&\fP \fIexpression2\fP
+True if both
+.I expression1
+and
+.I expression2
+are true.
+.TP
+.if t \fIexpression1\fP \fB\(bv\(bv\fP \fIexpression2\fP
+.if n \fIexpression1\fP \fB||\fP \fIexpression2\fP
+True if either
+.I expression1
+or
+.I expression2
+is true.
+.PD
+.LP
+The \fB&&\fP and
+.if t \fB\(bv\(bv\fP
+.if n \fB||\fP
+operators do not evaluate \fIexpression2\fP if the value of
+\fIexpression1\fP is sufficient to determine the return value of
+the entire conditional expression.
+.RE
+.TP
+\fBfor\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
+The list of words following \fBin\fP is expanded, generating a list
+of items.
+The variable \fIname\fP is set to each element of this list
+in turn, and \fIlist\fP is executed each time.
+If the \fBin\fP \fIword\fP is omitted, the \fBfor\fP command executes
+\fIlist\fP once for each positional parameter that is set (see
+.SM
+.B PARAMETERS
+below).
+The return status is the exit status of the last command that executes.
+If the expansion of the items following \fBin\fP results in an empty
+list, no commands are executed, and the return status is 0.
+.TP
+\fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) ; \fBdo\fP \fIlist\fP ; \fBdone\fP
+First, the arithmetic expression \fIexpr1\fP is evaluated according
+to the rules described below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+The arithmetic expression \fIexpr2\fP is then evaluated repeatedly
+until it evaluates to zero.
+Each time \fIexpr2\fP evaluates to a non-zero value, \fIlist\fP is
+executed and the arithmetic expression \fIexpr3\fP is evaluated.
+If any expression is omitted, it behaves as if it evaluates to 1.
+The return value is the exit status of the last command in \fIlist\fP
+that is executed, or false if any of the expressions is invalid.
+.TP
+\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
+The list of words following \fBin\fP is expanded, generating a list
+of items. The set of expanded words is printed on the standard
+error, each preceded by a number. If the \fBin\fP
+\fIword\fP is omitted, the positional parameters are printed (see
+.SM
+.B PARAMETERS
+below). The
+.B PS3
+prompt is then displayed and a line read from the standard input.
+If the line consists of a number corresponding to one of
+the displayed words, then the value of
+.I name
+is set to that word. If the line is empty, the words and prompt
+are displayed again. If EOF is read, the command completes. Any
+other value read causes
+.I name
+to be set to null. The line read is saved in the variable
+.BR REPLY .
+The
+.I list
+is executed after each selection until a
+.B break
+command is executed.
+The exit status of
+.B select
+is the exit status of the last command executed in
+.IR list ,
+or zero if no commands were executed.
+.TP
+\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \
+... ) \fIlist\fP ;; ] ... \fBesac\fP
+A \fBcase\fP command first expands \fIword\fP, and tries to match
+it against each \fIpattern\fP in turn, using the same matching rules
+as for pathname expansion (see
+.B Pathname Expansion
+below). When a match is found, the
+corresponding \fIlist\fP is executed. After the first match, no
+subsequent matches are attempted. The exit status is zero if no
+pattern matches. Otherwise, it is the exit status of the
+last command executed in \fIlist\fP.
+.TP
+\fBif\fP \fIlist\fP; \fBthen\fP \fIlist;\fP \
+[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \
+[ \fBelse\fP \fIlist\fP; ] \fBfi\fP
+The
+.B if
+.I list
+is executed. If its exit status is zero, the
+\fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP
+\fIlist\fP is executed in turn, and if its exit status is zero,
+the corresponding \fBthen\fP \fIlist\fP is executed and the
+command completes. Otherwise, the \fBelse\fP \fIlist\fP is
+executed, if present. The exit status is the exit status of the
+last command executed, or zero if no condition tested true.
+.TP
+\fBwhile\fP \fIlist\fP; \fBdo\fP \fIlist\fP; \fBdone\fP
+.PD 0
+.TP
+\fBuntil\fP \fIlist\fP; \fBdo\fP \fIlist\fP; \fBdone\fP
+.PD
+The \fBwhile\fP command continuously executes the \fBdo\fP
+\fIlist\fP as long as the last command in \fIlist\fP returns
+an exit status of zero. The \fBuntil\fP command is identical
+to the \fBwhile\fP command, except that the test is negated;
+the
+.B do
+.I list
+is executed as long as the last command in
+.I list
+returns a non-zero exit status.
+The exit status of the \fBwhile\fP and \fBuntil\fP commands
+is the exit status
+of the last \fBdo\fP \fIlist\fP command executed, or zero if
+none was executed.
+.TP
+[ \fBfunction\fP ] \fIname\fP () { \fIlist\fP; }
+This defines a function named \fIname\fP. The \fIbody\fP of the
+function is the
+.I list
+of commands between { and }. This list
+is executed whenever \fIname\fP is specified as the
+name of a simple command. The exit status of a function is
+the exit status of the last command executed in the body. (See
+.SM
+.B FUNCTIONS
+below.)
+.SH COMMENTS
+In a non-interactive shell, or an interactive shell in which the
+.B interactive_comments
+option to the
+.B shopt
+builtin is enabled (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), a word beginning with
+.B #
+causes that word and all remaining characters on that line to
+be ignored. An interactive shell without the
+.B interactive_comments
+option enabled does not allow comments. The
+.B interactive_comments
+option is on by default in interactive shells.
+.SH QUOTING
+\fIQuoting\fP is used to remove the special meaning of certain
+characters or words to the shell. Quoting can be used to
+disable special treatment for special characters, to prevent
+reserved words from being recognized as such, and to prevent
+parameter expansion.
+.PP
+Each of the \fImetacharacters\fP listed above under
+.SM
+.B DEFINITIONS
+has special meaning to the shell and must be quoted if it is to
+represent itself.
+.PP
+When the command history expansion facilities are being used, the
+\fIhistory expansion\fP character, usually \fB!\fP, must be quoted
+to prevent history expansion.
+.PP
+There are three quoting mechanisms: the
+.IR "escape character" ,
+single quotes, and double quotes.
+.PP
+A non-quoted backslash (\fB\e\fP) is the
+.IR "escape character" .
+It preserves the literal value of the next character that follows,
+with the exception of <newline>. If a \fB\e\fP<newline> pair
+appears, and the backslash is not itself quoted, the \fB\e\fP<newline>
+is treated as a line continuation (that is, it is removed from the
+input stream and effectively ignored).
+.PP
+Enclosing characters in single quotes preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+.PP
+Enclosing characters in double quotes preserves the literal value
+of all characters within the quotes, with the exception of
+.BR $ ,
+.BR ` ,
+and
+.BR \e .
+The characters
+.B $
+and
+.B `
+retain their special meaning within double quotes. The backslash
+retains its special meaning only when followed by one of the following
+characters:
+.BR $ ,
+.BR ` ,
+\^\fB"\fP\^,
+.BR \e ,
+or
+.BR <newline> .
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+When command history is being used, the double quote may not be used to
+quote the history expansion character.
+.PP
+The special parameters
+.B *
+and
+.B @
+have special meaning when in double
+quotes (see
+.SM
+.B PARAMETERS
+below).
+.PP
+Words of the form \fB$\fP'\fIstring\fP' are treated specially. The
+word expands to \fIstring\fP, with backslash-escaped characters replaced
+as specifed by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ee
+an escape character
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+new line
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\e
+backslash
+.TP
+.B \e'
+single quote
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.TP
+.B \ec\fIx\fP
+a control-\fIx\fP character
+.PD
+.RE
+.LP
+The expanded result is single-quoted, as if the dollar sign had
+not been present.
+.PP
+A double-quoted string preceded by a dollar sign (\fB$\fP) will cause
+the string to be translated according to the current locale.
+If the current locale is \fBC\fP or \fBPOSIX\fP, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+.SH PARAMETERS
+A
+.I parameter
+is an entity that stores values.
+It can be a
+.IR name ,
+a number, or one of the special characters listed below under
+.BR "Special Parameters" .
+A
+.I variable
+is a parameter denoted by a
+.IR name .
+A variable has a \fIvalue\fP and zero or more \fIattributes\fP.
+Attributes are assigned using the
+.B declare
+builtin command (see
+.B declare
+below in
+.SM
+.BR "SHELL BUILTIN COMMANDS" ).
+.PP
+A parameter is set if it has been assigned a value. The null string is
+a valid value. Once a variable is set, it may be unset only by using
+the
+.B unset
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.PP
+A
+.I variable
+may be assigned to by a statement of the form
+.RS
+.PP
+\fIname\fP=[\fIvalue\fP]
+.RE
+.PP
+If
+.I value
+is not given, the variable is assigned the null string. All
+.I values
+undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (see
+.SM
+.B EXPANSION
+below). If the variable has its
+.B integer
+attribute set, then
+.I value
+is evaluated as an arithmetic expression even if the $((...)) expansion is
+not used (see
+.B "Arithmetic Expansion"
+below).
+Word splitting is not performed, with the exception
+of \fB"$@"\fP as explained below under
+.BR "Special Parameters" .
+Pathname expansion is not performed.
+Assignment statements may also appear as arguments to the
+.BR declare ,
+.BR typeset ,
+.BR export ,
+.BR readonly ,
+and
+.B local
+builtin commands.
+.SS Positional Parameters
+.PP
+A
+.I positional parameter
+is a parameter denoted by one or more
+digits, other than the single digit 0. Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the
+.B set
+builtin command. Positional parameters may not be assigned to
+with assignment statements. The positional parameters are
+temporarily replaced when a shell function is executed (see
+.SM
+.B FUNCTIONS
+below).
+.PP
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces (see
+.SM
+.B EXPANSION
+below).
+.SS Special Parameters
+.PP
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+.PD 0
+.TP
+.B *
+Expands to the positional parameters, starting from one. When the
+expansion occurs within double quotes, it expands to a single word
+with the value of each parameter separated by the first character
+of the
+.SM
+.B IFS
+special variable. That is, "\fB$*\fP" is equivalent
+to "\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP", where
+.I c
+is the first character of the value of the
+.SM
+.B IFS
+variable. If
+.SM
+.B IFS
+is unset, the parameters are separated by spaces.
+If
+.SM
+.B IFS
+is null, the parameters are joined without intervening separators.
+.TP
+.B @
+Expands to the positional parameters, starting from one. When the
+expansion occurs within double quotes, each parameter expands to a
+separate word. That is, "\fB$@\fP" is equivalent to
+"\fB$1\fP" "\fB$2\fP" ...
+When there are no positional parameters, "\fB$@\fP" and
+.B $@
+expand to nothing (i.e., they are removed).
+.TP
+.B #
+Expands to the number of positional parameters in decimal.
+.TP
+.B ?
+Expands to the status of the most recently executed foreground
+pipeline.
+.TP
+.B \-
+Expands to the current option flags as specified upon invocation,
+by the
+.B set
+builtin command, or those set by the shell itself
+(such as the
+.B \-i
+option).
+.TP
+.B $
+Expands to the process ID of the shell. In a () subshell, it
+expands to the process ID of the current shell, not the
+subshell.
+.TP
+.B !
+Expands to the process ID of the most recently executed background
+(asynchronous) command.
+.TP
+.B 0
+Expands to the name of the shell or shell script. This is set at
+shell initialization. If
+.B bash
+is invoked with a file of commands,
+.B $0
+is set to the name of that file. If
+.B bash
+is started with the
+.B \-c
+option, then
+.B $0
+is set to the first argument after the string to be
+executed, if one is present. Otherwise, it is set
+to the file name used to invoke
+.BR bash ,
+as given by argument zero.
+.TP
+.B _
+At shell startup, set to the absolute file name of the shell or shell
+script being executed as passed in the argument list.
+Subsequently, expands to the last argument to the previous command,
+after expansion.
+Also set to the full file name of each command executed and placed in
+the environment exported to that command.
+When checking mail, this parameter holds the name of the mail file
+currently being checked.
+.PD
+.SS Shell Variables
+.PP
+The following variables are set by the shell:
+.PP
+.PD 0
+.TP
+.B BASH
+Expands to the full file name used to invoke this instance of
+.BR bash .
+.TP
+.B BASH_ARGC
+An array variable whose values are the number of parameters in each
+frame of the current bash execution call stack. The number of
+parameters to the current subroutine (shell function or script executed
+with \fB.\fP or \fBsource\fP) is at the top of the stack. When a
+subroutine is executed, the number of parameters passed is pushed onto
+\fBBASH_ARGC\fP.
+.TP
+.B BASH_ARGV
+An array variable containing all of the parameters in the current bash
+execution call stack. The final parameter of the last subroutine call
+is at the top of the stack; the first parameter of the initial call is
+at the bottom. When a subroutine is executed, the parameters supplied
+are pushed onto \fBBASH_ARGV\fP.
+.TP
+.B BASH_COMMAND
+The command currently being executed or about to be executed, unless the
+shell is executing a command as the result of a trap,
+in which case it is the command executing at the time of the trap.
+.TP
+.B BASH_EXECUTION_STRING
+The command argument to the \fB\-c\fP invocation option.
+.TP
+.B BASH_LINENO
+An array variable whose members are the line numbers in source files
+corresponding to each member of @var{FUNCNAME}.
+\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source
+file where \fB${FUNCNAME[\fP\fI$i + 1\fP\fB]}\fP was called.
+The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i + 1\fP\fB]}\fB.
+Use \fBLINENO\fP to obtain the current line number.
+.TP
+.B BASH_SOURCE
+An array variable whose members are the source filenames corresponding
+to the elements in the \fBFUNCNAME\fP array variable.
+.TP
+.B BASH_SUBSHELL
+Incremented by one each time a subshell or subshell environment is spawned.
+The initial value is 0.
+.TP
+.B BASH_VERSINFO
+A readonly array variable whose members hold version information for
+this instance of
+.BR bash .
+The values assigned to the array members are as follows:
+.sp .5
+.RS
+.PD 0
+.TP 24
+.B BASH_VERSINFO[\fR0\fP]
+The major version number (the \fIrelease\fP).
+.TP
+.B BASH_VERSINFO[\fR1\fP]
+The minor version number (the \fIversion\fP).
+.TP
+.B BASH_VERSINFO[\fR2\fP]
+The patch level.
+.TP
+.B BASH_VERSINFO[\fR3\fP]
+The build version.
+.TP
+.B BASH_VERSINFO[\fR4\fP]
+The release status (e.g., \fIbeta1\fP).
+.TP
+.B BASH_VERSINFO[\fR5\fP]
+The value of \fBMACHTYPE\fP.
+.PD
+.RE
+.TP
+.B BASH_VERSION
+Expands to a string describing the version of this instance of
+.BR bash .
+.TP
+.B COMP_CWORD
+An index into \fB${COMP_WORDS}\fP of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_LINE
+The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_POINT
+The index of the current cursor position relative to the beginning of
+the current command.
+If the current cursor position is at the end of the current command,
+the value of this variable is equal to \fB${#COMP_LINE}\fP.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B COMP_WORDBREAKS
+The set of characters that the Readline library treats as word
+separators when performing word completion.
+If
+.SM
+.B COMP_WORDBREAKS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B COMP_WORDS
+An array variable (see \fBArrays\fP below) consisting of the individual
+words in the current command line.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (see \fBProgrammable Completion\fP
+below).
+.TP
+.B DIRSTACK
+An array variable (see
+.B Arrays
+below) containing the current contents of the directory stack.
+Directories appear in the stack in the order they are displayed by the
+.B dirs
+builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the
+.B pushd
+and
+.B popd
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If
+.SM
+.B DIRSTACK
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B EUID
+Expands to the effective user ID of the current user, initialized at
+shell startup. This variable is readonly.
+.TP
+.B FUNCNAME
+An array variable containing the names of all shell functions
+currently in the execution call stack.
+The element with index 0 is the name of any currently-executing
+shell function.
+The bottom-most element is "main".
+This variable exists only when a shell function is executing.
+Assignments to
+.SM
+.B FUNCNAME
+have no effect and return an error status.
+If
+.SM
+.B FUNCNAME
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B GROUPS
+An array variable containing the list of groups of which the current
+user is a member.
+Assignments to
+.SM
+.B GROUPS
+have no effect and return an error status.
+If
+.SM
+.B GROUPS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B HISTCMD
+The history number, or index in the history list, of the current
+command.
+If
+.SM
+.B HISTCMD
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B HOSTNAME
+Automatically set to the name of the current host.
+.TP
+.B HOSTTYPE
+Automatically set to a string that uniquely
+describes the type of machine on which
+.B bash
+is executing.
+The default is system-dependent.
+.TP
+.B LINENO
+Each time this parameter is referenced, the shell substitutes
+a decimal number representing the current sequential line number
+(starting with 1) within a script or function. When not in a
+script or function, the value substituted is not guaranteed to
+be meaningful.
+If
+.SM
+.B LINENO
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B MACHTYPE
+Automatically set to a string that fully describes the system
+type on which
+.B bash
+is executing, in the standard GNU \fIcpu-company-system\fP format.
+The default is system-dependent.
+.TP
+.B OLDPWD
+The previous working directory as set by the
+.B cd
+command.
+.TP
+.B OPTARG
+The value of the last option argument processed by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.TP
+.B OPTIND
+The index of the next argument to be processed by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.TP
+.B OSTYPE
+Automatically set to a string that
+describes the operating system on which
+.B bash
+is executing.
+The default is system-dependent.
+.TP
+.B PIPESTATUS
+An array variable (see
+.B Arrays
+below) containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+.TP
+.B PPID
+The process ID of the shell's parent. This variable is readonly.
+.TP
+.B PWD
+The current working directory as set by the
+.B cd
+command.
+.TP
+.B RANDOM
+Each time this parameter is referenced, a random integer between
+0 and 32767 is
+generated. The sequence of random numbers may be initialized by assigning
+a value to
+.SM
+.BR RANDOM .
+If
+.SM
+.B RANDOM
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B REPLY
+Set to the line of input read by the
+.B read
+builtin command when no arguments are supplied.
+.TP
+.B SECONDS
+Each time this parameter is
+referenced, the number of seconds since shell invocation is returned. If a
+value is assigned to
+.SM
+.BR SECONDS ,
+the value returned upon subsequent
+references is
+the number of seconds since the assignment plus the value assigned.
+If
+.SM
+.B SECONDS
+is unset, it loses its special properties, even if it is
+subsequently reset.
+.TP
+.B SHELLOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the
+.B \-o
+option to the
+.B set
+builtin command (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below). The options appearing in
+.SM
+.B SHELLOPTS
+are those reported as
+.I on
+by \fBset \-o\fP.
+If this variable is in the environment when
+.B bash
+starts up, each shell option in the list will be enabled before
+reading any startup files.
+This variable is read-only.
+.TP
+.B SHLVL
+Incremented by one each time an instance of
+.B bash
+is started.
+.TP
+.B UID
+Expands to the user ID of the current user, initialized at shell startup.
+This variable is readonly.
+.PD
+.PP
+The following variables are used by the shell. In some cases,
+.B bash
+assigns a default value to a variable; these cases are noted
+below.
+.PP
+.PD 0
+.TP
+.B BASH_ENV
+If this parameter is set when \fBbash\fP is executing a shell script,
+its value is interpreted as a filename containing commands to
+initialize the shell, as in
+.IR ~/.bashrc .
+The value of
+.SM
+.B BASH_ENV
+is subjected to parameter expansion, command substitution, and arithmetic
+expansion before being interpreted as a file name.
+.SM
+.B PATH
+is not used to search for the resultant file name.
+.TP
+.B CDPATH
+The search path for the
+.B cd
+command.
+This is a colon-separated list of directories in which the shell looks
+for destination directories specified by the
+.B cd
+command.
+A sample value is
+.if t \f(CW".:~:/usr"\fP.
+.if n ".:~:/usr".
+.TP
+.B COLUMNS
+Used by the \fBselect\fP builtin command to determine the terminal width
+when printing selection lists. Automatically set upon receipt of a SIGWINCH.
+.TP
+.B COMPREPLY
+An array variable from which \fBbash\fP reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (see \fBProgrammable Completion\fP below).
+.TP
+.B EMACS
+If \fBbash\fP finds this variable in the environment when the shell starts
+with value
+.if t \f(CWt\fP,
+.if n "t",
+it assumes that the shell is running in an emacs shell buffer and disables
+line editing.
+.TP
+.B FCEDIT
+The default editor for the
+.B fc
+builtin command.
+.TP
+.B FIGNORE
+A colon-separated list of suffixes to ignore when performing
+filename completion (see
+.SM
+.B READLINE
+below).
+A filename whose suffix matches one of the entries in
+.SM
+.B FIGNORE
+is excluded from the list of matched filenames.
+A sample value is
+.if t \f(CW".o:~"\fP.
+.if n ".o:~".
+.TP
+.B GLOBIGNORE
+A colon-separated list of patterns defining the set of filenames to
+be ignored by pathname expansion.
+If a filename matched by a pathname expansion pattern also matches one
+of the patterns in
+.SM
+.BR GLOBIGNORE ,
+it is removed from the list of matches.
+.TP
+.B HISTCONTROL
+A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes
+.IR ignorespace ,
+lines which begin with a
+.B space
+character are not saved in the history list.
+A value of
+.I ignoredups
+causes lines matching the previous history entry to not be saved.
+A value of
+.I ignoreboth
+is shorthand for \fIignorespace\fP and \fIignoredups\fP.
+A value of
+.IR erasedups
+causes all previous lines matching the current line to be removed from
+the history list before that line is saved.
+Any value not in the above list is ignored.
+If \fBHISTCONTROL\fP is unset, or does not include a valid value,
+all lines read by the shell parser are saved on the history list,
+subject to the value of
+.BR HISTIGNORE .
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+.BR HISTCONTROL .
+.TP
+.B HISTFILE
+The name of the file in which command history is saved (see
+.SM
+.B HISTORY
+below). The default value is \fI~/.bash_history\fP. If unset, the
+command history is not saved when an interactive shell exits.
+.TP
+.B HISTFILESIZE
+The maximum number of lines contained in the history file. When this
+variable is assigned a value, the history file is truncated, if
+necessary, to contain no more than that number of lines. The default
+value is 500. The history file is also truncated to this size after
+writing it when an interactive shell exits.
+.TP
+.B HISTIGNORE
+A colon-separated list of patterns used to decide which command lines
+should be saved on the history list. Each pattern is anchored at the
+beginning of the line and must match the complete line (no implicit
+`\fB*\fP' is appended). Each pattern is tested against the line
+after the checks specified by
+.B HISTCONTROL
+are applied.
+In addition to the normal shell pattern matching characters, `\fB&\fP'
+matches the previous history line. `\fB&\fP' may be escaped using a
+backslash; the backslash is removed before attempting a match.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+.BR HISTIGNORE .
+.TP
+.B HISTSIZE
+The number of commands to remember in the command history (see
+.SM
+.B HISTORY
+below). The default value is 500.
+.TP
+.B HOME
+The home directory of the current user; the default argument for the
+\fBcd\fP builtin command.
+The value of this variable is also used when performing tilde expansion.
+.TP
+.B HOSTFILE
+Contains the name of a file in the same format as
+.FN /etc/hosts
+that should be read when the shell needs to complete a
+hostname.
+The list of possible hostname completions may be changed while the
+shell is running;
+the next time hostname completion is attempted after the
+value is changed,
+.B bash
+adds the contents of the new file to the existing list.
+If
+.SM
+.B HOSTFILE
+is set, but has no value, \fBbash\fP attempts to read
+.FN /etc/hosts
+to obtain the list of possible hostname completions.
+When
+.SM
+.B HOSTFILE
+is unset, the hostname list is cleared.
+.TP
+.B IFS
+The
+.I Internal Field Separator
+that is used
+for word splitting after expansion and to
+split lines into words with the
+.B read
+builtin command. The default value is
+``<space><tab><newline>''.
+.TP
+.B IGNOREEOF
+Controls the
+action of an interactive shell on receipt of an
+.SM
+.B EOF
+character as the sole input. If set, the value is the number of
+consecutive
+.SM
+.B EOF
+characters which must be
+typed as the first characters on an input line before
+.B bash
+exits. If the variable exists but does not have a numeric value, or
+has no value, the default value is 10. If it does not exist,
+.SM
+.B EOF
+signifies the end of input to the shell.
+.TP
+.B INPUTRC
+The filename for the
+.B readline
+startup file, overriding the default of
+.FN ~/.inputrc
+(see
+.SM
+.B READLINE
+below).
+.TP
+.B LANG
+Used to determine the locale category for any category not specifically
+selected with a variable starting with \fBLC_\fP.
+.TP
+.B LC_ALL
+This variable overrides the value of \fBLANG\fP and any other
+\fBLC_\fP variable specifying a locale category.
+.TP
+.B LC_COLLATE
+This variable determines the collation order used when sorting the
+results of pathname expansion, and determines the behavior of range
+expressions, equivalence classes, and collating sequences within
+pathname expansion and pattern matching.
+.TP
+.B LC_CTYPE
+This variable determines the interpretation of characters and the
+behavior of character classes within pathname expansion and pattern
+matching.
+.TP
+.B LC_MESSAGES
+This variable determines the locale used to translate double-quoted
+strings preceded by a \fB$\fP.
+.TP
+.B LC_NUMERIC
+This variable determines the locale category used for number formatting.
+.TP
+.B LINES
+Used by the \fBselect\fP builtin command to determine the column length
+for printing selection lists. Automatically set upon receipt of a SIGWINCH.
+.TP
+.B MAIL
+If this parameter is set to a file name and the
+.SM
+.B MAILPATH
+variable is not set,
+.B bash
+informs the user of the arrival of mail in the specified file.
+.TP
+.B MAILCHECK
+Specifies how
+often (in seconds)
+.B bash
+checks for mail. The default is 60 seconds. When it is time to check
+for mail, the shell does so before displaying the primary prompt.
+If this variable is unset, or set to a value that is not a number
+greater than or equal to zero, the shell disables mail checking.
+.TP
+.B MAILPATH
+A colon-separated list of file names to be checked for mail.
+The message to be printed when mail arrives in a particular file
+may be specified by separating the file name from the message with a `?'.
+When used in the text of the message, \fB$_\fP expands to the name of
+the current mailfile.
+Example:
+.RS
+.PP
+\fBMAILPATH\fP='/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"'
+.PP
+.B Bash
+supplies a default value for this variable, but the location of the user
+mail files that it uses is system dependent (e.g., /var/mail/\fB$USER\fP).
+.RE
+.TP
+.B OPTERR
+If set to the value 1,
+.B bash
+displays error messages generated by the
+.B getopts
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SM
+.B OPTERR
+is initialized to 1 each time the shell is invoked or a shell
+script is executed.
+.TP
+.B PATH
+The search path for commands. It
+is a colon-separated list of directories in which
+the shell looks for commands (see
+.SM
+.B COMMAND EXECUTION
+below).
+A zero-length (null) directory name in the value of \fBPATH\fP indicates the
+current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+The default path is system-dependent,
+and is set by the administrator who installs
+.BR bash .
+A common value is
+.if t \f(CW/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.\fP.
+.if n ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''.
+.TP
+.B POSIXLY_CORRECT
+If this variable is in the environment when \fBbash\fP starts, the shell
+enters \fIposix mode\fP before reading the startup files, as if the
+.B \-\-posix
+invocation option had been supplied. If it is set while the shell is
+running, \fBbash\fP enables \fIposix mode\fP, as if the command
+.if t \f(CWset -o posix\fP
+.if n \fIset -o posix\fP
+had been executed.
+.TP
+.B PROMPT_COMMAND
+If set, the value is executed as a command prior to issuing each primary
+prompt.
+.TP
+.B PS1
+The value of this parameter is expanded (see
+.SM
+.B PROMPTING
+below) and used as the primary prompt string. The default value is
+``\fB\es\-\ev\e$ \fP''.
+.TP
+.B PS2
+The value of this parameter is expanded as with
+.B PS1
+and used as the secondary prompt string. The default is
+``\fB> \fP''.
+.TP
+.B PS3
+The value of this parameter is used as the prompt for the
+.B select
+command (see
+.SM
+.B SHELL GRAMMAR
+above).
+.TP
+.B PS4
+The value of this parameter is expanded as with
+.B PS1
+and the value is printed before each command
+.B bash
+displays during an execution trace. The first character of
+.SM
+.B PS4
+is replicated multiple times, as necessary, to indicate multiple
+levels of indirection. The default is ``\fB+ \fP''.
+.TP
+.B TIMEFORMAT
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the
+.B time
+reserved word should be displayed.
+The \fB%\fP character introduces an escape sequence that is
+expanded to a time value or other information.
+The escape sequences and their meanings are as follows; the
+braces denote optional portions.
+.sp .5
+.RS
+.PD 0
+.TP 10
+.B %%
+A literal \fB%\fP.
+.TP
+.B %[\fIp\fP][l]R
+The elapsed time in seconds.
+.TP
+.B %[\fIp\fP][l]U
+The number of CPU seconds spent in user mode.
+.TP
+.B %[\fIp\fP][l]S
+The number of CPU seconds spent in system mode.
+.TP
+.B %P
+The CPU percentage, computed as (%U + %S) / %R.
+.PD
+.RE
+.IP
+The optional \fIp\fP is a digit specifying the \fIprecision\fP,
+the number of fractional digits after a decimal point.
+A value of 0 causes no decimal point or fraction to be output.
+At most three places after the decimal point may be specified;
+values of \fIp\fP greater than 3 are changed to 3.
+If \fIp\fP is not specified, the value 3 is used.
+.IP
+The optional \fBl\fP specifies a longer format, including
+minutes, of the form \fIMM\fPm\fISS\fP.\fIFF\fPs.
+The value of \fIp\fP determines whether or not the fraction is
+included.
+.IP
+If this variable is not set, \fBbash\fP acts as if it had the
+value \fB$'\enreal\et%3lR\enuser\et%3lU\ensys\t%3lS'\fP.
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+.TP
+.B TMOUT
+If set to a value greater than zero, \fBTMOUT\fP is treated as the
+default timeout for the \fBread\fP builtin.
+The \fBselect\fP command terminates if input does not arrive
+after \fBTMOUT\fP seconds when input is coming from a terminal.
+In an interactive shell, the value is interpreted as the
+number of seconds to wait for input after issuing the primary prompt.
+.B Bash
+terminates after waiting for that number of seconds if input does
+not arrive.
+.TP
+.B auto_resume
+This variable controls how the shell interacts with the user and
+job control. If this variable is set, single word simple
+commands without redirections are treated as candidates for resumption
+of an existing stopped job. There is no ambiguity allowed; if there is
+more than one job beginning with the string typed, the job most recently
+accessed is selected. The
+.I name
+of a stopped job, in this context, is the command line used to
+start it.
+If set to the value
+.IR exact ,
+the string supplied must match the name of a stopped job exactly;
+if set to
+.IR substring ,
+the string supplied needs to match a substring of the name of a
+stopped job. The
+.I substring
+value provides functionality analogous to the
+.B %?
+job identifier (see
+.SM
+.B JOB CONTROL
+below). If set to any other value, the supplied string must
+be a prefix of a stopped job's name; this provides functionality
+analogous to the
+.B %
+job identifier.
+.TP
+.B histchars
+The two or three characters which control history expansion
+and tokenization (see
+.SM
+.B HISTORY EXPANSION
+below). The first character is the \fIhistory expansion\fP character,
+the character which signals the start of a history
+expansion, normally `\fB!\fP'.
+The second character is the \fIquick substitution\fP
+character, which is used as shorthand for re-running the previous
+command entered, substituting one string for another in the command.
+The default is `\fB^\fP'.
+The optional third character is the character
+which indicates that the remainder of the line is a comment when found
+as the first character of a word, normally `\fB#\fP'. The history
+comment character causes history substitution to be skipped for the
+remaining words on the line. It does not necessarily cause the shell
+parser to treat the rest of the line as a comment.
+.PD
+.SS Arrays
+.B Bash
+provides one-dimensional array variables. Any variable may be used as
+an array; the
+.B declare
+builtin will explicitly declare an array. There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously. Arrays are indexed using
+integers and are zero-based.
+.PP
+An array is created automatically if any variable is assigned to using
+the syntax \fIname\fP[\fIsubscript\fP]=\fIvalue\fP. The
+.I subscript
+is treated as an arithmetic expression that must evaluate to a number
+greater than or equal to zero. To explicitly declare an array, use
+.B declare \-a \fIname\fP
+(see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.B declare \-a \fIname\fP[\fIsubscript\fP]
+is also accepted; the \fIsubscript\fP is ignored. Attributes may be
+specified for an array variable using the
+.B declare
+and
+.B readonly
+builtins. Each attribute applies to all members of an array.
+.PP
+Arrays are assigned to using compound assignments of the form
+\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each
+\fIvalue\fP is of the form [\fIsubscript\fP]=\fIstring\fP. Only
+\fIstring\fP is required. If
+the optional brackets and subscript are supplied, that index is assigned to;
+otherwise the index of the element assigned is the last index assigned
+to by the statement plus one. Indexing starts at zero.
+This syntax is also accepted by the
+.B declare
+builtin. Individual array elements may be assigned to using the
+\fIname\fP[\fIsubscript\fP]=\fIvalue\fP syntax introduced above.
+.PP
+Any element of an array may be referenced using
+${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid
+conflicts with pathname expansion. If
+\fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to
+all members of \fIname\fP. These subscripts differ only when the
+word appears within double quotes. If the word is double-quoted,
+${\fIname\fP[*]} expands to a single
+word with the value of each array member separated by the first
+character of the
+.SM
+.B IFS
+special variable, and ${\fIname\fP[@]} expands each element of
+\fIname\fP to a separate word. When there are no array members,
+${\fIname\fP[@]} expands to nothing. This is analogous to the expansion
+of the special parameters \fB*\fP and \fB@\fP (see
+.B Special Parameters
+above). ${#\fIname\fP[\fIsubscript\fP]} expands to the length of
+${\fIname\fP[\fIsubscript\fP]}. If \fIsubscript\fP is \fB*\fP or
+\fB@\fP, the expansion is the number of elements in the array.
+Referencing an array variable without a subscript is equivalent to
+referencing element zero.
+.PP
+The
+.B unset
+builtin is used to destroy arrays. \fBunset\fP \fIname\fP[\fIsubscript\fP]
+destroys the array element at index \fIsubscript\fP.
+\fBunset\fP \fIname\fP, where \fIname\fP is an array, or
+\fBunset\fP \fIname\fP[\fIsubscript\fP], where
+\fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array.
+.PP
+The
+.BR declare ,
+.BR local ,
+and
+.B readonly
+builtins each accept a
+.B \-a
+option to specify an array. The
+.B read
+builtin accepts a
+.B \-a
+option to assign a list of words read from the standard input
+to an array. The
+.B set
+and
+.B declare
+builtins display array values in a way that allows them to be
+reused as assignments.
+.SH EXPANSION
+Expansion is performed on the command line after it has been split into
+words. There are seven kinds of expansion performed:
+.IR "brace expansion" ,
+.IR "tilde expansion" ,
+.IR "parameter and variable expansion" ,
+.IR "command substitution" ,
+.IR "arithmetic expansion" ,
+.IR "word splitting" ,
+and
+.IR "pathname expansion" .
+.PP
+The order of expansions is: brace expansion, tilde expansion,
+parameter, variable and arithmetic expansion and
+command substitution
+(done in a left-to-right fashion), word splitting, and pathname
+expansion.
+.PP
+On systems that can support it, there is an additional expansion
+available: \fIprocess substitution\fP.
+.PP
+Only brace expansion, word splitting, and pathname expansion
+can change the number of words of the expansion; other expansions
+expand a single word to a single word.
+The only exceptions to this are the expansions of
+"\fB$@\fP" and "\fB${\fP\fIname\fP\fB[@]}\fP"
+as explained above (see
+.SM
+.BR PARAMETERS ).
+.SS Brace Expansion
+.PP
+.I "Brace expansion"
+is a mechanism by which arbitrary strings
+may be generated. This mechanism is similar to
+\fIpathname expansion\fP, but the filenames generated
+need not exist. Patterns to be brace expanded take
+the form of an optional
+.IR preamble ,
+followed by either a series of comma-separated strings or
+a sequence expression between a pair of braces, followed by
+an optional
+.IR postscript .
+The preamble is prefixed to each string contained
+within the braces, and the postscript is then appended
+to each resulting string, expanding left to right.
+.PP
+Brace expansions may be nested. The results of each expanded
+string are not sorted; left to right order is preserved.
+For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'.
+.PP
+A sequence expression takes the form \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB}\fP,
+where \fIx\fP and \fIy\fP are either integers or single characters.
+When integers are supplied, the expression expands to each number between
+\fIx\fP and \fIy\fP, inclusive.
+When characters are supplied, the expression expands to each character
+lexicographically between \fIx\fP and \fIy\fP, inclusive. Note that
+both \fIx\fP and \fIy\fP must be of the same type.
+.PP
+Brace expansion is performed before any other expansions,
+and any characters special to other expansions are preserved
+in the result. It is strictly textual.
+.B Bash
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+.PP
+A correctly-formed brace expansion must contain unquoted opening
+and closing braces, and at least one unquoted comma or a valid
+sequence expression.
+Any incorrectly formed brace expansion is left unchanged.
+A \fB{\fP or \fB,\fP may be quoted with a backslash to prevent its
+being considered part of a brace expression.
+To avoid conflicts with parameter expansion, the string \fB${\fP
+is not considered eligible for brace expansion.
+.PP
+This construct is typically used as shorthand when the common
+prefix of the strings to be generated is longer than in the
+above example:
+.RS
+.PP
+mkdir /usr/local/src/bash/{old,new,dist,bugs}
+.RE
+or
+.RS
+chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
+.RE
+.PP
+Brace expansion introduces a slight incompatibility with
+historical versions of
+.BR sh .
+.B sh
+does not treat opening or closing braces specially when they
+appear as part of a word, and preserves them in the output.
+.B Bash
+removes braces from words as a consequence of brace
+expansion. For example, a word entered to
+.B sh
+as \fIfile{1,2}\fP
+appears identically in the output. The same word is
+output as
+.I file1 file2
+after expansion by
+.BR bash .
+If strict compatibility with
+.B sh
+is desired, start
+.B bash
+with the
+.B +B
+option or disable brace expansion with the
+.B +B
+option to the
+.B set
+command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SS Tilde Expansion
+.PP
+If a word begins with an unquoted tilde character (`\fB~\fP'), all of
+the characters preceding the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a \fItilde-prefix\fP.
+If none of the characters in the tilde-prefix are quoted, the
+characters in the tilde-prefix following the tilde are treated as a
+possible \fIlogin name\fP.
+If this login name is the null string, the tilde is replaced with the
+value of the shell parameter
+.SM
+.BR HOME .
+If
+.SM
+.B HOME
+is unset, the home directory of the user executing the shell is
+substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+.PP
+If the tilde-prefix is a `~+', the value of the shell variable
+.SM
+.B PWD
+replaces the tilde-prefix.
+If the tilde-prefix is a `~\-', the value of the shell variable
+.SM
+.BR OLDPWD ,
+if it is set, is substituted.
+If the characters following the tilde in the tilde-prefix consist
+of a number \fIN\fP, optionally prefixed
+by a `+' or a `\-', the tilde-prefix is replaced with the corresponding
+element from the directory stack, as it would be displayed by the
+.B dirs
+builtin invoked with the tilde-prefix as an argument.
+If the characters following the tilde in the tilde-prefix consist of a
+number without a leading `+' or `\-', `+' is assumed.
+.PP
+If the login name is invalid, or the tilde expansion fails, the word
+is unchanged.
+.PP
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a
+.B :
+or
+.BR = .
+In these cases, tilde expansion is also performed.
+Consequently, one may use file names with tildes in assignments to
+.SM
+.BR PATH ,
+.SM
+.BR MAILPATH ,
+and
+.SM
+.BR CDPATH ,
+and the shell assigns the expanded value.
+.SS Parameter Expansion
+.PP
+The `\fB$\fP' character introduces parameter expansion,
+command substitution, or arithmetic expansion. The parameter name
+or symbol to be expanded may be enclosed in braces, which
+are optional but serve to protect the variable to be expanded from
+characters immediately following it which could be
+interpreted as part of the name.
+.PP
+When braces are used, the matching ending brace is the first `\fB}\fP'
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or paramter
+expansion.
+.PP
+.PD 0
+.TP
+${\fIparameter\fP}
+The value of \fIparameter\fP is substituted. The braces are required
+when
+.I parameter
+is a positional parameter with more than one digit,
+or when
+.I parameter
+is followed by a character which is not to be
+interpreted as part of its name.
+.PD
+.PP
+If the first character of \fIparameter\fP is an exclamation point,
+a level of variable indirection is introduced.
+\fBBash\fP uses the value of the variable formed from the rest of
+\fIparameter\fP as the name of the variable; this variable is then
+expanded and that value is used in the rest of the substitution, rather
+than the value of \fIparameter\fP itself.
+This is known as \fIindirect expansion\fP.
+The exceptions to this are the expansions of ${!\fIprefix\fP*} and
+${\fB!\fP\fIname\fP[\fI@\fP]} described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+.PP
+In each of the cases below, \fIword\fP is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+When not performing substring expansion, \fBbash\fP tests for a parameter
+that is unset or null; omitting the colon results in a test only for a
+parameter that is unset.
+.PP
+.PD 0
+.TP
+${\fIparameter\fP\fB:\-\fP\fIword\fP}
+\fBUse Default Values\fP. If
+.I parameter
+is unset or null, the expansion of
+.I word
+is substituted. Otherwise, the value of
+.I parameter
+is substituted.
+.TP
+${\fIparameter\fP\fB:=\fP\fIword\fP}
+\fBAssign Default Values\fP.
+If
+.I parameter
+is unset or null, the expansion of
+.I word
+is assigned to
+.IR parameter .
+The value of
+.I parameter
+is then substituted. Positional parameters and special parameters may
+not be assigned to in this way.
+.TP
+${\fIparameter\fP\fB:?\fP\fIword\fP}
+\fBDisplay Error if Null or Unset\fP.
+If
+.I parameter
+is null or unset, the expansion of \fIword\fP (or a message to that effect
+if
+.I word
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits. Otherwise, the value of \fIparameter\fP is
+substituted.
+.TP
+${\fIparameter\fP\fB:+\fP\fIword\fP}
+\fBUse Alternate Value\fP.
+If
+.I parameter
+is null or unset, nothing is substituted, otherwise the expansion of
+.I word
+is substituted.
+.TP
+${\fIparameter\fP\fB:\fP\fIoffset\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
+.PD
+\fBSubstring Expansion.\fP
+Expands to up to \fIlength\fP characters of \fIparameter\fP
+starting at the character specified by \fIoffset\fP.
+If \fIlength\fP is omitted, expands to the substring of
+\fIparameter\fP starting at the character specified by \fIoffset\fP.
+\fIlength\fP and \fIoffset\fP are arithmetic expressions (see
+.SM
+.B
+ARITHMETIC EVALUATION
+below).
+\fIlength\fP must evaluate to a number greater than or equal to zero.
+If \fIoffset\fP evaluates to a number less than zero, the value
+is used as an offset from the end of the value of \fIparameter\fP.
+If \fIparameter\fP is \fB@\fP, the result is \fIlength\fP positional
+parameters beginning at \fIoffset\fP.
+If \fIparameter\fP is an array name indexed by @ or *,
+the result is the \fIlength\fP
+members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}.
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1.
+.TP
+${\fB!\fP\fIprefix\fP\fB*\fP}
+.PD 0
+.TP
+${\fB!\fP\fIprefix\fP\fB@\fP}
+.PD
+Expands to the names of variables whose names begin with \fIprefix\fP,
+separated by the first character of the
+.SM
+.B IFS
+special variable.
+.TP
+${\fB!\fP\fIname\fP[\fI@\fP]}
+.PD 0
+.TP
+${\fB!\fP\fIname\fP[\fI*\fP]}
+.PD
+If \fIname\fP is an array variable, expands to the list of array indices
+(keys) assigned in \fIname\fP.
+If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null
+otherwise.
+When \fI@\fP is used and the expansion appears within double quotes, each
+key expands to a separate word.
+.TP
+${\fB#\fP\fIparameter\fP}
+The length in characters of the value of \fIparameter\fP is substituted.
+If
+.I parameter
+is
+.B *
+or
+.BR @ ,
+the value substituted is the number of positional parameters.
+If
+.I parameter
+is an array name subscripted by
+.B *
+or
+.BR @ ,
+the value substituted is the number of elements in the array.
+.TP
+${\fIparameter\fP\fB#\fP\fIword\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB##\fP\fIword\fP}
+.PD
+The
+.I word
+is expanded to produce a pattern just as in pathname
+expansion. If the pattern matches the beginning of
+the value of
+.IR parameter ,
+then the result of the expansion is the expanded value of
+.I parameter
+with the shortest matching pattern (the ``\fB#\fP'' case) or the
+longest matching pattern (the ``\fB##\fP'' case) deleted.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB%\fP\fIword\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB%%\fP\fIword\fP}
+.PD
+The \fIword\fP is expanded to produce a pattern just as in
+pathname expansion.
+If the pattern matches a trailing portion of the expanded value of
+.IR parameter ,
+then the result of the expansion is the expanded value of
+.I parameter
+with the shortest matching pattern (the ``\fB%\fP'' case) or the
+longest matching pattern (the ``\fB%%\fP'' case) deleted.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.TP
+${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+.PD 0
+.TP
+${\fIparameter\fP\fB//\fP\fIpattern\fP\fB/\fP\fIstring\fP}
+.PD
+The \fIpattern\fP is expanded to produce a pattern just as in
+pathname expansion.
+\fIParameter\fP is expanded and the longest match of \fIpattern\fP
+against its value is replaced with \fIstring\fP.
+In the first form, only the first match is replaced.
+The second form causes all matches of \fIpattern\fP to be
+replaced with \fIstring\fP.
+If \fIpattern\fP begins with \fB#\fP, it must match at the beginning
+of the expanded value of \fIparameter\fP.
+If \fIpattern\fP begins with \fB%\fP, it must match at the end
+of the expanded value of \fIparameter\fP.
+If \fIstring\fP is null, matches of \fIpattern\fP are deleted
+and the \fB/\fP following \fIpattern\fP may be omitted.
+If
+.I parameter
+is
+.B @
+or
+.BR * ,
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If
+.I parameter
+is an array variable subscripted with
+.B @
+or
+.BR * ,
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+.SS Command Substitution
+.PP
+\fICommand substitution\fP allows the output of a command to replace
+the command name. There are two forms:
+.PP
+.RS
+.PP
+\fB$(\fP\fIcommand\fP\|\fB)\fP
+.RE
+or
+.RS
+\fB`\fP\fIcommand\fP\fB`\fP
+.RE
+.PP
+.B Bash
+performs the expansion by executing \fIcommand\fP and
+replacing the command substitution with the standard output of the
+command, with any trailing newlines deleted.
+Embedded newlines are not deleted, but they may be removed during
+word splitting.
+The command substitution \fB$(cat \fIfile\fP)\fR can be replaced by
+the equivalent but faster \fB$(< \fIfile\fP)\fR.
+.PP
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+.BR $ ,
+.BR ` ,
+or
+.BR \e .
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the $(\^\fIcommand\fP\|) form, all characters between the
+parentheses make up the command; none are treated specially.
+.PP
+Command substitutions may be nested. To nest when using the backquoted form,
+escape the inner backquotes with backslashes.
+.PP
+If the substitution appears within double quotes, word splitting and
+pathname expansion are not performed on the results.
+.SS Arithmetic Expansion
+.PP
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+.RS
+.PP
+\fB$((\fP\fIexpression\fP\fB))\fP
+.RE
+.PP
+The
+.I expression
+is treated as if it were within double quotes, but a double quote
+inside the parentheses is not treated specially.
+All tokens in the expression undergo parameter expansion, string
+expansion, command substitution, and quote removal.
+Arithmetic expansions may be nested.
+.PP
+The evaluation is performed according to the rules listed below under
+.SM
+.BR "ARITHMETIC EVALUATION" .
+If
+.I expression
+is invalid,
+.B bash
+prints a message indicating failure and no substitution occurs.
+.SS Process Substitution
+.PP
+\fIProcess substitution\fP is supported on systems that support named
+pipes (\fIFIFOs\fP) or the \fB/dev/fd\fP method of naming open files.
+It takes the form of
+\fB<(\fP\fIlist\^\fP\fB)\fP
+or
+\fB>(\fP\fIlist\^\fP\fB)\fP.
+The process \fIlist\fP is run with its input or output connected to a
+\fIFIFO\fP or some file in \fB/dev/fd\fP. The name of this file is
+passed as an argument to the current command as the result of the
+expansion. If the \fB>(\fP\fIlist\^\fP\fB)\fP form is used, writing to
+the file will provide input for \fIlist\fP. If the
+\fB<(\fP\fIlist\^\fP\fB)\fP form is used, the file passed as an
+argument should be read to obtain the output of \fIlist\fP.
+.PP
+When available, process substitution is performed
+simultaneously with parameter and variable expansion,
+command substitution,
+and arithmetic expansion.
+.SS Word Splitting
+.PP
+The shell scans the results of
+parameter expansion,
+command substitution,
+and
+arithmetic expansion
+that did not occur within double quotes for
+.IR "word splitting" .
+.PP
+The shell treats each character of
+.SM
+.B IFS
+as a delimiter, and splits the results of the other
+expansions into words on these characters. If
+.SM
+.B IFS
+is unset, or its
+value is exactly
+.BR <space><tab><newline> ,
+the default, then
+any sequence of
+.SM
+.B IFS
+characters serves to delimit words. If
+.SM
+.B IFS
+has a value other than the default, then sequences of
+the whitespace characters
+.B space
+and
+.B tab
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of
+.SM
+.BR IFS
+(an
+.SM
+.B IFS
+whitespace character).
+Any character in
+.SM
+.B IFS
+that is not
+.SM
+.B IFS
+whitespace, along with any adjacent
+.SM
+.B IFS
+whitespace characters, delimits a field.
+A sequence of
+.SM
+.B IFS
+whitespace characters is also treated as a delimiter.
+If the value of
+.SM
+.B IFS
+is null, no word splitting occurs.
+.PP
+Explicit null arguments (\^\f3"\^"\fP or \^\f3'\^'\fP\^) are retained.
+Unquoted implicit null arguments, resulting from the expansion of
+parameters that have no values, are removed.
+If a parameter with no value is expanded within double quotes, a
+null argument results and is retained.
+.PP
+Note that if no expansion occurs, no splitting
+is performed.
+.SS Pathname Expansion
+.PP
+After word splitting,
+unless the
+.B \-f
+option has been set,
+.B bash
+scans each word for the characters
+.BR * ,
+.BR ? ,
+and
+.BR [ .
+If one of these characters appears, then the word is
+regarded as a
+.IR pattern ,
+and replaced with an alphabetically sorted list of
+file names matching the pattern.
+If no matching file names are found,
+and the shell option
+.B nullglob
+is disabled, the word is left unchanged.
+If the
+.B nullglob
+option is set, and no matches are found,
+the word is removed.
+If the shell option
+.B nocaseglob
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a pattern is used for pathname expansion,
+the character
+.B ``.''
+at the start of a name or immediately following a slash
+must be matched explicitly, unless the shell option
+.B dotglob
+is set.
+When matching a pathname, the slash character must always be
+matched explicitly.
+In other cases, the
+.B ``.''
+character is not treated specially.
+See the description of
+.B shopt
+below under
+.SM
+.B SHELL BUILTIN COMMANDS
+for a description of the
+.BR nocaseglob ,
+.BR nullglob ,
+and
+.B dotglob
+shell options.
+.PP
+The
+.SM
+.B GLOBIGNORE
+shell variable may be used to restrict the set of file names matching a
+.IR pattern .
+If
+.SM
+.B GLOBIGNORE
+is set, each matching file name that also matches one of the patterns in
+.SM
+.B GLOBIGNORE
+is removed from the list of matches.
+The file names
+.B ``.''
+and
+.B ``..''
+are always ignored when
+.SM
+.B GLOBIGNORE
+is set and not null. However, setting
+.SM
+.B GLOBIGNORE
+to a non-null value has the effect of enabling the
+.B dotglob
+shell option, so all other file names beginning with a
+.B ``.''
+will match.
+To get the old behavior of ignoring file names beginning with a
+.BR ``.'' ,
+make
+.B ``.*''
+one of the patterns in
+.SM
+.BR GLOBIGNORE .
+The
+.B dotglob
+option is disabled when
+.SM
+.B GLOBIGNORE
+is unset.
+.PP
+\fBPattern Matching\fP
+.PP
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself. The NUL character may not
+occur in a pattern. A backslash escapes the following character; the
+escaping backslash is discarded when matching.
+The special pattern characters must be quoted if
+they are to be matched literally.
+.PP
+The special pattern characters have the following meanings:
+.PP
+.PD 0
+.TP
+.B *
+Matches any string, including the null string.
+.TP
+.B ?
+Matches any single character.
+.TP
+.B [...]
+Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a
+\fIrange expression\fP;
+any character that sorts between those two characters, inclusive,
+using the current locale's collating sequence and character set,
+is matched. If the first character following the
+.B [
+is a
+.B !
+or a
+.B ^
+then any character not enclosed is matched.
+The sorting order of characters in range expressions is determined by
+the current locale and the value of the \fBLC_COLLATE\fP shell variable,
+if set.
+A
+.B \-
+may be matched by including it as the first or last character
+in the set.
+A
+.B ]
+may be matched by including it as the first character
+in the set.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+\fIcharacter classes\fP can be specified using the syntax
+\fB[:\fP\fIclass\fP\fB:]\fP, where \fIclass\fP is one of the
+following classes defined in the POSIX.2 standard:
+.PP
+.RS
+.B
+.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
+.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
+.br
+A character class matches any character belonging to that class.
+The \fBword\fP character class matches letters, digits, and the character _.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+an \fIequivalence class\fP can be specified using the syntax
+\fB[=\fP\fIc\fP\fB=]\fP, which matches all characters with the
+same collation weight (as defined by the current locale) as
+the character \fIc\fP.
+.br
+.if t .sp 0.5
+.if n .sp 1
+Within
+.B [
+and
+.BR ] ,
+the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol
+\fIsymbol\fP.
+.RE
+.PD
+.PP
+If the \fBextglob\fP shell option is enabled using the \fBshopt\fP
+builtin, several extended pattern matching operators are recognized.
+In the following description, a \fIpattern-list\fP is a list of one
+or more patterns separated by a \fB|\fP.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+.sp 1
+.PD 0
+.RS
+.TP
+\fB?(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches zero or one occurrence of the given patterns
+.TP
+\fB*(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches zero or more occurrences of the given patterns
+.TP
+\fB+(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches one or more occurrences of the given patterns
+.TP
+\fB@(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches exactly one of the given patterns
+.TP
+\fB!(\fP\^\fIpattern-list\^\fP\fB)\fP
+Matches anything except one of the given patterns
+.RE
+.PD
+.SS Quote Removal
+.PP
+After the preceding expansions, all unquoted occurrences of the
+characters
+.BR \e ,
+.BR ' ,
+and \^\f3"\fP\^ that did not result from one of the above
+expansions are removed.
+.SH REDIRECTION
+Before a command is executed, its input and output
+may be
+.I redirected
+using a special notation interpreted by the shell.
+Redirection may also be used to open and close files for the
+current shell execution environment. The following redirection
+operators may precede or appear anywhere within a
+.I simple command
+or may follow a
+.IR command .
+Redirections are processed in the order they appear, from
+left to right.
+.PP
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+.BR < ,
+the redirection refers to the standard input (file descriptor
+0). If the first character of the redirection operator is
+.BR > ,
+the redirection refers to the standard output (file descriptor
+1).
+.PP
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, pathname expansion, and word splitting.
+If it expands to more than one word,
+.B bash
+reports an error.
+.PP
+Note that the order of redirections is significant. For example,
+the command
+.RS
+.PP
+ls \fB>\fP dirlist 2\fB>&\fP1
+.RE
+.PP
+directs both standard output and standard error to the file
+.IR dirlist ,
+while the command
+.RS
+.PP
+ls 2\fB>&\fP1 \fB>\fP dirlist
+.RE
+.PP
+directs only the standard output to file
+.IR dirlist ,
+because the standard error was duplicated as standard output
+before the standard output was redirected to
+.IR dirlist .
+.PP
+\fBBash\fP handles several filenames specially when they are used in
+redirections, as described in the following table:
+.RS
+.PP
+.PD 0
+.TP
+.B /dev/fd/\fIfd\fP
+If \fIfd\fP is a valid integer, file descriptor \fIfd\fP is duplicated.
+.TP
+.B /dev/stdin
+File descriptor 0 is duplicated.
+.TP
+.B /dev/stdout
+File descriptor 1 is duplicated.
+.TP
+.B /dev/stderr
+File descriptor 2 is duplicated.
+.TP
+.B /dev/tcp/\fIhost\fP/\fIport\fP
+If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
+is an integer port number or service name, \fBbash\fP attempts to open
+a TCP connection to the corresponding socket.
+.TP
+.B /dev/udp/\fIhost\fP/\fIport\fP
+If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
+is an integer port number or service name, \fBbash\fP attempts to open
+a UDP connection to the corresponding socket.
+.PD
+.RE
+.PP
+A failure to open or create a file causes the redirection to fail.
+.SS Redirecting Input
+.PP
+Redirection of input causes the file whose name results from
+the expansion of
+.I word
+to be opened for reading on file descriptor
+.IR n ,
+or the standard input (file descriptor 0) if
+.I n
+is not specified.
+.PP
+The general format for redirecting input is:
+.RS
+.PP
+[\fIn\fP]\fB<\fP\fIword\fP
+.RE
+.SS Redirecting Output
+.PP
+Redirection of output causes the file whose name results from
+the expansion of
+.I word
+to be opened for writing on file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if
+.I n
+is not specified. If the file does not exist it is created;
+if it does exist it is truncated to zero size.
+.PP
+The general format for redirecting output is:
+.RS
+.PP
+[\fIn\fP]\fB>\fP\fIword\fP
+.RE
+.PP
+If the redirection operator is
+.BR > ,
+and the
+.B noclobber
+option to the
+.B set
+builtin has been enabled, the redirection will fail if the file
+whose name results from the expansion of \fIword\fP exists and is
+a regular file.
+If the redirection operator is
+.BR >| ,
+or the redirection operator is
+.B >
+and the
+.B noclobber
+option to the
+.B set
+builtin command is not enabled, the redirection is attempted even
+if the file named by \fIword\fP exists.
+.SS Appending Redirected Output
+.PP
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of
+.I word
+to be opened for appending on file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if
+.I n
+is not specified. If the file does not exist it is created.
+.PP
+The general format for appending output is:
+.RS
+.PP
+[\fIn\fP]\fB>>\fP\fIword\fP
+.RE
+.PP
+.SS Redirecting Standard Output and Standard Error
+.PP
+.B Bash
+allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be redirected to the file whose name is the
+expansion of
+.I word
+with this construct.
+.PP
+There are two formats for redirecting standard output and
+standard error:
+.RS
+.PP
+\fB&>\fP\fIword\fP
+.RE
+and
+.RS
+\fB>&\fP\fIword\fP
+.RE
+.PP
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+.RS
+.PP
+\fB>\fP\fIword\fP 2\fB>&\fP1
+.RE
+.SS Here Documents
+.PP
+This type of redirection instructs the shell to read input from the
+current source until a line containing only
+.I word
+(with no trailing blanks)
+is seen. All of
+the lines read up to that point are then used as the standard
+input for a command.
+.PP
+The format of here-documents is:
+.RS
+.PP
+.nf
+\fB<<\fP[\fB\-\fP]\fIword\fP
+ \fIhere-document\fP
+\fIdelimiter\fP
+.fi
+.RE
+.PP
+No parameter expansion, command substitution, arithmetic expansion,
+or pathname expansion is performed on
+.IR word .
+If any characters in
+.I word
+are quoted, the
+.I delimiter
+is the result of quote removal on
+.IR word ,
+and the lines in the here-document are not expanded.
+If \fIword\fP is unquoted,
+all lines of the here-document are subjected to parameter expansion,
+command substitution, and arithmetic expansion. In the latter
+case, the character sequence
+.B \e<newline>
+is ignored, and
+.B \e
+must be used to quote the characters
+.BR \e ,
+.BR $ ,
+and
+.BR ` .
+.PP
+If the redirection operator is
+.BR <<\- ,
+then all leading tab characters are stripped from input lines and the
+line containing
+.IR delimiter .
+This allows
+here-documents within shell scripts to be indented in a
+natural fashion.
+.SS "Here Strings"
+A variant of here documents, the format is:
+.RS
+.PP
+.nf
+\fB<<<\fP\fIword\fP
+.fi
+.RE
+.PP
+The \fIword\fP is expanded and supplied to the command on its standard
+input.
+.SS "Duplicating File Descriptors"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<&\fP\fIword\fP
+.RE
+.PP
+is used to duplicate input file descriptors.
+If
+.I word
+expands to one or more digits, the file descriptor denoted by
+.I n
+is made to be a copy of that file descriptor.
+If the digits in
+.I word
+do not specify a file descriptor open for input, a redirection error occurs.
+If
+.I word
+evaluates to
+.BR \- ,
+file descriptor
+.I n
+is closed. If
+.I n
+is not specified, the standard input (file descriptor 0) is used.
+.PP
+The operator
+.RS
+.PP
+[\fIn\fP]\fB>&\fP\fIword\fP
+.RE
+.PP
+is used similarly to duplicate output file descriptors. If
+.I n
+is not specified, the standard output (file descriptor 1) is used.
+If the digits in
+.I word
+do not specify a file descriptor open for output, a redirection error occurs.
+As a special case, if \fIn\fP is omitted, and \fIword\fP does not
+expand to one or more digits, the standard output and standard
+error are redirected as described previously.
+.SS "Moving File Descriptors"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP
+.RE
+.PP
+moves the file descriptor \fIdigit\fP to file descriptor
+.IR n ,
+or the standard input (file descriptor 0) if \fIn\fP is not specified.
+\fIdigit\fP is closed after being duplicated to \fIn\fP.
+.PP
+Similarly, the redirection operator
+.RS
+.PP
+[\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP
+.RE
+.PP
+moves the file descriptor \fIdigit\fP to file descriptor
+.IR n ,
+or the standard output (file descriptor 1) if \fIn\fP is not specified.
+.SS "Opening File Descriptors for Reading and Writing"
+.PP
+The redirection operator
+.RS
+.PP
+[\fIn\fP]\fB<>\fP\fIword\fP
+.RE
+.PP
+causes the file whose name is the expansion of
+.I word
+to be opened for both reading and writing on file descriptor
+.IR n ,
+or on file descriptor 0 if
+.I n
+is not specified. If the file does not exist, it is created.
+.SH ALIASES
+\fIAliases\fP allow a string to be substituted for a word when it is used
+as the first word of a simple command.
+The shell maintains a list of aliases that may be set and unset with the
+.B alias
+and
+.B unalias
+builtin commands (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+The first word of each 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 alias name and the replacement text may contain any valid
+shell input, including the
+.I metacharacters
+listed above, with the exception that the alias name may not
+contain \fI=\fP. The first word of the replacement text is tested
+for aliases, but a word that is identical to an alias being expanded
+is not expanded a second time. This means that one may alias
+.B ls
+to
+.BR "ls \-F" ,
+for instance, and
+.B bash
+does not try to recursively expand the replacement text.
+If the last character of the alias value is a
+.IR blank ,
+then the next command
+word following the alias is also checked for alias expansion.
+.PP
+Aliases are created and listed with the
+.B alias
+command, and removed with the
+.B unalias
+command.
+.PP
+There is no mechanism for using arguments in the replacement text.
+If arguments are needed, a shell function should be used (see
+.SM
+.B FUNCTIONS
+below).
+.PP
+Aliases are not expanded when the shell is not interactive, unless
+the
+.B expand_aliases
+shell option is set using
+.B shopt
+(see the description of
+.B shopt
+under
+.SM
+\fBSHELL BUILTIN COMMANDS\fP
+below).
+.PP
+The rules concerning the definition and use of aliases are
+somewhat confusing.
+.B Bash
+always reads at least one complete line
+of input before executing any
+of the commands on that line. Aliases are expanded when a
+command is read, not when it is executed. Therefore, an
+alias definition appearing on the same line as another
+command does not take effect until the next line of input is read.
+The commands following the alias definition
+on that line are not affected by the new alias.
+This behavior is also an issue when functions are executed.
+Aliases are expanded when a function definition is read,
+not when the function is executed, because a function definition
+is itself a compound command. As a consequence, aliases
+defined in a function are not available until after that
+function is executed. To be safe, always put
+alias definitions on a separate line, and do not use
+.B alias
+in compound commands.
+.PP
+For almost every purpose, aliases are superseded by
+shell functions.
+.SH FUNCTIONS
+A shell function, defined as described above under
+.SM
+.BR "SHELL GRAMMAR" ,
+stores a series of commands for later execution.
+When the name of a shell function is used as a simple command name,
+the list of commands associated with that function name is executed.
+Functions are executed in the context of the
+current shell; no new process is created to interpret
+them (contrast this with the execution of a shell script).
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution.
+The special parameter
+.B #
+is updated to reflect the change. Positional parameter 0
+is unchanged.
+The first element of the
+.SM
+.B FUNCNAME
+variable is set to the name of the function while the function
+is executing.
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with the exception that the
+.SM
+.B DEBUG
+trap (see the description of the
+.B trap
+builtin under
+.SM
+.B SHELL BUILTIN COMMANDS
+below) is not inherited unless the function has been given the
+\fBtrace\fP attribute (see the description of the
+.SM
+.B declare
+builtin below) or the
+\fB\-o functrace\fP shell option has been enabled with
+the \fBset\fP builtin
+(in which case all functions inherit the \fBDEBUG\fP trap).
+.PP
+Variables local to the function may be declared with the
+.B local
+builtin command. Ordinarily, variables and their values
+are shared between the function and its caller.
+.PP
+If the builtin command
+.B return
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the \fBRETURN\fP trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter
+.B #
+are restored to the values they had prior to the function's
+execution.
+.PP
+Function names and definitions may be listed with the
+.B \-f
+option to the
+.B declare
+or
+.B typeset
+builtin commands. The
+.B \-F
+option to
+.B declare
+or
+.B typeset
+will list the function names only
+(and optionally the source file and line number, if the \fBextdebug\fP
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+.B \-f
+option to the
+.B export
+builtin.
+Note that shell functions and variables with the same name may result
+in multiple identically-named entries in the environment passed to the
+shell's children.
+Care should be taken in cases where this may cause a problem.
+.PP
+Functions may be recursive. No limit is imposed on the number
+of recursive calls.
+.SH "ARITHMETIC EVALUATION"
+The shell allows arithmetic expressions to be evaluated, under
+certain circumstances (see the \fBlet\fP and \fBdeclare\fP builtin
+commands and \fBArithmetic Expansion\fP).
+Evaluation is done in fixed-width integers with no check for overflow,
+though division by 0 is trapped and flagged as an error.
+The operators and their precedence, associativity, and values
+are the same as in the C language.
+The following list of operators is grouped into levels of
+equal-precedence operators.
+The levels are listed in order of decreasing precedence.
+.PP
+.PD 0
+.TP
+.B \fIid\fP++ \fIid\fP\-\-
+variable post-increment and post-decrement
+.TP
+.B ++\fIid\fP \-\-\fIid\fP
+variable pre-increment and pre-decrement
+.TP
+.B \- +
+unary minus and plus
+.TP
+.B ! ~
+logical and bitwise negation
+.TP
+.B **
+exponentiation
+.TP
+.B * / %
+multiplication, division, remainder
+.TP
+.B + \-
+addition, subtraction
+.TP
+.B << >>
+left and right bitwise shifts
+.TP
+.B <= >= < >
+comparison
+.TP
+.B == !=
+equality and inequality
+.TP
+.B &
+bitwise AND
+.TP
+.B ^
+bitwise exclusive OR
+.TP
+.B |
+bitwise OR
+.TP
+.B &&
+logical AND
+.TP
+.B ||
+logical OR
+.TP
+.B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
+conditional operator
+.TP
+.B = *= /= %= += \-= <<= >>= &= ^= |=
+assignment
+.TP
+.B \fIexpr1\fP , \fIexpr2\fP
+comma
+.PD
+.PP
+Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated.
+Within an expression, shell variables may also be referenced by name
+without using the parameter expansion syntax.
+A shell variable that is null or unset evaluates to 0 when referenced
+by name without using the parameter expansion syntax.
+The value of a variable is evaluated as an arithmetic expression
+when it is referenced, or when a variable which has been given the
+\fIinteger\fP attribute using \fBdeclare -i\fP is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its integer attribute
+turned on to be used in an expression.
+.PP
+Constants with a leading 0 are interpreted as octal numbers.
+A leading 0x or 0X denotes hexadecimal.
+Otherwise, numbers take the form [\fIbase#\fP]n, where \fIbase\fP
+is a decimal number between 2 and 64 representing the arithmetic
+base, and \fIn\fP is a number in that base.
+If \fIbase#\fP is omitted, then base 10 is used.
+The digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, @, and _, in that order.
+If \fIbase\fP is less than or equal to 36, lowercase and uppercase
+letters may be used interchangably to represent numbers between 10
+and 35.
+.PP
+Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+.SH "CONDITIONAL EXPRESSIONS"
+Conditional expressions are used by the \fB[[\fP compound command and
+the \fBtest\fP and \fB[\fP builtin commands to test file attributes
+and perform string and arithmetic comparisons.
+Expressions are formed from the following unary or binary primaries.
+If any \fIfile\fP argument to one of the primaries is of the form
+\fI/dev/fd/n\fP, then file descriptor \fIn\fP is checked.
+If the \fIfile\fP argument to one of the primaries is one of
+\fI/dev/stdin\fP, \fI/dev/stdout\fP, or \fI/dev/stderr\fP, file
+descriptor 0, 1, or 2, respectively, is checked.
+.sp 1
+.PD 0
+.TP
+.B \-a \fIfile\fP
+True if \fIfile\fP exists.
+.TP
+.B \-b \fIfile\fP
+True if \fIfile\fP exists and is a block special file.
+.TP
+.B \-c \fIfile\fP
+True if \fIfile\fP exists and is a character special file.
+.TP
+.B \-d \fIfile\fP
+True if \fIfile\fP exists and is a directory.
+.TP
+.B \-e \fIfile\fP
+True if \fIfile\fP exists.
+.TP
+.B \-f \fIfile\fP
+True if \fIfile\fP exists and is a regular file.
+.TP
+.B \-g \fIfile\fP
+True if \fIfile\fP exists and is set-group-id.
+.TP
+.B \-h \fIfile\fP
+True if \fIfile\fP exists and is a symbolic link.
+.TP
+.B \-k \fIfile\fP
+True if \fIfile\fP exists and its ``sticky'' bit is set.
+.TP
+.B \-p \fIfile\fP
+True if \fIfile\fP exists and is a named pipe (FIFO).
+.TP
+.B \-r \fIfile\fP
+True if \fIfile\fP exists and is readable.
+.TP
+.B \-s \fIfile\fP
+True if \fIfile\fP exists and has a size greater than zero.
+.TP
+.B \-t \fIfd\fP
+True if file descriptor
+.I fd
+is open and refers to a terminal.
+.TP
+.B \-u \fIfile\fP
+True if \fIfile\fP exists and its set-user-id bit is set.
+.TP
+.B \-w \fIfile\fP
+True if \fIfile\fP exists and is writable.
+.TP
+.B \-x \fIfile\fP
+True if \fIfile\fP exists and is executable.
+.TP
+.B \-O \fIfile\fP
+True if \fIfile\fP exists and is owned by the effective user id.
+.TP
+.B \-G \fIfile\fP
+True if \fIfile\fP exists and is owned by the effective group id.
+.TP
+.B \-L \fIfile\fP
+True if \fIfile\fP exists and is a symbolic link.
+.TP
+.B \-S \fIfile\fP
+True if \fIfile\fP exists and is a socket.
+.TP
+.B \-N \fIfile\fP
+True if \fIfile\fP exists and has been modified since it was last read.
+.TP
+\fIfile1\fP \-\fBnt\fP \fIfile2\fP
+True if \fIfile1\fP is newer (according to modification date) than \fIfile2\fP,
+or if \fIfile1\fP exists and \fPfile2\fP does not.
+.TP
+\fIfile1\fP \-\fBot\fP \fIfile2\fP
+True if \fIfile1\fP is older than \fIfile2\fP, or if \fIfile2\fP exists
+and \fIfile1\fP does not.
+.TP
+\fIfile1\fP \fB\-ef\fP \fIfile2\fP
+True if \fIfile1\fP and \fIfile2\fP refer to the same device and
+inode numbers.
+.TP
+.B \-o \fIoptname\fP
+True if shell option
+.I optname
+is enabled.
+See the list of options under the description of the
+.B \-o
+option to the
+.B set
+builtin below.
+.TP
+.B \-z \fIstring\fP
+True if the length of \fIstring\fP is zero.
+.TP
+.B \-n \fIstring\fP
+.TP
+\fIstring\fP
+True if the length of
+.I string
+is non-zero.
+.TP
+\fIstring1\fP \fB==\fP \fIstring2\fP
+True if the strings are equal. \fB=\fP may be used in place of
+\fB==\fP for strict POSIX compliance.
+.TP
+\fIstring1\fP \fB!=\fP \fIstring2\fP
+True if the strings are not equal.
+.TP
+\fIstring1\fP \fB<\fP \fIstring2\fP
+True if \fIstring1\fP sorts before \fIstring2\fP lexicographically
+in the current locale.
+.TP
+\fIstring1\fP \fB>\fP \fIstring2\fP
+True if \fIstring1\fP sorts after \fIstring2\fP lexicographically
+in the current locale.
+.TP
+.I \fIarg1\fP \fBOP\fP \fIarg2\fP
+.SM
+.B OP
+is one of
+.BR \-eq ,
+.BR \-ne ,
+.BR \-lt ,
+.BR \-le ,
+.BR \-gt ,
+or
+.BR \-ge .
+These arithmetic binary operators return true if \fIarg1\fP
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to \fIarg2\fP, respectively.
+.I Arg1
+and
+.I arg2
+may be positive or negative integers.
+.PD
+.SH "SIMPLE COMMAND EXPANSION"
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+.IP 1.
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+.IP 2.
+The words that are not variable assignments or redirections are
+expanded. If any words remain after expansion, the first word
+is taken to be the name of the command and the remaining words are
+the arguments.
+.IP 3.
+Redirections are performed as described above under
+.SM
+.BR REDIRECTION .
+.IP 4.
+The text after the \fB=\fP in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+.PP
+If no command name results, the variable assignments affect the current
+shell environment. Otherwise, the variables are added to the environment
+of the executed command and do not affect the current shell environment.
+If any of the assignments attempts to assign a value to a readonly variable,
+an error occurs, and the command exits with a non-zero status.
+.PP
+If no command name results, redirections are performed, but do not
+affect the current shell environment. A redirection error causes the
+command to exit with a non-zero status.
+.PP
+If there is a command name left after expansion, execution proceeds as
+described below. Otherwise, the command exits. If one of the expansions
+contained a command substitution, the exit status of the command is
+the exit status of the last command substitution performed. If there
+were no command substitutions, the command exits with a status of zero.
+.SH "COMMAND EXECUTION"
+After a command has been split into words, if it results in a
+simple command and an optional list of arguments, the following
+actions are taken.
+.PP
+If the command name contains no slashes, the shell attempts to
+locate it. If there exists a shell function by that name, that
+function is invoked as described above in
+.SM
+.BR FUNCTIONS .
+If the name does not match a function, the shell searches for
+it in the list of shell builtins. If a match is found, that
+builtin is invoked.
+.PP
+If the name is neither a shell function nor a builtin,
+and contains no slashes,
+.B bash
+searches each element of the
+.SM
+.B PATH
+for a directory containing an executable file by that name.
+.B Bash
+uses a hash table to remember the full pathnames of executable
+files (see
+.B hash
+under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+A full search of the directories in
+.SM
+.B PATH
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell prints an error
+message and returns an exit status of 127.
+.PP
+If the search is successful, or if the command name contains
+one or more slashes, the shell executes the named program in a
+separate execution environment.
+Argument 0 is set to the name given, and the remaining arguments
+to the command are set to the arguments given, if any.
+.PP
+If this execution fails because the file is not in executable
+format, and the file is not a directory, it is assumed to be
+a \fIshell script\fP, a file
+containing shell commands. A subshell is spawned to execute
+it. This subshell reinitializes itself, so
+that the effect is as if a new shell had been invoked
+to handle the script, with the exception that the locations of
+commands remembered by the parent (see
+.B hash
+below under
+.SM
+\fBSHELL BUILTIN COMMANDS\fP)
+are retained by the child.
+.PP
+If the program is a file beginning with
+.BR #! ,
+the remainder of the first line specifies an interpreter
+for the program. The shell executes the
+specified interpreter on operating systems that do not
+handle this executable format themselves. The arguments to the
+interpreter consist of a single optional argument following the
+interpreter name on the first line of the program, followed
+by the name of the program, followed by the command
+arguments, if any.
+.SH COMMAND EXECUTION ENVIRONMENT
+The shell has an \fIexecution environment\fP, which consists of the
+following:
+.sp 1
+.IP \(bu
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the \fBexec\fP builtin
+.IP \(bu
+the current working directory as set by \fBcd\fP, \fBpushd\fP, or
+\fBpopd\fP, or inherited by the shell at invocation
+.IP \(bu
+the file creation mode mask as set by \fBumask\fP or inherited from
+the shell's parent
+.IP \(bu
+current traps set by \fBtrap\fP
+.IP \(bu
+shell parameters that are set by variable assignment or with \fBset\fP
+or inherited from the shell's parent in the environment
+.IP \(bu
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+.IP \(bu
+options enabled at invocation (either by default or with command-line
+arguments) or by \fBset\fP
+.IP \(bu
+options enabled by \fBshopt\fP
+.IP \(bu
+shell aliases defined with \fBalias\fP
+.IP \(bu
+various process IDs, including those of background jobs, the value
+of \fB$$\fP, and the value of \fB$PPID\fP
+.PP
+When a simple command other than a builtin or shell function
+is to be executed, it
+is invoked in a separate execution environment that consists of
+the following. Unless otherwise noted, the values are inherited
+from the shell.
+.sp 1
+.IP \(bu
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+.IP \(bu
+the current working directory
+.IP \(bu
+the file creation mode mask
+.IP \(bu
+shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment
+.IP \(bu
+traps caught by the shell are reset to the values the inherited
+from the shell's parent, and traps ignored by the shell are ignored
+.PP
+A command invoked in this separate environment cannot affect the
+shell's execution environment.
+.PP
+Command substitution and asynchronous commands are invoked in a
+subshell environment that is a duplicate of the shell environment,
+except that traps caught by the shell are reset to the values
+that the shell inherited from its parent at invocation. Builtin
+commands that are invoked as part of a pipeline are also executed in a
+subshell environment. Changes made to the subshell environment
+cannot affect the shell's execution environment.
+.PP
+If a command is followed by a \fB&\fP and job control is not active, the
+default standard input for the command is the empty file \fI/dev/null\fP.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+.SH ENVIRONMENT
+When a program is invoked it is given an array of strings
+called the
+.IR environment .
+This is a list of
+\fIname\fP\-\fIvalue\fP pairs, of the form
+.IR "name\fR=\fPvalue" .
+.PP
+The shell provides several ways to manipulate the environment.
+On invocation, the shell scans its own environment and
+creates a parameter for each name found, automatically marking
+it for
+.I export
+to child processes. Executed commands inherit the environment.
+The
+.B export
+and
+.B declare \-x
+commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter
+in the environment is modified, the new value becomes part
+of the environment, replacing the old. The environment
+inherited by any executed command consists of the shell's
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the
+.B unset
+command, plus any additions via the
+.B export
+and
+.B declare \-x
+commands.
+.PP
+The environment for any
+.I simple command
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described above in
+.SM
+.BR PARAMETERS .
+These assignment statements affect only the environment seen
+by that command.
+.PP
+If the
+.B \-k
+option is set (see the
+.B set
+builtin command below), then
+.I all
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+.PP
+When
+.B bash
+invokes an external command, the variable
+.B _
+is set to the full file name of the command and passed to that
+command in its environment.
+.SH "EXIT STATUS"
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded. An exit status of zero
+indicates success. A non-zero exit status indicates failure.
+When a command terminates on a fatal signal \fIN\fP, \fBbash\fP uses
+the value of 128+\fIN\fP as the exit status.
+.PP
+If a command is not found, the child process created to
+execute it returns a status of 127. If a command is found
+but is not executable, the return status is 126.
+.PP
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+.PP
+Shell builtin commands return a status of 0 (\fItrue\fP) if
+successful, and non-zero (\fIfalse\fP) if an error occurs
+while they execute.
+All builtins return an exit status of 2 to indicate incorrect usage.
+.PP
+\fBBash\fP itself returns the exit status of the last command
+executed, unless a syntax error occurs, in which case it exits
+with a non-zero value. See also the \fBexit\fP builtin
+command below.
+.SH SIGNALS
+When \fBbash\fP is interactive, in the absence of any traps, it ignores
+.SM
+.B SIGTERM
+(so that \fBkill 0\fP does not kill an interactive shell),
+and
+.SM
+.B SIGINT
+is caught and handled (so that the \fBwait\fP builtin is interruptible).
+In all cases, \fBbash\fP ignores
+.SM
+.BR SIGQUIT .
+If job control is in effect,
+.B bash
+ignores
+.SM
+.BR SIGTTIN ,
+.SM
+.BR SIGTTOU ,
+and
+.SM
+.BR SIGTSTP .
+.PP
+Synchronous jobs started by \fBbash\fP have signal handlers
+set to the values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore
+.SM
+.B SIGINT
+and
+.SM
+.B SIGQUIT
+as well.
+Commands run as a result of command substitution ignore the
+keyboard-generated job control signals
+.SM
+.BR SIGTTIN ,
+.SM
+.BR SIGTTOU ,
+and
+.SM
+.BR SIGTSTP .
+.PP
+The shell exits by default upon receipt of a
+.SM
+.BR SIGHUP .
+Before exiting, an interactive shell resends the
+.SM
+.B SIGHUP
+to all jobs, running or stopped.
+Stopped jobs are sent
+.SM
+.B SIGCONT
+to ensure that they receive the
+.SM
+.BR SIGHUP .
+To prevent the shell from
+sending the signal to a particular job, it should be removed from the
+jobs table with the
+.B disown
+builtin (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below) or marked
+to not receive
+.SM
+.B SIGHUP
+using
+.BR "disown \-h" .
+.PP
+If the
+.B huponexit
+shell option has been set with
+.BR shopt ,
+.B bash
+sends a
+.SM
+.B SIGHUP
+to all jobs when an interactive login shell exits.
+.PP
+When \fBbash\fP receives a signal for which a trap has been set while
+waiting for a command to complete, the trap will not be executed until
+the command completes.
+When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
+builtin, the reception of a signal for which a trap has been set will
+cause the \fBwait\fP builtin to return immediately with an exit status
+greater than 128, immediately after which the trap is executed.
+.SH "JOB CONTROL"
+.I Job control
+refers to the ability to selectively stop (\fIsuspend\fP)
+the execution of processes and continue (\fIresume\fP)
+their execution at a later point. A user typically employs
+this facility via an interactive interface supplied jointly
+by the system's terminal driver and
+.BR bash .
+.PP
+The shell associates a
+.I job
+with each pipeline. It keeps a table of currently executing
+jobs, which may be listed with the
+.B jobs
+command. When
+.B bash
+starts a job asynchronously (in the
+.IR background ),
+it prints a line that looks like:
+.RS
+.PP
+[1] 25647
+.RE
+.PP
+indicating that this job is job number 1 and that the process ID
+of the last process in the pipeline associated with this job is 25647.
+All of the processes in a single pipeline are members of the same job.
+.B Bash
+uses the
+.I job
+abstraction as the basis for job control.
+.PP
+To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a \fIcurrent terminal
+process group ID\fP. Members of this process group (processes whose
+process group ID is equal to the current terminal process group ID)
+receive keyboard-generated signals such as
+.SM
+.BR SIGINT .
+These processes are said to be in the
+.IR foreground .
+.I Background
+processes are those whose process group ID differs from the terminal's;
+such processes are immune to keyboard-generated signals.
+Only foreground processes are allowed to read from or write to the
+terminal. Background processes which attempt to read from (write to) the
+terminal are sent a
+.SM
+.B SIGTTIN (SIGTTOU)
+signal by the terminal driver,
+which, unless caught, suspends the process.
+.PP
+If the operating system on which
+.B bash
+is running supports
+job control,
+.B bash
+contains facilities to use it.
+Typing the
+.I suspend
+character (typically
+.BR ^Z ,
+Control-Z) while a process is running
+causes that process to be stopped and returns control to
+.BR bash .
+Typing the
+.I "delayed suspend"
+character (typically
+.BR ^Y ,
+Control-Y) causes the process to be stopped when it
+attempts to read input from the terminal, and control to
+be returned to
+.BR bash .
+The user may then manipulate the state of this job, using the
+.B bg
+command to continue it in the background, the
+.B fg
+command to continue it in the foreground, or
+the
+.B kill
+command to kill it. A \fB^Z\fP takes effect immediately,
+and has the additional side effect of causing pending output
+and typeahead to be discarded.
+.PP
+There are a number of ways to refer to a job in the shell.
+The character
+.B %
+introduces a job name. Job number
+.I n
+may be referred to as
+.BR %n .
+A job may also be referred to using a prefix of the name used to
+start it, or using a substring that appears in its command line.
+For example,
+.B %ce
+refers to a stopped
+.B ce
+job. If a prefix matches more than one job,
+.B bash
+reports an error. Using
+.BR %?ce ,
+on the other hand, refers to any job containing the string
+.B ce
+in its command line. If the substring matches more than one job,
+.B bash
+reports an error. The symbols
+.B %%
+and
+.B %+
+refer to the shell's notion of the
+.IR "current job" ,
+which is the last job stopped while it was in
+the foreground or started in the background.
+The
+.I "previous job"
+may be referenced using
+.BR %\- .
+In output pertaining to jobs (e.g., the output of the
+.B jobs
+command), the current job is always flagged with a
+.BR + ,
+and the previous job with a
+.BR \- .
+.PP
+Simply naming a job can be used to bring it into the
+foreground:
+.B %1
+is a synonym for
+\fB``fg %1''\fP,
+bringing job 1 from the background into the foreground.
+Similarly,
+.B ``%1 &''
+resumes job 1 in the background, equivalent to
+\fB``bg %1''\fP.
+.PP
+The shell learns immediately whenever a job changes state.
+Normally,
+.B bash
+waits until it is about to print a prompt before reporting
+changes in a job's status so as to not interrupt
+any other output. If the
+.B \-b
+option to the
+.B set
+builtin command
+is enabled,
+.B bash
+reports such changes immediately.
+Any trap on
+.SM
+.B SIGCHLD
+is executed for each child that exits.
+.PP
+If an attempt to exit
+.B bash
+is made while jobs are stopped, the shell prints a warning message. The
+.B jobs
+command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+the shell does not print another warning, and the stopped
+jobs are terminated.
+.SH PROMPTING
+When executing interactively,
+.B bash
+displays the primary prompt
+.SM
+.B PS1
+when it is ready to read a command, and the secondary prompt
+.SM
+.B PS2
+when it needs more input to complete a command.
+.B Bash
+allows these prompt strings to be customized by inserting a number of
+backslash-escaped special characters that are decoded as follows:
+.RS
+.PD 0
+.TP
+.B \ea
+an ASCII bell character (07)
+.TP
+.B \ed
+the date in "Weekday Month Date" format (e.g., "Tue May 26")
+.TP
+.B \eD{\fIformat\fP}
+the \fIformat\fP is passed to \fIstrftime\fP(3) and the result is inserted
+into the prompt string; an empty \fIformat\fP results in a locale-specific
+time representation. The braces are required
+.TP
+.B \ee
+an ASCII escape character (033)
+.TP
+.B \eh
+the hostname up to the first `.'
+.TP
+.B \eH
+the hostname
+.TP
+.B \ej
+the number of jobs currently managed by the shell
+.TP
+.B \el
+the basename of the shell's terminal device name
+.TP
+.B \en
+newline
+.TP
+.B \er
+carriage return
+.TP
+.B \es
+the name of the shell, the basename of
+.B $0
+(the portion following the final slash)
+.TP
+.B \et
+the current time in 24-hour HH:MM:SS format
+.TP
+.B \eT
+the current time in 12-hour HH:MM:SS format
+.TP
+.B \e@
+the current time in 12-hour am/pm format
+.TP
+.B \eA
+the current time in 24-hour HH:MM format
+.TP
+.B \eu
+the username of the current user
+.TP
+.B \ev
+the version of \fBbash\fP (e.g., 2.00)
+.TP
+.B \eV
+the release of \fBbash\fP, version + patchelvel (e.g., 2.00.0)
+.TP
+.B \ew
+the current working directory
+.TP
+.B \eW
+the basename of the current working directory
+.TP
+.B \e!
+the history number of this command
+.TP
+.B \e#
+the command number of this command
+.TP
+.B \e$
+if the effective UID is 0, a
+.BR # ,
+otherwise a
+.B $
+.TP
+.B \e\fInnn\fP
+the character corresponding to the octal number \fInnn\fP
+.TP
+.B \e\e
+a backslash
+.TP
+.B \e[
+begin a sequence of non-printing characters, which could be used to
+embed a terminal control sequence into the prompt
+.TP
+.B \e]
+end a sequence of non-printing characters
+.PD
+.RE
+.PP
+The command number and the history number are usually different:
+the history number of a command is its position in the history
+list, which may include commands restored from the history file
+(see
+.SM
+.B HISTORY
+below), while the command number is the position in the sequence
+of commands executed during the current shell session.
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+.B promptvars
+shell option (see the description of the
+.B shopt
+command under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below).
+.SH READLINE
+This is the library that handles reading input when using an interactive
+shell, unless the
+.B \-\-noediting
+option is given at shell invocation.
+By default, the line editing commands are similar to those of emacs.
+A vi-style line editing interface is also available.
+To turn off line editing after the shell is running, use the
+.B +o emacs
+or
+.B +o vi
+options to the
+.B set
+builtin (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SS "Readline Notation"
+.PP
+In this section, the emacs-style notation is used to denote
+keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
+means Control\-N. Similarly,
+.I meta
+keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards
+without a
+.I meta
+key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key
+then the
+.I x
+key. This makes ESC the \fImeta prefix\fP.
+The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP,
+or press the Escape key
+then hold the Control key while pressing the
+.I x
+key.)
+.PP
+Readline commands may be given numeric
+.IR arguments ,
+which normally act as a repeat count.
+Sometimes, however, it is the sign of the argument that is significant.
+Passing a negative argument to a command that acts in the forward
+direction (e.g., \fBkill\-line\fP) causes that command to act in a
+backward direction.
+Commands whose behavior with arguments deviates from this are noted
+below.
+.PP
+When a command is described as \fIkilling\fP text, the text
+deleted is saved for possible future retrieval
+(\fIyanking\fP). The killed text is saved in a
+\fIkill ring\fP. Consecutive kills cause the text to be
+accumulated into one unit, which can be yanked all at once.
+Commands which do not kill text separate the chunks of text
+on the kill ring.
+.SS "Readline Initialization"
+.PP
+Readline is customized by putting commands in an initialization
+file (the \fIinputrc\fP file).
+The name of this file is taken from the value of the
+.SM
+.B INPUTRC
+variable. If that variable is unset, the default is
+.IR ~/.inputrc .
+When a program which uses the readline library starts up, the
+initialization file is read, and the key bindings and variables
+are set.
+There are only a few basic constructs allowed in the
+readline initialization file.
+Blank lines are ignored.
+Lines beginning with a \fB#\fP are comments.
+Lines beginning with a \fB$\fP indicate conditional constructs.
+Other lines denote key bindings and variable settings.
+.PP
+The default key-bindings may be changed with an
+.I inputrc
+file.
+Other programs that use this library may add their own commands
+and bindings.
+.PP
+For example, placing
+.RS
+.PP
+M\-Control\-u: universal\-argument
+.RE
+or
+.RS
+C\-Meta\-u: universal\-argument
+.RE
+into the
+.I inputrc
+would make M\-C\-u execute the readline command
+.IR universal\-argument .
+.PP
+The following symbolic character names are recognized:
+.IR RUBOUT ,
+.IR DEL ,
+.IR ESC ,
+.IR LFD ,
+.IR NEWLINE ,
+.IR RET ,
+.IR RETURN ,
+.IR SPC ,
+.IR SPACE ,
+and
+.IR TAB .
+.PP
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a \fImacro\fP).
+.SS "Readline Key Bindings"
+.PP
+The syntax for controlling key bindings in the
+.I inputrc
+file is simple. All that is required is the name of the
+command or the text of a macro and a key sequence to which
+it should be bound. The name may be specified in one of two ways:
+as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
+prefixes, or as a key sequence.
+.PP
+When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP,
+.I keyname
+is the name of a key spelled out in English. For example:
+.sp
+.RS
+Control-u: universal\-argument
+.br
+Meta-Rubout: backward-kill-word
+.br
+Control-o: "> output"
+.RE
+.LP
+In the above example,
+.I C\-u
+is bound to the function
+.BR universal\-argument ,
+.I M\-DEL
+is bound to the function
+.BR backward\-kill\-word ,
+and
+.I C\-o
+is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+.if t \f(CW> output\fP
+.if n ``> output''
+into the line).
+.PP
+In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
+.B keyseq
+differs from
+.B keyname
+above in that strings denoting
+an entire key sequence may be specified by placing the sequence
+within double quotes. Some GNU Emacs style key escapes can be
+used, as in the following example, but the symbolic character names
+are not recognized.
+.sp
+.RS
+"\eC\-u": universal\-argument
+.br
+"\eC\-x\eC\-r": re\-read\-init\-file
+.br
+"\ee[11~": "Function Key 1"
+.RE
+.PP
+In this example,
+.I C\-u
+is again bound to the function
+.BR universal\-argument .
+.I "C\-x C\-r"
+is bound to the function
+.BR re\-read\-init\-file ,
+and
+.I "ESC [ 1 1 ~"
+is bound to insert the text
+.if t \f(CWFunction Key 1\fP.
+.if n ``Function Key 1''.
+.PP
+The full set of GNU Emacs style escape sequences is
+.RS
+.PD 0
+.TP
+.B \eC\-
+control prefix
+.TP
+.B \eM\-
+meta prefix
+.TP
+.B \ee
+an escape character
+.TP
+.B \e\e
+backslash
+.TP
+.B \e"
+literal "
+.TP
+.B \e'
+literal '
+.RE
+.PD
+.PP
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ed
+delete
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+newline
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.RE
+.PD
+.PP
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including " and '.
+.PP
+.B Bash
+allows the current readline key bindings to be displayed or modified
+with the
+.B bind
+builtin command. The editing mode may be switched during interactive
+use by using the
+.B \-o
+option to the
+.B set
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below).
+.SS "Readline Variables"
+.PP
+Readline has variables that can be used to further customize its
+behavior. A variable may be set in the
+.I inputrc
+file with a statement of the form
+.RS
+.PP
+\fBset\fP \fIvariable\-name\fP \fIvalue\fP
+.RE
+.PP
+Except where noted, readline variables can take the values
+.B On
+or
+.BR Off .
+The variables and their default values are:
+.PP
+.PD 0
+.TP
+.B bell\-style (audible)
+Controls what happens when readline wants to ring the terminal bell.
+If set to \fBnone\fP, readline never rings the bell. If set to
+\fBvisible\fP, readline uses a visible bell if one is available.
+If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
+.TP
+.B comment\-begin (``#'')
+The string that is inserted when the readline
+.B insert\-comment
+command is executed.
+This command is bound to
+.B M\-#
+in emacs mode and to
+.B #
+in vi command mode.
+.TP
+.B completion\-ignore\-case (Off)
+If set to \fBOn\fP, readline performs filename matching and completion
+in a case\-insensitive fashion.
+.TP
+.B completion\-query\-items (100)
+This determines when the user is queried about viewing
+the number of possible completions
+generated by the \fBpossible\-completions\fP command.
+It may be set to any integer value greater than or equal to
+zero. If the number of possible completions is greater than
+or equal to the value of this variable, the user is asked whether
+or not he wishes to view them; otherwise they are simply listed
+on the terminal.
+.TP
+.B convert\-meta (On)
+If set to \fBOn\fP, readline will convert characters with the
+eighth bit set to an ASCII key sequence
+by stripping the eighth bit and prefixing an
+escape character (in effect, using escape as the \fImeta prefix\fP).
+.TP
+.B disable\-completion (Off)
+If set to \fBOn\fP, readline will inhibit word completion. Completion
+characters will be inserted into the line as if they had been
+mapped to \fBself-insert\fP.
+.TP
+.B editing\-mode (emacs)
+Controls whether readline begins with a set of key bindings similar
+to \fIemacs\fP or \fIvi\fP.
+.B editing\-mode
+can be set to either
+.B emacs
+or
+.BR vi .
+.TP
+.B enable\-keypad (Off)
+When set to \fBOn\fP, readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys.
+.TP
+.B expand\-tilde (Off)
+If set to \fBon\fP, tilde expansion is performed when readline
+attempts word completion.
+.TP
+.B history-preserve-point
+If set to \fBon\fP, the history code attempts to place point at the
+same location on each history line retrived with \fBprevious-history\fP
+or \fBnext-history\fP.
+.TP
+.B horizontal\-scroll\-mode (Off)
+When set to \fBOn\fP, makes readline use a single line for display,
+scrolling the input horizontally on a single screen line when it
+becomes longer than the screen width rather than wrapping to a new line.
+.TP
+.B input\-meta (Off)
+If set to \fBOn\fP, readline will enable eight-bit input (that is,
+it will not strip the high bit from the characters it reads),
+regardless of what the terminal claims it can support. The name
+.B meta\-flag
+is a synonym for this variable.
+.TP
+.B isearch\-terminators (``C\-[C\-J'')
+The string of characters that should terminate an incremental
+search without subsequently executing the character as a command.
+If this variable has not been given a value, the characters
+\fIESC\fP and \fIC\-J\fP will terminate an incremental search.
+.TP
+.B keymap (emacs)
+Set the current readline keymap. The set of valid keymap names is
+\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
+vi\-command\fP, and
+.IR vi\-insert .
+\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is
+equivalent to \fIemacs\-standard\fP. The default value is
+.IR emacs ;
+the value of
+.B editing\-mode
+also affects the default keymap.
+.TP
+.B mark\-directories (On)
+If set to \fBOn\fP, completed directory names have a slash
+appended.
+.TP
+.B mark\-modified\-lines (Off)
+If set to \fBOn\fP, history lines that have been modified are displayed
+with a preceding asterisk (\fB*\fP).
+.TP
+.B mark\-symlinked\-directories (Off)
+If set to \fBOn\fP, completed names which are symbolic links to directories
+have a slash appended (subject to the value of
+\fBmark\-directories\fP).
+.TP
+.B match\-hidden\-files (On)
+This variable, when set to \fBOn\fP, causes readline to match files whose
+names begin with a `.' (hidden files) when performing filename
+completion, unless the leading `.' is
+supplied by the user in the filename to be completed.
+.TP
+.B output\-meta (Off)
+If set to \fBOn\fP, readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.
+.TP
+.B page\-completions (On)
+If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
+to display a screenful of possible completions at a time.
+.TP
+.B print\-completions\-horizontally (Off)
+If set to \fBOn\fP, readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+.TP
+.B show\-all\-if\-ambiguous (Off)
+This alters the default behavior of the completion functions. If
+set to
+.BR on ,
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+.TP
+.B visible\-stats (Off)
+If set to \fBOn\fP, a character denoting a file's type as reported
+by \fIstat\fP(2) is appended to the filename when listing possible
+completions.
+.PD
+.SS "Readline Conditional Constructs"
+.PP
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests. There are four parser directives used.
+.IP \fB$if\fP
+The
+.B $if
+construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+readline. The text of the test extends to the end of the line;
+no characters are required to isolate it.
+.RS
+.IP \fBmode\fP
+The \fBmode=\fP form of the \fB$if\fP directive is used to test
+whether readline is in emacs or vi mode.
+This may be used in conjunction
+with the \fBset keymap\fP command, for instance, to set bindings in
+the \fIemacs\-standard\fP and \fIemacs\-ctlx\fP keymaps only if
+readline is starting out in emacs mode.
+.IP \fBterm\fP
+The \fBterm=\fP form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys. The word on the right side of the
+.B =
+is tested against the both full name of the terminal and the portion
+of the terminal name before the first \fB\-\fP. This allows
+.I sun
+to match both
+.I sun
+and
+.IR sun\-cmd ,
+for instance.
+.IP \fBapplication\fP
+The \fBapplication\fP construct is used to include
+application-specific settings. Each program using the readline
+library sets the \fIapplication name\fP, and an initialization
+file can test for a particular value.
+This could be used to bind key sequences to functions useful for
+a specific program. For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+.sp 1
+.RS
+.nf
+\fB$if\fP Bash
+# Quote the current or previous word
+"\eC\-xq": "\eeb\e"\eef\e""
+\fB$endif\fP
+.fi
+.RE
+.RE
+.IP \fB$endif\fP
+This command, as seen in the previous example, terminates an
+\fB$if\fP command.
+.IP \fB$else\fP
+Commands in this branch of the \fB$if\fP directive are executed if
+the test fails.
+.IP \fB$include\fP
+This directive takes a single filename as an argument and reads commands
+and bindings from that file. For example, the following directive
+would read \fI/etc/inputrc\fP:
+.sp 1
+.RS
+.nf
+\fB$include\fP \^ \fI/etc/inputrc\fP
+.fi
+.RE
+.SS Searching
+.PP
+Readline provides commands for searching through the command history
+(see
+.SM
+.B HISTORY
+below) for lines containing a specified string.
+There are two search modes:
+.I incremental
+and
+.IR non-incremental .
+.PP
+Incremental searches begin before the user has finished typing the
+search string.
+As each character of the search string is typed, readline displays
+the next entry from the history matching the string typed so far.
+An incremental search requires only as many characters as needed to
+find the desired history entry.
+The characters present in the value of the \fBisearch-terminators\fP
+variable are used to terminate an incremental search.
+If that variable has not been assigned a value the Escape and
+Control-J characters will terminate an incremental search.
+Control-G will abort an incremental search and restore the original
+line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+.PP
+To find other matching entries in the history list, type Control-S or
+Control-R as appropriate.
+This will search backward or forward in the history for the next
+entry matching the search string typed so far.
+Any other key sequence bound to a readline command will terminate
+the search and execute that command.
+For instance, a \fInewline\fP will terminate the search and accept
+the line, thereby executing the command from the history list.
+.PP
+Readline remembers the last incremental search string. If two
+Control-Rs are typed without any intervening characters defining a
+new search string, any remembered search string is used.
+.PP
+Non-incremental searches read the entire search string before starting
+to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+.SS "Readline Command Names"
+.PP
+The following is a list of the names of the commands and the default
+key sequences to which they are bound.
+Command names without an accompanying key sequence are unbound by default.
+In the following descriptions, \fIpoint\fP refers to the current cursor
+position, and \fImark\fP refers to a cursor position saved by the
+\fBset\-mark\fP command.
+The text between the point and mark is referred to as the \fIregion\fP.
+.SS Commands for Moving
+.PP
+.PD 0
+.TP
+.B beginning\-of\-line (C\-a)
+Move to the start of the current line.
+.TP
+.B end\-of\-line (C\-e)
+Move to the end of the line.
+.TP
+.B forward\-char (C\-f)
+Move forward a character.
+.TP
+.B backward\-char (C\-b)
+Move back a character.
+.TP
+.B forward\-word (M\-f)
+Move forward to the end of the next word. Words are composed of
+alphanumeric characters (letters and digits).
+.TP
+.B backward\-word (M\-b)
+Move back to the start of the current or previous word. Words are
+composed of alphanumeric characters (letters and digits).
+.TP
+.B clear\-screen (C\-l)
+Clear the screen leaving the current line at the top of the screen.
+With an argument, refresh the current line without clearing the
+screen.
+.TP
+.B redraw\-current\-line
+Refresh the current line.
+.PD
+.SS Commands for Manipulating the History
+.PP
+.PD 0
+.TP
+.B accept\-line (Newline, Return)
+Accept the line regardless of where the cursor is. If this line is
+non-empty, add it to the history list according to the state of the
+.SM
+.B HISTCONTROL
+variable. If the line is a modified history
+line, then restore the history line to its original state.
+.TP
+.B previous\-history (C\-p)
+Fetch the previous command from the history list, moving back in
+the list.
+.TP
+.B next\-history (C\-n)
+Fetch the next command from the history list, moving forward in the
+list.
+.TP
+.B beginning\-of\-history (M\-<)
+Move to the first line in the history.
+.TP
+.B end\-of\-history (M\->)
+Move to the end of the input history, i.e., the line currently being
+entered.
+.TP
+.B reverse\-search\-history (C\-r)
+Search backward starting at the current line and moving `up' through
+the history as necessary. This is an incremental search.
+.TP
+.B forward\-search\-history (C\-s)
+Search forward starting at the current line and moving `down' through
+the history as necessary. This is an incremental search.
+.TP
+.B non\-incremental\-reverse\-search\-history (M\-p)
+Search backward through the history starting at the current line
+using a non-incremental search for a string supplied by the user.
+.TP
+.B non\-incremental\-forward\-search\-history (M\-n)
+Search forward through the history using a non-incremental search for
+a string supplied by the user.
+.TP
+.B history\-search\-forward
+Search forward through the history for the string of characters
+between the start of the current line and the point.
+This is a non-incremental search.
+.TP
+.B history\-search\-backward
+Search backward through the history for the string of characters
+between the start of the current line and the point.
+This is a non-incremental search.
+.TP
+.B yank\-nth\-arg (M\-C\-y)
+Insert the first argument to the previous command (usually
+the second word on the previous line) at point.
+With an argument
+.IR n ,
+insert the \fIn\fPth word from the previous command (the words
+in the previous command begin with word 0). A negative argument
+inserts the \fIn\fPth word from the end of the previous command.
+.TP
+.B
+yank\-last\-arg (M\-.\^, M\-_\^)
+Insert the last argument to the previous command (the last word of
+the previous history entry). With an argument,
+behave exactly like \fByank\-nth\-arg\fP.
+Successive calls to \fByank\-last\-arg\fP move back through the history
+list, inserting the last argument of each line in turn.
+.TP
+.B shell\-expand\-line (M\-C\-e)
+Expand the line as the shell does. This
+performs alias and history expansion as well as all of the shell
+word expansions. See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B history\-expand\-line (M\-^)
+Perform history expansion on the current line.
+See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B magic\-space
+Perform history expansion on the current line and insert a space.
+See
+.SM
+.B HISTORY EXPANSION
+below for a description of history expansion.
+.TP
+.B alias\-expand\-line
+Perform alias expansion on the current line.
+See
+.SM
+.B ALIASES
+above for a description of alias expansion.
+.TP
+.B history\-and\-alias\-expand\-line
+Perform history and alias expansion on the current line.
+.TP
+.B insert\-last\-argument (M\-.\^, M\-_\^)
+A synonym for \fByank\-last\-arg\fP.
+.TP
+.B operate\-and\-get\-next (C\-o)
+Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing. Any
+argument is ignored.
+.TP
+.B edit\-and\-execute\-command (C\-xC\-e)
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+\fBBash\fP attempts to invoke
+.SM
+.BR $FCEDIT ,
+.SM
+.BR $EDITOR ,
+and \fIemacs\fP as the editor, in that order.
+.PD
+.SS Commands for Changing Text
+.PP
+.PD 0
+.TP
+.B delete\-char (C\-d)
+Delete the character at point. If point is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to \fBdelete\-char\fP,
+then return
+.SM
+.BR EOF .
+.TP
+.B backward\-delete\-char (Rubout)
+Delete the character behind the cursor. When given a numeric argument,
+save the deleted text on the kill ring.
+.TP
+.B forward\-backward\-delete\-char
+Delete the character under the cursor, unless the cursor is at the
+end of the line, in which case the character behind the cursor is
+deleted.
+.TP
+.B quoted\-insert (C\-q, C\-v)
+Add the next character typed to the line verbatim. This is
+how to insert characters like \fBC\-q\fP, for example.
+.TP
+.B tab\-insert (C\-v TAB)
+Insert a tab character.
+.TP
+.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...)
+Insert the character typed.
+.TP
+.B transpose\-chars (C\-t)
+Drag the character before point forward over the character at point,
+moving point forward as well.
+If point is at the end of the line, then this transposes
+the two characters before point.
+Negative arguments have no effect.
+.TP
+.B transpose\-words (M\-t)
+Drag the word before point past the word after point,
+moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
+.TP
+.B upcase\-word (M\-u)
+Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move point.
+.TP
+.B downcase\-word (M\-l)
+Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move point.
+.TP
+.B capitalize\-word (M\-c)
+Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move point.
+.TP
+.B overwrite\-mode
+Toggle overwrite mode. With an explicit positive numeric argument,
+switches to overwrite mode. With an explicit non-positive numeric
+argument, switches to insert mode. This command affects only
+\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
+Each call to \fIreadline()\fP starts in insert mode.
+In overwrite mode, characters bound to \fBself\-insert\fP replace
+the text at point rather than pushing the text to the right.
+Characters bound to \fBbackward\-delete\-char\fP replace the character
+before point with a space. By default, this command is unbound.
+.PD
+.SS Killing and Yanking
+.PP
+.PD 0
+.TP
+.B kill\-line (C\-k)
+Kill the text from point to the end of the line.
+.TP
+.B backward\-kill\-line (C\-x Rubout)
+Kill backward to the beginning of the line.
+.TP
+.B unix\-line\-discard (C\-u)
+Kill backward from point to the beginning of the line.
+The killed text is saved on the kill-ring.
+.\" There is no real difference between this and backward-kill-line
+.TP
+.B kill\-whole\-line
+Kill all characters on the current line, no matter where point is.
+.TP
+.B kill\-word (M\-d)
+Kill from point to the end of the current word, or if between
+words, to the end of the next word.
+Word boundaries are the same as those used by \fBforward\-word\fP.
+.TP
+.B backward\-kill\-word (M\-Rubout)
+Kill the word behind point.
+Word boundaries are the same as those used by \fBbackward\-word\fP.
+.TP
+.B unix\-word\-rubout (C\-w)
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+.TP
+.B delete\-horizontal\-space (M\-\e)
+Delete all spaces and tabs around point.
+.TP
+.B kill\-region
+Kill the text in the current region.
+.TP
+.B copy\-region\-as\-kill
+Copy the text in the region to the kill buffer.
+.TP
+.B copy\-backward\-word
+Copy the word before point to the kill buffer.
+The word boundaries are the same as \fBbackward\-word\fP.
+.TP
+.B copy\-forward\-word
+Copy the word following point to the kill buffer.
+The word boundaries are the same as \fBforward\-word\fP.
+.TP
+.B yank (C\-y)
+Yank the top of the kill ring into the buffer at point.
+.TP
+.B yank\-pop (M\-y)
+Rotate the kill ring, and yank the new top. Only works following
+.B yank
+or
+.BR yank\-pop .
+.PD
+.SS Numeric Arguments
+.PP
+.PD 0
+.TP
+.B digit\-argument (M\-0, M\-1, ..., M\-\-)
+Add this digit to the argument already accumulating, or start a new
+argument. M\-\- starts a negative argument.
+.TP
+.B universal\-argument
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing
+.B universal\-argument
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+.PD
+.SS Completing
+.PP
+.PD 0
+.TP
+.B complete (TAB)
+Attempt to perform completion on the text before point.
+.B Bash
+attempts completion treating the text as a variable (if the
+text begins with \fB$\fP), username (if the text begins with
+\fB~\fP), hostname (if the text begins with \fB@\fP), or
+command (including aliases and functions) in turn. If none
+of these produces a match, filename completion is attempted.
+.TP
+.B possible\-completions (M\-?)
+List the possible completions of the text before point.
+.TP
+.B insert\-completions (M\-*)
+Insert all completions of the text before point
+that would have been generated by
+\fBpossible\-completions\fP.
+.TP
+.B menu\-complete
+Similar to \fBcomplete\fP, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of \fBmenu\-complete\fP steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung
+(subject to the setting of \fBbell\-style\fP)
+and the original text is restored.
+An argument of \fIn\fP moves \fIn\fP positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to \fBTAB\fP, but is unbound
+by default.
+.TP
+.B delete\-char\-or\-list
+Deletes the character under the cursor if not at the beginning or
+end of the line (like \fBdelete\-char\fP).
+If at the end of the line, behaves identically to
+\fBpossible\-completions\fP.
+This command is unbound by default.
+.TP
+.B complete\-filename (M\-/)
+Attempt filename completion on the text before point.
+.TP
+.B possible\-filename\-completions (C\-x /)
+List the possible completions of the text before point,
+treating it as a filename.
+.TP
+.B complete\-username (M\-~)
+Attempt completion on the text before point, treating
+it as a username.
+.TP
+.B possible\-username\-completions (C\-x ~)
+List the possible completions of the text before point,
+treating it as a username.
+.TP
+.B complete\-variable (M\-$)
+Attempt completion on the text before point, treating
+it as a shell variable.
+.TP
+.B possible\-variable\-completions (C\-x $)
+List the possible completions of the text before point,
+treating it as a shell variable.
+.TP
+.B complete\-hostname (M\-@)
+Attempt completion on the text before point, treating
+it as a hostname.
+.TP
+.B possible\-hostname\-completions (C\-x @)
+List the possible completions of the text before point,
+treating it as a hostname.
+.TP
+.B complete\-command (M\-!)
+Attempt completion on the text before point, treating
+it as a command name. Command completion attempts to
+match the text against aliases, reserved words, shell
+functions, shell builtins, and finally executable filenames,
+in that order.
+.TP
+.B possible\-command\-completions (C\-x !)
+List the possible completions of the text before point,
+treating it as a command name.
+.TP
+.B dynamic\-complete\-history (M\-TAB)
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+.TP
+.B complete\-into\-braces (M\-{)
+Perform filename completion and insert the list of possible completions
+enclosed within braces so the list is available to the shell (see
+.B Brace Expansion
+above).
+.PD
+.SS Keyboard Macros
+.PP
+.PD 0
+.TP
+.B start\-kbd\-macro (C\-x (\^)
+Begin saving the characters typed into the current keyboard macro.
+.TP
+.B end\-kbd\-macro (C\-x )\^)
+Stop saving the characters typed into the current keyboard macro
+and store the definition.
+.TP
+.B call\-last\-kbd\-macro (C\-x e)
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+.PD
+.SS Miscellaneous
+.PP
+.PD 0
+.TP
+.B re\-read\-init\-file (C\-x C\-r)
+Read in the contents of the \fIinputrc\fP file, and incorporate
+any bindings or variable assignments found there.
+.TP
+.B abort (C\-g)
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+.BR bell\-style ).
+.TP
+.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...)
+If the metafied character \fIx\fP is lowercase, run the command
+that is bound to the corresponding uppercase character.
+.TP
+.B prefix\-meta (ESC)
+Metafy the next character typed.
+.SM
+.B ESC
+.B f
+is equivalent to
+.BR Meta\-f .
+.TP
+.B undo (C\-_, C\-x C\-u)
+Incremental undo, separately remembered for each line.
+.TP
+.B revert\-line (M\-r)
+Undo all changes made to this line. This is like executing the
+.B undo
+command enough times to return the line to its initial state.
+.TP
+.B tilde\-expand (M\-&)
+Perform tilde expansion on the current word.
+.TP
+.B set\-mark (C\-@, M\-<space>)
+Set the mark to the point. If a
+numeric argument is supplied, the mark is set to that position.
+.TP
+.B exchange\-point\-and\-mark (C\-x C\-x)
+Swap the point with the mark. The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+.TP
+.B character\-search (C\-])
+A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+.TP
+.B character\-search\-backward (M\-C\-])
+A character is read and point is moved to the previous occurrence of that
+character. A negative count searches for subsequent occurrences.
+.TP
+.B insert\-comment (M\-#)
+Without a numeric argument, the value of the readline
+.B comment\-begin
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle: if
+the characters at the beginning of the line do not match the value
+of \fBcomment\-begin\fP, the value is inserted, otherwise
+the characters in \fBcomment-begin\fP are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+The default value of
+\fBcomment\-begin\fP causes this command to make the current line
+a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
+.TP
+.B glob\-complete\-word (M\-g)
+The word before point is treated as a pattern for pathname expansion,
+with an asterisk implicitly appended. This pattern is used to
+generate a list of matching file names for possible completions.
+.TP
+.B glob\-expand\-word (C\-x *)
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching file names is inserted, replacing the word.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+.TP
+.B glob\-list\-expansions (C\-x g)
+The list of expansions that would have been generated by
+.B glob\-expand\-word
+is displayed, and the line is redrawn.
+If a numeric argument is supplied, an asterisk is appended before
+pathname expansion.
+.TP
+.B dump\-functions
+Print all of the functions and their key bindings to the
+readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B dump\-variables
+Print all of the settable readline variables and their values to the
+readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B dump\-macros
+Print all of the readline key sequences bound to macros and the
+strings they ouput. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B display\-shell\-version (C\-x C\-v)
+Display version information about the current instance of
+.BR bash .
+.PD
+.SS Programmable Completion
+.PP
+When word completion is attempted for an argument to a command for
+which a completion specification (a \fIcompspec\fP) has been defined
+using the \fBcomplete\fP builtin (see
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), the programmable completion facilities are invoked.
+.PP
+First, the command name is identified.
+If a compspec has been defined for that command, the
+compspec is used to generate the list of possible completions for the word.
+If the command word is a full pathname, a compspec for the full
+pathname is searched for first.
+If no compspec is found for the full pathname, an attempt is made to
+find a compspec for the portion following the final slash.
+.PP
+Once a compspec has been found, it is used to generate the list of
+matching words.
+If a compspec is not found, the default \fBbash\fP completion as
+described above under \fBCompleting\fP is performed.
+.PP
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the
+.B \-f
+or
+.B \-d
+option is used for filename or directory name completion, the shell
+variable
+.SM
+.B FIGNORE
+is used to filter the matches.
+.PP
+Any completions specified by a filename expansion pattern to the
+\fB\-G\fP option are generated next.
+The words generated by the pattern need not match the word
+being completed.
+The
+.SM
+.B GLOBIGNORE
+shell variable is not used to filter the matches, but the
+.SM
+.B FIGNORE
+variable is used.
+.PP
+Next, the string specified as the argument to the \fB\-W\fP option
+is considered.
+The string is first split using the characters in the
+.SM
+.B IFS
+special variable as delimiters.
+Shell quoting is honored.
+Each word is then expanded using
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and pathname expansion,
+as described above under
+.SM
+.BR EXPANSION .
+The results are split using the rules described above under
+\fBWord Splitting\fP.
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+.PP
+After these matches have been generated, any shell function or command
+specified with the \fB\-F\fP and \fB\-C\fP options is invoked.
+When the command or function is invoked, the
+.SM
+.B COMP_LINE
+and
+.SM
+.B COMP_POINT
+variables are assigned values as described above under
+\fBShell Variables\fP.
+If a shell function is being invoked, the
+.SM
+.B COMP_WORDS
+and
+.SM
+.B COMP_CWORD
+variables are also set.
+When the function or command is invoked, the first argument is the
+name of the command whose arguments are being completed, the
+second argument is the word being completed, and the third argument
+is the word preceding the word being completed on the current command line.
+No filtering of the generated completions against the word being completed
+is performed; the function or command has complete freedom in generating
+the matches.
+.PP
+Any function specified with \fB\-F\fP is invoked first.
+The function may use any of the shell facilities, including the
+\fBcompgen\fP builtin described below, to generate the matches.
+It must put the possible completions in the
+.SM
+.B COMPREPLY
+array variable.
+.PP
+Next, any command specified with the \fB\-C\fP option is invoked
+in an environment equivalent to command substitution.
+It should print a list of completions, one per line, to the
+standard output.
+Backslash may be used to escape a newline, if necessary.
+.PP
+After all of the possible completions are generated, any filter
+specified with the \fB\-X\fP option is applied to the list.
+The filter is a pattern as used for pathname expansion; a \fB&\fP
+in the pattern is replaced with the text of the word being completed.
+A literal \fB&\fP may be escaped with a backslash; the backslash
+is removed before attempting a match.
+Any completion that matches the pattern will be removed from the list.
+A leading \fB!\fP negates the pattern; in this case any completion
+not matching the pattern will be removed.
+.PP
+Finally, any prefix and suffix specified with the \fB\-P\fP and \fB\-S\fP
+options are added to each member of the completion list, and the result is
+returned to the readline completion code as the list of possible
+completions.
+.PP
+If the previously-applied actions do not generate any matches, and the
+\fB\-o dirnames\fP option was supplied to \fBcomplete\fP when the
+compspec was defined, directory name completion is attempted.
+.PP
+By default, if a compspec is found, whatever it generates is returned
+to the completion code as the full set of possible completions.
+The default \fBbash\fP completions are not attempted, and the readline
+default of filename completion is disabled.
+If the \fB-o default\fP option was supplied to \fBcomplete\fP when the
+compspec was defined, readline's default completion will be performed
+if the compspec generates no matches.
+.PP
+When a compspec indicates that directory name completion is desired,
+the programmable completion functions force readline to append a slash
+to completed names which are symbolic links to directories, subject to
+the value of the \fBmark\-directories\fP readline variable, regardless
+of the setting of the \fBmark-symlinked\-directories\fP readline variable.
+.SH HISTORY
+When the
+.B \-o history
+option to the
+.B set
+builtin is enabled, the shell provides access to the
+\fIcommand history\fP,
+the list of commands previously typed.
+The value of the \fBHISTSIZE\fP variable is used as the
+number of commands to save in a history list.
+The text of the last
+.SM
+.B HISTSIZE
+commands (default 500) is saved. The shell
+stores each command in the history list prior to parameter and
+variable expansion (see
+.SM
+.B EXPANSION
+above) but after history expansion is performed, subject to the
+values of the shell variables
+.SM
+.B HISTIGNORE
+and
+.SM
+.BR HISTCONTROL .
+.PP
+On startup, the history is initialized from the file named by
+the variable
+.SM
+.B HISTFILE
+(default \fI~/.bash_history\fP).
+The file named by the value of
+.SM
+.B HISTFILE
+is truncated, if necessary, to contain no more than
+the number of lines specified by the value of
+.SM
+.BR HISTFILESIZE .
+When an interactive shell exits, the last
+.SM
+.B $HISTSIZE
+lines are copied from the history list to
+.SM
+.BR $HISTFILE .
+If the
+.B histappend
+shell option is enabled
+(see the description of
+.B shopt
+under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+below), the lines are appended to the history file,
+otherwise the history file is overwritten.
+If
+.SM
+.B HISTFILE
+is unset, or if the history file is unwritable, the history is
+not saved. After saving the history, the history file is truncated
+to contain no more than
+.SM
+.B HISTFILESIZE
+lines. If
+.SM
+.B HISTFILESIZE
+is not set, no truncation is performed.
+.PP
+The builtin command
+.B fc
+(see
+.SM
+.B SHELL BUILTIN COMMANDS
+below) may be used to list or edit and re-execute a portion of
+the history list.
+The
+.B history
+builtin may be used to display or modify the history list and
+manipulate the history file.
+When using command-line editing, search commands
+are available in each editing mode that provide access to the
+history list.
+.PP
+The shell allows control over which commands are saved on the history
+list. The
+.SM
+.B HISTCONTROL
+and
+.SM
+.B HISTIGNORE
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The
+.B cmdhist
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The
+.B lithist
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons. See the description of the
+.B shopt
+builtin below under
+.SM
+.B "SHELL BUILTIN COMMANDS"
+for information on setting and unsetting shell options.
+.SH "HISTORY EXPANSION"
+.PP
+The shell supports a history expansion feature that
+is similar to the history expansion in
+.BR csh.
+This section describes what syntax features are available. This
+feature is enabled by default for interactive shells, and can be
+disabled using the
+.B \+H
+option to the
+.B set
+builtin command (see
+.SM
+.B SHELL BUILTIN COMMANDS
+below). Non-interactive shells do not perform history expansion
+by default.
+.PP
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
+.PP
+History expansion is performed immediately after a complete line
+is read, before the shell breaks it into words.
+It takes place in two parts.
+The first is to determine which line from the history list
+to use during substitution.
+The second is to select portions of that line for inclusion into
+the current one.
+The line selected from the history is the \fIevent\fP,
+and the portions of that line that are acted upon are \fIwords\fP.
+Various \fImodifiers\fP are available to manipulate the selected words.
+The line is broken into words in the same fashion as when reading input,
+so that several \fImetacharacter\fP-separated words surrounded by
+quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is \^\fB!\fP\^ by default.
+Only backslash (\^\fB\e\fP\^) and single quotes can quote
+the history expansion character.
+.PP
+Several shell options settable with the
+.B shopt
+builtin may be used to tailor the behavior of history expansion.
+If the
+.B histverify
+shell option is enabled (see the description of the
+.B shopt
+builtin), and
+.B readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the
+.B readline
+editing buffer for further modification.
+If
+.B readline
+is being used, and the
+.B histreedit
+shell option is enabled, a failed history substitution will be reloaded
+into the
+.B readline
+editing buffer for correction.
+The
+.B \-p
+option to the
+.B history
+builtin command may be used to see what a history expansion will
+do before using it.
+The
+.B \-s
+option to the
+.B history
+builtin may be used to add commands to the end of the history list
+without actually executing them, so that they are available for
+subsequent recall.
+.PP
+The shell allows control of the various characters used by the
+history expansion mechanism (see the description of
+.B histchars
+above under
+.BR "Shell Variables" ).
+.SS Event Designators
+.PP
+An event designator is a reference to a command line entry in the
+history list.
+.PP
+.PD 0
+.TP
+.B !
+Start a history substitution, except when followed by a
+.BR blank ,
+newline, = or ( (when the \fBextglob\fP shell option is enabled using
+the \fBshopt\fP builtin).
+.TP
+.B !\fIn\fR
+Refer to command line
+.IR n .
+.TP
+.B !\-\fIn\fR
+Refer to the current command line minus
+.IR n .
+.TP
+.B !!
+Refer to the previous command. This is a synonym for `!\-1'.
+.TP
+.B !\fIstring\fR
+Refer to the most recent command starting with
+.IR string .
+.TP
+.B !?\fIstring\fR\fB[?]\fR
+Refer to the most recent command containing
+.IR string .
+The trailing \fB?\fP may be omitted if
+.I string
+is followed immediately by a newline.
+.TP
+.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
+Quick substitution. Repeat the last command, replacing
+.I string1
+with
+.IR string2 .
+Equivalent to
+``!!:s/\fIstring1\fP/\fIstring2\fP/''
+(see \fBModifiers\fP below).
+.TP
+.B !#
+The entire command line typed so far.
+.PD
+.SS Word Designators
+.PP
+Word designators are used to select desired words from the event.
+A
+.B :
+separates the event specification from the word designator.
+It may be omitted if the word designator begins with a
+.BR ^ ,
+.BR $ ,
+.BR * ,
+.BR \- ,
+or
+.BR % .
+Words are numbered from the beginning of the line,
+with the first word being denoted by 0 (zero).
+Words are inserted into the current line separated by single spaces.
+.PP
+.PD 0
+.TP
+.B 0 (zero)
+The zeroth word. For the shell, this is the command
+word.
+.TP
+.I n
+The \fIn\fRth word.
+.TP
+.B ^
+The first argument. That is, word 1.
+.TP
+.B $
+The last argument.
+.TP
+.B %
+The word matched by the most recent `?\fIstring\fR?' search.
+.TP
+.I x\fB\-\fPy
+A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
+.TP
+.B *
+All of the words but the zeroth. This is a synonym
+for `\fI1\-$\fP'. It is not an error to use
+.B *
+if there is just one
+word in the event; the empty string is returned in that case.
+.TP
+.B x*
+Abbreviates \fIx\-$\fP.
+.TP
+.B x\-
+Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
+.PD
+.PP
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+.SS Modifiers
+.PP
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+.PP
+.PD 0
+.PP
+.TP
+.B h
+Remove a trailing file name component, leaving only the head.
+.TP
+.B t
+Remove all leading file name components, leaving the tail.
+.TP
+.B r
+Remove a trailing suffix of the form \fI.xxx\fP, leaving the
+basename.
+.TP
+.B e
+Remove all but the trailing suffix.
+.TP
+.B p
+Print the new command but do not execute it.
+.TP
+.B q
+Quote the substituted words, escaping further substitutions.
+.TP
+.B x
+Quote the substituted words as with
+.BR q ,
+but break into words at
+.B blanks
+and newlines.
+.TP
+.B s/\fIold\fP/\fInew\fP/
+Substitute
+.I new
+for the first occurrence of
+.I old
+in the event line. Any delimiter can be used in place of /. The
+final delimiter is optional if it is the last character of the
+event line. The delimiter may be quoted in
+.I old
+and
+.I new
+with a single backslash. If & appears in
+.IR new ,
+it is replaced by
+.IR old .
+A single backslash will quote the &. If
+.I old
+is null, it is set to the last
+.I old
+substituted, or, if no previous history substitutions took place,
+the last
+.I string
+in a
+.B !?\fIstring\fR\fB[?]\fR
+search.
+.TP
+.B &
+Repeat the previous substitution.
+.TP
+.B g
+Cause changes to be applied over the entire event line. This is
+used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR')
+or `\fB:&\fP'. If used with
+`\fB:s\fP', any delimiter can be used
+in place of /, and the final delimiter is optional
+if it is the last character of the event line.
+An \fBa\fP may be used as a synonym for \fBg\fP.
+.TP
+.B G
+Apply the following `\fBs\fP' modifier once to each word in the event line.
+.PD
+.SH "SHELL BUILTIN COMMANDS"
+.\" start of bash_builtins
+.zZ
+.PP
+Unless otherwise noted, each builtin command documented in this
+section as accepting options preceded by
+.B \-
+accepts
+.B \-\-
+to signify the end of the options.
+.sp .5
+.PD 0
+.TP
+\fB:\fP [\fIarguments\fP]
+.PD
+No effect; the command does nothing beyond expanding
+.I arguments
+and performing any specified
+redirections. A zero exit code is returned.
+.TP
+\fB .\| \fP \fIfilename\fP [\fIarguments\fP]
+.PD 0
+.TP
+\fBsource\fP \fIfilename\fP [\fIarguments\fP]
+.PD
+Read and execute commands from
+.I filename
+in the current
+shell environment and return the exit status of the last command
+executed from
+.IR filename .
+If
+.I filename
+does not contain a slash, file names in
+.SM
+.B PATH
+are used to find the directory containing
+.IR filename .
+The file searched for in
+.SM
+.B PATH
+need not be executable.
+When \fBbash\fP is not in \fIposix mode\fP, the current directory is
+searched if no file is found in
+.SM
+.BR PATH .
+If the
+.B sourcepath
+option to the
+.B shopt
+builtin command is turned off, the
+.SM
+.B PATH
+is not searched.
+If any \fIarguments\fP are supplied, they become the positional
+parameters when \fIfilename\fP is executed. Otherwise the positional
+parameters are unchanged.
+The return status is the status of the last command exited within
+the script (0 if no commands are executed), and false if
+.I filename
+is not found or cannot be read.
+.TP
+\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+\fBAlias\fP with no arguments or with the
+.B \-p
+option prints the list of aliases in the form
+\fBalias\fP \fIname\fP=\fIvalue\fP on standard output.
+When arguments are supplied, an alias is defined for
+each \fIname\fP whose \fIvalue\fP is given.
+A trailing space in \fIvalue\fP causes the next word to be
+checked for alias substitution when the alias is expanded.
+For each \fIname\fP in the argument list for which no \fIvalue\fP
+is supplied, the name and value of the alias is printed.
+\fBAlias\fP returns true unless a \fIname\fP is given for which
+no alias has been defined.
+.TP
+\fBbg\fP [\fIjobspec\fP]
+Resume the suspended job \fIjobspec\fP in the background, as if it
+had been started with
+.BR & .
+If \fIjobspec\fP is not present, the shell's notion of the
+\fIcurrent job\fP is used.
+.B bg
+.I jobspec
+returns 0 unless run when job control is disabled or, when run with
+job control enabled, if \fIjobspec\fP was not found or started without
+job control.
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSV\fP]
+.PD 0
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP]
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP
+.TP
+\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP
+.TP
+\fBbind\fP \fIreadline\-command\fP
+.PD
+Display current
+.B readline
+key and function bindings, bind a key sequence to a
+.B readline
+function or macro, or set a
+.B readline
+variable.
+Each non-option argument is a command as it would appear in
+.IR .inputrc ,
+but each binding or command must be passed as a separate argument;
+e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'.
+Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-m \fIkeymap\fP
+Use
+.I keymap
+as the keymap to be affected by the subsequent bindings.
+Acceptable
+.I keymap
+names are
+\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
+vi\-move, vi\-command\fP, and
+.IR vi\-insert .
+\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is
+equivalent to \fIemacs\-standard\fP.
+.TP
+.B \-l
+List the names of all \fBreadline\fP functions.
+.TP
+.B \-p
+Display \fBreadline\fP function names and bindings in such a way
+that they can be re-read.
+.TP
+.B \-P
+List current \fBreadline\fP function names and bindings.
+.TP
+.B \-v
+Display \fBreadline\fP variable names and values in such a way that they
+can be re-read.
+.TP
+.B \-V
+List current \fBreadline\fP variable names and values.
+.TP
+.B \-s
+Display \fBreadline\fP key sequences bound to macros and the strings
+they output in such a way that they can be re-read.
+.TP
+.B \-S
+Display \fBreadline\fP key sequences bound to macros and the strings
+they output.
+.TP
+.B \-f \fIfilename\fP
+Read key bindings from \fIfilename\fP.
+.TP
+.B \-q \fIfunction\fP
+Query about which keys invoke the named \fIfunction\fP.
+.TP
+.B \-u \fIfunction\fP
+Unbind all keys bound to the named \fIfunction\fP.
+.TP
+.B \-r \fIkeyseq\fP
+Remove any current binding for \fIkeyseq\fP.
+.TP
+.B \-x \fIkeyseq\fP:\fIshell\-command\fP
+Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is
+entered.
+.PD
+.PP
+The return value is 0 unless an unrecognized option is given or an
+error occurred.
+.RE
+.TP
+\fBbreak\fP [\fIn\fP]
+Exit from within a
+.BR for ,
+.BR while ,
+.BR until ,
+or
+.B select
+loop. If \fIn\fP is specified, break \fIn\fP levels.
+.I n
+must be \(>= 1. If
+.I n
+is greater than the number of enclosing loops, all enclosing loops
+are exited. The return value is 0 unless the shell is not executing
+a loop when
+.B break
+is executed.
+.TP
+\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP]
+Execute the specified shell builtin, passing it
+.IR arguments ,
+and return its exit status.
+This is useful when defining a
+function whose name is the same as a shell builtin,
+retaining the functionality of the builtin within the function.
+The \fBcd\fP builtin is commonly redefined this way.
+The return status is false if
+.I shell\-builtin
+is not a shell builtin command.
+.TP
+\fBcd\fP [\fB\-L|-P\fP] [\fIdir\fP]
+Change the current directory to \fIdir\fP. The variable
+.SM
+.B HOME
+is the
+default
+.IR dir .
+The variable
+.SM
+.B CDPATH
+defines the search path for the directory containing
+.IR dir .
+Alternative directory names in
+.SM
+.B CDPATH
+are separated by a colon (:). A null directory name in
+.SM
+.B CDPATH
+is the same as the current directory, i.e., ``\fB.\fP''. If
+.I dir
+begins with a slash (/),
+then
+.SM
+.B CDPATH
+is not used. The
+.B \-P
+option says to use the physical directory structure instead of
+following symbolic links (see also the
+.B \-P
+option to the
+.B set
+builtin command); the
+.B \-L
+option forces symbolic links to be followed. An argument of
+.B \-
+is equivalent to
+.SM
+.BR $OLDPWD .
+The return value is true if the directory was successfully changed;
+false otherwise.
+.TP
+\fBcaller\fP [\fIexpr\fP]
+Returns the context of any active subroutine call (a shell function or
+a script executed with the \fB.\fP or \fBsource\fP builtins.
+Without \fIexpr\fP, \fBcaller\fP displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as \fIexpr\fP, \fBcaller\fP
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+The return value is 0 unless the shell is not executing a subroutine
+call or \fIexpr\fP does not correspond to a valid position in the
+call stack.
+.TP
+\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...]
+Run
+.I command
+with
+.I args
+suppressing the normal shell function lookup. Only builtin
+commands or commands found in the
+.SM
+.B PATH
+are executed. If the
+.B \-p
+option is given, the search for
+.I command
+is performed using a default value for
+.B PATH
+that is guaranteed to find all of the standard utilities.
+If either the
+.B \-V
+or
+.B \-v
+option is supplied, a description of
+.I command
+is printed. The
+.B \-v
+option causes a single word indicating the command or file name
+used to invoke
+.I command
+to be displayed; the
+.B \-V
+option produces a more verbose description.
+If the
+.B \-V
+or
+.B \-v
+option is supplied, the exit status is 0 if
+.I command
+was found, and 1 if not. If neither option is supplied and
+an error occurred or
+.I command
+cannot be found, the exit status is 127. Otherwise, the exit status of the
+.B command
+builtin is the exit status of
+.IR command .
+.TP
+\fBcompgen\fP [\fIoption\fP] [\fIword\fP]
+Generate possible completion matches for \fIword\fP according to
+the \fIoption\fPs, which may be any option accepted by the
+.B complete
+builtin with the exception of \fB\-p\fP and \fB\-r\fP, and write
+the matches to the standard output.
+When using the \fB\-F\fP or \fB\-C\fP options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+.sp 1
+The matches will be generated in the same way as if the programmable
+completion code had generated them directly from a completion specification
+with the same flags.
+If \fIword\fP is specified, only those completions matching \fIword\fP
+will be displayed.
+.sp 1
+The return value is true unless an invalid option is supplied, or no
+matches were generated.
+.TP
+\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP]
+.br
+[\fB\-X\fP \fIfilterpat\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] \fIname\fP [\fIname ...\fP]
+.PD 0
+.TP
+\fBcomplete\fP \fB\-pr\fP [\fIname\fP ...]
+.PD
+Specify how arguments to each \fIname\fP should be completed.
+If the \fB\-p\fP option is supplied, or if no options are supplied,
+existing completion specifications are printed in a way that allows
+them to be reused as input.
+The \fB\-r\fP option removes a completion specification for
+each \fIname\fP, or, if no \fIname\fPs are supplied, all
+completion specifications.
+.sp 1
+The process of applying these completion specifications when word completion
+is attempted is described above under \fBProgrammable Completion\fP.
+.sp 1
+Other options, if specified, have the following meanings.
+The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options
+(and, if necessary, the \fB\-P\fP and \fB\-S\fP options)
+should be quoted to protect them from expansion before the
+.B complete
+builtin is invoked.
+.RS
+.PD 0
+.TP 8
+\fB\-o\fP \fIcomp-option\fP
+The \fIcomp-option\fP controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+\fIcomp-option\fP may be one of:
+.RS
+.TP 8
+.B default
+Use readline's default filename completion if the compspec generates
+no matches.
+.TP 8
+.B dirnames
+Perform directory name completion if the compspec generates no matches.
+.TP 8
+.B filenames
+Tell readline that the compspec generates filenames, so it can perform any
+filename\-specific processing (like adding a slash to directory names or
+suppressing trailing spaces). Intended to be used with shell functions.
+.TP 8
+.B nospace
+Tell readline not to append a space (the default) to words completed at
+the end of the line.
+.RE
+.TP 8
+\fB\-A\fP \fIaction\fP
+The \fIaction\fP may be one of the following to generate a list of possible
+completions:
+.RS
+.TP 8
+.B alias
+Alias names. May also be specified as \fB\-a\fP.
+.TP 8
+.B arrayvar
+Array variable names.
+.TP 8
+.B binding
+\fBReadline\fP key binding names.
+.TP 8
+.B builtin
+Names of shell builtin commands. May also be specified as \fB\-b\fP.
+.TP 8
+.B command
+Command names. May also be specified as \fB\-c\fP.
+.TP 8
+.B directory
+Directory names. May also be specified as \fB\-d\fP.
+.TP 8
+.B disabled
+Names of disabled shell builtins.
+.TP 8
+.B enabled
+Names of enabled shell builtins.
+.TP 8
+.B export
+Names of exported shell variables. May also be specified as \fB\-e\fP.
+.TP 8
+.B file
+File names. May also be specified as \fB\-f\fP.
+.TP 8
+.B function
+Names of shell functions.
+.TP 8
+.B group
+Group names. May also be specified as \fB\-g\fP.
+.TP 8
+.B helptopic
+Help topics as accepted by the \fBhelp\fP builtin.
+.TP 8
+.B hostname
+Hostnames, as taken from the file specified by the
+.SM
+.B HOSTFILE
+shell variable.
+.TP 8
+.B job
+Job names, if job control is active. May also be specified as \fB\-j\fP.
+.TP 8
+.B keyword
+Shell reserved words. May also be specified as \fB\-k\fP.
+.TP 8
+.B running
+Names of running jobs, if job control is active.
+.TP 8
+.B service
+Service names. May also be specified as \fB\-s\fP.
+.TP 8
+.B setopt
+Valid arguments for the \fB\-o\fP option to the \fBset\fP builtin.
+.TP 8
+.B shopt
+Shell option names as accepted by the \fBshopt\fP builtin.
+.TP 8
+.B signal
+Signal names.
+.TP 8
+.B stopped
+Names of stopped jobs, if job control is active.
+.TP 8
+.B user
+User names. May also be specified as \fB\-u\fP.
+.TP 8
+.B variable
+Names of all shell variables. May also be specified as \fB\-v\fP.
+.RE
+.TP 8
+\fB\-G\fP \fIglobpat\fP
+The filename expansion pattern \fIglobpat\fP is expanded to generate
+the possible completions.
+.TP 8
+\fB\-W\fP \fIwordlist\fP
+The \fIwordlist\fP is split using the characters in the
+.SM
+.B IFS
+special variable as delimiters, and each resultant word is expanded.
+The possible completions are the members of the resultant list which
+match the word being completed.
+.TP 8
+\fB\-C\fP \fIcommand\fP
+\fIcommand\fP is executed in a subshell environment, and its output is
+used as the possible completions.
+.TP 8
+\fB\-F\fP \fIfunction\fP
+The shell function \fIfunction\fP is executed in the current shell
+environment.
+When it finishes, the possible completions are retrieved from the value
+of the
+.SM
+.B COMPREPLY
+array variable.
+.TP 8
+\fB\-X\fP \fIfilterpat\fP
+\fIfilterpat\fP 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
+\fIfilterpat\fP is removed from the list.
+A leading \fB!\fP in \fIfilterpat\fP negates the pattern; in this
+case, any completion not matching \fIfilterpat\fP is removed.
+.TP 8
+\fB\-P\fP \fIprefix\fP
+\fIprefix\fP is added at the beginning of each possible completion
+after all other options have been applied.
+.TP 8
+\fB\-S\fP \fIsuffix\fP
+\fIsuffix\fP is appended to each possible completion
+after all other options have been applied.
+.PD
+.PP
+The return value is true unless an invalid option is supplied, an option
+other than \fB\-p\fP or \fB\-r\fP is supplied without a \fIname\fP
+argument, an attempt is made to remove a completion specification for
+a \fIname\fP for which no specification exists, or
+an error occurs adding a completion specification.
+.RE
+.TP
+\fBcontinue\fP [\fIn\fP]
+Resume the next iteration of the enclosing
+.BR for ,
+.BR while ,
+.BR until ,
+or
+.B select
+loop.
+If
+.I n
+is specified, resume at the \fIn\fPth enclosing loop.
+.I n
+must be \(>= 1. If
+.I n
+is greater than the number of enclosing loops, the last enclosing loop
+(the ``top-level'' loop) is resumed. The return value is 0 unless the
+shell is not executing a loop when
+.B continue
+is executed.
+.TP
+\fBdeclare\fP [\fB\-afFirtx\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+.PD 0
+.TP
+\fBtypeset\fP [\fB\-afFirtx\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
+.PD
+Declare variables and/or give them attributes.
+If no \fIname\fPs are given then display the values of variables.
+The
+.B \-p
+option will display the attributes and values of each
+.IR name .
+When
+.B \-p
+is used, additional options are ignored.
+The
+.B \-F
+option inhibits the display of function definitions; only the
+function name and attributes are printed.
+If the \fBextdebug\fP shell option is enabled using \fBshopt\fP,
+the source file name and line number where the function is defined
+are displayed as well. The
+.B \-F
+option implies
+.BR \-f .
+The following options can
+be used to restrict output to variables with the specified attribute or
+to give variables attributes:
+.RS
+.PD 0
+.TP
+.B \-a
+Each \fIname\fP is an array variable (see
+.B Arrays
+above).
+.TP
+.B \-f
+Use function names only.
+.TP
+.B \-i
+The variable is treated as an integer; arithmetic evaluation (see
+.SM
+.B "ARITHMETIC EVALUATION" ") "
+is performed when the variable is assigned a value.
+.TP
+.B \-r
+Make \fIname\fPs readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+.TP
+.B \-t
+Give each \fIname\fP the \fItrace\fP attribute.
+Traced functions inherit the \fBDEBUG\fP trap from the calling shell.
+The trace attribute has no special meaning for variables.
+.TP
+.B \-x
+Mark \fIname\fPs for export to subsequent commands via the environment.
+.PD
+.PP
+Using `+' instead of `\-'
+turns off the attribute instead, with the exception that \fB+a\fP
+may not be used to destroy an array variable. When used in a function,
+makes each
+\fIname\fP local, as with the
+.B local
+command.
+If a variable name is followed by =\fIvalue\fP, the value of
+the variable is set to \fIvalue\fP.
+The return value is 0 unless an invalid option is encountered,
+an attempt is made to define a function using
+.if n ``\-f foo=bar'',
+.if t \f(CW\-f foo=bar\fP,
+an attempt is made to assign a value to a readonly variable,
+an attempt is made to assign a value to an array variable without
+using the compound assignment syntax (see
+.B Arrays
+above), one of the \fInames\fP is not a valid shell variable name,
+an attempt is made to turn off readonly status for a readonly variable,
+an attempt is made to turn off array status for an array variable,
+or an attempt is made to display a non-existent function with \fB\-f\fP.
+.RE
+.TP
+.B dirs [\fB\-clpv\fP] [+\fIn\fP] [\-\fIn\fP]
+Without options, displays the list of currently remembered directories.
+The default display is on a single line with directory names separated
+by spaces.
+Directories are added to the list with the
+.B pushd
+command; the
+.B popd
+command removes entries from the list.
+.RS
+.PD 0
+.TP
+\fB+\fP\fIn\fP
+Displays the \fIn\fPth entry counting from the left of the list
+shown by
+.B dirs
+when invoked without options, starting with zero.
+.TP
+\fB\-\fP\fIn\fP
+Displays the \fIn\fPth entry counting from the right of the list
+shown by
+.B dirs
+when invoked without options, starting with zero.
+.TP
+.B \-c
+Clears the directory stack by deleting all of the entries.
+.TP
+.B \-l
+Produces a longer listing; the default listing format uses a
+tilde to denote the home directory.
+.TP
+.B \-p
+Print the directory stack with one entry per line.
+.TP
+.B \-v
+Print the directory stack with one entry per line,
+prefixing each entry with its index in the stack.
+.PD
+.PP
+The return value is 0 unless an
+invalid option is supplied or \fIn\fP indexes beyond the end
+of the directory stack.
+.RE
+.TP
+\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ...]
+Without options, each
+.I jobspec
+is removed from the table of active jobs.
+If the \fB\-h\fP option is given, each
+.I jobspec
+is not removed from the table, but is marked so that
+.SM
+.B SIGHUP
+is not sent to the job if the shell receives a
+.SM
+.BR SIGHUP .
+If no
+.I jobspec
+is present, and neither the
+.B \-a
+nor the
+.B \-r
+option is supplied, the \fIcurrent job\fP is used.
+If no
+.I jobspec
+is supplied, the
+.B \-a
+option means to remove or mark all jobs; the
+.B \-r
+option without a
+.I jobspec
+argument restricts operation to running jobs.
+The return value is 0 unless a
+.I jobspec
+does not specify a valid job.
+.TP
+\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]
+Output the \fIarg\fPs, separated by spaces, followed by a newline.
+The return status is always 0.
+If \fB\-n\fP is specified, the trailing newline is
+suppressed. If the \fB\-e\fP option is given, interpretation of
+the following backslash-escaped characters is enabled. The
+.B \-E
+option disables the interpretation of these escape characters,
+even on systems where they are interpreted by default.
+The \fBxpg_echo\fP shell option may be used to
+dynamically determine whether or not \fBecho\fP expands these
+escape characters by default.
+.B echo
+does not interpret
+.B \-\-
+to mean the end of options.
+.B echo
+interprets the following escape sequences:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ec
+suppress trailing newline
+.TP
+.B \ee
+an escape character
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+new line
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\e
+backslash
+.TP
+.B \e0\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(zero to three octal digits)
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three octal digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.PD
+.RE
+.TP
+\fBenable\fP [\fB\-adnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
+Enable and disable builtin shell commands.
+Disabling a builtin allows a disk command which has the same name
+as a shell builtin to be executed without specifying a full pathname,
+even though the shell normally searches for builtins before disk commands.
+If \fB\-n\fP is used, each \fIname\fP
+is disabled; otherwise,
+\fInames\fP are enabled. For example, to use the
+.B test
+binary found via the
+.SM
+.B PATH
+instead of the shell builtin version, run
+.if t \f(CWenable -n test\fP.
+.if n ``enable -n test''.
+The
+.B \-f
+option means to load the new builtin command
+.I name
+from shared object
+.IR filename ,
+on systems that support dynamic loading. The
+.B \-d
+option will delete a builtin previously loaded with
+.BR \-f .
+If no \fIname\fP arguments are given, or if the
+.B \-p
+option is supplied, a list of shell builtins is printed.
+With no other option arguments, the list consists of all enabled
+shell builtins.
+If \fB\-n\fP is supplied, only disabled builtins are printed.
+If \fB\-a\fP is supplied, the list printed includes all builtins, with an
+indication of whether or not each is enabled.
+If \fB\-s\fP is supplied, the output is restricted to the POSIX
+\fIspecial\fP builtins.
+The return value is 0 unless a
+.I name
+is not a shell builtin or there is an error loading a new builtin
+from a shared object.
+.TP
+\fBeval\fP [\fIarg\fP ...]
+The \fIarg\fPs are read and concatenated together into a single
+command. This command is then read and executed by the shell, and
+its exit status is returned as the value of
+.BR eval .
+If there are no
+.IR args ,
+or only null arguments,
+.B eval
+returns 0.
+.TP
+\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]]
+If
+.I command
+is specified, it replaces the shell.
+No new process is created. The
+.I arguments
+become the arguments to \fIcommand\fP.
+If the
+.B \-l
+option is supplied,
+the shell places a dash at the beginning of the zeroth arg passed to
+.IR command .
+This is what
+.IR login (1)
+does. The
+.B \-c
+option causes
+.I command
+to be executed with an empty environment. If
+.B \-a
+is supplied, the shell passes
+.I name
+as the zeroth argument to the executed command. If
+.I command
+cannot be executed for some reason, a non-interactive shell exits,
+unless the shell option
+.B execfail
+is enabled, in which case it returns failure.
+An interactive shell returns failure if the file cannot be executed.
+If
+.I command
+is not specified, any redirections take effect in the current shell,
+and the return status is 0. If there is a redirection error, the
+return status is 1.
+.TP
+\fBexit\fP [\fIn\fP]
+Cause the shell to exit
+with a status of \fIn\fP. If
+.I n
+is omitted, the exit status
+is that of the last command executed.
+A trap on
+.SM
+.B EXIT
+is executed before the shell terminates.
+.TP
+\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ...
+.PD 0
+.TP
+.B export \-p
+.PD
+The supplied
+.I names
+are marked for automatic export to the environment of
+subsequently executed commands. If the
+.B \-f
+option is given,
+the
+.I names
+refer to functions.
+If no
+.I names
+are given, or if the
+.B \-p
+option is supplied, a list
+of all names that are exported in this shell is printed.
+The
+.B \-n
+option causes the export property to be removed from the
+named variables.
+If a variable name is followed by =\fIword\fP, the value of
+the variable is set to \fIword\fP.
+.B export
+returns an exit status of 0 unless an invalid option is
+encountered,
+one of the \fInames\fP is not a valid shell variable name, or
+.B \-f
+is supplied with a
+.I name
+that is not a function.
+.TP
+\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-nlr\fP] [\fIfirst\fP] [\fIlast\fP]
+.PD 0
+.TP
+\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP]
+.PD
+Fix Command. In the first form, a range of commands from
+.I first
+to
+.I last
+is selected from the history list.
+.I First
+and
+.I last
+may be specified as a string (to locate the last command beginning
+with that string) or as a number (an index into the history list,
+where a negative number is used as an offset from the current
+command number). If
+.I last
+is not specified it is set to
+the current command for listing (so that
+.if n ``fc \-l \-10''
+.if t \f(CWfc \-l \-10\fP
+prints the last 10 commands) and to
+.I first
+otherwise.
+If
+.I first
+is not specified it is set to the previous
+command for editing and \-16 for listing.
+.sp 1
+The
+.B \-n
+option suppresses
+the command numbers when listing. The
+.B \-r
+option reverses the order of
+the commands. If the
+.B \-l
+option is given,
+the commands are listed on
+standard output. Otherwise, the editor given by
+.I ename
+is invoked
+on a file containing those commands. If
+.I ename
+is not given, the
+value of the
+.SM
+.B FCEDIT
+variable is used, and
+the value of
+.SM
+.B EDITOR
+if
+.SM
+.B FCEDIT
+is not set. If neither variable is set,
+.FN vi
+is used. When editing is complete, the edited commands are
+echoed and executed.
+.sp 1
+In the second form, \fIcommand\fP is re-executed after each instance
+of \fIpat\fP is replaced by \fIrep\fP.
+A useful alias to use with this is
+.if n ``r="fc -s"'',
+.if t \f(CWr='fc \-s'\fP,
+so that typing
+.if n ``r cc''
+.if t \f(CWr cc\fP
+runs the last command beginning with
+.if n ``cc''
+.if t \f(CWcc\fP
+and typing
+.if n ``r''
+.if t \f(CWr\fP
+re-executes the last command.
+.sp 1
+If the first form is used, the return value is 0 unless an invalid
+option is encountered or
+.I first
+or
+.I last
+specify history lines out of range.
+If the
+.B \-e
+option is supplied, the return value is the value of the last
+command executed or failure if an error occurs with the temporary
+file of commands. If the second form is used, the return status
+is that of the command re-executed, unless
+.I cmd
+does not specify a valid history line, in which case
+.B fc
+returns failure.
+.TP
+\fBfg\fP [\fIjobspec\fP]
+Resume
+.I jobspec
+in the foreground, and make it the current job.
+If
+.I jobspec
+is not present, the shell's notion of the \fIcurrent job\fP is used.
+The return value is that of the command placed into the foreground,
+or failure if run when job control is disabled or, when run with
+job control enabled, if
+.I jobspec
+does not specify a valid job or
+.I jobspec
+specifies a job that was started without job control.
+.TP
+\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIargs\fP]
+.B getopts
+is used by shell procedures to parse positional parameters.
+.I optstring
+contains the option characters to be recognized; if a character
+is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+The colon and question mark characters may not be used as
+option characters.
+Each time it is invoked,
+.B getopts
+places the next option in the shell variable
+.IR name ,
+initializing
+.I name
+if it does not exist,
+and the index of the next argument to be processed into the
+variable
+.SM
+.BR OPTIND .
+.SM
+.B OPTIND
+is initialized to 1 each time the shell or a shell script
+is invoked. When an option requires an argument,
+.B getopts
+places that argument into the variable
+.SM
+.BR OPTARG .
+The shell does not reset
+.SM
+.B OPTIND
+automatically; it must be manually reset between multiple
+calls to
+.B getopts
+within the same shell invocation if a new set of parameters
+is to be used.
+.sp 1
+When the end of options is encountered, \fBgetopts\fP exits with a
+return value greater than zero.
+\fBOPTIND\fP is set to the index of the first non-option argument,
+and \fBname\fP is set to ?.
+.sp 1
+.B getopts
+normally parses the positional parameters, but if more arguments are
+given in
+.IR args ,
+.B getopts
+parses those instead.
+.sp 1
+.B getopts
+can report errors in two ways. If the first character of
+.I optstring
+is a colon,
+.I silent
+error reporting is used. In normal operation diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable
+.SM
+.B OPTERR
+is set to 0, no error messages will be displayed, even if the first
+character of
+.I optstring
+is not a colon.
+.sp 1
+If an invalid option is seen,
+.B getopts
+places ? into
+.I name
+and, if not silent,
+prints an error message and unsets
+.SM
+.BR OPTARG .
+If
+.B getopts
+is silent,
+the option character found is placed in
+.SM
+.B OPTARG
+and no diagnostic message is printed.
+.sp 1
+If a required argument is not found, and
+.B getopts
+is not silent,
+a question mark (\^\fB?\fP\^) is placed in
+.IR name ,
+.SM
+.B OPTARG
+is unset, and a diagnostic message is printed.
+If
+.B getopts
+is silent, then a colon (\^\fB:\fP\^) is placed in
+.I name
+and
+.SM
+.B OPTARG
+is set to the option character found.
+.sp 1
+.B getopts
+returns true if an option, specified or unspecified, is found.
+It returns false if the end of options is encountered or an
+error occurs.
+.TP
+\fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP]
+For each
+.IR name ,
+the full file name of the command is determined by searching
+the directories in
+.B $PATH
+and remembered.
+If the
+.B \-p
+option is supplied, no path search is performed, and
+.I filename
+is used as the full file name of the command.
+The
+.B \-r
+option causes the shell to forget all
+remembered locations.
+The
+.B \-d
+option causes the shell to forget the remembered location of each \fIname\fP.
+If the
+.B \-t
+option is supplied, the full pathname to which each \fIname\fP corresponds
+is printed. If multiple \fIname\fP arguments are supplied with \fB\-t\fP,
+the \fIname\fP is printed before the hashed full pathname.
+The
+.B \-l
+option causes output to be displayed in a format that may be reused as input.
+If no arguments are given, or if only \fB\-l\fP is supplied,
+information about remembered commands is printed.
+The return status is true unless a
+.I name
+is not found or an invalid option is supplied.
+.TP
+\fBhelp\fP [\fB\-s\fP] [\fIpattern\fP]
+Display helpful information about builtin commands. If
+.I pattern
+is specified,
+.B help
+gives detailed help on all commands matching
+.IR pattern ;
+otherwise help for all the builtins and shell control structures
+is printed.
+The \fB\-s\fP option restricts the information displayed to a short
+usage synopsis.
+The return status is 0 unless no command matches
+.IR pattern .
+.TP
+\fBhistory [\fIn\fP]
+.PD 0
+.TP
+\fBhistory\fP \fB\-c\fP
+.TP
+\fBhistory \-d\fP \fIoffset\fP
+.TP
+\fBhistory\fP \fB\-anrw\fP [\fIfilename\fP]
+.TP
+\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP]
+.TP
+\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP]
+.PD
+With no options, display the command
+history list with line numbers. Lines listed
+with a
+.B *
+have been modified. An argument of
+.I n
+lists only the last
+.I n
+lines. If \fIfilename\fP is supplied, it is used as the
+name of the history file; if not, the value of
+.SM
+.B HISTFILE
+is used. Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-c
+Clear the history list by deleting all the entries.
+.TP
+\fB\-d\fP \fIoffset\fP
+Delete the history entry at position \fIoffset\fP.
+.TP
+.B \-a
+Append the ``new'' history lines (history lines entered since the
+beginning of the current \fBbash\fP session) to the history file.
+.TP
+.B \-n
+Read the history lines not already read from the history
+file into the current history list. These are lines
+appended to the history file since the beginning of the
+current \fBbash\fP session.
+.TP
+.B \-r
+Read the contents of the history file
+and use them as the current history.
+.TP
+.B \-w
+Write the current history to the history file, overwriting the
+history file's contents.
+.TP
+.B \-p
+Perform history substitution on the following \fIargs\fP and display
+the result on the standard output.
+Does not store the results in the history list.
+Each \fIarg\fP must be quoted to disable normal history expansion.
+.TP
+.B \-s
+Store the
+.I args
+in the history list as a single entry. The last command in the
+history list is removed before the
+.I args
+are added.
+.PD
+.PP
+The return value is 0 unless an invalid option is encountered, an
+error occurs while reading or writing the history file, an invalid
+\fIoffset\fP is supplied as an argument to \fB\-d\fP, or the
+history expansion supplied as an argument to \fB\-p\fP fails.
+.RE
+.TP
+\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ]
+.PD 0
+.TP
+\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ]
+.PD
+The first form lists the active jobs. The options have the following
+meanings:
+.RS
+.PD 0
+.TP
+.B \-l
+List process IDs
+in addition to the normal information.
+.TP
+.B \-p
+List only the process ID of the job's process group
+leader.
+.TP
+.B \-n
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+.TP
+.B \-r
+Restrict output to running jobs.
+.TP
+.B \-s
+Restrict output to stopped jobs.
+.PD
+.PP
+If
+.I jobspec
+is given, output is restricted to information about that job.
+The return status is 0 unless an invalid option is encountered
+or an invalid
+.I jobspec
+is supplied.
+.PP
+If the
+.B \-x
+option is supplied,
+.B jobs
+replaces any
+.I jobspec
+found in
+.I command
+or
+.I args
+with the corresponding process group ID, and executes
+.I command
+passing it
+.IR args ,
+returning its exit status.
+.RE
+.TP
+\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ...
+.PD 0
+.TP
+\fBkill\fP \fB\-l\fP [\fIsigspec\fP | \fIexit_status\fP]
+.PD
+Send the signal named by
+.I sigspec
+or
+.I signum
+to the processes named by
+.I pid
+or
+.IR jobspec .
+.I sigspec
+is either a signal name such as
+.SM
+.B SIGKILL
+or a signal number;
+.I signum
+is a signal number. If
+.I sigspec
+is a signal name, the name may be
+given with or without the
+.SM
+.B SIG
+prefix.
+If
+.I sigspec
+is not present, then
+.SM
+.B SIGTERM
+is assumed.
+An argument of
+.B \-l
+lists the signal names.
+If any arguments are supplied when
+.B \-l
+is given, the names of the signals corresponding to the arguments are
+listed, and the return status is 0.
+The \fIexit_status\fP argument to
+.B \-l
+is a number specifying either a signal number or the exit status of
+a process terminated by a signal.
+.B kill
+returns true if at least one signal was successfully sent, or false
+if an error occurs or an invalid option is encountered.
+.TP
+\fBlet\fP \fIarg\fP [\fIarg\fP ...]
+Each
+.I arg
+is an arithmetic expression to be evaluated (see
+.SM
+.BR "ARITHMETIC EVALUATION" ).
+If the last
+.I arg
+evaluates to 0,
+.B let
+returns 1; 0 is returned otherwise.
+.TP
+\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ...]
+For each argument, a local variable named
+.I name
+is created, and assigned
+.IR value .
+The \fIoption\fP can be any of the options accepted by \fBdeclare\fP.
+When
+.B local
+is used within a function, it causes the variable
+.I name
+to have a visible scope restricted to that function and its children.
+With no operands,
+.B local
+writes a list of local variables to the standard output. It is
+an error to use
+.B local
+when not within a function. The return status is 0 unless
+.B local
+is used outside a function, an invalid
+.I name
+is supplied, or
+\fIname\fP is a readonly variable.
+.TP
+.B logout
+Exit a login shell.
+.TP
+\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP]
+Removes entries from the directory stack. With no arguments,
+removes the top directory from the stack, and performs a
+.B cd
+to the new top directory.
+Arguments, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+\fB+\fP\fIn\fP
+Removes the \fIn\fPth entry counting from the left of the list
+shown by
+.BR dirs ,
+starting with zero. For example:
+.if n ``popd +0''
+.if t \f(CWpopd +0\fP
+removes the first directory,
+.if n ``popd +1''
+.if t \f(CWpopd +1\fP
+the second.
+.TP
+\fB\-\fP\fIn\fP
+Removes the \fIn\fPth entry counting from the right of the list
+shown by
+.BR dirs ,
+starting with zero. For example:
+.if n ``popd -0''
+.if t \f(CWpopd -0\fP
+removes the last directory,
+.if n ``popd -1''
+.if t \f(CWpopd -1\fP
+the next to last.
+.TP
+.B \-n
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+.PD
+.PP
+If the
+.B popd
+command is successful, a
+.B dirs
+is performed as well, and the return status is 0.
+.B popd
+returns false if an invalid option is encountered, the directory stack
+is empty, a non-existent directory stack entry is specified, or the
+directory change fails.
+.RE
+.TP
+\fBprintf\fP \fIformat\fP [\fIarguments\fP]
+Write the formatted \fIarguments\fP to the standard output under the
+control of the \fIformat\fP.
+The \fIformat\fP is a character string which contains three types of objects:
+plain characters, which are simply copied to standard output, character
+escape sequences, which are converted and copied to the standard output, and
+format specifications, each of which causes printing of the next successive
+\fIargument\fP.
+In addition to the standard \fIprintf\fP(1) formats, \fB%b\fP causes
+\fBprintf\fP to expand backslash escape sequences in the corresponding
+\fIargument\fP, and \fB%q\fP causes \fBprintf\fP to output the corresponding
+\fIargument\fP in a format that can be reused as shell input.
+.sp 1
+The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP.
+If the \fIformat\fP requires more \fIarguments\fP than are supplied, the
+extra format specifications behave as if a zero value or null string, as
+appropriate, had been supplied. The return value is zero on success,
+non-zero on failure.
+.TP
+\fBpushd\fP [\fB\-n\fP] [\fIdir\fP]
+.PD 0
+.TP
+\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
+.PD
+Adds a directory to the top of the directory stack, or rotates
+the stack, making the new top of the stack the current working
+directory. With no arguments, exchanges the top two directories
+and returns 0, unless the directory stack is empty.
+Arguments, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+\fB+\fP\fIn\fP
+Rotates the stack so that the \fIn\fPth directory
+(counting from the left of the list shown by
+.BR dirs ,
+starting with zero)
+is at the top.
+.TP
+\fB\-\fP\fIn\fP
+Rotates the stack so that the \fIn\fPth directory
+(counting from the right of the list shown by
+.BR dirs ,
+starting with zero) is at the top.
+.TP
+.B \-n
+Suppresses the normal change of directory when adding directories
+to the stack, so that only the stack is manipulated.
+.TP
+.I dir
+Adds
+.I dir
+to the directory stack at the top, making it the
+new current working directory.
+.PD
+.PP
+If the
+.B pushd
+command is successful, a
+.B dirs
+is performed as well.
+If the first form is used,
+.B pushd
+returns 0 unless the cd to
+.I dir
+fails. With the second form,
+.B pushd
+returns 0 unless the directory stack is empty,
+a non-existent directory stack element is specified,
+or the directory change to the specified new current directory
+fails.
+.RE
+.TP
+\fBpwd\fP [\fB\-LP\fP]
+Print the absolute pathname of the current working directory.
+The pathname printed contains no symbolic links if the
+.B \-P
+option is supplied or the
+.B \-o physical
+option to the
+.B set
+builtin command is enabled.
+If the
+.B \-L
+option is used, the pathname printed may contain symbolic links.
+The return status is 0 unless an error occurs while
+reading the name of the current directory or an
+invalid option is supplied.
+.TP
+\fBread\fP [\fB\-ers\fP] [\fB\-u\fP \fIfd\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-a\fP \fIaname\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-n\fP \fInchars\fP] [\fB\-d\fP \fIdelim\fP] [\fIname\fP ...]
+One line is read from the standard input, or from the file descriptor
+\fIfd\fP supplied as an argument to the \fB\-u\fP option, and the first word
+is assigned to the first
+.IR name ,
+the second word to the second
+.IR name ,
+and so on, with leftover words and their intervening separators assigned
+to the last
+.IR name .
+If there are fewer words read from the input stream than names,
+the remaining names are assigned empty values.
+The characters in
+.SM
+.B IFS
+are used to split the line into words.
+The backslash character (\fB\e\fP) may be used to remove any special
+meaning for the next character read and for line continuation.
+Options, if supplied, have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-a \fIaname\fP
+The words are assigned to sequential indices
+of the array variable
+.IR aname ,
+starting at 0.
+.I aname
+is unset before any new values are assigned.
+Other \fIname\fP arguments are ignored.
+.TP
+.B \-d \fIdelim\fP
+The first character of \fIdelim\fP is used to terminate the input line,
+rather than newline.
+.TP
+.B \-e
+If the standard input
+is coming from a terminal,
+.B readline
+(see
+.SM
+.B READLINE
+above) is used to obtain the line.
+.TP
+.B \-n \fInchars\fP
+\fBread\fP returns after reading \fInchars\fP characters rather than
+waiting for a complete line of input.
+.TP
+.B \-p \fIprompt\fP
+Display \fIprompt\fP on standard error, without a
+trailing newline, before attempting to read any input. The prompt
+is displayed only if input is coming from a terminal.
+.TP
+.B \-r
+Backslash does not act as an escape character.
+The backslash is considered to be part of the line.
+In particular, a backslash-newline pair may not be used as a line
+continuation.
+.TP
+.B \-s
+Silent mode. If input is coming from a terminal, characters are
+not echoed.
+.TP
+.B \-t \fItimeout\fP
+Cause \fBread\fP to time out and return failure if a complete line of
+input is not read within \fItimeout\fP seconds.
+This option has no effect if \fBread\fP is not reading input from the
+terminal or a pipe.
+.TP
+.B \-u \fIfd\FP
+Read input from file descriptor \fIfd\fP.
+.PD
+.PP
+If no
+.I names
+are supplied, the line read is assigned to the variable
+.SM
+.BR REPLY .
+The return code is zero, unless end-of-file is encountered, \fBread\fP
+times out, or an invalid file descriptor is supplied as the argument to
+\fB\-u\fP.
+.RE
+.TP
+\fBreadonly\fP [\fB\-apf\fP] [\fIname\fP[=\fIword\fP] ...]
+.PD
+The given
+\fInames\fP are marked readonly; the values of these
+.I names
+may not be changed by subsequent assignment.
+If the
+.B \-f
+option is supplied, the functions corresponding to the
+\fInames\fP are so
+marked.
+The
+.B \-a
+option restricts the variables to arrays.
+If no
+.I name
+arguments are given, or if the
+.B \-p
+option is supplied, a list of all readonly names is printed.
+The
+.B \-p
+option causes output to be displayed in a format that
+may be reused as input.
+If a variable name is followed by =\fIword\fP, the value of
+the variable is set to \fIword\fP.
+The return status is 0 unless an invalid option is encountered,
+one of the
+.I names
+is not a valid shell variable name, or
+.B \-f
+is supplied with a
+.I name
+that is not a function.
+.TP
+\fBreturn\fP [\fIn\fP]
+Causes a function to exit with the return value specified by
+.IR n .
+If
+.I n
+is omitted, the return status is that of the last command
+executed in the function body. If used outside a function,
+but during execution of a script by the
+.B .
+(\fBsource\fP) command, it causes the shell to stop executing
+that script and return either
+.I n
+or the exit status of the last command executed within the
+script as the exit status of the script. If used outside a
+function and not during execution of a script by \fB.\fP\^,
+the return status is false.
+Any command associated with the \fBRETURN\fP trap is executed
+before execution resumes after the function or script.
+.TP
+\fBset\fP [\fB\-\-abefhkmnptuvxBCHP\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
+Without options, the name and value of each shell variable are displayed
+in a format that can be reused as input.
+The output is sorted according to the current locale.
+When options are specified, they set or unset shell attributes.
+Any arguments remaining after the options are processed are treated
+as values for the positional parameters and are assigned, in order, to
+.BR $1 ,
+.BR $2 ,
+.B ...
+.BR $\fIn\fP .
+Options, if specified, have the following meanings:
+.RS
+.PD 0
+.TP 8
+.B \-a
+Automatically mark variables and functions which are modified or created
+for export to the environment of subsequent commands.
+.TP 8
+.B \-b
+Report the status of terminated background jobs
+immediately, rather than before the next primary prompt. This is
+effective only when job control is enabled.
+.TP 8
+.B \-e
+Exit immediately if a \fIsimple command\fP (see
+.SM
+.B SHELL GRAMMAR
+above) exits with a non-zero status.
+The shell does not exit if the
+command that fails is part of the command list immediately following a
+.B while
+or
+.B until
+keyword,
+part of the test in an
+.I if
+statement, part of a
+.B &&
+or
+.B \(bv\(bv
+list, or if the command's return value is
+being inverted via
+.BR ! .
+A trap on \fBERR\fP, if set, is executed before the shell exits.
+.TP 8
+.B \-f
+Disable pathname expansion.
+.TP 8
+.B \-h
+Remember the location of commands as they are looked up for execution.
+This is enabled by default.
+.TP 8
+.B \-k
+All arguments in the form of assignment statements
+are placed in the environment for a command, not just
+those that precede the command name.
+.TP 8
+.B \-m
+Monitor mode. Job control is enabled. This option is on
+by default for interactive shells on systems that support
+it (see
+.SM
+.B JOB CONTROL
+above). Background processes run in a separate process
+group and a line containing their exit status is printed
+upon their completion.
+.TP 8
+.B \-n
+Read commands but do not execute them. This may be used to
+check a shell script for syntax errors. This is ignored by
+interactive shells.
+.TP 8
+.B \-o \fIoption\-name\fP
+The \fIoption\-name\fP can be one of the following:
+.RS
+.TP 8
+.B allexport
+Same as
+.BR \-a .
+.TP 8
+.B braceexpand
+Same as
+.BR \-B .
+.TP 8
+.B emacs
+Use an emacs-style command line editing interface. This is enabled
+by default when the shell is interactive, unless the shell is started
+with the
+.B \-\-noediting
+option.
+.TP 8
+.B errtrace
+Same as
+.BR \-E .
+.TP 8
+.B functrace
+Same as
+.BR \-T .
+.TP 8
+.B errexit
+Same as
+.BR \-e .
+.TP 8
+.B hashall
+Same as
+.BR \-h .
+.TP 8
+.B histexpand
+Same as
+.BR \-H .
+.TP 8
+.B history
+Enable command history, as described above under
+.SM
+.BR HISTORY .
+This option is on by default in interactive shells.
+.TP 8
+.B ignoreeof
+The effect is as if the shell command
+.if t \f(CWIGNOREEOF=10\fP
+.if n ``IGNOREEOF=10''
+had been executed
+(see
+.B Shell Variables
+above).
+.TP 8
+.B keyword
+Same as
+.BR \-k .
+.TP 8
+.B monitor
+Same as
+.BR \-m .
+.TP 8
+.B noclobber
+Same as
+.BR \-C .
+.TP 8
+.B noexec
+Same as
+.BR \-n .
+.TP 8
+.B noglob
+Same as
+.BR \-f .
+.B nolog
+Currently ignored.
+.TP 8
+.B notify
+Same as
+.BR \-b .
+.TP 8
+.B nounset
+Same as
+.BR \-u .
+.TP 8
+.B onecmd
+Same as
+.BR \-t .
+.TP 8
+.B physical
+Same as
+.BR \-P .
+.TP 8
+.B posix
+Change the behavior of
+.B bash
+where the default operation differs
+from the POSIX 1003.2 standard to match the standard (\fIposix mode\fP).
+.TP 8
+.B privileged
+Same as
+.BR \-p .
+.TP 8
+.B verbose
+Same as
+.BR \-v .
+.TP 8
+.B vi
+Use a vi-style command line editing interface.
+.TP 8
+.B xtrace
+Same as
+.BR \-x .
+.sp .5
+.PP
+If
+.B \-o
+is supplied with no \fIoption\-name\fP, the values of the current options are
+printed.
+If
+.B +o
+is supplied with no \fIoption\-name\fP, a series of
+.B set
+commands to recreate the current option settings is displayed on
+the standard output.
+.RE
+.TP 8
+.B \-p
+Turn on
+.I privileged
+mode. In this mode, the
+.SM
+.B $ENV
+and
+.SM
+.B $BASH_ENV
+files are not processed, shell functions are not inherited from the
+environment, and the
+.SM
+.B SHELLOPTS
+variable, if it appears in the environment, is ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the \fB\-p\fP option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the \fB\-p\fP option is supplied at startup, the effective user id is
+not reset.
+Turning this option off causes the effective user
+and group ids to be set to the real user and group ids.
+.TP 8
+.B \-t
+Exit after reading and executing one command.
+.TP 8
+.B \-u
+Treat unset variables as an error when performing
+parameter expansion. If expansion is attempted on an
+unset variable, the shell prints an error message, and,
+if not interactive, exits with a non-zero status.
+.TP 8
+.B \-v
+Print shell input lines as they are read.
+.TP 8
+.B \-x
+After expanding each \fIsimple command\fP,
+\fBfor\fP command, \fBcase\fP command, \fBselect\fP command, or
+arithmetic \fBfor\fP command, display the expanded value of
+.SM
+.BR PS4 ,
+followed by the command and its expanded arguments
+or associated word list.
+.TP 8
+.B \-B
+The shell performs brace expansion (see
+.B Brace Expansion
+above). This is on by default.
+.TP 8
+.B \-C
+If set,
+.B bash
+does not overwrite an existing file with the
+.BR > ,
+.BR >& ,
+and
+.B <>
+redirection operators. This may be overridden when
+creating output files by using the redirection operator
+.B >|
+instead of
+.BR > .
+.TP 8
+.B \-E
+If set, any trap on \fBERR\fP is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The \fBERR\fP trap is normally not inherited in such cases.
+.TP 8
+.B \-H
+Enable
+.B !
+style history substitution. This option is on by
+default when the shell is interactive.
+.TP 8
+.B \-P
+If set, the shell does not follow symbolic links when executing
+commands such as
+.B cd
+that change the current working directory. It uses the
+physical directory structure instead. By default,
+.B bash
+follows the logical chain of directories when performing commands
+which change the current directory.
+.TP 8
+.B \-T
+If set, any trap on \fBDEBUG\fP is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The \fBDEBUG\fP trap is normally not inherited in such cases.
+.TP 8
+.B \-\-
+If no arguments follow this option, then the positional parameters are
+unset. Otherwise, the positional parameters are set to the
+\fIarg\fPs, even if some of them begin with a
+.BR \- .
+.TP 8
+.B \-
+Signal the end of options, cause all remaining \fIarg\fPs to be
+assigned to the positional parameters. The
+.B \-x
+and
+.B \-v
+options are turned off.
+If there are no \fIarg\fPs,
+the positional parameters remain unchanged.
+.PD
+.PP
+The options are off by default unless otherwise noted.
+Using + rather than \- causes these options to be turned off.
+The options can also be specified as arguments to an invocation of
+the shell.
+The current set of options may be found in
+.BR $\- .
+The return status is always true unless an invalid option is encountered.
+.RE
+.TP
+\fBshift\fP [\fIn\fP]
+The positional parameters from \fIn\fP+1 ... are renamed to
+.B $1
+.B ....
+Parameters represented by the numbers \fB$#\fP
+down to \fB$#\fP\-\fIn\fP+1 are unset.
+.I n
+must be a non-negative number less than or equal to \fB$#\fP.
+If
+.I n
+is 0, no parameters are changed.
+If
+.I n
+is not given, it is assumed to be 1.
+If
+.I n
+is greater than \fB$#\fP, the positional parameters are not changed.
+The return status is greater than zero if
+.I n
+is greater than
+.B $#
+or less than zero; otherwise 0.
+.TP
+\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...]
+Toggle the values of variables controlling optional shell behavior.
+With no options, or with the
+.B \-p
+option, a list of all settable options is displayed, with
+an indication of whether or not each is set.
+The \fB\-p\fP option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+.RS
+.PD 0
+.TP
+.B \-s
+Enable (set) each \fIoptname\fP.
+.TP
+.B \-u
+Disable (unset) each \fIoptname\fP.
+.TP
+.B \-q
+Suppresses normal output (quiet mode); the return status indicates
+whether the \fIoptname\fP is set or unset.
+If multiple \fIoptname\fP arguments are given with
+.BR \-q ,
+the return status is zero if all \fIoptnames\fP are enabled; non-zero
+otherwise.
+.TP
+.B \-o
+Restricts the values of \fIoptname\fP to be those defined for the
+.B \-o
+option to the
+.B set
+builtin.
+.PD
+.PP
+If either
+.B \-s
+or
+.B \-u
+is used with no \fIoptname\fP arguments, the display is limited to
+those options which are set or unset, respectively.
+Unless otherwise noted, the \fBshopt\fP options are disabled (unset)
+by default.
+.PP
+The return status when listing options is zero if all \fIoptnames\fP
+are enabled, non-zero otherwise. When setting or unsetting options,
+the return status is zero unless an \fIoptname\fP is not a valid shell
+option.
+.PP
+The list of \fBshopt\fP options is:
+.if t .sp .5v
+.if n .sp 1v
+.PD 0
+.TP 8
+.B cdable_vars
+If set, an argument to the
+.B cd
+builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+.TP 8
+.B cdspell
+If set, minor errors in the spelling of a directory component in a
+.B cd
+command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and one character too many.
+If a correction is found, the corrected file name is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+.TP 8
+.B checkhash
+If set, \fBbash\fP checks that a command found in the hash
+table exists before trying to execute it. If a hashed command no
+longer exists, a normal path search is performed.
+.TP 8
+.B checkwinsize
+If set, \fBbash\fP checks the window size after each command
+and, if necessary, updates the values of
+.SM
+.B LINES
+and
+.SM
+.BR COLUMNS .
+.TP 8
+.B cmdhist
+If set,
+.B bash
+attempts to save all lines of a multiple-line
+command in the same history entry. This allows
+easy re-editing of multi-line commands.
+.TP 8
+.B dotglob
+If set,
+.B bash
+includes filenames beginning with a `.' in the results of pathname
+expansion.
+.TP 8
+.B execfail
+If set, a non-interactive shell will not exit if
+it cannot execute the file specified as an argument to the
+.B exec
+builtin command. An interactive shell does not exit if
+.B exec
+fails.
+.TP 8
+.B expand_aliases
+If set, aliases are expanded as described above under
+.SM
+.BR ALIASES .
+This option is enabled by default for interactive shells.
+.TP 8
+.B extdebug
+If set, behavior intended for use by debuggers is enabled:
+.RS
+.TP
+.B 1.
+The \fB\-F\fP option to the \fBdeclare\fP builtin displays the source
+file name and line number corresponding to each function name supplied
+as an argument.
+.TP
+.B 2.
+If the command run by the \fBDEBUG\fP trap returns a non-zero value, the
+next command is skipped and not executed.
+.TP
+.B 3.
+If the command run by the \fBDEBUG\fP trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the \fB.\fP or \fBsource\fP builtins), a call to
+\fBreturn\fP is simulated.
+.RE
+.TP 8
+.B extglob
+If set, the extended pattern matching features described above under
+\fBPathname Expansion\fP are enabled.
+.TP 8
+.B extquote
+If set, \fB$\fP'\fIstring\fP' and \fB$\fP"\fIstring\fP" quoting is
+performed within \fB${\fP\fIparameter\fP\fB}\fP expansions
+enclosed in double quotes. This option is enabled by default.
+.TP 8
+.B histappend
+If set, the history list is appended to the file named by the value
+of the
+.B HISTFILE
+variable when the shell exits, rather than overwriting the file.
+.TP 8
+.B histreedit
+If set, and
+.B readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+.TP 8
+.B histverify
+If set, and
+.B readline
+is being used, the results of history substitution are not immediately
+passed to the shell parser. Instead, the resulting line is loaded into
+the \fBreadline\fP editing buffer, allowing further modification.
+.TP 8
+.B hostcomplete
+If set, and
+.B readline
+is being used, \fBbash\fP will attempt to perform hostname completion when a
+word containing a \fB@\fP is being completed (see
+.B Completing
+under
+.SM
+.B READLINE
+above).
+This is enabled by default.
+.TP 8
+.B huponexit
+If set, \fBbash\fP will send
+.SM
+.B SIGHUP
+to all jobs when an interactive login shell exits.
+.TP 8
+.B interactive_comments
+If set, allow a word beginning with
+.B #
+to cause that word and all remaining characters on that
+line to be ignored in an interactive shell (see
+.SM
+.B COMMENTS
+above). This option is enabled by default.
+.TP 8
+.B lithist
+If set, and the
+.B cmdhist
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+.TP 8
+.B login_shell
+The shell sets this option if it is started as a login shell (see
+.SM
+.B "INVOCATION"
+above).
+The value may not be changed.
+.TP 8
+.B mailwarn
+If set, and a file that \fBbash\fP is checking for mail has been
+accessed since the last time it was checked, the message ``The mail in
+\fImailfile\fP has been read'' is displayed.
+.TP 8
+.B no_empty_cmd_completion
+If set, and
+.B readline
+is being used,
+.B bash
+will not attempt to search the \fBPATH\fP for possible completions when
+completion is attempted on an empty line.
+.TP 8
+.B nocaseglob
+If set,
+.B bash
+matches filenames in a case\-insensitive fashion when performing pathname
+expansion (see
+.B Pathname Expansion
+above).
+.TP 8
+.B nullglob
+If set,
+.B bash
+allows patterns which match no
+files (see
+.B Pathname Expansion
+above)
+to expand to a null string, rather than themselves.
+.TP 8
+.B progcomp
+If set, the programmable completion facilities (see
+\fBProgrammable Completion\fP above) are enabled.
+This option is enabled by default.
+.TP 8
+.B promptvars
+If set, prompt strings undergo variable and parameter expansion after
+being expanded as described in
+.SM
+.B PROMPTING
+above. This option is enabled by default.
+.TP 8
+.B restricted_shell
+The shell sets this option if it is started in restricted mode (see
+.SM
+.B "RESTRICTED SHELL"
+below).
+The value may not be changed.
+This is not reset when the startup files are executed, allowing
+the startup files to discover whether or not a shell is restricted.
+.TP 8
+.B shift_verbose
+If set, the
+.B shift
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+.TP 8
+.B sourcepath
+If set, the
+\fBsource\fP (\fB.\fP) builtin uses the value of
+.SM
+.B PATH
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+.TP 8
+.B xpg_echo
+If set, the \fBecho\fP builtin expands backslash-escape sequences
+by default.
+.RE
+.TP
+\fBsuspend\fP [\fB\-f\fP]
+Suspend the execution of this shell until it receives a
+.SM
+.B SIGCONT
+signal. The
+.B \-f
+option says not to complain if this is
+a login shell; just suspend anyway. The return status is 0 unless
+the shell is a login shell and
+.B \-f
+is not supplied, or if job control is not enabled.
+.TP
+\fBtest\fP \fIexpr\fP
+.PD 0
+.TP
+\fB[\fP \fIexpr\fP \fB]\fP
+Return a status of 0 or 1 depending on
+the evaluation of the conditional expression
+.IR expr .
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described above under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" .
+.if t .sp 0.5
+.if n .sp 1
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence.
+.RS
+.PD 0
+.TP
+.B ! \fIexpr\fP
+True if
+.I expr
+is false.
+.TP
+.B ( \fIexpr\fP )
+Returns the value of \fIexpr\fP.
+This may be used to override the normal precedence of operators.
+.TP
+\fIexpr1\fP \-\fBa\fP \fIexpr2\fP
+True if both
+.I expr1
+and
+.I expr2
+are true.
+.TP
+\fIexpr1\fP \-\fBo\fP \fIexpr2\fP
+True if either
+.I expr1
+or
+.I expr2
+is true.
+.PD
+.PP
+\fBtest\fP and \fB[\fP evaluate conditional
+expressions using a set of rules based on the number of arguments.
+.if t .sp 0.5
+.if n .sp 1
+.PD 0
+.TP
+0 arguments
+The expression is false.
+.TP
+1 argument
+The expression is true if and only if the argument is not null.
+.TP
+2 arguments
+If the first argument is \fB!\fP, the expression is true if and
+only if the second argument is null.
+If the first argument is one of the unary conditional operators listed above
+under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" ,
+the expression is true if the unary test is true.
+If the first argument is not a valid unary conditional operator, the expression
+is false.
+.TP
+3 arguments
+If the second argument is one of the binary conditional operators listed above
+under
+.SM
+.BR "CONDITIONAL EXPRESSIONS" ,
+the result of the expression is the result of the binary test using
+the first and third arguments as operands.
+If the first argument is \fB!\fP, the value is the negation of
+the two-argument test using the second and third arguments.
+If the first argument is exactly \fB(\fP and the third argument is
+exactly \fB)\fP, the result is the one-argument test of the second
+argument.
+Otherwise, the expression is false.
+The \fB\-a\fP and \fB\-o\fP operators are considered binary operators
+in this case.
+.TP
+4 arguments
+If the first argument is \fB!\fP, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+Otherwise, the expression is parsed and evaluated according to
+precedence using the rules listed above.
+.TP
+5 or more arguments
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+.RE
+.PD
+.TP
+.B times
+Print the accumulated user and system times for the shell and
+for processes run from the shell. The return status is 0.
+.TP
+\fBtrap\fP [\fB\-lp\fP] [\fIarg\fP] [\fIsigspec\fP ...]
+The command
+.I arg
+is to be read and executed when the shell receives
+signal(s)
+.IR sigspec .
+If
+.I arg
+is absent or
+.BR \- ,
+all specified signals are
+reset to their original values (the values they had
+upon entrance to the shell).
+If
+.I arg
+is the null string the signal specified by each
+.I sigspec
+is ignored by the shell and by the commands it invokes.
+If
+.I arg
+is not present and
+.B \-p
+has been supplied, then the trap commands associated with each
+.I sigspec
+are displayed.
+If no arguments are supplied or if only
+.B \-p
+is given,
+.B trap
+prints the list of commands associated with each signal number.
+The
+.B \-l
+option causes the shell to print a list of signal names and
+their corresponding numbers.
+Each
+.I sigspec
+is either
+a signal name defined in <\fIsignal.h\fP>, or a signal number.
+If a
+.I sigspec
+is
+.SM
+.B EXIT
+(0) the command
+.I arg
+is executed on exit from the shell.
+If a
+.I sigspec
+is
+.SM
+.BR DEBUG ,
+the command
+.I arg
+is executed before every \fIsimple command\fP, \fIfor\fP command,
+\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP
+command, and before the first command executes in a shell function (see
+.SM
+.B SHELL GRAMMAR
+above).
+Refer to the description of the \fBextglob\fP option to the
+\fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap.
+If a
+.I sigspec
+is
+.SM
+.BR ERR ,
+the command
+.I arg
+is executed whenever a simple command has a non\-zero exit status.
+The
+.SM
+.B ERR
+trap is not executed if the failed
+command is part of the command list immediately following a
+.B while
+or
+.B until
+keyword,
+part of the test in an
+.I if
+statement, part of a
+.B &&
+or
+.B \(bv\(bv
+list, or if the command's return value is
+being inverted via
+.BR ! .
+If a
+.I sigspec
+is
+.SM
+.BR RETURN ,
+the command
+.I arg
+is executed each time a shell function or a script executed with the
+\fB.\fP or \fBsource\fP builtins finishes executing.
+Signals ignored upon entry to the shell cannot be trapped or reset.
+Trapped signals are reset to their original values in a child
+process when it is created.
+The return status is false if any
+.I sigspec
+is invalid; otherwise
+.B trap
+returns true.
+.TP
+\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...]
+With no options,
+indicate how each
+.I name
+would be interpreted if used as a command name.
+If the
+.B \-t
+option is used,
+.B type
+prints a string which is one of
+.IR alias ,
+.IR keyword ,
+.IR function ,
+.IR builtin ,
+or
+.I file
+if
+.I name
+is an alias, shell reserved word, function, builtin, or disk file,
+respectively.
+If the
+.I name
+is not found, then nothing is printed, and an exit status of false
+is returned.
+If the
+.B \-p
+option is used,
+.B type
+either returns the name of the disk file
+that would be executed if
+.I name
+were specified as a command name,
+or nothing if
+.if t \f(CWtype -t name\fP
+.if n ``type -t name''
+would not return
+.IR file .
+The
+.B \-P
+option forces a
+.SM
+.B PATH
+search for each \fIname\fP, even if
+.if t \f(CWtype -t name\fP
+.if n ``type -t name''
+would not return
+.IR file .
+If a command is hashed,
+.B \-p
+and
+.B \-P
+print the hashed value, not necessarily the file that appears
+first in
+.SM
+.BR PATH .
+If the
+.B \-a
+option is used,
+.B type
+prints all of the places that contain
+an executable named
+.IR name .
+This includes aliases and functions,
+if and only if the
+.B \-p
+option is not also used.
+The table of hashed commands is not consulted
+when using
+.BR \-a .
+The
+.B \-f
+option suppresses shell function lookup, as with the \fBcommand\fP builtin.
+.B type
+returns true if any of the arguments are found, false if
+none are found.
+.TP
+\fBulimit\fP [\fB\-SHacdflmnpstuv\fP [\fIlimit\fP]]
+Provides control over the resources available to the shell and to
+processes started by it, on systems that allow such control.
+The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is
+set for the given resource. A hard limit cannot be increased once it
+is set; a soft limit may be increased up to the value of the hard limit.
+If neither \fB\-H\fP nor \fB\-S\fP is specified, both the soft and hard
+limits are set.
+The value of
+.I limit
+can be a number in the unit specified for the resource
+or one of the special values
+.BR hard ,
+.BR soft ,
+or
+.BR unlimited ,
+which stand for the current hard limit, the current soft limit, and
+no limit, respectively.
+If
+.I limit
+is omitted, the current value of the soft limit of the resource is
+printed, unless the \fB\-H\fP option is given. When more than one
+resource is specified, the limit name and unit are printed before the value.
+Other options are interpreted as follows:
+.RS
+.PD 0
+.TP
+.B \-a
+All current limits are reported
+.TP
+.B \-c
+The maximum size of core files created
+.TP
+.B \-d
+The maximum size of a process's data segment
+.TP
+.B \-f
+The maximum size of files created by the shell
+.TP
+.B \-l
+The maximum size that may be locked into memory
+.TP
+.B \-m
+The maximum resident set size
+.TP
+.B \-n
+The maximum number of open file descriptors (most systems do not
+allow this value to be set)
+.TP
+.B \-p
+The pipe size in 512-byte blocks (this may not be set)
+.TP
+.B \-s
+The maximum stack size
+.TP
+.B \-t
+The maximum amount of cpu time in seconds
+.TP
+.B \-u
+The maximum number of processes available to a single user
+.TP
+.B \-v
+The maximum amount of virtual memory available to the shell
+.PD
+.PP
+If
+.I limit
+is given, it is the new value of the specified resource (the
+.B \-a
+option is display only).
+If no option is given, then
+.B \-f
+is assumed. Values are in 1024-byte increments, except for
+.BR \-t ,
+which is in seconds,
+.BR \-p ,
+which is in units of 512-byte blocks,
+and
+.B \-n
+and
+.BR \-u ,
+which are unscaled values.
+The return status is 0 unless an invalid option or argument is supplied,
+or an error occurs while setting a new limit.
+.RE
+.TP
+\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP]
+The user file-creation mask is set to
+.IR mode .
+If
+.I mode
+begins with a digit, it
+is interpreted as an octal number; otherwise
+it is interpreted as a symbolic mode mask similar
+to that accepted by
+.IR chmod (1).
+If
+.I mode
+is omitted, the current value of the mask is printed.
+The
+.B \-S
+option causes the mask to be printed in symbolic form; the
+default output is an octal number.
+If the
+.B \-p
+option is supplied, and
+.I mode
+is omitted, the output is in a form that may be reused as input.
+The return status is 0 if the mode was successfully changed or if
+no \fImode\fP argument was supplied, and false otherwise.
+.TP
+\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...]
+Remove each \fIname\fP from the list of defined aliases. If
+.B \-a
+is supplied, all alias definitions are removed. The return
+value is true unless a supplied
+.I name
+is not a defined alias.
+.TP
+\fBunset\fP [\-\fBfv\fP] [\fIname\fP ...]
+For each
+.IR name ,
+remove the corresponding variable or function.
+If no options are supplied, or the
+.B \-v
+option is given, each
+.I name
+refers to a shell variable.
+Read-only variables may not be unset.
+If
+.B \-f
+is specifed,
+each
+.I name
+refers to a shell function, and the function definition
+is removed.
+Each unset variable or function is removed from the environment
+passed to subsequent commands.
+If any of
+.SM
+.BR RANDOM ,
+.SM
+.BR SECONDS ,
+.SM
+.BR LINENO ,
+.SM
+.BR HISTCMD ,
+.SM
+.BR FUNCNAME ,
+.SM
+.BR GROUPS ,
+or
+.SM
+.B DIRSTACK
+are unset, they lose their special properties, even if they are
+subsequently reset. The exit status is true unless a
+.I name
+is readonly.
+.TP
+\fBwait\fP [\fIn\fP]
+Wait for the specified process and return its termination
+status.
+.I n
+may be a process
+ID or a job specification; if a job spec is given, all processes
+in that job's pipeline are waited for. If
+.I n
+is not given, all currently active child processes
+are waited for, and the return status is zero. If
+.I n
+specifies a non-existent process or job, the return status is
+127. Otherwise, the return status is the exit status of the last
+process or job waited for.
+.\" bash_builtins
+.if \n(zZ=1 .ig zZ
+.SH "RESTRICTED SHELL"
+.\" rbash.1
+.zY
+.PP
+If
+.B bash
+is started with the name
+.BR rbash ,
+or the
+.B \-r
+option is supplied at invocation,
+the shell becomes restricted.
+A restricted shell is used to
+set up an environment more controlled than the standard shell.
+It behaves identically to
+.B bash
+with the exception that the following are disallowed or not performed:
+.IP \(bu
+changing directories with \fBcd\fP
+.IP \(bu
+setting or unsetting the values of
+.BR SHELL ,
+.BR PATH ,
+.BR ENV ,
+or
+.B BASH_ENV
+.IP \(bu
+specifying command names containing
+.B /
+.IP \(bu
+specifying a file name containing a
+.B /
+as an argument to the
+.B .
+builtin command
+.IP \(bu
+Specifying a filename containing a slash as an argument to the
+.B \-p
+option to the
+.B hash
+builtin command
+.IP \(bu
+importing function definitions from the shell environment at startup
+.IP \(bu
+parsing the value of \fBSHELLOPTS\fP from the shell environment at startup
+.IP \(bu
+redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
+.IP \(bu
+using the
+.B exec
+builtin command to replace the shell with another command
+.IP \(bu
+adding or deleting builtin commands with the
+.B \-f
+and
+.B \-d
+options to the
+.B enable
+builtin command
+.IP \(bu
+Using the \fBenable\fP builtin command to enable disabled shell builtins
+.IP \(bu
+specifying the
+.B \-p
+option to the
+.B command
+builtin command
+.IP \(bu
+turning off restricted mode with
+\fBset +r\fP or \fBset +o restricted\fP.
+.PP
+These restrictions are enforced after any startup files are read.
+.PP
+When a command that is found to be a shell script is executed (see
+.SM
+.B "COMMAND EXECUTION"
+above),
+.B rbash
+turns off any restrictions in the shell spawned to execute the
+script.
+.\" end of rbash.1
+.if \n(zY=1 .ig zY
+.SH "SEE ALSO"
+.PD 0
+.TP
+\fIBash Reference Manual\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE
+.TP
+\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1)
+.TP
+\fIemacs\fP(1), \fIvi\fP(1)
+.TP
+\fIreadline\fP(3)
+.PD
+.SH FILES
+.PD 0
+.TP
+.FN /bin/bash
+The \fBbash\fP executable
+.TP
+.FN /etc/profile
+The systemwide initialization file, executed for login shells
+.TP
+.FN ~/.bash_profile
+The personal initialization file, executed for login shells
+.TP
+.FN ~/.bashrc
+The individual per-interactive-shell startup file
+.TP
+.FN ~/.bash_logout
+The individual login shell cleanup file, executed when a login shell exits
+.TP
+.FN ~/.inputrc
+Individual \fIreadline\fP initialization file
+.PD
+.SH AUTHORS
+Brian Fox, Free Software Foundation
+.br
+bfox@gnu.org
+.PP
+Chet Ramey, Case Western Reserve University
+.br
+chet@po.CWRU.Edu
+.SH BUG REPORTS
+If you find a bug in
+.B bash,
+you should report it. But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of
+.BR bash .
+The latest version is always available from
+\fIftp://ftp.gnu.org/pub/bash/\fP.
+.PP
+Once you have determined that a bug actually exists, use the
+.I bashbug
+command to submit a bug report.
+If you have a fix, you are encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to \fIbug-bash@gnu.org\fP or posted to the Usenet
+newsgroup
+.BR gnu.bash.bug .
+.PP
+ALL bug reports should include:
+.PP
+.PD 0
+.TP 20
+The version number of \fBbash\fR
+.TP
+The hardware and operating system
+.TP
+The compiler used to compile
+.TP
+A description of the bug behaviour
+.TP
+A short script or `recipe' which exercises the bug
+.PD
+.PP
+.I bashbug
+inserts the first three items automatically into the template
+it provides for filing a bug report.
+.PP
+Comments and bug reports concerning
+this manual page should be directed to
+.IR chet@po.CWRU.Edu .
+.SH BUGS
+.PP
+It's too big and too slow.
+.PP
+There are some subtle differences between
+.B bash
+and traditional versions of
+.BR sh ,
+mostly because of the
+.SM
+.B POSIX
+specification.
+.PP
+Aliases are confusing in some uses.
+.PP
+Shell builtin commands and functions are not stoppable/restartable.
+.PP
+Compound commands and command sequences of the form `a ; b ; c'
+are not handled gracefully when process suspension is attempted.
+When a process is stopped, the shell immediately executes the next
+command in the sequence.
+It suffices to place the sequence of commands between
+parentheses to force it into a subshell, which may be stopped as
+a unit.
+.PP
+Commands inside of \fB$(\fP...\fB)\fP command substitution are not
+parsed until substitution is attempted. This will delay error
+reporting until some time after the command is entered.
+.PP
+Array variables may not (yet) be exported.
+.zZ
+.zY
</DL>
-
<A NAME="lbAK"> </A>
<H2>SHELL GRAMMAR</H2>
<DT><B>\V</B>
<DD>
-the release of <B>bash</B>, version + patchelvel (e.g., 2.00.0)
+the release of <B>bash</B>, version + patch level (e.g., 2.00.0)
<DT><B>\w</B>
<DD>
</DL>
<HR>
This document was created by man2html from bash.1.<BR>
-Time: 29 June 2004 10:37:49 EDT
+Time: 19 July 2004 16:04:22 EDT
</BODY>
</HTML>
%!PS-Adobe-3.0
%%Creator: groff version 1.18.1
-%%CreationDate: Tue Jun 29 10:37:28 2004
+%%CreationDate: Mon Jul 19 16:03:47 2004
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
144 180 Q F0(the username of the current user)27.66 E F1(\\v)144 192 Q
F0(the v)28.22 E(ersion of)-.15 E F1(bash)2.5 E F0(\(e.g., 2.00\))2.5 E
F1(\\V)144 204 Q F0(the release of)26 E F1(bash)2.5 E F0 2.5(,v)C
-(ersion + patchelv)-2.65 E(el \(e.g., 2.00.0\))-.15 E F1(\\w)144 216 Q
-F0(the current w)26 E(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F1
-($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde)-.25 E F1(\\W)144 228 Q
-F0(the basename of the current w)23.22 E(orking directory)-.1 E 2.5(,w)
--.65 G(ith)-2.5 E F1($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde)-.25
-E F1(\\!)144 240 Q F0(the history number of this command)29.89 E F1(\\#)
-144 252 Q F0(the command number of this command)28.22 E F1(\\$)144 264 Q
-F0(if the ef)28.22 E(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 276 Q/F2 10
+(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5(l\().15 G(e.g., 2.00.0\))
+-2.5 E F1(\\w)144 216 Q F0(the current w)26 E(orking directory)-.1 E 2.5
+(,w)-.65 G(ith)-2.5 E F1($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde)
+-.25 E F1(\\W)144 228 Q F0(the basename of the current w)23.22 E
+(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F1($HOME)2.5 E F0
+(abbre)2.5 E(viated with a tilde)-.25 E F1(\\!)144 240 Q F0
+(the history number of this command)29.89 E F1(\\#)144 252 Q F0
+(the command number of this command)28.22 E F1(\\$)144 264 Q F0
+(if the ef)28.22 E(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 276 Q/F2 10
/Times-Italic@0 SF(nnn)A F0
(the character corresponding to the octal number)18.22 E F2(nnn)2.5 E F1
(\\\\)144 288 Q F0 2.5(ab)30.44 G(ackslash)-2.5 E F1(\\[)144 300 Q F0
<HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on June, 29 2004 by texi2html 1.64 -->
+<!-- Created on July, 27 2004 by texi2html 1.64 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
Karl Berry <karl@freefriends.org>
<H1>Bash Reference Manual</H1></P><P>
This text is a brief description of the features that are present in
-the Bash shell (version 3.0-rc1, 26 June 2004)..
+the Bash shell (version 3.0, 27 July 2004)..
</P><P>
-This is Edition 3.0, last updated 26 June 2004,
+This is Edition 3.0, last updated 27 July 2004,
of <CITE>The GNU Bash Reference Manual</CITE>,
-for <CODE>Bash</CODE>, Version 3.0-rc1.
+for <CODE>Bash</CODE>, Version 3.0.
</P><P>
Bash contains features that appear in other popular shells, and some
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bashref.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>June, 29 2004</I>
+This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
<P></P>
<BR>
<FONT SIZE="-1">
This document was generated
-by <I>Chet Ramey</I> on <I>June, 29 2004</I>
+by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
-This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 29 JUN 2004 10:37
-**/usr/homes/chet/src/bash/src/doc/bashref.texi
-(/usr/homes/chet/src/bash/src/doc/bashref.texi (texinfo.tex
+This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2003.12.31) 27 JUL 2004 09:12
+**/Users/chet/src/bash/src/doc/bashref.texi
+(/Users/chet/src/bash/src/doc/bashref.texi (./texinfo.tex
Loading texinfo [version 2003-02-03.16]: Basics,
\bindingoffset=\dimen16
\normaloffset=\dimen17
\auxfile=\write2
\savesfregister=\count46
\footnoteno=\count47
- (/usr/local/share/texmf/tex/plain/dvips/epsf.tex
+ (/sw/share/texmf/tex/generic/misc/epsf.tex
\epsffilein=\read0
\epsfframemargin=\dimen39
\epsfframethickness=\dimen40
\epsfnoopenhelp=\toks24
)
\noepsfhelp=\toks25
-
-localization,
+ localization,
\nolanghelp=\toks26
\defaultparindent=\dimen47
- and turning on texinfo input format.) (bashref.aux)
+
+and turning on texinfo input format.) (./bashref.aux)
@cpindfile=@write3
@fnindfile=@write4
@vrindfile=@write5
@tpindfile=@write6
@kyindfile=@write7
@pgindfile=@write8
- (version.texi)
+ (./version.texi)
@btindfile=@write9
@rwindfile=@write10
[1
\openout10 = `bashref.rw'.
-] [2] (bashref.toc [-1] [-2] [-3]) [-4] Chapter 1
+]
+[2] (./bashref.toc [-1] [-2] [-3]) [-4] Chapter 1
\openout0 = `bashref.toc'.
- [1] Chapter 2 [2]
-[3] Chapter 3 [4] [5] [6] [7] [8] [9] [10]
+ [1] Chapter 2 [2] [3]
+Chapter 3 [4] [5] [6] [7] [8] [9] [10]
Overfull \hbox (43.33539pt too wide) in paragraph at lines 862--862
[]@texttt case @textttsl word @texttt in [ [(] @textttsl pat-tern @texttt [| @
textttsl pat-tern@texttt ][]) @textttsl command-list @texttt ;;][] esac[][]
.etc.
[65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] Chapter 7
-[78] [79] [80] [81] (/usr/homes/chet/src/bash/src/lib/readline/doc/rluser.texi
+[78] [79] [80] [81] (/Users/chet/src/bash/src/lib/readline/doc/rluser.texi
Chapter 8 [82] [83] [84] [85] [86] [87]
Underfull \hbox (badness 5231) in paragraph at lines 488--504
@texttt emacs-meta[]@textrm , @texttt emacs-ctlx[]@textrm , @texttt vi[]@textr
.@texttt o
.etc.
-[107]) (/usr/homes/chet/src/bash/src/lib/readline/doc/hsuser.texi Chapter 9
+[107]) (/Users/chet/src/bash/src/lib/readline/doc/hsuser.texi Chapter 9
[108] [109] [110] [111] [112]) Chapter 10 [113] [114] [115] [116] [117]
Underfull \hbox (badness 2772) in paragraph at lines 6610--6614
[]@textrm Enable sup-port for large files (@texttt http://www.sas.com/standard
.etc.
[118] [119] [120] Appendix A [121] [122] Appendix B [123] [124] [125] [126]
-[127] [128] Appendix C [129] [130] (fdl.texi [131] [132] [133] [134] [135]
-[136]) (Index of Shell Builtin Commands) [137] [138] (bashref.bts)
+[127] [128] Appendix C [129] [130] (./fdl.texi [131] [132] [133] [134] [135]
+[136]) (Index of Shell Builtin Commands) [137] [138] (./bashref.bts)
(Index of Shell Reserved Words)
Overfull \vbox (42.26959pt too high) has occurred while \output is active
\vbox(643.19986+0.0)x433.62, glue set - 1.0
.etc.
-[139] [140] (bashref.rws) (Parameter and Variable Index) [141] [142]
-(bashref.vrs [143]) (Function Index) [144] (bashref.fns [145]) (Concept Index)
-[146] (bashref.cps [147]) [148] )
+[139] [140] (./bashref.rws) (Parameter and Variable Index) [141] [142]
+(./bashref.vrs [143]) (Function Index) [144] (./bashref.fns [145])
+(Concept Index) [146] (./bashref.cps [147]) [148] )
Here is how much of TeX's memory you used:
- 1713 strings out of 13013
- 23227 string characters out of 97233
- 52385 words of memory out of 263001
- 2577 multiletter control sequences out of 10000+0
- 31953 words of font info for 111 fonts, out of 400000 for 1000
+ 1726 strings out of 98002
+ 23501 string characters out of 1221986
+ 52362 words of memory out of 1000001
+ 2577 multiletter control sequences out of 10000+50000
+ 31953 words of font info for 111 fonts, out of 500000 for 1000
19 hyphenation exceptions out of 1000
- 15i,8n,11p,273b,465s stack positions out of 300i,100n,500p,50000b,4000s
+ 15i,8n,11p,269b,465s stack positions out of 1500i,500n,5000p,200000b,5000s
-Output written on bashref.dvi (154 pages, 580120 bytes).
+Output written on bashref.dvi (154 pages, 580108 bytes).
%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
+%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
%%Title: bashref.dvi
%%Pages: 154
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMBXTI10 CMTI10
+%%+ CMCSC10 CMSLTT10 CMTT12 CMSY9 CMR8 CMTT9 CMTI9 CMR9
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
%DVIPSParameters: dpi=600, compressed
-%DVIPSSource: TeX output 2004.06.29:1037
+%DVIPSSource: TeX output 2004.07.27:0912
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
%%EndProcSet
-TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi)
-@start
-%DVIPSBitmapFont: Fa cmtt12 14.4 2
-/Fa 2 126 df<EE1FFC923801FFFE150F153F5D92B5FC4A14FC4AEBF8004A138003FCC7
-FC4A5A5DB3A9141F4A5A147F903803FFC0013F5B007FB5C8FCB55A5C14F014FC806C7FD8
-003F7F01037F9038007FE0143F6E7E140FB3A9816E7EEDFF806E13F86EEBFFFC6E14FE81
-81150F15019238001FFC2F5D79D23E>123 D<EA3FF048B47EB512F014FC80806C80D800
-1F7F01017FEB003F6E7E140FB3A9816E7E81913803FFC06E13FC6EEBFFFC6F13FE81150F
-153F5D92B512FC4AEBFC004A13C04A48C7FC5D4A5A5DB3A9141F4A5AEB01FF011F5B007F
-B55AB6C8FC5C5C14F06C1380D83FF0C9FC2F5D79D23E>125 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmr9 9 54
-/Fb 54 123 df<EC1FE0ECFFFC903803F01E90390FC00780EB1F8090393F000FC0017E13
-1F5BA2485AED0F8092C7FCA9ED0FC0B7FCA33901F8001F150FB3A6486CEB1FE0267FFFC1
-B5FCA328357FB42B>12 D<123C127EB4FCA21380A2127F123D1201A412031300A25A1206
-120E120C121C5A5A126009177A8715>44 D<EB0FE0EB7FFCEBF83E3903E00F803907C007
-C0EB8003000F14E0391F0001F0A24814F8A2003E1300007E14FCA500FE14FEB2007E14FC
-A56CEB01F8A36C14F0A2390F8003E03907C007C0A23903E00F803900F83E00EB7FFCEB0F
-E01F347DB126>48 D<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2497E007FB512
-80A319327AB126>I<EB3FC0EBFFF0000313FC380F80FF391E007F80001CEB3FC048EB1F
-E048130F15F00060130712FC6C14F87E1403A3007E1307123CC7FC15F0A2140F15E0EC1F
-C0A2EC3F801500147E5C495A5C495A495A495A49C7FC133E133C4913185B485A48481330
-485A48C7FC001C1470001FB512F05A5AB612E0A31D327CB126>I<EB1FE0EBFFFC4813FF
-3907E03F80390F001FC0001EEB0FE0001CEB07F0123F018013F8140313C01380A2381F00
-07C7FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014FCEB003FEC1FC0EC0FE0
-EC07F015F8140315FC140115FEA3127EB4FCA415FC48130312780070EB07F86C14F0003C
-130F001FEB1FE0390FE03F800003B51200C613FCEB1FE01F347DB126>I<EC01C0A21403
-1407A2140F141FA2143F147F146F14CF1301EB038F140F1307130E130C131C1338133013
-7013E013C0EA0180120313001206120E120C5A123812305A12E0B71280A3C7380FC000A9
-4A7E0107B51280A321337EB226>I<000C14C0380FC00F90B5128015005C5C14F014C0D8
-0C18C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E000CEB07E0
-A2C713F01403A215F8A41218127E12FEA315F0140712F8006014E01270EC0FC06C131F00
-3C14806CEB7F00380F80FE3807FFF8000113E038003F801D347CB126>I<14FE903807FF
-80011F13E090383F00F0017C13703901F801F8EBF003EA03E01207EA0FC0EC01F04848C7
-FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038E007C039FFC003E00180
-13F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C1301018013F8000F14F0
-EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F347DB126>I<12
-30123C003FB6FCA34814FEA215FC0070C7123800601430157015E04814C01401EC0380C7
-EA07001406140E5C141814385CA25CA2495A1303A3495AA2130FA3131F91C7FCA25BA55B
-A9131C20347CB126>I<EB0FE0EB7FFC90B5FC3903F01F803907C007C0390F0003E0000E
-EB01F0001E1300001C14F8003C1478A3123EA2003F14F86D13F0EBC001D81FF013E09038
-F803C0390FFE07803907FF0F006C13DE6C13F87EEB3FFE8001F713C0D803E313E0D80780
-13F0390F007FF8001E131F003EEB07FC003C1303481301EC007E12F848143EA2151EA37E
-153C1278007C14787E6C14F0390F8003E03907F01FC00001B5120038007FFCEB1FE01F34
-7DB126>I<EB0FE0EB7FF8EBFFFE3803F83F3907E00F80390FC007C0D81F8013E0EC03F0
-EA3F0048EB01F8127EA200FE14FC1400A415FEA5007E1301A2127F7E1403EA1F80000F13
-073807C00E3803E01C3801F03838007FF090381FC0FC90C7FC1401A215F8A215F0140300
-1F14E0383F800715C0140FEC1F809038003F00001C137E381F01FC380FFFF0000313C0C6
-90C7FC1F347DB126>I<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7EA2
-02707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2010E80010F
-B5FCA249800118C77EA24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7ED8
-FFFE49B512E0A333367DB53A>65 D<B7FC16E016F83A03FC0003FE0001EC00FFEE7F80EE
-3FC0161F17E0160F17F0A617E0161F17C0EE3F80EE7F0016FEED03FC90B612F05E9039FC
-0007FCED00FEEE3F80EE1FC0EE0FE017F0160717F8160317FCA617F81607A2EE0FF0EE1F
-E0163FEE7FC00003913803FF00B75A16F816C02E337DB236>I<B77E16F016FE3A01FE00
-01FF00009138003FC0EE0FE0707E707E707E707E177E177FEF3F80A2EF1FC0A3EF0FE0A4
-18F0AA18E0A3171F18C0A21880173F18005F17FE5F4C5AEE07F04C5AEE3FC000014AB45A
-B748C7FC16F8168034337EB23B>68 D<B81280A3D803FCC7FC0001151FEE07C01603A216
-01A21600A41760150CA31700A2151CA2153C15FC90B5FCA3EBFC00153C151CA2150CA592
-C8FCAB487EB512FEA32B337DB232>70 D<DA03FE130C91393FFF801C91B512E0903A03FE
-01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC7120348481401000315005B48
-48157C485A173C485A171C123F5B007F160CA390C9FC4893C7FCAA0303B512E07E7F9239
-0003FE00705A123F7F121FA26C7E7F12076C7E7F6C6C14036C7E6D6C1307D91FC0EB0E7C
-D90FF0EB1C3CD903FEEBF81C0100B5EAF00C023F01C0C7FCDA03FEC8FC33377CB43C>I<
-B5D8FE03B512F8A3000190C73807FC006C486E5AB390B7FCA349C71203B3A3486C4A7EB5
-D8FE03B512F8A335337EB23A>I<B512FEA3000113006C5AB3B3A7487EB512FEA317337E
-B21C>I<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE0003
-1407B7FCA329337DB230>76 D<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3
-D99F80140CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180
-A2027EEB0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80
-A2037FC7FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<D8FFFE9138
-1FFFF87F80C6030013006E143CD9DFE01418EBCFF0A2EBC7F8EBC3FCA2EBC1FEEBC0FF6E
-7EA26E7E6E7EA26E7E6E7E6E7EA26E7E6E7EA2ED7F80ED3FC0ED1FE0A2ED0FF0ED07F8A2
-ED03FCED01FEED00FFA2EE7F98EE3FD8A2EE1FF8160F1607A216031601A2486C1400D807
-F81578B500C01438A2171835337EB23A>I<EC07FC91387FFFC0903901FC07F0903907E0
-00FCD90F80133E013FC76C7E017E6E7E496E7E48486E7E48486E7EA248486E7E000F8249
-157E001F167FA24848ED3F80A2007F17C0A290C9121FA24817E0AB6C17C06D153FA3003F
-17806D157FA2001F17006D5D000F5E6C6C4A5AA26C6C4A5A00015E6C6C4A5A017E4A5A6D
-4A5AD91FC0017FC7FCD907E013FC903901FC07F09039007FFFC0DA07FCC8FC33377CB43C
->I<B612FEEDFFC016F03A03FC0007FC0001EC00FE167FEE3F80EE1FC017E0160FA217F0
-A617E0A2EE1FC0A2EE3F80EE7F0016FEED07F890B65A168001FCC9FCB3A2487EB512F8A3
-2C337DB234>I<B612FCEDFF8016F03A01FE0007FC0000EC01FEED007F707E707E83160F
-83A65FA24C5AA24C5A047EC7FC4B5AED0FF090B612C093C8FC9039FE001FC0ED07F06F7E
-6F7E150082167E167FA583A5180C17C0A2043F131C486C1618B500FEEB1FE0040F133893
-3807F070C93801FFE09338003F8036357EB239>82 D<90381FE00390387FFC0748B5FC39
-07F01FCF390F8003FF48C7FC003E80814880A200788000F880A46C80A27E92C7FC127F13
-C0EA3FF013FF6C13F06C13FF6C14C06C14F0C680013F7F01037F9038003FFF1403020013
-80157F153FED1FC0150F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C147E01C0
-5B39F1FC03F800E0B512E0011F138026C003FEC7FC22377CB42B>I<B500FE90381FFFF8
-A3000190C813006C48153C1718B3AF1738017F1530A217706D6C1460011F15E06E495A01
-0F14036D6C495A6D6C49C7FCD901FC131E6DB413FC91383FFFF0020F13C0020190C8FC35
-357EB23A>85 D<267FFFFC90B512C0A3000101E090381FF80026007F80EB0FC0013F6E5A
-6E91C7FC6D6C130E010F140C6E5B6D6C133801035C6E13606D6C13E06D6C485A5EDA7F83
-C8FCEC3FC715C6EC1FECEC0FFC5D14076E7EA26E7E815C6F7E9138063FC0140E4A6C7E91
-38180FF0EC380702707F91386003FCECC0010101804A6C7E49C77E4981010E6E7E010C6E
-7E131C496E7E01786E7E13FCD807FEEC1FFEB56C90B512F8A335337EB23A>88
-D<EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01
-FF131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3140FA26C131F6C13
-3B3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126>97
-D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F8049
-EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F0001
-CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07C039
-01F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA12
-7FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00
-EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39
-07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C
-4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7FFCEB
-F83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA212FE
-A2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901F003
-C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0FC0EB
-7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0A31A
-357FB417>I<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380
-9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E
-FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100
-3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6
-B51280D91FFCC7FC22337EA126>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0
-FC9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B
->I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0
-B5FCA310337EB215>I<EB03C0EB07E0EB0FF0A4EB07E0EB03C090C7FCAAEB03F013FFA3
-13071303B3B01238127C00FE13E0130714C0130F007C138038381F00EA1FFCEA07F01443
-84B217>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D4A5A020F
-C7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E8114076E7E8114
-016E7E81486CEBFF80B500C313F0A324347EB329>I<EA07E012FFA3120F1207B3B3A7EA
-0FF0B5FCA310347EB315>I<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0
-903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C
-487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3
-807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB
-07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127CA248147E00
-3E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C39
-03F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038
-F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716
-F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC
-91C8FCAA487EB512C0A325307EA02B>I<903807F00390383FFC07EBFC0F3901F8038F38
-07E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA9127FA36C6C5B121F6D5B000F
-5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAAED7F8091380FFFFCA32630
-7DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03ECA29038FC0F8049
-C7FCA35BB2487EB512E0A31A217FA01E>I<EBFF06000713CE381F00FE003C133E48131E
-140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFFC014F0000F7F6C7FC67FEB0FFF1300
-EC3F8000C0131F140F6C1307A37E15006C5B6C130E6C5B38F7807838E1FFE038C07F8019
-237EA11E>I<1330A51370A313F0A21201A212031207381FFFFEB5FCA23803F000AF1403
-A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I<D803F0133F00FFEB
-0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC90387E073FEB1FFE
-D907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB3F800007EC1F000003140E150C6D13
-1C00011418A26C6C5BA26D1370017E1360137F6D5BA290381F8180A214C3010F90C7FCA2
-EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F29>I<B53A1FFF81FFF0A33C07F801
-FC003F8001F049EB1E0000030100141C816C6C017C1318A26D017E1338000002FE1330A2
-90267E01FF5B159F168090263F030F5BA216C0903A1F8607C180A202C613E390260FCC03
-90C7FCA2D907FC13F6ECF80116FE6D486C5AA36D481378A36D48133034217F9F37>I<B5
-3801FFF8A32603FE0013806C48EB7C0000001478017E1370017F5B90383F81C090381F83
-80D90FC3C7FCEB07E614FE6D5A6D5A6D7E80805B9038039F809038071FC09038060FE0EB
-0C0790381C03F0496C7E01707FEBF000000180000FECFF8026FFFC0313FCA326207F9F29
->I<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC070015066C6C5BA26D131C017E
-1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3010390C7FC14FBEB
-01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA21306130EEA701CEA
-7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F003C14E00038EB1FC00030EB
-3F800070137F1500006013FE495A13035CC6485A495AA2495A495A49C7FC153013FE485A
-12035B48481370485A001F14604913E0485A387F000348130F90B5FCA21C207E9F22>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmti9 9 1
-/Fc 1 47 df<121C127F12FFA412FE12380808778718>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmsltt10 9 18
-/Fd 18 122 df<007FB512F0B612F815FCA215F86C14F01E06789927>45
-D<147E903803FF804913C0011F13E04913F0EB7F879038FE01F8EBF800484813FC000314
-7C49137E4848133EA2485AA248C7FCA2123EA45AA500FC147C5AA215FC15F8A26CEB01F0
-A2007C130315E01407007EEB0FC015806C131FEC3F00381F807EEBC1FC6CB45A6C5B6C5B
-6C1380D8007EC7FC1F3079AE27>48 D<1438147C14FC14F8130113031307130F133F3803
-FFF05A13FD13F913E3EA000314E0A41307A214C0A4130FA21480A4131FA21400A45BA213
-3EA3387FFFFEB6FCA36C13FE182F77AE27>I<D9FF80EB3FC0486DEB7FE016FFA26C4A13
-C0D91EE0EBDE00013EEB03FE16BE013C14BCED073CA2150F90397CF00E7C151E0178EB1C
-78153C15381578D9F87013F8EC78F001F05CEC79E0A215C00001EB7BC1EC3B81D9E03F5B
-1501A2143E0003EB1C031400495CA400071407A2495CA3D87FF0EB7FF0A200FF14FFA26C
-486D5A2B2E7FAD27>77 D<EB7FF83801FFFE00076D7E8148809038F01FF0EBE0036C486C
-7EEA0180C8FC140114FF011F5B90B5FC1203120F481383387FF00301805BEAFE005A5A14
-07A24A5A6C133F38FF01FF90B6FC6C15807E000F01E313003803FE0021207A9F27>97
-D<EB03FE90380FFF80013F13E090B512F04814F83903FE03FC3807F800EA0FE04848137E
-5B48C7123EA2127E007FB512FEA4B612FC00FCC8FCA2127C127E1578007F14F8383F8001
-EBC003391FF80FF06CB512E06C14C0000114806CEBFE00EB1FF01F207A9F27>101
-D<EBFFC05AA37E1307130FA25CA4131FA2EC07F8EC1FFEEC7FFF91B512804914C0ECFC1F
-ECE00FECC0071480140049130F137E1680137CA301FC131FA2491400A400015CA249133E
-A33A7FFF87FFF0B500CF13F8A36C018713F0252E7FAD27>104 D<143814FE1301A46D5A
-147891C7FCA73803FFF0487FA37EEA00015CA41303A25CA41307A25CA4130FA25CA3007F
-B512C0B612E0A315C01B2F79AE27>I<90B5FC5AA37EEB001F5CA2143EA4147EA2147CA4
-14FCA25CA41301A25CA41303A25CA41307A25CA3007FB512F8B612FCA36C14F81E2E7BAD
-27>108 D<3A03F0FC07E03A07FBFE1FF090B5EA3FF8EDFFFCA2C690388FFC7C9039FE07
-F03C01FC13E001F813C0A23A01F00F807CA2167801E01300A300034913F8A2D9C01E13F0
-A40007EB3E01A2D9803C13E0A33A7FF0FF87FCD8FFF9EBCFFEA3D87FF1EB8FFC2720809F
-27>I<3903FE07F83907FF1FFEEC7FFF91B5128016C039003FFC1FECE00FECC007148014
-0049130F137E1680137CA301FC131FA2491400A400015CA249133EA33A7FFF87FFF0B500
-CF13F8A36C018713F025207F9F27>I<EB01FCEB0FFF013F13C090B512E04814F03903FC
-0FF83807F003390FE000FC1380001F147C48C7127E003E143EA25AA400FC147CA215FC00
-7C14F81401007EEB03F0A26CEB0FE09038801FC0391FE07F8090B512006C5B6C13F80001
-5B38007F801F207A9F27>I<3A07FF803FC0489038C1FFF002C713F802CF13FC6C90B5FC
-D8000F13E3ED03F89138FC01F09138F800604A1300495A5CA25CA291C8FC5BA2133EA413
-7EA2137CA3B6FCA526207D9F27>114 D<903807FF1C013F13FE90B5FC5A1207EBFC0139
-0FE000FC49137C5BA2153801E01300EA07FEEBFFF8000113FF6C6C13C0010F13E0903800
-7FF0EC03F8001C1301003EEB00FC157C007E14FC127FEC01F8EB80039038E01FF090B5FC
-B612C0158000F8EBFE0038703FF01F207B9F27>I<131E133FA2133EA4137EA2007FB512
-F0B612F8A36C14F0D800FCC7FC5BA41201A25BA41203A25BA2EC01E015F01403A2EC07E0
-140F9038F83FC090B5128015006C5B38007FF8EB1FC01D2979A827>I<397FC00FF839FF
-E01FFCA4000713004913F8A4000F1301A2018013F0A4001F1303A2010013E0A314075A14
-0F003EEB1FC0003F133FEB80FF90B512FE6C14FFA2000713EF0001EB07FE20207A9F27>
-I<3A03FFE07FF848ECFFFCA36C15F83A001F003E006D6C5A01075BECC1F0903803E3E05D
-903801F7806DB4C7FC5C147C143C147C14FE1301EB03CF9038078F80EB0F07011E7FEB3E
-03496C7E01F87F3801F0003A7FFC07FFC0486C4813E0A201FC14C0007F7F26207E9F27>
-120 D<3A01FFE01FFF486D5AA39138E01FFE3A001E0003C0A2011FEB0780A26DEB0F00A2
-151E148001075BA25DA26E5A1303ECC1E0A2ECC3C0EB01E3ECE780A202EFC7FC130014FE
-A25CA2147814F85C13015C13035C130700085BEA7E0F49C8FCEAFE3EEAF8FEB45A5B6C5A
-EA3FC06CC9FC28317F9F27>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmtt9 9 81
-/Fe 81 127 df<123C127E12FFAF127EAE123C1200A7123C127E12FFA4127E123C082F71
-AE27>33 D<90383C03C090387E07E0A7EBFE0F01FC13C0A2007FB512FEB7FCA4003F14FE
-3901F81F80AC003FB512FEB7FCA46C14FE3903F03F00A200075BEBE07EA73803C03C202E
-7DAD27>35 D<EB0380497EA5EB1FF0EBFFFE0003EBFF804814C0001F14E09038E7DFF039
-3F87C7F8387E07C3007C13C100FCEBC0FC12F814C1A300FCEBC0F800FE1470007F140013
-87EA3FFF7E6C13F86C13FE6CEBFF80C614C0010F13E06D13F014CFECC3F814C10038EBC0
-FC127C00FE147CA412FC00FE14F8007E13C1007FEBC3F0383F87C79038F7FFE06CB512C0
-6C1480000314006C13FC38003FE0EB07C0A56D5A1E3A7CB327>I<131FEB7FC0497E5A80
-EA03F1EBE1F8EA07E013C0A513C15C9039C3F1FF80D9E3E113C03803E7E3EBEFC101FF14
-80913881F800EC01F0EA01FEEBFC0301F85B00031307D807FC5B120F381FFE0FD83FBE5B
-EB3F1FD87E1F90C7FC149F38FC0FBF14FE1307ECFC020103EB0F80EB01F8A238FE03FC38
-7E07FE397F1FFF9F6CB61200149F6CEB0FFE390FFC03FC3903F000F822307EAE27>38
-D<120FEA1FC0123F13E0A213F0121F120F1201A4120313E01207EA0FC0A2EA3F80EA7F00
-5A5A12F812700C1773AD27>I<EB01C0EB03E0130F131FEB3FC0EB7F80EBFE00485A5B12
-03485A5B485AA2485AA248C7FCA3127EA45AAC127EA47EA36C7EA26C7EA26C7E7F6C7E12
-017F6C7EEB7F80EB3FC0EB1FE0130F1303EB01C0133A73B327>I<127012F812FE7E6C7E
-6C7EEA0FE06C7E12037F6C7E1200137EA27FA2EB1F80A3EB0FC0A4EB07E0ACEB0FC0A4EB
-1F80A3EB3F00A2137EA25B1201485A5B1207485AEA3FC0485A48C7FC5A12F81270133A7A
-B327>I<130F497EA60078EB81E000FEEB87F000FF138FEBDFBF6CB512E06C14C0000F14
-00000313FCC613F0A2000313FC000F13FF003F14C04814E039FFDFBFF0EB1F8F00FE1387
-0078EB81E00000EB8000A66DC7FC1C207BA627>I<120FEA3FC013E0EA7FF0A213F8A212
-3FA2120F120113F01203EA07E0121FEA7FC0EAFF8013005A12700D14738927>44
-D<007FB512F8B612FCA46C14F81E067C9927>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E
-000A0A728927>I<1538157C15FCA2140115F8140315F0140715E0140F15C0141F158014
-3F1500A25C147E14FE5C13015C13035C13075C130F5CA2131F5C133F91C7FC5B137E13FE
-5B12015B12035BA212075B120F5B121F5B123F90C8FC5A127E12FE5AA25A12781E3A7CB3
-27>I<EB07E0EB3FFC497E90B5FC4814803903FC3FC03907F00FE0390FE007F0EBC00339
-1F8001F8A248C712FCA2003E147C007E147EA3007C143E00FC143FAC007E147EA46C14FC
-A2EB8001001F14F8EBC003000F14F0EBE0073907F00FE03903FC3FC06CB512806C14006D
-5A6D5AEB07E020307DAE27>I<130E131FA25B5BA25B5A5A127FB5FCA213BFEA7E3F1200
-B3AA003FB512805A15C01580A21A2F79AE27>I<EB3FE03801FFF84813FE000FEBFF8048
-14C0393FE07FE0EB800F397F0007F0007EEB03F800FE13015A6C14FC1400A3127CC8FCA2
-140115F8A2140315F01407EC0FE0EC1FC0143FEC7F80ECFF00495A495A495A495A495A49
-5A495A01FEC7FC485AD807F81378484813FC485A485A48B5FCB6FCA36C14F81E2F7CAE27
->I<EB1FF8EBFFFE0003EBFF80000F14C015E0391FF01FF0393FC007F8EB800115FC1400
-A26CC7FC1204C8FC140115F81403EC07F0140FEC3FE090381FFFC0491380A215E06D13F0
-9038001FF8EC03FC1401EC00FE157E157F153FA21238127C12FEA2157F48147E6C14FE00
-7FEB01FCEB8003393FF01FF86CB512F06C14E000031480C6EBFE00EB1FF820307DAE27>
-I<EC3F804A7EA214FF5BA2EB03F7EB07E7A2EB0FC71487131FEB3F07A2137E13FCA2EA01
-F813F01203EA07E0A2EA0FC0EA1F80A2EA3F00123E127E5AB7128016C0A36C1580C73807
-C000A849B5FC491480A36D1400222F7EAE27>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E
-00C7FCAC121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A20729F27>58
-D<120FEA3FC0A2EA7FE0A4EA3FC0A2EA0F00C7FCAC120FEA3F8013C0127F13E0A3123FA2
-120F120713C0120FA2EA3F80EA7F005A5A12F812700B2A739F27>I<153815FC14011407
-140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A3801FF804890C7FCEA0FFC48
-5AEA7FF0EAFFC05BA27FEA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7EEB07FE6D7E
-010013C0EC7FE0EC3FF8EC0FFC14071401140015381E287CAA27>I<127012FC7E6C7E7F
-EA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7EEB07FE6D7E010013C0EC7FE0EC3FF8
-EC0FFC1407A2140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A3801FF804890
-C7FCEA0FFC485AEA7FF0EAFFC05B48C8FC5A12701E287CAA27>62
-D<EBFFF8000313FF000F14C0003F14E04814F09038C01FF839FF0003FC4813011400A214
-01007C1303C7EA0FF8EC1FF0EC7FE0ECFFC0491300EB03FC495A5C495A5C131F5CA76DC7
-FC90C8FCA7130F497E497EA46D5A6DC7FC1E2E7CAD27>I<EB01FE903807FF80011F13C0
-017F13E090B512F048EB03F83803FC013907F000FC390FE01F7C9038C07FFE381F80FF13
-01485A393E07F1FF007E13E0397C0FC07FEC803FA2EAFC1F00F8EB001FA800FCEB803FD8
-7C0F133EA2ECC07E397E07E0FC003E13F1393F03FFF86C6C13F0018013E0390FC07FC090
-38E01F1E3907F0003FD803FC137F3901FF03FF6CEBFFFE6D13FC011F13F0010713C00101
-1300202E7DAD27>I<EB03F0497EA2497EA4143CEB1F3EA5EB3F3FA3EB3E1FA2017E7FA4
-496C7EA548486C7EA390B5FCA24880A3EBF003A248486C7EA4000F803A7FFC0FFF8000FF
-15C06D5A497E007F1580222F7EAE27>I<007FB5FCB612C08115F87E3907E003FCEC00FE
-157E157F81A6157EA25D1403EC0FF890B55A15C015F081819038E000FE157FED3F80151F
-A2ED0FC0A6151F1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7FAD27>I<90
-3803F80E90381FFE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E485A49137F
-A248C7123FA25A127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6D137E
-6C6C13FE3907F001FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300EB03F82030
-7DAE27>I<387FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F8116
-80151FA316C0150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C
-91C7FC14FC222E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC
-07804A7EA390B5FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7FCA36C15C0
-232E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA3
-90B5FCA5EBE00FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<903807F03890
-381FFC7C90387FFFFC90B5FC5A3803FC1F3807F00F380FE007EBC003001F13011380123F
-90C7FCA2127EA2157892C7FC5AA8EC1FFF4A1380A3007E6D1300EC00FCA36C1301A21380
-121FEBC003120FEBE0073807F00F3803FC1F6CB5FC7EEB7FFE90381FFC78D907F0C7FC21
-307DAE27>I<3A7FFE07FFE0B54813F0A36C486C13E03A07E0007E00AF90B512FEA59038
-E0007EB03A7FFE07FFE0B54813F0A36C486C13E0242E7FAD27>I<007FB512E0B612F0A3
-6C14E039001F8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>I<3A7FFC07FF8016
-C0486C5A6C487E16803A07C001F80014035D4A5A4A5A141F5D4AC7FC147E14FE5CEBC1F8
-EBC3F013C75CEBCFF0EBDFF813FF8013FEEBFC7E143EEBF83F497E01E07F140F01C07F14
-07811403816E7EA26E7E157C157E3A7FFC01FFC016E0486C5A6C487E16C0232E7FAD27>
-75 D<387FFFC080B5FC7E5CD803F0C8FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680
-222E7FAD27>I<D87FE0EB7FE0486CEBFFF0A26D5A007F15E0000F150001B813DFEBBC03
-A3EBBE07019E139FA3EB9F0FA2018F131FA2149FA2EB879EA4EB839C14FCA3EB81F8A2EB
-80F01400AAD87FF0EBFFE0486C4813F0A36C486C13E0242E7FAD27>I<3A7FF003FFE048
-6C4813F0A213FC007F6D13E000079038003E0013DEA313CFA3148013C714C0A213C314E0
-A213C114F0A3EBC0F8A31478147CA2143C143EA2141E141F140FA3EC07BEA3EC03FEEA7F
-FCEAFFFE1401A26C486C5A242E7FAD27>I<EBFFFC0007EBFF80001F14E0A24814F0EBC0
-0F397F8007F8EB0003007E1301A348EB00FCB3A76C1301007E14F8A3007F1303EB800739
-3FE01FF090B5FC6C14E0A200071480C6EBFC001E307CAE27>I<007FB5FCB612E081816C
-803907E003FEEC00FF81ED3F80151F16C0150FA6151F1680153FED7F005DEC03FE90B55A
-5D5D5D92C7FC01E0C8FCADEA7FFEB5FCA36C5A222E7FAD27>I<387FFFF0B512FE6E7E81
-6C803907E01FF014076E7E1401811400A514015D14034A5A141F90B55A5D5DA281EBE01F
-6E7E14076E7EA816F0EDF1F8A4397FFE01FBB5EBFFF08016E06C48EB7FC0C8EA1F00252F
-7FAD27>82 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F387F000F007E1307
-12FE5A1403A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C6
-14C0010F13E0010013F0140FEC07F81403140115FC1400127812FCA46CEB01F8A26C1303
-90388007F09038F01FE090B5FC15C0150000F85B38701FF81E307CAE27>I<007FB61280
-B712C0A439FC03F00FA60078EC0780000091C7FCB3AB90B512C04880A36C5C222E7EAD27
->I<3A7FFE01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00031500A26D5B
-0001147E6D13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7FC262F80AD27
->I<3A7FFC03FFE06D5A00FF15F0007F15E0497E3A07E0007E00A46C6C5BA4EBF8010001
-5CA46C6C485AA490387E07E0A56D485AA4011F5B149FA3010F90C7FCA5EB07FEA46D5AA2
-6D5A242F7FAD27>I<D87FE0EB7FE0486CEBFFF0A36C48EB7FE0001FC7EA0F80A76C6CEB
-1F00A614F0EB81F83907C3FC3EA4149CEBC79EA30003143CA301E7137CEBEF9FA2140FA2
-00011478A49038FE07F8A300005CA2EBFC0390387801E0242F7FAD27>I<393FFC1FFE38
-7FFE3F815D383FFC1F3903F00FE001F85B1201EBFC1F00005CEBFE3F017E90C7FCEB7F7F
-EB3F7E14FE6D5AA26D5AA26D5AA21303130780130F80131F80EB3F7E147F497E017E7F14
-1F01FC7F140FD801F87F14071203496C7E120701E07F3A7FFC0FFF8000FF15C06D5A497E
-007F1580222E7EAD27>I<3A7FFC03FFE06D5A00FF15F0007F15E0497E3A07F000FE0000
-035CEBF80100015CA2EBFC0300005CEBFE07017E5BA26D485AA290381F9F80A3010F90C7
-FCA2EB07FEA26D5AA26D5AAF90381FFF80497FA36D5B242E7FAD27>I<003FB512FE4814
-FFA4007EC712FEEC01FCA2EC03F8EC07F0A2003CEB0FE0C7EA1FC0A2EC3F80EC7F00A214
-FE5C1301495A5C1307495A5C131F495A91C7FC5B13FEA2485A4848131E153F485A485AA2
-485A485AA248C7FCB7FCA46C14FE202E7DAD27>I<387FFFF0B512F8A314F000FCC7FCB3
-B3ACB512F014F8A36C13F0153A71B327>I<387FFFF0B512F8A37EEA0001B3B3ACEA7FFF
-B5FCA36C13F0153A7EB327>93 D<131C137E3801FF80000713E0001F13F84813FC38FFE7
-FF13C3130000FC133F0078131E180B79AD27>I<007FB512F8B612FCA46C14F81E067C7E
-27>I<13E0EA01F01207120F13E0EA1FC0EA3F00A2127E127C12FC5AA4B4FC138013C012
-7FA2123F1380EA0F000C1773B227>I<3803FFC0000F13F04813FC4813FF811380EC1FC0
-381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7FC0130012FE5AA4
-6C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022207C9F27>I<EA
-7FE0487EA3127F1203A914FF01F313C090B512F08181EC81FE49C67E49EB3F8049131F16
-C049130FA216E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D
-5D01F313C02601E0FEC7FC232E7FAD27>I<EB0FFF017F13C048B512E04814F05A380FF8
-07EA1FE0393FC003E0903880008048C8FC127EA212FE5AA67E127EA2007F14F0393F8001
-F813C0381FE003390FF80FF06CB5FC6C14E06C14C06C6C1300EB0FF81D207B9F27>I<EC
-3FF04A7EA3143F1401A9EB0FE1EB7FFD48B5FC5A5A380FF83F381FE00F383FC007EB8003
-EA7F00007E1301A212FE5AA67E007E1303A2127F6C1307EB800F381FE01F380FF03F6CB6
-12C06C15E06C13FD38007FF9D91FE013C0232E7EAD27>I<EB0FF8EB3FFE90B512800003
-14C04814E0390FFC0FF0391FE003F8EBC001D83F8013FC48C7FC127E157E12FEB612FEA4
-15FC00FCC8FC7E127E127F6C143C6D137E6C7E01F013FE390FFC07FC6CB5FC000114F86C
-14F0013F13C0903807FE001F207D9F27>I<EC1FF0ECFFF84913FC4913FE5BEB0FF014C0
-011F137CEC8000A6007FB512F0B612F8A36C14F039001F8000B3A4003FB512C04814E0A3
-6C14C01F2E7EAD27>I<153F90391FC0FF80D97FF313C048B612E05A4814EF390FF07F87
-3A1FC01FC3C0EDC000EB800F48486C7EA66C6C485AEBC01FA2390FF07F8090B5C7FC5C48
-5BEB7FF0EB1FC090C9FCA27F6CB5FC15E015F84814FE4880EB8001007EC7EA3F80007C14
-0F00FC15C0481407A46C140F007C1580007F143F6C6CEB7F009038F807FF6CB55A000714
-F86C5CC614C0D90FFCC7FC23337EA027>I<EA7FE0487EA3127F1203A9147F9038F1FFC0
-01F713F090B5FC8114C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C0183
-13E0242E7FAD27>I<130F497E497EA46D5A6DC7FC90C8FCA7383FFF80487FA37EEA000F
-B3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I<143C147E14FFA4147E143C1400A738
-01FFFE4813FFA37EC7123FB3B0147E1238007C13FE38FE01FC1303B512F814F06C13E06C
-13803807FE0018407CAE27>I<EA7FE07F12FF127FA21201A991383FFFC04A13E0A36E13
-C0913803F8004A5A4A5A4A5A4A5A02FFC7FCEBF1FEEBF3FCEBF7F8EBFFFC8080143F496C
-7E496C7E01F87FEBF0076E7E6E7E816E7E157E3A7FFFC1FFF002C313F8B512E36C13C316
-F0252E80AD27>I<387FFF80B57EA37EEA000FB3B2007FB512F8B612FCA36C14F81E2E7C
-AD27>I<397F07C01F3AFF9FF07FC09039FFF9FFE091B57E7E3A0FFC7FF1F89038F03FC0
-01E0138001C01300A3EB803EB03A7FF0FFC3FF486C01E3138001F913E701F813E36C4801
-C313002920819F27>I<387FE07F39FFF1FFC001F713F090B5FC6C80000313C1EC01FCEB
-FE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E024207F9F27>I<EB1FE0EB7F
-F83801FFFE487F481480390FF03FC0391FC00FE0393F8007F0EB00034814F8007E1301A2
-48EB00FCA76C1301007E14F8A2007F1303393F8007F0A2391FE01FE0390FF03FC06CB512
-806C14006C5B38007FF8EB1FE01E207C9F27>I<387FE0FFD8FFF313C090B512F0816C80
-0003EB81FE49C67E49EB3F8049131F16C049130FA216E01507A6150F16C07F151F6DEB3F
-80157F6DEBFF009038FF83FEECFFFC5D5D01F313C0D9F0FEC7FC91C8FCAC387FFF80B57E
-A36C5B23317F9F27>I<90380FF03C90383FFE7E90B5FC000314FE5A380FFC1F381FE007
-EBC003383F800148C7FC127EA200FE147E5AA67E007E14FEA2007F1301EA3F80EBC00338
-1FE007380FF81F6CB5FC7E6C147E38007FFCEB0FF090C7FCAC91381FFFF8A24A13FC6E13
-F8A226317E9F27>I<397FFC03FC39FFFE0FFF023F13804A13C0007F90B5FC39007FFE1F
-14F89138F00F809138E002004AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22207E
-9F27>I<9038FFF3800007EBFFC0121F5A5AEB803F38FC000F5AA2EC07806C90C7FCEA7F
-8013FC383FFFF06C13FC000713FF00011480D8000F13C09038003FE014070078EB03F000
-FC1301A27E14036CEB07E0EBE01F90B512C01580150000FB13FC38707FF01C207B9F27>
-I<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D13FC1483
-ECFFF86D13F06D13E0010313C0010013001F297EA827>I<397FE01FF8486C487EA3007F
-131F00031300B21401A21403EBFC0F6CB612E016F07EEB3FFE90390FF87FE024207F9F27
->I<3A7FFC0FFF80486C4813C0A36C486C13803A07C000F800EBE00100035CA2EBF00300
-015CA2EBF80700005CA390387C0F80A36D48C7FCA3EB3F3FEB1F3EA214FE6D5AA36D5AA2
-6D5A22207E9F27>I<3A7FFE07FFE000FF15F06D5A497E007F15E03A0F80001F00A36D5B
-0007143EA414F0EBC1F83903E3FC7CA4EBE79EA200011478A301F713F8A2EBFF0F6C5CA3
-EBFE0790387C03E024207F9F27>I<393FFC1FFF486C5A168016006C487E3901F807E06C
-6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A13076D5A5C80497E130F497E143EEB3E3FEB
-7E1F90387C0F8001F87F00016D7E3803F0033A7FFE1FFF80A2B54813C06C486C1380A222
-207E9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13F0
-0001130301F85B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E14
-BE130714FC1303A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8FC
-EA7FFE6C5A5B6C5AEA07C022317E9F27>I<001FB512FE4814FFA490380001FEEC03FCEC
-07F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00495A495A495AEB1FE0495A495A49C7FC
-485A4848131E4848133F485A485A485A485AB7FCA46C14FE20207E9F27>I<EC07F8EC3F
-FC14FF130315F8903807FE00EB0FF05C5CB0131FEB7F80EA3FFFB5C7FC5BA27F003F7FEA
-007FEB1FC0130FB08080EB07FE903803FFF815FC1300143FEC07F81E3A7CB327>I<EA7F
-80EAFFF013FC13FF7E00017F38003FC0131F130FB080EB07F8ECFFF06D13FC7FA25B4913
-F0ECF800EB0FE05CB0131F133F48B45A007F90C7FCB5FC13FC13F0EA7F801E3A7CB327>
-125 D<3901F003803903FC07C0000F130F381FFE1F393FFF7F80397FBFFF0038FE1FFE48
-6C5A00F813F0387003E01A0A7AAD27>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmr8 8 26
-/Ff 26 118 df<123C127EB4FCA21380A2127F123D1201A312031300A25A1206120E5A5A
-5A126009157AAD14>39 D<B512C0A412047F9018>45 D<130C133C137CEA03FC12FFEAFC
-7C1200B3B113FE387FFFFEA2172C7AAB23>49 D<4A7E4A7EA34A7EA24A7EA3EC1BF81419
-A2EC30FCA2EC70FEEC607EA24A7EA349486C7EA2010380EC000FA201066D7EA3496D7EA2
-011FB57EA29038180001496D7EA349147EA201E0147F4980A20001ED1F801203000716C0
-D80FF0EC3FE0D8FFFC0103B5FCA2302F7EAE35>65 D<B612FCEDFF803A03F8000FC00001
-EC03F06F7E6F7E82167E167FA6167E16FE5E4B5A4B5AED0FE0ED7F8090B6C7FC16E09039
-F80003F0ED01FC6F7E167F821780161F17C0A61780163F17005E16FEED03FC0003EC0FF0
-B712C04BC7FC2A2D7DAC32>I<DA1FF013C09138FFFE01903903F00F8390390F8001E301
-3FC71277017C143F4848141F4848140F48481407A248481403121F491401123F90C8FC48
-1500A300FE1600AB127F17C0A27E7F001F15016D1580120F6C6C1403EE07006C6C14066C
-6C140ED8007C5C013F147890390F8001E0903903F00FC0902600FFFEC7FCEC1FF02A2F7C
-AD33>I<B612F815FF3A03F8001FE00001EC03F0ED00F8167E82EE1F80160F17C0EE07E0
-A2EE03F0A217F81601A317FCAA17F8A3EE03F0A217E0160717C0160FEE1F80EE3F00167E
-5EED03F00003EC1FE0B7128003F8C7FC2E2D7DAC36>I<B712FEA23903F800010001EC00
-3E828282A282A3178016011518A293C7FCA31538157815F890B5FCA2EBF8001578153815
-18A21760A392C712C0A4160117801603A21607160F163F0003913801FF00B8FCA22B2D7E
-AC30>I<B712FCA23903F800030001EC007C163E161E160EA21606A3160716031518A216
-00A31538157815F890B5FCA2EBF800157815381518A592C7FCAB487EB512F8A2282D7EAC
-2E>I<B512F8A2D803FCC8FC6C5AB3A7160CA41618A41638A2167816F81501ED07F00003
-141FB7FCA2262D7EAC2C>76 D<B612FCEDFF803A03F8000FE00001EC03F0ED00F882167E
-167F821780A617005E167E5E5EED03F0ED0FE090B6128003FCC7FC01F8C9FCB2487EB512
-F0A2292D7EAC30>80 D<B612C015FC3903F8007F0001EC0FC06F7E6F7E6F7E82150082A5
-5E15015E4B5A4B5A4B5A037FC7FC90B512FC15F09038F800FC153E6F7E150F826F7EA582
-A5170316F815031707486C903801FC0EB539F000FE1CEE3FF8C9EA07E0302E7DAC34>82
-D<90383F80303901FFF0703807C07C390F000EF0001E13074813034813011400127000F0
-1470A315307EA26C1400127E127FEA3FE013FE381FFFE06C13FC6C13FF00011480D8003F
-13E013039038003FF0EC07F81401140015FC157C12C0153CA37EA215787E6C14706C14F0
-6CEB01E039F78003C039E3F00F0038E07FFE38C00FF01E2F7CAD27>I<007FB712F8A290
-39000FC003007C150000701638A200601618A200E0161CA248160CA5C71500B3A94A7E01
-1FB512E0A22E2D7EAC33>I<EAFFE0A3EAE000B3B3B3A7EAFFE0A30B4379B114>91
-D<13FF000713C0380F01F0381C00F8003F137C80A2143F001E7FC7FCA4EB07FF137F3801
-FE1FEA07F0EA1FC0EA3F80EA7F00127E00FE14065AA3143F7E007E137F007FEBEF8C391F
-83C7FC390FFF03F83901FC01E01F207D9E23>97 D<EB1FE0EB7FFC3801F01E3803E00739
-07C01F80EA0F80EA1F005A003EEB0F00007E90C7FCA2127C12FCA9127EA215C07E6C1301
-01801380380FC0033907E007003801F03E38007FF8EB1FC01A207E9E1F>99
-D<EB1F80EBFFF03803E0783807C03E380F801E381F001FEC0F80123E007E130715C0127C
-12FCA3B6FCA200FCC8FCA5127EA2003E14C0123F6C1301390F80038001C013003803E00F
-3801F03C38007FF8EB1FC01A207E9E1F>101 D<130FEB1F80EB3FC0A4EB1F80EB0F0090
-C7FCA8EB07C013FFA2130F1307B3AD1230127838FC0F80A21400485AEA783EEA3FF8EA07
-E0123C83AD16>106 D<EA07C012FFA2120F1207ADEC1FFEA2EC0FF0EC07C05D020EC7FC
-5C5C5C5CEBC3C013C7EBCFE0EBDFF013F9EBF0F8497EEBC07E143E80816E7E14076E7E81
-6E7E486C487E3AFFFE07FF80A2212E7EAD25>I<3807C0FE39FFC3FF809038C703E0390F
-DE01F0EA07F8496C7EA25BA25BB2486C487E3AFFFE1FFFC0A2221E7E9D27>110
-D<3807C0FE39FFC7FF809038CF03E0390FDC01F03907F800FC49137E49133E49133FED1F
-80A3ED0FC0A8151F1680A2ED3F00A26D137E6D137C5D9038FC01F09038CE07E09038C7FF
-80D9C1FCC7FC01C0C8FCA9487EEAFFFEA2222B7E9D27>112 D<380781F838FF87FEEB8E
-3FEA0F9CEA07B813B0EBF01EEBE000A45BB0487EB5FCA2181E7E9D1C>114
-D<3801FE183807FFB8381E01F8EA3C00481378481338A21418A27E7EB41300EA7FF06CB4
-FC6C13C06C13F0000113F838001FFC130138C0007E143EA26C131EA27EA26C133CA26C13
-7838FF01F038E3FFC000C0130017207E9E1C>I<1360A413E0A312011203A21207121FB5
-12F0A23803E000AF1418A714383801F03014703800F860EB3FE0EB0F80152A7FA81B>I<
-D807C013F800FF131FA2000F130100071300B21401A314033803E007EC0EFC3A01F81CFF
-C038007FF890391FE0F800221F7E9D27>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmsy9 9 2
-/Fg 2 106 df<EB0180EB03C01307A21480130FA2EB1F00A2131E133EA25BA2137813F8
-A2485AA25B1203A2485AA25B120FA248C7FCA2121E123EA25AA2127812F8A41278127CA2
-7EA2121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA2131E131FA2
-EB0F80A2130714C0A21303EB0180124A79B71E>104 D<126012F07EA21278127CA27EA2
-121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA2131E131FA2EB0F
-80A2130714C0A41480130FA2EB1F00A2131E133EA25BA2137813F8A2485AA25B1203A248
-5AA25B120FA248C7FCA2121E123EA25AA2127812F8A25A1260124A7CB71E>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmcsc10 12 9
-/Fh 9 121 df<160C161E163EA2163C167CA2167816F8A216F01501A2ED03E0A216C015
-07A21680150FA216005DA2153EA2153C157CA2157815F8A25D1401A24A5AA25D1407A25D
-140FA292C7FC5CA2143EA2143C147CA2147814F8A2495AA25C1303A25C1307A25C130FA2
-49C8FCA2131E133EA2133C137CA2137813F8A2485AA25B1203A25B1207A25B120FA248C9
-FCA2121E123EA2123C127CA2127812F8A25A1260276479CA37>47
-D<B7FC16F016FC3A03FE0003FF6C489038007F80EE1FE0707E707E707E1601707E177FA2
-1880173F18C0A2EF1FE0A418F0AA18E0A4EF3FC0A21880177F180017FE16015F4C5AEE0F
-F04C5AEE7FC0486CD903FFC7FCB712FC16F093C8FC34337BB23E>100
-D<DA03FF1303021FEBE00791B5EAF80F0103903800FE1FD90FF8EB1F3FD91FE0EB07BFD9
-7F806DB4FC49C77E484880484881484881A2484881121F4981123F5BA2007F82A25B00FF
-93C7FCAA4BB512F86C7EA2DB00011380003F6F1300837F121F7F120F6C7E7F12036C7E6C
-6C5DEB7FC0D91FE05BD90FF8EB07DF903A03FF803F8F01009038FFFE07021FEBF8030203
-0180C7FC35357BB340>103 D<B512F8A33803FE006C5AB3B3A7487EB512F8A315337BB2
-1E>105 D<EC07FF023F13E0903901FE03FC903907F0007FD90FC0EB1F80D93F80EB0FE0
-49C76C7E01FE6E7E48486E7E48486E7E4848157FA24848ED3F80001F17C0A24848ED1FE0
-A3007F17F049150FA300FF17F8AA007F17F06D151FA2003F17E0A26D153F001F17C0A26C
-6CED7F80000717006D5D00035E6C6C4A5A6C6C4A5A017F4A5A6D6C495AD90FC0EB1F80D9
-07F0017FC7FC903901FE03FC9039003FFFE0020790C8FC35357BB33F>111
-D<B7FC16F016FC3A03FE0003FF6C489038007F80EE3FC0EE1FE0EE0FF0A2EE07F8A217FC
-A617F8A2EE0FF0A2EE1FE0EE3FC0EEFF00ED03FE90B612F816C001FCC9FCB3A2487EB512
-F8A32E337BB238>I<90390FF0018090387FFE0348B512873907F00FEF390FC001FF48C7
-FC003E143F151F5A150F5A1507A36C1403A27E6C91C7FC6C7E7FEA3FF8EBFF806C13FC6C
-EBFFC06C14F06C80C614FE011F7F01031480D9001F13C014019138003FE0151F150FED07
-F0150312E01501A37EA216E06C1403A26CEC07C06CEC0F806C6CEB1F0001E0133ED8FBFE
-13FC00F0B55AD8E01F13E0D8C00390C7FC24357BB32E>115 D<B500F890383FFFE0A3D8
-03FEC7000713006C48EC01FC705A1770B3AE000016F06D5DA2017E1401017F4A5A7F6D6C
-495A6E49C7FC6D6C131ED903F0137C903901FE03F89039007FFFE0021F1380DA03FCC8FC
-33347BB23D>117 D<267FFFF890383FFFF0A3000101E0010F13006C49EB07F8017F5D01
-3F15C06D6C5C6D6C49C7FC160E6D6C131E6D6C5B6D6C133816786D6C5B91387F81E0023F
-5B15C391381FE7806EB4C8FC5D14076E5A6E7EA26E7E4A7FA24A7F9138079FE091380F0F
-F0140E91381E07F84A6C7E4A6C7E14709138F000FF49486D7E4948133F4A8001076E7E49
-C76C7E131E013E6E7E017E6E7E01FE81000182D80FFF4A1380B500C0011F13FEA337337D
-B23D>120 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmtt12 13.14 8
-/Fi 8 116 df<003FB712804816C0B812E0A46C16C06C16802B087AA438>45
-D<91397FC003FC903A01FFF01FFF0107D9FC7F1380011F90B612C05B5B90B8FC48903AC0
-7FFE1F80913A001FF00F0048486D6CC7FC49130748486D7E491301000F81491300A76D13
-0100075D6D13036C6C495A6D130F6C6C495AECC07F91B55A5E485D93C8FCD807F713FC01
-E113F09038E07FC091CAFCA27F12037F6D7E6CB612C06C15FC4815FF4816C048824882D8
-1FF8C76C7ED83FE0EC07FC0180EC01FE48C9FC177F007E8200FE178048161FA66C163F00
-7FEE7F006D5D6C6C4A5A01F01407D81FFEEC3FFC3B0FFFE003FFF86C90B65A6C5EC61680
-013F4AC7FC010F14F8010314E09026003FFEC8FC324A7DAF38>103
-D<EA3FFE487EB5FCA37E7EC67EACED7FC0913801FFF8020713FE021F7F4A805C91B67EED
-C07F9139FE001FE002F8130F4A805C16075C5CA391C7FCB3A6273FFFFE03B512E0486D48
-14F0B6008F14F8A36C020714F06C496C14E035437FC238>I<14F0497E497E497EA46D5A
-6D5A6D5A91C8FCAB383FFFFC487FB5FCA37E7EC7FCB3AF007FB612F0B712F816FCA316F8
-6C15F0264476C338>I<387FFFFEB6FCA57EC77EB3B3B1007FB7FCB81280A56C16002943
-79C238>108 D<ED7FC03A3FFE01FFF8267FFF0713FEB5001F7F4A805C6C90B67E6CECC0
-7F3B007FFE001FE002F8130F4A805C16075C5CA391C7FCB3A6273FFFFE03B512E0486D48
-14F0B6008F14F8A36C020714F06C496C14E035307FAF38>110 D<EC7FC0903803FFF801
-0F13FE497F017F14C090B67E4881489038C07FF8489038001FFC01FC130748486D7E4913
-0148486D7E4980003F168049143F007F16C090C8121FA300FEED0FE0A96C151FA26C16C0
-A26D143FA26C6CEC7F80A26C6CECFF006D5B6C6C495A6D13076CB4EB1FFC6C9038C07FF8
-6C90B55A6C5D6D5C6D5C010F49C7FC010313F89038007FC02B327AB038>I<903907FF80
-F0017FEBF1F848B512FD000714FF5A5A5AEBFC00D87FE0131F0180130F48C71207481403
-A5007FEC01F001C090C7FCEA3FF013FE381FFFF86CEBFFC0000314F8C614FF013F148001
-0714E0D9003F13F0020013F8ED0FFC1503003CEC01FE007E140000FE15FF167F7EA37F6D
-14FF16FE01F013036DEB07FC01FF137F91B512F816F016E04815C0D8FC3F1400010F13FC
-D8780113E0283278B038>115 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmsltt10 10.95 50
-/Fj 50 122 df<137C13FE487E1480A214C0A3EA007F130F131F1480A3133F14005B137E
-13FE485A1203485AEA1FF0485AB45A5B90C7FC127C1238121D6BB730>39
-D<140F4A7EA2143FA492C7FCD8078014783A0FC07F01FCD81FF0130701F8130F9038FE7E
-3F01FFEBFFF86C90B512F0000315C0C615006D13FC011F13E001071380011F13E0017F13
-F848B512FE000780001F15C0267FFDFB13E0EBF1F8D8FFC1137F0183133FD87E03EB0FC0
-0078EC0780000049C7FCA21307A45C6D5A262777AE30>42 D<007FB612E0B712F016F8A3
-16F06C15E02507769E30>45 D<EC07F8EC1FFEEC7FFF49B512C04914E04914F090380FF8
-1F90391FE00FF890383FC00790397F8003FC9038FF00014914FE48481300485A16FF4848
-147FA2485AA2485AA25B123FA348C8FCA500FE15FEA4ED01FCA3ED03F8A215076C15F015
-0F6C15E0151F6D14C0ED3F80003F147F6DEBFF004A5A381FE0036D485A390FFC1FF86CB5
-5A6C5C6C14806C91C7FCEB7FFCEB0FE0283A78B830>48 D<EC03C0EC07E0A2140F141FA2
-143FEC7FC014FF1303130F90B5FC5A48148014BFEBFE3FEA01F8C7FC147F1500A55C5CA5
-13015CA513035CA513075CA5130F5CA2007FB512F8B612FCA46C14F81E3976B830>I<EC
-07FC91383FFF8091B512E0010314F84980011F8090393FF80FFF90267FE0011380EC8000
-49C7EA3FC05B0001151F4915E01203160FA349141F1201D800E015C090C8FC163F178016
-7F17005E4B5A15034B5A5EED1FF04B5A4B5A4B5A4A90C7FC4A5AEC0FFC4A5AEC3FE0ECFF
-C0495B4990C8FCEB07FCEB1FF8495AEB7FC0495A000390C712F0D807FC497E48481303EA
-3FF048B6FCB7FCA35E6C5D2B397AB830>I<EC07FE91387FFFC049B512F0010780498049
-8090393FFC03FFECE000D97F80EB7F80163FA391C7FCA2131C90C8FC167F17005E4B5A4B
-5A1507ED1FF8EDFFF091B55A495C93C7FC82826D809138003FF0ED07F86F7E15016F7EA2
-8282A3121C007E5D007F5D5A15015E4814034B5A6C140F6C6CEB3FF001E0495A3A3FFC03
-FFC06CB65A6C92C7FC6C14FC000114F06C6C13C0D90FFEC8FC293A7AB830>I<1378EA01
-FE487E5A1480A25A14007E5B6C5AEA00F090C7FCAFEA0F80EA3FC0487E7F12FFA45B127F
-6C5A6CC7FC11276DA630>58 D<ED1F80ED7FC08215FFA25CA3EC03F7A2140715E7A2140F
-15C7A2141F1587143FA2ED07F0147FA214FEA3EB01FCA3EB03F8A2EB07F0A3EB0FE0A249
-B5FCA2825BA25BEC0003A213FEA3485AA212035BD83FFFEB3FFF486D481380B56CB512C0
-A26C496C13806C496C13002A397DB830>65 D<913903FC01E091391FFF81F0027F13E391
-B512F7010314FF5B49130790261FF80113E049487ED97FC0137F495A91C7123F485A4848
-15C0A2485A5B120F5B001FED1F80491500003F92C7FC5BA3127F90CAFCA45A5AA716F86C
-4A7EA26C14035EA26D1307003F5D6D130F001F4A5A6D133F6C6C495A6D495A2607FF0790
-C7FC6CEBFFFE6C5C6C5C6D13E0011F1380D907FCC8FC2C3A78B830>67
-D<013FB512E04914FC90B67EEEFF806D15C07F902607F00013E0EE3FF0161FEE0FF81607
-010F15FC4A1303A2160117FEA2011F14005CA5133F5CA5017FEC01FC91C7FCA3EE03F8A2
-5B49EC07F0A2160F17E0161F000116C049143FEE7F80EEFF005D4B5A00034A5A49EB1FF8
-ED7FF0007FB65AB75A5E4BC7FC15F86C14C02F387EB730>I<013FB7FC49168090B812C0
-A27F7FD903F8C7EA3F80A4177F13074A150083171E94C7FCA2130F5CED01E04B7E821507
-131F91B55AA55B9138800FE0A46F5A017F90C9FC91CAFCA417F0494A7E491403A4160712
-01495DA2003FB7FC5AB8FCA26C5E6C5E32387EB730>I<013FB7FC49168090B812C0A27F
-7FD903F8C7EA3F80A4177F13074A150083171E94C7FCA2130F5CA2ED01E04B7E4B7E131F
-02C05B91B5FCA45B5EEC800FA35E017F6D5A91CAFCA55B5BA512015BA2387FFFF0B57E80
-A25C6C5B32387DB730>I<903B7FFF801FFFE090B56C4813F003E014F8A203C014F06D49
-6C13E0903B07F00001FC00A41603130F4A5CA41607131F4A5CA4160F133F91B65AA55B91
-C7EA1FC0A4163F5B495DA4167F12014992C7FCA45E1203495CA23B7FFF801FFFE0B56C48
-7FA46C496C5B35387EB730>72 D<013FB612804915C0A46D158090260007F0C7FCA5140F
-5DA5141F5DA5143F5DA5147F92C8FCA55C5CA513015CA513035CA2003FB6FC4881B77EA2
-6C5D6C92C7FC2A3879B730>I<0203B512F04A14F8A46E14F091390001FC00A41503A25E
-A41507A25EA4150FA25EA4151FA25EA4153FA25EA4157FA293C7FC123E127F5D6D5B38FF
-00014A5A6C13079038E03FF86CB55A5D6C5C000791C8FC6C13FC38007FE02D3979B730>
-I<90387FFFF890B57EA46D5BD903F8C8FCA513075CA5130F5CA5131F5CA5133F5CA5137F
-91C9FCA4EE03C049EC07E049140FA4161F12014915C0A2007FB7FCB8FCA317806C16002B
-387DB730>76 D<D93FF8ECFFE0496C4913F0496C4913F8A2017F4A13F0013F16E0010F91
-380FFE0002DE147E02DF131FA2EE3EFE131F029FEB7EFC167C16FC16F8ED80F9013F1381
-021FEBF1F8158316E1EC0F8716C3137F017E018F5B1683159F160316079038FE07BE01FC
-01FE5B15FCA215F8160F0001EB03F09026F801E05B91C7FCA3161F1203495DA4163F1207
-4992C7FCA2D87FFC903803FFE0486C497FA46C486D5B35387EB730>I<D97FFC90383FFF
-80496C4913C06E15E0A218C06D6E13800107913803F000ECEF80A31607130F02CF5C15C0
-14C7A2160F131F02875C15E0A30283131F133F02035C15F0A3163FEB7F01017E92C7FC15
-F8A35EEBFE0049147EA315FC16FE0001147C495CA4157D0003143D495C153FEA7FFFB512
-80A2151F5E6C496C5A33387DB730>I<013FB512FC4914FF90B712C017E06D15F06D15F8
-903A03F8003FFC160FEE03FE1601A20107EC00FF5CA2177FA3010F15FE5CA2160117FC16
-03011FEC07F84A130FEE1FF0EE7FE0923801FFC091B612804915005E16F816E093C7FC02
-80C8FC137F91C9FCA55B5BA512015BA2383FFFC0487FB57EA26C5B6C5B30387EB730>80
-D<017FB57E90B612F016FC82826D1580902607F00113C09238007FE0163F161FEE0FF013
-0F4A1307A5011FEC0FE05CEE1FC0163FEE7F8016FF013F010313009138800FFE91B55A5E
-16E05E4980829138001FF815076F7E15015B5BA500011403495CA2177817FCEEF9FE0003
-16FC4914F1A2267FFF8013FBB500C0EBFFF817F0816F13E06C49EB7FC0C9EA3F002F397E
-B730>82 D<001FB712E04816F017F8A35A903A001FC007F0A4160F48133F48028013E000
-7E1507003CED03C0C791C7FCA2147F92C8FCA55C5CA513015CA513035CA513075CA5130F
-5CA20007B57E48804880A26C5C6C5C2D3877B730>84 D<903A1FFF80FFFC4901C113FE49
-01E313FFA26D01C113FE6D018013FC903A01FE003F80EE7F005E6D6C5B15014B5A91387F
-83F8158791383F8FF0EDCFE015DF021F5BEDFF80A26E90C7FC5DA26E5AA25DA3140F4A7E
-A2143F4A7EA214FE01017F4A7EEB03F882903807F03F130F02E07F90381FC01F133F0280
-7F90387F000F5B498000011407485AD83FFFEB3FFF486D481380B590B512C0A26C6E1380
-6C496C130030387DB730>88 D<1278127C12FEA27EA27EA27FA2123F7FA2121F7FA2120F
-A27FA212077FA212037FA21201A27FA212007FA27F80A2133FA280A2131F80A2130F80A2
-130780A21303A280A2130180A2130080A280A21580A2143F15C0A2141FA3140FEC07801A
-4771BE30>92 D<003FB612F05AB712F8A36C15F07E25077C7D30>95
-D<903803FF80011F13F0017F13FC90B57E4880488149C67F49133F48486D7E0003140F5B
-C65A90C77FA25EA2EC3FFF0107B5FC133F90B6FC1203485D48EBE01F381FFE00EA3FF0D8
-7FC0133F5B48C75B5AA2157FA215FF6C4990C7FCEB8007267FE07F13FE90B7FC6C16806C
-14BF6C020F130000039038F803FEC601C0C8FC292A79A830>97 D<EA3FF8487E487EA212
-7F123FEA01FCA512035BA4EC1FF00007EBFFFC01F313FF01F7148090B612C016E09138F0
-3FF048EB800F9039FE0007F85B49EB03FC4913015B121F5B16FE1500A21501003F15FC5B
-A3150316F8127F1507ED0FF0A2ED1FE06DEB3FC000FF147F6DEBFF80D9F00313009038FC
-1FFE90B55A5D485C486C13C0D8781F90C7FC380007F8273977B730>I<EC1FFC91B51280
-010314C0010F14E04914F0137F9039FFF00FF848EB8007489038000FF0D807FC13074914
-E04848EB01C0484890C7FCA2485A5B127F90C9FCA35A5AA77E6CEC0F806D131FED3FC06C
-6C14806D137FD81FF8EBFF00380FFE0390B55A6C5C00015C6C14E0013F1380D907FCC7FC
-252A77A830>I<ED07FF4B13804B13C0A281819238003F80A4167FA21700A491387FC0FF
-903803FFF0010FEBFCFE4913FE017F13FF90B6FC48EBE07F48EB001F48486D5A49130748
-481303485A5B485A495C127FA290C7FC15075A485DA4150FA25E151F6C143F7E157F6D13
-FF6C6C485BEBE007261FF81F13FF6CB71280A26C14BF0001141F6CD9FC0F1300D91FE0C8
-FC2A397AB730>I<EC1FE0ECFFFC010313FF010F1480013F14C04914E09039FFF03FF048
-EB800F3A03FE0007F8484813035B485A4848EB01FC5B123F5B127F90C7FC90B6FCA2B712
-F8A316F048C9FCA37E7EED03C06DEB07E0003FEC0FF07F6C6CEB1FE06DEB7FC0390FFE03
-FF6CB612806C15006C14FC6C6C5B011F13E0010390C7FC262A79A830>I<EEFF80030713
-E0031F13F0157F92B512F85C4AEB07F0EC07FC03F813E091390FF001C04BC7FCA2141F5D
-A548B612FE48815AA36C5DC7D87F80C7FC92C8FCA55C5CA513015CA513035CA513075CA2
-007FB512FEB7FCA46C5C2D397CB830>I<913907F801FE913A3FFF0FFF804A13BF49B712
-C05B5B90260FFC0FEB1F8090271FF007F8130049486C6CC7FCECC001EB7F801400A25B5B
-A315034B5A7F6D495A9138803FE090383FE0FF49B55A90B65A93C8FC4814FC01F913F090
-38F87F80000390CAFC5BA27F120190B512FCEDFF8016E04815F8488148813A1FF00007FF
-D83FC01300498048C86C7E007E151F12FE5AA2163F94C7FC5E5E6C4A5AD87F80EB07FC6D
-131F3A3FFC01FFF86CB612E06C5D6C92C8FC000114FC6C6C13F0010F90C9FC323E7EA730
->I<EB3FF8497E497EA2137F133FEB01FCA513035CA4ED0FF00107EB7FFE02F1B5FC02F7
-148091B6FC17C0EDF03F499038801FE015004A130F14F8A24A131F494814C0A25CA3163F
-133F4A1480A4167F137F91C71300A45E5B495CA23B7FFFF81FFFF8B56C4813FC5DA2816C
-496C13F82E387FB730>I<15E0EC03F8140781A35D6E5A6E5A91C8FCA990B512C048805A
-A27E7EEB001F5DA5143F5DA5147F92C7FCA55C5CA513015CA2007FB61280B712C016E0A2
-16C06C1580233979B830>I<163816FE150116FFA316FEED00FC16781600A991B512F049
-14F8A47FEC000716F0A4150FA216E0A4151FA216C0A4153FA21680A4157FA21600A45DA2
-5DA414015DA414035D1407003C5C007E130FB4495A4A5A14FF90B55A92C7FC6C5B6C13F8
-6C13E000071380284E7EB830>I<EB3FF8497E80A3133FEB00FCA513015CA5010390380F
-FFFE4A487F1880A218006F5B0107010013804A4890C7FCED03FC4B5AED1FF04B5A010FEB
-7F804A48C8FCECC3FEECC7FCECCFF8ECDFFCEB1FFF814A7E4A7E02F87FECE03F49486C7E
-02807FEC000F6F7E8215034980017E13016F7E3B3FFFF80FFFF0486D487FB56C5AA26C49
-7E6C496C5B31387FB730>I<90383FFFF8497F81A37F90380001FCA514035DA514075DA5
-140F5DA5141F5DA5143F5DA5147F92C7FCA55C5CA2003FB612F04815F8B712FCA26C15F8
-6C15F026387BB730>I<913903F001F83B01FF0FFC07FE489039BFFE1FFF91B5007F1380
-93B5FC18C06C9039FC3FFE1F3B003FF81FFC0F02E013F002C013E0A2028013C09139003F
-801F491680A2017E1400A401FE49133F49017E1400A5000102FE5B4949137EA500030101
-14FE01F0495BA23C3FFE07FF03FF80486C48018713C0B5009F01CF13E0A26C010F018713
-C06C486C01031380332881A730>I<ED0FF03A01FFE07FFE4801F1B5FC4801F7148091B6
-FC6C16C06CECF03FD8000F9038801FE015004A130F14F8A24A131F494814C0A25CA3163F
-133F4A1480A4167F137F91C71300A45E5B495CA23B7FFFF81FFFF8B56C4813FC5DA2816C
-496C13F82E287FA730>I<EC1FE0ECFFFC010313FF010F14804914E0137F9039FFE07FF0
-489038800FF83903FE000749EB03FC48481301484814FE491300485A123F5B167F48C8FC
-A300FE15FEA4150116FCA26CEC03F8150716F06C6C130FED1FE06DEB3FC06C6C137F3A1F
-F001FF80D9FC0713006CB55A6C14F86C5C6C14C06C6C90C7FCEB0FF8282A79A830>I<ED
-03FE903A3FFC1FFF8090267FFE7F13E001FF90B57E91B67E6D816D9038FE07FE0101EBF0
-019238C000FF5D92C7EA7F804A143F5C13035C18C0171FA2173F010716805CA3177F1800
-130F5F4C5AA24C5A6E495A011F140F6E495A6EEB7FE09139FF83FFC092B55A94C7FCD93F
-DF5B028F13F8028313E0028090C8FC92C9FC137FA291CAFCA45BA25BA4387FFFF0B57E80
-A25C6C5B323C82A730>I<91383FE00F903A01FFF81F800107EBFE3F011F13FF4914FF5B
-9038FFF03F48EB800F48496C1300D807FC7F48487F5B485A48487F5E5B127F90C8FC1501
-5A485DA41503A25E6C1407150F6C141F7F6C6C133FEDFFF0381FF001EBFC0F6CB6FC7E6C
-14EF6CEC8FE039007FFE0FEB0FF090C7FC151F5EA5153F5EA591381FFFFE4A7F5CA2806E
-5B293C7AA730>I<EE3FE03B01FFFC01FFF848D9FE0F13FC485C037F13FE6C91B5FC6C90
-B512E1D80001EC01FC15FC9238F000704B13005D5D4990C8FC5CA25CA25C13075CA5130F
-5CA5131F5CA2007FB512FCB67EA46C5C2F287DA730>I<91387FF838903903FFFE7C011F
-EBFFFC5B5B90B6FC48EBC01F3903FC0007491303484814F85BA3ED01F06D90C7FCEA03FE
-EBFFF06CEBFF806C14F06D13FC011F13FF01071480D9007F13C0020113E0EC001F001FEC
-0FF06D1307003F1403A27FA21507486CEB0FE0151F6DEB3FC09039FC03FF8090B6FC1600
-B612FC00FC5C013F13E0267807FEC7FC262A79A830>I<EB03C0497E80A3130F5CA5003F
-B612E04815F0B7FCA36C15E026003FC0C7FC5CA5137F91C8FCA55B5BA50001EC0F8049EB
-1FC0A3153F1680157F15FF6D4813009038FF07FE6CEBFFFC5D6D5B6D5B010F1380D903FC
-C7FC243378B130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F003F143F00011401
-495CA415031203495CA415071207495CA4150F120F495CA3151F153F001F147F4B5A000F
-5BD9F80F13FF90B712807EA26C149FC6D9FE0F1300D93FF0C8FC29287AA630>I<3B3FFF
-C07FFF80486DB512C0B515E0A26C16C06C496C13803B03F00007F0006D5C150F00015D15
-1F5E153F6D91C7FC5D0000147E15FE5D140101FE5BA290387E03F0A24A5AA24A5A137F4A
-5A133F4AC8FCA2147E14FE5C131F5CA25C6D5A2B2778A630>I<3B3FFFC01FFFE0486D48
-13F0B515F8A26C16F06C496C13E0D807E0C7EA7E00A35EA34B5AA34B5A143E147F4A485A
-13E1A249495A158FEBC7EF9138CF9F8014DF13CF029F90C7FC15BFEBDF8FEC0FBEA201FE
-13FE5D13FCA25D496C5A3903E003E02D2779A630>I<903AFFFE07FFF0486D4813F84816
-FCA26C16F86C496C13F0903A07F001FC006D6C485A6D6C485A4B5A6D6C485A4B5ADA7F7F
-C7FC157EEC3FFE6E5A5D6E5A5DA24A7E143F4A7EA2ECFCFCEB01F8903803F07E903807E0
-7F49487E011F8090383F801FD97F007F01FE6D7E263FFFC0B5FC4801E11480B515C0A26C
-16806C01C014002E277DA630>I<90B53801FFFE4802837F481780A26C17006C02015B90
-3A07E0001FC05F163F6E91C7FCA20103147EA25E804B5A13014B5AA26E485AA20100495A
-A24B5AA2027E90C8FC5D153E157E157C143E5D143F5DA26E5AA25DA25DA2143F92C9FC5C
-147E14FE5C1301003C5B387E03F0EAFF07495A48485AEB7F80B5FC91CAFC13FC6C5AEA3F
-E0EA1F80313C7EA630>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmbx12 13.14 64
-/Fk 64 122 df<922607FFE0EB1FF892B5D8FC01B5FC0207DAFF071480021F039F14C091
-3D7FFE007FFFF83FE0DAFFF0011F9038E07FF00103018049018013F84990C748EB00FF49
-484A5A495A4A5D495AF27FF0017F5E4A027FEC3FE0053FEC0F80051F91C7FCADBB12E0A5
-26007FF0C7D81FFCC8FCB3B3A2007FB5D8F01FB512FEA54D4D7ECC48>11
-D<923803FFE092B512FC020714FF021F81027F9038007FC0DAFFF0EB0FE0010301C08049
-90C7EA3FF84948147F4A81494814FF495AA2137F5CA2715A715A715AEF078094C8FCA8EF
-07FCB9FCA526007FF0C7123F171FB3B3003FB5D8E00FB512F8A53D4D7ECC44>I<EA07E0
-EA1FF8487E487E7FB5FC1480A314C0A27EA27EEA1FFBEA07E3EA0003A213071480A2130F
-A214005B131E133E5BA25B485A485A1207485A485A001EC7FC120C122577CB22>39
-D<EA07E0EA1FF0487E487E7FB5FCA31480A37EA27E7EEA07E7EA0007A2130F1400A35B13
-1E133E133C137C137813F8485AA2485A485A485A48C7FC121E120C1125778F22>44
-D<B7FCAA200A7F9C29>I<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1F
-F8EA07E01010778F22>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3
-B3B2007FB712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC48814801
-01EBFF802707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC
-6D7F00FF16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F0
-5D17E04B13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B13
-1FEC3F804AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816
-FC5A5A5A5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90
-267FE01F7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3
-805C16FF7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A
-49B512E0168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0
-EA07E0EA1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5B
-D80FFC495B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32
-487BC63D>I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F9
-15F1EC03E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80
-131FEB3F00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003
-EBE000AD023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF
-91B612C017801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01
-E1B512C001E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0
-497F17F8C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815
-FC5B018015F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB51200
-6C90B512FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE02
-1F6D7E027F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948
-130F01FF4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA215
-20913807FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A
-6D7E8391C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C
-5DA26C6D495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C0100
-14F0020F90C8FC32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F
-485E90C8EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA2
-4BC8FC157EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55B
-AA6D5BA26D90C9FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263F
-F00713C049C77F01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7F
-A27F13FE6D140302C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FC
-FF806C91B5C7FC6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF80481307
-2603FE018048486C804848133F4848010F1480003F8049130148486D6C13C0161F824848
-140382A282A2177FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6C
-EB3FF06C9039F003FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32
-487BC63D>I<EC1FFE49B512C0010F14F04914FC90397FFC0FFE903AFFE003FF804849C6
-7F48496D7E4890C7FC486F7E484881161F003F825B007F82A28300FF81A31880A518C0A4
-5E127FA3003F5D7F121F5E120F6C6C91B5FC6C90388001EF6CEBC0036C9038E00FCF6DB5
-128F011F140F010701FE1480010113F8903800010091C7FCA24C1300A3D803F85D487E48
-7E486C4A5AA25F4C5AA24C5A49495B6C485D49010790C7FC01E0495AD807F8EB3FFC6CB4
-48B45A6C90B55A6C15C06D91C8FC011F13FC010313C032487BC63D>I<EA07E0EA1FF8EA
-3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0C7FCB0EA07E0EA1FF8EA3FFCEA7F
-FEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0103077AF22>I<903803FFF8013FEBFF8090
-B612E0000315F8489038007FFCD80FF0EB1FFED81FC0EB07FF48C71480D87FC015C06D7F
-486C15E07FA66C5A6C484913C06C5A0007C7481380C8FC4B13004B5AED7FF84B5A16C04A
-5B4A90C7FC15FC4A5A5D140F5D4A5AA25D4AC8FCA3143EAB143C91C9FCA9147E49B47E49
-7F497FA2497FA66D5BA26D5B6D5BD9007EC8FC2B4D79CC3A>63 D<EE01F8A24C7EA34C7E
-A24C7EA34C7FA24C7FA34C7FA293B57EA34B8016F303038016E316E103078016C0030F80
-5E83031F814C7E4B81153E83037E81037C7F03FC815D830201824B7F0203825D83020782
-4B7F020F825D84021F8392B8FC4A83A34A83027CC8120F02FC835C840101844A81010384
-5C840107844A81010F845C85011F85496C82B600C091B712F0A5544D7CCC5D>65
-D<B912F0F0FF8019F019FC19FFD8001F0180C780061F7F727F727F727F727FA2727FA219
-7F86A84F5AA2626062604E5B4E5B4E1380067F90C7FC943803FFFC92B712F0198019F019
-FC0380C7383FFF80060F7F060313F0727F727F737E86851B80851BC0A21BE0A48561A41B
-C0A2611B80611B0096B5FC4E5B4E5B060F5B067F5BBB12C097C7FC19FC19F04EC8FC4B4B
-7CCA57>I<93261FFF80EB01C00307B500F81303033F02FE13074AB7EA800F0207EEE01F
-021F903AFE007FF83F027F01E0903807FC7F91B5C73801FEFF010301FCEC007F4901F081
-4901C0150F4949814990C97E494882495A48498248197F5C48193F5C48191F5C48190FA2
-485BA21A075AA391CDFCA2B5FCAD7EA280F207C0A27EA36C7F1A0F6C1A80806C191F6E18
-006C61806C197E6C6D177C6D6C17FC6D6C4C5A6D6D4B5A6D6D4B5A6D01F0ED1FC06D01FC
-4B5A010001FF03FFC7FC6E01E0EB07FE021F01FEEB3FFC020790B612F0020116C0DA003F
-92C8FC030714F8DB001F13804A4D79CB59>I<B912F0F0FF8019F019FC19FFD8001F9026
-80000114C0DD001F7F060713F806017F726C7E737E737F737F737F8587737F8587A2747E
-A38786A21C80A51CC0A586A462A51C80A51C00A26263A2631AFF636163614F5B634F5B07
-3F90C7FC4F5A4F5A06035B061F5B4DB512C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E
->I<BB12C0A486D8000F01E0C77E18071801F0007F193F191F190F1907861903A31901A3
-EF0F80A2737EA497C7FC171FA2173F177F17FF160392B6FCA5EDE0031600177F173F171F
-A2050FEC0F80A3F21F00A494C8FC621A3EA21A7EA31AFE6219011903A21907190FF13FF8
-19FF1803183FBBFCA262A3494A7CC951>I<BBFCA41A80D8001F01C0C7FC181F18038484
-197F193F191F1AC0190FA31907A4171FF103E0A496C7FCA25FA25F5F5E160792B6FCA5ED
-C0071601828383A283A794C9FCB1B8FCA5434A7CC94D>I<93261FFF80EB01C00307B500
-F81303033F02FE13074AB7EA800F0207EEE01F021F903AFE007FF83F027F01E0903807FC
-7F91B5C73801FEFF010301FCEC007F4901F0814901C0150F4949814990C97E494882495A
-48498248197F5C48193F5C48191F5C48190FA2485BA21A075AA391CEFCA2B5FCAD7E050F
-B712C080A37E94C7001FEBC000807EA27E807E807E806C7F7E6D7E6D7E6D7F6D01E05D6D
-6D5D6D13FC010001FF4AB5FC6E01E0EB07F9021F01FFEB3FF0020791B5EAE07F0201EEC0
-1FDA003FED0007030702F81301DB001F018090C8FC524D79CB60>I<B7D8FC01B712FCA5
-D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712FCA5564B7BCA
-60>I<B712FEA5D8000FEBE000B3B3B3ABB712FEA5274B7DCA2E>I<B700F8027FB512F0A5
-D8001F01C0C9EBC00074C7FCF101FE4F5A4F5AF10FE04F5A4F5A4FC8FCF001FE4E5A4E5A
-F00FE04E5A4E5A4EC9FCEF01FE4D5A4D5AEF0FE04D5A4D5A4DCAFCEE01FE16034C7E4C7F
-5E4C7F93B57E03C18015C303C780DBCFE77FDBDFC37FEDFF8104017F4B6C804B7F4B6D7F
-03E0814B6D7F8385717F717F83857180727F8486727F8486727F727F84867280737F8587
-737F87B700F8010FB612FCA5564B7CCA60>75 D<B8FCA5D8001F01C0C9FCB3B3A4193EA4
-197E197CA519FCA31801A2F003F8A21807180F181F183F187FEF01FF1707173FBA12F0A5
-3F4B7BCA4A>I<B600E04DB612806F5FA26F5FA2D8001F09FCC7FC6FEF0F7FA2DABFFE17
-1EA2DA9FFF173CA3028F6D1678A202876D16F0A202836DED01E0A302816DED03C0A20280
-6DED0780A26F6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F6D5CA36F6D495AA26F6D49
-5AA26F6D495AA3706C49C7FCA2706C131EA2706C5BA3706D5AA2706D5AA270EBE1E0A370
-EBF3C0A270EBFF80A27190C8FCA2715AA3715AA2715A497EB600F06D480103B71280A371
-5A715A694B7BCA74>I<B600E092B612FC8181A281D8001F6D9239001FE0006F705A82A2
-8202BF7F029F7FA2028F7F02877F02837F8214810280806F7F6F7F83816F7F6F7F6F7F83
-816F80707F707F8482707F707F707FA2707F7014807113C019E0837113F07113F87113FC
-19FE837113FF71148F7213CF1AEF847213FF8484A284848485A2858585A285858585497E
-B600F8167F1A3F1A1F1A0FA2564B7BCA60>I<EEFFF8031FEBFFC04AB612FC020715FF02
-1FD9C01F13C091277FFE000313F0902601FFF09038007FFC49496E7E490180EC0FFF4990
-C86C7F49486F7F49486F7F017F8449486F7F4849707EA24849707E4885A24849701380A2
-481AC04A82A2481AE0A34890CA6C13F0A5B519F8AE6C1AF0A26E5EA36C1AE0A26E5E6C1A
-C0A26C1A806E5E6C1A006E5E6C616E16FF6C616C6D4B5B6D6C4B5B6E5D6D6D4A5B6D6D4A
-5B01076D4A90C7FC6D01F8ECFFFE6D01FE01035B9028007FFFC01F13F0021F90B612C002
-0793C8FC020115FCDA001F14C0030101FCC9FC4D4D79CB5C>I<B912C018FCF0FF8019F0
-85D8001F902680000713FE05007F063F1380060F13C07213E01AF0841AF8A27213FCA31A
-FEA81AFCA34E13F8A21AF0601AE04E13C0063F138095B51200050713FC92B75A19E096C7
-FC18F803C0CAFCB3ABB712FCA5474B7BCA54>I<EEFFF8031FEBFFC04AB612FC020715FF
-021FD9C01F13C091277FFE000313F0902601FFF09038007FFC49496E7E490180EC0FFF49
-90C86C7F49486F7F49486F7F49486F7F01FF844849707E4A163F48854849707EA2481A80
-4A82481AC0A291CA7E481AE0A3481AF0A24983A300FF1AF8AE007F1AF0A36D5FA26C1AE0
-A36C6D4C13C0A26C1A80A26C6D4C1300EE1FC06C6DD97FF0495A923801FFFC6C6D486D49
-5A6C912607F07F5CD97FF8903AC00F80FFF0913AFC0F8007C1D93FFE010001C35BD91FFF
-DA03E75B0107018F6DB5C7FC6D01EF5D6DD9FF805C6D6C01C014F0021FD9F01F13C00207
-90B6C8FC02014B1408DA001F6E141C03019038FC7F8092C87F726C133C73137C9638FC03
-FC96B5FC1BF884A37214F0A37214E0A27214C0721480721400735A735AF10FF04E6179CB
-5C>I<B9FC18F8F0FF8019E019F8D8000F9026C0000713FE9439007FFF80061F7F727F72
-7F727F84868684A286A862A24E5BA2624E5B4E5B4E5B4E5B95B5C8FC050713FC92B712F0
-198006FCC9FC18FF9226C0003F13C0050713F0717F717F717F187F85727FA28486A786A7
-1C3E86A28474137E72157C726D13FCB700FC6D9038FE01F872EBFF8373EBFFF0071F14E0
-07031480CD383FFE00574C7CCA5C>I<DA7FFCEB01C00103B5EAC003011FECF00749ECFC
-0F90B7121F48D9E00F13BF4890C713FFD807FC141F4848804848140382484880177F485A
-173F171F12FFA2170F7FA217077F7F7F6D92C7FC6D7E6C13F014FF15F86CECFF8016F86C
-15FF6C16C0836C826C826C826C82013F816D1680010716C01300020F15E01400030714F0
-ED007F160F16037013F882177F127800F8163FA3171FA27E18F0A27EA26CEE3FE07F18C0
-01E0157F6DEDFF8001FC160001FF140302E0EB0FFED97FFEEB3FFC486CB612F0D8FC0F5D
-D8F803158048C66C49C7FC48010313F0354D79CB44>I<003FBB12C0A5DA80019038FC00
-1FD9FC001601D87FF09438007FE001C0183F49181F90C7170FA2007E1907A3007C1903A5
-00FC1AF0481901A5C894C7FCB3B3A749B812FCA54C4A7CC955>I<B700F8023FB512F8A5
-D8001F01C0C9380FE000745AB3B3AD6D180F63811A1F6D96C7FC626D7F1A7E6D7F6D606E
-6C4B5A6E6CED07F06E6C4B5A6E01C0EC3FC06E01F049B45A020101FF011F90C8FC6E91B5
-5A033F15F8030715E0030092C9FC040713F0554C7CCA5E>I<B7D8E007B791B612C0A5D8
-003F0180C7000101FCC9387F80006F7070C7FC6D70183EA26F70167E6D71177C876F1BFC
-6D715F6F831E016D656F4B6D14036D65876F92B515076D656F4A8007F3160F6E64700103
-6E141F6E04E194C8FCA27001076E5C6E04C0163E8770010F177E6E4C6C157C70011F814F
-6C15FC6E637049EDC0016E033E6D5D1CE070017E16036E037C6D5D7001FC15F04E6D1407
-6E63DCFF01EEF80F6F4A6D5DA20583EEFC1F6F4A6D92C9FC1CFE05C75F6F4A6D143E05EF
-16FF4E6E137E6F197C05FF17FC6F91C86C5BA36F496F5BA24D816F61A26F496F5BA37048
-6F5BA370486F90CAFCA24D81041F5FA27048167C7A4C7ECA7F>87
-D<B700F84AB6FCA5D8001F01F0C93803FC006F705A6D4E5A6D6D4C5A816D4E5A6D6D4C5A
-826D4EC7FC6E6D5D70157E6E5F6E7F704A5A6E4C5A6E7F704A5A6E4C5A6E7F71495A6E4C
-C8FC6F7F71137E6F5D6F7F71485A6F4A5A6F13FC71485A6F4A5A6F13FFF09F806F02BFC9
-FC7013FF60705B8260705B8260B3A7037FB612FEA5584B7ECA5D>89
-D<130C131E137E5B485A5B485A485A485AA248C7FC121E123E123C127CA21278A212F85A
-A2EAF1F8EAF7FEB5FC1480A214C0A27EA37E14807E6C13006C5AEA01F8122579CB22>96
-D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF2703FC00077F486C6D7F486C6D
-7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF021FB5FC49B6FC130F013FEBC0
-3F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167FA26D14FF007F
-15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038FFFE0300014A
-7ED8003F9038F0007F0103018090C7FC37337CB13C>I<EB7FC0B5FCA512037EB3A2ED0F
-FF037F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00113E092C76C7E02FC6E7E4A
-6E7E5C4A6E7E84831980A219C083A319E0AC19C0A25F1980A34D1300606E141F606E4A5A
-6E4A5A02BF4A5A91261F80035B9027FE0FF01F5B496CB548C7FC496C14F849C614E0C8D8
-0FFEC8FC3B4D7CCB44>I<91380FFF8091B512F8010314FF010F158090263FFE0013C0D9
-7FF8EB1FE0D9FFE0EB3FF04849EB7FF8484913FF4890C7FC5A5B121F5B003FED7FF0EE3F
-E0007FED1FC093C7FC5BA212FFAC127F7FA2123FA26D153E121F6D157E6C167C6C6D14FC
-6C16F86C6D13036C01F0EB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C010014
-F0020F13802F337CB137>I<EF1FF0EE3FFFA51600177FB3A2EC0FFF91B512E0010314F8
-010F14FE013FEB01FF903A7FF8003FFFD9FFE0130F48497F48497F4890C77E4881485AA2
-485AA3127F5BA212FFAC127FA37F123FA2121F7F000F5D6C6C5C5E6C6D5B6C01E0497F6C
-6D017FEBFFE090393FFE03FE6DB512F801075C010114C09027001FFC00EBC0003B4D7CCB
-44>I<EC0FFF91B512F0010314FC010F14FF90263FFE077F90267FF0007F4948EB3FE048
-01806D7E48824890C76C7E4848140783485A003F6F7EA3485A701380A312FFA290B8FCA4
-01F8CAFCA5127FA27FA2123FA26C6CED0F80A2000F161F6C6C16006E5C6C6D147E6C6D5C
-6C6D495AD97FFCEB07F0903A1FFF803FE06D90B55A010392C7FCD9007F13FC020713C031
-337DB138>I<ED7FE0913807FFFC021F7F027F7F902601FFE0138049018113C0902607FE
-0113E049485A14F8131FEB3FF0A26F13C0EB7FE06F1380EE3E0093C7FCADB77EA526007F
-F0C8FCB3B3A2003FB512F8A52B4D7DCC26>I<DA7FFCEB0FF00103B538807FF8011F9138
-F1FFFC4991B512FE90267FF01F13F32701FFC007138348EB0001A248486DEBC1FC000FEE
-E0F849027F1300A2001F82A8000F5EA26D14FF00075E6C6C495BA26CD9C00790C7FC6C90
-38F01FFC4890B55A5ED803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FC
-EEFFC06C16F817FE6C8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0
-140049153F4848ED1FFC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED
-7FE0D80FFE913801FFC06C6C6C010713806C01F8017F1300C690B612FC013F15F0010715
-80D9003F01F0C7FC37487DB03D>I<EB7FC0B5FCA512037EB3A2923801FFC0030F13F803
-3F13FE4B7F9126C1FE077F9126C3F0037F9138C7C001DACF8080150002DE7F02FC81A25C
-A25CA35CB3A9B6D8C07FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5B
-A26C5B6C90C7FCEA00FC90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>I<
-EB7FC0B5FCA512037EB3A393383FFFFEA5040390C7FC17FCEE0FF04C5A4C5A4C5A04FEC8
-FCED03FC4B5A4B5AED1FC0ED7F804BC9FC14C102C37F14CF02DF7F91B57E825C4A6C7E02
-F87F4A6C7E9138C01FFF81836F7F6F7F816F7F83707E163F707E83707F707F84B6D8803F
-EBFF80A5394C7CCB41>107 D<EB7FC0B5FCA512037EB3B3B3AAB61280A5194C7BCB22>I<
-90287FC001FFE0EC7FF8B5010F01FC0103B5FC033F6D010F804B6D6C4814E0DBFE079026
-C03F817F9126C3F0019138FC007F0003D9C7E0DAE1F8806CDA8000D9F1E06D7E02CFC7EB
-F3C002DE91267FF780131F02FC03FFC77FA24A5DA24A5DA34A5DB3A9B6D8C03FB5D8F00F
-B512FCA55E317BB067>I<903A7FC001FFC0B5010F13F8033F13FE4B7F9126C1FE077F91
-26C3F0037F00039038C7C0016CD9CF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C0
-7FEBFFE0A53B317BB044>I<913807FF80027F13F80103B6FC010F15C090261FFE017F90
-3A7FF0003FF8D9FFC0EB0FFC48496D7E4890C76C7E4817804980000F17C048486E13E0A2
-003F17F049157FA2007F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3001F17E06D5C00
-0F17C06C6C4A13806C17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612
-C0010392C7FCD9007F13F80207138036337DB13D>I<90397FC00FFFB5017F13F002C1B5
-12FC02C714FF9126CFF80F7F9126FFC00313E0000391C77F6C01FC6E7E4A6E7E5C4A6E7E
-848319808319C0A47113E0AC4D13C0A319805FA219004D5A804D5A6E4A5A6E4A5A02FF49
-5BDB80075B9126EFF01F5B02E7B548C7FC02E314F802E014E0DB0FFEC8FC92CAFCAFB612
-C0A53B467CB044>I<DA0FFE14F091B5EAC0010103ECF003010F14F8013F903801FC0790
-3A7FFC007E0FD9FFF0131F4849EB0F9F4849EB07FF485B4890C77E82485A003F81A25B00
-7F167FA3485AAC6C7EA4123F6D15FF121F6D5C6C5D6C7F5E6C6D5B6C6D133F6C01F813FE
-90393FFE03FC6DB55A010714E00100148091381FFC0091C8FCAF047FEBFFE0A53B467CB0
-41>I<9039FF803FE0B5EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C
-139E14BCA214F8A24A6C13806F13004A6C5A93C7FCA45CB3A7B612E0A52A317CB032>I<
-90390FFF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90C7
-12035A1501A27FA213E06D90C7FC13FE387FFFF0ECFFC015F06C14FC6C14FF6C15806C15
-C06C15E0C615F0013F14F8010714FCEB007F14019138003FFE150F0078140700F81403A2
-6C1401A37E16FC6C14036D14F87F6DEB07F001F8EB1FE001FFEBFFC091B51280D8FC7F14
-00D8F81F13FCD8E00313C027337CB130>I<14F8A61301A41303A21307A2130FA2131F13
-3F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A6167CAA013F14F880A290391F
-FE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>I<D97F
-E0EC3FF0B5EC7FFFA5000315016C81B3AB5EA25EA25E7E6EEB0F7F017F021E7F6E017CEB
-FFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B327BB044>I<
-B66C90B512C0A5000101E0C73807F0006E5D6C5F6E140F017F5E80171F013F93C7FC6E5C
-011F153E6E147E6D157C6F13FC6D5DEDC001A26D01E05B16036D5DEDF0076D5DEDF80F02
-7F5CEDFC1F023F91C8FC15FE5E021F133EEDFF7E6E137C16FC6E5BA26E5BA36E5BA26E5B
-A26F5AA26FC9FCA23A317DAF41>I<B60081B500FC90387FFFF0A500019026E000030180
-903803FC006E715A6C6F5E6E6F1303017F61A26E496D1307013F616E6F130F011F4A5EA2
-6E6F131F6D4A93C7FCDD9FFC5B6DD9801F153E170F03C06E137E6D023F157C93383E07FF
-DBE07E15FC6DDA7C035C03F015816D02FC5D4C7E03F815C3DA7FF95E9226FDF00013E7DA
-3FFF5E4C137F19FF6E5F4C7FA26E496D90C8FCA26E5E93C7120FA26E486E5AA202015E4B
-1403A26E486E5A54317EAF59>I<B6D88007B512C0A526007FFCC7387F8000013F037EC7
-FC6E14FE6D6C495A6D6D485A6D6D485A6D01E05B4C5A6D6D485A6DEBF83F6E6C48C8FC91
-383FFEFE6E6C5A5E6E5B6E5B806E7FA26E7F82824A7F5C4A80DA0FE77FDA1FC37FDA3F81
-7F4AC67F147E4A6D7E49486D7E01036E7E49486D7F49487F49488149486D7F017F6E7FB5
-00F8011FEBFFF0A53C307EAF41>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D
-017F5E6E1407013F5E6E140F011F5E6E141FA26D6D91C7FC5F6D153E6F137E6D157C6F13
-FC6D5DEDF0016D5DEDF803027F5C15FC1607DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF
-6E13BE16FE6E5BA36E5BA26E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F80
-13FC486C5B387FE001D8FFF05B14035D14074A5A49485A007F49CAFCEBC07E383F81FC6C
-B45A6C5B6C13C0C648CBFC3B467EAF41>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmcsc10 10.95 23
-/Fl 23 121 df<B6FCA618067E9622>45 D<166016F01501A216E01503A216C01507A216
-80150FA2ED1F00A2151E153EA2153C157CA25DA25D1401A25D1403A25D1407A24A5AA292
-C7FC5CA2141E143EA25CA2147814F8A25C1301A25C1303A2495AA25C130FA291C8FC5BA2
-133EA2133C137CA2137813F8A25B1201A2485AA25B1207A25B120FA248C9FCA2121E123E
-A2123C127CA2127812F8A25A1260245B7AC332>47 D<EB07FC90383FFF8090B512E03903
-F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB
-1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A
-5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E0485A485A48
-5A48C7120148B6FCA25A4815C0B7FCA3243D7ABC32>50 D<EC01E0A24A7EA34A7EA34A7E
-A24A7E141CA2EC3CFFEC387FA24A6C7EA34A6C7EA2010180ECC00FA249486C7EA349486C
-7EA24980010E1301010FB5FC4980A2011CC7FC49147FA20178810170143FA201F0814914
-1F1201486C811207486CEC3FF8D8FFFE49B512C0A332317DB038>97
-D<B612FEEDFFC016F03A03FC0007F86C48EB01FE1500167F1780163F17C0A61780167F17
-0016FE4B5AED07F0ED7FE090B6128016F09039F80001FC6F7EEE7F80163FEE1FC017E016
-0F17F0A617E0161FA2EE3FC0EE7F80923801FF00486CEB07FEB712F85E93C7FC2C2F7CAE
-35>I<DA0FF81330DA7FFF13700103B5EAC0F090390FFC03F190391FE000F9D97F80133F
-01FEC7121F4848140F48481407485A000F1503491401121F491400123F5B127F1770A248
-C9FC1700AA6C6C1570A3123F6D15F0121F6D15E0000F15016D15C0000715036C6C15806C
-6C14076C6CEC0F00D97F80133ED91FE05B90390FFC03F00103B55AD9007F1380DA0FF8C7
-FC2C317BAF36>I<B612FCEDFFC016F03A03FE000FF86C48EB01FEED007FEE3F80EE1FC0
-EE0FE0EE07F0160317F8160117FCA2EE00FEA417FFAA17FEA3EE01FCA3EE03F817F01607
-EE0FE017C0EE3F80EE7F00ED01FE486CEB0FFCB712F016C04BC7FC302F7CAE39>I<B8FC
-A33903FE00016C489038003F80161F160F1607A21603A317C0ED1C01A393C7FCA2153CA2
-15FC90B5FCA3EBFC00153CA2151CA21770A392C712E0A41601A2EE03C0A21607160F161F
-486C14FFB81280A32C2F7CAE33>I<B712FEA33903FE00036C48EB007F828282A282A3EE
-0380A21538A293C7FCA31578A2EC01F890B5FCA3EBFC01EC0078A21538A592C8FCAA487E
-B512FCA3292F7CAE31>I<DA0FF81360DAFFFE13E00103EBFF8190390FF807E390393FC0
-00F34948137F01FEC7123F4848141F4848140F48481407120F491403485A003F1501A25B
-007F1500A348C9FC1700A8031FB5FCA26C7E9238001FF0EE0FE0123F7FA26C7E120F7F12
-076C7E6C7E6C6C141FD97F80133FD93FE0137B90390FFC03F10103B512E00100EC8060DA
-0FFCC7FC30317BAF3A>I<B5D8F81FB5FCA3D803FEC7EA7FC06C48EC3F80B190B7FCA301
-FCC7123FB3486CEC7FC0B5D8F81FB5FCA3302F7CAE38>I<B512F8A33803FE006C5AB3B3
-A3487EB512F8A3152F7DAE1B>I<90383FFFFCA39038007FC0EC3F80B3AD1218127EB4FC
-A3EC7F005A007C137E007813FE383C01F8381F03F03807FFC0C648C7FC1E307CAE27>I<
-B512FCA3D803FEC8FC6C5AB3A7160EA4161CA4163CA2167C16FC1501ED03F8486C131FB7
-FCA3272F7CAE2F>108 D<D8FFFE923807FFF0A3D803FF92380FFC006C5FD9DF80141DA3
-D9CFC01439A2D9C7E01471A3D9C3F014E1A2D9C1F8EB01C1A3D9C0FCEB0381A2027EEB07
-01A36E130EA291381F801CA391380FC038A2913807E070A3913803F0E0A3913801F9C0A2
-913800FF80A3486CEB7F00487E486C013E497EB5008091B512F0A2151C3C2F7CAE44>I<
-D8FFFC49B5FC7F7F00019138001FF06EEB0FE06EEB07C0EE0380EBDFE0EBCFF013C780EB
-C3FC13C180EBC0FF801580EC3FC0EC1FE0A2EC0FF0EC07F8A2EC03FCEC01FE140015FFED
-7F83153F16C3ED1FE3ED0FF3A2ED07FBED03FFA28181A2167F163F486C141F487E486C14
-0FB56C1307A21603302F7CAE38>I<EC1FF891B5FC903907F00FE090390FC003F0013FC7
-12FC017E147E49804848EC1F804848EC0FC04848EC07E0000F16F0491403001F16F84914
-01003F16FCA2007F16FE90C9FCA34816FFAA6C6CEC01FEA3003F16FCA26D1403001F16F8
-6C6CEC07F0A26C6CEC0FE0000316C06C6CEC1F806C6CEC3F00017E147E6D5C90390FC003
-F0903907F00FE00100B5C7FCEC1FF830317BAF3A>I<B612FCEDFF8016E03A03FE000FF8
-6C48EB03FCED00FE167FA2EE3F80A217C0A61780A2EE7F00A216FEED03F8ED0FF090B612
-C093C7FC01FCC9FCB2487EB512F8A32A2F7CAE33>I<B612E015FE6F7E3A03FE003FE06C
-48EB07F8ED01FC6F7EA2828283A594C7FC5E5E4B5A4B5A4B5AED3FC090B500FEC8FC5D90
-38FC007FED1F806F7E826F7EA26F7EA582A4EF01C016FEA21501486CED0380B538F800FF
-93383F8700EE1FFEC9EA03F832307CAE37>114 D<90383FC00C9038FFF81C0003EBFE3C
-390FE03FFC381F8007EB0003003E1301481300157C5A153CA36C141CA27E6C14006C7E13
-E013FE383FFFE06C13FE6CEBFF806C14E0000114F06C6C13F8010F13FC1300EC07FE1401
-1400157F153F12E0151FA37EA2151E6C143E6C143C6C147C6C14F89038C001F039FBF807
-E000F1B512C0D8E07F130038C007FC20317BAF2A>I<007FB712F8A39039801FF0073A7E
-000FE00000781678A20070163800F0163CA348161CA5C71500B3A8EC3FF8011FB512F0A3
-2E2E7CAD36>I<B5D8F801B5FCA3D803FEC7EA1FF06C48EC0FE0EE07C0EE0380B3AB1607
-6C6C1500A2017E5C017F141E6D141C6D6C133C6D6C5B6D6C485A903903FC07E00100B512
-80DA3FFEC7FCEC07F830307CAE38>I<3B7FFFF001FFFEA30003D9C00013E0C649EB7F80
-017F027EC7FC167C6D6C13786D6C5B6D6C5B15016D6C485AD903FC5B15076D6C48C8FC90
-3800FF1EEC7F9C15BCEC3FF86E5AA2140F6E7E14034A7E4A7EEC1EFF141C91383C7F804A
-6C7E14709138F01FE049486C7E49486C7E148001076D7E49486C7E130E011E6D7E496E7E
-017C6E7E13FC000382D80FFEEC7FF8B549B512C0A3322F7DAE38>120
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmti10 10.95 18
-/Fm 18 121 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C
-137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218
-E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214
-3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101
-13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2
-49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12
-D<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>46 D<147E49B47E903907C1
-C38090391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F5B001F
-5C157E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F13
-70127C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00
-FF00D800FC133E252977A72E>97 D<EC1FC0ECFFF0903803F03C903807C01E90381F800E
-90383F000F017E133F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F90
-C8FCA35A5AA6481403007E1407150F151E003E143C15786C14F0EC03E0390F800F803903
-E07E003801FFF838003FC0202977A72A>99 D<EE3F80ED1FFF1700A2ED007FA2167EA216
-FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC0
-90383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE
-127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F000
-7E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E2940
-77BE2E>I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A1207
-4848133E49133C121F4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8
-FCA45AA61506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC38
-01FFF038007F801F2976A72A>I<EC03F0EC0FFC91383E0E1C9138FC077E903901F003FE
-1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE1303A2484814F0A21507
-12034914E0A2150F12074914C0A2151FA216805B153F1203ED7F006D5BA200015B000049
-5A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25DA21403A25D001C130700
-7F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D803FEC8FC273B7CA72A>
-103 D<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0
-121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA2
-12035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03
-FEEA00F8163E79BC1C>105 D<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A213
-3FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA212
-1FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA
-3C70EA1FE0EA0780144079BE17>108 D<D801F0D93F80137F3D07FC01FFE003FFC03D0F
-3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C3800001C49D97E707F003C01F0
-5C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA007EA203
-01140301FE5F495CA203031407000160495C180F03075D0003051F13E0494A1480A2030F
-EC3F810007F001C0495CA2031F91383E0380120F494AEC0700A2033F150E001FEF1E1C49
-91C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07
-C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C38783FC012705C91C7FC
-00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E0003020F13704914C0A2
-031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007
-C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80
-017E14C0491307484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA215
-1F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A
-260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<903903E001F890390FF807
-FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED
-80019038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17
-E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F
-80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0
-B5FCA22D3A80A72E>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB
-380F001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05B
-EA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726
->114 D<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E4913
-7E15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F013
-00140F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F80127000
-78EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25C
-A2130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25B
-A21201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB00
-78147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<017CEB01C048
-B4EB07F038038F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F13
-0000705BA2EAF03F91C712E012005B017E130116C013FE5B1503000115805BA2ED070012
-03495B150EA25DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F025
-2979A72A>118 D<903903F001F890390FFC07FE90393C1E0E0F9026780F1C138001F0EB
-B83FD801E013F89039C007F07FEA0380000714E0D9000F140048151C000E4AC7FCA2001E
-131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA30101143C001E1538003F491378D8
-7F811470018314F000FF5D9039077801C039FE0F7C033A7C0E3C078027783C1E1EC7FC39
-1FF80FFC3907E003F029297CA72A>120 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmbxti10 14.4 1
-/Fn 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
-EA0FE0121271912B>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmbx12 17.28 52
-/Fo 52 122 df<94267FFF80903801FFE0043FB500F0013F13FC4BB6D8FC01B57E030FDB
-FF0FECFF80037F04BF15C04AB5D8E00390B5008113E04A01FCC76CEBFC03020F01F091B5
-D8F00713F04A01C04914E04A90C7484A4813F84A4817804A485C49491700495B62495B76
-13F04970496D13E04B7213C0726F138072EE3E009AC7FCB0BD12FEA6D8000F01E0C849C9
-FCB3B3B0003FB6D8F803B712E0A665657DE45E>11 D<94387FFF80041FB512F04BB612FC
-030F81037F6F7E4AB5D8E0077F4A49C76C7E020F01F0EC1FF04A01C0147F4A90C8487E4A
-485C4A484A7F49495C495BA2495B4E7F49705B5DA3725B725B725B735A96C9FCAB0503B5
-12FEBBFCA6D8000F01E0C7120184B3B3AF003FB6D8F803B71280A651657DE45A>I<ED0F
-FF4AB512F8020F14FF023F15C091B712F049D9FC037F0107D9F00013FE4901C0EB3FFF49
-90C7000F7F49486E7F017F8349486E7F4A80488448496E7FA248844A157F4884A3481980
-A34819C04A81A34819E0A7B518F0B3A86C19E0A76C19C0A26E5DA26C1980A36C1900A36C
-6D4B5AA26C60A26C6D4A5B6C606E5C6D6C4A5B6D6C4A5B6D6D495B6D6D4990C7FC6D01F0
-EBFFFE6DD9FC035B010090B612F0023F15C0020F92C8FC020114F8DA001F138044607ADD
-51>48 D<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3
-B3B3B3007FB91280A6395E74DD51>I<913801FFF8021FEBFFC091B612F8010315FF010F
-16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F86E148048
-486E14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380A219FFA2
-83A36C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0A294
-B512C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90
-C8FC4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9
-FC02FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5A
-BAFCA219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49B712C04916F0010FD9C01F
-13FC90271FFC00077FD93FE001017F49486D8049C86C7F484883486C6F7F14C0486D826E
-806E82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91C7FC
-604C5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F817E094C9FC17F817FF91C7
-003F13E0040713F8040113FE707F717F7113E085717FA2717F85A285831A80A31AC0EA03
-FCEA0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F
-000F5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90B65A011F
-16F0010716C001014BC8FCD9001F14F0020149C9FC426079DD51>I<F01F804E7E187F18
-FFA25F5F5F5FA25F5F5FA294B5FC5E5E5EA25E5EEE3FBFEE7F3FA216FEED01FCED03F8ED
-07F0A2ED0FE0ED1FC0ED3F8016005D15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24AC7FC14FE
-495A5C1303495A495A495A5C133F49C8FC13FE485AA2485A485A485A5B121F485A48C9FC
-12FEBCFCA6CA6CEBC000B1037FB8FCA6485E7CDD51>I<01C0EE01C0D801F8160F01FF16
-7F02F0EC07FFDAFF8090B5FC92B7128019006060606060606095C7FC17FC5F17E0178004
-FCC8FC16E09026FC3FFCC9FC91CBFCADED3FFE0203B512F0020F14FE023F6E7E91B712E0
-01FDD9E00F7F9027FFFE00037F02F801007F02E06EB4FC02806E138091C8FC496F13C049
-17E07113F0EA00F090C914F8A219FC83A219FEA419FFA3EA03F0EA0FFC487E487E487FA2
-B57EA319FEA35C4D13FC6C90C8FC5B4917F8EA3FF001804B13F06D17E0001F5E6C6C17C0
-6D4B1380D807FC92B512006C6C4A5B6C6C6C01075B6C01E0011F5BD97FFE90B55A6DB712
-C0010F93C7FC6D15FC010115F0D9003F1480020301F0C8FC406078DD51>I<EE1FFF0303
-B512E0031F14F892B612FE0203814AD9FC037F021F9039C0007FC04A90C7EA1FE0DAFFFC
-6E7E494914074949EC7FF8494914FF49495B4949497F4990C7FC495D5C13FF485BA25A4A
-6E5B5A715B48496E5B725A4894C8FCA35AA35C48913801FFE0030F13FE033F6D7E4B14E0
-92B612F89126E1FE037FB53AE3F0007FFEDAE7E06D7EDAEFC06D7F4B6D7F02FFC76C7F4A
-82717F4A82A2854A8085A24A1780A54A17C0A37EA77EA47E6E1780A27EA21A007E4D5B7E
-6E5E7E6E5E6C4C5B6D7E013F4B5B6D6C4A5B6D01C0495B6D6D90B5C7FC6DD9FC0713FC6D
-90B65A6D5E023F15C0020F92C8FC020114F8DA001F1380426079DD51>I<EA07E0120F7F
-13FCEBFFFC91B912F8A45AA21AF01AE01AC01A801A00A248606161616101E0C9123F0180
-4C5A48CA485A4D90C7FC60007E4C5A17074D5A4D5A4D5A485F4D5A17FF4C90C8FCC9485A
-5F4C5A160F4C5A5F163F4C5A16FF5F5D94C9FC5D5D5E150FA24B5AA2153FA24B5AA215FF
-A34A5BA25CA35CA44A5BA45CA65CAD6E5BA26E5BDA03FECAFC6E5A456377E051>I<9238
-3FFF800203B512FC021FECFF80027F15E049B712F849D9F0077F010F90C76C7ED91FFCEC
-1FFFD93FF06E7F494802037F494882717F484980854890C9127FA24884183FA25A80A380
-806E157F6E5E14FE6E7E6F4A5A6C14F003FC495B03FF495B6C1580DCE0075B6CDBF80F90
-C7FC9338FE1FFE6C9238FF7FF84D5A6D16C06D5E6D4BC8FC6D6F7E6D16E00101826D16FC
-023F814A8149B87E010783498390263FFE3F8190267FFC0F819026FFF003814849C6FC48
-496D804849131F4890C7000780160148486E1580003F163F49150F007F7014C049150171
-7E8400FF835B8484A384A21A80A27F007F1900607F003F606D160F001F606D4C5A6C6D15
-3F6C6D4B5A6C01F04B5A6C01FC02035B6C01FF021F5B6D9027F001FFFEC7FC6D90B65A01
-0F16F001035E010093C8FC020F14F8DA007F90C9FC426079DD51>I<ED3FFF0207B512F0
-023F14FC91B7FC010316C049D9F8077F49D9C00113F8013F496C6C7E4948C76C7E49486E
-7E4884484980717F4849825A48707F855A5C855A8583A2B583A41A80A71AC0A35F7EA46C
-5EA27E6E5C7EA26C5E6C7F6C5E6C6D147D6D6C14FD6D6CEB01F96D90388003F16D9038F0
-1FE16D90B500C11480010115816D6C1401021F13FC020113E091C8FC1A00A25FA261A3D9
-FF805E487F486D4A5B487FA2486D5E5F61615F614A4A90C7FC4D5A6C5B4A4A5A4A01035B
-D803FCC7485B6C6C021F13C0D9FFC0017F5B6CD9F803B5C8FC6DB612FC6D5D010F15E001
-0392C9FC010014F8020F1380426079DD51>I<F00FE04E7EA24E7EA34E7EA24E7EA34D7F
-A24D80A24D80A34D80A24D80A34D80A2DD7FBF7FA2181F05FF8017FE04016D7FA24D7E04
-038217F804076D80A24D7E040F8217E0041F6D80A24D7F043F825F047F6E7FA294C77E4C
-825E03016F7FA24C800303845E03076F80A24C80030F845E031F6F80A24C81033F845E03
-7F707F93B9FCA292BA7EA24A85A203FCC912070203865D020771805D86020F864B82021F
-865D87023F864B83027F8692CBFC874A864A840101875C496C728090381FFFC0B700E092
-B812FEA66F647BE37A>65 D<BB12F0F2FF801BF81BFEF3FFC088D800010280C7000114F8
-DF003F7F080F13FF74807480867480757FA2757FA28987A289A965A26365A2515BA298B5
-5A505C505C5091C7FC505B505B087F13F00703B512C096B6C8FC93B812F81BC01BF8F3FF
-801CE00480C8001F13F8080713FE08016D7E7480757F757F757F89757F89871E80871EC0
-A41EE087A663A21EC0A3631E80A2511400A2515B515B6398B55A505C08075C081F5C97B6
-C7FCBD5A1CF81CE099C8FC1BF898C9FC63627AE173>I<4DB5ED03C0057F02F014070407
-B600FE140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6
-C73807FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01
-F08291B54882490280824991CB7E49498449498449498449865D49498490B5FC484A84A2
-484A84A24891CD127FA25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380A27E
-A2F50FC0A26C7FA37E6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F4E5A
-7F6D6D4E5A6D6D4E5A6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC020F
-01FFEE07FE6E02C0ED1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F1380030F
-91B648C8FC030117F86F6C16E004071680DC007F02F8C9FC050191CAFC626677E375>I<
-BB12E0F2FF801BF01BFE757E1CF0D800010280C7000780DF007F13FE080F6D7E08018074
-80093F7F090F13FC757F757F877580767F8A88767F8A888AA2767FA28A881F80A37614C0
-A41FE0A5881FF0B05214E0A51FC0A4521480A31F006466A2525BA2525BA2525B666499B5
-5A515C5191C7FC515B515B515B097F5B50B512C008075C083F91C8FC0707B512FCBD12F0
-1CC051C9FC1BF81B8008E0CAFC6C627AE17C>I<BD12FCA488A2D8000102C0C71201F100
-0F1A01F2007F1B3F1B0F1B07757EA28787A288A3F43F80A31C1FA3197EA3F40FC0A499C7
-FC19FEA31801A218031807181F18FF93B6FCA6EEC000181F180718031801A21800A21D7E
-197EA21DFCA696C812011DF8A31C03A3F407F0A31C0FA21C1F1C3F1DE01C7F1CFF63631B
-0F093F13C098B5FC1A0797B6FCBEFCA31D80A35F617AE06A>I<BD12E0A41CF0A2D80001
-02C0C71207F1003F1A0F1A031A001B7F1B3FF31FF81B0FA21B07A21B03A21B011CFCA31B
-00A419FCA21C7EA41C00A21801A31803A21807180F183FEF01FF93B6FCA6EEC001EF003F
-180F18071803A21801A31800A896C9FCB3A5B912F8A657617AE065>I<B96C90B91280A6
-D8000102C0C9000102C0C7FCB3B3A293BBFCA604C0C91201B3B3A6B96C90B91280A67162
-7AE17E>72 D<B912E0A6C702E0C7FCB3B3B3B3AEB912E0A633627CE13C>I<020FB812F0
-A691C70001EC8000B3B3B3ACEA03FCEA0FFF487F487F487FA2B57EA45E96C7FCA36C4949
-5B604A5B6C90C75C6C484A5B01F84A5BD80FFE4A5B6C6C6C90B55A0001D9F80749C8FC6C
-90B65A013F15F0010F15C001014AC9FCD9001F13C044647CE153>I<B912F8A6D8000102
-C0CBFCB3B3B1F307E0A5F30FC0A61B1FA31B3F1C80A21B7FA21BFFA262A2626250130062
-62624FB5FC1907191F4EB6FCBDFC63A553627AE161>76 D<B700C0083FB612F070627097
-B7FCA37061D800010DF8C7FC70F103EFA202FD6DF107CFA202FC6DF10F8FA36F6DF01F0F
-A26F6D183EA26F6D187CA26F6D18F8A36F6DEF01F0A26F6DEF03E0A26F6DEF07C0A26F6D
-EF0F80A3706DEE1F00A2706D163EA2706D5EA2706D5EA3706D4B5AA2706D4B5AA2706D4B
-5AA2706D4B5AA3716D4AC7FCA2716D143EA2716D5CA2716D5CA3716D495AA2716D495AA2
-716D495AA2716D495AA3726D48C8FCA272EBC03EA2726D5AA2726D5AA372EBF9F0A272EB
-FFE0A2725CA2725CA37390C9FCA2735AA2735A90381FFFC0B700F86E480207B812F0A373
-5AA2735A8C627AE199>I<BB7E1AFCF2FFC01BF81BFE757ED800010280C7001F80070114
-F0736C7F081F7F747F747F7414807414C0A27414E0A21DF0A27513F8A41DFCA91DF8A498
-B512F0A21DE0A25014C01D8062501400505B505B087F5B4FB512E0071F5C93B9C7FC1BFC
-1BF01B8008F0C8FC04C0CCFCB3B3A2B97EA65E627AE16E>80 D<BA12F8F1FFE01AFEF2FF
-C01BF01BFED800010280C76C7F070714C0070014F0747F081F7F747F747F7480A2748089
-A37480A389A865A3505CA265A2505C9AC9FC505B505B505B087F5B4FB55A0707148096B5
-48CAFC93B812F81BC050CBFC621AFF932680000314C0DE007F7F071F13F8737F737F737F
-73808885888688A2747FA688A688A676140FF71F80A374801F3F86771400745E746E5BB9
-6E6E5B746E485A75EBFE07091F90B55A090715E009015DCF003F91C7FC0A0013FC71647A
-E178>82 D<DBFFFCEC01E0020FD9FFE01303027F02FC130749B7130F0107EEC01F011F16
-F049D9C007EBF83F4948C7383FFE7FD9FFF8020FB5FC4801E014014849804849153F91C9
-7E484882001F834982003F83845B007F187FA2193FA200FF181FA27F190FA27FA26D1707
-8080806C01F893C7FC80ECFF8015F86CECFFC016FC6CEDFFE017FE6CEEFFE018F86C17FE
-6C717E6C846C846D17F86D836D836D8313036D18806D6C17C0020F17E01401DA000F16F0
-1500040715F8EE007F1703050014FC183F84060713FE84A2007C8300FC83A2197FA3193F
-7EA31AFC7EA27F1AF86D177F7F1AF06D17FF6D18E06D5E01FF18C06E4B138002E04B1300
-02F84B5A02FFED3FFC01CF01E0ECFFF8018301FF010F5B010191B65A6D6C5E48011F93C7
-FC48010315FC48D9003F14E048020149C8FC476677E35A>I<001FBEFCA64849C79126E0
-000F148002E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9
-181FA4007E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>I<
-B96C023FB612FEA6D8000102C0CA0007EBF000E2007FC7FCB3B3B3AA656D63A2821C0180
-6570170380525A6E7F6E4F5A70171F6E626E6D4D5A6E6D177F525A6E6E030390C8FC033F
-01E04B5A6F6DED1FFC6F01FCED7FF80303D9FF80903803FFE06F02F8017F5B6F6C90B7C9
-FC041F5E040716F8040016C0050F4ACAFCDD003F13C06F647AE17C>I<B800FC047FB612
-E0A6D800070280CB6CEB80006D6EDE07FCC7FC666D6E611D0F6D6E611D1FA26E6D611D3F
-6E6D611D7F6E6D96C8FC65A26E6D4D5AA26E6E5F1C036E6E5F1C076E6E5F1C0FA26E6E5F
-1C1F6F6D5F1C3F6F6D5F1C7FA26F6D4CC9FCA26F6D5E1B016F6E5D1B03A26F6E4A5AA26F
-6E5D1B0F6F6E5D1B1F706D5D1B3FA2706D5D1B7F706D92CAFC63706D5C1A01A2706E485A
-A27002C05B1A077002E05B1A0F7002F05B1A1FA27101F85B1A3F7101FC5B1A7F7101FE90
-CBFC62A2716D5AA2715CA2715CA3715CA2715CA2725BA2725BA37290CCFCA2725AA2725A
-A2725A73637DE17A>I<B800F8011FB80203B7FCA6D8000F91C9000102E0CAEBFE006D72
-F20FF07072715A230F6D73627072171F6D6A708277173F6D7397C7FC70846B6E72197E70
-7217FE6E726170855118016E6870731503636E68704C6E15076E68718451180F6EDE7E7F
-607172151F6E06FE61714B7E08016F153F6E4E6C95C8FC71840803616F4D6C177E710207
-6F15FE6F66714B7E080F7013016F4D6C5F7185081F18036F4D6C5F71023F7013076F94C7
-5F728450180F6F047E6E5E7272131F1AFE6F4C6E5EDEE00171133F6F4C6E93C9FC06F084
-070361704B6E157E06F87213FE1907704B6E5DDEFC0F1881704B6E5D06FE19C1071F18C3
-704B6E5DDEFF3F18E7706407BFC9FC07FF18FF704A705CA3704A705CA27099CAFC4F82A2
-7149705BA37149705BA27149705BA37149705BA37190CB5BA27148725AA37148725A7148
-72CBFCA0637DE1A7>I<913803FFFE027FEBFFF00103B612FE010F6F7E4916E090273FFE
-001F7FD97FE001077FD9FFF801017F486D6D7F717E486D6E7F85717FA2717FA36C496E7F
-A26C5B6D5AEB1FC090C9FCA74BB6FC157F0207B7FC147F49B61207010F14C0013FEBFE00
-4913F048B512C04891C7FC485B4813F85A5C485B5A5CA2B55AA45FA25F806C5E806C047D
-7F6EEB01F96C6DD903F1EBFF806C01FED90FE114FF6C9027FFC07FC01580000191B5487E
-6C6C4B7E011F02FC130F010302F001011400D9001F90CBFC49437CC14E>97
-D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF80047F14F00381B612FC038715FF
-038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02007F03F8824B6F7E4B6F1380
-4B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA44F13F8A31BF0A24F13E0A24F
-13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C495B9126F83FE0013F13C09127
-F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C7001F91C8FC90C8000313E04F65
-7BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E01039039FE001FFF4901F801
-0113804901E0010713C04901804913E0017F90C7FC49484A13F0A2485B485B5A5C5A7113
-E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7EA280A27EA2806C18FCA26C
-6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1FC06D01E0EC7F806D6DECFF
-00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D020F1580020102FCC7FCDA00
-0F13C03E437BC148>I<F17FF8050FB5FCA6EF000F8484B3A892380FFF804AB512F8020F
-14FE023FECFF8391B712E301039138807FF3499039F8000FFB011F01E00103B5FC494913
-004990C87E49488148498148834A815A485BA2485BA25AA3485BA4B5FCAE7EA46C7FA37E
-A26C7FA26C5F806C5F6C6D5D6C6D5D017F93B5FC6D6C6C0103806D6D49806D01F0D91FF7
-EBFFFE6D9039FE01FFE7010190B612876D6CECFE07021F14F8020314E09127003FFE00EC
-C0004F657BE35A>I<92380FFFC04AB512FC020FECFF80023F15E091B712F80103D9FE03
-7F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F49486E7F48498048844A8048
-84485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA41A0002C0CBFCA67EA380A27E
-A27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17016D6C4B5A6D6D4A5A6D01E0
-4A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D6C90B55A021F15F8020715E0
-020092C8FC030713F041437CC14A>I<EE3FFC0307B51280033F14C04AB612F0020715F8
-4A9038F03FFC4AEB807F913A7FFE00FFFE4A5A4B4813FF4913F05B4913E0A24913C0A270
-13FE4949EB7FFCEF3FF8EF1FF0EF07C094C7FCB0B812C0A6D8001F01C0C8FCB3B3B0007F
-B612FCA638657CE431>I<F107F8DB7FFEEC3FFE020FB5D8F001B5FC027FDAFE03148049
-B7128F49DCDFFD13C0010FD9F00FEBFFC149D9800114014990C7EBFC0349486E6C7E4948
-EC3FFF48496E018113800780130048F0C03E97C7FC48496E7FA34884A96C60A36C6D4A5B
-A26C60A26C6D4A90C8FC6D6C4A5A6D6C4A5A6D6D485BDBF00F5B4990B612C060D97C7F4A
-C9FCD9FC0F14F09126007FFECAFC92CCFC1201A47FA27F8014F091B77E18FE6CEFFFC019
-F06D17FC19FF6D846D846D846D84013F8490BAFC0003854801E0C712014890C9000F7F48
-4816014848EE007F4848717E8512FF5B85A56D5F007F616D173F003F616D177F6C6C4D5A
-6C01C003035B6C6D4B5B6C01F8031F5BC601FF92B5C7FC6D01F8011F5B011F90B712F801
-0717E0010094C8FC020F15F0DA003F01FCC9FC4A607CC151>I<903807FF80B6FCA6C6FC
-7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FDB83
-F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8
-F007B71280A651647BE35A>I<EB0FE0EB3FF8497E48B5FCA24880A24880A76C5CA26C91
-C7FCA238007FFC6D5AEB0FE090C9FCAF903807FF80007FB5FCA6C6FC7F7FB3B3AEB712C0
-A622657BE42C>I<ED01FCED07FF4B1380033F13E0A24B13F0A292B512F8A76F13F0A26F
-13E0A2030F13806F1300ED01FC92C8FCAFEEFFF8021FB5FCA6EC000F8181B3B3B3AAEA07
-F0EA1FFC487E487EB56C4813F0A317E05D17C05D17806C4948130049495A6C48495A261F
-FE0313F06CB65A6C158000014AC7FC6C6C13F8010713802D8288E431>I<903807FF80B6
-FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>108 D<902607FF80D91FFFEEFFF8B6
-91B500F00207EBFF80040702FC023F14E0041F02FF91B612F84C6F488193267FE07F6D48
-01037F922781FE001F9027E00FF0007FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F
-6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFDF003BC6E4A8003FC04FF834B
-5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087>I<902607
-FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FC6DA83
-F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2
-B7D8F007B71280A651417BC05A>I<923807FFE092B6FC020715E0021F15F8027F15FE49
-4848C66C6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F7E49486F7E
-48496F13804819C04A814819E048496F13F0A24819F8A348496F13FCA34819FEA4B518FF
-AD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C
-6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B010090B7C7FC
-023F15FC020715E0020092C8FC030713E048437CC151>I<902607FF80EBFFF8B6010FEB
-FF80047F14F00381B612FC038715FF038F010114C09227BFF0003F7FC6DAFFC0010F7F6D
-91C76C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A21BF885A21B
-FCA3851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92B512801B006F5C6F4A5B6F4A
-5B03FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B648C7FC03C115F803C015E004
-1F91C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I<D90FFFEB0FFCB690383FFF80
-93B512E04B14F04B14F8923907FC7FFC92390FE0FFFEC6EC1F806DD93F0113FF6D133E15
-7E157C15F8A215F07013FEA24BEB7FFCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A63841
-7BC042>114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0
-014890C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D
-92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F
-1680010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC8117
-7F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002
-C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437B
-C140>I<EC07E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91
-B512FEB8FCA5D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D13
-7E6D6D5B6DEBFF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<90
-2607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D14
-7E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8
-DA003F018002F0C7FC51427BC05A>I<B700C00103B512FCA6C66C01C0C8381FFE006D6D
-ED07F0A26D6D5E190F6D6D5E191F6D606F153F6D95C7FC6F5DA26D6D157E19FE6D6E5C18
-016E5E7013036E5E701307A26E6D5C180F6E6D5C181F6E6D5C183F6E93C8FC705BA26E6D
-13FEA26E6E5A17816FEBC1F817C36F5C17E76F5C17FFA26F5CA26F5CA26F91C9FCA26F5B
-A36F5BA2705AA2705AA2705AA2705A4E417DBF55>I<007FB600C0017FB512F8A6D8001F
-01F8C70007EBF0006D040190C7FC6D6D5D6D6D4A5A6D6D4A5A70495A6D4C5A6E7F6E6D49
-5A6E6D495A7049C8FC6E4A5A6E6D485A6E6D485A6E13FFEF8FF06EEC9FE06FEBFFC06F5C
-6F91C9FC5F6F5B816F7F6F7F8481707F8493B57E4B805D4B80DB0FF37FDB1FE17F04C080
-153F4B486C7F4B486C7F4A486D7F4A486D7F4A5A4B6D7F020F6E7F4A486D7F4A486D804A
-5A4AC86C7F49486F7F4A6F7F0107707FEB3FFFB600F049B7FCA650407EBF55>120
-D<B700C00103B512FCA6D8003F01C0C8381FFE006FED07F0A26D6D5E190F6D6D5E191F6D
-6D5E193F6D95C7FC6F5D6D177E6F15FEA26D6E495AA26E6D5C18036E6D5C18076E5E7013
-0F6E5E70131FA26E6D495AA26E6D91C8FC606E6D137E18FE6E5D17816F5C17C3A26FEBE7
-F0A26FEBF7E017FF6F5CA26F5CA26F91C9FCA36F5BA26F5BA2705AA2705AA2705AA35FA2
-5F163F94CAFC5E167E16FED807E05CD81FF81301487E486C495AA2B5495AA24B5A5E151F
-4B5A6C4849CBFC15FEEBFC01393FF807FC391FF03FF06CB55A6C5C6C91CCFCC613FCEB1F
-E04E5D7DBF55>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fp cmsy10 10.95 5
-/Fp 5 56 df<007FB812F8B912FCA26C17F83604789847>0 D<EE7FFE0307B512E0033F
-14FC92B7FC0203D9C00313C0DA0FFCC7EA3FF0DA3FE0EC07FCDA7F80EC01FED901FEC9EA
-7F80D903F8EE1FC0D907E0EE07E04948707E4948707E49CB7E017E187E498449844848F0
-0F8000031AC04918074848F003E0A24848F001F0A248CD12F8A2001E1A78003E1A7CA200
-3C1A3C007C1A3EA200781A1EA300F81A1FA2481A0FAB6C1A1FA200781A1EA3007C1A3EA2
-003C1A3C003E1A7CA2001E1A78001F1AF8A26C6CF001F0A26C6CF003E0A26C6CF007C06D
-180F00011A806C6CF01F006D60017E187E6D606D6C4C5A6D6C4C5A6D6C4C5AD903F8EE1F
-C0D901FEEE7F809026007F80DA01FEC7FCDA3FE0EC07FCDA0FFCEC3FF0913B03FFC003FF
-C0020090B6C8FC033F14FC030714E09226007FFEC9FC50557BC05B>13
-D<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0AA6C1580A3
-6C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
-D<19301978A2197C193CA2193E191EA2191F737EA2737E737EA2737E737E1A7C1A7EF21F
-80F20FC0F207F0007FBB12FCBDFCA26C1AFCCDEA07F0F20FC0F21F80F27E001A7C624F5A
-4F5AA24F5A4F5AA24FC7FC191EA2193E193CA2197C1978A2193050307BAE5B>33
-D<126012F0AE12FC12FEA212FC12F0AE126007227BA700>55 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fq cmsl10 10.95 54
-/Fq 54 122 df<9339FFC003F8030F9038F01FFE923A3FC07C7E0F923BFE001FF81F80DA
-03F890383FF07F4A48D9FFE013C0EC1FE04A4848EBC0FF03804A1380DA7F00157F4A9238
-003E004A6D91C7FC8301015D4A5CA4160113034A5CA416030007B812FCA3290007F00003
-F8C8FCA21607130F4A5CA4160F131F4A5CA4161F133F4A5CA4163F137F91C75BA4167F5B
-4992C9FCA31201486C49487EB5D8F83F13FF5DA242407EBF35>11
-D<EEFF80030F13F092383FC0789238FE001CDA03F8130E4A48133FDA1FE013FF4A5A4B5A
-EC7F005C5CEE00FE010115784A1400A513035CA4EE01FC0003B7FC17F8A23A0007F0000F
-1607A2130F4A14F0A4160F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F
-5B491500A31201486C903801FF80B5D8F83F13FCA25D30407EBF33>I<DCFF80EB7FC003
-0F9039E007FFF8923B3F80781FE03C923BFE003C7F000EDA03F8D91FFC7F4A484948EB1F
-80DA1FE0D9FFF0137F4A48485B03804A13FFDA7F005C5C4A92C7FCF27F0001016E153C4A
-4A91C7FCA5010314014A5CA41AFE0003BAFC62A23D0007F00003F800071903A2010F1407
-4A4A5CA41907011F140F4A4A5CA4190F013F141F4A4A5CA4191F017F143F91C7495CA419
-3F49147F4992C75BA31201486C49486CEBFFC0B5D8F83FD9FC1F13FE605D49407EBF4C>
-14 D<140E141E143EA4143CA3000FEC01E03A1F803803F001C0130F01F0EB1FE0D807F8
-EB7FC03A01FC70FE003900FE73F890383F77E090380FFF80D903FEC7FCEB00F0EB03FCEB
-1FFF90387EEFC03901FCE7F03907F0E3FC391FE0E1FF3A7F81E07F80903801C03F00FC14
-1F0078EC0F00D8200390C7FC1200A31307A35C91C8FC242774C32D>42
-D<007FB5FCA2B512FEA418067C961E>45 D<157015F014011407143F903803FFE0137FEB
-FFCFEBF80F1300141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075C
-A5130F5CA3131F497EB612F8A31D3D78BC2D>49 D<EC01FE91380FFFE0023F13F89138FC
-07FC903901E001FE903907C000FF49C7EA7F80011E15C0163F4915E05B0170141F13FF80
-A35A163FA26C90C7FC137E0118EC7FC090C8FCEEFF80A24B1300A24B5A5E4B5A4B5A4B5A
-5E4B5A4BC7FC15FEEC01F84A5A4A5A4A5A4AC8FC143E5C5CEB01E04948130E49485B49C7
-FC131E495C13705B48485C484814F0000FB6FC5A485D5AB7FC5EA22B3D7CBC2D>I<EC07
-FC91383FFF809138F80FE0903903C007F09039078003FC90380F0001011C14FE013C14FF
-137F1480EBFFC0A31480A291380003FE137E90C7FCED07FC16F8150F16F0ED1FE016C0ED
-3F80ED7E005DEC07F0903803FF8015F090380001FC6E7EED7F80ED3FC0A2ED1FE016F0A3
-16F8A4120EEA3F80486C133F16F012FFA216E0157F5B48C7EAFFC000F015800070491300
-12786C495A003EEB07F86C495A390FE03FE00003B51280C649C7FCEB1FE0283F7ABC2D>
-I<17E016011603831607A2160FA2161F83163FA2167F167716F7EEE7FCED01E316C31503
-16831507EE03FEED0F01150E151E151C153C03387FED7800157015F05D4A4880177F4A5A
-A24AC7FCA2020E81173F5C021FB6FC5CA20270C7EA3FE0171F5CA2495AA2494881170F49
-C8FCA2130EA24982013C1507A2137CD801FE4B7E2607FF80EC3FFEB500F00107B512FC19
-F85E3E417DC044>65 D<013FB7FC18E018FC903B007FE00007FE6E48903801FF80943800
-7FC05DF03FE0F01FF0A3027F16F892C8FCA54A16F04A153F19E0187F19C0F0FF8001014B
-13004A4A5A4D5AEF1FF04D5ADC03FFC7FC49B612F8EFFF8002F8C7EA3FE0EF0FF0EF07FC
-717E010715014A81711380A319C0130F5CA5011F4B13805C19005F601707013F4B5A4A4A
-5A4D5A4D5A017F913801FF8001FF020F90C7FCB812FC17F094C8FC3D3E7DBD40>I<DCFF
-C01338030F01F01378037F01FC13F0913A01FF803F01913A07FC000781DA1FE0EB03C3DA
-7FC0EB01E74AC812FF4948ED7FE0D907FC153F495A4948151F495A4948150F494816C018
-074890C9FC485AA2485A000F1880491603121FA248481607A295C7FC485AA412FF5BA75B
-A2181C183C1838A27F007F1778187018F0003F5F6D150160001F16036C6C4B5A95C7FC6C
-6C5D6C6C151E6C6C5D6C6C15F86D6C495A6D6CEB07C0D91FF0EB1F80D907FE01FEC8FC01
-01B512F86D6C13E0DA07FEC9FC3D4276BF42>I<013FB7FC18E018F8903B007FF0000FFE
-6E48EB01FF9438007FC04B6E7E180F85727E727E147F4B6E7EA2727EA302FF178092C9FC
-A54918C05CA41A8013034A5DA41A0013074A5DA261A24E5A130F4A5E180F61181F61011F
-4C5A5C4E5A4EC7FC4D5A4D5A013F4B5A4A4A5AEF3FE0EF7F80017F4A48C8FC01FFEC1FFC
-B812F0178004FCC9FC423E7DBD45>I<013FB812F8A39026007FF0C7127F6E48140F1803
-4B14011800A31978147F4B1570A502FF147092C7FCA3190017F0495D4A1301A21607161F
-91B6FC495DA29138FC003F160F1607160301075D5CA219E0180119C0010FEC07004A90C7
-12031980A218071900011F5E5C181EA2183E183C013F167C4A15FC4D5A1707017F151F01
-FF4AB45AB9FCA2603D3E7DBD3E>I<013FB812E0A3903A007FF000016E48EB003F180F4B
-14071803A31801147F4B15C0A514FF92C71270A395C7FC17F0495D5C160116031607161F
-49B65AA39138FC003F160F160701075D4A1303A5010F4AC8FC5C93C9FCA4131F5CA5133F
-5CA3137FEBFFF0B612F8A33B3E7DBD3B>I<4BB46C1370031F01F013F0037F9038FC01E0
-913A03FF807E03913A0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903FE16C049
-48157F4948153F495A4948151F495A4948168091C9120F5A485AA2485A000F1800498212
-1FA248485EA295C7FC485AA412FF5BA6043FB512E05BA29339001FFC00715AA2607F127F
-A2171F123F6D5EA2121F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0EB07
-C7D91FF0EB1F87D907FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC3C4276BF
-47>I<013FB5D8F807B6FC04F015FEA29026007FF0C7380FFE006E486E5AA24B5DA4180F
-147F4B5DA4181F14FF92C85BA4183F5B4A5EA491B8FC5B6102FCC8127FA318FF13074A93
-C7FCA45F130F4A5DA41703131F4A5DA41707133F4A5DA3017F150F496C4A7EB6D8E01FB5
-12FC6115C0483E7DBD44>I<011FB512FC5BA29039003FF8006E5AA25DA5143F5DA5147F
-5DA514FF92C7FCA55B5CA513035CA513075CA5130F5CA5131F5CA3133F497E007FB512F0
-A2B6FC263E7EBD21>I<013FB500F8010FB5FC4C5BA29026007FF0C7000313E06E486E13
-0019FC4B15F04E5A4E5A4E5A061EC7FC027F5D4B5C4D5A4D5AEF07804DC8FC02FF141E92
-C7127C5FEE01E04C5A4C5A49021FC9FC4A5B5E4C7E5D03077F01035B9139FC1F3FE0153C
-4B6C7E15F09139FFE00FF84913C092380007FC5C4A6D7E5C707E130F4A6D7F84177F717E
-A2011F6F7E5C717EA2717EA2013F6F7E5C84A2017F83496C4A13E0B600E0017F13FFA24B
-90B6FC483E7DBD47>75 D<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514
-FF92C9FCA55B5CA513035CA513075CA21838A21870130F5CA218E0A3011F15014A15C017
-03A21707EF0F80013F151F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39
->I<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0
-A2DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7
-FC19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385B
-A218706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F8
-0E5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC
-017C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53
->I<90263FFFE0023FB5FC6F16FEA29026003FF8020313C0021F030013004A6C157C023B
-163C6F15381439810238167802787FDA707F157082153F82031F15F002F07FDAE00F5D82
-15078203031401010180DAC0015D82811780047F1303010315C04A013F5C17E0161F17F0
-040F1307010715F891C7000791C7FC17FC160317FE04015B4915FF010E6E130E188E177F
-18CEEF3FDE011E16FE011C6F5AA2170FA21707133C01386F5A133C017C150113FE2607FF
-801400B512FC18705C483E7DBD44>I<923803FF80031F13F09238FE01FE913903F0003F
-DA0FC0EB1FC0DA3F80EB07E0027EC76C7E49486E7E49488149486E7E4948157F495A013F
-17804948ED3FC049C9FCA24848EE1FE012035B000718F05B120FA2485A19F8123F5BA212
-7FA219F04848163FA5F07FE0A35BF0FFC0A219805F19007F4D5A127F4D5A60003F160F6D
-5E001F4C5A4D5A6C6C4B5A95C7FC6C6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D
-6C495AD90FE001FEC8FC903903F807F80100B512C0DA0FFCC9FC3D4276BF47>I<013FB6
-12FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0183F19E0F01FF0A214
-7F5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF8019004D5A4D5AEF0FF80103
-ED3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F5CA5131F5CA5133F5C
-A3137F497EB612E0A25D3D3E7DBD3E>I<013FB612F017FF18E0903B007FF0003FF86E48
-EB07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FFED7FE092C8FCA219C0F0
-FF80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC91B612F017809139FC00
-07E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F157F5CA41902013F1707
-5CA2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B01071378CA3801FFE094
-38003F8040407DBD43>82 D<9238FF80070207EBE00F021FEBF81E91387F00FE02FCEB1F
-3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E177C491578A57F
-1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC010380010080143F02
-031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F003C16C0A31780
-003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC03AF87F80
-3F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>I<0007B912F0A33C0FFE00
-0FF8003F01F0160F01C04A13034848160190C7FC121EF000E048141F5E1238A212781270
-153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA514075DA5140F5DA3141FEC
-7FFC0003B7FCA33C3D76BC42>I<B600E090B512FC4B15F8A2000101C0C7000F13006C49
-EC03FCEF01F091C9FC60A317015A495EA417031203495EA4170712074993C7FCA45F120F
-49150EA4171E121F49151CA4173C123F491538A31778177017F05F001F15015F16036D4A
-5A000F93C8FC5E6C6C141E6C6C5C000115F86C6C495A017FEB07C090393FC03F8090260F
-FFFEC9FC010313F89038007FC03E4073BD44>I<B6017FB5D88007B512804A1A00A20007
-01C0010101E0C713F06C90C80180EC3FC06C48735A99C7FC057F150E1B1E6D191C6C1A3C
-1B3805FF15787214705E636EEB03BF017F4E5AEE073F505A040E7F051F4AC8FC161C6E17
-0E013F143862167804706D5BEEF00F04E05D90381FE00104C015F003035E0480140106F8
-5B9226070007130302F05F010F010E150797C9FC5D190E4BEB03FC616E5A01075F5D61DA
-F9C014FE05015BECFB8002FF6F5A7F92C75CA24A93CAFC835C606D5A605C604A15781870
-594074BD5D>87 D<010FB500F090B512F85B5FD9003F902680003F1300DA0FFEC7EA1FF8
-4BEC0FE00207168096C7FC6E6C141E181C6E6C143C606E6D5B4D5ADB7FC05B4D5A92383F
-E0074DC8FC92381FF01E171C6F6C5A5F923807FCF0EEFDE06FB45A5F6F90C9FCA26F7FA2
-707EA216FF4B7FED03DF9238079FF0ED0F1F92380E0FF8151C92383C07FC15784B6C7EEC
-01E04B6C7EEC038002076D7F4AC7FC021E6E7E5C02386E7E5C02F06E7E495A49486E7E13
-0749486E7E497E017F4B7E2603FFF091383FFF80007F01FC49B512FEB55CA2453E7EBD44
->I<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF6D7E82A248140782A26C5A
-137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F805B3801FE00EA03F8485A48
-48133F485A003F5D49EC81C048C7FCA2157F48ED03804814FFA2007F5B913903BF070090
-3880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007FC003E02A2A7CA82D>97
-D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07F80003EB3FFF9039F8F8
-0FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B821780A2120F5B17C0A3
-167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B5A6D495A4BC7FCD87CE0
-137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077BE33>I<EC1FF0ECFFFE
-903903F01F8090390FC003C0D93F0013E0017E130F49131F000115F04848EB3FE0485AA2
-4848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA96CEC0380150716006C6C
-5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7FCEB0FF0242A7AA828>
-I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA217C0A491380FF03FECFF
-FC902603F81F138090390FC007BF90391F8003FF90387E0001497F0001157F4848150048
-5A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25EA37E1507A26C4A5A7F00
-1F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F90383FFE0FD90FF0EBE0002D
-407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F90393F000F80017E14C049EB
-07E0485A12034848EB03F0485AA2121F5B123FA248481307A290B6FCA2D8FF80C8FC90C9
-FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C6C5B6C6C485A3900FC07
-C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E913803F03F4A48B4FC4A48
-1380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513035CA50007B512F8A326
-0007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5BA4EA03FF007F13FEB5FC
-A229407DBF1C>I<177C913907F803FE91393FFE0F8F9139FC0F9C3F903901F007F89039
-07E003E0D90FC013F0011F903801F80C02801400133FD97F007FA315035B495CA3017E49
-5A5E150F6D5C6D495A90263F803EC7FCECC0FC903871FFF09038E07F8091C9FC485AA47F
-A27F90B512F8EDFF806C15E016F86D8048B6FC3A07E0000FFED80F801300003FC8127F00
-3E815A00FC815AA25E163EA25E6C15FC007C4A5A6C4A5A6CEC0FC0D80FC0013FC7FC3903
-F801FCC6B512F0010F90C8FC303D7FA82D>I<147FEB3FFFA313017FA25CA513015CA513
-035CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0ECF70002FE14F049
-5A5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B4915
-00A300015D486C491380B5D8F87F13FCA32E3F7DBE33>I<1478EB01FE130314FFA25B14
-FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A5133F
-1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>I<ED0780ED1FE0153F
-16F0157FA216E0153F16C0ED0F0092C7FCACED7F80EC3FFF1600A2140180A35DA41401A2
-5DA41403A25DA41407A25DA4140FA25DA4141FA25DA4143F5DA4121E267F807FC7FCA200
-FF137E14FE5CEB01F8495A387C07E0383C0FC0D80FFFC8FCEA03F8245187BD1C>I<147F
-EB3FFFA313017FA25CA513015CA513035CA501070103B5FC02F014FEA26F13F06F1380EE
-FE00010F14F84A485AED03C04B5A031FC7FC153E011F13784A5AECC3E0ECC7F0ECCFF814
-FF497F14F9ECE1FE14C04A7E4A7E4980017E133F82151F82150F01FE8049130782A20001
-81486C49B4FCB5D8F03F13F04B13E0A2303F7EBE30>I<143FEB1FFF5BA213017FA214FE
-A5130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480A5137F1400A5
-5B5BA4EA03FF007F13F8A2B5FC183F7DBE1A>I<902707F007F8EB03FCD803FFD91FFF90
-380FFF80913CE0781FC03C0FE09126E1E00FEBF0073E001FE38007E1C003F090260FE700
-EBE38002EEDAF70013F802FC14FE02D85C14F84A5CA24A5C011F020F14074A4A14F0A501
-3F021F140F4A4A14E0A5017F023F141F91C74914C0A549027F143F4992C71380A300014B
-147F486C496DEBFFC0B5D8F87FD9FC3F13FEA347287DA74C>I<903907F007F8D803FFEB
-1FFF9139E0781FC09138E1E00F3B001FE38007E090380FE70002EE14F014FC14D814F85C
-A24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500A30001
-5D486C491380B5D8F87F13FCA32E287DA733>I<EC0FF0ECFFFE903903F01F8090390FC0
-07C049C66C7E013E6D7E01FC6D7E48488049147C0003157E485A000F157F5B121FA2485A
-A2007F1680A2170048C85AA54B5AA25E5A6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013E
-C7FC6C6C5B6C6C485A3900FC0FE090383FFF80D90FF8C8FC292A7BA82D>I<91387F01FE
-903A7FFF0FFFC09139FE3E03F09238F801F8903A03FFE000FE6D49137F4B7F92C713804A
-15C04A141FA218E0A20103150F5C18F0A3171F010716E05CA3173F18C0130F4A147F1880
-A2EFFF004C5A011F5D16034C5A6E495AEE1FC06E495AD93FDC017EC7FC91388F01F89138
-83FFE0028090C8FC92C9FC137FA291CAFCA45BA25BA31201487EB512F8A3343A81A733>
-I<91390FE003C0DAFFFC1380903903F81E0790390FE0070F90391F80038FD97F0013DF01
-FE13014848903800FF00485A1207485A8248485C123F495CA2485AA2150112FF90C75BA4
-1503A25EA37E15077F003F4A5A151F6C6C133F6C6C137F000714FF3903F003CF3A00FC0F
-8FE090383FFE0FEB0FF090C7FC151F5EA5153F5EA4157F4B7E023F13FEA32A3A7AA730>
-I<903907F01F80D803FFEB7FE09138E1E1F09138E387F839001FE707EB0FE614EE02FC13
-F002D813E09138F801804AC7FCA25C131FA25CA4133F5CA5137F91C8FCA55B5BA3120148
-7EB512FEA325287EA724>I<9138FF81C0010713E390381F807F90397C003F8049131F48
-48130F5B00031407A248481400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C
-7F011F7F13079038007FFE1403140100381300157EA2123C153E157E007C147CA2007E14
-7815F8007F495A4A5A486C485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB03
-80A4130791C7FCA25BA25BA2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FC
-A312035BA512075BA5120F5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14
-F03807E1E03801FF80D8007EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007
-140300031401A34914FCA4150312074914F8A41507120F4914F0A4150F121F4914E0A215
-1FA3153F4914C0157F15FFEC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003F
-E01380282977A733>I<B539E007FFF05D17E02707FE000313006C48EB01FC6F5A5E0001
-4A5A5EA24B5A6D1307000092C7FC5D150E6D5B7F5DA25D1480013F5B14815D14C3011F5B
-02C7C8FCA214CE14EEEB0FFCA25CA26D5A5CA25CA26D5A2C2878A630>I<B500C3B53803
-FFFCA204FE14F8290FFE003FE00013C0D807F86D48EB7F000003173E183C150F18386D5E
-0001141F705B153F4D5A15776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF0383017F5D
-91380703F85FEC0E01021E5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13FF5F6D5A94
-C8FC5C4A137E167C6DC7FC1678010E14383E2878A642>I<48B539C07FFFC0A33C000FFE
-003FF8006D48EB1FE0010315800101023EC7FC6E133C01005C027F5B6F5A91383F81C0ED
-C380DA1FC7C8FC15EFEC0FFE6E5A5D140381A24A7E140FEC1E7F023C7FEC383F02707FEC
-E01F010180903803C00F49486C7ED90F007F491303017E80D801FE80D807FF497EB5D880
-3F13F8A332277FA630>I<90B539E007FFF05E18E0902707FE000313006D48EB01FC705A
-5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED81C0
-15C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC5C14
-0E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0EA0F
-C0343A80A630>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fr cmbx12 14.4 73
-/Fr 73 122 df<922601FFFC903801FFE0033F9026FF801F13F84AB6D8E07F13FE020F03
-F9B6FC023FD9C00FB500C0138091277FFC0003D9FE0113C0902601FFE049495A49494949
-4813E04990C714F049484A13E0495A19C0495A7413C0017F17804A6E6E1380719138007E
-007192C7FCAEBCFCA526007FF8C7000301C0C8FCB3B3A7007FB5D8F803B612F0A553547D
-D34E>11 D<EEFFFC031FEBFF804AB612E0020781021F9038C00FF8913A7FFE0003FCDAFF
-F0EB00FE4949EB03FF4901805B4990C7487F49485CA2495A4D7F013F6F5B5CA37190C7FC
-715AEF01F894C9FCA90403B512C0BAFCA526003FFCC7120783B3B3A6003FB5D8FC03B612
-C0A542547DD34B>I<EA07F0EA1FFC487E487EA2B51280A86C1300A86C5AA86C5AA86C5A
-A86C5AA76C5AA5C8FCAAEA07F0487EEA3FFE487EA2B51280A76C1300A26C5AEA0FF86C5A
-115474D329>33 D<DD03E0EC0F80A24D6C4A7EA2050F153FA24E5DA2051F157FA24E92C8
-FC053F5DA24E5CA2057F1401A295C75BA24D1403A24D5D04011507A24D5DA20403150FA2
-4D5D0407151FA24D5DA2040F153FA24D5D007FBEFCA2BF1280A36C1D006C64C96CC7D801
-FCC9FC4C1403A24C5D03011507A24C5DA20303150FA24C5D0307151FA24C5DA2030F153F
-A24C5D031F157FA24C92CAFC003FBD12FE4888BF1280A36C1D00A2C848C7D803F8CAFC02
-011507A24B5D0203150FA24B5DA20207151FA24B5D020F153FA24B5DA2021F157FA24B92
-CBFC023F5DA24B5CA2027F1401A292C75B4A1403A24A5DA201011507A24A5DA26D486E5A
-A2616A79D270>35 D<15F8A691380FFF8091B512F8010714FF011F15C049819026FFF8F8
-13F84801C0EB0FFC2603FE00EB03FE4848EC00FF49153F4848ED1F804848ED0FC0A24848
-ED07E0A24848157FEFFFF05EA200FF5DA37FA27F7013E06D6E13C06DED7F806DED1E006C
-B492C7FC14C014F86C13FF81EDFFC06C15F86C15FE826C16C06C826C826C826D816D8113
-0F01038101001680141F020115C08003F814E0163F160F82040113F0D81FE080487E486C
-157FA2486C153FA2171FA44916E05B6C5A1380007EC7EC3FC0A26C1780177F6C6CEDFF00
-7F6C6C4A5AD807F84A5A6C6CEC0FF82601FF80EB3FF06C9039F8F9FFE06DB65A011F92C7
-FC010714FC010114F0D9001F90C8FCEC00F8A6346179D943>I<EC01E0EC07F84A7EA66E
-5AA200041608001F163ED83FC015FFD87FE04A13806D6C485AD8FFF84A13C0D87FFE021F
-138001FF5C02835B6C01C390B51200000FD9F1E313FC0001D9F9E713E027003FFDEF90C7
-FC0107B512F8010114E0D9003F90C8FCEC07F8EC3FFF49B512E0010714F890393FFDEFFF
-2701FFF9E713E0000FD9F1E313FC003FD9C3F013FF4801836D138002037F01FE80D8FFF8
-020713C0D87FF06E138049486C7ED83FC06E1300D81F00153E00041608C792C7FCA24A7E
-A66E5AEC01E0323578D943>42 D<EA07F0EA1FF8487E487E7FB5FC1480A314C0A37EA27E
-7EEA07F3EA0003A213071480A3130F1400A25B131E133E133C137C5BA2485A485A485A48
-5A48C7FC121E120C1228769025>44 D<B712F0AB240B7F9F2D>I<EA07F0487E487E487E
-487EB51280A76C13006C5A6C5A6C5A6C5A1111769025>I<913803FFC0023F13FC91B6FC
-010315C0010F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D13804849
-6D13C0A24817E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A500
-7F17FEA6003F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E
-5B6C6D4913006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FC
-C7FC020313C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA214
-7F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14
-FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F
-48488001F01680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C9
-14E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE0
-4B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A49
-5AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79
-CD43>I<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC48
-48C76C7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90
-C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E0
-16FCEEFF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A2
-7013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C
-6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D
-011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2
-161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407
-EC0FC01580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B
-485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE
-43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E
-16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E90
-26FFF8077FDAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A4
-18F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F1700
-6C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC
-6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91
-397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913
-E049485B01FF5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC
-5AA21508913801FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013
-804A15C0A24A15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E0
-6C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C001
-0092C7FC023F13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A19006060
-60A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94
-C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A214
-0FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807
-FFC0027F13FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C7
-6C7E48488048486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C0
-14F802FE4913806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CED
-FFE017806C4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE74801
-8115C048D9007F14E04848011F14F048487F48481303030014F8484880161F4848020713
-FC1601824848157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F
-17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D
-010F1580010102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE01
-0F6E7E4901037F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A
-91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C
-6D137B6C6D13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC004015
-00A218F05EA3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C48
-4A5A494A5A49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14
-C0010F49C8FC010013F0364F7ACD43>I<EA07F0487E487E487E487EB51280A76C13006C
-5A6C5A6C5A6C5AC8FCB3EA07F0487E487E487E487EB51280A76C13006C5A6C5A6C5A6C5A
-113576B425>I<91B5FC010F14F8017F14FF90B712C00003D9C00F7F2707FC00017FD80F
-E06D7F48486E7E48C87FD87FE06E7E7F7F486C1680A66C5A18006C485C6C5AC9485A5F4B
-5B4B5B4B5B4B5B4B90C7FC16FC4B5A4B5A16C04B5A93C8FC4A5A5D14035D5D14075DA25D
-140FA25DAB91CAFCAAEC1FC04A7EECFFF8497FA2497FA76D5BA26D5BEC3FE06E5A315479
-D340>63 D<933807FFF84BB612E0030F15FC037FEDFF80912801FFFC000F13E002070180
-9038007FF8DA1FF8C8EA07FEDA7FE0923801FF80DAFF806F6C7E4948CAEA1FE0D903F8EF
-07F0D907E0EF01F84948717E4948187E49CC7E017E737E49912601FFC06E7E4848021F01
-FC6E7E4991B61403000302036F804848499026C07FE06D7E49011F9026000FF01300000F
-DA3FFCD903F8804949486D6C147C001F4A48D9007E147E494849023E143EF13FFE484949
-6E6C133F003E49855E007E491A80007C92C8150FA25CA200FC1CC04849481807AD6C6D7E
-127C1D806E190FA2007E81003E7F82003F6D1A006C6D6D4A5CA26D6C6D4A143E000F6E6C
-49B5FC6D6D6C496E5A00076EB4010F5D6D01079026C07FE713C36C6C6D90B50083EBFFF0
-0001020003005C6D021F01FC013F13806C6C020101C0D907FEC7FC017E91CDFC7F6D7E6D
-7E6D7ED903F8F17FC0D901FEF003FF6D6C6C171FDA7FE04CB51200DA1FF8041F13F89126
-07FF800203B512C0020101FC49B500FCC7FC6E6CB812E0030F04FCC8FC03011680DB0007
-0280C9FC5A5579D369>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA3
-4C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E
-031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D
-844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A82010385
-4A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>I<BA
-12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F737F87858785
-8785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892B812E097C8FC
-861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E1C807413C0A2
-7413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B19074F5B073F13F0
-4EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<932601FFFCEC01C0047FD9FF
-C013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7383F
-F0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F8824949824949824949824949
-824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA298C7
-FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C
-6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C
-6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F93C8
-FC030715FCDB007F14E0040101FCC9FC525479D261>I<BA7E19FCF1FF801AF01AFCD800
-0701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F86747F747F88
-86888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3515AA264
-6264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91C8FCBB5A
-1AF01AC007FCC9FC19805B527CD167>I<BC1280A5D8000701F8C7000114C0F0001F1907
-1901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A3170317
-07170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FCA21B
-FCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5FCBC
-FCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F190785858586
-861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F177F92B6FCA5
-9238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>I<932601FF
-FCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC0
-7F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982
-4949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA348
-5B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A36C7FA36C
-7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D6C6D5C6E
-01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE001F030703
-FC1307DB007F02E01301040149CAFC5B5479D26A>I<B8D8C003B8FCA5D8000701F8C900
-1FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003B8FCA560527CD169>I<B812C0A5D8
-000701F8C7FCB3B3B3B2B812C0A52A527CD132>I<027FB71280A591C76C90C7FCB3B3B3
-EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B7E49495BD83FF8495BD81FE05DD80FFC
-011F5B2707FF807F90C8FC000190B512FC6C6C14F0011F14C0010101F8C9FC39537DD145
->I<B800C091B612F8A5D8000701F8C90003EBF8009738007F8051C7FC505AF203F8F20F
-F0505A505A505A50C8FCF101FCF107F84F5A4F5A4F5A4F5A07FEC9FCF003FC4E5A4E5A4E
-5A4E5A4E5ADD01FECAFC4D5A4D5A4D5A4D7E173F4D7E4C487E4C7F5E4C804C804C80EEFF
-7F9226F9FE3F7FDBFBFC809226FFF81F7F4C7EDCC0077F0480804C7E4B6D804B6D804B82
-84727F727F8684727F727F8784728087737F85737F87737F85737F88857380747F888697
-B512FCB800C0013FECFFFEA55F527CD169>I<B812F8A5D8000701F8CAFCB3B3A91A7CA4
-1AFC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12
-E0A546527CD151>I<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA2
-02EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C17
-78A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA2
-6F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D13
-1EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA371
-5BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<B600
-FC93B7FC8181A282D800076E9239003FFC0070EE07E08282A28202EF7F02E77F02E380A2
-02E18002E0806F7F6F7F6F7FA26F7F6F7F6F806F80A26F80707F707F707F707FA2707F70
-80708070808583717F717F717F717FA27114807114C07114E07213F07213F8A27213FC72
-13FE7213FF721487A27214C77214E77313F77313FF85A285858585A28586868686A28686
-8686A2D93FFC187FB7173F1B1F1B0F1B07755A60527CD169>I<93380FFFC00303B6FC03
-1F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F
-494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F49854948707F4948707FA2
-4849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFC
-AF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A
-6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01
-FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E00303
-92C9FCDB001F13E0565479D265>I<BAFC19F819FF1AE086D8000701F0C7001F13FC0601
-13FF726C13807313C0070F13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A2
-1BF84F13F04F13E0614F13C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFC
-B3AEB812C0A550527CD15C>I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013
-FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49
-496F7F49496F7F4990C96C7F4948707F4948707F01FF854A177F48864849717EA2484971
-1380A2481BC04A83481BE0A24A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5F
-A36C1BF0A36C6D4D13E0A36C1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A
-4C13E06C6D013F6D495A017F91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01
-806E485B6D6D48D91F8F5B6D01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0
-020F6D4913C0020301FF90B5C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7
-EA01FF74133E74137E7413FEF2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314
-C0731480731400735B9638007FF8F21FE0576A79D265>I<B912F0F0FF8019F819FF1AC0
-D8000701F0C714F0060F7F060113FE727F737F737F85737F87A2737FA387A863A2616363
-A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F000
-0313FE9439007FFF80727F727F727F727F727F8684A28684A787A71D1C75133EA3857513
-7E73157C7513FC731401B86C6D9038F803F807039038FE07F07390B512E0736C14C0080F
-1400CEEA7FFC5F537CD164>I<91260FFF80130791B500F85B010702FF5B011FEDC03F49
-EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F82
-4981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86C
-ECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082
-021F16801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882A318
-7FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02
-F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D900
-7F90C8FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF80601
-13C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994
-C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF000F3
-1F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A6E6D
-4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F90B6
-5A030316C0DB007F92C9FC040F14F8DC007F13805E537CD167>I<B700FE031FB512FEA5
-D8001F01F0CA383FFE00F307F06D626F170F6D62811B1F6D6D601B3F6D97C7FC6F5F6D19
-7E821BFE6E6D5E1A016E6D5E1A036E60701507A26E6D5E1A0F6E6D5E1A1F6E6070153FA2
-6E6D93C8FC626E6E147E1AFE6F5E711301A26F6D5C19036F6D5C19076F5E71130FA26F6D
-5C191F6F6D5C193F6F93C9FC715BA26FEC807E19FE706D5A18C1705C18E3705C18F318F7
-70EBFFE0A2705CA2705CA37091CAFCA2705BA2715AA3715AA2715AA2715A715A5F537DD1
-66>I<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0FC06D
-7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F016D66
-704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074CC8FC
-8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B700103
-17016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F170F
-6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC177E6F
-4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E7061A2
-70487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>I<003FB7D88003
-B7FCA5D8000749C8000701F8C7FC6D6D9238007F806D6E93C8FC7015FE6D17016E6D5D70
-4A5A6E16076E6D4A5A6E6D5D4F5A6E6D143F6E6D4A5A7191C9FC6E16FE6EECC00171485A
-6F5D6F6D485A6FEBF80F71485A6F5D6F6D485AEFFF7F6F4ACAFC6F5C6F5CA2705B705B84
-82707F707FA2707F7080855E4C80855E4C80DC3FCF7F058F7FEE7F074C6C7FDB01FE814C
-7E4B486C8003076E7F4B48814C7F4B486D7F033F824C7F4BC76C7F4B6E7F4A5A4B6E804A
-486E800207844A48814B6F7F4A4883023F824A486F7F92C96C7F02FE8401018301037180
-90263FFFC084B76C0103B712F8A55D527CD166>I<B8030FB61280A5D8000F01FCCA003F
-90C7FC6FEF07F86D6D606D4F5A826D6E4C5A6D4F5A826E6D4CC8FC6E18FE826E6D4B5A6E
-4D5A826E6D4B5A6E4D5A836E6E4A5A6E4D5A836F6D4AC9FC6F5E715C6F6D495A6F150371
-5C6F6D495A6F150F06805B6F6E485A6F153F06E05B706D48CAFC705C725A70EBFDFC7013
-FF61705C82705C6182715B96CBFCB3AA030FB712F8A561527ED166>I<B512F0A748C7FC
-B3B3B3B3B3B0B512F0A7147872D925>91 D<B512F8A7EA0003B3B3B3B3B3B0B5FCA71578
-7ED925>93 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D
-7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC
-91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2
-485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026
-F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97
-D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F
-913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285
-84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA
-87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154
-7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001
-FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48
-92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC
-3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC
-020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91
-B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980
-485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C
-6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9
-003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901
-817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191
-C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01
-F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE
-903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC02
-03B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A49
-5AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB5
-12FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90
-267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813
-E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A
-6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFC
-A2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848
-C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F18
-006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F
-03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1F
-FC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3
-C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E
-000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3
-A6B612E0A51B547BD325>I<157FEDFF80020313E04A13F0A24A13F8A76E13F0A26E13E0
-02001380ED7F0092C7FCADED1FF891B5FCA51401EC007FB3B3B1EA0780EA1FE0487E487E
-486C13FF16F0A216E05C16C04A13806C4848130049485A003F495A000FB512F06C5C0001
-148026001FFCC7FC256C87D329>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003F
-FE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8
-ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F
-6F7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537C
-D247>I<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0
-B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F
-001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0
-159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB5
-12FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC9239
-3F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3AC
-B6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038
-807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8
-6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2
-6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80
-7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F
-13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F
-92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61
-6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14
-80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F
-FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF
-150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
-D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
-127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
-816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
-F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
-C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
-FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
-07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
-13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
-A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
-03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
-EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
-13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
-5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
-6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E027F
-ED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94B5FC
-6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013C06D
-71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E011F
-131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F4C7F
-6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<007FB500
-F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C6D6D495A6D4B5A6F495A6D6D
-91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF806E91C9
-FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E4A486C7E
-020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E49486E7E
-49486E7FEBFFF0B500FE49B612C0A542357EB447>I<B600F00107B5FCA5C601F8C8EA7F
-E06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D
-5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEB
-C1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E
-150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D14015D14034A5A6C48
-485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC404D7DB447>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fs cmtt10 10.95 93
-/Fs 93 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
-A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
-00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
-02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
-90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2
-29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE
-FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3
-6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01
-1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC
-A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C
-5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<D803C0EB01E0
-D80FF01303486C497E487E150F487ED87E7E495AEAFE7F5E486C133FA25E157FA24BC7FC
-6C5A5D387E7E01EA7FFED83FFC5B1403EA1FF86C48485AEA03C0C75B140FA25D141FA24A
-5AA25D147FA292C8FC5CA2495AA25C1303A25C1307A290390FF001E0ED07F84A487E011F
-497EA24A487E133F163F90267F807F1380ED7E1F14005BA25B1201A24848EB7F3F033F13
-004914FF12076F5A5B6F5A6C486D5A0001EC01E029477DBE30>I<EB07E0EB1FF8497E13
-7F497E803801FC7F497E810003131F13F0A6143F92C8FC91387F0FFF9026F87E1F138000
-0113FEEBF9FC13FB4A6C1300D9FFF013C06C13E0151F02C05BEB7F809038FF003F4892C7
-FC485C48EB807E5A15FE391FDFC0FC383F8FE014E1397F07F1F8EB03F300FEEBFBF0EB01
-FF5D7FEDC006027F130F91393F801F8015C06C137F6CEBFFE049EBF83F018701FC130026
-3FFFFBB5FC6C01F15B14E06C9038C03FFC00039038001FF8D801FCEB07E0293A7DB830>
-I<EA07C0EA0FF0EA1FF8A213FCA213FE120F1207EA007EA513FE13FCA2120113F81203EA
-07F0120FEA1FE0127FEAFFC013801300127C12380F1D70B730>I<141E147F14FF5BEB03
-FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F
-5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7E
-EB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>I<127812
-FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB
-03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14
-E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A12781847
-78BE30>I<14E0497E497EA60038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9
-FF267FFBFB13C06CB61280000FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048
-B512F04880000F14FE003FECFF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD8
-7E03EB0FC00038EC0380000091C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7
-FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF30>I<EA03E0EA0FF0EA1FF813FC
-EA3FFEA213FFA27EA27E1203EA007FA2137E13FEEA01FC1203EA07F8EA3FF0127FEAFFE0
-EA7F801300123C1019708B30>I<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120F
-EA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A2
-1507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA2
-4A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249
-C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA22547
-7BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F48
-48EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FE
-EC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A2
-6C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FE
-C7FC273A7CB830>I<EB03C0497EA2130FA2131FA2133F137F13FF1203123FB5FCA213EF
-138FEA7E0F1200B3B0003FB512F84814FCB612FEA26C14FC6C14F81F3977B830>I<EB07
-FC90383FFFC090B512F00003804814FE4880261FF80F1380263FE00113C09038C0007F48
-48EB3FE090C7121FED0FF04814075A6C15F81503A3127E1218C8FCA2150716F0150F16E0
-151F16C0153FED7F8015FF4A13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A
-EB0FF0EB3FE0495A495A4890C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7FCA37E
-6C15F025397BB830>I<EB03FF013F13E090B512F84814FE4880481580260FFE0113C090
-38F0007F4848EB1FE0150F16F01507A26C5A6C5AC8FC150F16E0A2151FED3FC0157FEDFF
-8002071300903807FFFE495B5D8115FF6D1480D9000113C09138003FE0ED1FF0ED07F815
-0316FC150116FE1500A21218127EB4FCA2150116FC4814036C15F86C6C13076DEB1FF0D8
-3FF0133F3A1FFE01FFE06CB612C06C15806CECFE00C65C013F13F001031380273A7CB830
->I<EC03FC4A7E140F141FA2143F147F157E14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB
-1FC0A2EB3F80A2EB7F0013FEA2485A485AA2485AA2485A485AA2485AA248C7FC12FEB8FC
-1780A46C1600C8007EC7FCAA91387FFFFE91B6FCA46E5B29397DB830>I<000FB6128048
-15C05AA316800180C8FCAEEB83FF019F13C090B512F015FC8181D9FE0313809039F0007F
-C049133F0180EB1FE06CC7120F000E15F0C81207A216F81503A31218127EA2B4FC150716
-F048140F6C15E06C141F6DEB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C
-6C14E06C6C1380D90FFCC7FC25397BB730>I<EC0FF8EC7FFF49B51280010714E0131F49
-14F090387FF80F9039FFC007F84813803803FE005B485A4848EB03F0ED01E0484890C7FC
-5B123F5BA2127FEB000C903803FFE0010F13F8D8FF3F13FE48B6FCB7128016C09039FE00
-7FE001F8EB1FF001E0130F49EB07F849EB03FCA290C7120116FE1500A37EA46C7E15016D
-14FC121F6D1303000FEC07F86D130F6C6CEB1FF06DEB3FE03A03FF81FFC06C90B512806C
-15006D5B011F13F8010713E001011380273A7CB830>I<127CB712FC16FEA416FC48C7EA
-0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5A
-A24AC7FCA25C5C13015CA213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830
->I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049
-131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6C
-EB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512FE4880
-2607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815
-FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE0
-6C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13
-E0013F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0F
-F048481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D
-133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8
-A2150716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC
-90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0
-A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F
-000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA
-03C0EA0FF0121F13F8123F13FCA3121FA2120F12031200120113F8120313F01207EA1FE0
-123FEA7FC0EAFF80EA7F00127E12380E3470A630>I<16F01503ED07F8151F157FEDFFF0
-14034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0
-485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F3800
-7FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7F
-F8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003F
-B612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1F
-FF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF80
-6E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801
-FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE0
-5B90C9FC127E1278252F7BB230>I<EB1FFE90B512E0000314F8000F14FE488048158026
-7FF80313C09038C0007F48C7121F16E0150FA3127E151F0018EC7FC0C812FF020313804A
-13004A5AEC1FF84A5AEC7FC04A5A92C7FC495AA2495A5CA213075CA86D5A90C9FCA8EB01
-C0EB07F0A2497EA36D5AA2EB01C023397AB830>I<EC1FE0ECFFF8010313FE010F7F4914
-804914C090397FF03FE09038FF800F4890380007F0D803FC13033A07F801FBF89038F007
-FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901FC03FE007FEBF801EA7E
-03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2ECF801D87F0114F8003FEB
-FC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0FE06E13803A07F007FE00
-9038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512FC6D14F86D14E0010314
-C00100EBFE00EC1FF0273A7CB830>I<147F4A7EA2497FA4497F14F7A401077F14E3A301
-0F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038
-FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C13002939
-7DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615
-015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E
-1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7
-FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE0
-7F48EB801F3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8FC
-167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13
-076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F09038
-007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF815
-0F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A216
-7F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B38
-7FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FC
-A6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<00
-3FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA690
-38FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103
-EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A
-491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C
-6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137F
-ECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF80
-0FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA6
-01F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E02D38
-7FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500
-213879B730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D803F090
-3803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8FC5C
-13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F497F8215
-1F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C497E6C
-496C13C02B387FB730>75 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE
-1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C49
-13F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E3
-133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0
-A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E0
-2D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E13800003
-913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E143FA2
-141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153FEA3F
-FF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC000714
-FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3
-A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C15
-00000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F800
-3FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6
-FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383FFFE0
-48B512FC000714FF4815804815C04815E0EBF80001E0133F4848EB1FF049130F90C71207
-A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C01FFF
-D83FE014E0EBF80F90B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA21680
-157F16C0153F16E0151F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC15FF
-6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B5A15
-3F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A
-3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>
-I<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E484813
-7F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C
-14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07
-F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5128016
-0000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA4
-3AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<
-3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C
-6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038
-007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13C0D8
-07F0903801FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F013F
-5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D5BA4
-6E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D
-13E0D81FC09038001FC0000F1680A76D143F00071600A7000390380F803E9039F01FC07E
-EC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07C
-A201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397F
-B730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00
-005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90
-C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F
-49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730
->I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C6C49
-5AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F101075BA2
-903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B2B38
-7EB730>I<001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153FED7F
-80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A5C
-130F495A5C133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A90B6
-FCB7FCA46C15FC27387CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580A4
-6C140019476DBE30>I<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA2
-12017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E
-7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0
-A2ED07F8A21503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5
-007FB5FCB6FCA46C140019477DBE30>I<1307EB1FC0EB7FF0497E000313FE000FEBFF80
-003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00401D0E
-77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I<1338137CEA01FE12031207
-EA0FFC13F0EA1FE013C0EA3F8013005A127EA212FE5AA5EAFFC013E013F0127FA2123FA2
-EA1FE0EA07C00F1D70BE30>I<EB7FF80003B5FC4814C04880488048809038E01FFC9038
-C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A48EB803F383F
-F800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E6C14
-EF000314876CD9FE01138026003FE0C8FC2A2A7BA830>I<EA3FFC487E12FFA2127F123F
-1200AAEC03FE91381FFF80027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A
-137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB
-7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003
-FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB807F3907FC00
-3F485A485A49EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C0
-6DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13
-F801075B01011380232A7AA830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381F
-FF874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FC
-A25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06C
-B712E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC01
-0713E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0
-150F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F0
-6DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEB
-FE00010713F8010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC49
-1387903803FE079138FC03F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0
-260007F0C7FCB3A9003FB512FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF
-90261FFF8713C04913DF90B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2
-497F001F8149133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001
-DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE
-0180130148C8127F007E8100FE168048151FA56C153F007FED7F006D5C6C6C495A01F013
-076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I<
-EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138
-FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FC
-B500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB
-00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C0
-23397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8
-A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C
-5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017
-E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01
-FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E
-3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA4
-7EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF
-80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F8
-03FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C010713
-80322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE
-07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FC
-B500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F
-90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303
-007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C
-6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0
-010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC
-6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F016
-07A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E
-495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>
-I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F
-491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C
-133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7
-FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB51280B512
-C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A90C7FC5C5C5C
-A25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5129F00
-0714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC
-6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2
-150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C02678
-0FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA36C15E026001F
-C0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D14C016806D14
-009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F00
-3F143F00001400B3A41501A2150315076D130F903A7FC07FFFF891B612FC6D15FE7F6D49
-13FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B515E0
-A26C16C06C496C13803B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D
-5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0
-A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F0
-6C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A3
-3A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA201
-1F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648
-C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC
-147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE9038
-7F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C01801400
-29277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003
-F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107
-137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F
-92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC
-6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED
-7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A49
-5A495A495A4948133E4890C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277D
-A630>I<ED3FF0913803FFF8140F5C147F16F09138FFF00092C7FC495A5CB3A21303495A
-133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813076D7E1301B3A2806D7E15F091
-387FFFF016F8141F8014039138003FF025477BBE30>I<127CA212FEB3B3B3AD127CA207
-476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E13076D7E1301B3A2806D7E15E09138
-7FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC495A5CB3A21303495A137F387F
-FFF0B5FC14C05C49C8FCEA7FE025477BBE30>I<017C133848B4137C48EB80FE4813C148
-13C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78
-B730>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ft cmr10 10.95 86
-/Ft 86 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
-F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
-FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
-D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
-387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
-497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
-EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
-13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
-00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
-485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
-FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC
-121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
-D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013
-00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E
-0018130C0038131C003013181C1C7DBE2D>I<14E0A4EB07FC90383FFF8090B512E03901
-F8E3F03903E0E0FCD807C0133CD80F807FD81F007F003E80003C1580007C140316C00078
-141F00F8143F157FA47EED3F806CEC0E0092C7FC127F138013C0EA3FF013FEEA1FFF6C13
-FC6C13FF6C14C06C806C6C13F8011F7F130301007FECE7FF14E102E01380157F153FED1F
-C0A2003E140F127FD8FF801307A5130000FC158000F0140F1270007815005D6C141E153E
-6C5C6C5C3907C0E1F03903F8EFE0C6B51280D93FFEC7FCEB0FF8EB00E0A422497BC32D>
-36 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E4848
-6C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200
-EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A
-007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0
-E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C07003
-1F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A
-020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C494814
-7E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0
-E0496FB45A0160043FC7FC41497BC34C>I<121EEA7F8012FF13C0A213E0A3127FEA1E60
-1200A413E013C0A312011380120313005A120E5A1218123812300B1C79BE19>39
-D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485A
-A2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F
-120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E014
-701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA2
-7FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480
-A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A
-145A7BC323>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
-80120313005A120E5A1218123812300B1C798919>44 D<B512FEA617067F961E>I<121E
-EA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A21680150FA2
-16005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24A
-C7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8
-FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2
-121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F
-03F090387C00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0
-A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C
-6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7D
-BC2D>I<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8
-A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE00
-1E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0
-153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A49
-5A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7
-FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F
-000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5A
-A24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED
-7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E
-6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<
-150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01
-C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5A
-B8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5
-FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8
-496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA4
-16E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C48
-5A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90
-380FC00F90391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F
-00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC
-01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0
-A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903
-FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC
-03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25C
-A2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407B
-BD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FC
-ED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038
-FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E
-3903E01FFF48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC
-0FF01507481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C
-133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1F
-FF90387E07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F1580
-5B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13
-DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD8
-0F801400487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC38
-03FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FC
-B3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA
-7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A312031300
-5A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE00
-7FB912E0BA12F0A26C18E03C167BA147>61 D<EB1FF890B5FC3903E01FC0390F0007F000
-1EEB03F848EB01FC4814FE140000FE14FF7E7FA46CC7FC123EC7EA01FEA2EC03FCEC07F8
-15F0EC0FC0EC1F80EC3F00143E5C147814F85C13015CA2495AA25CAB91C7FC90C8FCA8EB
-0780EB1FE0A2497EA46D5AA2EB078020407BBF2B>63 D<15074B7EA34B7EA34B7EA34B7E
-A34B7E15E7A2913801C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7E
-A34A6D7EA34A6D7EA349486D7E91B6FCA249819138800001A249C87EA24982010E157FA2
-011E82011C153FA2013C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F001
-0FB512F8A33D417DC044>65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE70
-7E701380EF7FC0EF3FE0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF80
-4C1300EE03FCEE0FF8EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3F
-E0EF1FF018F8170F18FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403
-138048486C90380FFE00B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E
-020F9038FF801E913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE494814
-0FD93FE0140749481403495A91C812014848150012034848167E5B000F173EA24848161E
-A2123F5B180E127FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007
-173C6D16386C6C1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D
-6CEC1F00D903FE143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003F
-F037427BBF42>I<B712FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E71
-7EEF0FE084717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A2
-1980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A
-178004FCC8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A2
-17011700A31870A418381638A41800A21678A216F81501150791B5FCA3EC800715011500
-1678A21638A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48
-486CEB03FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0
-170F1707A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC80
-07150115001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C91
-2603FFFE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948
-143DD91FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F17
-7C5B001F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE
-00EF03FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907
-F8141ED903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC91
-38003FF03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3
-A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612
-F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713
-006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A
-6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA300
-0101E0C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C
-5A4C5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7
-FCEC878791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2
-707E707EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FC
-A3403E7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35F
-A25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEB
-E000D8007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F15
-38A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E
-6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213
-F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F880
-80D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA2
-6E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2
-EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F17
-0FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807
-FFFE91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F00
-3F18C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A3
-6C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4A
-C7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE0
-3C427BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F
-80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3F
-F091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FF
-FE91391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E
-7E49C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7F
-C0A3007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3
-000F18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A
-017FD9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE9026
-01FDC013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB0001143883
-711378A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF
-47>I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2
-717EA284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091
-388001FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E005
-7F131E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F40
-7DBD43>I<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C013
-3F4848130F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA2
-6C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E001
-0714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA2
-7EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F
-803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF000
-7FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0
-A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C7
-0007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E
-4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280
-020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C0180913800
-7F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101
-075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438
-A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E
-130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017F
-B5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E14
-3F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104
-037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA
-7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F8
-4C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E
-5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5
-D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D
-6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF8
-1E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED
-71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D
-7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E0007
-6DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF800
-6C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D
-1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13
-016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA341
-3E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EEDFF
-80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FCA2
-4A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA249
-5A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F484814
-3FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>I<
-486C13C00003130101001380481303000EEB070048130E0018130C0038131C0030131800
-70133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133FA2
-003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA4
-0E5B7FC319>I<EA0180120313005A120E5A12181238123012701260A312E05AA412CFEA
-FFC013E0A3127FA2123F13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F01F803907
-8007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC
-90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA300
-7F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0
-292A7DA82D>I<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FD
-E001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17
-F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039
-E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C
-131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9
-FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C
-137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501
-B114FF010713E190381F80F990387E003D49131FD803F81307485A49130348481301121F
-123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C49
-7ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90
-380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C0
-4848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F
-15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC
-232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401
-137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<16
-7C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC06
-00000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903
-FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E0
-6C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E15
-7E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7E
-A82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F091
-38E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F
-7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201
-B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC14
-7FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0
-381E07C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280
-A392383FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD90
-38FFDFC0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C
-14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8
-A3153F7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B78
-03F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C7
-5B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<
-3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F0001
-138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF
-010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15
-F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C
-6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0
-010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A
-07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0
-A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA
-3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F
-80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485A
-A448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E13799038
-3F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E0
-00FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35B
-B3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E13
-07003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F
-6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F0
-7E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<13
-1CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912
-009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14
-FE00FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E01
-0E13806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFF
-E0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC0
-07011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF0
-01005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE
-003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C
-1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE001
-7F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14
-DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B5
-39F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC
-90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BEC
-F1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC8048
-6C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48
-EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F13
-0EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2
-140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA78
-0EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E49
-5A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90
-393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B4848137F
-00FF495A90B6FCA221277EA628>I<BE12C0A25A0280985B>124 D
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fu cmbx12 20.736 13
-/Fu 13 118 df<BDFC1CFEF4FFC01DF81DFF1EC01EF08AC7003F49C9000F14FE09018075
-6C800A1F807680768076807680A27680A2777FA2208089A320C0A289A565A32080A35314
-00A29AB55AA2525C6764525C525C525C525C5249C7FC51B55A090714F0093F14C00807B6
-C8FC93BA12F81DC0651DFCF5FF801EF04CCA14FC0A3F13FF0A0F800A0314E076807614FC
-777F777F2080897714C020E0A27714F0A220F88920FCA47714FEA96520FCA45314F8A265
-20F06520E05314C0659AB61280521500525C1C0F5214F899B65A09075DC05A9CC7FC1EFC
-1EF01EC053C8FC1DE00AF8C9FC777679F58A>66 D<B800C051B8128071637163A37163A2
-7163C7003F57C8FC71F33FBFA203EF6DF37F3FA303E76E1AFEA203E36EF101FCA203E16E
-F103F8A203E06EF107F0A3706DF10FE0A2706DF11FC0A2706DF13F80A2706DF17F00A370
-6E18FEA2706E4D5AA2706E4D5AA3706E4D5AA2716D4D5AA2716D4D5AA2716D4D5AA3716D
-4DC7FCA2716E16FEA2716E4B5AA2716E4B5AA3716E4B5AA2726D4B5AA2726D4B5AA3726D
-4B5AA2726D4BC8FCA2726E14FEA2726E495AA3726E495AA2726E495AA2736D495AA2736D
-495AA3736D495AA2736D49C9FCA273EC80FEA2F481FC7314C1A273ECE3F8A273ECF7F0A2
-74EBFFE0A3745CA2745CA27491CAFCA2745BA3745BA2902603FFFE705BB800F897BA1280
-745BA2755AA3755A755AA97679F5B8>77 D<BC7E1BFF1CF01CFF1DC01DF81DFE777EC700
-3F91C8000715E0E0003F80090714FC090180756C7F7680768076807680A276808B888BA3
-7680A38CAA9DC8FCA3525CA267A2525C676467525C525C5291C9FC99B512FC515C090F5C
-097F14C0080FB6CAFC94B912FC1DE09ACBFC1CF81CFE767E94C8003F14E0080780080114
-FC746C7F757F7580758075807580A275808A87A28A888AA78BA78BA779147E22FFA288A2
-8B765E22FE76802103766E14FCBA00C06E6E1307766EEB0FF876ED801F779138E07FF00B
-1F91B512E00B0716C00B011680E3003FECFE00D1000714F8E4000F13E088787AF590>82
-D<92383FFFF80207B612E0027F15FC49B87E010717E0011F83499026F0007F13FC4948C7
-000F7F90B502036D7E486E6D806F6D80727F486E6E7F8486727FA28684A26C5C72806C5C
-6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041FB7FC0303B8FC157F0203B9FC021F
-ECFE0391B612800103ECF800010F14C04991C7FC017F13FC90B512F04814C0485C4891C8
-FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E5D187E6C6D846E4A48806C6D4A48
-14FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE00019139FC03FFC06C91B6487E013F4B
-487E010F4B1307010303F01301D9003F0280D9003F13FC020101F8CBFC57507ACE5E>97
-D<93383FFFF00307B612C0033F15F84AB712FE0207707E021F17E0027F8391B526FC001F
-7F010302C001037F4991C7487F49495C495B4901F04A7F5B90B55A485CA2485C4891C8FC
-A248715B5C48715B725B4A6F5B489438007FC0071FC7FC96C8FC5AA25CA3B5FCAF7E80A4
-7E80A27E806CF11F80F23FC06C6E167FA26C6EEEFF80816C606C6E17006D6D4B5A6D6D15
-076D6D4B5A6D6D6C4A5A6D02E0EC7FF06D02F849485A01009126FF801F5B6E91B6C7FC02
-1F5E020716F8020116E06E6C1580030702FCC8FCDB003F13804A507ACE56>99
-D<93387FFF80030FB512FC037FECFF804AB712E0020716F8021F16FE027FD9F8077F49B5
-D8C000804991C7003F13E04901FC020F7F49496E7F49498049496E7F49496E7F90B55A48
-727E92C914804884485B1BC048841BE0485BA27313F05AA25C5AA21BF885A2B5FCA391BA
-FCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207F86C7F1A0F6C6E17F06C191F6F17
-E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B13006D6D6CEC0FFE6D02E0EC3FFC
-6D02F8ECFFF86D9126FFC00F5B023F91B65A020F178002034CC7FC020016F8031F15E003
-0392C8FCDB000F13E04D507BCE58>101 D<EF7FFE040FB512C093B612F0030715FC031F
-814B8192B5D8F01F13800203DA803F13C04A9026FC007F13E04A4990B5FC4A5B4A494814
-F04A13C091B51280A2491400A2495BA27114E05B4B6E13C0721380721300F007FC95C8FC
-B3B912C0A8D8000749CAFCB3B3B3A7007FB712FCA844797AF83B>I<903801FFFCB6FCA8
-C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15F84D81932701FFF01F
-7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC047E6F7F5EEDFDF85E03
-FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A8617879F76C>104
-D<903801FFFCB6FCA8C67E131F7FB3B3B3B3B3ABB812C0A82A7879F735>108
-D<902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F15F84D81932701FFF01F
-7F4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A48824CC8FC047E6F7F5E
-EDF9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E003B81280A8614E79CD6C
->110 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F13
-8093263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015
-FF16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A8
-434E7ACD4F>114 D<912603FFFCEB0780027F9039FFE00FC00103B6EAF83F010FEDFEFF
-013F92B5FC49EB000F2601FFF01300480180143F4890C8120F4848814848814981123F83
-485A187FA212FF6D163FA37F7F6DEE1F8002C092C7FC14F014FEECFFF06CECFF8016FEEE
-FFE06C16FC6C16FF18C06C836C17F86C836C836C83013F17806D17C0010717E0010117F0
-EB003F020716F8EC001F030015FC1607EE007F051F13FE1707007E82B482836D167FA218
-3F7F181FA27F19FC7FA26D163F6D17F86D167F19F06D16FF6E4A13E002E04A13C06E4A13
-8002FE023F1300913AFFC003FFFE01E790B65A01C316F0018016C026FE003F92C7FC4801
-0714F80070D9007F90C8FC3F507ACE4C>I<DAFFFE933803FFF8B60303B6FCA8C66CEE00
-01011F717E6D84B3B3A862A497B5FCA261A2616D5F1ADF6F150F6DEF1F9F073F806D6EDA
-7F1F13FF6D6ED901FEEDFF8070EB07FC023F01FEEB3FF86E90B612F06E16C00203168002
-00EDFE00031F14F80300028003C0C7FC614F79CD6C>117 D E
-%EndDVIPSBitmapFont
+%%BeginProcSet: f7b6d320.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
+% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
+% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
+% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
+%
+/TeXf7b6d320Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
+/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+/period /slash /zero /one /two /three /four /five /six /seven /eight
+/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
+/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
+/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 09fbbfac.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
+/TeX09fbbfacEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
+/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
+/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
+/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
+/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
+/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
+/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
+/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
+/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: bbad153f.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9
+%
+/TeXbbad153fEncoding [
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /circlemultiply
+/circledivide /circledot /circlecopyrt /openbullet /bullet
+/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal
+/greaterequal /precedesequal /followsequal /similar /approxequal
+/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows
+/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast
+/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup
+/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional
+/prime /infinity /element /owner /triangle /triangleinv /negationslash
+/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur
+/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection
+/unionmulti /logicaland /logicalor /turnstileleft /turnstileright
+/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright
+/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv
+/backslash /wreathproduct /radical /coproduct /nabla /integral
+/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section
+/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef
+/circlemultiply /circledivide /circledot /circlecopyrt /openbullet
+/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset
+/lessequal /greaterequal /precedesequal /followsequal /similar
+/approxequal /propersubset /propersuperset /lessmuch /greatermuch
+/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 74afc74c.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10
+%
+/TeX74afc74cEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /sterling /percent
+/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma
+/hyphen /period /slash /zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question
+/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 0ef0afca.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmr5
+%
+/TeX0ef0afcaEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi
+/dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls
+/ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright
+/numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft
+/bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h
+/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash
+/hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda
+/Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup
+/arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj
+/grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe
+/oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
end
+
+%%EndProcSet
+%%BeginFont: CMTT12
+%!PS-AdobeFont-1.1: CMTT12 1.0
+%%CreationDate: 1991 Aug 20 16:45:46
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-1 -234 524 695}readonly def
+/UniqueID 5000833 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
+C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
+3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
+426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
+D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
+E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
+6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
+A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
+0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
+85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
+F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
+C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
+12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
+048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
+0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
+741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
+9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
+306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
+CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
+1353CC1FC512D59DFF847ACCD3D295C5D09DFE2A27B87A0F54938CC908FC87F8
+A08FF8F94A3051855B401F349F5CBC1DAD02C3CBE583E69FBD18FC747D2730B9
+A62F25952755ECC04C1852CB5CA505043B428E2BF1D407A26E0AC0C85E0DEB4C
+425D14F1A1BA5972EC78AF68FFDB2425A9F5ED10220B1716A83D53D5958094ED
+3D2CD66F2A070515F737516108CB2B0205255E9BA568C2A847679FCE1B1AAC31
+128359CED2C77D35333CE94AB2B05797C43EA28810F314D3283555D399E30FEC
+C1F113B94484B6CFCC0988EA652BD5E0F61983225CE3A1CC1FA80F13DD945516
+C84962DC76A254C62CCBDB47B6CBE6DD237E38177D216AB3F9BBF876C4775680
+A4F8CE4DB65064C59D540E36EDCF9C3AD79FFCFA244A6FB20D047BB4774E6316
+69F7D47D459A56A68B2F45417DA9C04CF6F370D13E2292908671929511BAC37F
+B8F709AC597A2B80340B60584817C685319CE7CD7FB243F5D9F9848D4B45CC4D
+22CE6FEDDC2316EC3199EEEF12CA0263ED6122153C444612F0612C338981E889
+ECB0006CFA33076F02EA838E03E551785BFD414BB360B19A0CFCEA852C12F6A7
+C36E68E2121B416EB29CC55D87804D6E79B876C7A0BEA416FE1FCC727D00E341
+47F2B3A20534E6C16D81C0CAA970639C0D690DF2383FA7D6693E1863F2BFA94D
+D7A0B91D6E2A5770D6997971C227B38D3AB79D62CFA3BB7E18E5857FDE0271DC
+8D0467EB8A60EF3A0EBD77730AD8F4D7AE248C103CCEFC17C717DDFCDE9ACE1C
+1BBBF78434C9F66C455D1A02859960717C61B0FE911A0FEC12B0783F944F9B1C
+B7BE3D1B67108D79A2C5C578B97B870F5BB646CFCECB27885DDAF5342783ED3D
+84463FF40B432FCDCEDAC7827FA0C1F6E26805C50EE6448BE598BA51324A6F5E
+493F035C131B7D9DB57EF720FE2E5FE1C532C51A0905EAFFE463BF7E47202808
+DFB0934AB9B27C12D8BB566BCF4D89709D282CDA9607E25DBC140F61671B1926
+0CBE74FBB99D87802E74A250E87029AA28E98B3FA3DFEFAD4723DE5961E9AF3C
+B5A35E3BED0B97894CF8E44176570DDCD6EDF06CB66F0CDCBE75F77E14C90F89
+BA830760415ECCE0DD1A1B2191891182275904FA1B587DE149829C711CB58ACA
+33843E14B42B9C120C917D57DD8EE4F0ECC257767B6AC6EB80E563F84101AE08
+829ABC0A055A4D33AB19281A0345AEE764A7D135BCAB8735A051D8A7892B4702
+E9917E2CB149C24C721C1D12731A5F8412524CED7E850602D8BD05F7BEB64F46
+472A600F50E758FD22A8126A913C001473CBC84165A4B46B25E00FB2348F3896
+20C8886A5B08704C319924C1749F33A3096406A27FDADC6F17807103DA04D354
+FEF400100881609A42E8572819B845B8A8B7FCF2CCCA75A1CB25BBBF3E2B1C45
+FC4BDEC03311D6CCF78669C53432D786530039B36A8037A95A231F17E98359E6
+F0E892CAEB646877F4C4FFBCCB5C5A8143FF00B90F01A62D0BE68D593E97A2CF
+2EC3C1D389C2474878A7E7BAF4C97C2733F958D6CD02F9EF880158455958A15A
+C2A4ED22526838EC3530C7EC5654204444A28529BF68ADCF93E3DA72ABD50E46
+3499D9A9A061D59C0D35F1FA5C5EA5CB93500268FE96B416F66EF179E184D595
+14DED98C95A8EEF2D172F8F59AC529A392838572C0E48018F8C9D6E6644AEA2D
+60C68F8B4BE2420B171750C96F8398C99DFB709379085C901EE6DA44DC4F671D
+10172309F8E7E7E8D9F5D4A6EBCFE0C28BDD4D6DAA0C103AA0BB2F2D52217302
+B580D26E9A89AB56927E729AFB576FDE9877B16A2483B67D3917729597707B08
+C183A0DE48462D2E16BA17F8BACB18BB9B15434551FD9F0D9F6142F4A668F631
+8BE9288B53AAF5755A28DAA6D71D17062D29D19A9EB299814755C4C6E5D03B64
+CE8ECD65C961AB35E468C36E087857A9315D362A1D3655A41D249C32C459760E
+A66FD627FCC6745F9575782B47F362A33C418F10C16E0DFB67A151E107B5109F
+4F58565797D5BA3E4B0A45978FDFA804C452F708A81314B36D5F448A836C08EB
+A2FF2DE947BD3779658BEA382C00DE63BF2AC04DC2DED83B8DFC1263E7819446
+244FBF5CFD4581952D515909B617C205A54AB0B40CA7ADE8DF11B60C4F14802A
+1398444E83A91834D2BF6E9525E6F9BBB4757EC393751695D626926D4240CA7D
+501664845B89C7E6BE94E3BE8D67531C5528465CCF393A383238EE573E2A452A
+97ECE639797A8B18FE620BE63784BAAD630E0F534E3715408A0AAABDB0767EE9
+92E8CC835ADACCE79B38AF6C21DA95F5B5EB17AD07892B6DE3598FE66FDB07F6
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.1: CMR9 1.0
+%%CreationDate: 1991 Aug 20 16:39:59
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-39 -250 1036 750}readonly def
+/UniqueID 5000792 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
+3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
+046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
+C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
+A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
+A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
+731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
+09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
+49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
+5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
+54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
+C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
+11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
+48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
+25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
+24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
+21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
+2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
+26141589B9DB4C849B9628F781E6449B19640A9FFDA1F601120006E44A860188
+B311425E422E51E61638D13C3E73A5735AE1A5302E290B24B4D0366C53E460A0
+BA0B093E70BF9E5E438CCC0219974F12FCEBD742D9364CBA02229EF59D938ECA
+18902C7CBE1265FA0597BA67B0B05E116AABCCA0FA6817F8A8803F61D6842718
+B0EAB943575322BB38B86B51E9DA2F247A0FFECC8E3E327AFABBF5F6966E9FDC
+5FFB9A3075CFAFA8A119019DD243BB1B0B8A0756A96C894D90000AEE0597A54E
+BBBD4A2077FD9F9A8A17FCB91AA6C68762AA23B99D5C87C62323DED943EB85E0
+C597B8C67A6FFDC8E849A807F703C8A92809313CB8871143AA11815A1259CCEB
+C17B124C67F8678BBED3A00A9A7E9BB5699E81CEEA18B0BC1EF3B49E3DBA1CFB
+B0286E92685F5D9EC12419A6E8997F34E6E29B9E66119430D82509B8AE4BA7F9
+B3137FA0E5D92948D0E0E8432A58A55D534CDD1339B20990B58DF13396FFFB01
+818DAEC0E7777059CE15D6BE8B313EAB3BC5CC04DA2F41775419FDE3BBDBF4D1
+4E6F1FEA0F3A746DD5A1DA447821E12597143EAF04D221FED9408A3DFB5F6D18
+4B9D8BCF5F947D893C988C13BBD1C45AD5F68E24C0D401E2FA8C0B911A179DB1
+CE8E847144CF6363B241A3195414FFED9617F6ABAE1C9A7D1F5C385A9138DD0B
+EF2CF3A005050C9B0264DF4F824602CFA58FBF83F6B26A7972C2BE206C34F5AE
+189FC968BEBA2E1B0EEBB86652A4AE7F86B93DA4F3CA93BD5C73E842EA96B3D5
+A114D45D983BB890CC19F9944DF4741761C568141A87757C170595357A3A0546
+B09CD7394A5F8A7E3E7661FBB04435ECDDB1BF4C5EC2A61A78F6E8F024D008BC
+0A32FEEBC3DC0E9D3E572A2ADA2A0CA043C1C40B09C2954BFAC36030EE3CA9AA
+D49571EB8D392ED4ECB090477974F4E7D898438FB6312873D925686F05E5BDB6
+D2274540F20C5B0409ABD35FC4C90071BBF121C656EE78D55B5F7D1606A958F7
+CF1F81E631771333211F9286378ADD6525D5E4548A547DFDE2900D63EAB5DFAA
+5ADCEB72A14EEFB53BF0B93C531211CCE2CB1B52FA387A716E79ED9ACBD9A3C2
+DEBE7744DB6DA31D29E30998B42456D6FE15B3500ED0F003C985C5D4A38D55FD
+A70B015AEAEEBA889304E3DBAE87BF8BD28770B4014F4DBD5AE199D8B9536E70
+FCD38C0B0E6C32C17218E0D86C0CCFB67CBF635D0A51BFA2CEE5A371D70DF4A0
+8359DC9C79122FB837299EA0C1EC7FBA0B3378CECCA1187804B48E4565AEE1AC
+E4162304465ED336C1A47C7A0ED44CD9F7F8EB851DE25A1EC6A536BC1D908279
+2637F66B9B11FBDE78D8FE275433106E69CE8693A395D59D20B0980E6D965B3B
+A29E9867D60010A45B94436D947C87385CB59113B1493550FD02FAE717AFBBE1
+F630D61011E4D76DD3A9F57CBEC6DBF1896325FAE389CFF97B303CCA999E20E4
+57A7030758227017F51468FBF5AF4906D4403E23FFA829D3A9B11E58E1E2591B
+24B467F1441B517ACD03F03D18E6A99CFECD54B9F91814337C3518D48B3BFE91
+CF21D7D61B0EFFA25EA0B6B1E9F1A1518996178E619F9465E6E969F44ADB60BA
+42565866C9AB7DD3F805A14900013294585A7C8B8B0DE2BE4A3634F61BA335E0
+B82FB93C54D5FCEA68733C71D369D9FA4F3F7F1FB797441CCD5004FC4ACA1D5B
+C02E4F4123FFB4CC2D8951836A984875CE041FDC0ACD8B2A8E238C9738E39DCB
+1D6015147E6EAD26DEA8163272090B5F9866F5BDB356CA1D62EA8A0B60493435
+CAE557FBB2FAACC68D5F8A4FDCEAA0E2C82F167DC8B463E966467A741223D937
+BF647469DEF8432DC5AA1E0D2D28CC0F1EB27501367FCB0DD9920F547A48E2E8
+773C1D6B13A50654D4B4E463375D58762FE46F7B4AA1395DBE36DB9A39A4CAEB
+B27071F27172D33B57A632634F738504312DD9D7470D4F6CCAAC1A0D3E04E8BF
+6C951AEA1E54089A07423EC1090A1339A2AF21862A2AC993E599C39DEBD6CB3D
+FEA4787D129BA9F71899248B4CCB37B30EA6FF86F969A527F56C8A2BF2C72EDE
+C49A90723DEFCEA55047597AF887DDC49E2EF8CB794A1C1591C2E951063F5B0D
+E93CF4AD7D0769FADC79886CC7F25ECFF5B77C47E9204987D7AF6B13A8998BFA
+E5006923F3C61A3CCF6BFFB5DA63627F17BC2869DEFC98C67DF60424F8F8F585
+5DB4CCBBA16795C8D8DEF245BF954787F097B473AA571CD7A3607FB4DB277BCC
+DEDAEF8825A5E040E0EBC36179D3D673B9008BD0131C4529A93C2AF79BE99F70
+E78D9D5FA0FFF06B013B8AF4BB5E328055AF9635F2AE7D6F741C043706EC7EE2
+4E3033ED8BF2A0E2849A1F594E114A00E04E36FF810E312C3414566C3479E748
+6E6DB35321874BEE56B562E1A82FE9A5EB9945A7D05170AB85D1FE58274C85B0
+B9A50E491AB43863B115266242D2AF357BF1ABA348D83CF48C803601D413630A
+94EA81BF6838D64D384590AD54926109651056AB83EE8BEAF15E010646EE31D0
+DD32A0CD9435F33FE9C3C308E2412B65DD2B6EE05686EFE2D052A6AE449FB338
+6831AE4E0BEF3ACF3F3655DB8238EC9F0B1B543865D2581145CF98562E69C542
+EF2857167B8F116EF2570487BA57AE6C05583763B24341BF2CDF983AD7CEAA4C
+6837582B40A6508ED64BF5917AF1CB8E9F795B740386AECF52EA094D3BADA159
+BACC1D8E3A6DB913E1203010BCE8F75F1EBB4F5A0CCF35E82497E109F115A864
+7DFF57DD7212BCB0BAE1787203E88C9EBD9208D905A4F7F56FFAB24DFDC6053B
+C460BEFF9FB9D0E145588FE8143BB3E6CD2072532BB03E8293C47EC2F740C602
+AFBE8AA8C670A2835F55AB63D0E18C4C338767A86E9353CBBEECE199D664E84E
+1EE4C5291D4B58C03463743EF5C59FA9F879423C4E1430E6FCCAADD89C05F8CE
+8BD78AA57F70571E0B083CACB12C8E89728A542EB58E531E8DFF8164C86CCC57
+5ACDE9E9575B2028EE1F93C2B416123D2C2EFD2FA9DDF1857018C6A978CAD17D
+D95D92D1E564814F02729248EBCA0F69BBD35A6EEC46811BF5478796CF492A6A
+796A013DE9844ACA7377AAC0F00331D9C7D8D4184E128D61CEA5E68388FC68A0
+AED5DC264E973C0BA6EE0F6F7C540B563120D3DBDFE06866E9820C64E00A861E
+BB208B22A1DB195CC5B29D80DD65911233BF68899C8739FBC44AE8B8A4A7B08A
+60621FBED6418BC7DECDFD9325D9ACD9CE9A787A467CF44D0EFFCD8E89E30EA5
+0ECFC159C2AA45841FD5170B9933A9CAA862B7A4A293FA59625DBA668EE1FD8A
+17AC512DDC9D30B8A3215F2577E2063AE3F622801CA14FDDD0C2F0087E5DA873
+F9EEB0D23DFBE8B0117C90EBB86983ACEE937810BF998B5B60AAF854DFFC3B38
+19B4C00F221BEB5CD126A01A20BFC333C3176176DBC3483F26297306BA56E155
+404DA68C2569732B15B74201CEEAA696E4C949A890B4C4AA3E931F8EE9A7FFB9
+44789CABC1DA86C54D43F1D2ADEBEDD4D9B764459352EAA4058A0DF5E925DE6B
+5C4449E06686AE847A72B3DB0750C848C0F21A15E0C282DE6B989552A3755A97
+E6D8BA6382D29CA47901A8F65867C4BCEEA35D75BB5CAD2930627A8462605DD2
+2825298D0AD47F81A7A12BD1A9DD293655FCA634D57F5259C98CE71005BCA2D7
+C4B0CDFA9440EE4122A2CD6AA1F482838E0FB787EEBB5242AD1DA8C4C5E2829F
+6567717A520AD64AC38AA586BB7432E9E567A9BB39E6018BA4ACBD172821E553
+9664C8BDDA39FDA69B47A17807293C4E1897ED1C608EE5C12DDE0B415BAC7FD6
+067BFE7C4BFC199A125FF68CC186372B9A212567DEB70985EE7667E0BB46E30E
+DA0D988D18A9E71133FB8130A5A11812A01C7D88C79A7AACF2D236EB9CFF413E
+F4F388671797C31599CE79169EDE7716C0B9DBF61892ED3A1CC9684FE3068F3E
+BE886A7B1A0D3E0C357858E209649561CD211B91264675E1978A7ACE2DCBDC29
+74118BE4F2B7C30558C0F3746F1C9E6A20931EF3C768009BB77B0CD9847A4281
+EB754372DE304734457C102611ED20D4822F118D5BEA9661A8A4A8E0CC549489
+84D79E5C3AAF4FF29E81E2BCB8DC125109CE37BA6F7EA0D078B8AE8FF3695243
+1BB75054BF37D6209DC4E31D971E876B1799B3ADC4D2B636EF0C7FC11614231B
+5BBD3A372EE95327AE7F423065E42C16D2B2EDF92A6118C40D4D2F2C5B683B25
+194F940AB871807A013B8F47700DC4DC2E935776CF4DD8B2C138432BF1331B1E
+80B9D9ACC3897B41682315D62963AECAD855D3A4A7A2011BBA3DAAB75F4031DE
+F43A9628A073C49C0BF50340D5F239C3D1BC5276FD36C73A46B4A79C619F30E3
+73F3D58EBAC5FE2A4A22C362B8F9ADEEB3CCD0D31166178D241A24BCC61B2442
+23BFE2CA3E8FBA1B1FF660DE333184734E0D00BE164FBA03CFDDC13D65D29789
+27D3B2EAE0BB3DF0038C17A38FDF8CDE17E812DDBBA20F846767A178595DC63B
+894C0A1FC610386087249495B08FA611EFD4E40AEDB0C8A92599993398EDA09A
+62A56FD9FF0668FBE37294BEB2CF44785A8F1AA3FC65EF86E33D41619DBEA1C2
+25977D7C98974FA2CF8F552D55DA8EA87575774CC6CB3EDE9F6F0DAC189431B9
+58323A4CE3668D79D8B163BF08E4E85B9A4D93E534EBAD4039F0FBB3A43A17A1
+C9898A1C75CC569784074F20ABE85231DFD859D712C181A106C86AF21ACDBB25
+D4DE1A3982C7AEC8B93B596C49797D30FEE9A3A6195BCCEDB952DE695675FC30
+639FC6027BCA9A6A0EC6D01B0150BD0B57988DA1DE10AC902B1F29E7E29A6BBA
+7B18C607819DDC53646FDCFDDE54A496775CC46DB45BED9FA297FF79B870F99E
+0266FE50ADB32CC6D7E590D99C0DDFF0F1CC104A8BF44C47B31A56441C83F443
+9BC6200E5F0FBADD5846EC7C8F1DF1DEAFD7F4AADAC9C2540B4EEB98AAED1180
+0E632A23D9B53A6EAE41D5EA9C51EA04EE49458CBB0F496F84EB4CEBE0349FE0
+9CF81EF8CD856E92EAC893FEC03985B1082176581791FD5E89EFD6400729F36F
+8A7D873C658FAAF4EEF2865133020E49244CF4FD8CAFBEC08794C0027DFCE196
+E51C62BF45A599545814BC448A01C475A663A4497FC420232FEAFC83CA9A273B
+99BD564032CFE2E4CDE6E5170D30D8CCC00EB65AAF766896E3C81157EA379722
+8953EE3B001DA3929AB84466079BD1647FF2C1FA077AB9EF5F50AC908CF56F1D
+EB6578F87451C63AF8FCFBABC67537ED44F2E84FF1C26B376441EB0330DD16DE
+A7B23A4BF434754044B8C067FA64274732235F6AE9D36019D21C3AE156026AB2
+34FCF01844E0125CE72F305ADACFFB9DAB8DB3EA160925A7883CFD31957ACB1F
+D9E925B6FE72AFEB962E671622195A84BAF7008884DC6D2F76726DDEE0A926A1
+E03839C8FD709CD67EDE6D958A2625B53F1281D3246989BE1E91A63E481CE8B0
+D4E017B8572DC6F4DEDB07AA1308CD43B21805B776274C1CDE2283704C999AE0
+E992801118AE7FF2A9B38A0A56668651A008194011A06E83B215AEDFA044ECA8
+6E090F90FD605AA6FE7DA41B5A8F77EC688D3F427558ACDEF2775317C617DCBD
+A0382C9F8DE1D76A9E97273014FA37F4FBDB658528358C95E67245670B399EBD
+14ED9348BBFE10232236D0DE2FFC241A0D5DD47E189586117A4931235EDE89F0
+CE39F4311120E517EAC1791D19B53C60FAB31AE7DF52324E867EEA2FF7F57EA9
+52B9B3A92273B6C430DAF4EC4E66FDCA57AE283EE146CD7584EC6E3E15DBDC67
+3DF6FD613AFD83223B2C82B9550662C2717338DF7419C626532C2C727C7EC9C4
+67AC4899CD0B34869C951468CC73053EC8EAAEBC043D7344F7E1151FDA9CDB78
+26962B6F8EC149A06F4514233FCC29F59AE870CABE8EEC89BFB8A4FC4C048A15
+10E85357D4D77464BF998A5548D594DC1C0E170736E3FDB4837CAC26D3F57534
+D7C7176BDF7DD76AC35CA91FE0B8C0FBA17C3FB4DFB9A0BC6BFAF0B6D2A9803C
+43024BC30BE59525EFEE1D61FEE9F4939025FF68A6F213A7468503D91CA29DA1
+DA7F23C07212E6C7E47AFF9003392054EF6ADFBD4D4B5230BAB2F8E365A13A8F
+2812EEB21E62D7784338BB44CDF1160EA74CF9F226ED1837719F4669632BE163
+36365F8D5725D144CE335003A7E91F625FAAFC40C6191F683F33525F007CE77A
+9ED0F975C38F42A59D53290BB8A9D065FF4FE8A37E87AE2F1A1C05CDD99378FD
+C3A3323AE26EC31EDF8F66DF7C3E22659437CBAC1BDC32363D9B0CF97C9856D2
+C02A27518CD2156A5A86429BB103FFFA444BCB9F3D6AD1A67AD15CDD2653E787
+ED1FDF94B3AA7B3B2C8E42E1D2F2D5DD5D5B8AA2B05407FF0462781DDB6C8B7D
+C29E8C07CAC763DA2681F19110166FC4A3F0F48F83FA1D8F903A7CD9E8942AE7
+44F608002B75C61C04D01897382C8C61985614170F4603F456FF710E81AB606D
+E1445B1F229788CDEC02FBA2ED5ED63EA09CA3CACD348123264D2E42570406CF
+01B0D26B6C8E1F61E13D7AB33DACCD73243A64361ABD00EC00939D3E2024E524
+ADC20AF175E99971601F65F0069E2F93EDE2A4B0FCA92FF2DDF5F62D8A366CAE
+988421FD7C8CF5CDE44A8A64872B547ED08A5DC14B64612E2B531C5DC438AD42
+B01DAAA15DD042A061BA0E0C2A15AF7B4F675C614BECA18A9DB7AF3885A2ECEE
+E73590646DCF1C0E637B8D41C677C0416C08837C256263D1E59D7F77959E8C4C
+5E35D6825C95DCC0BC3873B62C2DB0C1132A2DA3BBFD0B79CA3F2165EC0753C5
+5C5D8B6F9E5D0D09EB8633CA00FCAFE780FE9FE75A3D43EB9346976473E884CD
+6906C68AF30D9F7D3CFA4D02083B582460AC0D6065202ED76B2985CA2B3BE3F4
+7122B5E5964AA5203919E209644630FD4D0CEB6E609375D50D05C9233AB1A0D5
+7807B462671DFF0BB1087126F1964A519AB79C62AB8FB64A98688EC2B2202AB0
+448E7BCC1B797F431B49456B62D6DD7E013DB720DE07CAD495B7B5B4F97CB0CD
+CEDBBF1152A9DC207B25E5A3AFCC4C586CAB571F9B73A0E6A4D81EBEBC93CED5
+95EE5DD0F42EB0B536CEFFCA70C4A44BD512DAC07B37A88A54519884A3E0BC69
+0B460002AF91FE2F0D5272129E033824C228701F587B2AA2022F4F011D5F45F5
+75EFF578F1CC9EA572A5C894D4FDB7214D48DBF2FAEF95BD3B098CEE59F264ED
+AE5E3AF48E4E389F15E73614E959EE0E266A5C92C75011544F16A83A071FDE77
+153933C67D83A7EDE8AFC050FBA5D8FFDF7335EB3DA6DD40AFC6D8314EC3E8DD
+5B2328E75DE1DB002FAD6AD832ADE67A95EFC21A9D191C8A3AE874E2741E6737
+B1EA832C2DC88FEBF689B579DF104892907017C54BC7FF5133A101868D714DD0
+B47FEA6399C608D6CFF631FBCCDC41840339B2E1248AA8A5C06A2068CDFFF253
+3014629558FF935F5409DFDA332004A9AE93E06F840C452DBA0CECD628E58267
+F9167CE246A64FC554425FC08472D349CD92310CF2221162488712A1EC75EE3C
+BD19666DFC3BF19054D8EE6B81C994FA38DF0F13867D5CFD1819908B16F43738
+7293F7E6454499B0098DE9E3D6990F95537861C3765B36B570BBDC7F5E7D3C66
+7DC5D30748BBD089B1A9B234D62263F6C2C5B643A494B2274C95062F9505A680
+64E1FF9189F382EBFFCA2A29F746808CB1513A08B9EC1BBA3E895F569723BEEC
+3AA02ED3EB290C185297507BC8A57B8FF2418532B23762C95B8A56373B1DF89B
+590890ECEBF1B6FD24F037A80776835A576A0C9A90F1EFAD1350CF92C7DA91C3
+FAA0077788E53FD9AE446BCC656F15BCBC0D956DA5F45BE7FD76CFE6FC542378
+B4A439B042E74C8E15B051D4DDF09BD1E967AC20D855A3DCDFBE74D720573BF7
+F9A9A98681B3AA5B0D9D17B2B9E43D6F09CA1B8510A3AAD2D66483FF0E863C2A
+ECA9EB7010CEA7A431CEBCA82A0FA12655A189D4CE5148D6D6E7102361365675
+5D24DA00F593DFD8F6C1CA0F19E675D71C75D3B48697DBE695EB99DCEA180530
+92C7ABF8BD4BA4E0A961C6C439F3FA2F7E722090F98CDBD45E61199A25A4778E
+C22B843A04CA84580DBDC711E334A00780F63549B32A467ECF4E23E87819F25E
+8F5781DF6B383F5FBB93FCC882DA7AE7201811A40D958A405812274759EB579F
+E93A5D56AEE7E3D3361D3C95D3E8DEEEFC89FF0AF06BB2908E7B7E0085DD42FE
+7581A65CB53A4F5AE7DFF2EBEC1F856963B4A4680D9E44270B6F65FC1D68349B
+2514E355815C5E1AE4DB25C85949D14428F74D79C097BA31E65BB3EAD1C9C08A
+0871B8B28DE6D7FCE097610C592952F2E80AA6B52811198E98EDFE8E044CD284
+1BEBF2F8C2C458D7F1B38BE0C884DECFCD8B02EFD7C83372BDDC3456F54379FE
+73937349562D8778A291F8BFB45EB38F3E2A5595F7CAD8307B1200EEFD876DBD
+BCB48863ED0DCC32B0D84DF794810AE682FE485B9B9E51151DD2BD4458E5C16D
+C4ECD52B954F50B327611FB86F226B5C53C141108758B924BED4BA1934020BB6
+FF33F71AB77797C7A7699A5B08BE46CE3EE3389E8EF235100F2135855A70D28B
+0BA408A2C28C9D8ECED4548D9E43923E45C489A001BF71030D5F9BA0BDCD4D9D
+A090C8706CE43BCE05DF4CCD2B726042B65B52D0CB1A5FE71CDD8212FA710E59
+A3E47FDF4B9CA1AD7302922F76C19C5AF4EFF3A6E4BD5E870FEDACE6B62FB2D5
+2EE76DF4F06A3120FE7023187A7B169F0A67E461917B69E2E13E8B76802A0E2A
+DD5FA5721A51720422D549F8F1ED065A412AF7333DBE243FED9EE7F028280DF0
+942C261D1DCE952000DA6F45A7DC9B28B357A06558D9F13848184E1C1C9D70B3
+EA7C4929AEFA327ABEAA649176BB634F462D71A141AC05211F20D12A288CCA82
+BBB8D3670FA38EBC170EE5BBE15C0EDA733B0741A590C7827A9E95EA725F3A18
+667CF5DDD40377D47CEEBF414DD01C84FB3D6218B7F09F63222EBB689CB16BEF
+23691A379CC3DC5F25EBCAD812A784ADAE27C1B0996A921BBC35A267887AB668
+271C76B134225D66352754E6D1108A67DEF1F6E91C1C18A231EB2C571D091AC6
+7256FF70AFFEBB18F35C10ED7198E4E9FFE19669742BD040C85F5CF6A5A1792F
+E910B07549D60BF4C6BAFE994FEF823424B4D6A435230CFE62473AC4363D5135
+210232C0F65669CF3E175A3C15EC9C8B8D4CB096C7DB979ADC7B111CF9DC995D
+D7629CD94609CE60ACA31E679DA1CBE7F794FC8FB5BD1C0418717356080E3833
+FD627F7F7BF89C64DCFD462E2B7ACB9A724F9D2AA2528B9F207A4CF74A05EEAE
+595ECEE7965D42ABD654F115F78EF26F9ED9A94BB4B506B20A3435D20BB02B38
+E4ABA7D9AADAB6C5519CA42483378FDEB0F7DC375D8CCB308AD7990C1A3A3AAB
+6E6941516FCEA0F1350EB11E1DB0B51BB8F00B571FFADB726F21B67E7B29A7CB
+E6D38CB4C1CCFE95A06310405FAF798F92C82DEB739394731FAC8481D63EBBE3
+633CB294F60FA468A31D5BA0B9A8D0DC085DCB39E8CD72A9CA6161985CB4A019
+D9A9E7A10328B028D852DBAE7F9B82EA7E5C98CD16E7C46C5F94959BCC80F8D6
+9889F36B502FEC34D118FD9AEA1B0BAAE0CA2F78F65C87B4776AA32D4294DFB0
+CF82A8C6B55A74C53C6D34C37E64C10CB3222F6CD7C6A5C8FE5F30BCDAA0F9E6
+6FC2DDB07A63AE6F2CA4882D0D586FBA00CFA94696EE03DDAF6E77AEBB2025E0
+1914DDE86AE19E4519363397C67558C126AD2DFFD73DE2EC90AA37205DCE393B
+78E59B2A027667EBCC3881716A3479F65AC9E989AF7142C8F1984C423A52BC7E
+BE657159C073A443F7BEEE4824DD61755FF91498B49F965021367A7D40D0B2CC
+D65A3274C0B27F507480A8FF3E2688F9265400F03314E85B12DF47C8D74EDB85
+AA0EEAB58BCB40BC724630FD23F51FA37E74502E75D125C5E0CA1DC96A1C0ACA
+CB2BB037A59815B4F44DB0C11DE01C23A2670C4E2A3F7D485C407E4F3829C35F
+14CDC22715001C4AC06F50B73AC5B1836B6D5C0BDE46E327A65D8F0F761F3771
+F77096751B5F016AA26F866DE68A227E946E032AAE0EFB3DCF856D69ECD2DB30
+396110DD83C76821E2F0B824B3C9486373DAB394DC3E7030EA151CF3A3943DD4
+0C46FADDAC2B500B5E8305056FD9D21B65D0C550C21282B01E891CB9C2060EA8
+6A8C42DEC32AE007F9C1C4AF702BA660C3D4A4DC8471B981B262C4DAB4EFC2A8
+0B7BCD86B92C9EF56B4012DE355A67BF347DBBF5381D6D1921EE083A24FBFA58
+EB1380FB34D6AB0B05F6607CF92F4517459F733A7AA088FD65F1DD661D779CB8
+F7A2C8B58C8569330296D9F3A987CD2C383F261DAD558800AA0739AA0419BB0C
+7CF3140D6EF1FE7F677E1FF938F82602C05197198DE46A9CE5B5F9817CB0010F
+39ED8566A168265C15E9363E66DA34C803BC59107C7DDE6F8C8E8A1B39743B29
+1723A9A9F56C2346E856EE7E5605008975039A6111C1B4AF433413F8EED29C25
+C17A951DA57772EDB0801D9C4123731C1E017D3F114EDBADB27E5FC82EA0982F
+306FD46BC335CA016F5C5DF63C29DE01FD00089963F95864FEFA0713F86C1AD0
+F3AF11ECF5D752D19877AF0A20BC3E58A0EF55EF881F1845237820716AADE38D
+BF358B31F2FBC6BFD60850913B650E8BC35174C7B5C68A205025C7DB1717AF82
+982D9DD01D396F2876C0B780FC7975589799AEF5D946F5002FE57DF9ED7D6EFC
+368274302EE209EFBCDB1FD3DD46C47860B8F1A228C7BB90772D66135420E4E6
+F9414E524B0DC392CE36413C3339C623C1692D7C0841F2492D9ADEB8AF6859D0
+D8C72B7BDEDD007864B0718B187AA40643F53F054EAE49C577D0B2B644F78F65
+088D3CC6565A1C067E63609731364FA9067FFA01BA1F8B8D82A331D4087A93C5
+B4CBBF75D523BB9D77655880F0ED09CBE20053DE63964E77A48F2C2535F63337
+16148FC945DD798FCC147F564364F3A4DF09E7EE7E0B0253286CA3C573FB9925
+1AA2EA9A8FCBA9E6587B160DC1CF7D7E67F47E15C0014A7AA30EA372D893AF2D
+BE297C9D2BEB977069E33DD533EBE99BCB520C748CE9C4A51D462AD740D1BE85
+6A2085D0DD1097F1ED235F00C1C7906587E9253D7AF66CA4CC22C0981720CBC8
+770E0BBAE73B7636A2DF642DFDA0DE233647B185A5BC4822582BCC8F2083ACC1
+E9391646EE586C53DE007ACAEA74ECBE74CF7F062C73BB60F1B2651DC7B5B1B6
+D53C4DEB4E78760FC7159C4DC73B0C1F6D0DB4D70F75D36763D4A49F5E42746A
+794CC2C57E532336A6EBA76DC86618193088B93F7D6C40CD56FDFB2B5E0AD779
+BC3867735CF71EAA51578956E1760F49C3F9DB1A58D3C811C74DB82848065DA5
+0FCA863047972AC37B148FB1F5BDC1CF3130E6FCB64AEB6D2923921D9DE69931
+DADC9C1F8A9F974CA3A324AB4FED93D0695259A61375180378639E42DAA0D9E8
+2107B6D9328DDC89C4697F0C0FE07CA21970A53AF3D9BB8AC32902E51098B060
+67D5665C4A428EFA08C4F9A987A0BAA79175A1023D0F1EECDBD77EEE55CE1C84
+7435145DC7E81D8C0017C2839752F39C6DB97DB1AF28384DBE929A209F016F6C
+197EE95E0F7440760E4CAF2C5BB40E7B26A7414158B385DB84ABD02FC7054B6C
+E5C9D9968E727688AC802B5750F7BE27D92D26C92421B058FA0EDA43CDD02F38
+78868B6A58E698CF14D982E3F134ACB20B824E1058593074CC3E49FB12D5CE9B
+9D4BF81CD1CBDB8CDCBB1A6E2A8EB38CD5CE9A3332D4A399B0D58FC4709CFF46
+EC32649DBE6F511B864890F00C1673A8F1B82AEE2ADF6125D87502DA2330B718
+09148FA7785A6BDE2E6690AD6A28CB389FAB8249C6E243569243829C8F9879BE
+FC29EE3808073C21923BE59BE768D15FE1F9D2CADA8EDAD89EEED23E9B2AC20A
+4A0E044754A62EE21656219EA54E66D31BF4B9ACCCB9206CBB9BFC94B20D90F6
+F7087788401D658BEF854D6E6CD3FADA78E7CF507413ADDEC56D00AE40518C39
+5036AEDC5A0098AE6667E82290B5E728565330ACCEC7F55630667335E9BA945B
+E961F4F3C7850DD2DEB8F5D7A080DD36838D3E4F1D5A0DB88CDB1819988DC67A
+9C4943C34AD435B74BF783386EF2DFECED904B778CFBB4D98FAD7A91679EB575
+6E48B3F3BCE81F3CDD24CEFD1C76B109726809679D69220A426A87E49884950D
+342CCCED279B166E41A709D243A42D2621529C6C33CC21333D376387585CA01F
+2B36C4D2BF3AF077B5EDBD55BC06D6F973EF4FB8454F518C4F49DC36677990C3
+F47F0C5CB73BDA7CC91A2086A3FC99C0C75554DA532148134028D7E47B59DFEF
+69D31F6F67218E51CE01B6046D0B7128981E5D6F4FD5EA423D8F20C3859902AE
+C6CE0279870B7B9BBCAB0898528A0350FB728F082B941704829E34F6E231ECB0
+A95AF2C4E2E3DE52339902D3CE019FE6CF9F25EF965EC4F6FE37C36089D05CC2
+33730B453D84EC0DFB7827BC643368AE4894A2B2E51BBAE60039B3F1BE1957DD
+A5BF893B29AC0DA7904359C97CBD075A5B510525D6825EAE1B9A4D844E56D3C2
+DD3059CD01D67E69A229CBEC58356A0A83EC25646A23BE669876A7CBDCE9139A
+A4A80FBF1E760B8670BEED45C4F48C9CFE5E95F7CE875590F5F7FF39166BAD9B
+F896B3C99B3FD7F253E783B69169BA7D2A5E4AFF51C56AD761CAB4184B7C34FE
+4C2E90CDE05506844A2E9044868CC8997E8650AFE300F06A09674EBBC1D71A87
+61A0DAF0CF08F431C26BF2CCB53571F8D30E98A7514E96F5AD7844ADCFDDC4CB
+ADD027C199C8AC1819234A8DD4E35E9BAC3C7BEA8A9D1FF485905434474FBDD4
+087560E03A3EF69ABE946842135C344DDCE0023E3B5CC5DE6C0939899DD6DFD4
+FBD3BA17CCAE5D8EB42C25
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTI9
+%!PS-AdobeFont-1.1: CMTI9 1.0
+%%CreationDate: 1991 Aug 18 21:08:07
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTI9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMTI9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-35 -250 1148 750}readonly def
+/UniqueID 5000827 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
+4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
+DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
+F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
+8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
+03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
+211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
+E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
+D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
+6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
+0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
+1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
+298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
+C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
+433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
+1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
+1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
+E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
+9404F89293D6ACB433CD0802C43F0E74C6C4766A23A6AE3788FE6CAE82E1A104
+BAEC8BEFDEFE4F292F625E60362F3886F602CE4121BF0AAD93526314BCBB5971
+40091A7BBF7EFB3BA355B88C897D9C70C841DE41309348751EDFFA8675215988
+49CB1599834A01EC6CD4FD813AFF97A614F56975775D5F48E9C1A9CE532FAEB1
+4EBE20C3FA87CFE03664C428BFC5C894668E507950005BD8C2BCA8998C1FB92C
+4E6B791BA05B79F332EB8AF5B0F851B8B7EE372EC0861B09C007CDF43F82D0B7
+35446F682A0DA7F4112CDABE4F922EACFCB7B8C88BF550B60957E7
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSLTT10
+%!PS-AdobeFont-1.1: CMSLTT10 1.0
+%%CreationDate: 1991 Aug 20 16:41:43
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSLTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMSLTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-20 -233 617 696}readonly def
+/UniqueID 5000800 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8
+0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB
+4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840
+8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079
+8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4
+B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F
+ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858
+C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F
+EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F
+2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60
+4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370
+52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D
+38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA
+00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0
+B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D
+CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF
+B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F
+802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE
+32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8
+00DE382ABED85350033EC00053134DBABB69DD3098576DACC5D1E325C4B372B3
+943F8E90BE7B97B996D39337ED6D90F8041298B7A27B223358A5161FE98FA4E0
+6879524934E026863F790FE3B5A8A41AD2E91866F81B195E0A02D9BDF971633F
+0FE9A9BEA04CBEA9E46AA44C31D694A0AF3D7CBC1FC4988F6A81130613047150
+12203A85849EF4D9238604ED8040DC85FB0CDE867F50EE685C8B2BB0574FE22E
+B02F2595A161E810E2C9FB46B3E15BF0B3E7591FE9CCF7689B1988B354D81E42
+145BDD9A5C21B3E52BA1F1CB76BCEAD38C97D40F1FB50C505B0FC423A1F495BF
+62332481948BC331BE6395DB78C35E5DD1B55E92FD14F1943E73B157F5E5C24C
+AB2D70824FC69C818980EF3954F79FAA4E946064F55D8A62723694E4C489A1FB
+6A082DE0BE740A145A71F1F9FD011E558E3F27DFCCDDD49DC348707DAB524EA6
+88370F288567B17F313D9EF6300E8D910F49A4E9E581BC95D89B84E2591EE3FA
+41FFED57028D28600F1AEDFCB752BEE359856AB8F776A166C83929C17BA13600
+0A5D2447AD901988E5F5B6B9D710080392FEA79CD595FCAB7B9B52C94E0733A2
+BC63FBE36CECAE723EBAC3BDF4AAD1494B9F3D146F7E3DE66F77F6C3636C6BF9
+EE6C73AB8F1E98E043710DABDD1E9CE6E3F5FA8F44670AE15BF8FFEF72E849CC
+A9E20CBFB577BB42C9D842A3812FD73D0E26D592ECB2A920986F623184ACDCE0
+90610840699BF7302E534D6F9EC4B007E6CE4D8D07BF9D4F486C503A3EEF3999
+50E3A7402046E7C08AD26751A910154284312117F6C6AD506038B4A5A4E1097F
+26241689BA60A4B2E58103089301AEE41DDEEC60CA3ED74B2E838AC0A86E355E
+EFB46562208EC834133CACC4A6516B4378B8C3F86083B18AD53C3C1E13200B8C
+6F4ED7346CE480809EA316BC70C5AAD4FAFBAF995C7ED82624552BF2F0017E07
+51AEEB8E2529CE5E24087FF3F0921DD9963AF7BCA9582565573CB5A463C4A5DA
+0F1C8A82D76213DF461AD578C25340C4178CA8A7E99D85CEAF6605FB5AC336AC
+22CE77D930F859E0089A09D80C694C573BED5448F793FA7A3A977AC2EED1BD47
+7DDE4D72B9DB3828175AC20BBA66EB0C3D1CE9931AF3B5FDA9D9CF3C67E65CB7
+439F5FA380AFEC7DDB17FF8468D03ED4E99C507C3312E7926A5650346C44560B
+F729A594E0651F7BC3A0EAF5C66BBF27070CB1E691D584D48998189152D78F5A
+E2FFD2C517BA7127DF128CA5DEF2576FE2BF61733D5F3C0972BC423E34C102FC
+F84E33813FFB62ECDBDB494AD6A3AD2C9D1EF30D11031EE57D8F7775A6A0400F
+3EEE57D877FB8E007E4B309412660197770EF9792605C08668F694608E37BD9F
+264A298AB09C2A6E605C6A6BC523197E1F87DCA1150DE1A535C327CF09C86A3E
+2FF9FFA2C5A12E2C4F1DFB00BE313BA13F80379EB70873D89667D0E274EB43EC
+69E1D140DA4D02C8D2F8D088B2BF240EB96641836FA71EB749829ACFBAFB152A
+E67B9428C24006EC9AE92BBD00614E4FEF490944C906EC75508730FBD7F8E439
+1FC995C07CC43B83E2F4063A30BAA9E1E7398C250368C6E13BEDF0F14E6EF31B
+823FAF0EEC9A2F745125AA099110843D606073A374E97AA91139C190B0992CC7
+07926D8F9F04132B6C629B6149B07229E3774AB12FD9CD2917E8162D6F4D26AE
+99AB9F015A6C629B094E6C98767B8903678EFAEE09BF1C7B6F299A0821877171
+FD01FC4AB79872088C954ED616FC17DA91B76F33BC8AF20EB81BDD3CC686C5D1
+E28ADBE191E355419683D64E7A3C9F78C380052F9329EA6E7102ACD7D5588DDA
+B1EFEE6F0E6B4378D5E7DD88163141E47FF011C056319F8F8ACCFDCC2F352696
+3C04052BBEB16682801F73BE5B988BBED6D4C31B5D188E2C1D42C368BCF81B7F
+363189B07A5056FEB84F7DFA5186E9DB319854FCCF6AB41FD87EA5C65C66201E
+00D743116D2F0B799DCD60FF0F534FFA92A4B8073E12245F194D9DA9D76993F6
+A17AEDEF24027EBB10EC75130081B6843C302BB5EB62CA40186F2E9E4ED17296
+632B085C31B432E748433B4FF2F1CD7BDD4E6B1E6C0C369DBCB7D5AB64D2D275
+D93A35F54339DE4EB8DE77418B977E50D459732048AB32EA4CF69DD7DEF04CAA
+C22F16BCB3BE34512364791EE63E29B5733401C8F5A847764525E1B14CD6CCE1
+81A16F9FFC6D5B37B293938F0555AF9592537F4A9B2AEBE9EF766921DB1D2B43
+7AF063B20D66F4079ED13B0FA60EB782DBE17C5539A1A5CCD335F90B489E8C68
+95C28F9EE0E36BF385C0D554C681E5D927017B7DAC58A4C3442BD015892BB7CF
+51CB250208CF5661918B5098017CEA30B5C0402C155D4A8D4935B92670B333E9
+BE3154BAE9CF9BD47D79FA369216E2F3F0AA37DF598036400107B60E25FAA284
+87BDD4BA6459617AC77787137BA30F0CD07576E66527BF4D39E39E4AE54508DF
+351035A3A1BFFDFE5BC76222C8797D78723A2F3A69042BD31ED69F88E8F6C68C
+F0D8EA3F36AFA8ED13EBB95ADD129E21932EFCE965F89A399970F30011AF367B
+3AD8089D6B51E0DDC6B95F56435610DEE2AD9D8A2FCCD9699663523754C23A6F
+774F44816FECAC1EF43BA3F9A1D69CC5457482E07B1976EFE7A7FAA60579B95F
+8DDABBEAEE10353D72759E316932D064EF132FD0517BE7009431A5C185CF7A1B
+13EA10A69449674E950ACFD367713348FDBAEBD12AECBFE70C4B7FEF702BAD2B
+19DB97450F38E73B2784E98FBDAE84D2C3B1167E8B85A1ECAC09E62D187A3043
+ACB93A5701AB9E66F25BC7D103DEB8161FF7DE5CC957218F0D279723DA4377CF
+A08BB2B08218D5F62D4FE80B8EBC3B8B2D0847C561A2A8A1F09EA64AEC9281D0
+7BEA4DF7C7ADA40809268E1DDA46FB41216DEBE3C971CE51C367773F7492208E
+E7EB797235FD349F6BAD6D6E4F99C29F5A6C3C87D6662210AEB92C0FD64B3CF6
+AE2DF93D6A6EFA27B976E3A91BE80CCC2E7A1F2B90E1058F8AB9FAA0CF87C15D
+AF37C5EEF32ADACB6FDE08EB99F62F9194328C09BE10B390C349606AC58C167A
+15728318A475D8F402E294B0E07FBE936574A0FA09EC4F829794285AE3150269
+91D07377024ED8EF474898744B82C693B8D9C91E1A9011D60B34391564A747E8
+57EFD30427B4001470009229591EA924C547FD154E16646DAE7BD115B0C8E3E8
+BA8FDCDADFF9A09639A4B9FEB1B9F5C00CA5C87C7C04AC37BB7692689C832071
+5FC338C4E5B448BEB3B9F60394B6C8362D523E10B2DCDEEB70ECA04CC1C7CCDF
+2827E3A40F34B70247CF6C5D3A638896366D4A28FAA2B1B98F865626C69039FF
+3D54638C23EA32624CF10216A10D83BCB734A09575AF1B41A26B18FE5AC7C89F
+64B70002CBD12AA01EB9BB97EA993BEA9FA225552AD79B23ADE62D47C48BE023
+AB1ECD12E6D825A62962C41BC108E8E7FB37B976A4F826C12A59E7CE61C6CF71
+41F24BEF3E29709C371211809636651F02BC08EACA9B0AB2632DBD5D6E756953
+5C4145A7A3A81133D237335D202DF3673BDD07F679F650C67066ED300205584A
+26E444A3731355C11FE972E181D9C93C6C29CB8CF542CAC213D9040EAA05889C
+8C6EEF27DE0846314699DF54E99FAE310F11E3AB9005C432E5208D8BCE1A37AD
+F2D7F3289C7C564A24B951E0AA63BC60D75AF80428FA27EF965A1600D1A7D357
+935589477B0B5E12EA0512C7D219561F91A9BC95580D4CAEA7218F8B1045D6E3
+FABEA4A25ED4453A7773D2C314B8F156249CA4AA102AD02343E5BFD0396C07B3
+14DF0108D25FFE8ECFA22D7C5DD91D422A399821E7D910FC87B00544E53AF711
+E98F45C4329FBDACD3C332454809DEAB801F6DCB9511E92F235E1A17EF8DC8CA
+1C1B6217082CB95C1A605D7835741D3DECDE9202DE38392B18AC147608CFEE8A
+BF21E6DE2429846EDE6CA2D573C1506039E9AECF0A52318E992EE6A2F23469AE
+C0CA4F3F90A79E610E4928D95D0210A30E9DBE65B841D16CEEDB1D98FC42CD3E
+34426D5FEDC316E922F98EDE044DD192037787704B1206A21F759DE304972B60
+36115A6DA1512B38FECB759432F3A3BCF3DF0376B5F8D478DFF2BCEF69A3BF3C
+7A65C734EB54BA16D2DF4B7D12F646DCE4FDEC0BBBCE02A623EEEEB4C6E81593
+C0A3731B901C2D65F353937FB0CE821490398DD73B24EEF7943CDB0A1FA1EA6E
+6CDB64DDE68377298A655116C02BC58E7A1401024394FCB4A4781BB0ECCA339E
+7E8890D1C5E5B6549B5C7B42E3C1FE35703B21906A0B9AD51EE5117FAE9515E0
+3C1B82C57BDA12592692CB93370742E5AE20601AF5B4EF353CFA3EF5C92FEC69
+49EEBA22B9129068DEB74C4D04756695745C02DF963F12D7A256680DD052B070
+CD7B9EBB05015170EFA40BE9E5C6A3B6CFC2C2F2A2CADA796B837E0E9E308551
+E95A5D6598D332806D7E1423B0D572961949E322CA226726FB20DB1F25DB537D
+3579D615A955EA323132CF0DCA83AEA15A738111BC420C200067379B0E90584B
+7D142B52915DD2507477E6B6026CE3F55B42B6CD45263637D232FF9106934947
+0F31918EB3FE1AA0C56A67102D3341551365F0D02CFD324627C4C1BA77E9302F
+673FE00CAECDD5CDBDC142E7074631C26258B1BC4DC5301FBD06C5CC46ECC9EE
+8A3FC96AF26D9FAD776F4CB4BEA8A76362BA77AA07F4AF80BA17D6AFC668FAFD
+4444E78E82FE7D70226125C15388F46D723804D215BF2A16F7C21AD0A632998D
+E9023CC75FC816112850565757C5E537BE8AF1EE069C3817CC8C4FD85BA8791F
+6CFCD13667DC618DEF2B7F6CB788D8A039BEED888E4D0D8C41E36012774A92C1
+1B9D1A7343CC7513730619F110C055D61A4FEA3666097E27626F7AF00D63C49E
+C7B65540B1315CF48871455762EAA5EEB3714564E27C3C3F06AB0D5F08152B1C
+3FE59C125EC1EC478957F9C41523DB63EA844B6BCC3F37A7AB39780DA0886F21
+F3DF1BA3D37580DCE6D4E9A512669B1864EEAB35DEF3FD4A9279394E1E581020
+6FC27F2DB0AD5BCF04DD864B8070AF99E37440F80A80E13037CA7C146BE7943D
+B9BC86AD2B250657F97C7A96A551326980E14D16B5470CB75801581F8179BD05
+5A87E566BF2E2BD81C3CE1156E54636F0C0AE68AEF10BC74CD0A3B6DFAEC2970
+2C23166B8BC41F06EE48DE5D6B187F25C74A5A8C6A464CB9E3735320114E9A39
+00923504771DACDE90073F2DA7BA91E9D86B0660897BB72BE5D851F5AB62C6D4
+5709A2DBB85801A8D7FF60B14540305280E53C605121A863665E0A2D47D8A31D
+173372FF7C179A1D1A8E4F6F9B34D274A94B25BBE087C657E09EFC6BA43445C1
+70FAB6A3EF0814094FBF5370382DBC64C4F03CD96364E047CFFFFA66C2D4F478
+9280BE9F6538BE45898F52E2F05D58DAD8DE61D096B08D5A80A65FC46F8FEBFF
+C7506D9EE411E3D68BA61C3B768D563FB9942E0DC5DF82A6AD090D514D682ECA
+C1F50E14EBF58D3E1513909F4C7CEBACFD88102670F5EB176D5F53C9C92C6BC4
+B62C55E5555548B1D649D9A23EFAEAEF97EC0C3C627DFE4C8FD0E1065ADE5A74
+856863FEA0A73BBE28B5EC450596006508EF8FD468C1E2700D9B328684ECB780
+3167104317B143F059A53FBF64E4B7F7DC60B7701AA8CE4B5ED2A6AC991A1E99
+BAFA89A16DE0E3A0AA33022B87D694B3CC40A9D0B346B1080C840182A0917431
+CC2250854A407D83239A811130EF7EA6841A215B02248258FF3BA66DAEF6E137
+088980B04FC658DA0DF60DE24077F71318AE06B30627C3A638D6C0B2076D7A04
+5988936B9CC5ADAA2169F739B8F54AA91B85EB119E5E6894BF4A76E74F96F3FB
+CD6A3E96E85567581B91BE4A78FE90CBB1AD177F3A08B96BEABEEA5BA017B545
+69643B523626A76B823F8A010398229379FC051B846597EC174F3BDBE86AED57
+D29BEF440D0A458A51658A8F11A84D553ED15BE9437F4F0C8D3EC3084F0868F1
+C8E36F3E97E657F815560E470E8BAC98AE4E40DF2CEB35A76859083046CE172E
+C2F0DE76BDADE3E6C9FEC16F42605A41DFA748987D9196C3A8895535B756A37E
+D9E8056F6AE08DAB8BC625D127BD2B1633FEDB2DE282A2F22C0CC0CD45D7DF8F
+6735C77DCFC66730A8D0D5C802E3D3E8A2F7C95BDBC769E9C8975116F3B97C59
+4F57E6CB135B014E34E1B2914AD2C4DB41E573730783F6531347F27077A1DBBA
+FE6DC259D3CD70C36CAD4529DFFD07305D786AEACC8BF3C4D3B7A1ECDCD3C4C4
+0607418948E6C8510C9CFD3E2B93675C81C33D1ADEE32892A47D92A29BB8F04C
+278350E660667BE6139C0C8E1794FC9AD2099F3647BE96B1CBC8BA2F77A0AEFE
+97EDE59D9F9550FD3952449BEFEC5CD25632998EA8E32DB16E6C93A83687C853
+FEF32A49FF372CF8E580CFCDA6BD6E3BD60BE8E652FCE38D54FCB4F00055EC0D
+A41C9085CA039DC00843F9EFC88D12AF8C8826822464926023EB66AF8ECF3F86
+2F0488DAEA9F996FA25E8C8258FCE63B3A6C661BE677D165F65EA67B152ECA14
+0D2E61BEE481BEB1F45F2A83A96E95CFA2E2D076706320682B19F1547E68413C
+581183B679DE75B7CFA694BB4E9D032D43AC0F08AE04416A60DD62682D30838C
+DD4E0897E2D8A178F4A829DE0783312970A8431705CD2FC6DBFBF57FEF332AB0
+5473B356B7E2AE91BF8D1CD9D780FAADF246AC930C0347713F96D82F1EE3BC2E
+F84A6CB140CF7AC313F34B3C1E073501607447C8B8324BA5728A28669B5D44B3
+7F9B38562E61D74CACC250BF9EBC2097167A013338D44F51D036257398267560
+5B4BDF8089C59CC50704DB35FB7EFE08E51F6A7CAD8EEA51C4909F8B22313881
+D90C6CA7CFF8A4135330BF780BE40249052A29934D57F83F6667EEC4A7733447
+B84CBB016D021625AB1B40F9AFC0405DBE0D7394D46595613CF234CD7BA6979E
+4AFFE8FFFB005B3D18A93A2DBC465E0ED90B113DE484084914B9DF7EBF44A678
+AD814A4EA2815C3BB1811109F500738F860EF4079AB3E826C2F92980CDC7F942
+0679A6EE279291C5ED84D53EA15B59EE47646DD51155020EA7DA8D4A475F1266
+18A8C879F4CF3D0562E61122B59A087BBE110188E634685D9E87DC0E5A8D06BE
+98AADB84E98A4428B25E66DD2AE23AB185D95D62ECE4085BE1D4967E9CADD5E5
+EC92BB488AAE7814EDBFCE5BB7F866668CBD8AF904FE4C7699DE9764C96CE74C
+17AA20AC60CD480F562778A95E025A3B98233F6F7EBF2F0359498A389D0F5B55
+8CF1686AB3F1752B18B4A4B1D873DD8A35E73B3A7F08BD152DB528C52ABD9D29
+9BD2DB7F07658D1F7E51D9038CFE60DC9D03FB2B6634074B6DEA51B63A358B58
+1F7096676997D5B9DC7F1C68008B0BBBE13D2FE4CF2BEC425CFC8230D895E97A
+C2C664A99AAAF37B627B33A57B4131959FF07E80E7D35DC9F6C0C216781F0F63
+AD3396D9D197EB54E70288A6EB1C63DC0CB185F08C1262EE0E63ECE4DDE17EFF
+4C074B28BE3419A6A6FB04E0ADE4E61F54FDDD69AC02DE30B9B419975870BA13
+0ADF9F2658D799E9DA2E4AE93C75E0EEDBAC66D77F14097370BD22D009BCF6D0
+838A4434CE9E65A045538BE825C804732D0C98615B724F8B1B6F052AA52851CF
+7ABC84AD999A9EA32304582C04B91B501B9B3CD2A685B9361F21BB52AFBE0496
+2C9DD63C1664BF0693DFDFC3724DEAF49F6B9025672BFC12BA194CC5DF0EF962
+18AC0130436D9D27F66B1089C0B59264FD1A388B545A469D57D20BC3864534AD
+73C748659935976CB0BA8AF81A159B4BF95EDA9C8130984631F1F4912412F02F
+BABFE838EE13FE744CED03E6914BF43FA6DFF3F9314F42BEE02C6663037A3DDC
+6BBE88130E6525D2191EEB828FF6D7208FFECB77554DC41596FC1EE24FAA32A6
+01D701BBC23147AC135A7AF22F8E82C5FFC20478C097EF9DAD8D0465D271DE62
+012B1026F6970C05071ACC483D1B8A0E759152D94E9470EC560315AAD8666A16
+7E422D75CA857276B0679AEC89E78EB6E5603B2C6588A27EC513F6BD48F839C1
+3BD38C5B094110AE4DBFBE728CA8DD44249512B9AC86254D618F9CEBA7C6C544
+967DA6AA44DC0654E581B4CB0F8F739AF8EF2A92B2A359FA4B3A0EA3FF4A8736
+853D6CDA7034C13AD2DB0ED59AA9E6515227ED65E82B0A149F68AE248FE21B0D
+50CADB74A015BA18F6C1E534A626C4F50A379E53B18CB8BEC38298B6FCD95A69
+601D2508FE90F45AF92D2AEFABBB0D0AE51BCBE5AAA96393328FEC03597B4415
+941F0F2DAC79DAB1BBD04F1B9B8CA189F72D15D29C3F7C491FFBE9C991CAFB48
+55E2F73EFB9C3CCFB791863AEC846799202754ABF7E01158F6DB791B8338264F
+0853D06D1230D8B025DAA6095C9DFFF2E08829C7BCA90F6D986ECFDDF424F532
+29033647C954BA1F9C77E9955905867B31E45751F240261A3DF10F3F175DE485
+D08E903475856918194BD011FA5BCAB3C9923CC8D8F78B688E7892107A3A27AF
+BDE5CBFDBB4E29B28208F66AB1456452EA0E36F75D6938312C7D160957E3D555
+E2DEC5B209D8FF62449CBF1DD1B5D7A799167AEE4DECD8E4FF761766AA094FB3
+7FB7E86CFD76979667AE69886C797BFBC2E5AB647EFDE080AAB5B1AF6A20C0A9
+BD705D2B6AE86218C50829CA99D4EB234CBB0476F32A186B45EE45D41785AB77
+434538B55F485CA58FFC35EF51C7C830EAC2EC176F816A2B3F271FCB610BBB24
+76C36D8EA7D5F12845DCC200227D86A640CC0D70F59791F6408702AC7D1DF14B
+F4CAAAB32F181BAC49255BB853F6B082EBFD1CA577F6B6253616DF067F003C65
+88AF610C5F58E8D91660F51E586229ED325C5AE4C82E3187B70E0E59AD7B20E7
+375327EACC433FE34B699AFC471832AECBF19488FE673BAFF48409D24B4AB58B
+1C8E8A561E3C8B28A078FC161655D90609B014012CFAB0F5EB875E9A83D2B88A
+87E11FB574749EC6763D722D8CBEB5F98143DF01AC4FAA1A3B70844E24C92A82
+C864731DDBB846D8BF01C0805A24EA471C6E18C34C756C0EAE281A9F00AC4948
+3D2CC2F22C0637FC8DA5F4A9BBE085757EFB9CBD9E54F895D433E69E579D8ED5
+D8BA8C864142129E0AD170A7D4544ABD8A802191EAF6CF6F5E285404B7D19B38
+093B52AB8112001A8546DE62C64F2605011DF6E02C967E02E340F1E9383043F5
+4EF3E7E6DBAEE40AD431464011B25C8078DE28346216FFD394087F322007F911
+1EE21C688102610F6394E3BEB9BDDBF8A36A1273D6316A53B9EBFA037D6AC637
+BA0B36AAD961061CBD3C31463380D6D13003C5FA5F68F276468AF2CED48A6CB9
+387AE5741C7C79252928D88B51A853B00BE8C029E8B8C58F8C92ED4C74CC8943
+B4D89282E7160D532F9F22007312EA18C33A848E4248204F776F00D46D483259
+CA0104174D2F5DCDB64CCBFF60977D35A6CFC2CB3441EF966D15C7AA462B1737
+0079B920361AE754EFF71DBEC68B21A885AB9A61C653841B9A9DAED199F33089
+C560C28FA29073899466B9BA55EA63439B4D675811D5CED006FB6FEA2674CBB8
+ED75493173B82B70ACA4C66AF3BABDEB0B43F1E43583D64EEB11CC16B1F481A5
+68B11795DDB67CB33A03025AC2B215D5379835A32CE1D4E327EDE5B53FA360C0
+399A30E2DE611B64862138476D68C9CCF899FD89B5EB8E155733364FCF981F0A
+4E14E79325210F6C3B9C594C1B8DD2725DD694F7AA30A48735D69434C650AA7F
+563DAB6D793E70767DDF0EB615F44E56002946E3506686BB09A365C31A2C38C1
+E95E601A0987902A54BB1743D9EC5A5C496FBC987D796B9C75DAF3513D0C2685
+F315A7E3C61D75C661CD4A5B49297B16C1FB62104F0AB175DA178EAF5B63C026
+E99E23AEFDC25D1C93BFB7C9182B58D4A599B484616286CFC0C93425DE11417F
+7F7BC7B05E6F8B2E3E37383BE6DEC107EB08971A6ACCC66AE172EFC6F529DCB2
+4D478FA20742410A8804624DB03A90C6BDE00B38F92100E065BBB2755618A570
+BC84C28EB5DFEC2A4BA7EF6F4A6B6DBE18069229D912A310DF592878ADE6D3B8
+4684C42D5DB517E86265F689D54E870E0EF9D64EEDD723BB9F99B820EC790FEA
+7BFD5EAA848D6EE17519EC82A9070B500BB5DB318509F72B316ACF162A1FAF75
+E5C7AD5A8F7A2CA610C1A78DAC995C378C38D73CADB167EFD61F1410BC166FAB
+BFBF9C311FBA0040D77848DCB1B093D7AFA67C9CC400B1CC2790682D6077A400
+091915F6F609C581705F095BA8CD132E31341168597CBFB9CEB29287176EB484
+689573754C275F67B2802E9614B665C945B8A18B7E3355A922BB45011DA7251B
+90812D8C817AB81D65E3D69B00F9236D5CF95CEB734ABF83478BFEEDDA250CE5
+859AFE01BD9375719F1DE48B9700AF63892C3D5CC9ACB84F07D77B68025D44EC
+F6E08A113DFE85D935832BFF21A193F96A57594B79A69C3278794F3B96943F07
+9A6C629AC9BD16924E2C18268F6482A73AA98B0FF28E9B8E1E2932683C155B14
+491257A7FB094FEDD7501AB7C24CD11F3B45593702E4D462BB73AAC8C6D85A17
+94AC384C6B1AED89EA4DA938A789C3E19C19447DB3219EDA58ECDC1602A8CD86
+7416B777C32251EBC0B1135AF96111918ABDCDECADD7BA4FCFC07EBEC5F29863
+458D30E5707343040174C85044FDE203878346FB14007EBFA2D7548E7ED1790F
+E5CAB33BE24FEA0DC7B8091FA1DD58B303A449015E089FD7D0C3A102114FA2BB
+72213BA3EF3D1981F4DFCF0B7C3EAAB740AB77FC4401899DB5CF7D4AB0D50B3E
+D1D050B48D4DD999594B576A72C6FADBBE7B08AEE834858101054CF8EF86ABA2
+F82F97CD18CA9E5D5BDD5C9FE6079531EA709F6E12E8633C8335E1A68C1E639A
+7D8F2916118506FB51D79B02614CFBA56C44F6CE83FDCE29A606FAB6E06D4AF3
+D9819629213892707B1B48CC0FBE495FE8AEE915CD7E4F3E107D8427C710E6EB
+5FD126FA9ED1C43F6EBEB2771D9179CFDAF9532176AD8BF820351A6B614D2B9B
+DC0391C729A2F535326FFBBD9C5859B3D29F494FCE6D6C49E9D1AA97FAA8FC4A
+618E25F00BCBC742F3C9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTT9
+%!PS-AdobeFont-1.1: CMTT9 1.0
+%%CreationDate: 1991 Aug 20 16:46:24
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-6 -233 542 698}readonly def
+/UniqueID 5000831 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
+2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
+650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
+F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
+D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
+F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
+4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
+438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
+BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
+A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
+AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
+D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
+CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
+082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
+9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
+4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A
+9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F
+B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D
+42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED
+F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328
+A2C69F817061D6C60B121EEE844CA5008F23DF072D4D1C9EE000CBF2FC3FF4E2
+119740FB306D340D92D733000471A990E5227B06C53B3DA72141948D2FC17A77
+0AD21196F678B0A93DC026C410A781255D359F043B777B70E1331E88E68032E1
+AFD0CB35E99550E1C0FD2852A7D190E079C1B8EA1F8B005D66F8406E14DCCD92
+9B1F39E6A9CF2E33CBEEEAA09AE1930C846ACADD3B0F0F102B43AE6EEB3D9A24
+50C521F1B4D0541CF7B325D14EF0575ED2A7A659C828570DE5A4A773DC6493AC
+C95FDEE00FC1E9E332B536AE670CB145808E654923F757EDA89FF2BCA9E89FF1
+6D0D03C51443C52FD718CAE35DCE7CB7BC738614074131479E3B05F534F67874
+E2118A332C880EA45B91253E8101C38FDF36BC7766CB320D14F34722E2F40F8E
+A469DE22A904697BF8487AF1F26166730DEF2B9502847EA432FD862BA777B6E0
+C62A9622491A23CEF57E9713CD3D61A36E00C865E445BACF3536E9E33DF6DA81
+995CDC130C5AF0CDB265692F769BC0200B42BC73A117C0617C412ACA508F970C
+B20652DC14D4031E531BF59295938866FD3EC6F19B4DDA468C69B78E117DA535
+438B129CE6DEC5FC2EA667058B36799189DD9CCFC0D60F96A055280C298663DF
+B58FDA736DC747662D83914A9845669E87F78AD78F2E93466B14DE865CDABA3C
+444C8C17CF2C964CB42EEF8D7D72AA73B6E5A7DC48FDC0849A92A97253B05C76
+5E4D2A947538E7DD046A0107C5B473C460F9C0367646875035C53D4435A5DF36
+0D4C415B18D38411CCD3E29F3D63A14C9DE5B44CFA9DB7E3EDE6B5D881903618
+CFA9FC3BACEFE774B0052896286D9C8A5F302F1BAD47BC71064039020B164409
+7261EBC080F141CAD093315E0687776D604C8D74C77CCCAD5FA2A808BF9ED3FF
+FAADF730A8113AC0EEA8ECC761060D6A6D35DB4F902B6F63350EB5A819092DFD
+06559E737140E60F72543E3151039715DDE716517DA0A15BA43A7C0825997371
+B9B6CF9E3D3ACD82B053682EFA03ACC9055BB1C644F1BFEB1A543768237ADFF4
+91123E508671FAAE22B1118471A081520C6E138CCC5543F163BB6D28D09F6371
+78737184F1D3692BE655E3EEA04BB9B159B07EB70D22B4F27D218E8535282047
+8AED37D8470659F013D648B1FD43CAA99437827E88BEFD7B7B51D38B68FD18E5
+60B7C3BB9A1981D3CD0208FB94D29DC1BFD86AF42099D5AD7F0C49B05CB27291
+7DC54D7CB4465E78864D78236419EDD8C52CC26D7041C16EBD06FA6F6FCE91E7
+A86B11C0D436E13958C81814F59007DD17FC68AC26029BCB74C4C01B7BEF049A
+81F2D35F0AD2313B95A09A65D8A915185EC6BB038F15B29ECD29E6110DD53E0C
+B09883576A64A272D02A84AF63800E505D8B6B95CAC9E510EAED3888E193CD5E
+2348079F78FA6AEF1DB0A8A020A89315F26A4D3923DE9A6B6349AD75F1E08250
+95996A8C71DC6901E90845D6ED174CCE6A2F2D7E1864469CA04567BB3A0B749D
+D09F26846E95CD9B707331381AA1962CBE6092808DE03FD97022732E229F6107
+6933E9BF8F63A0C0F73AA73EE8F64BD049F12FEF37957FFCF9EE4DCD373E6991
+BAF5FE4415CB2784AE7EEA194BCA730D552E6B23DCAD2ACE75C9239EFDEDD3A1
+1A7E33C5D64F9664D26ED72EE280BB33C4DD08B76F787B2A8F5E484B6679B4C9
+70A123B9DCAC536130E9095BA6688551392AFEADC8169F67ECF580B9A0F10BD7
+4760E803C4B4624EF892A07F4A879436493D782F2BF34A0B560EEB21880246E9
+4C2126D731636A317090E91CC4CA05D99E18764DCE7B1ED9A78ADC5C3F51EBC0
+887F0E6409424D067AD199F238C059D05BEFA084ABD4A2CA7F5C16DBE97AE843
+B51BCB3B5CF71C9168040203083A3EE50E4D492BC21B7CA1648FB31645C74F32
+801B3743CE95D230920B59DCE8D587EC6917D31CE10D60AB047040A4194E3DC5
+347105F38770D26B9CFC472B3B88459DA521985B1F6005980A4D7C6A3B90901C
+0B79D23FD1BA58F75E0F9AAE0389FCA0D10C061A4469B4EF66523A2DA39B617D
+8E21BC50F7DE585F9DA3AF48A5E88237544D230562BC6E7B6B26CE43176EA3F9
+A8F1F13971F7C65C4C8FB391CFBE58CA3BAD327DAB59E6496869715FF5E8872A
+68409C73D11951511F5A8826BB47C051762D2E9E8495AFE328CCF14B4192724F
+4697500FA7007C9F662CCEE6EF492EC198515B9901E12D27991A029141D1826B
+D722D41DC8FC2F7E197DE911445AF33E4F58E7E1A2067AAF19B5D46173039D43
+4AAC3991E07AE3262F2AA3195F6F3B022FB40436111CC7BA6ECA51BE2C3867DE
+20D8AF638B6136320F9F214BE615954F01AE717CBBA102DC69B961ADCF6085D1
+EB59F2228F373E184EA3808359E2979DAD578C643F496645D97F41F46357FFC0
+1219A3CE14E1BAB3D0CA3F79BC299CC0A810B44872C3BD0D12D06BA4945A9E71
+E792DCE14E8DF47DDB17D01DDFDF110D7F4D928E187E25DABC3F34F5428147B9
+0F2F756B07763AD25685F99CAEAB3138A0809B272154A17EFE2E371CD9FBAA79
+B34F34A8466CA9B637C5FDE77A65A67FA68E4F1B6D1A2286A2F6F024A8ACD7A5
+9F187818C7666E5BFAEACAF13B6489C88731287D58EB413006653574126EAF5F
+6E78B13514FE40761B70ECE6B6C1D2422F9FA86AC4DD12A807445A750E6774CA
+90DA9FC8211134451FFCC547ABCFAA8F63E934DFEC3B4443ACF203EBBFD7AB93
+3EE98240E47B12A7423C2622E4D0DD6F5DF97421C29A644F2F37221C3F311FE1
+418FFF1B36F1057CE5EFCB2801777DB7E746EB933D892FB57E94E8A0C617A6BE
+1711CAF45373D573A7D6018673AD72BBC10A418C756E7FC82F9A2824F3B080AA
+175631DFFD9D2C78A92FCCCE9E864173F774BE42D6A0B4F95DFC23E9FF4FB0DA
+4E69424B496A08308BDD03BA40E1E29004033959ECC88898D0057AA9E62974CA
+4BE6651B893AEEC10F325264D0C14A8142C30A58B87583A5A5938E43A4E39B60
+C47A1A227144050933BBA8095CFB4FF475EE9BD0FF44CE610E1E50390F641D2E
+1B0DD50C2BD7033C286A666C4B07CF27789D68F987AEBA241EF087D9215F89D6
+0A89D4049EEACFF77A183ACFD83B60A492A0E847741E036353D0DEF1DBB01BC1
+3354F15232992FC283EC2D95E93A8537AA790F21F23F9DE5C168C90933C6F9A6
+3A4B773C1C1860A1E3B0C466B709D27C68FAB1B3617A73DF9E018C2E4B595330
+8A0E8D1BDA0967B1DC3A5DA5B96627CA556E23BA89C12A512026CF6D43702E67
+2EBA6786ABFEF3F10E204B9B5B72C738268BAB512ED9B8E1A5DBF95CB75738BE
+ABDE1AD1208DD41BA7B9F7081B01AA22CA257C602E0CB9769973B4FB46C1A4D0
+5EC5B567A9EC991DF2D7EFF791AB4A051220C2E3CB17D3A6FE6CE802A3BBE6E1
+656BA3F612E6479BA94CE2020C55345ACCAA514A55C72C940419CBF128643946
+E0721F8945CFA9A7664D3E274AC498ACEDF9C8A9D09E931533CBFB712057B3AC
+44CA4BC95BB96F9B3FD438AF46D0FD5CB66EF308278ADEB0FE31CEB9E93E2373
+0306CF0EDFAE6C73EFEB1540E342C89FC626966B7D01C2734795D3402A6BE710
+660B2822088D5A9879DE4C6A74CB5719F766866D797FB846F4AE181ECE9E447A
+6FDC5365A937F5D5CDEE1F961210917191CCE511F442B34E2399C42C5CFC8F5A
+7B9EB407F508B1B998B295E39C04DDED5571492932537FF6AF76526E739C99E9
+9B702414478863057F264B11BB195433D247AB684722B9EA66B02EE1BDC57422
+6498382B2AA196C1EE9E8ACEBD946E16E415B148F3BEDB889B95645499E61EC5
+DFC8169ABC03A1AE3E51E85028338FD7FD471CED1708BBE55577560EEF0B4263
+17C87251F434C0C40FDBA5E12F3720459421557A280233DCE87805BED9184318
+9C4A55B99560459F0932A5656389255C259ABC6F115B900B8D6A82853FBCD7AE
+01BDE047AD558106FB9A5310C42E9CF17A1DA691234BF71E47EEAB720FF71B67
+9723E6514600ED5733EC66969B367BD930D98B01F2DDB5B9A5C162EF2ED10E00
+9A58B69492A07ACA258EA7E7BC0E6AA07C4389BF545F3C54FE5AACAAAC1F90A0
+F165EE30AB18495387C1CA716EBCCD08325EB578BC59C991EE784DE7040624A1
+48183FC209D720FFF4CE907A4AE4D5057640F777A34B16B9E3096A83BB50D1F3
+953E82F3F1A4828BC561DE99582E0AA54B2A963BE17EC5023FEEEA505DF9DF15
+BB5C2D3F4B75625C3FF06C0D843C3947D8EA58AB2A6267BE6E2506E0D58A2DD8
+E05B61C4D2F4231A3D4032175BA3C536A0A50DF906B2FA23A8F54848E81A9FF3
+25354A7D5B17E9BC9CC2765865CE9F8BFF07BA9AD27E4ACB531D20A6EFF49B1A
+D479A82CE51E83AC378677E19CB593735EC2E7BB14540B5E120DBCFC4CCD6319
+16E6987A488031144E36DED23AB83ADE5DAD374A35620CE27AD89E54C176C0E5
+B0EE1A88D96A072A8950F425430624CDDB8ABD6F45D79004A72CAD5AA17F0714
+A3238C3E42814D7719A11017A656678DC89CD48D5B92FBDEC2A3506458B5050C
+87CD8B9CD0E7FC0CA26B822265E14E2B4812FF00C96FC342C4CE55B25E628CDE
+49099B12513DC1484CAE9462F09A946301E9597E11CDF3A31AC2420E4DFA47D4
+259AF53C3AF330DFE4734B72684E50BD5895A8F64FC814B561342CFEE20A56A9
+CD60C3E9FD187D6033B322075E715BD230C4DB95EE677EC9147C78DF1BD284D8
+8FF42450CDA9C4C556065898A93F2777B52203E2128713C1669484C10952C0A0
+C2306E036045E6370655A8D323BBFF8A6F2BE1F9B8446CB5955C9F3F1EF9F13F
+CE8903EE90D0F7A2BDA34B279C4BB3D8BEE6A8C256DCA01D7149308A33926437
+85E22529ECD1CC157AD27393B461A9F4685D0EEC63AC9EABA6309C0A36CE3198
+2B6FDFDB499E29B46C692609400C55E13C491CEDD0BA275D2D876E06E4B9D255
+5DBA5322454C6AF0602E0B01547145C502B0DFB31EFCD86743BDF087790B31A1
+25F14F796BCB613625E1D915E6CB8598F17B463209CD72B4558D398B6D5A8BCA
+9FE5BE145AAD891E064E1E6E96D32B248E30C550A7EE4E533531007C29D83E23
+CB6075CDA42913296BE65F9CD48A7384CF56B86913D4BC5B11054431C32CB43E
+757B7D1A23100CADF5391C44CC9A614B180657C956BD408F7C7F81D31FB8EA8C
+8D038351A8F6CC8C8E25671AC4B77CB608B3882B2EA0A9B081C9B2F81EFC6DA5
+CC858FAEED1AE829E6488337429FCC62C2BA5C355154E05B9A3BD5944511CE0E
+8BF787EEFB3F136FCABE6CBA3C609C248AD6640530EEC6AD8247E77A6AC12E80
+C82732137D8CF638CD0EC7D4CDE42F80C8C7149244D6FBF1701E1E3C5666D02C
+2F68126B54B2333661C32F70051FBB82C750FD1C60FD9F667DFCF8657154F409
+7E99629D2B7B926E8A1077CF78CA89AC5EDDBA3E04FB0A565AE2DF997E05AA09
+73A00018671B2AB71652FF9A059F1C361659523606B78E9B4B10F6D72847FA39
+953ECB88070296C1B09FE8D92A50EA8E98FD6FBACFD178EF5B2BF23150749F27
+2CA4491C4C6AF4D6237EE0E912773A04CA55814FD6EFA493D01D1D911A29BFDD
+D53F39E8CD7B7F964AA091DDE7CE9CD3EB8757DE545D074EAA584B8E24676364
+F666FE6F9B9EB570D154E7E2C05A8DB5A40AD741F0585641F4F32CA05A7F3016
+E116A22E4F85AD5E123F07FE0FE3AB55A7ECB31503202AEE7D66BB8E89421F08
+1ED8C1734A93FF047AE8D0F87F83474EEC20D55E9763A4CACEF15F12AE7E3A20
+667DC66A042FB67F3A140D1042E8175E47FD6140C05D89925DDF10BEA57A71CD
+C778A57564AA74D7AF7B2074A4580331240782D35E80B528B8950FBCB1A8E593
+F96EFFE0F1DD23F6377363D661E1C4F98104C31D7C0E7F9C6F219AD81617A512
+69B5322506690A672CB9E2877309F6DE2EAD18A4DC9102A1955E94E3081AB800
+9202CFE99B057B1F41EEB87543BFBF5EE1FF1C93DADD0ACE6A7C7E779E011A6F
+39C0CA50F406A7F107418B4ACA6A69E0CB46C43676B0843463D5C53AB375B595
+62E9F1FD5DF4E2D5BF34B7D111C8AD6CF2BFF59655C20D40B50EC525386887E1
+B6B11D62A02B7F81F65AB65472EDDB9A196D41D98FD5B1BC6D339964346CC55D
+A55B98C5FB4A4BA1ACF255B2380447DE3732AB82E3BD0433D642ADB7D67C2217
+884A6C99345D4638646CEF366A85F92860A0716F3DDE3E73CA907D4BE597AD07
+053CD914362D5C6AFFAC009D29B7D288499522B923394AC2F02191EC869C5A6B
+1CBE5EB7B47A790040D3270E5AD0396C05FCF895E2E0AAC4A94C2EEF4B7C19D0
+F799E1507C81E2129F4E287B7318E62ED92300F121F282AB65872102B94314A8
+1108E733828CF33ED983C7F72E3AB8CE5F6B61232965AD4D5259AFEA3FA8CC5C
+AE4E0D1BB9F3180312DAE392E28B22EECFAD24965EF9756A29858A9901018FC6
+ED605A1F43886FE9E5307CA56DABBC9D42B0A606307E81705565D9CB81814DC5
+78E5BB93DE5BEF316304E8D33D3AD847332A706853FADCDA40B7F04E11340EBD
+BBAE024BBCA535597FF8D3215869F2CD3AA0A2BEC830F379FD005D12AF2CD298
+53906D4DF912C3FF79C0A04020BDD46020CA80748920845D7C9AD60BFF780A45
+99114B8E401BD5F3CC489432880EC68186FC7661F93F636A0CA790FBDBDEE105
+BC0C11C03C246365BD4090923BBDECF9F7501A65E9D6EF06B752B0B6C92B0469
+C1DF26D6384103B405D948CF0C4310CE34B0CCC47C98A38E7A237BB737C7B6E6
+2298F143A5BB9769A5D7E4330F1C64C9EDA7EA34F85F31B19BD546516B3C97CE
+5B7906B0FA5D39FEA3C84C48C331A549DAD1A114A43AE7EE8ABFDE8FBC767F71
+E86450864BB71B9D11D9614EAFD6547E509081CC17C6261D3B81511EE43C33B2
+F63601B3519AB2F58A8A03A304DE0586517E0D9CD27E756AF6EC6FCEBD897FFC
+89CD5D760EEF2DC6C185126A7B85C0043B785A90901137FE197A57E9CC1116FB
+604E291B7846ACEB236E1C3BE9029B7B07D21900D8A2D6F19FDDC2EEAB076854
+6443D8C28B4BC46D7CDE0D841E7B0C43F86A30DA56F6BE0F6023E2AA8064EA2E
+DDC9D42906137635BC7D21312C23C19593756F4A344C72E7505C41A401B91887
+9512A20F1E1F5A1E065FC6DDDA3412C255C89B9A77CF05A0FEB510146A0EED02
+13633DE45D4626307B03A012A1C44AA0BC4039744D2EF60AA999C0D6F0C2A5EC
+065D730A2F43DA9396A58F41F57787BFE8FA71CCF395B9B68C221FA789279CCD
+EF29B6635F6028A95C124C6A3025F2B16550E9206CC3245FBCA796E91098F4B5
+C61BBD21365F39045FB67086B11C32515AD245CD0F50687387DE65DB08CF6D4C
+9899DF674E334FC25A3B16FD97B19228951D43EA09EF4D0FBAE1D7589B312AE7
+FEC3EA4A20C9D63B7D9DC1A1C35EF58808A988C20ECCD08A407E8F1028B204B4
+267453C5CDD206E47119ACAB15B690EF50B59224D863EE703C76F271E89A4827
+14E154FD7DDA5BAFCD97DC9FECC47F0F136243DC58963D492C3CA6C91E54577D
+669228FA800E18F6F60F47675814A7BD746A79AA1F727539F1A7039B65049D41
+2648B977A75178D2EA2806CCB41046C10BC62E2AF9F61A1EEBB7D762FC3F10C7
+30457B1AA72511F10AA111D6DC77EB18F93A6DDFE8B98625FF037B088556DBB1
+86FD399255368EA7161AD6E779502EEDA86F0D1EA4873C01E8A7BF9CE7CD3AB5
+50DD7234BEAB66700D8F028B2468C367841DD2BF035A151FB15EE213C0A5943C
+A0A5FD68B90C976EF9A008960CC12257203E95BBF7C82EFC853D41C9F983A6DF
+ED243C9C67CA1889719EBE9D5F684210FABC485C3CA8675F2AAE6360312C191A
+8B1A0F18AA901257157CD7840324B2B0D78B1D50EDF9B3A812A9321F3091D203
+2E113E616F09DFBC0FFCB15C54F8ABCADCED58DD3BB2526A81119F2B4FF93910
+26A70BC4AB00D54047D1E997C375BA799635AE4AE0E7DF9A4FF97EAA560C269F
+4380E3252E6ADEECBA2BAFC7AE56729474E05DEC8A40ED3E0518732FCD253CEB
+71F1A8B18EA41AF08D54880924F5B02D7B181BC76B29A4DF769EC1723DDE2519
+6B2170C3C5D4E70C50A21283ABEFE0064996392DFE93EEDBC854BDE2D4EA81BF
+AD04AAC565C48737838933C5257D3AC9BE85E4C22AC3AB4FCF28B7580079D8E9
+0F56C6ACABAB0D38C60FE08F5CEB05BA4DAD9B09B0F9E57C4AA524300E6B8AEF
+1250C6432E54D007AEA9B36E43890355C788E233454A7D59120E3277DA3EDB55
+6BD9EE10B356C16E67F93F9891EDCD06B16279125C22F2B0EF90315F574BD651
+B46AD78D7723FA0CA2B0A0AE9C102C4CDA3155E33CCCBE026C5E8B603A3210E1
+FE538DD514A4D1FF897BE4655B5D8D752439F135E6EA7869F315F3E9699B7B77
+810A6989623051130F6E4E1471656F6CCB10A13034FF085403221017732F2390
+259FE3B29F6331804C300132B9586D3C6B08318A71AC700FAA6E83CB3A86B1FD
+61C6DC7BAFABD3B49F8DA9E3A98BC94926E07DE98945A45061CD0FD002B90CF2
+B8D294606DA133D4CB0874FA3ECD4843828F6F384A595EC123817EEB3BC6140E
+6419208362639835765C432D7BE88C8BB85DB91051F2BB3C247E729F25EE441E
+BD3D4A44D90E9948BAD1D5C168D7FD14694599566116387F622B53F0E4096071
+0DD97D7A6E64F3A2B11BFD075C6F7DD953F57C1B1C3FC952200E8142AC1D561D
+963C5F5C67A05D8E6872B97C6C54AFB455DAC53C80660E6E4CC554E3B5F5C268
+E0E027D321DA10B59BDAECB378E304D11A1CCF3D72A029FC4BBC2CAC76D1D5F2
+84DF09B99A2249E6F1A0ABF58707BCC2C460DB4D4D9250B0FE4283BDE6CA55AE
+BCB1C85A373E382ADDB1AA92B2FAA83858FC6444942CB783D5B639D69344B8BB
+4A8C7DCBBA3FDCD2B455ED377C3022E2BA3D7D717468B42B731CBBE3FA439E97
+EADECB5AD8DC8ABEF73F510FC6039D001EE8DE53E239594E64428F2A460FC809
+3BB40C9C6A8358C7122B45483FAF3471F164D8BA84D4A844E09188B4C34FABEA
+79BEF8F884756AC909B70460BC22C6874F966699DFD1F3C54FA1D2AA72264E93
+75596BA06673B01D2A763CE177E248960BA0F7E3BADD59265C8876EFDC6FCFD1
+81469DBC59AFE8CD07EA8FC0BA3FEFE43DD7D527D84F685FD985B3A89BB5ACC1
+31BEBCE59665D9CCA179B774390A1CA5573A2AFC8BDD6D6901FEBC9CAEBCC5AD
+9CF26EF10987154F9CA620F426E3EDE082A2551C5E949984C30CCD98E2B1D0FC
+3CCAF3EEADF436ED12108134359B711772E6D3C921B02677BB15EE87DFA5A2FF
+A3F253528D2D0828BE0778AA599900DAF72AB2C17D1513BE9630761128C366EF
+B3330BCBC83A5F745D0F163CFA100DD8177309A5ECAA912C8FE8546140587FC7
+50B14AE5B8DAE05BD2399CD44B888A894F79550DAA5DBC84AAB94E62F0441A6D
+3E7D008F10EE46C58F1A92994269B52DA17A8266BEA8EB4BD99FD39D5361C028
+81FBD28300E40BE415F7306C8D6D94713869722A6A179F5FA66A332CE60A0C39
+97AAF72BED0B337795CEC21379D67FDF7D5011BFCC60CD433EDE8A3768455F68
+62A9CBCC695F9F8B4A265026B1678DCD7ABD8FD566792218BFD7FE5A61FED3DA
+9307CF0FA486FB636D09E95D640A95483A929639D14141679BCE01337A309ABE
+6CC846D012CAE3E838FCC4FCE3372D020343A155EE284BD858C33A245EFE1B79
+A9FBEFFFA2B402ED5E17A9CBCB2AB9B2B131CCA1484291ADBEAC711503405F17
+66570740C63CCA6E7AD5871AAB381ED4968806A911D6B6A2EF18CA9C6A4A800F
+95DB24AD68BDA434CA725D17F0AB0E99E339967FD4F0455D7301ADA41ACA31A9
+6A03698C9A012E022234DC03E2F3276D2DA1FB03955C191D2E8B4DDDD668CF04
+23F806E181DFB4CAC3E4B3C66E79AE87749C4083E84848BE641133EA61D06708
+B3F84508985C54352247D3B42857C49382FDC78F5F0D6101908673D90F4ED17E
+040F0B0F6EF8C1AE38B5BA866A45EB0DD3B3C9BB3F342B7F504A37605609E111
+1CFDDFC92101E71E3F6DCA38F0A833D0CDC52CF1A03EC5F49506618277D382EA
+94DAC5B910F48275CCFC2AA7181DE0675079286DD6A06FC691989197A40305BD
+246A28B5F578E458B39EACEB1361AA5DA481563592DB0C9F03DFBF4D6D84D72D
+C6FEBBB5DD1825735C97C51941B9CF05DB32D1C9A33A0676AF6A652077DA1FBC
+6E51CD90D46B767C729D54499D392EB6202DC498B57A50ED44FABCB78E8F7B23
+5337EB2DF8395002AC4E2AC04974C9AC46E01BB7DA9C55074EA3BE0FE9F6846F
+9C573876BDD9A1086838430B9E5C42246117D7F5B2A8EE45DD30A6DA2504E2A3
+2CAE453E9747615D9F0A0BA9F06B0026DF21FDEB50A4FFE7952FABFD6D17F098
+79237B36805490D764D1843DF4A0190F094778D114489F6D2B5FE89B614BC0F6
+23F5A366B2AC497155D729530FF1BF982C82D24204826C6AEDCB4F3B4AB88CE3
+FD55E650E8E67214253D189D67AC4CCD9090E0482CA19977166DE08230D434C6
+41405B7E4AE2D63BF49E78819CB661237A9E27B2C2091E6EBAC4AAB0C5021B26
+1D38AC2EE717F583B31AD83326080FE441FD2AF2637178F7C4EFDBED63A32C33
+19C315F16BF7D12E78C11D9D769C7B52A453016538A2F72F4FCAB0DEFC246AF4
+FB40A1B5D3520839FAEB7B5E9BBCE4F0EA3874C2426085620B7E62C4FBB47CA0
+7C32065EEE2B8A824999496999F06A6E34FF667808965E11605A19B744CB775D
+D0598DFCCD73A530DF88D72D2D467D9631A8D7E665EAED42B3F74586795F7B43
+51FBFA148672EEAA600B76FA43B0D14AFA5BC1BC57A8C13445FF035D5A754687
+986A1774822DD5CA273D64E2D2CC94AC913859D435DE7C8DE64C5F2150BB395F
+E55C60C898DA92625462846464F073F2699642F4D3CF0F849A7D9A2B2FDC80C1
+D26C06208191D63E97A2AAA73EC4B96373F23D4FC1FB91B93899E2A6DE369D90
+830C451C3462DA0137C812BF06E8D219B90DC6A551FEBB2A52565030772C8657
+DDDC5D3ED99982F6A3F9FA842C550FE8A5A7A2BA36862EF2C3A413EF94F437CC
+E3D51F5196918E4D9F1AF0CA1110AC00F963EE17AB1A2F1B7D6242C29D98747C
+E91E8A6F924E89B4C6794677EF604FA3235E8F44578A5A87CE1114631260751A
+909C7274E941FA9596669D9FF82C29EC8280B1B326EDBC8812D2EE2DF812C02D
+AAFFCEF6165985DDBA1D9537AA0948A4A797F01B316FFF6EEDBE874BD467A239
+E89435CB0AAD16CB06D3401F42EF7677C2D8EC60A395F716687958E5F9B6B887
+5F9C29BB8320634C9892C9E72369A9CC1447B51489743E755363E4624CB88265
+4315F7C6C62EFE3916F7580B3E226FE6C8B3429AF51F93DED861D22EFDB49B3C
+6C5FCB5893774E880566DBD66A408495FF65F8BB99D04E33F8830726B20C872C
+8F4A8537542E1956C1125311CBC0A014F0E8E90124AE145D2D8FB12D113D79B6
+6D5828941563B1C3F2EC506BD4807A969279AEE347AA6B552E328C9D11AE52C7
+61DAED073036C79B9DA40BACB90855AA3CA93020E2B553BD377C3504D7BE25CD
+5A43DD1C53FC73E3C2E1690FD80B93C4C6AA5C76324F32400C019D6360B2BCD0
+F33E15562763487060CD620C5F48C40000671A83C22E4F7E3F5F37C9F70BDD83
+07085085B3F881555E1B8D0C45F13C95916907CC0A8E85EB1BE75A3382D16224
+041858FB54EB7F0B8719AD892B123A2EA81EECF9CA572AF8509B94FF7DCD544A
+4CF9A7235FE70F97B9D817EB60E8A809BEB69DC4FFDA1653F588896C4C3E2378
+D1FE3F902ED27E3AD5BEEA4A54A88EFD453B380B06F222C088C5CA5536E1EC70
+3CBB82839056CDCA0E770634B7E8320D856487E9C4B02CAA605B5510D563C3DE
+A0709BEB02EDBB59432B65F5D27E38F5F91290B1C871E9FF9901BA8A3F938659
+C5A5D28E001A3F8DDEF24DFE7211081ED9749FF5A753F6FC8F3064ADA79EA8B5
+201161CCC9385FBEF61739C6F103EF29135978DC77B9C374695CE7209F3C2B64
+36CC939E58840C9FCF40888EA836B6EDD24B38A678EC8B988865D41E1389A32F
+4B6319BF59D48FF6349C98E611CFE1E7EB55EC557444F22EBF414E8EBE976472
+B2F7580731D42BEB735396F8F144587665BA950F43802B7FD8C4BBAA4D25345B
+736C90FE9838EFA1BB52B1973ED01D4DE7E7E1DBE08162C352B06918CF62523F
+A135923EC6D932F5DB3469AC188E1409A83839C3F5B9A4967B1E77889C2DD5CA
+98D3038CACE8D9623BE6425378CF5262961462D7FF5F2761C1BBEF2A032FA6B2
+7D67129F35D5FB609E5E60398CAEAD4079A9FB008F8EB9FFB26C04914ABAE0BD
+AB4875F982AA68C8DEA77CF1F0F7BC8236DFBAC37302BB695E7102373A9DDF67
+2163973FFD610BBB8E0D6E4DCBE688D092E6583EEC11CF6F42245871A3F86AA4
+4D59A9BB6D53E586A4D187930AEAADFA4A072CFD97E3973475A8DDAFD6639535
+44A41BBB8F81ADDBCE14CCBC9DB20268AFDD05E2B85779B0E0CC49E200CFCDE7
+B6B2B98034BB562A43B080360966D51E1DA0EEBA8803A9526F86A59B50861C2B
+CE3D72A03EEDABD9ED8935A1C8BAD1D924EE7A118225A576830D30FFA3B2AF1A
+8D6B4AB990D3DA5428F6CAD5788553BCC2448DA0896C6A481FB803E28D7D335B
+2D569A4D801D66F27175EA483381F5B6ABE1DFA739AEB016C4B95CF230146B59
+440F72EAF259ED4AA1798345DCC04786B8BDE68BE9D85F8AB4FCEF54D8E72DFF
+7D0BBBF7D4A79E71CE98EC0F130A2414B4F958DCF7E138C8A15984693FE1A092
+5204582EC8F65BC1E4AA0654D4392B78C29649431886B236C95C11A3ACE49002
+5D83E07965B396FDD136B49B203FC9E48A8BEA97CB77C6EE0F6A5AAFE249AB4A
+3194A802121CE314FB773F02A5A1D28C040CEDC32A1EE958018B48AB84E563B6
+DAE93C28036FACAFD6EC351D7960047B9AE8DE4845536EC7C02C4AADB202FAB8
+E32C9FB7056D17A5CF6817679E30A2E58BF2531F8F1521F5EB3F58EBE1EAD4C8
+1BF11243FEA3332BFC647ADC8B7929A78D105423C6E34E5194BD8C18BE0512AF
+5A989420376FCB97176DF17EC9922C42E00D1987680C7CD96C3C81BA0C490A4F
+A54F11154F3F105D05B465F6711DECDC06391325F04875805F0BE3294B4B412F
+425998A37BAB0DAFEBB09F5BB79C344E31FF93A81784CC3B334ADF4E515045A7
+22B5F88737620B4098A7B38842A888AE61DF3E1A5A40E41315886A24C71E744D
+05FDE20901F03C5D5747789A686303DAC5690FDCFC5E09F3A031121509455FA7
+8FE6B5C878495F39C40E6241E3A5AC629A1872E2332BEA5C0831D1106CA169A5
+3F596660252B63AED600B8388E89202F81241BF0AD676D1632DDF73C379E05C4
+315839EA8196F9FA4065294AA1770F75F6793D29E585737657A8FB0E3946A6D2
+304F2241C79CDDCACA3162B28EE02C9BA50E511DB84463EB2EEA28CF96D3BDDF
+486E44FB8C4EAF0A6C44B459DBDF135863FB8B31958D49BD0C097A4D15C76D00
+EE844D99EF977BC0E89287B0C2C67C06D2256E846F85DBBF41A7059B2BC15D9C
+66D5D7693642901D17FA0C68FE80F3D3F7234B6E8D7067658E23FD09CFDEBAD8
+6B35ED0A1EA4A69FD7E8E7EC16394C1E3CAAA9EFFAF95EF6C13230DEFF0302AA
+448B60136747CB51427943E0DB1C1DD087AD6B284DE4E354070CCABE9E1D5EEC
+B6975793FB09A9655D36BE2D4A3026DC4689294DAF0D7B6320C34B5AC6C32FEA
+7E0675B45D3967D1B476FEB52744FFAB4BB49970F13642C89FFF63FED0D6B350
+2B5C2972C747FA0B43C834363D848F99AF84FF0FE8A786D26C4D3167CC08CC67
+ED566087EDA4550120253ED1F19F1A4161E705A3D8DE6DF75C330D571FF2AB5F
+E022B58D2EA582091CA3282EED6F075FB96000B36EFA323EC9B893A2CEC57865
+09EEA572BB127A4DB00331BD574C258CBCABB02EC1E088F076EEE22362E93F49
+7B4E08CB19E55431C59CBE634FD12B28D56320FA1A753B528FAD98DE5513CE90
+CC1B0D722A4437FA1508F6FAB9BB8F3BF38F7EDEB6947D2C46580A7602FA90AB
+0062ECD827C062737A163E1797576D1C83A31E0F4F892F7D7F83F1F4563EDFB3
+219A03CF16638E6D5E7E961EF4341AB0D7AE9D80B38A0FA8AD4B7D24E4071F04
+8A2B4FEC937C73FDC45CD570DA8C96D56FC104E39EDBB672478D9C34171D93A1
+3A995D5F9306E3B39B35D04D76CAFCBFA1398465FCC9B544B2FCF97424120227
+A97CF3B254084F65516DF48F799D6D4F0E830314E1E7FDF23847B7B22CBB4739
+708B3C0FB3043096AAFD133A43930819F5D16C57BC9A5913B8A552A9CDF5BE41
+4B29F40F181A1089EAB1E1D4298EA03D94BB9D1365BCD0613CD5247A623E0603
+23ED64BDCE80A76F28AD9DBD65495C2E32F8BEB374F2BAC04DEA83299A9FDD4D
+5D13287A44190D8CBC8F275AA695D58E7DD99A958FB645929E1134B5A796AF5D
+B4DBF734E15633F17FBCEB18A41805E56D3B33C18E0D3DB638B5716FC11609BF
+42F01966B3D9E2D05DFC7E61326FF476C5973A6863E0318A95B0DA88F668A6CC
+6C657707388B0ECDAC67288015611D0AE7958F52D7F7C380FFD27AC1D3B83934
+C3F22276DC03EEB1DD096D86A24119D3FF9194ADF3FDBB09C42FFFA860550CFE
+290553C71DE6CFC37B9A11C22F859D956BC38CF9A4FCEF72B459F44ED1B31C66
+79D80C7C88A7DD4833EE90FC64B7D8CDA2D0C98235665F71B07A3570189C6C88
+FC4AD8D1B0EE5A3BC948004F39963DAC6EBA7240DD832D60472C4F088274CCD7
+A97A05F6AB7BEB8292E20DE373513632C9AF5B1449D1D03BC4EBFE36DC25F58B
+75C2461DFB41E1AE20901F01A15362434460A638D80E2F569DD4948C1674B8AE
+C5B1C3322B9DAD25A9A99D84932B2CEF8E074F2C031D9BE0CACD94CAC6ED149C
+86E787ACBD3CDDCB45057D149A2A155274C6FC165797F5A0973FE29FC9D3914D
+1F44B6CF95F23BB378C06447810BD91402DF356E30FB965A69676DD932659481
+A66CA8B8015B4112CC1EE2D90FF1BDDEDD4F80A232351389CABDD596766F19DE
+4D93DEF877106A54B0FECB005F41C9468CCF2C84DDB15732B015B2CD1A4155CE
+52D8AF86FBC1D97D8249A84C8CF54C271A206CBB0291C9A83F9D3F80A9A94052
+D090CDE951BCE2CC812F66A47202F44AC93FA73A7987D3286FE133103B364E5B
+04F3BF4907EFD49128AE6C07DDDA38A257ABD45F13872E0D70A19B82AEF69344
+01F869C42AFE47B8CB550B6EF46B853952EDC511A909B4C8904B4BD121249977
+5785489C28A02A3052D5A122132ED896BF20A5DD0ECFC08C933235FFABF515A5
+C7280AF5CFC4C13B6F153AA92EE18301448E410B882FC827343444B8AA88E281
+73C15C38EFAFA3E640DB986A69B0D2D882DD31B2BAFCF09F8AE98F86761557E7
+BD3ADDBF480C7571770CB086139CB970FBBB4578923726F492DF82FDE83E4F94
+171BFFB8B11C6B195CF22684A8D5F0D63C57E654F196DEFB51A5DC591FDBEB4E
+28310F8317514EB7770041BA2B6172B96E691D4F9F289B2E785058F99C288EA6
+9FAC0E3D8D71EC5F16F1FC1F48962488CDE53B1BA5E57FAF21610326F3CEF7A4
+24B314C4A55AD1C644604EA428830304AA36451AC1FD41F007E0AE84C4DF757A
+B85F4F91BC123DD926A47161FF996C1EC4A722B912188E626AD7D928526BD12E
+ED244BE4CFBBB20676C3BECDE1B734085F00B72C32267DCF002B47E6112BE3DB
+9A72953B4B34F98B4FC3E80ADD37A8E2D408007745F51F4BDDDA57038755F031
+D2B09BE5249A9A2C9BFF225C5C7AE43D97B761501B610891725CE320BF9C7C85
+93C9E9AC2BA6947535BC406ECD989D01728EA41D963A8753DA2A0C9B4D9238EF
+826DA874319F994FDE1859E4CC3B17601D1495D1B3500AE1B861C55901D9610A
+25078C498AFC38B6C64118EE9837E5C61E03B2E7CDEBFD8B37646D649B1A8E21
+B6BA6A8552FFA55102A7F6BF6F8C0A15C66548AB867957728C673DF3221EDE4B
+022428A6E829E6CABC7CCA6C1A60700FE68D11C122930FF0D75DF89D89252CCA
+692CC02DC52F158E3874A9D030C8EF5B0DCB633B2025C203AE79636E1B2497C1
+51208C4DDAF096885EEC50CDCA1133179227427AB85AF800122A7B7A506BACF1
+6AD4B3954794B5D37F42AD94A93B90846C55E12B8943172C8C4715685D0EB537
+75430F0A6EF94CCE0B6B9D71EA42571E9E26DA0840B0624E1F97FA1548F45FCB
+FAA189A40844D88D87AE8EA4DE29CD9E7DF322016AAB4A472DA4DE10956E3DBD
+5B8E20B8AE941CD8541419FC0E90813FEC3DF42FE4F8A7C67C661F1AC766A278
+EABCCEE8F45150E4EF2D6F967E98CC3E1578FC5235C9111AE4ABB028A4E8E683
+E39056B5F1CB6E8F5EEBF12BB7DABBA1626D691C4AF07767537462AB6472B6CB
+A9F4CC1DC29ABC46FBF92908E1C09D21DF40BA8E0D9376449FC64B1F91B13F10
+9A1A484C7361EDC66F7603CB5C00D988E3A34057E2AB21071AA4554D1234D6B3
+BF04C440FEE0ECDC5378E34ECFE504D9B917543DEE8D86A1A1AAE111F7870C4E
+D81D0B277CA333690FB282
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR8
+%!PS-AdobeFont-1.1: CMR8 1.0
+%%CreationDate: 1991 Aug 20 16:39:40
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR8) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR8 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-36 -250 1070 750}readonly def
+/UniqueID 5000791 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
+48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
+9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
+0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
+8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
+EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
+FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
+9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
+D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
+9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
+ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
+10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
+83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
+2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
+044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
+A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
+23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
+19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
+1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
+8BF6B05F0B97F8FDED86BDA32D9EE6204BEE321529D58F28F7A9B3D04A4469E2
+775A8B43DF5350CA25E95F1794CEA94B99AA02F3498C608E6277595DFEC6CC7C
+965B69856CB2AFCAA52F66F5A019C999A1C79906EADED8AB0A185F84F5FC544F
+B289E583A8AB4726F9538F4DDEA903CC1E623DC5EC25CD02353A4C9A63CCB7B3
+483A481AD7220714EED8EA179FD74724C7D1F7032527E25A43FB59367B10F3F9
+4BC23E2AD9F5744EB954C8A0086C0ED51450A8EE7DCA2BC27081C4F49FEFCFC0
+DE75DFA3E620747E85ED0F66EC590FE6CE40D08497B52B89FDD0EF6B1D4C0A8E
+FB12E7A909CA56C9A44DAE837CFB4515412DA996C9E3A430D48B20671F04448C
+51A14CB5E9B2565D33A0C0992D9456F3272776BAB972E4AD37CD9538F78BE951
+9A5898C0E3F68EBE589967254EC4E10B6010E386ECF44C742D37C64502DCB250
+E9CCD2AF341A18836489360B950DAB980CB0621155E647B6DE953A6DB1AF51B1
+31375114FB8E6AC909DF17A7362DA2ADAB0DF9ABF040426957B6264BA0DF2B48
+1AEAD8B9068A3E5A4D85166392CD12ED01738931E5683E83EE999C08C54AD19D
+FAE794A00EDFFB4F430DFF757CC2163DE77D79C3F0ECDF5D42A1B079729E276B
+DC2691D6B29EB3C37824D4A5C7A452C10C98E38FBD2437BB29CB8964ECB475F1
+3DF9D1EC2F4723CFC914DF067470AB81C22F69FF0A615F693C0BF7084FF67DE4
+741E765B47E222EFEF6DDCBCC5BB5EA3FE507959AA9CA4FF0CEB615938095738
+AE8107FB11FD1C35A85721CAF2FF491E90F4F15B4A8F8CBD72EAC28909FBD231
+B0A45D94469D2C03CC351E5C4127CD2334F94A1EE91FAF19DFAD50D49DDCA165
+1CC936EAC431720FEEEC3184C1578EC4E9C6084EF6C6A30A327A455DE14E72F2
+0ADF4A1DC4232577BA25B75DAFA460FC1E018DF361AA3A8874EB6B445F973459
+83E3C1D441BCF8A100C22DD2B94DF2E3EB57C2C792A2C789137911DC67926D62
+2848C29EC41A771243F46D48FC17133E004F9DA9202364E74773A22999E03437
+1D34277B9724E78020DFE394298E990132C6647546B2F95CC2B336C40A335EAE
+85E5CE36670AA9E28C37E43AE4D5CDBE11352105A1A23B2B781A88EAE094B83F
+D9FA26C3F500B5BA7E08758777F11A110679044B09CE57B64D1EA9BD4BCB4E71
+E15E27D15A83FC12ACE44971B199C9ECF06F20DBF062B6654DC6E15DAAED262B
+D645A7B0B9F6A4159201A1650DDD4F74EC78F5EC876A1F58F351BD3AAD7C46B9
+076F73EC8972CE1DA144C78E629FA13B34AF57913B2101A4A236DDF2FCFF1834
+1C24D8360B9D8A24CE3AD889967CDE59D26511EE57B2C06F05AA04788E1231E2
+854E0A2EE1A5CC34B44547D9EBF87FBC6D1B9E0E5C0323D1BC82EE7358F247FF
+6EC3C4F7817F405F91B5AA3FAD663BA2F7E28FC7B50427449B942D0A3820D2C1
+A10EBEBAB909EC5072E37106156859B98B0EAFAEFB8E13A4EB6A1E004B525C69
+DDE72B04661C425A7E03FE440008695D45934CB6192B6A30A5CA8A3FC61D1EA1
+CC2E1F17EA42F6A562E063C2E66B90189D123E6570A485D5019BEABD9C39F639
+6601DA48143C88488B0484E823A382172B3133384336F5369928B5161B7AE927
+710CB575FD233FC0908DC203D3B9A8ADAA0F454054BD29B037F3FBE0AB0F5A50
+A3B80660E06E62CB7306FE8612909E8DF7A1CB7B39B77524CC7472B3964C7C21
+7F59E69BEB0EFB64AD1F79C38D246CB63F61BB31DAA2BCCEAFBC1F418F2B6DF0
+292B5F8A4763BD8BBAD841D0A08D3145064510D427C5978470067ED239D81F6B
+0A10477AC233C934CEA58FA051E7F1D915CCA135A0658BA7736574DEE0887216
+CA99343D134715DBD2A5C46B3BD995A4B106DFE5A24347DFE38A14CBBAE8DBF4
+F8B7F782BA8FC181C3F8FB1DEC2C706D7DCCCD97EE254FAE1A9FC6B2466C04AF
+626E2A59C8B4E96FFF0DDA9872209084296276E54C5E8BB93E043BD9C9A36AED
+2C3E82BCBECEEB0C2DE7356F71235D9CF94EFDD4098B0DA80ADEC47ADA99A946
+B79DCE7274C6DC92757550B7FBF608886D3196206A3ACAAC643395C000541E5D
+19C9EBC62BE7AF3F3F81BBCB0476BE81B2083E8802DF643E0E4A8C873D17BDA3
+76141A6F8C990869A3DCD7AB7F46C701DC92ABDF4AD9F38F01D2005415C1BADA
+9832C0888E5926C5344B85F4830C17FC928A585CC745DC25A7CEF3B4D41C6680
+219EAF65CADA5524F5FB1F09343CC28AED8FB7A164C25F9CC5E8FC6180D08D88
+509A93BF0AC28ABF2B9C27D5707C4F0188E843E3E8DC73A58D74B4D88525F699
+5B98C71A6982D6DBB65B105B2D6E65E8171D915D8A1BBD89BB160C96F478D61C
+EC0FBEEB9AF29705CCD13061097953825DA7354112DD72F1AAF30EBF508A5A02
+6C7680AC7583974BF6A82F4AB9F35260EACEC1C9036C12C88B28B3C2467E4FDD
+A22FF5FE59355DD4BFD849B5AC6C9F52DC51A3B8A4CD1AA7491E785B0DF81C1E
+33B610B2F1B3595C0D82B86789D548A92C20F5177B17C35A961F858D7DF0CE07
+CF9A957E2FE826F2C6ACE69A2082EEFD86D932C9C3574160AF7784CFA05C1EB1
+A881D7AFEB71668F1DEDA3F8055640E7CB2E7DD23139FDD37373FC6DFEA85C22
+B59330D72D6331B8A1D28A9B3D2172A177AE5CF0D22D28A1911F9F3FA700D355
+F84230610E2B79A735889C5CC591347AC17F9E65C03C0A1CDA2CEF75CF01D6C7
+C6D5F727258F499B09B0A042A97F7ACDDD7B188A5B917E3D7E7A411A0AC84F59
+B96A7DC581B81019168C31F7E5F6EB8211F1F44B785391D41E89565385D15D9F
+66FB6986A66B2460B4C8229E244A322ED81FEBCA8E2827E4A5E54236E33A788D
+0A06625F92AA6347A73A477A6A37292BDBF2DF42D5FDB1027DCBC8E481147AB3
+7779E5EF008A67808490E7904DFC740E38BC185CF0C8F0C9002606D31764AE5D
+FC5F6E9C330D43ECA95380B988084074E8C268FDFA357F7045B7603DFFC5B0BD
+01B257B0A754A14A565FA0D8C89CF7C4C9FB69445ACF7ABEDBEEC24C87E89889
+61DAF3144291D4A8E7ABB3CA95F9E89AE84649419A20ACFE872E8BF81C523626
+6CC14EDFE5565FA25E65290EC272E2DCE660A916D60C07C4C9CFBF539C7B5497
+C55F8FA22CC53374F6E07374A73B0F6F68FC0376703B6E73B319312448DD1CB1
+962E16A84A3873A322E7B3C737B42E18D53B02BE9EDB07D21663D0ED6443538A
+276EC167D6DE7B94625C6254FB5555DA81B5D6CC92191D15C002F813A73E19A4
+A7C63106EB5C5EA7BD9E1FF3D4C3BFB6265C48AB48CC4A3FBA55B0D2D8795D55
+484F3E387BB56602B8C2EC4D04A8E123AD02422D1FA04809A7F2884957E9DAD7
+EDE67F91D63FD0D73D89D9BB9126B5DF3C1C09CFC81A7C60CF6463ABA6197D2E
+CC1E8339E2F5A26569838E66E7024DE8BF50BFFA3F1E6A923D363DAFE4751B48
+D5ED2CD68C5C8F248CA0C0A9B9CE506BE17B4044FE73003395274498928E081C
+450385B2F2D9FBF91871109F137E52CCA8035C9B30D3419901F342AAB26F874E
+449F214DD406C210DCC35EA89E6A0397E5AB4725586EA12B8C10F41D292F9140
+115A57DFF19496AD04C0D9A640F7AA25E9E22A05B23C7A6FBCC115E3DAC7A34E
+BCE9EC19AE54BCA3A7FEA7AA0C23B24870FBCD9BB15AB17F7002CC33ECD6F0EC
+4D43607C98126E7FF7A59EA187F3DEF3B6B1A174926B2D0CED8159B3741C0F67
+A16AACD009847CAFAD44B338D2A4F3148D6CA437A8F7709AB4D29EFC4A37C256
+5A3A52282ED1B5114C14045D2A3806C8A7DB6854EF7E158DB4CD6C4F84A46047
+098F6158763C0049A17CFADB12AA198B74E7AB62805556BD9DB8424A1037136B
+5AE30853446E67EE01770DC8153A906FC71DE0D8C85B86DDD62E6951B77E1709
+900338A3CB40515E0636185392979B2BE52FEAC763930A99019C675FBFB94041
+DC09D119540CE689EF7C3ABA5D62573F6E4559B44F3F8AE1C3D04540525A10F6
+501588CF0897D767C84E00896EE7CEF9FE832E772AFEAC08B1700F8F54056E19
+F05D44DA94063E497FA35C720A6EEBB2156BC1D91E68101C366AA5BC68CDC2BF
+90CB15EB12AE0F234B370EFC0B4A23C4E503EAF5529A032838C87F51FA806214
+41BF8EDBF22C89F8905D4C8F7260B2269180C6E3127ED31ABD878D74EA7BDE87
+F597D440AE923A58AB02D27E349CA7CC043B946D89D81C8AE4264863989AB2AE
+5061880897F46E6CF9519548AC8A01431C746C482F4B4C6166788D372CE9C997
+E233DF9597857AF04E493EAFCE780FD229D04F4FA02CE51ACF4BD4CE1917F19D
+12C4B25B1A3575F0B41317EEA24DE1BEFDB1BC3AFD5F61E512238726E8E3A31A
+8B2F3BE79948C8B1B6CA815AEFE34B90DB93B7282C775D1FE88632A41B4FCBD2
+A05A9A04968293E79A8FE18892B806179790119BA3FE378B2AC882295A25C7FB
+59C0F458CB0FA4B103153A2AA534C24ED96976843EA8B30E30E6DB279426C24F
+DB7D8ADC3FAEDDE6F204824C5ED8A31E10FA0B8DAD46E1BDC4E80436148D1134
+09D08C56667DE58A1E78DA8103A4E9D6ED7DEACF7561BF0C85039468226296AC
+861156CB0F0FF2FEC76D2A32E7E49C48F06A95D61A2FE40F135634BCB99FE538
+1F8492A5CEAC9CD4AC76533C237259E077AF4F1F26B3D1B0EC473CD56D3BAA8B
+CDDAE26E7CEFBED818C1DD83AB0142EBB928E6FBC0697FD81B7A73B5CA05A16F
+11EC2428A8A77674D63707F0C91D78EC64F8D5F648199904AFCB27DFB49FC8B4
+CBFC4869BC0A2FCFC7AB259DDF59A941CF4A1D4AD4F451CD7FBDB168FF72038B
+F1578D89C8F938FF72D408753AD113114460BEB902B7A0EC4F37A6FE3117E4CB
+625A664D7FC480E986681C7E3055036ADB8546EAC44B5F12CB4001039A9DE56F
+A61D523DE1B0F83609E46E38CFE4146049420154A9C7C75622032404970B674D
+4F79BC99A5F3F720A45709338E8C6A529257281CC880C8C77CDD0F7E6B495D67
+AB139E3DA9CCC3C99306C3CE9B0E53D77B1A009A261B8A22B789BB67934EE7F3
+A1CA8C2170082F18903F335085FE5219EB3CD0ED4DC01C9A45426C26046219F5
+3CA60CADB58F6ADE1FEAB848184067C6ABFC365553E20960EDF70DC319FF9574
+654155F8AEFD9864A839EF5E0327291C8784AA2DADD37665FD8A2D70066411CA
+C88205E79FF0E2C2FEED0661FFD3736A81A26AEF35599A7463B9F036D6B22AF5
+A6B0C9254F72BECE010800BB32100A745954D96F9A273D5BAC6658B5433BAA80
+22B18397514F4C3DA8D0AFE9ECF437788CF11071BEDBFA9D5FCE42FB0896FFC9
+629971DF9C78E9C40B065C909971202797E90387D12835DF3D305370094E9B37
+4D294623FD09CFDEE5CA6F75827A69303D30026AB518BE812F021C7B25AAFE70
+6485201252BE6AD4F19F33A18844904890003E57A763FCA21B0744BDEE1473E0
+CDD16D4A0A20DDC9B9CCD3E7146C95696FBAD1D1426C6EFF8733219106B56B58
+42DFF423398F878930F85DA3245F6E248E98674144209F1DEFC9BB3D80F4425E
+F6CF06E89522871DAC2865
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSY9
+%!PS-AdobeFont-1.1: CMSY9 1.0
+%%CreationDate: 1991 Aug 15 07:22:27
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-30 -958 1146 777}readonly def
+/UniqueID 5000819 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
+65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
+D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
+77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
+15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
+491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
+1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA
+CF2C05711374F7849708E1106F88737C9AA60612D384CA8C173FF1031EBF6EA4
+176136DE1B9F29E40E82680A2CFFDC24DA05853307F1D1F6537D061EBCBCC5AE
+E6316380ECD8E63ACBEA9FD1FC28949366850AAABCBC9552CAB2CA3BB934C8A2
+14C9DFADE24D9214858B1D42B2171DB18A475AF78868C2549F19555AAB07F586
+58B28541C74E14F28B68DA42A9D46C031CBD74FC09BFEAA3AC1DDC68B7B71B81
+6003C9C6AC8EDDDC046D247A2B8AFA63A3B1BA1F12AE0B4DD07327F0138BF470
+4630E4B5DA55C194F454EE2E872E0ABE6B879DF2E87CF81F75D79F458F7D3F81
+FDB76C15EEC4125D18685E1D8591C54C0B0D069E2ED73434617B9D30E64457E6
+1542E4630E848948FF2747D5C31B9C314AE108931003DB9F76644DB43D245499
+2D28E8452E50B1945E13A5DE2A8B93523D3671D1C7ED07EAB6FFB559E5A1F828
+B22D2FAF349B40C3B31FE806595F67C5E75260514F456FA0013668D948619514
+0EFFC35C1AA131AF8578A254AE62CA75A6631489C78CCE633A3B302BFACB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMCSC10
+%!PS-AdobeFont-1.1: CMCSC10 1.0
+%%CreationDate: 1991 Aug 18 17:46:49
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMCSC10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMCSC10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{14 -250 1077 750}readonly def
+/UniqueID 5000772 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
+900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
+87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
+076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
+9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
+FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
+B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
+CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
+40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
+C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
+7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
+FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
+81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
+5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
+CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
+0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
+E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
+22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
+1D1941E73310943FA782532ABB1116532AD67AEFE0758C051241E301C7E13A98
+6447EB0180BF6799814BEA4DC0F727D0A40B7BC3B1269CDE174453D6A3C4479C
+146001CF717DE25AC1BE5AEA5F2F1C17719251C429D3AED19EFB5F708A36D89A
+354AAEB20A954E4FB9682D9D227FAEFB5CD1388867E0860EBB0E279ACE74934E
+3D12254656E004266D501B9DE05E7FAB380E4B69467E641D0857F13BABA4A940
+02BD22D63B9600A7FC571C1A3AFF39B9DF9F0DD9F396497CFDD52BFACB8CCDF9
+FF9277FBE2D32303E4B3CAD99F79A7F45618B900CFD718F9AC9FCC77058D9486
+97FC192847B08CAC407B89801CE23E7D54AF9DCCD0320CB64BA0B3E41079316F
+19B5A779D0BEC5FD5763BEF31035BD24BCCC838444B60BB1EFC43921BDC2DFDF
+C3CECA21CC24C1C7C3CF17D2565DA4EBC9EE79001A286A1D0E0E8F48E4FA44DE
+5DAEC3E84B688D4235E35D78264A9CC83AED6DDD0E4591102EDCE85F2FBB474D
+CB049179585556D6948D6F720F88853586A768547C085FD2DAFA1B4C986CB4C3
+A92B580C149EE31212E1A0EC36D1830FDDE4F19FB39C2F64586C292AF3BFBED3
+6E3E8DD85124644B874A723D6E9544A3E56BACE9D8A0CDE0CFB0C334258D6A71
+F3A580D03195D0B2B72D92B4EFAB8F8151564C2E86CDDEA43546DCCF1DE7EDC6
+FD8123D17D3DC8A7805395A556CDB49FEFE2136DB8C62B163C37FF258FF675D6
+2D9C7841F7F1FF81389F85DF6382DE676B524F3956216CFECC417767DA7F55E2
+8470E949ADB93BE1E12B281532463BB4CE03C47EECE8D6C4AA13BFCD1C7313F7
+B626AB03395711F8EE5880A5C452E6A0DC1F25285E9C41044CE657AA0BFF7240
+BD162FBC9523073CAAA4790293305910CB07AC00893F35FDC0F0536C84A8D184
+E85542A95786168E1477DFF426E56E03028F3209A56995A842118ED577AA7A2C
+735B6808DFEECF65D37E6B7998909F23A9B39E575963B07CF93D47FFFDA47EB6
+8F8EA091835E8293F2DE1C42668A16608AF3F3B2C53222A727A68327ABDC1270
+E98ABEAFC84434D8265697A16A55A735F77EEBF682F1C4A5DE01E042187E3845
+987EB0027B14F7C0EF6C9C5A346ECD3417E381F3FF97AD21907D0DC835E6D976
+990047FA51AD8DAEE9A86381D60B8A60244604701A782FA90D24C34502636353
+2A2C507E189F1D1ED2B4E2EAA426A236C200208B43C765F680AA8F31CFC57992
+4BA5003418EF6A81B2770DEC775C05F1CD948A39C3F5FA49D710151DA9AC22FE
+2E68640D5A47F5B4416F0F52279D1B87C563C95639B4AA9AD4D403FB48632824
+4AFCAF43318E8E61D68B67F207DFB322ADBF72C805F09ED0505212F64A6185EF
+625F9BBA2126013E181577EB5B4C5A395B98871DAB1164572FDA647DB840ECBB
+B119758B52CD0151D12D12EBB5E3AABD05AAA33CFB30BB47F7C4DA5963CE2718
+4EF6272DC76784551C91B62BA293AD0FF335CB2BB8577A957CAFE7E3A91EEAD6
+E3EDD75B5A2BF62FA89A87814F1025344029BB7EF08D1227A6139EFFC9DFB5A9
+F17EB228E3A0CEB99FF9DFEDABEFE69BBEAF6C796F976595FCDA62CB0DF03A1D
+2F7D4A307DD6834159ED84EF35D9C2B8DB908469E146640B7499B7B17E3209DF
+BFD574F6537287CAAF629AA021A784ECF4751940D231A6832C520318266248BA
+0D2EEBCA5CCC8AC81707E6F35424FF58D5B4828B71D5A59480A2502CD71D5620
+05BBE8D046E1E00F6E726CDC38E0788584646D710EA033E917CC3686DD133B07
+4FB8A343C20F11FBD21A93A3DB65383872BEAC848834D03F0217183DF50E3916
+AB7B68238C23848CFC7D345FC4C70AC15CCC3433592AE028C8424E539826AC0A
+83E3AA79AE231B447D6DCE32B074B5611EADE8C152F93B571154DB9213E6F6B6
+EAE38C9B2971C8313D15C953CBB7A37F5BA658306AACC6FD3AE4A3D0B1110507
+0854DBB4FAD36BDEDF0ADA15108D9B6F7F61A10A9AD25E87F84A04989551B306
+8C393AAE446F7CB06CB19B9D805DE0C52C70869CAB832F04F3E92E094031E553
+5B8679720C774280F66B56DD63D9EE47371EA55817C4F66BA651C473C27A5F2E
+1675547F0B8861A42CD2ADBB8BC778156B5E139A611CE0A17140B72FFB99EF64
+D805E4C477C0EB42A59331D1E7020FCBEFB1B8753CC8DB27509E886EEBBB99C0
+937E7CC06C3F42613612CF874263BE46DA67355ED0ACAC9A1DB02C5934562EEF
+D6B30388D057D4488C4B77B3E04140C48966DCDD773BA08661710D19813A7887
+6735A595B2D10D4CA14A807120A43B09DC8855B0EC0749F3532002801F45BE01
+3ACA592F545511E6A889833BCB595D94CCC0905C4E298BF2D1BA59B1CF7BBCC9
+832827A0FA9505B6D468F73DBFC63CF5188A5E2C1291C7666BF88A82FFF54275
+BA9AC8F7A3EE9469FB4D5271750D4AF3FC0BFF55A5F8DD60AD8745822B98495C
+2843A39D4FFF1760C2C7F066A760B2D44EA0D36BFC8171EB791126BC3E3575F1
+7194B6A35677519DBEE369390AAFDBCF8C867BFEDE73AD82F90D2F641A9A4016
+C24294F7302D00AF096FD25D8ED6D779D3A1D65F7BA72D9F88BCAC873AA8F3C6
+BB9F693671D2C1E75F57C379604972E32DEE03D3709F7B1E2A71775EB003C9B8
+7DD49825CC31AA66E5573863B2975826C19B8A6BF57B8D2E47F33FAC2E3C23E1
+22946FC2FECF4B38E11F79B9C82EF395BE97E699470836C5FA2F4953C6BE47FD
+E8062B48E429629C765EFCEE6CB7DD1D6F58D37E57A8FC521CABE705C7CA7417
+41D0224C9C3D4210101B65ECF0EB4795B03C2ABC4504C09E9ECF74114B39D1BC
+8E83B1D818A5A89886071A14D57DAAEDD70540952F0C649452A42F6626C0C1DA
+165CE8233F8D318BE73E0F5E1CDBCD62C4BBFAF01A152372BBDF03D4F5950969
+BAE25148A8EF0BA62C20D9500F98697B6D3474B5E5F82AB1C260D52F78CBE06E
+D487AC6E916929C5D35BFF07447608DF3C31296551245DE0A3F539C0BEBF5EFF
+3686859A904A688FCEE6E2770DB0209B52BC1260B4B0953665572E53FBA56545
+263D697F6D0EE366972A66D481FDE9B5B760A749D9CEE1477A263BDE7163F785
+12E5E52AEAAFB6A05AA3A9412E623AFF76DA062BC8768DCD745FD0B4BC618104
+C4FD4CE144C19D032CED19B8F0A0DA3CC45B2315EA918AC2580BFD08269F1A49
+12DD707B3EBAC19D2593C43CBA8937708BE239D569415E55F885384032B30D95
+1294463865AC6E40EF853BACA42E65F2E8718FC747FFE9633F614B9CE0A47CB7
+8F22A5EC845BFBC50F822319D4CD604CC4A74A2649B2B3B67CB5D79F93C9DFBF
+457049066E8A4F3A7DC08593FA16FAF7AB4D8DEE6DAA41DE801BDE5A295CDBCE
+177EA270FC3C77914CD71BC4C508943B00CF8CCE983809DF50BECD29382C1BB4
+CAD8D737A88F25C0B9BACD9403A5699166DE2DF733BCA2B7A5C6220466B2649D
+46F72A5B9220DE95F19ADD3A5B4588AB50FD5BB335F89FFF1738C8A4E8592E9D
+5BD54974C2F5F5449C2100FC239466021C5AD8ACF6F07C9C6B01060CEC83FBE5
+091CCD6B39BEB888015A349245FDE839454038D30A8F800588535A2FCEF762F1
+F90AB562F287030CD4B5D946AA3E78EBA4C852D5AE9205E67401B012F257A72C
+2296AB4606F43EF8B1ACB295BFC33F3ADEA31DDD57D6B4A0C133F0F200DEA2D3
+E4126CB9104194E6617A15E1796A14598F3A71EEFFF09EE3DE6EE31FCCAC8C73
+5EE4782DA3CEDCC41EB50C9E12269BE8CD955C55261931E63F3E5B521EE9F6DB
+83B0F15E7DB784734E76B21424497B72646245B705BCE06988FD09A65FC7A09A
+27DDB98733BF0D7C56331EE45E9507923BC85F4B72053C2548604ADD163E28BD
+00EFB6D761342A3BE08CAFEF79F21E5E2949AB810133A394609923C920D44E10
+F605E5D90BF5183CB14536FEAFF86475E0605AC83CA928201ED1E5D8C5AF6AE8
+C7C3FC31C213633EFFFC133CBD012B6DC15A49D6D9FC0456BEB04FD8BB2CC10F
+29A93B34FEDAAF618DB52B2993E7EA0897B4A8E5729D0906FEA1F244100E53AC
+70EAFF565BA48199A29705D8D41DF7F1A7382D11616ECE63B1F1343209404B00
+6705E0ACA23888F0E5A183AD39F812CA47B7C6EA888B302764D7817260744D5A
+CBD64E7741D914DBCB538200B8F2DB8332C1CECC251C4A5A3F64D30569000DFE
+A5870E1697576F04F2C887B3E406A99E525D50FA1EF50048FA427B62953ED05D
+DF8CD3817D3DDA730622EB3E00A098B84F1E09734ED33DB4E2D0E1692DB61A2D
+3FAD2FDC0ADA0251D32517E08F0E74FBAAF407A35DB779995C8B5552696065AA
+E4A0789023826E290408D0B871309C665C6CD1645E4039F7F63D1FE9FA5740B8
+D590F177E0381832A300C22CCD9E91E7A93F40B0F5953E40F0CF021FCD5DA3F1
+444B6E8D2E0EC54C49E083806CD5743ED134E97F525BB9F77942688A7820FCC9
+335AAD4E6C71F201B5CF7E1D7C8156F2D2C26D51675C7A164F8C5F8BC0BAD163
+3009C8647860B4F760396872D61C8ACB542AD323EB06546B781D9D6681D0AB8F
+9D340526B5062A4CD4FC09425D4338DADF27DD627D25E300ED19D37B14BF4413
+63E6E6F6DC32C593EA549B7A8877312E4498D93F13F1280071546DAA3264589F
+A724E78CB69BC18A4C95D987E5264847D55F4BC4EA50220D73C1799D849FC874
+FBCA9C2FE0E4AC60AD37B569FFA06A12D4ABFAD51FC492E1353150BDA27BC49C
+791492C6D340C9BB73FCDC6A30655474D22E25845143E8DE4327765874FA7BBD
+7E09AC46D9EF1FCAEAB13FEC348EB2819DE9F7395B5B98EC1EE1EE1E14E0E28F
+9FB50D0908738B115941BF6A1550D64D7E88390C1E184089638BF40053685A1A
+19B7F1AE7AC99C4D58119B957F3E465674A5654AFA70EEBAB7B0B2D6D7DBD979
+6EE804BC93B9465D453E97617A4166B14831FB9249395A9C1496D51E086B2943
+E32CF0283A4E99D0D2907545D17E7F023EC829527F389374FA1A28E068B4014D
+D0353CC5EBA3603B41993B3ABF2A9EDA80E30CEB08EF43DB69B70D80E9175F1D
+FA17A21172CA272B7E2FA169530C6F6D9E4B7DC99B0D60686C9905B627531100
+B2D49835AC49F002A9E481B62ABE97A4D9487A7F4DF4DC87FFED30809A855486
+89E50FDD6D9AF814F74B5A2FA2940DBFE394C573B5150CC5B2BF3FBC787C7217
+00C26BC6F88B5B4B2EC52BF5A6F3E24003A3A59B901FEBAB824BE07F958AB71C
+E61D639EAB084E31FF721B4E17DEEB0E8A0E14E13ACA8BEFE2
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.1: CMBX12 1.0
+%%CreationDate: 1991 Aug 20 16:34:54
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBX12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-53 -251 1139 750}readonly def
+/UniqueID 5000769 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
+7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
+20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
+B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
+68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
+D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
+26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
+F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
+77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
+BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
+C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
+30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
+148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
+E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
+E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
+337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
+0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
+472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
+A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
+31B84248049A4C7D49ACFC81E3E4FEF5F69FA691073C34351C95E8BACB6C51F1
+F0A239823BF97F518E4B04A7F85F0AC7C6BE40E6FBCA328F96D0F9D9AC3C2A53
+F5781366C50469C5386935E833FC248D8260AD6F72D2F2D3688E9A94F87E5F62
+5DD3358365F85FBE367FA2769C7EAD5EC9BEF5292B14ADDC9683E8CFD76FDECB
+CB72CC020BF223B29FF3A9538B04C9B9403B01CE4DE99EF7B0CCDDCDAA7AC5AA
+8D7BFA69A836CFE988DDEF001303F7D58DD7E193171F7E9A23ADCB244AEDA2F9
+642CBF8FDD62F6E91B80825292EDDDCD7496624B6C1D381A61E8C1AA0A00DC0F
+2280242088F24D4129B4CF1320A2989A08765AC390CA76720FA030743CAD6846
+F6E8789A5E3E96940C65CF0C9677DA1EA3162B71E99B770228070BB9A660909C
+47F380B10F7DD5AB2BC23044B4175164A88BA16451EF494E5A1902F43E9FAFFC
+3A60286E5561E16780F2115B85685E797E63731011E10EE1D64C148F65873F06
+5DB9C32ADFCA9342F4A18E85BB905DD4AC45AA56B38EAFE3F1C9D17D689D8B0E
+C6E91A7D42EE6BF82651E7BDB46BD65BFA57BE8E0A797E97BC1DECF2EA2DDAC3
+CA6164F5AE380D6B2A23B5DE1B97C91D29E535A2274BBFCACFC10C12E554D0C4
+EB97C43A3C752B5393154E9865685D33439FDDDC258860296047026EBF689762
+A1067296C711A03086D178FEC65A2FB0BE917ACA96321BBBFA8458EFA0E14A4C
+85AEB8EF6597D75D5BCCD1B0935DC1AFFB755BE6106162EFB60676735BE64564
+B5DDDAA7C26ECE1690A043F2754103FA3F81E29DA762BFB50D4A3F3C8BB419FF
+E9317E01EF54AF28B4F875896C7B8196A95707DC79F1C3538D4F162260AFCD90
+61A3967C99F6F780646B5B2A97DD6649CACB141F76E10EFD1A7A9DE0D76705A5
+AB7155D73ADEE46D19B6A7CFC58F614678D999A23C31E1C86CDBF7017DB90531
+C14ACA1F11A9FEDD6C0AE413C7DD478AD99E7CEFF7785DD631552FACE5B0B428
+5781E221364CCDEAA1AB3486990515939A9EDB065282DA4C5A837C81CDE67A52
+97FA3936E332AD57319A0DCF95DD083934855AB5CC535EA4E9D9DAE662F7BB0A
+6D45FBE3072DB42C1D27BC8DB5257FEB94D5CC9E7B944C1AE3F4B7322182690C
+9541CA08810032516B71FA614EC6823210DF837B551624862C9D4A1A863500A2
+A913E18C4298DB9EA02BDC2BACA79F0B57897AF2E486CDBEBE200FA42B0C2213
+E577843CC8090A89B416F8D09827C62EA1756C82BCFDB38A7888DD1866DF0EB8
+E45701027A28440A6DBADD0D1158BFB645F23DCF66205A14175E31281B1E5CE6
+7BDAD0C786B0782E76044594F693B3546D0D807168833ACAFD06DC4B8CB05496
+D8041FD42795FE58DC25E5C14E78FFFEDE3B48BA53C008C1FC1723551B65BAC9
+155B82AA53A9475D2B62954504DFEDB3DB0A8912313978CDAA587619F64BB9BE
+C99872DA229A8D5A282A92148A68DBEA0DA4B2F0A08D2A00F6BC04F793968D0B
+7CB56E8AD3ABB9AB57A514A170F16EDA92F8176DE7CB42C4F23E504DFCAD2B20
+2ED5863AAF337A28DAF9FFDAF578C029EE69B0A030CD6134DAEC4C0E71BB0851
+E7753AE655AEA168919C087038417510DAF6C48C31886A2674E2487C2E226B99
+585FB5225A704EAF95B54E688080E863FB94407DDBBDF259620A9BD9073640C5
+ADBF23A33F705B852365912A262A40CB57FF109A87AF25466AE93C957DA63E5E
+6DC474A4DAABBD9337A852206C50B645D28AC81A9F1848425DFCF6A10702F23A
+1CDA1F43EFF11578D55C1380AA9DE2B0CB7BDCE13C78966FC614FBA1BF4F64F5
+4B38ABC7919DA46D084DE5A435F006F127F3D1B232089ADA7B1705E03D727BA0
+0F8BCB53E985AEF73B9D68B3DE0B1CD36E566072AF21BDE7D991E090D02E3239
+E1E389F9F799BD17C453F0885D74FB9CA04E6DB6BE1EC840F8C1E7C117199177
+A8BD4361E733E53210D3FD7B71825563EDA0D99153F1A81174D5850704559972
+60D67F2A11FF9403C64D9F58F30C2A0E89C96281F8395E26B12C6EA61FEBFE63
+737F0A33D7E37E3DCD245043BA1522729C6DBD5D78B2C8C58FA5BA77BFABCAE1
+AAE7C36E70FFA3E83A906E8E63CF6F331499964299443B9C5F0EFB91DC4E675C
+5784DBA5413F3DE861903D970018AC64CCB010133F2EFA4821ACD4474715F057
+6FA8565AAD50B9F19F8DBB6E3AC72E1906423AB35A93D56E34CFD5F3B5863571
+F654EA6D67B299A48185EE5DA4F873932B39C23F57764ED19EBBA923A51A2C6C
+5CD7A59477341ABB5B5F21115D1774500B930AD6CD07638047F45A2AD8FFBA36
+05C5CB6B7B97F88404462CC50EC5A75676E8F91E7D42C4DB59AA74E24848DFFE
+B556A249D8E3D23137B60D9E8FE2A9641AF959A216C57A825B811C6E7522C443
+69B8FA6395F7F3C628A3CA99FC5D8689C95E35EDD6B271F3FEED9D184F0B3AFA
+8A7B6100E336589BDD6FBD03B782E36D809A64E9A94F5E9B3C9E7822D24D46D8
+515CBAFB830CE3F1923F6156E29AD479301470DB9A9180FA7381C4A09E9D1ADB
+51DA817559A37DE2615DF1AA2DD6B8C4BB1C9B27723DDE22C116B4E43ACE5463
+71C4B79C1729EBF6F1ACABB12A3F596817827589E67879ED40DF7DDD403D45AA
+021B11B11859CD7ED42A6C6F15021E04508C2CBF94CDA637A75ACB47D3A249B3
+31DC550B331B22CE2191850799B2E0AF443ABB788CC6297929AF3D3BC9405C8F
+2433C4BF18C250C2C15C442C10C119F543C101F60FEF1EE0F9558A8E2F6035B0
+C5789E9248D846D2ECD3EC4E790A79D2817F5E612833FCDC360C6902F176E130
+E70FC6E15E07ABF4FD6BE5F3EE3BD4A48DD38256706C25BF0E6D9A7C51DC80BA
+72BC5F5243C1B49E3D75455BEA13195C093C47AAC6ED3EABFFA674F9E66207EB
+98571BAA8C06389AD5402730DA846CDD6040CA84E0F27A65D1194D916A835275
+4E99D6F6084F8EB0E34940F47C4D8700E1B46AAD46EE464D4E10C4E1259D2208
+70D0EB1661EE28B7FBA067BAF8067480793B37D4C881678B2612531E87BC7243
+0AC0B8A4B816F1670443C0A3E4FD631EB8B48DF3D4A03D9690408986E98F227E
+05253E9BCCB8C61AA0B4E352B6B76FD9D785AC8823A4FBCEBD4574182D86382F
+6CF90EE394506B1043FC4137E9FBE5D471F605E34B59AB3822ACF3B71730A79D
+802486209B66D4AF6BCB7821CE4BBC447F66B35ED8BC949A935C335B9F61646B
+AED373E141AEFCC868D068C2D133AC284885829718513ED5328EDF5230C38399
+F97CE6F55004A89D21937914FC9CDEABC3837A63B658C1F96E1F6474420916CB
+3197C6F107159EC20D34E13A8698BB04E9E8BBB59993776DA701148447D07F19
+2E8FFF1160E89A82D07D58C7DFC3B71EEBF7A9E958572BAAC093568F5BA7C0BD
+B118994D1A3A9F60CC96A1A996D369E7FC684244C07C3461C932ABF4C266B7A3
+239D80C79F603449A0145D88AB24A4DD8B2D82F315AF8F05904EF22F09331D9E
+D6340306D266B4283E919117D283918BF0B4D944BD0B7990DEA8859A690F011C
+7C6843BFEFC9329CAE786F102EF0CF8A2D70050B264BF0D824E1647191D1AC13
+C23E7F53BA73E1B3636C50BC33E2F8D0631C3A76789304A52DC48AB4BD9D6C9C
+51D64DCF77AD95EFA09415A64B346B32D4189A9922B9514A26AD918667CE94DB
+A631AAA4EABD64C71E9E954A40A16A66CC50F444350FBB77C1BF49868E2DF59F
+5EEBB30170DD95B0D8D7530E3B613B70337239A47C582AB7E3E0EA6C6C908B16
+5E89F0969A57D2AB5429DE5CABF2158AD4DDEBA86000C37DA9D859BA60A6A4B0
+EC7C29E0B6E01D174EC741BD5989B5BE020C843A86ADCD2D6BA02CB524140D80
+97FFC7AA43CD5ED3B6A4E7D4D90F3244A71598955428E310D2263394B807FF04
+E102DD0203FC79B002D2458B4E29AEEB42CB757197316ECA9A21D5E8D0F1CA74
+1B52DFB5FDC9EE0764E5A2F2CA7307050D13DFAA548514374CE8BFFFE8109F57
+638DD8BFCA8F51079D9ED3621A6AE9CAF4BC163F79E283BC7D52E215E73B896E
+7A208969AE5E6D2660B73891FE0C38D3F65A65117EFEA6C9008F006811ECABB3
+ACED727AB8D25D9D6F7B12A630090675131BD7657017E0D1BEBA6C721D97E496
+3113B14D6D8C6ECCE0C82CD092480BE17F5031FE21FA67AEBAFE90E2DE02F273
+8B82E66CA84CE6210D492175BD6A0EB412240AA3799637142CB8F8E07033FC81
+CAC9CC379FE10A0E444A373605647996A2AFF259B0A2332DC2C4C6AB519A102B
+5A0EF3331915EF092F5ACF3CAB65F21DBD04986BE3DF862411E7EDFF32867B63
+9891E06A0BDCDABCD7EFB0F8080CA30C79FEA9ED999B9B2D94CB3CD3ABC6C94B
+1460CDB5C58247EE64C7B0A3896E86DFF036B3BACB489FCDE3C6B4926F7D6EF7
+0166D4B404F3EEC540EB39B801F22B57F59F7E987F76E6BC8A61DC216557FF8F
+98901298DD5571653CC29C5B7F2DA9FBB4D93B62CE43C06AEC1B942BA6A3E86D
+7C1F83AC372F681EFCC95CC23149881FD1BF6951C669977722357026C481BD85
+C8B79C02D35D6EDF2DA523EF97B32CA023C21B7C0E746DC61A4E062AFA6033E2
+D1221BBB36256B230363B9B4E40E34272AB93C63D962D5BCFF652259E9EED617
+38DB29D6521453834C876865FBA9AED8D6F740EFD3A0AC9DDDF999DEBFCE49B0
+848E6B535C89DC288C1BC750B9FD923A74853E2EC884AF81499539BA9DA06041
+89BFC782FB656E28F911EFFC5CD1AB78AD270D02AB7D129F1512EDAFF40E1895
+4B9B7FD4D3F0669B1692B22690B08623D21318669D032E899617279149C08A48
+E71DB761E6E25DAFA8B51755120DAB6C7D9AA16EE353A5A619EB659C974FC026
+9558753A717D6F3928835038F32C0FDD63D4664BC97FFC8FD5378CDDC66A3CFA
+093EE8063A0B09B9DF05F7564D65940FE9E6F1E9461355ACCA406A4B6E16FBCB
+5A2C9BA2EF4FFE362FA6CA020F5DB489755D27557242393E50377C6945B64996
+868A29A500C5D5772BDBED54B25DCD6C229F6D43290FDD5D410576511D907D3A
+5BAFC90F329A4C861883FE8185ED5ABA95A7DF29623704DD4EF379ECDE1CEC4F
+AC06577755135A1B5427D5DAD85485AF0741FF7F16884AD6509854D7944CC513
+6EF45A4A3E3F1F4C2DC86682B7A62811F784C3B7A735BE518196E8E2CAD81E6B
+2B8734FF26C91E988AA5B9E1E7FB42DE6B82FF6479AFBB7368A4260F67BDAB69
+3E689082825E4FE7469CBA1B9B7177119C0825B100BE8E6F1A910DE8F92CB3A6
+661B19BE5EC3B6DF6B04781432F40EDB678878FA51FB4F3DDE2076921CF3EEB8
+AB9885EDE74E091F0A6C1583515C7C46828AB1487B18B84F8B85A439A6C8EE1E
+3822776A0A1E25216B7BA38AE77EBC4FB706257290FCBDECBDC13BEB402F2C25
+610AF618A12E7D229F6A83B8CA7D8A117E1EBAFE6C044F13D583223F4DC56E79
+4C297063953E49AEC2428F1E96B1EAFAE79099FCA69EAC63E970F10512AE8B91
+5BD5E11C20C0D65F637642E85058D8B2ECB4A5E6C6EBF6C7DEA6EADA0F978CB5
+EDFE9D9A7E608088F791EC9A12612DD9C997C71BD0465B2D06AEF2DA48BD4C2C
+ABA638772D5E614C726AC75F61823707B4F72F2D42146089FEFC3998D9C15521
+27863929D103F46673B563712BF63819930CD03242F480A026F77B3FB17C8819
+4F9FC69F0EE56E975EF3C545AB514B0E6DCB8E575388E0961CCE8D200F445B2A
+4EC2A853EE7B2192526999A1C0AAE2A90A58DB58EC82A10661DC30134286FFEE
+3EA512A024143D07A6C671AFEC84858B4828B2B772AAE09E9CA9F7882A4220C8
+D618C9C5892FA5A36059B978EF8B26D6839EA8D9C679452810CC9E132C8E0274
+117339DCEED2A92632DA2BA784AB19E90A938C9ABCEAE9296E0935F5F6309B16
+1EC413004EC7E3CD2CEB4452AA657183E4733200C62A02914ECAC30FE556AF4A
+1AF2B26101CFDA61F122B1F4353F9551E38FEA412DE7D0A8445B9D039A417861
+5C373641A4B6532370C2E8C5257583484A065421EDB4E50EE8AEEDE46F557A6C
+6CD994D162A969698AE100116344007A7B7F747391DA9796409D301E59C94148
+F285929AF6B8C6A31D65594F63BFA0D352BCEC60D50E9232C8F28E73B2DDE881
+DBC5F5DD8E88E8EF97828453D5095311B92409C532A1A549EFE3CAC1F3D91E5D
+2EEC82CA6129FE9DB8CC6FBD6F4BC204CA9454C475BD8877597D75ECBCEACC97
+9DC698CC7A064227CBA45EAD0AD850C45D059E2A4ABB0C830EBF95E61F8AC3B3
+8A9389EE9E05EA091E64DB71863480D9E4312772FD9B4D6757556CC7C43FB03E
+04EEA1C9A048ECEC4B7C465CDFCEAB707F67FFDC903F784CDB60CCA60CB3DA37
+09CDEC7264AE28487F0042ED019070BA501C22685AD2EA7BB03EFD5D8728F672
+E8FAEC9A5885461CE9F2FE3BEB7F64DDBDE5B0F2A6CF1FF0CB2BA0DFA2CBFA20
+C539DBA84F0DDFD3E62AFA11CADD416CA921C2965093177B34DAC627D18442AD
+3167DFA2688C2364C0AB3F2DC94D0867CCF22998ECFC568EC07F28161F401789
+4F3A13987DCA67E0012D41C712F4515135DAB1405B77BC1C2C3B7CFB52BDE5B1
+7E2EFF5C3F19195B778B0016ADF3FF0B11DBF0D674A412AA946167CE88D6B10C
+3D77EC4BAE76A665329C977409D2AA8A8CB07325501FCCA2A295F83C21AD5582
+09406FD233B02E25A465739986A6962ACC3FECCEA316A8C747B6CBA3B1C4C7F8
+5A01B5BB008651EDAFC2A0AAB839EBDD14025BC19B9233D54CB5D400345106AB
+E2D1617BC855A3AA6E2B60C50AFBC7FEA9DBA3D30EF2905D96A5F928011CAE86
+B1C6FB92AC8BA20D7B15B40113BDCFD9A05B0F9293477C4695E6FF84AA54E779
+AF7E19AFE02FE9A3DE310E6CDD4A2C612C227FBEA17CC5014AD9853A74BB6D05
+5A64F1C4366DD4D807809FD02B29B8E455293104ED7187A3D4943C2643ADE321
+3299D423DA71D017DEF79F33E499D5DEDC97120E91D0408ABA55CD77190E0964
+F7B7FCD76DC3213CC9D6F5EF9A7456A181433712F1ED8FCC46BA54793C33F10B
+F8BF3C7E8B59C058AA0A9C18CFCF23CCE06D71A146A34B5362CA8EE5DBA42690
+1EE541CD07C043C565F803F5EB1E459807DE1380398989EE397D73EA7D142AED
+B255F05A5BBFF1F73C05FFDD277EF060CA9E3C7318A58AC3BA0A335442BAB763
+E725EDFAB0C984B14893F0050D0773F5037D763074D3CD9EDCFC92F17C3FB699
+F7AF92090BAB4B356C4837B9ECB1D71BCC98ACE7F88448A2E2FFE1B96767F9C9
+45FE6C13E93E0638B370D660FE15D1AD1B6BEEC26C04EC188641560733EB5C39
+D19FE0D6CCADA8D7004F8132E7F535BCEC3C5D45321E59EEAB9576F7B4B39ADE
+59A85AA8EA28B2C737F4368720E2AF82A7BC1B364FCB39588256017A745059BD
+7C31D183495F63A7B4A76BC50C4A00EB2FE4EE0C512C3BD2573D2E6E415CC58D
+E2933DB1BB194B005651138415593EB9EB4B9BD91D37A0CD576B218B6827EFC4
+1D3F1D036C6DA66217EF92B6F349B918AA5E20B9D4BB950823BF7EB9FC07F78C
+8574224AA93ED2064D7A00C98C41F732215ECC9DE1017CFA379A5B8569C3A496
+C0CD61A6201D53177F2736DDF182379C671B38B16AF092D63450CA96C8E8084F
+2DB8C8EBA732B5A84F540CC34A4AD3E9908B3DD149A10767999850D353EB7149
+E2BD0102585AE07505B83FAE856F467310372205F79199BAE473893B723F7E21
+88EE6659BE3088859D2FCEC1604FD568DDA45559DDF64EB10FDB19FE8C9D7C59
+F0E7B781DB5FD80A3C7A73420D470F1256D683F92EE6A7A9DD241B66CE4FC35E
+C6D69D2B66834D848437D45374829F5F1624722806B9E126B43A51B4FB9C27E9
+D5EC07C90DFB7CDA30B53C0DDA3D1F93B7EE82DB6EBC14466F0FCA5149F13B4A
+BD949717FB44FF8BFAFDAA7914240E43B0253E4F8ED5C481376C3B609A191670
+1F2BDA2F6F6A466FD42FE9BE9EF7C3A5B20DCB2A7C18DACD0A75038DC30E3FD3
+64F8389204FEEC67029A64FCC3E5FCF97AF24D98A455997D5667270A95BE2D13
+ED87F410B35B52A2D3D89BF180B3EF83CF39B634A0C1CAFB62D76F373D675E86
+856E7D0ECFD67A5C48A7FF4653B7A607622DBDE7CB434E145F9A4B0501456B86
+3E99DF2570B034243861E4BB80E0F9CE2649329960A792F30913C967F9538E76
+75B1591E075C10BB59139E2D1933F6BED658D704F623F8507B0E2A03C582B75D
+657B577A72585B6926D51882ABE25C752824092C6A1F5A006512FFAB96700DCA
+E2AD0C7D7A3AFFC4F823A02FAB788C32ABDFCDD56DDE65FBA63BF95E890573CB
+EA28F7BB049BD3133DE22E8F4F05AD04133FE48785524A14041C73EAD6F60D7A
+2CF1F8F3C7258172EAC2A9820F4C04DC34DECF2912182EDC86D7412A25A6FB25
+F46341AC7889B645C36A85C8F10D22E41D4143D10EDFF014C00A7B1E4EFAAD1A
+7E42EBC657CBA442E9B2DA0BF049E86D680C5E1C4B2588E99F24844E8EA639D3
+A4CED6A0A7BE055856FD998BECB9DAADEFACA913A60AE501FDB6F035A2D300FB
+FF13B510595A64A900DA5496B7CF1085676680008CE70D114082EBDB5B384058
+06A99A26CBB247CFE8EDB6EA428D261602319D5EF03C9B6BB657E6D8A7632970
+491BA80744BB5DF021382808F3F99ACDC4EBF26887523FA5EA81321D6EF2AA9A
+55939200A4D011602FFF717AD90EB5E47807CB58370C40461591217C2A714DCD
+2BE918A0177D068A21B5927C254643AE0B36EA772A3D2EFC25083B8291BF311D
+74B95C21696904773C60760CBEE6F94638855697A1948221438456099589576A
+AE5438C70C082D177905FB82FFDBD4BD94ECAC1B6FAF0D4D7578A1B6576B4F13
+E3A6F814B4AB580ED09C916E20820DF0626FC1D9A925E8BB6A368E630AC6EBEB
+933991990F4E49075B318B62CA8296CA43B77FBB16578839419929DC8A2AD819
+F3C404FBAC9CE3CAE8AA904E39924C4B704272257DD3D0C8421A90D426376F9E
+E2A4B6C868BA2884D7BAF0BADA6299E307ACA1A74B1D73D73F0150A6C560E65E
+6C0D247AD55969C1FC5DD81C764338799892D391A254B3613F89D1A348A9BDAF
+CCA171CC6E51DEF7A91C7929D6FA2BBC243DA7B1BEF9652F1D8FBCEB2D367187
+9FD4B2C681820B2189A213866CE3456E2007FB3DFE2E362149177CD104444D0B
+C026EAD4390AF141B33868DC5A49E0E1108DF1A6DBC81E2015969F66773BFF69
+707FCD43DD72B483EA751FB1C840C917EAAE7447AEC688EB9922FAAACE7BC094
+F617EFFA3199DD06552C72E53E67B0053A3BE5C5750EA0581B1A7692AEF0921A
+859C7F04DB8AAB312D2480ABE8AAFF257469A555B5F983D277ECE041588E8F94
+07ACAC0E3DDFF44817A21B86939E7787FA7772113699B0A4D9E5462D3E59CEFC
+2798A0D70911F57BB068F9D11393D3F2A4161C26DC2F3C92A7D1F5FC32C6295D
+9C6DFD5E9561DD4443F5CB7A356A9BDCBB61706ACF0C51670668C67DC0FFF754
+286CF2BEF36A02F637DA2DAB10F4897FAB65E78A408C405B52C4F88C4F70CE20
+9A27803EAE707C5E9BBEAEF09A2ACEE9986A64BC671BA9D638375ADEC6E83038
+303B41BD653612FBE967C4B5A121032C73C085A237A561B860660D52FC408F3F
+CCC694CED076A3F42CA1CA6C12A222BEF6850199F45E2354CC7E308D277CE2FF
+F85076C0FF875911B86306112881047E688C5EA9CB6497EF84A659A54ACE4AE9
+774EB2A9ECD4ABA95831E2B6DCF60E8CCD197670E2CA7B79FBBF3C9D9990E737
+D8372E43DB9D4A1B488C630E86BB9B9E91012DAD1D7FD603D2DBBC732690B2A0
+8295EB964EDC0197D6CE17CC3C71559962405AA1E21BB1A8C17EA1DB8911C970
+4EFC85F0DB429C54FC4BDAE64F5BF4B5DD90236269894A180920BF30FED59182
+6781F1602EFE3DFB2467EAB8B00CB5FC30B9669AADD4DAB5795E69F4B8703815
+95F15C33DDF808D242BC2169FF88EB6D74E9E10B638658330EBC284C89442949
+8F4658A6B3B0E70D1431E969676900E56D0773D36A7CD91CBA93C35EE3E07BB8
+2124EA7CDAFD27C4EAB0C53754CD38D4A08C362E0479422E9042C8586BE74C21
+FE71358084B5395DED53C62FEE8ED78460D8A9E8C39E49355E9F712142D3CC38
+A62E9B7BA97061D2C70579E40A54C0962BFD0C5DC6B3338FE09770DE0910F9FC
+4B35C0A307412BF77CB83E62BE74B4EDD3A6BBF2E2294477209F823F57B87452
+778759BA065047FA61F3CF1853F60BF4600245237CAA359DBD88619EE2E948A7
+FD380EE535751CEC58BEA1C0E48E098CAA97C0AB72A2BAD0B538D8D48A44CAC1
+AEA3848BE1B68AA401F37A1E2C4361FE68EF65617237AEC00A37FDA5E826ABD3
+291EEA47E3D9800F98665C75184247D4CEE91401411E53B8B48FD8CFA7147E05
+3603F82AA77C3FB65E787AF953D88B897ABF206480083C171AD32AF26F927E7F
+58F29406D9A4C64522378E3009AB2DDFA65F62ACBB25888F7244002324FCDD2C
+D01D4E83F7D222DED9242922F1187FCFEDD0DC300E05C4508256AF9D8DF2141A
+84265C77AE2034B7848A2078933229C180BB2176481EA46056610BC76B21B33E
+B5792BB9A3C4AFDA74A7316CFDBC0F9C63625CAC268AD7A3B82A9E693F4A2CC1
+6CD9E3499B943C6B6522F4DFF471B012E8BBC82E941CB87F1672669A7297DA94
+1D05CBE1D1BA7E3749E59275B55C1893F0EACF28EA06567D4702EFA6328B4E06
+A179896B168BEA4B248FF64884DA6B42EC4E49116F1BD06104C77E80DEE2B5B3
+96476851455CBC7BA1F8D37E927F2B8AA5F6860070940F182B1643929C4A02C8
+0D0CF40CBD295C8B5965CAF002D464D032209B83A69CDAC059D2C949A1CA48DC
+93C3F287AB2FAAA8010D2B982AD7663E331752B23C82FC07E7F3EB7D72FCE84F
+02EF6982C96FA3FCFCEA45BC433C3A1EAF91DA6BB03B8E6C22EB79958025C3D9
+6BF93DD6421909607AC24B682E90C3E6F1559C58ADFC90350EB44CC159A69475
+BD46BB4123F4AA935D836E5BE5AD399F13D35136933D47F980D19CCA98DC441A
+351E2843395245E1A3412ABEAADCC1D314E61FD3F7C227804175717E50D4A553
+F329D7D5B1D3ECA7C063471ECB6F72B2FCF5B31C18FCB1C92B013C502C36E795
+4BEBEA3247CCA9989B9AFB2E0144C8FDB21E6611242D26DDEF38024E971E3BB8
+2ED74172E32515C57A002275759AE8C59CC17AA0EB4A849BB434F1CFE128CF02
+E5EF9D2A02279E03CFACBE546FEA176A9864EA3E2748CE7D6480C7BB1E8A469D
+85DF3BBB2D98337E82B68BE7A8C2DFE8D6D86FF6BD205D332030679599B70AFD
+8A002326707FB485B995826FC0D2F8C3588D1201446162A1F8FC7E75F9208B05
+EFF017F40F429CBF0CDE769D14016514543752438D907B32F0C40398C0E0B246
+B06E5C2740E7E5A6AF3182E0E0860A0B5158241D79F7F5FF174764D8351A89FD
+0A7D99E40F317AEFAE208F3C463DB86593B91892F11C9BFDCC8D741ACA2A0BEE
+B2C1A836EC39A8894B9097B194F980E7501608B1403CAC065E92B41AE18664ED
+8D9A889C1653217FFDF6006CDAF20073DB4300CFA63025D381E4AE4FE969FBF4
+1C66D6FBAA6C0BA67B91CE299044261708D93B15F30F685589FEF331733633D7
+F90D071B2CAF4106C22DC5C7361AE88FC817DB8BF37FCF2E409D882F1FEAEF11
+41DC3702D9B44DAD630071210E34D2E644101C7CB2AAF0892C497BB391146614
+50AD23021FE8FDFF23A505B207A89803DADB5E0E16886FC382809EB0854346C3
+5D4D7084F688EBC02DF2673AFF763801F90DBCF5B43FB0E8D57B3079A2C6B07A
+69A462168B9FC750AD55E11A10724943B61F425344C8FAA924C87F31E07C3467
+1002FDC8CCF3153405FD66EF0EB2FA0FF5E5E0A35FCF5052133B5550152BD88C
+2700F1A7D05EAF25B6857615918BA5654925448B950BEFB9EA36073AA00E7B40
+0D7E839AC159B8856EDC45FEE444945EA9C4DE984C68C9C1EE918A8CD45BEB50
+58C8DA3508F5353B1EB83FD38BAB985608E08A0412A5C83C2CBFE295057EC58C
+1C6B537EC6CBE44342700E114DF42ADD55E2FE7FDD9056908AF166ADDDDD93F7
+DD5865C03E8FAAADEA4173E3213392D37A545B409211E2D30F2118B5183DBEBD
+E7CAB3C1E3C17CDDC47BA80B2EEC36E47E9CF81A30780B0B50B231A7A4C5E3D8
+4151DE0CF686095E2706850C90761CCF524D1B61B3E76F6E8611F0E4D993D87C
+8A08A4809656DC07FDDFFCD8F5E60782F3160171BB025A6B736D4F4093BBB062
+B2F3704B7A438495FD39CE9270411A5111B499A5B97AE75D94A56EBCBD013406
+BD215B1A3526C8ECD4C745FA6384931D197EDF17C37BA19DCC3B0E0FB79C1946
+53145487B08EF827AB1E4AE0BD7A0106CC4C1A61F2529CFEA254FA028D0D3DF8
+48D762C42E711FDB0EDCC0D3D1DD6B4ABF4650856B8F275DF1C8179A8B4D3A28
+94EC6376424A8F2462A99D1989AAAB1163A67D05D4EF46D07EADBF747BD56E9A
+DC48E7E1B40A2FBDAF5D8CE2EB3AC9CDE96A6044160DA3D5B96B52ED82EE892D
+CF600C28E53B9AAE89AA2FFD100EC94BEAE73FCFAB2F4FBC2CE26570C17AFC32
+5B343E71769C190E8BB3CC4FAA48991930F7A5995F998D382A90C2A0C98AD6B1
+57782EB0D16F191AAA1F04D2BAF1DB754D8543FBCD2B5D3E76591E5E6F1A2F80
+6705E607D921873420D7A347215D7A522BAD6CAA9A2285D0353820C27D0834C2
+B3BF27AA4704E1E8ADF303E3855D4447BA084098B6E37F578DE9D6C739D44353
+10957E129D642D099B137C406524161A5CBF6619FAB7BDB4A1FEB5F69EC2D8C0
+803685291E483C2A9DDB83D8F7D751AE6C69DB8297702D20BDD7E293F7DACFA7
+E56F7B77F915221981C363DC170F6E04267CE593751908CAB3D95018E8CA038C
+8BA4EA16A91A227F04552857B947B693B0DAA420C7D99B5BFD058677FEB15E61
+EF1888A69C9E33CFB2E0010E1BA49CA8198242B9E025B988A9E6AB0A7D434C80
+50CD2307B194DFB07FC8A827BF6239B3226935A32CCD429348E1789C8B3DFAF3
+03B59B0905DF2EBE6C807F52A4811D10B8B10E967FED1853A6D4DB02A46DA4D5
+05150D24118FFB7445C8CA17168BD332F32A78DD5211A37FCE92F8BC2142BAE5
+FED439839A5F7D1FA4364A2F5F8B1BB4F4BFD27F0078EF167F247DDE2210128F
+B927D08CB682DE3C8F954E064349C585376E84DD8D0A15FACFFBC5F54CDB2EA7
+34728FE9B4A4D2B07FBF7C6598EE6A5CE1CBB7C0A176D890AD82F3E2F19D686D
+75A6B5816D89FAEA212AA077AFEB0055AC44B4E9E639B7D7C8A2FD4C476F4A61
+AFE52462E4B8352D98B3412DD494642AD5BF0D59050DE29A72F90838941C4BB7
+8A826E48A9AA4AFFC93DBB77A7C8BF4787C47E54F24BD702A3459CD060E70429
+5EE5A72C97BCC54F001241C7E0B1D5E0DF76DA82FBDDD294ED30876554BE1E88
+DFAAD6D8DA75ECEC61588EDCB48E39A654CC3A8C5641A385B3E0590DE54E9EE2
+65A85A1DAC0AAE90E1B131E7064006D5933D96A18235EA1CDE5662B14C393359
+6F7995B833A671DC33B8ECCBEAE657004483AEDCB128D2D89DBBE7D87F56FBA8
+091300D55B04A20C4ECED98B229A61D4A0ADFA6E7CB8EF07D92F69BA316F6690
+02BAC63DF03E07BF5DDDF5C26EF67375032DD9E1CD0A4F9DEAE0AEB79D3BC2B2
+A084661D6DA1DBF6B5AB2047BDF4C1A52856524E17ABE66E38A37711FFE2C3AB
+0FAE88F096CECB55695970A1EB99491DADB601E0872543310D4335E11FC92DA0
+EC1E364D1A81CB3CDCDA4ACD219104C828108D8F75EA0990D6F39F879A58A757
+56709186B52D8BDD9205E22DCE70F81FF0DB0F73D7BF22906A9DC9A95AF8452B
+40F60A11EDB522C9C8B1473C1B7409E95C520E660EF08F99BA405F44CBEF56B4
+388ED1E816AAD6C5DFBA690C207D08DAE204826183FE0C18261EB2E51B594561
+D88BCFB02E70054F35E0DE0F31B15191867079301EAA85D5FE398D83F08F9FF9
+054E00968650A1546AAF86268CD31B5769B6CAB63D5539D67B426847A822468E
+472A5BCFEA9DC15DDD0ECCBEFF03BEB6FA5ACBABEE7CF2A4CB7D85388BD84649
+4ABAE15C9B52FED3B8C9AAAB550719309764625EBBD5434F4049309FCAF7571B
+377C4DFD355A890803929CBC4596FCDC5875E36668E891E1FFD980B8FA734931
+632D59F23D6A80FFDAB866B595A86E6EF798FBDF73C1B0F7073F1C671D641F55
+9757E3459CEFF505F1F35CA640B572F985717C6E5CA9E6C006DD797B3F47E0E4
+03AA2294E550C63651FA76B2C32ADBB897A3F6099D211A31081AC349B67C89FA
+9D2BCDAE1BA92DF9F7B8AA9035783EAFA722A038AA94EBE8453B4A7C1C875090
+3D13D7D2843E9E92FD2D55C5A31D7A0FB86A63E6F39D8A2E285AA7767EEBF42A
+ADA62726BE511F7283FB148079086AE4A4148CD3B0BA71D2366D02DCEBC34EBB
+278D4869B09CC8E191C28D212615125A7BF3C7ABD0ED0173EB04751EB4AEC783
+3E781DE01956244B1502D5CCB14EC3C1558F44BD8A7B4C5235EE01EB9787E3F4
+7633CF9ACF9D1B95CCD78FCBE8B015FADFF6961D960DFF37AC63E5FCB3BDB0FA
+455935C1DD9D3D0D6B998E83E562A0CCECED8BCADB546D4298854C3E760A34E6
+63AB4419351F5567DFA518340EA5E8DFF2C63E8A8862B992C3BF020A514EBA10
+718183819DA30F6DCF7C47D94845835495E3B69FEF796728DDFE4C9E2E32D163
+E02393F60133F2316BB88A3FDF7BCE977CD1F23B4735DA3DC10631D5716CDD84
+A9E67B3A60493AB9589026321993D57CAA1E68A8E15BF7CAA67AC1C33A5458B5
+4D6FDD851667B28F5E50EDFF7051F2A934BE94F86D5088412F5720D25A480D21
+CBD723974537BD0D8EC45B84FE50B15548CC910BD0E91BEEAA1966F3CD79EB7F
+5111A9E7597217524A812DD4C2FF71CD57EC7E368A13B56EF52BDE19E34561E6
+58AC76FC258B6CAC1AB4A5564F90761D0A9EF18FFB33D27AFAA073B3228C22C9
+E2D0106451552CDB212B28F3597D8B652F03B94DF3A980C6888D69BD8597C73C
+5F9C6FD102453E2DE1DA43F0531BCD09873867BCCB7D2A78E8205BDDDF4F1602
+6A9B9C370F9EB49AB46C6686BB5B74A65F0F7BC4A6028BCD93CA252785E8E27E
+F0ED475B95D2819629AF5C08BCE99EE7F5AD89152FA4B6C5A06A15FF077911D0
+F3D99CCAB72B83A877508AD5AA2D8551623E22B1CB39753D61099184D035B063
+69B7D8FDD9AF3515AB4EB6D423E302EE2D0D6E402632D9FD28BDC27B40157940
+809A7F580610903D5BB8D3AA9B2D7F7B6512C106267D41B3644A21F2D8770E4E
+4A69BAC7DF73C94BDDCA5A54810FD0F4CB27E4583D1AF77A631DBD0F260296F4
+E61B4CBD7641D80CB0FCBBCBB03229D6386111E927B91B128E601ADF44B8F481
+99E9941A3E9E5C4E791D822C4DA3B6DDF7D8E01FF3F4264C61E8A779BEC51DA8
+FAF47F90BFEF18B8A02E27C4F98A2413C659002232AD2FF6F556F90B634A4F3A
+220E89D77C19E9D9AADABF338EDB3C0A0FBF2995C8BD1FF35826988935FEA5EC
+C36D3994011F3FDC88581F9431335719FBEA6CA09E232F3D3723937C4EF79E04
+C1026CF28D01A630044065B894C833F83254155E92B0B2EA97F1F262FAF419F6
+7C665F1675CBE362A3848613677132FD9F8674B23937243BDA27D8C17521FE63
+7950087A0D9E678AF1814B234127353D9C9BBDC7A156F8A67B45B3D7708B9AFD
+4647790FF9E9AC3CD84D67CE96E98FE1FC45526F0B1CED5A8E6E1117342DE6B5
+966B2B006F3475210B2293769BD5119042D8D610BF2A98A8A749F99F54537A76
+BAE6FF65A536DF5C93F04CBBFE4736375CF9FE05CD4444D0DC75D5A19351AF7B
+E3708E72FDB3246E2ED29E8E2D1DE84A547C72450185FA82E066369D37467725
+6ECA1771A162DBE738F68EBE829C6F4297DCA6AC1C58072015551631C88DBFDF
+1887D5CE0726800230AE561F8B37880C536F39C70FE9A3FECDAFC92DBF5726EC
+8B4D486AFED75AB1FBE9468E449CAA33D450D68936A5DC20F9E179438318F5A8
+CE9D51AFB937162E7DDD1AA3292C17BA791657A7EE7DC44E80D363B0A0A26E03
+F6DD84E89D28D7C1C3ED347AF7FD4816B66FBF56A4A551776FD3DBBBAFBFAAA5
+A99CBA77634AC5FBA9A02B8289E14FD064591A9C1DAFBBA02F44125B931ACC5F
+B94304B22DF6D09845415B0FBAD0F206E809EB721B7D57B4538A364EC470CFBC
+3D9D30311A4C98976498DE7B6FAF7EA6385B2F6BC3F913517083EA1A03BF3A37
+28B17D9D90DDEEFFB6FED93911508F48424A2C7EF96FF5F7C2BE572C6BECEDAE
+9895E3364C10ECF70C24CF1F16C4265E4AE26E8118AD1CA54D17E0E5E1DC3E54
+25A65F2180CADDBD660CC16034A000CB321E3F55C07039A5DAE31B9AFFB2A33F
+E85C43EBFF2216229FAFF16DA8B2E91272C20A3D44BD9D1613347B80FC96D23A
+E84FB08E2C4AF42E48C6DBE656C1593E1DEC2E3C5C5719AE12B5507840D27383
+5D8B266561EEEC730072BB24DC7E734DDF6B8E725E9205AD2DA26A517478AA2A
+531AD334BC428F48586FC2DAEA9D262B673F5F3FCC1EE33C0FCA58955E739C58
+75306B3CE28A091645670B38846F56D438561B84D7DDD7FCD31A7023916E0079
+FF95D359F472198BAE4628F8097C984B094C5601B8BF3AE95BD8F7ABE1BAA6A6
+A4E073756A2140A266B01B1D31253FA57BE714282F88960BAF37AA5DFE4FBBAE
+9DC32332D7C578C5
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.1: CMTI10 1.00B
+%%CreationDate: 1992 Feb 19 19:56:16
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMTI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-163 -250 1146 969}readonly def
+/UniqueID 5000828 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
+21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
+06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
+55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
+B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
+0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
+1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
+7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
+7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
+356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
+19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
+C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
+244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
+AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
+5C43C8942435D0AAA3D9055FF808F2C3C887A3C469BBD98F026D0A59E26BA9F9
+C2144CFE49A9AD892D4D31764F0AE3A10644AE3966B0A790684B14D11FA49785
+EC5565D2B2E584CBFD85125F3FAC133338DE35361943DCE9AF05FCF2840CE512
+998D42CBEC52B57B79DD63F00985881E8463396ADA47189A94DDF951A78866F0
+B8A3D9197E39335277EF2294308DA70065D910943A34F7D5F2090FB4AA42ED70
+CBA469A9F64B95A6FBA4BC89DBC93765E3AE4723162DF3F9D6BDE77DD5870ADE
+C8900D6346957B84C3CE88A8F9A12D46B8FCA50DF4433B0B8AED6A63B3DA102B
+6DF94E62408E24154BAAC66B2B249C695BC0FA37A28699D9C0F3EE94AA32E3C5
+8F8D7F803B5D25014D43A353D719B14B247A87898A960DF68C0C0BAF70C83917
+6E9F7B3ACC64DBAEF3FDCD3A80C0AB907EE342E543D607556CBE5A9089B86D1D
+E768F27D74A613F3ABF883222A8596B542EBF54E9DCE327B5682AEE5F6BCC38A
+2A052EC4018AE3189DC1963BA39ACDED8F0C60C83F8873FBBF0302010956C520
+A7F3F8ECD0F177EDF5F4D5522C5984A3678FF32EEEB570B69C142AB89467641F
+917155D646DAF3352E27BF2AA0746E062E48532256AF364EFC0F0AAE3766F68E
+89DF9AEAE43DE6B2E2EBCB666FB344286445FFA4714A341419C7FE51D43CF1B8
+01FC0B0071F73EA4FEB08FEAB64FC98F56EDA5E27B7A71F1F8E350BD94C093D5
+9A86175C46B78C65BD85BA347656778AEEBC81467970F644D32D6F2BF2A3F14A
+6B05DAE8858A02D212177F15DABAFB2961F2746D4C3176FDDB5AB9821C57C417
+0C8E0DC8B069090D8C95DCC3340643C68E5CFA60C3F41326579B869EA5D832D9
+85119A957DE314546187E8C4AD9841F42DCAE231C5FDDB483481FF29FDE695C8
+45FEC01A911F1390E3E3B80D59A30805601366FC0535E62E0CD9EAEBDE4DDEE0
+260B40C3F20D80944ADEBD496A4C82985FA55362CEF5AA91377F3E5E2C3300AA
+C24A28B5DE446EA56CE7173EA3A3983F8A39C1C04DC1117A9AD9EE90A6B0A6B8
+340651456ECDE5360D8CFC8D88EF157B44EA6BD3CEEF3BB89425A716D03A671F
+E2DAC845699F8213DF6BF7EAA0CCE93CFD7557629AFEF755FD9506F006789AD9
+100BAEE1F8DAFB9C55DCD2CF75ABA02841B88EACAEBFBB6A3AE4F145204944B1
+1B7EA32D8730B3E29C5D0CD64AFD23656C6E462ECB6CDF4757F8EFC0CB2DDA8A
+91B79D3F44A59B587DA59DDDFB2BE6AC75606C0A1F15CDCD27C6AD77C38CA62B
+692230D98A504D41F645E9379A8A8B3F95F33E4CC3605A9B44422EAFA939C4E0
+19EB1E3A67FAC6E7E905F92B1E7F35F150F75364B22B71B8DAFA0E995CF30D8D
+119A9EEC79606E9B038E4B4D449653B0537907789B54D8E949BF20BC6AAD3C0E
+53075AFD1F67865A1D42AB0945534D9C59AA91C7C87275E2B3024CECBAE47E64
+9E6190D0E790CE26F88CE6C0F7258FFDEC557C88F5560A756705B2D8B0B2F1FE
+279CF534C2604BB283024ECFB6AA6D1496021FCAEC3390B01DC093F7D04C9D67
+E2D77BB40E9035A1C41632037B5DB63C6302D464ABC9FEE829B742105984C3D3
+3AA836FF446D394DDC7882C3A9FF355340EAA8461CB4AA082F03E11B6034DA2F
+37FB132E23E182E74333E46ADC2CA82A58AC483FBCA5FA6A0B7CC69FE75339E9
+58350D7C0B336626ECF2BC024FB5712BA5B3F7936995FD937A4B1EA5FC4A6BFD
+050B25C5DDD3B64207A90097897FAC7F0D5F8C51ED0CD8F74D9C3C6006118B69
+0A3C80BF08509EC03A7712076C9B789B9AFCBE0848FC16DFE18C9043D2C62CEE
+21422D965A6A398D7E3880C18461D16B0805FB95F5A7429D35F707C9543AF4C3
+6568A1CD13E4D551C4D391390A9FD45D993B0A27A327B9E3E6511B3EF6C14BAA
+F972D98A7596CD6A145603D942F59FD2081EEC6978C7AD5AA04683291CE5CF85
+1CAD87DAAE0FFF00D14AFFEF3472F8413558DCE88E196647ABE2198E401ABE29
+875BBF2E2AE0AFB0C9A262F60DD9CB19F43BD16CD90B199359A01490ACA053B3
+77A76B7FB98A3E096A4C376A9DF69C8B91F76ADC634B4AFB58ED00C9655A0E7E
+A0C55508304363A82C81254D827FA1911C16D49670A63E4402BD78A1F7F4C616
+4910967EF94276B30AFDEB5724EA1F087D572BE403B0CFD786D5397453B44DA4
+A3F91FDF0789626FF3D8178331683B1CD16EBF7F97742AA3A966B8BC92E87D5B
+B529CA5522D31A6EC30BBB4C80023BA8887D87DBB8FBEE8524409A554F5282A7
+F2D389139DBE74563663CE5C839DB39F9390CCFF9AA3AAF8C713A5F60D2FEA06
+E069A8AF06B118EE22926B6AA67AC8D9E8F7B8C95C6884A2816BB1BFA71D86A1
+303B0448D870CB6D41006A017B26617782496EE396E68F8501F6B0ABC13EBB88
+C1AD1BD3C33DF6B013B8CD034F268645A2215713874D66C21EB75E65A2A88AAB
+6E83D74DD9D509F2B0D4355D528F9AD6A7EBF6ADFAF76A9220573F3E6219BD96
+640F535F5F0B154FF77B5D6097C6D13F739E9AEBE8B2E745224EF1AE4570A437
+0086BB3069D29059EEDD760AFF1D448F69669BDD37ED7FD90D5B18B055A9A1DD
+D1237817EEFEB2C4DE9F27BDAEBDC0970587C9AFBCEF71F45CD7E6199EFDCBC0
+0C7FBC2BC922289493C40FA7C624A1AEB18133FC0B5292EA905823937E82A2C2
+00081E0DB58E59DE2D0962765CB54FCF8F9FAE24ED3FC649B1B4C2B1B7A85425
+B637B0431AA42CD8012D6FB016B984DAB93E0794C35EAD838B750DB8D3D5CA79
+E89C09DFFD4FF26D29BE719A1792A868DB70004051C3F801DF00CF356A5F2083
+CEA418DDD9C73F3DE15D1E0B1FB2D3A17CF92321E155AE4940DB50DCB15A333C
+622AB7D7A004348BADDD7ABF5B941463BEF9FBB812186CF17856FE4474DF7C4B
+6261E8D0FC262334A4605F4E6AFFD23F0B91A54C83638FC7A909694A3EFF251D
+16DD6B72F4E90C159EF9E0F2084795E93D4C38606AC68D72E28C5D9AF4FBCEA6
+329E7617D13F8F81B0F91541A53B502EFE17D2776D7286BCA63A6AE78EADE167
+32F3F3929D941516A9AAF2D3D26AA900491CE534BA3FFB14D60FDC6F51D36FD5
+20D2B2C17A8751F02E90BF48B080DAC2BC7601604D97BDC0441D08D31E8DA70A
+528239646607E9AD6708A8E401229DB8DEB508BFE65582CF91506F3F627B24D3
+4D7A8BF6C5CAE1A0BDE435ECC247551935EAB94BBA6BBA5BF1DFA673F4B5060A
+0AA6018F6D67B86E5437D3AF6E9A3A68AD7BF229919881FB6FC3B48FDFA51B1E
+9AABDBC1F9E8D97ED2B1FE2D465F6D7CE514FEF2B62276AA872546A0E27903E2
+F1D0460EE43C3806EBD9EA14C41088AB8AE0DAE60E5CE0FB63A226B232F78A7B
+B6C96617C75BE615A510248A4FF3F09F7AD0EB0B104BB0EE5316496390A0DF28
+BED8A07237800A2FF3D37E3880D3602459C7BD5A92F393595D4FABE161052D34
+EEDF37EA8885564680BEBF27DD504EBDB28413CD242E181C07F2038EEA55D346
+B4431A12F580300AA1D2E12C9CEE10602D63852A26964E5523B1040A86A1B33D
+FE271D325052B0A79F2A736DA669EC660AA60C844F2A08913E04CC92800A9358
+5C0F1A4164140397FBF75672C7366128A2A3DE696901EA882DCA6EDC457D6145
+FC84214EAB132905FC7529E63022CD7E08D828E47B5C7D0BBCD171F0C0788A2D
+BE4FE10CBF36FB8DFCEB0702365B4A58F8DA9F8C24061970B47C39E0153DC714
+9EE93688EB1BB49F171364F1BCFD69B0B38BEEC512841B7B59F48E2BDF0C8232
+3CBEE59A81530987299A450478201B8FB8E98B0F6369F5FE50106C3A0AF03D98
+49B780C7FD6BFCB03677033FA56127E28871494281C0ADB19DB2D777D299FE76
+C262C2E999F56E64284C4533AF281C1936EA6174AC011C38680D10829226B268
+AFF13938517274BD415ABE48CF8928DAD48C10852C257858F2BC616499086BE6
+9D3F0A2F6FEC61CA36A7271549AD623B6AC984DDB50A603D5682718730E7D200
+CBF0518D89F46E91B8580D8E9902018EBC8B1FD4D1A8648EE790A5067A2B2F0F
+AD3A4AD02F0CFA43E612C2AE8E758AA1D80989FCD00E41487E3D2A563B2369F0
+E4DFF0582EAD6552253FDE8FCF3E1DDBA63185E512F41193533E21BC5EAEBD92
+A48DF5F64384719683608F1DE5767882784CC7B5E15B2E296B5303BBBED04074
+9CECCFD4ADF441ABE8F689B4843E9A23D6F49F93A28E8AB4B16ECA7D3FE5F5D0
+2D615E219C92538BFA1B4A69379A138E54E640119E9DB26441D797A337494517
+EFF7DF0429A7F508F8DBE974FCFBC97D9D1380BD012B2C20DC36D2337F259AAE
+691A0705BDB9394DC90A1DF5C180C033A0D139C1B12E62061E05F9A2551B7F9B
+A7A90850ECB9878A9DD62FE08100A77CF9BC4BE11231F190B741741686F48FF5
+A19AE1DBB06323E9A1BB20D1F4EC8A845FD8C702C4E9090BAEAD6CA0E188F1E2
+D26280B587334AA83E36BBF96AC652AB10FDE648B364235582169B5CD5F6E65C
+91D1224171D25026FE6C030C29FEBCC84AC1D4FDB1E027952F00658B3EEDF9C0
+E498969539211F54CEF79EA07E8BE789CB88A7D0DC064C6B138B0A08E78FA517
+A466F534A15C839B94D7643CFB51C8B0D83522479542F044B14A751D5EE125EF
+08539F8A1FE1C0F083747BAB9CEEB7940BE0DED33165DB549D8E91EFD50CB8FE
+C48BF3901D4515FFE1F82CF7155F7A441C00D380EDB2AC81A23114BF7E2CAB46
+2517D67692C1FEBC62EEBA954BCF7407E096D839C9998AAF740B2F6503B4B40E
+A85255E6AAC61D6E83E25D205DD4784EB270CA150F639078DA1AC9B2D2338488
+C0DA863DD9FED4A30C6803CB601883E95C1209D1E3572EDAFAFEB2D5B8F025F6
+84765B31CAD2D66C3AFE6417E2156B039893183C7AC26EBEF0001CECCEFCE180
+511CB2691E429155ACB128EA2E33E38434467F89F9A61CD996921C8B378B72C9
+EE97FF7AA8D2CD8797037892209C10F5947350E7DDC33DC6A01D23374CB1EAAD
+537DEBF3B575143F6BDEF20DE12B2DAC6B522F7048E23F9B22B2EC042DBCB851
+5B392DCE99C783C870EEF9586D731732AF882401E812C2A553D6DBA2D78C324C
+A653B748A155C1AAE475B5B7D416E8E4463AF3CA87146BADBA7DB13412C94949
+317812DD7BD9F9945DCBEFFD7C05BA588714371AFCD0147B0F7A5DC66E0F0F7F
+4B597E49716029FFFAE90EF4A6D633407CD450BB2B831AC6289F449724DCF278
+AEFFDDB0D12BA46B7D39F11888A50BEDAEAC715E4B880E9FC41C635463BD99E1
+4C401E5965405ECCE3AC654A2AFC59E95ED0416C797E5F145724DCD5A293A717
+9A977A438CD5EDB02D1208F8A3CDF4E00E6D6A188DCFEC2CD5BF86CBF61D7C67
+A1A0A7946A35D7E7AC06F71DE671E33EC9A9ECA21E966AB453DEBF483D36F688
+9D03C08AC0B39B8FA47C704E1B7522ACCA02C9DD0A21D47C0A4E007C9C2A6F61
+C0BD63CAAB8FB38E4D9775B42C49C33FC4A10AC96F71D2282E1A5C3CA63AC981
+3F84C84EB68C4225FC169E8BC6F0CFDD7CBD8EB98A49C1F60705E8F3686EED4A
+CF7E7FBB6630537CACB9C8A7F75DAA999BD91F88AA09F399AD41C19ABC746E83
+93CEC3820496D0C0B4EB224AE6286A637DA5DE
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBXTI10
+%!PS-AdobeFont-1.1: CMBXTI10 1.0
+%%CreationDate: 1991 Aug 18 17:46:30
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBXTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBXTI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-29 -250 1274 754}readonly def
+/UniqueID 5000771 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF
+E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207
+BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3
+3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2
+F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707
+C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E
+BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632
+2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1
+879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D
+141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF
+63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46
+4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B
+FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD
+395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003
+82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1
+763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019
+165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E
+57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED
+E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5
+178DAA7C97C35EAFA47778CE03E863303582D8A9900EF4F8DA879DED54BACD7A
+4A50C18AA2ED906FC4DC073B1E6CA1E3855AD5B7698EF4A96B77DBE19A12382A
+CFA8717DE230CB6182F2250885B8E90AC42A66484A7B527061B223A6D1CC72D4
+890359E7E04690BFFA99FAB5CC9999F0873A9DBE49E33F79E483FAD72313DF9A
+7B7D926461988C23CCE9F71AB7BB63BDB2B10B3F78176380AFFC154825C9BDCE
+82303FBFC3B59E070438984C28D12E8655BBBF049125BF56DD2B0DE8C0450E55
+82832DA59EBEB001AAD86F2317460DD7ED264611B9043614221ECF
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueID 5000820 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+515DB70A8D4F6146FE068DC1E5DE8BC57033D79919697C81395D5B94C3AAAB11
+52D73937B8F82D3E2E764DA1B3BE273CBB84E4B1919CC1D5586C21F6FC23BF1D
+82DE5A8DFA3E8F5C25622AAB9F7A588532D13C663079C8FB84DA6BD4D2DEDB2F
+84CE30D0F188EEA26BAA650B1AA18C7D241CC179AE82933C45A82BD57808E2D8
+032E1ABA37E4FD8E27AF35326011B8BD7FCA4EA71B5FDB60F7D63D0874B77656
+F289B324BE95E33A9B732669966C96E64C4840A8EDE39410E6F6F0F027063530
+B760AECC1594FED97FDAF84016D6D7CD8358E062040143593FD734B7EBEF810C
+6B1B941E0676910D0A04466C27EB62523967DA65748264D137D8ED841E3D36A8
+06761884C9AC0DE7C88FBA06B933E311EC28B17428C69C796E3F14C6E7CF97E7
+9FF2559E5D1F9EA00554A5995096075ED8901E2F45E76B2C5566E947E41294B5
+9BC17D2F1AB2C577F2710540F7235BB4569D2FEE06C8E45C8A1C0BDCA78A43D5
+7A687297D36E269B9EC59754EDB5DE481018BA228AEC200DD877D3E5DA7159C6
+50F4D7348BA64508F84DAF7FCF01B8C5ABFBE5861D4B32F9E32C7C4B2B6EA064
+F179E8F62E3A59DC65FB475A3DB61C36E43AB3EEF286A50FD5F57277747CB7B7
+78284143B3F0196437A1DEC9E61454F80C6720D8008EB945799236677E7FA331
+E091CD5D924C48EF02DEB2B54D8EE02897C481C815C24F15A7548E2ED908E3DE
+3763983CE2ED0A86B6BB97B4626F1AAFFAFF27CEF18947AF2EB40D7124A122C7
+6A6ED9E0528A29F7A238DB73B95869018D40674CEDB9A993B6C117FADE48A8C5
+C6ADAE4960C0D56F3E30ACB38CA8AA8443166BCFF6A5FC2177C6836859CDE55B
+E0F1E80605C8670AC34DC8E8586ACA6E1CECE99C53A42C5730
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSL10
+%!PS-AdobeFont-1.1: CMSL10 1.0
+%%CreationDate: 1991 Aug 20 16:40:20
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSL10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSL10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-62 -250 1123 750}readonly def
+/UniqueID 5000798 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
+08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
+30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
+C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
+BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
+5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
+43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
+374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
+DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
+B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
+63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
+89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
+5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
+C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
+7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
+EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
+4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
+7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
+30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
+2E080C10DE923C195ED0A46BD535972F0A59D3977A0C4E4C413050044C486CCE
+9413D853E3FDF83C84B0A7E5FC5AA859BD382DC2D94780F2B9FACCDD437183AF
+E656EDA4147CB501BC39013529A953D6D78F640BD51EE6D1526D1D27F2538715
+2BFA7F33FC8CE7A1B811D7E4251EE8C0640097D655F9EBB15102F85DAFFAB797
+0E07D701E1BA93C6196EDE47DCF0491F102A3ADD983898E72900D1398033A2C1
+CB464B9EE9A47E7DE97F7D4ED4E99530C9A770F43EA6FFCBA27C41B4668C6047
+FD5DCECE8899E1603D3DEB282DFBEB30C8040E7EAAB83B8E78B2F7F61B7E8A77
+4C544F5ED83E5056EED08C1A29221D05A4949A0AD635D9C930F7FE8601D74FA5
+33B2F4FD4C29FAE4346FE914B123BA9CF5BA732FC430A128EDE270E3C60BD7AF
+CF54674799A0DC1C214E10BA5511B29813AF2E3768AE494D240EC647D9851CB2
+EC38976C6D8763F8C413B8CBFCF8EDD0FAE02F72C6366F5CEC2715BB7C90440F
+2D7BB30CD1F107CB2340075D2A0D9D4114D644A09003403685A7D466CF47362A
+B3187106FB1E2B32D7FE26F9231BE1AA87C8556A5421528BF5FC0478AC567DDF
+EC95E6151FB92C7986631F641E23CA968DBDDC42A5880B89CCC00F09B82ABF41
+F72B2F9F28806308176EA7081DAC3DE89BC389FBC54E60D2C6B666F18562BA0E
+32B5906EF1C2B6A31FE0946E648C73142ADB3136E7D2BE4BCC42E08DE3A5F02C
+4B8575B1A296F04735C0F30C32D3DB7423FBFE682109815234C88BE292C8F313
+F667207D842DE2052A8D3701AE71C44F6C4788AA08A967D66270C5EA7DDB61C7
+56D7BCBD106F1CF4EA7BC3A532CE23E29368899E7DE2175C4EB20802FAD3E840
+FD7B7B9956777195B646FCA2E5F4ABA05940E269858FDF5CBD236269C9FB0621
+C8224C63BC120EC8B8ECB643468C468CECAD06EA59C1CC6131F8091ECDD0D23A
+419DA3F684B229B64CADEF0AD3314C91186EC445B596FD398F41880FECC56453
+6459474EAD902F020B750E99DE425498DB3ABFCEF48305FF9B0C412ACE5363C2
+75EEA02FC8395179DF95E2A257E273F07CB0B899EC5E5AC093C9EEC345F6FA2E
+AF7A6FF8AC2786F25DFA834FDF023B1DA2C4301D807999010C5EFF3DEE1EEBD9
+F4D888F285847810A3DA48BE7B63D23D432231E1C3FD7D7F249A68DB43C0B439
+6EB0ACCE9083508830ED8BA1D9DC575938B07F07D9DAABA164281A09C7D00FDC
+78DB17CF89185DFF736892A6741CAF6B3864E92E7DE32A677E64B10C9765F925
+CFF01D76799957C8E2A4789CF754E9352C4957520A1D5303E4DFC850A5918A9D
+B90735BED913175122AAA4426917ABE09DC19218EABDE6FEF861669F60819DBF
+6A76690FE9C9CD86851FE1D1AAD0219178779037A3C0C66589ACDDB712CD236F
+DDC950DC13E099B747F7892B0B2DAB00161BA35240DD4CAE298B0EEAE5A4A2E5
+4DB38F070F3985205B2391FEDC8AF24256323A68AF8FD7A62BBA1A2F702F5402
+4EDC17889993E0D56817E6D2AE1469180286651F6C6643770D0251C8626A2A6E
+2CC25B87A3A520335B2AB1544807683BD52C3B8C3DAE7AD46077BC08E91D0701
+387312C9481A4CE788A11DF9E94A5700EA62581EC3BC2D0DDC709ADF5ED14CD2
+6B23D4480BFFD15828AA39A5E6A9BD9ED07C03F3B9528FEC1328AC1B35B5A1EA
+C0BBAB5E5ACEDE99FF0099625897168374623C391A76441CCB7ADA5B458D0EFA
+B829328D3A34C297BC605B3979C7110C90FA41295C25F84616A8F79A31B4E6D5
+B6F443022FB9F3AE6A0C23DC97F1811F50E38C254126EC2B9DD3992A6F61DED7
+02C3535B414C33DA24D5F172A6B34AA29336AB5AD10EDE4DBCDF08574BAFCAB2
+25D741156747BA56BF1069EDF0EF8AEF00C0B98860E8928DD5FA7600B2068188
+CF933C1C23DE74BDA86B3680D1E81401FE2FFF2905DDB015ED31F68F57BFF691
+DBBD798632E85A68477BAA42755C34A14D063059F88F411A0FDF0DFADFDC2F7F
+B77353A472CFF8B6C420C535288CB18B0B0CEE480DAB9A767F2F6C7C427310A9
+BB1FCBC48C194E91855E54CA50C1EEF64B1BE0F7C8CEE9E1EB620902FA40DE3E
+96F962F6E38B2C64BB774F45BA51986434C8E25716EC38E320D0914F68645DCF
+67454133BBFDD4AFFF0A8ADB82E9730F94B17964A5E8A4FC1D630D4C7A9CE970
+82C0B79D4E4B98CB3E173175CF1DDBD28A47FB67BAE582F9D072C1EA0B5A2B42
+988B173EFC21F67BE388BD8C9D1D83D4752DD5A6CC8DA57A86BEC2FE2B1E269C
+DBEAED127C4526C27FD349564F988DAF675C80E491162FDD7BCEBD7F3B13153C
+2AFD7F9D5CE941C6FCB0E585FF99D5706B3B90E630CF4985BD5CAE567CE919EB
+2DF4C66A7F366F68009E80373C0A9C386C1D30CE77A112C2BC3C59A2EBE50225
+75B58ADCB776094FCCA56C3892D8FE0911361D3FB581A7F2B2DFCA79042BE3A5
+80AFA160903B86CD46C65BC4BD9487928B06F6E387E8069AFFE9B2F784C0F722
+53E3FAE45E96D993999645621D2633035DF829279F51E25161A7A48317C904EF
+264642205EF3D61840425EDDF9B5B80D5F66D642F7C393CACEBC8DF6838E074F
+FB1FEDE41F42726CFBCC96B5BEF17EC26B27EF29087A163F40E3A1A777D4352E
+7E4E389F0685FDF4A6ACB6C88D997250104A35E879A0C0203BFC3BA7AE49AFCB
+3E8DFE3ACCC3F4A7364514AC94346332EFF06D7199CC29F017D9A21AB8731ECD
+1E01E0CC9B503C58A7093B2FE69282AAAF604849D7B916B477673CEB81C37AD7
+65B3CE3EA27E158868CF723F803409E48EE3B5B68D5116ED1276C95FA12C46F1
+EF8633329220C07A6C5830EF35E5F510F50A762EC69C0C4464175A7F8556860A
+1D8C0CA834721A33CAF6CDAFD6658B8E0FFE72369B355AD2A854D6DF4D5E2922
+EDB5DDB055ED9E349AA71B211A6C07ABD6A9184CAD668AE16F0DE68D7ABDAC6E
+1AD0A61EE9864500045F0F033303BBA2879BE36D4A52AEAF51CC1377A85D326D
+424E03664C527F74CD4466987C232AAA468048E5B517B79E4276EFE4B9B881AC
+E9BEC15016A207F3B270507EA8477A8F97E8E8B108733B4DC48505F14E93B75D
+1AEB210FA5E55F8C6EA04AA441A385E336B9FCB337C53261659A7AE9F69489B0
+E4B38ADE248B90043A6EB0DFA3795DD111931CE6462CACAD0B69B185E627B156
+960F46F9031790770D6A8BD3FC3F535CE85FDA7E27629AA14B3D97DE676EB440
+DE7ABD25EE41CC51BEC18F707D35DAD24662EA4EEAC59FA0A8F8AE09CED2653B
+013226BFFB578ABD5E2341759B229CA9D1882465784D5BCD351E3884620D0A9F
+075F1EA689A99C7F24878E8F79ED2AE6A8536F9D1BA1C07A2DC05807C438CA44
+F3E9708C877AB2BDD3F6467C39419606083598F1BD22DEDE6CDECEA07A838249
+1D289F98A1108574C5F13B25E2545B7146CD9AF5D11BA3DB3140EFCC7365C143
+DE5C87525122EC71BD00E3ABF2939DA6BCE4EE64C4B56271B393F3CB00413620
+B4AB8AA010B38FF264E76A5E74F1EBAD812BF9E7E0188F3308D85434360F124F
+8E9B24133BB853F4E64D973254E304BE6EAD60E2343DD994E61C26C496B4517E
+69F577D13817EB375933FD3FA53C9A1BF02A89CDFC00296E2A2D2689CC850088
+73E181933D90A88078AB76EF5C50598AFC12CEEF15A2BFE3C87B773B7FF1B8DC
+3F9A8D68908615F621BB695C57215308F69C069C24433349DFF17E8CA7273691
+845DE5B2B736CECA05A5BA8B3B61C04305C5CFB5E089FD4A8B9E6BAE31C4C5FF
+A84FBCB040C72A8D453BE0B263B223A8A9D1B74AA175F9AE02F2F4C34BA87263
+830A03CF5D34E060ED148221E3C617D1D4C70003EA05623C4C1F2082DC633E79
+A1E9D57A4AC834BFED02856B32DC13A39F39139D59F9637B8470C944D03A8D97
+DF61859A53954B7DED4738BFB91165EC60A44BB69D607AC6B70F592224121960
+E56BE9A190DFEC3F07EE60AC62AB28678F8DCB6A77CCF44B153789AFDB28CBBE
+BB99798FA478CEBF9C1BEDE10DCC704FC3FA0280EEABB6E909056242B7A2E193
+DCE348EC8587CF15D40C219251DAEA07854234A9EC835190EFD1CC69B3C7EC82
+AE57FEE324AA2F1A45EA3BDE5F60E1A232270C2105D57D3845A48837DFD389E1
+02293DC23B6E76AD95282017E91E7042D9734D82D46E3DBEE0CC790F4052E008
+B3792AD9822B94CC445AA1C9185466DD7D28A0F7D6A33D727A485F24E709DB18
+86AA1A798CC7758BE528C4300BA560FB89AD49AD57961E96799A1B31DEA2C715
+4E804BE9396A1AE54C7549E73B2ED2F548B042D8DED2B7C7BAA049C7D120149A
+A90B7D458D15B8DA6F533CCDF7E82D64A7E0CDEDC2D281D6B7E470D93849CF17
+2A579C3403F6FD16EF49C6F136449EED08BAFC1E0D03CBA37B4765BCA1F26699
+17E542001E2614D83877E37EBAD25029B97B94AC1586BC42A0A0C49066708051
+0DBD7B46D45A02E2FDD9F2FEFC8B1217811A3BE709F392AAA03D2F7EAEC828C3
+3C5EE95A5E273702A176ABB4B2C4BA48EE7F16348F650D426BC71C3EB740323A
+A8BEF22F6EBAADB73AD4C9883557AB33451A89DFBE25CA6C184A3C37F058C3A5
+4C6EFDA4E2B0354845CC6A38293891891FEF286712171E56FBD8B7A9EBFFF47E
+FBD889E1EA7D08F7A06BAF9CD988773FCD4DAE43FC6A9F80F1D6A56E550CF799
+3BBAEE0303933E02D1427A5842C9272D3D0A0ED94ECEAA9B82E81EDC54560F8F
+2A4C0D28B3264EA640491E24D3F7165A17725C28A6F153C742D01C7E95C79C1E
+8229B8183B8C10F00DF68899914534C58E2DFBF7087D7B6A3A4BF875F5A754C3
+B4B8713DC4EB1682B84151887B8461EE05A0C9FFD6F619B83444BA9ECE1D0C7B
+D17E96315220F7C341194994375CEA1AC7C061D9E7700B6B30B5F15A6A2A61E4
+25E6C3D0B1E13BCBE7FB89C24327AF46AC62B2EE332348B55D9E6D599D9FBD79
+E64E8BA6C960A598600EAEB080E08A0D9AF13FBC60218A9FB400D5CF3507DD38
+FE41BFBB0594F43F10EAE9CF159097226DE7706F34871A76661B6CB9EC1127DC
+09651E98E34D3ECA5BA7D695B27645AC8C16364CA380D45524D700A460051B62
+A69ED221BDA45051C1723796A305A3A7C85A62F5DFF7F7ED690DEE4C0BE2571A
+155ADB8BF7DD4E6B31AAD3D884337C1A2F99FAA44BFDA357966C77C35A435411
+2AF36766DC0BBEF0B50B742A9C9E8541C58AD964B26C47BED17B5BDD9C5520F5
+947E4B8017AFFF9FDD3BF15B2DDA6CD750E09222A3DF1D9ECE2AA6E22CC5FCD4
+C6746E58BD628558A7157B72F6370507AB0596FD4F4821A800A358BE7B62C7FD
+92131D308957E99FE4408ECDC0F48F5C747680992721F9D96B41B956C14F8E13
+FB260376C508F88D30355C94D0208D419F81019EE01A114E20EC2438C3894C79
+62096B4A5F6288116308FB98EB0DDADDB259205A11C56C6AC6C5E1C8FF45A25A
+F16596B76397BF54C3DBD0ACA1599AC886415E46EF99FD15C9218125CF0426CC
+B6B5BC60C0A14CFD116DCDCC3CE7DA6962B972AE23BCBDC5F283A807A63C1C8C
+9EDC5D95CBED7A9E1D63876A55C7A8878DBE0C66FAF5E7A680416840156FC63D
+FD8FD7FD12F32245B3084FC3532F3883DEEEFD52325439EDADE56EC1B4845CCB
+282FA0EDBC405ED2FC3B01FC93D1ABF06B64B2EF4D6FE40B6BC91D7540BDC5EB
+F3681BA084FE84FA153E8E11442A7840C6F7FEF98E346601A67885B3B0AE2EF2
+E3703ED14AB786488C48CD937E9DE8B666CD25DFC9AA9351338605D653BA6EC8
+16A18D7181B2DB084BB1D3E75C84D8CD3533EB35F150F006C6047BFCABDE14EA
+32FE9A0C1BACCBBAB3F6595E1D11D279A34CE66D0BDC09764436A23BAFC467E7
+A986D6947DE65B77BC8480B94E6F66F8B4D93FDB517FE1A6C2AE5FF3BDA37919
+6F34C72EDBD09CDA95D751CB5ADD93B422E98560EA03AFE810E1435490C19405
+C534026D001C4E2A86EFA7F342E3967059BE771E728361AA77E8C2F497442E24
+AB938CBA02C5FD0561A601BBA8AE96E8232212DB222C202C1AB4B4EDB4494CA2
+77221C9EE7810640B730DD31FFF60F2A05DB7FB80577A48513BB9A76B262EC6B
+751157FA65B47B7CE97D61DC0161877F89210EF3C9A8CEC5DBC5EDA5B9A8770D
+7643300C9C3A5D00F0FA18BCBED0295833612A57246D8184975ADF14D84C32F4
+BBF15E6BEBDA45A2E8BBA461D53C090C25BF7FD351CBF69CC904EEEF8D7802D5
+D14A4EBE6804075D2F742384749150174603F14519BAC00B220E83F7309D15BF
+12A0DC08230DBE23EF40048A77ED17D9F931C817F780C67E59ECFEA62FD4D8E9
+DEB4D1A8D28643C4E476AFB2F86FE8E5C353F08B9D0F0C10035B1737A7D51F4A
+6141D0000F04113A7FD710DFEAA16CED294E5AFC3856BB243E2A676794DE99EF
+660C4B522E5A4EDAD43C3A0A359B4B34AA9A59A6E2D4E5217553B790ADF45A9A
+7636529EF840879F18A34C3C2D5207B4D14C59E264A6415F142A7C0294597D64
+D02A28F126E774A31604FCC671E1BC0FF681082B2818792A60DAE56FFEDEE3B7
+6EA7A834D088E6D10B1673F3250D229F1BF59CE4D0AE3376E6FD99D883B2ED03
+71B72A3F679A5DBD76BD2FF6C04435D14364C4A61AFBC0D5B31E48BC631C0545
+DD3C1C0FBF3123EC3944C404D37398D05BE3756848E59FA54EE7C34D0D5382D8
+74DB6A6E70C7A5AAEC7B941B4F5D800B226D8976473FDABB34FDBFF2C6016FBC
+5E34BAA392A29B7CA9F667D609EA7A391C6067566631FA910BF17DDC0CE56F37
+A2E6A22228A4A0AE138924F09275921C8DA60D818AAB8C2B06108DCB9A85D6B9
+DF6BF40ED6E86DEC75A2DB917E605C1735D5896F29D762C77AC212994AA2F9D3
+96857C5A2F3E86FBE7E34F34D8E0CAB1024AAF59699844CECB49D7A429F4BD02
+5567416D4D0152C3D0B6B77D7104B20EE19EDB264DF437E51F4BD92D21873FBF
+3D35B2EFCDC5F146491099BCBD3B381AEE555FC25A7B0713FFB082389975552A
+825B8762D630B204B99D97E0F0062B358E1E443D65CD8DF3CF8284CF38066DEF
+3F130A06CCEA592955EA05F416E0F67AEEB690D626728426BA54BC4C4083CBD0
+F3F9A0E7EBF3B1489C019F7A29FA78F77D8A96251B66D73C7C858E2B7AA768C0
+31CCD34792D6D093643502BCB4453C3D5DEA5B577EF92D3EDAA22E90827F3573
+A811FF5C5F6697AB88C42291498BC348F4102BFBE007D68092C0057DD8576A9B
+5BD032CF7196103028156CDFEA122F9A7101F0DFB1C73D3B5605A73C1B335EC8
+7DA6B4CD39E976F7DB91CDA187B1CB4E4338F7C72873F24D5C02934BDFDA019A
+69FAD10C96BD82D12D07A2EF76D86C3082E1D68B0A4462D0635A8F15245EBDA4
+4EDBC69D510B12637F02ACEB3A1DF278C4055B98D77ECFF82BDDBEF4C5AFE2B0
+B88A9EB5333AE842093A80E2064BD36D5D81AAB9D80CAA04B55943FF5A1DDE94
+CF3CA32648BDCFAAC88E72CD3ACE65C880FD8BB75B11A8A6ED351524E1DA35F3
+13466B349A3E4CEEF0C1160B1F95643B500A171B33ADE7D55F4EEE1934952333
+2CBD044D07A12985D93FE51C93EC8F629DC423458C1B631A7364E17B07E89C40
+256DEF8A88897ACA388014A2C6969ACB9B3AE6925B4B4543BC924061EDCF86E7
+F51F447A7FB62E03A05EA6FA2DA1CD76615680FE009621148647C7C74E4BC6E0
+B34B356A3CB8947E0F775AE6079FC4594F39A4B8218E5D27DDA4583D9D5BAF07
+009CA08E3E08E407D0AA9EE80E3B0B049F37DC38FE8F7FD055CE316D72A6993D
+60CAAB09DB8A899E5EBD8AF11BBB8B2EA8E644D2B6CB4D9EED9266EDDC3A7ECC
+FBEBADD9506987DE2945A65D027DE828D5A12FB0D6AEF5D6A2035421DB46313A
+9CB95EEABB6F5A87013C3F3130DB32B3D955D22C9F3095A19715D341FD118259
+C661FC30E9D781B32396A8A2EA06122045D98EC5FCC6CFE11AF9B2A2FBBC99CE
+45925EDE91D6A964B68EE20032B96A71B48DACDBFC145B6F6DEA7F011DD7B246
+D9DBC3CC6B1EB35F471FFC463E8444F1E1CE43D3D41A113D9601C12FDD755E34
+86B8202134691C4DA22717CD3F9F958CC6E7BE20CFAE9F10EB67C0BB58E40F17
+5E3A142AE71E3619B1B61F706F611496EF29DC07111BEAFCF4D2979D39660C0D
+05A8A2BA5D2E0BBE2F522B6BA0A39B27AFB2FD2DD4666A0F895F49F7833C2661
+88D28BFD7522A9CE8EA109E1B8273A1295F4982907109518E82A156A9C4D7F27
+9B7EA2CAD89D22A3D56637D5427AEDEDA98A6D9257B419D761C8AC925B61C93D
+5E4C47DA6EFCC66A6A4D3B7FC1DF27C6F5C7919E34E9E7CA982C0D40C5D53F0D
+0A09C57FF29657A7FA230102C9487A8D68F93F278BFF94E6CFE8E5E3BA38A082
+744F9D018A6D7452D2BF0D06BB61D72F7767A4E9936DDB660C8CA18468262471
+3C81A68BCC375326C935B90D02F80B704F479DD7F030B089685F091B3144E794
+11D284BF2B8502964E4F6C7B79FC2C37197D52166E377D66AD0E7D0325909D46
+E0F8A35807DFB8C8208BA672EC21188149F3155027F16A23AAEFDD2F3AD642F9
+310D631E07655AB6885C6C3882CCC8690D05D96779CC83A117D946E2F9F6521F
+B8F4458B8E01FC30CF59ACDB52DAEAD21F7B7F490D74898F2570C6FA5B4DB522
+C077FF694CBEF398F0207C708D7C3E4F8EF42FAB91ADB4CEACB592E56035DA1D
+E8C44FE37116712D588C873D8C2C51B960E97D07651D611AB133D950258F0A2A
+D8C4557DE5EC6D98E1298B71FF08B5F59C6619AEA88CEA839A16B9C810438B78
+060594A85095D525246CA31DB045C2BEEBC0B1F8262C59F9A687951AD2A1A5E1
+3049E4BC2CF76E90956DC45670A6A7A6A4A07983758BA4887552CB30DDCFDB02
+090E12B56D356EBA8E7AEED14E4EA4C36A528A7F5105A545BD9EA5BDFD1F04E6
+C65428A54A41C5977142EBEB7F49D65F1FAB9FBBC2C283EC7AAB8562047E013D
+369A009127BAE150E7822A278BB3638BDEDE5A1985DD3081F08EDE5E0EC8C4EE
+56AAA592D3EB3BAA1CFFCE3AC23854790D0B648E83E2FE3C2CF7A14ED0601761
+E5A377DD4CFAAAA59D375499CF40DFC355D344AE50DFC65E4E5AEDC0ABB48A2D
+12DCA4C33F9671CBE7CBFF6D302805F433F581B4A6B1E4537EFE9C11F8C808F1
+F9C56321C402BA29DA2BDA3D2468CF3A26276929980D53E3BED09C5D9C2FAED6
+DBF053142E82A04F618CED7F51D09C28A1885DA028F275B85D3BF5DB6D20FCAC
+6202ED88D2DFC36D642FCB236F51B4016D7380CB85FC2306D986345F8A127EB8
+E32C7118C0F77B1B668D54FC2E8A4C70A681535A5117DB2E3D9ECD1B59A476CC
+8BE712591E1135B8E05652849F3A0737EDAA98E160D39A1C83AB9E586DE2524F
+C22C5BAB3075D6198C15F9E6EC9C066B085B532B8B1ACD16EDBA42DDA0C6E2C7
+DA50A742E55A1C4B86332FC7406BEE517373BD0E5A252763DF5886F433E60A64
+7BC6B0E70FB998C448F7C2D431249B581BF20680572405853CFB5CCAA1DE68B9
+D6AB0E0FE7E0C4D9DF2444267C6428C6D5CFAE69D651651FBF84C606282B4F95
+0C81904C77350ECA5B82128A4BD281C9889912ECB461D651652986EFA8B701F1
+4B721AFE6AD536CB1968FE14D0BADCBBDF798D11F4DC6A3EF533B3BB8A236595
+B70C4A03E6E33A6D44F93FB54A63063328305D2193E012D24E4D31E62CAE4DE2
+87D59D842475522204CEBB88D08AB0DD5DF57B6F165C693DD0AD34B87F89AAA4
+9F7B7A880BC3A5DBDFD9FD9C3D3B9DA30B132CA968A216BB52434FD3FE77BA51
+A70210B1ACFD28B81BDB75F97712DF6F7297F34A59A393006A881E2B3CCC3F7B
+B39C8D6E99AAAC39B071B7F383F9E8EC407118C5DC17BEB0D737059ED7DCE758
+83EE43E0514015D490C2271FA5463B93EAEF9B3BD3C88CD74A19D9DC95660C96
+0A38B26D3B023FFDD27FF6E9D98ADDADB54825D2B555206F0E7C889DB55347DA
+9A4C9519C0C8A8D3ACDC06AB3069268BA83984376BFED1CFE3B1417845911CAC
+5428A0800146CF549EE78C263F36DDD8A04A75BFBA4534A78412B7C2B6EC47DC
+49223DB72FCDC5E88839709D704C196133A3032149AD0AE29950C8D6509F877E
+04B849B5AC09421BB33B658D30CE6E04DA1A35862043BDEAB7BC684E1A6DE8E5
+CAF33EFC866D6D075C269693690750D526B801DBAF5099A04BD3E911135B118D
+EF01207599588E25EDE475FA428E67AD93FFF63682A9B1F9ED495C7AD50EB96E
+836A965C2B27CAC71CE79170C4F56E0497F0F6CA9041E92E1D01078FC922DDD7
+3F79147EA667173AB4E64AB4E3664054547AFC2E2E1382FE059C37B352120D69
+6A15BBA8670CAE7E310B03C2A4B12FB33617C17CB9D992AFE2DB2A1BC1DA806B
+1B82DACB2C1157A8D3F5D86353C12F474078418FAE22EB4213FBDFED904F0156
+C17A9C5205DE359694C899E992E40C2B54A565F4777C0147E864F25FD4C487ED
+6CB1C1BDD93702AEBC7278FD7E62A79A28F7E3A16E763F154471E001D21D4FE3
+2FD8ACBBCF301995528042E861A9830ACACB99669EABA851FF2A8609D30B9775
+A048BEA2E1B538D9865A8A646E907407EEBFAB32F76BDF132E905764EAF10891
+907EC36BDB2D8F89CDCF5365D2FDEF131B23A8308E05A696E5FF6EC44066FA26
+9348C4249B64F87D71C552F9CEE2AD126AB9A9B6FBFCC58438C6248A7C0962C5
+6D7622CF440288F906566E4947699270D4E5BB1E9D80E10C17A7147852495892
+707F47DD09B09802B37B1D40F848BB9C732941996EBF595184E4F484BE6561EE
+9BA94C00F1AA76BCBF817C814CDD4ED94F025A31765A118C75E6F3B2C6C2767A
+090D5389DCCB5A0ACCC67CB1B1DA2EB5B4B3EEAF5A4D7F390BC83A0C1B2B0910
+C180698E9E7F9D288C3BDEBD37D74CB5710AAACD2FAA4686A9A750064F6B306B
+F86C9F4BB77ED693419232AF4C1D897A6A5B737B41647A7E37350BC7853FBA31
+C5CA92ED67367D9858919229645A81EC6E30BE97FFF25AE6FE8CB16709D4550C
+DD5B4098ADD0D4D60ECE796384C007203A2B00595CB4608AB8C265C4E67FEAAD
+7B5AEDADDE94CCB6FFC545A9E3C47B8B911110EDCAF2160135492B722879C62A
+6A8FBB02BE4AC067194682264771595601859CDF549C3BD7A3DBF7F681D01F2A
+1FF5329CE52A00E9FB7F76E7F50A2B37AD1DF467A7B63EE8555FCFEC2A8C42CF
+C2297EF18EE8D49B0FAE5FE08857F0E0424FFCC5804D3063715F039C7F87396D
+579C57944840382C2A9524DDA1BB3C87866EF386581F2B1ABC18BD49490EC9DE
+5D184B752A976528892A0401AB4F165BEDA7597236C6A5433D7B8486FB007DF5
+A0A8503322639EA7916CE8D727284E90CD3F657E07C10370B3D8708B26AB933E
+DAF9BC060C2DE8345802CB0A3FF962FCA229295E15A02FB35D15476EFD85EB05
+AB102C504AC86BDFC3613EC7E947D5411CBE0A66AFC012115334ECA15BB0A353
+EAD3C33090046DD5FE981BE10A7EE6FEB747178AB6357EE22F6BE81D0FD617D7
+ABBA0F7ED0CB5E14F213A96854FE0FB0FAD0C3469A9590BCF9E7076BDC8BDF20
+933DE9DD6E99EA0C7DF1D28114B7EAD10367BD28A82314829E4FAB344F3A8882
+080BD2A920FBBD2227D2DA1FD6AF21E538DC10E50648535187EFAE304D0F72E5
+0746BE1853D59A1FC89BC3847BB8A0EB5A1BFD83B6E465D79012A80E27AE7BDA
+590BCDFDAA602DDD8D596F3B57490A564120EAEBCDCE0EA0000C572266CAA363
+536E654DEB595B137CB03701ABF08EC994B2D48622DCF99E137BB27DF2FC85B3
+FFFB9D781ED87B39054756B9B9AE7A13978E8EABD8F30804031CF77E698F8852
+F26626A3D817D3A3234475A80C1768CABAE431CC6E552596818F9B47161B8C67
+CFB0618039025E0B76E95B770BD302F3EE622C5E0898B34027932498345DF0D8
+32C65257F9DB75D158EF0081911CFBFD8E73BCC7F254C17C0B72AB39CE7EEDC8
+8ADD52AEB813C016D982BA5F10268E28466947C765F65C80E2595B2F732D4E68
+D69A757D8230F6ADEB79D31EEAEE284EBEE7E40A99C422050B338A07564BF7CB
+EBDB383FB6E5F632A972450E4F88241F4C7CA492A860822054E41BEEB3A59E7B
+6D6E769894FD8FE20B47D25F43809077696F516DE603D4EF1D683FC9895B9C4F
+00D38E738BC1899C9403F9BD7D861B0FB18AE11BBAF4438303AF6D1942A41DA0
+29FB10183B46BAC9AB9E858D95CD54DE11D3167B94F0642E89BB08082A3E589B
+33797A5B481669A45C76463B69BB4EF884CE76812BA488BD8A32DEE0AD6E9762
+10DE07FF0216F6B88AECD07E5A1DFE60801607FDC4F03D9A5B074E59A2EB23B8
+D85503FA1D12A6717FDC69220E31B04911E249446AF19FF550B09DBE833AE75D
+6BE48EB06866CDFB7999E9FCD923E5CAC8286D638C643AC161A80B1FF87A44AB
+6181929F69A6795591D319879BE5999F200F0556650475472F9863BE3525F6B3
+9DE2D2CD94229A257602F4956A0018A4211324E3ECEABE650EEA36D34A77E5D3
+DCA8AC728A71377A9E7A9B12E58492196C852303B9DD4EAE6983066C6ABD4D9C
+7787C837EFAA2F9D3FDE032665323585D4450A9D3E8C7E8FB2FBC87234CAF228
+B5C1654EB2B36AA06224C22A33C7E0300ABA12825C47D2F20BD71C03D546E4FB
+2FDD37D7069C6A8EE431A45D810E52CF05A478945988DF389AC0DC8C807CD51F
+EB049AC262A09D5355907421A5D3A5903A67C79F2F82BC62EAA06EFF45872229
+1E9AE5A761FBE2BAE8276314A1ABB109FCD681A0E339182720A41099D77C47EE
+7B6586829BC6728C44BA90D2A259130B78EA3648EAADF62B501D8482D7A0955C
+C7972E5C22435AE131CC837EA6481371E79535B455861023D881FFE838FEAAEB
+CA47DDB85DAF8FEBE91A5897CBCFC4E2E49213855ABFE6FBB558A9E27AA46244
+49FD8FABD897417E0008B57675283EFA92780046E5A1D41B3FFB3399518EB86F
+4D110EAA5C0AF45563103B89A9388929E719EF8FE2794B8BD18388DD66F2EF1E
+8C4206510EB7BE863F23D255C45B40CCCFCA951EF67582C00AFFF61C2199B046
+5D7C463F3AD70446A29F899E95EB6898721C737850E4350FD3660BE1FF7B317F
+E2F170120F972AE9923F79D453B5E51845E6264A41E1CD7545C35BC1AAAAA545
+BDF3D419D9D2E6B1F8DC295004689506BDBF6BF47BAC17CFEBB565C41700E784
+70BA1163B66A4FA197EF0D2868B1FC46E0E8695F8C92BBECE917C792442AE284
+A2F859DE93424F51D52D5D1C00DEF99BD1F1160EC2F94F84C3BB59C1EE56CA69
+A6616AD396B9469FBECB6B4986EAF6E439441CCDED87607BDDA10757BD4B439D
+28ABDB82D4CC8D4095831509F1087252BBB1DF0557B2F6275F7CC610E8742C01
+ACD9F985641A3C16A8BE1B172BFDFD36115855AC40A04C6C26060D6D95A10707
+B1F56D0DEDA7A48E25D9281790D3A2FFDDD479F24A3A0E68FD097448CF500597
+B662EF8DD419AE338D4C81859547CB86FABDD162907034D2ED814895115E76F5
+B8BA5DF352CBC93260002C3D72015180067F1A74ACB5A6BC48225E116395EA43
+65C12774423923E4859AF3374456F204E0FDC9460E8EE2E87098B9E7A3977992
+F106D0A8C542DED8B2E4C67527810CD19E03275998684483F33E9A6242ED0330
+EC553A673B1B34C89057D5972BE82AED5E88B5619C748DEBF6EE02489C51D3C5
+6DA3478C65521B8FFCADFA3E569963649019CF46AEA9357B5EDBA74A43A4A199
+A132885B74D5879BD2DDD2E444187737BE8CDEC939500F1CFF538BC8373266F9
+2E91BFCEDF58A2CC1F197EA1A941E85E021AAD4F94AB54986AA42E138BF54E26
+78BC33104EDD4E86565FF8456CD151FA2ECCEFC15943B7F0F23C359608D48D79
+B1BDE2A0308CD359089009E0B39CBC21FA4B337E7F502595D6B22CB92C096709
+EEB2B4D1D8F697EDA69C13EABAC0FAC550C5A15D1018B6DD4D740EDB2F9C700E
+9383D7307D0F6CB98006B0453EEFF884949DE1CDB38A681B412E2A98312C3A8E
+FCDB7080BBCAD61746027D3261389CCC55A6159B18B3B29B36C5071846117431
+C67079CDF2E5DC78EE02F82716E31D6B63AE901E7BFA1EE86F3858FBA107B735
+D42155673489A7714B683D2BC5D630D492F1537823001E70EF18242F06F52F38
+80901A5EF067BE5F2473DBE171E8D85A89796C98074424D384F01DE987F5544F
+118527F4C19427E8338B8CC7050DC48AC4BDB23C160EC2918EDD2AFD17B4DB92
+7B9736676D6AC40AF23A6541AA47141C047D0BFECF7DE8BC917FD34A13F2EB7A
+28A0EA62137A8A1CE7BC5F1439242084A4DF8DFEEF495D308830F04DD7D2286A
+499E3802995BEE8D3236511C1C2F6B5CF4668857386AA2AA42872E5769B49F66
+61F058103691825DCDEF5AA4554F4DA460FACBF69DD8956FE3F1766A72143EEB
+80D4F8D3A109C2277C620322B6B33C62382F4AC88E8A49451914A5FDC69E33FF
+3C65D1FF4A193AEDCA633FC5BAE6D10D63A98E0A2596B6E65456327E59EFBD37
+B5C45EDC86A4BBD9072061856C4FA228250640406F9976645171978F6DFF12B2
+C7946FF5FB10F4532F4A780BA48F5B203B223AF1043646A484CF7B4DB3628B9C
+B06DC7D8847A42F21328BC90A7BD8131B330D9EA2F513C564EB8B4B0EB3E404C
+13069D6ED4599EE4DCCD36A4178007D1AE551FC0863FBDE1CD639F05484598BD
+33325BBE61C5B10EF6A89886D854D6AD643005210262770A6F4D92E7328BB00C
+9E2D4DF7F41D941952F9A08D318EC90A5A6E0EA95DA7F21BBE72DBEA4BBD0002
+C7677F14F2DEFA91794674B4C06696C5D11C1350CFBD4F56FEDB1EFBAF120B6D
+D6CEF9ED27A6BDB215C4D25A0973CDFFDDEE574D4BEFA05AD9EF3BC70129B888
+84B6160AA09A3C2DDF44283511B376658B9985732F27A8B60CB60B87D8BE7383
+6A2EE83043FB5390E0CE89D7CE02E9C0B90183E959CB233AF3754C137962563D
+253B70B07A45DE56E476437DE41DBF7D178A902E899021E822C511CCD4EAA212
+4687E475F6817C093719800AC5E9B6F6F80C7A275DED35E7E8F35D365C070654
+DC5ABEC55536DC085808CE8B657711B9CE5F2347A5F99808EDFC577E587A6878
+DEC190AFFBB5E443EF719E72A8B5541EEE670E90B36042712FBB0AEED585B70F
+4260EC637590AECC2407A7DAB5D789AACC819C3460881FCBD0BDE3DA20E5A62B
+3B021CAC46DC9557559B483AB41ABD4B0EA498F483730454826891EB93523F32
+C07794BE2DEC3A86F0ADE128E9FAAE879A961B04C12F1F0E65CB869DF7C6A79F
+C7CE635163CBE878B3E8723706AB83A9334F4C67F72D28BD1D02F9600BEED3D0
+B4DBC423710CDE7FFD92C96E5B80D79E2142EBF216F4F10A857A744DC7BCFD44
+CA57CC9ACC7726B1A8F09039F77F0B1CD29FD64DFCD6A179961CA869E3AF0A63
+C1D1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
+38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
+D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
+EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
+A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
+F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
+4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
+6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
+A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
+E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
+1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
+452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
+8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
+5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
+DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
+BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
+741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
+E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
+E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
+D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
+C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA
+726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227
+CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B
+7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7
+7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9
+EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6
+DAD30E2C5061E3747FE536E1A5D190D028F2130AF608F5DDF9DDDF1E77DC8437
+ECB3EC93B33505DF47884DDBD1DC6BBE4098DF04A29AF6FA3AE344600D0AAB53
+B3820DD7ECB600A3B8001C51AF2CA7A39AE1485A087FD1752DF68F55B52B4DA7
+48030F2AA7E570B3D56C4EAD367B9B73FBC0A7356253233006178B9A6BC19081
+B815B5988AE76FE6FAFD7AC239072B1106A3F509381AAEE79B2F2154CAC4727B
+D199CDC8B4D05DF4BA006982512ABD7539E28D937B0F87FF79A3F84C29ECF943
+A8DCB8BDF8EA9E7A0E7CD60BC2308C96B3E889C797D0FF28FF4847016B3DA141
+E76FC6BE78A6EE9CE07E651FF86E720A1A1F075972D36E5C55162E3FE26BCE3A
+814BFEB12D4C5FD24340CFFED499C7CA183E57EC4F12CFFBE3291D43F7270575
+C6C3306F832EF182ADD0AA14C4D8669A17C09F632406AFA195F90C4DDC39779E
+EC0A77E590211592D6EE19563963225C06C2F13265EBB5A6CFB7C17D9E77650D
+11958305727AF662AE73AD0E3ED5F7E7086C5A0C3548A8129575980B06C715AF
+DD55C8DF869BED0A7883491030B1A7E82C5EB04E5A7D952E716DD8F2EF6275EE
+087614CFAB55FCE2BBECD7E8D9C90FD8359E929D5E0A416A23BD58158318B4FF
+87B095EB63F7F052B3A77F136FD66EB2C52BD46CD7DB3091A4B78A607112B12C
+4D171B2A00B78B0E1C44B0D90C20D9244281F5123DC1F6063F91E9E3E48DE78B
+C862D848BAD073A4FCB5EEC9FF54B5AB8E234CCC3C7439C62ABC4A13EF1B8897
+ABBF21F900C564C9A305FC36FC7224932F766E6E72C2EBB55953DFE2AFC2E3FD
+33A0C6F0FDFF086E9FD796E7242596AE85B877223532667625E371D2156E4C04
+0D7FFCD3337B93DF066CB6FE1E13960719EB7CB409EE805C08ACD2C06303ED9C
+E34C898787A43C1B428B896551C6FEB50A831C6F8CE2073EFC662EC286CB7555
+A3B42E58772E82FEE206948B8C439FEC5E4ECB9E11DC3A4CBC7611E30890E408
+637A01A2118441B4F9467A98BB2A1B03BB2F5D8E3DB7D1D15C188D9E856088EC
+B762F07B1C06024F7EF53A2FBD60C0A1F4C0275D07164545250ECEEF8CB15B04
+A2D8AC44DDE818C4E3CBD2A5FA0FE49750886CD7CFAAF8B780255F89DF7F4F5C
+BB594FE7C1597DA71813C2952AD3E811524459EB71D29696B450C924B6A5C843
+8F36A0F1D7DFE796FB9564333666D74AE614D0D698FAFF20F83C86524C894BB0
+272221C060544F3B653CB0E4E4F82B20D7530B3806E6A5830852C58070177815
+E287C847F19F64E854F1463C23DDD80093D6FEB8BAA22C5F05C21F99FBA7193A
+EB7CD49CFDF4308C6C68CC955A45FCFB54FCADA9A3BFBDE086B057DE88BE335D
+280F5338D7E66AD39FD08F9B55884F1F377FB6869FBABE3EAA4B7ACCD85BE672
+724B4B8F236B0889B6E7049CBA558A89F17863E82DF145DB8C7ED1F36332DE23
+3C0053B74E850FA14F9EC9EFC23AF18E153CC96FB0FFD910347370E57F0D81E9
+4A83E2D189EE5635E85A2BEAB5B1CB974546BFB2FC2ABA1E15DC0EC1BB3AF1DB
+B2F93538B92F504CBD7AAFE36F5F3AD45EB16378F169B17869FE81464CB826CB
+400D2F5441A496B6C60A4F15FD20ECCAC1F8F91015E7E1C1A10B7992A1554E52
+9FBEE905A3005336E49CB04BA7223F1674C0BBDFA06ACA34F7BFDA56906E04A7
+4DD79EC7E79B021A5008F3B1E04712D689366F520B0FA66A558F957011992728
+561BF4B75C2BE07C4024C172085E51CCC5CFA439F570297154CDDBB3AA25CD6A
+3004B936488851BA1E814260C06CD5479DCAB1A6AE21A5F4563024F973D738B4
+0DDB6C6DD2E3AC21B4F6D95CF9AACA782919F5D3E613D61F3224A982AF485C8D
+EA0037410EB70AB7D3EC174C6D5DE5C9C5A1220EF7C2B74499ADCEEFF077D1D3
+50C1124535F88C3C3F66477E42F1932665AD323E06B398D2805B9CEA632F5B1E
+50FA587B102A35E2F15EC22DD66E4DF06A3F4BB717A3ED7FBBE2458EB4D896DD
+AF00D1BC71FE1CCA27890ECBF9F0AF01D3E65CAA29427FAF06B3BE1E640522E0
+73B213D04491B93DB29113EF72211E31F4C5A7FD58451946CFC15FD805112FE2
+547D1131A46710DFB75659A33695FFAF3CDD40AE5260AD6766DA81DAB0A6E96B
+E89D57AAEF32B5EDBBE9F7CC033BB2595CA3FEDA2ABAC8E5395EBC35BC112FE9
+67EAF1F123228538091483050847F8FB5194203609502D3A09CDE811EADC18B9
+F039593782C27EFA7697182D6367E88E326AD5622C5A457FE2644FEADA88615D
+9DE3E483BFD9329667953CDB86F9D2F0D4F02DAB8A98FDEB1D17CAAED9B6E2E6
+0C55C1FEE25AB98FF59FC235876029CE03E4A713B75B3163BE3B2DC0D4472DBC
+473E10400C0F57E627AE97FD0C1CB0F78FD8E2FA831A3D2B1C2BB3F2D4E812A4
+194C8732B0C525361DC8480CB27C30CD4DCFF01318D2EB4F5234B4A42EA8C23E
+7B3EECA41B8E4F54D5458B37EF0FB2F49EB19F4EA8AD2B53820FA36E93DD309E
+48847F5C01B1118ECE7D0186E6B8953344EB775D655AAAD7BCDA642EA2E39A15
+855C027CBC0E3FA752900EEB464E2D39404D1B85072B40834748C6F9C74C5B6C
+3CEDE988343FD984CFE4B856A481E60E2E65D3BB41BAF2FA80AC0BFE381071C4
+573C6ED65C524FF777F34D82E9661E4A75E3878CC77BC59218244612219C5A92
+E95B90EC2C38614665550026F1730D11162F19D841681C04C401E102C047541B
+97B9264D86F47E25A347696AE5EF0FF3ECD9BA32C92901DEDD816F7D73ED1216
+0A98771892472CD625A8F7F19DEFCF5CA2AE57F8AD3898F2C1005B187DEC6F2A
+A31C32720EBC934178E0E9979013B3C9AEDA4051DF63D8C903A399DC88F83DCB
+A73F1B2083819D1BBEA5235F8FE1D098F32A2BA6274424A99A4975FE4BFD59AD
+79B40A8003CC0AA728EA79D6BDCBBD73DF45B7918BC099C5BE4A068BF64A30B1
+C39442CED98AAE1BD495F6CA32D564A72E3BF753B49E4178927E4BBC0F06048F
+96DE7C30AF580B0BFFDB330B3B87D7F6532A24F403680BD9F15E758CDF04EB94
+E83C7E644FDE5BEE7CE73EFAC75669E41BDFB20A5B8ADE1137378DD8102A0DBE
+19499A623770417CBF5211395A6BA9F4490F4707A46F1F9B3FBE642DEA0CA053
+9ABC307B1E71DC2B069DDDBB4EAE378BCC75AD61DA900AF8BA6DF0E27A8D2258
+DC80205305AB6ABFE3726703E60869BFAFF1874F3C0E05FAD9C05D7D89ECECA9
+DD2AF5F777D7514208697E712B52448B364D3ECEFD8127043DDC9D0757B7CC37
+5CDE8001D007A6E961EA24D7FFC92410F3B13A32946F12A50DFFA256249BC8D7
+C1842FB84AD51B41008EC4604F6B70990510EE13E6DA34F864A572D99A13FFC7
+3609EF2BB1FCDEDF37A6018248C545E086EAD1BA1143E74AC60B684E755E59E7
+36557B915F92EF78FC177621D49F777A2AF39F3C2AA6EC74750AAAE08BCC21CA
+A71CCDC91DD45E6050D83ABA49ECE425B55EEE137C55619037F1C30530BD0A6E
+CD2004B6A040405064D7E87C55536680364E09248BFAA3FDF95CDA0708E55F4C
+F7D0A92A93DEE0C7B69638F171B28B7F854CCC6EBC6AEE14864BF5144EA36D46
+A9C297225AB0325E28EF6BD06D7E40E3A724EA1E50C4C6163B195CFFD5DD291D
+D7BBE9AF4324A69394117EFD62F08D6BA6A8F0AC3E2353492999AF28FBA758C3
+A50B6840CC72054355E6CBDBD86F683537A4115049BC1616BA35C2B0B6F5CC32
+3F6831DE4E6029310738DE23D36D2C6E82F04EB675FB89789F74AFE3B8854250
+51812FBEFBCF162947554324FADAB765C74B6DA89F60A734076D44BBE45263B1
+3FEFEEA90EC7948F23F34D4049087AF6563692417DDBCDD5A9552A373C2528F8
+0318D3C0669279F292127CBA40B0ABE08A1476BC9EBFA8BD5D622BC5CE7DBA20
+C689BDAF50D5B1EAA89E296787CC53845DB2BA54FDE363DCC98A7BA256663869
+E9E02E09077884DF1A2A41AA698B7EDE8DAFA621B552DDA91AD1E671D636FB36
+91C62B4D2D4112F2C169E0023EB7521F570CECC54ECA5EBA462049AABBE2ADEF
+E3234BFD71B26DFDD9D34DFA69E5E80FD90406E6505A6798F030A4B5172A7BC2
+C9B765A86ED55C0590E0432719BCD7BDE7CCC7F6B33BD467063D886276C8879D
+E04897A4623111C14A1EDBBF69E2FEDDFEAEB2A785C6D2F0711DF4B93AAA291E
+7F4E0CF9CC3FF0D31953C594DAD014097DA02CBD5AE8828C7E7B5BDA09188B05
+0D7263F164E1E78CC430ACAD1E8FA71001E9BCEFAE47C79846916A5F819CA366
+5734089BCDD458CA1A9E8E17BFF357A91F9A7A8A6E1DEFB121353AA80F1906A5
+AF7CD2E59EE6776FC0DA6574DA0DE522918CAC4E566F13FB9B64EFE79F3A3BC0
+689E3B0676741C90FF3BF85C7A0FA9716F4ED0E329512B66BFB8AEB56C3DD6B2
+24F8D6E23751A8485F7EB46719E9D22618FEE86D5E01ECCF4C6E74368A8E9B49
+245D80E7484DFBC916FB2447852B36EF3F99A82B6C106F786707D7689DCD7AEC
+A0C51AC1A3F67034C16B74994403FAE7743BF02149BEBEF554814BEF31B79184
+3FAB4D2C887E1BEE81B465D12DCDDAD03DE5ABE9E763C440B2CFD42FD16D96EB
+C21FE788C8C2688F79F148AA7090BE64B0EA710D376222FD1590301BA9A2E715
+D33B8C1D95F2589AB0EE476F7046537E27DBBCDADEA1E7357C9D7FA92C2F93A6
+7BDDF58A44966590821023380C97CDE37EF6D449E35EF32BCA6E69DC8458511E
+8DC8AB63171A6018AC9A334829E5978484C4C6E917A5F1C254E6669F4037C691
+36980250A80673E0F18C9E0FBA1E5CCA3BE30B8E7B7188062B25F8E1E16528A2
+F217C18D6A1955482E5463FBF097ABAF7314E449C6FEE56E2695407A8AA9648C
+61AC2BF3B2D9CB6317A9B16CE931D318C8BC9676CD908505568C197D90C2BB46
+06431C999EB68C8216409E4CABACB2BB34A05B697B9DD1E91471A404B4969519
+E25209EF4EDD420944BED17B18DB3566FCB8059699FE416789191EC2B35086AA
+2E10C139E3C9FA0A535DEE9255A867A26656213E85851DE5F51F9780D3A6E572
+F1F5CE64DA176CA810799DC1C60A8FD2A5ED42E613021A19928EC4572059B2C1
+EE441E79CDF7DD4AF7B6E3D3230419ACAED329388044B107DCB4DE91B71EB838
+904B1F969738BBDA064FFE75C6623639BE9924602DDF0C166B433B9D54ACDA5E
+018680477FB8F10621FF32319E58DB672D744959A33E7314A1B3CDE0C038F7D6
+0C8A195AF191E36B0325334A711CD8E25D9C1D257E46A734779E486567481108
+E0281DE96907D460546578DE83A0A01A9ABF64402B48DEF739F4308E14145753
+719CEF720FE5CF8DAD7845E74D502B69DC18D172C3A27411259B8042F3FF82C3
+B157BE242C351830255CF0EDA96577375A70657BD9A2E9FFC54AF0AE563D73F2
+E510279FEF48D79F5F7745DBB492F1D74DA738E6A4FE4364799B5BEC93B4CAF6
+B06B9B8C8D164F8FA1FBBA693204064F2C1806C39910910E02ECA8D092558CB8
+33338B359D56483B7B99A1D8137204EC1AE70ED3D75881FC3B00BB9349AD934C
+81A9F285312FDDC77FA923B18B1873D288C2AAF2E6D0AF90BF25A982B843789D
+5662D6A2DD58E065026885601ABED4B09CAAA3116DEE6B430B15BE0A121FC1BB
+FDEA5A501F0798CFFFFEAB5101E707F1A00C8E014A3561FD39972EA9AB108EBB
+960AEA7FF60C301AD6CBFCAA7D35CBF6F8462A4D76C4FBA6F3DF6BB762DF7900
+9F69529AB4EAF96C2866444B257160E8822533A7A1240C83EC18C364F577407B
+4CB314678D2511735308A1660AD94B8B818CEA4A3DC00C5A1C978F8BB4E0491C
+49328F6CDF95BF620AE53056364423841D84418B23C2A447B0CCF8D8633FE2E8
+4A4AC1C6C74627EECDC994059F1BAE9E6B10FA80D767B3FE97BFFAD413DCB0A8
+495039744B48266278194D60422D6E7C74D0DB45ACF217797D0C0678EEB60759
+6231438CFEFB346553A7A447B50807EBB6E885B5A49CA9A350EC4A8C76EDFBB3
+A4DA1C9E3EFA193CDF08553302998F20055C84420A4C5252F764CC4B7A4BEF6A
+A09170EC417B296DD9E2301CD8EABE4A087E648E0525A9FFAF26374C47FDC123
+82F18C9884843864F418ACB08041E7896FDD395225532460A8194A8DB4DBD824
+1C68C6665F85059E365EC0972EC6465E2D8867449907DA6692A021F026F437BD
+D02654BC11381BB6557663E0B0B8C4F2FF69E4776F4EABA69311BC1AF8155F7D
+6D3A418BDC912CC7CF1A4BBC8A1376D8B4DEEB6585416959BCA4AA08D4520C33
+EB054DE53140992D0707210593BE62B3659E3E493C4562C2E99CECA143791DAC
+679896BCDA0699E405957E17DDBD243E65CDD7C9C8629F29A2078658746A7779
+0F75BE24E2DDBB672B95F26366BAF036B3C23BE4132D7362E76D4183A469E0F7
+29174711ECAF4FD9A923E72FE58DF2854C5537E3626317D471D1E8A922C9BBA4
+CE9163A4086AC4A231C2BF35FBC39A5BBCFE41843CAC7D81A054509D31572BE1
+596E0B0B563DF2BF0E57DB4943DAEE35CA26C8433FEE4FC61145C77F65DADE75
+62DA18DFABC7F4194906F53884E62E77D8AB3E099776AB93B2B4D0C98FA44C71
+597202A2643942795EE8CE098FE26F1AF8134F1E75FAE18D563B1FF43A511C9E
+EAFB9EFCF61490A1A4FD2CF354927B72C5EDD5D62B2F3F5006D6130562A13BCB
+1B988A994A8D68B051A5A821CCD5D0F8D9D49FE7CD04EECCFD7A554CCDFFD77E
+27AC4AB5BF9FE40F90EBD066C483796CE1A364E95C5E0CF2154834760522F128
+B2DBD1F4F73347D42635B2875A23597C35A0823CC6F71E49598125411BC9B2C2
+72470D36DD967C947AFB031BFCF770FE50551A134DF8C5D1AB1F09819569A57E
+E23D4E87C0B52CD02B0A2E3FAA7D27A94359E82AF047756BB769BC5950A75207
+78ABD49D174F2F69810AFFA9336A52D6B93B004DCA5CDE58475C0210E0BA1D20
+FD4FFD6838EC56A0922472D4C4EE0CC481574BC30618179E733EA40A48847E14
+A75BE7717CC5DDCB5B0718074EAB6FF07CFFE794D335B3A13EB968EA8FC5B08A
+13B38AD1C2C964E4B07E90B9732C458216B028E07DD593A5B767A2B415EFE7DA
+951FC07800F11C7E2EF9BDD152BC6815B7F32117F49FE08BD79BEB949003512A
+327F3F8FAE1767E7842348BA4373649F1A21DB2C56C081BCF9FA4EA86C8DFF00
+FF45C4F1386CF8C2C4120F3F6019CEBB639F2D272D08C1763A470D4BF6330DC8
+43C069A6333113C3A0C93471486EFE9BFC02B760C7CBB2E9156087D09EE8A178
+5EF50B34994094C3F0015EA2ADB6C920F4302FDEF128711994875551C4E883E2
+DDEFFAAE11F2234AFDD96400BB69C1B4E6EFD75734C586A10A54A98E7D790F28
+DEF7C7DF61FB23BF91AA700AE585EBDE74E215DA49F4ED466F46129022722086
+8884D8E026F35C4BEE7E866DF8E0846D5EC3534069B713FAB02D4B4EE3B44E1B
+656F30D629D40AA1337786C1FDA08EA1217AFA4A6E2498B334DAB5461A70DFBB
+5AA5686C89FFA4EE82D81CE2B28334DC5C032487CCE998616F48150BA1281911
+076E626E5BFCC56A0A4CDC559F878F14C2BD7A5148C1D8CC303FF9EC473354D2
+D4FB0F0F2AD0CF182A28074ED6552E179222570DE0E0D44E8FF4DB36C3AD6487
+C4BA53C8548714A69FCF8E3E5202F09469D7447C6519AE902C1D611A720BAFB5
+59E27A6DBA73624F44B4ABE0988BA3450F82E03521CCE8EDE8BE7EE1223B575A
+DF9A52650E85545525E6F121FF2D1531F156EA9D5594239AEA2CD09EE28ACB15
+A445E11FD1C031188DB61881F474D49425C084489A88A47D681EA68E7FC4B1F9
+DBB552063A02A0EB51125E9B2CC646B940D46FF457415F9565892DEAC030F08B
+E4C10DC38D825C7597394C844CB863CE6C843F67F2E1C42C4EF86AC7FB727BF0
+224B5E91BAD99CC6638AB2C64469A81D8B1789981872ED037B3A34BDF3130137
+80FE80FDA65EFBC11A08B98A1AE595F980B577E22D3CB7FED1D4016F5290ADF5
+47D7D9BAFE39F294582F2C084003E9C83FDB9EBC87C8B477CB8BB359EDD9BBC9
+9368D6605E1468A20909831BF602EFCEC0D5EBA99A2223E5A269275C8B221B3A
+F9226654185929F794E1979ED18B4CD36152F973433AC67BE24B9D953254FBBD
+B644CDF3BF0E29A2C72113DC486E46DED2CE8F8DFA8B0F8478D1F18C9AA8E054
+A31C3DBE84ECEDD85DF6AF9467AC2990ECAA3384FBCA1BBE598AA0D6813C859E
+1520B88BF30ADA910A6AC3068A5B8CFD76B7F0F6F4AF4C32450D628B5320C384
+F23A2B5E8756895584155226A30F8B0437E028978491DCD00E79C0ED58DF261E
+79B9DA17E57AEE03EE92102EAB2D63E69A88EE0B1E2087ED0C0CF6475EBDC3BE
+0324D1FC8F7B90D8D807533E5436F2C2583B9629EC390403437FDAC908557894
+03054A6DD6A3586043A9C8BFD0C7EDE1229DBB9F69F7A5D20F55664D061F6517
+0051C6B3CD7338241FB403F2AF77DAB1A8EBE1650156D40863EC1957372BFDEA
+BA8D0BB1193CC5BEB5A68C8274802E14FFA3ADCEBE19070325B1BDB960CF2988
+C0F5A9BFD843C515ADEC8B8AB02B2891EDD7502D9F28F4E58D8F67D1ACAFD0C3
+3531E0C7D1554344CCF90AC8696E83A3F968252981CAC09653956F4343B99D3D
+4F17CB8BBE4506B354439B70F2024871D16668F9DECD8EDB872BE5E6ACC406F1
+1DF4E3ADF60EFED57D1C426292970199BB663405236C6A907B6891C6190E87F2
+78D9142220FF295C7BF44AF61470798FB8CFBEE6973C69DA1CC24ECB058AA753
+DDBFD92FBB15560EA19D5D92F0005B74F06F0EA5901D231996E0866389DCA433
+E62BE48479687084C1D67BC592E592939F806FA8BF5F0D3F644B1FA6F056DE0D
+51D3F212C6818CB6166317058C2A0C07AE2E324CD90D4EC83CF4819B10CC348C
+6DBABA024A5FCDAE6E288F82DA060BCD16437F07DCA43BF1E5A1B402F16C78FC
+075BEE900B4021A1019C4A5ADC33230047FF11FDE8FB775DDA267040A22B4E5D
+6012F7E72B8BC8DD3A81369A08FB81C6C4873C2147D03D4181D6D8032DD2B610
+9C44CAB50C5BD8F489EBF01C72D4198B66EEA4E976462F8874143640B82AE57C
+A51EDEDE75A9A55D31587C14F8DEFFE69F75EA7B95BF725CE9991FB2F07AF568
+5AFEB39447B728B99BE0502BF28DE1D92B15926BE4E3DA2E7BB44A24836A97C6
+EE3A2080E01DC6514180DAF9C055F4C94929D34F193920020505E62804461630
+9F42C652F9D5681C91BE23DCB0C634247E739135F925EF3D5424767D5F5C5879
+C46F2E3395E2B49D282622FA4C18475FC52BA7AC4DB7C1AAD65352E66DB9D962
+AB975C01CC6490490F35CB358D77DF26703B356F5C5D80E25091CDE93B39BC22
+AC7F7CC6FBCBD39C39F7F8B41B3286CD39D6DE2E6B2A9AC1D2EE8AD1FF53AA85
+C34B2BB3A2E385B980FB5F35A1BECB5596FC2FB2209828F3C54D01B3D867B391
+033A752F4AA80C91775F9CB9BE939C850B2B322FA948907302D670F2302DAE93
+B5F8D2B835DDE001ECEA3B67BD3D620BC6D1E325C4B355985A129CBD6AFFD2D3
+5147E4CEC0209A8DF23ED77AE818B88A3696257268536CEF2DA90202ADF21C34
+07A0383E17206532F5F71061E625F3199D72E461D04F4AF18AD91B8A09E37E5A
+46D2E5D3634C508197C6CBD81F3E2BB8C759E331AD1CD54FCA815B92207579D5
+B248F2A1BD2B725117C76FE754F5D3CAA9F642D29AFE61DD78ACEB9F1DD67764
+0AE3E795C8016E150C92CC4D2EA682D6808DCCB4F24724541F856C29B3ED24D6
+64F1BFA439DD155E53F06FEBD8DD73C7C2D933CF70D9001707870C2D06EAB2F1
+649B32FFF09C7A1FA4C2E7EC2B3CEAEF12515CD401C582A315906EAE1A0D51B8
+1BF625E07761AC2BF59A28B7840E8833410C7A3CCFA16E32A0E90E0FDFDC46B6
+7E073A5957E59E58B33CDC146394FB7C860EF5CB1CC9871D3783D189B1A5EDB4
+1BD462A5AF1CE8BA67D096CCBA709C49A6EA7C1233C125155D8FC7E9482C8EED
+E15A207196E74C9D2C19CA96CB1B4852C3DB5ACFE88246F0325169DCCC88F4B8
+8BC213413EC95D2E3F39329B2165A0D1E3B4643C8AC58C126AD9E71B02B8A04E
+D5ED3F93B60A7D1D142A4CAEFDE0FD1C0778B3F9E2CEB4E0058D714FED13EFC0
+F4BC2FA09A125652BD936BDFB3B9C83C182DF3C329E060E983D054410928E4E2
+DA66453101A4D23BB5FDF7D67051BC92152A687620C9B653CBE6160929FBC393
+BCDD07F0010CB35BD030CB5E13A4AFEB7DC0DD5D89F9A638509AA2A4DCB83CF5
+DFC0873FCAA432F351D88B35DBC6129A44A35CB2CE4308979F474921590FE9B5
+45A4F50C799BFB555A1674D1E49CD81DD2EFF2A409626569C64B9C80B5341EAE
+50A011D7BC615F2BD6270981E2D66BEBB017EA4B5E9DC2EF8A7D059C94CDD2D1
+2C2C80FE9E086DFF9682C1BBD31EFC52E60625FD854280CB6717225D2FF35582
+CC3B9924635593248420EE48AC47332745597A5E542C2C375E947BB80F463C8D
+54FADB19A7B5993F39D9E07875785DF6342617F718A660F6A27C9642717CEC01
+D9DECD957E3C8CE1C0CFA3F2F02796EDC1CBE35E7F12C3CAF968D8EFB5F09588
+4277CDD2FB8DB2CF43C82980C9CD75599416218D7F88077B6B7CB579B7331D1E
+2ADCFF01EBB0A43FF5C78B5F4CE0F183FA66DD45BD9E950738FC3E78AB286B70
+FC45C628DD2DD70F8C33E99AD2F3A82389FAE546138FD8609EE51BF337C50EDF
+A4666AE87E764F38A99EA91F0CE63D72CBCB7B8EDDFB72AB57270F33599BE69B
+8C7A9F15B6704240A719A1B2B8E662B5F479ED331FDCD7EA86179971E0F193DA
+27DB7DDD61EEB68D5F5ADDF0827E7A961D0F35D943C89E46909EC09B3D02FA88
+10E8D8B85474248CBEE142D33C5CC24CA4923CDED8A4A5028D585392DD1BC8AD
+61CCE83D7D2371A5AA76F87642C10253D00EF336FF8C5B14BCBEA473577333D5
+5A858CCDC4D51A715859FE3DC0B79BEDD3187ED7C579615394354C46AB860C4E
+13D26ADD1D09B3B86FDDEF1D5232B618B6A8636BDBE04E7187F4CC624CF2BC9E
+38D39A393A0A6E42654329BB2F5735AEA951A1642CF093B06BB7656A23B9A9C5
+487947A4419B1AC4EDD7FDAF7FD0DB8FBA10E65AAFCECEEDA53D3CA4C5F381CF
+8A15DE4D52EA901171C5AC8D8D402F6EC75E898E0756BAD7F206311E74101055
+730DA667F74E9AD40BBDA833EA7439EC939381EFE8DE64917CBFC4E4C0A96A2A
+069053049D14A8CA33ACC6900C37CE589DEEC5CDCBC4153C0DEDE51266091DE5
+E417ACF812AC380EFB7523EAECEDC133D2368C3916A92B85EAAE86CE9CE912AC
+94749AF7E040CDFFA2EA2B78875EC3BF0E72C228B2C68ABA783E9EA17663CD76
+70CAD683E416E6863D21FC2A42F1BD447CAA62A66CAB6DE56B193B3D83FB521A
+82A7C3F08190BC10217F7EAB6876354320F1A63885479B1EC91750A247CB51B9
+1D22EF0D19D48C9893E0716A64ABF1A54700DD9BF0BB498EC874B2266B6E86C3
+2D273A2969F184B9023E83CB245FF9F484C9C37E70BFF61AD20EDB3C2DCCBD3C
+38716C5AEA8465E87C3E9F4B9884AC9E213817E102B30691D25D808388A3C4DC
+8894BA463F8E0F5E3406BAEA54BECA95E934C8E019AB014B13A618D68A89CBC8
+3F76AD4C46060C0FF3D0BEE87082294BCEC05BED477BF02BD9F8D62ACF3AB816
+30A0846A3FDCD885E4F310D56C332CED12A279154275A682438ADA6970E18CFF
+F66012252726FC421A3D772DDF7867ACA38E70DDC25255283E72918772DED8AB
+AB05ACA6477F6FB6D2C2A4C35D7CB877C2F07B6A3E113468B53356947B0EC500
+FF3ABA15ADC0466BB9333C6A1E73EBDDE53986FFC8F44ED9A1136BF27A599F28
+414C8A71B2893F248284DD7E0D887A1102357CD8EC4E034C7736469DAD3BBBF3
+45F0231D7C29DC8D0A62CF4ABA718BBD7D985513986B93B599C912408BBB2BA7
+DB96EEAFE84D1C6AD71FC59216FCE27E179BE74FD7007FBAB1AE2A9ECD11F1FF
+4396A13B7EE4FE5727E2142AEEE4E39941F02E54BA6730086B9FCFA6A6D00B7D
+BC6AA1432E129289B05C34A0B68494019D387AC6161B6585B2266DCF37DC63AE
+1CAFE2F3EC9E584981468CB2B1FF77C7FAF3342B72E260E15B558974BCCA35E1
+4D9040394866724F140857AAAB68BB9EE785787A857D17CBDB0F4CB00844FFB4
+2244AAD459ECCA522F5C590976EDDA6900919CDA0FE66DC39DBCF1434FD7EFF9
+194BEDAB53F7580D169909C31D6FD38EB7A79DD4426186235098A9F574E08DF1
+A03F709A1FA398A545331FF9454622B4CF225E95753037BF7620FAB86E06A1CB
+0B5FD5C82C3C2A9E2BDD2AEE6F3547033D5512045506D6DC0946AF56E87DD984
+2BC92D8C6F1494E6A19CEC6E3CC20CC46465AA61DF9A9CB7D9B4ED157E3DC4BF
+FF6B752AFD16943A4CA7B6954AD3C8E115055F0FCCED4A7A9AC3DF6888724A0C
+1AC640EF479E7D502B2F030F2B43D51996429B40841CA139E8EAA87B6AE277AE
+F8A4C55D4555BDBEE4232DFD1A468548DD2BE1193B3E0C7DE64A944973BA61A7
+4EB28DB3AA37C5FA901A9E7DB175DAED17DB95E22EFAC77CF7D4B0885824825C
+9B6C7B83BD0ECEB934797B49BC0F530F7E114C2B46D63DD7C56B89FE4A67EB3B
+6730F3281453F8B12A13967F1FC1428ED836B7B74C88C893407F13CD9FEB37A2
+E63D62D24F0097F41F756E706C376E1F85EA99FD6FA72611A9A92D3E49711516
+42FCDD0AB37B61DC086B7CE1D4FC559E2436D1334B3FC6A45F2FBFAEA7274455
+AC6715983EF884243D21C1FB3B433634A1B100DE7EFEDC96A2375C370F5F6AF7
+88FF97C7F49A8716AC5BE715578FA60394A5AA3ABD91750D3D92EB2C20697852
+A7701DE59D37A8FBE71FB85C8BB31BE3FB05443E7ACBED3CEB33379E088BA46C
+9F00659840057537B0CBBB92106343FE7B22E1EBDF988D2EDDE8454DE5042227
+B71CD978B414CEFD6CD9C3F17F11D325DFB90DACC1EA8D539B258B36A67AC1F4
+A3151BF7CC34F987932C469ADDE1FF880C6AA1638D11D339181C3AB485D9531C
+ECB30F18504BCBD1432123AAF1A20B45DD783C4BDE3D9222B7090F20D3DD0CC4
+46EDBECB37892190C4E3099B2A5599C2969A2772D7BCEAEF5E68C7BF2FA00DE2
+B955FB052E6C030D9077456494ED80A3E06937E0C47B28B92E3EE4E4D287C687
+E65221A1F3D8D61780C7A9199B373087770136C43A8B2A15A288CC4E89B3D298
+6F368BCC97D573BC587A0638FBD3618AB7AE3385BB12277EF891C06F6F618BC1
+5376A53CDDAC8067BE854DE1C5E554DAD1D067B6236E24C71E05DD580AF904BA
+B6085CC5FD0EF91C7A9D99E765C1A0C042508EE88E882121735E5A8FD6AB154F
+9993E0FB801632B535E6855A2E957D1DC342AECCF2E3BB566CD687271DC01C73
+C04F207F8C6294E0EC5C4644C8FC359A7DE5656D49965F7A4AF7D4AAB46BDE80
+7AAE6A0B0A1F737E075FD15984BDE06E06670A676EDDB0FD7BEFACBDD16EFB6D
+78AC731178AF94A77470EFD8F327A15F1A03300CFC19C9A9C90EF1388E9FF702
+5526B6990D2F8AA2DB72A1B19043045121F02D0212F3E892D1B13601E8324493
+BC4FB860EABE27DB73E5828FDE47C2D83E5505DB2C8491612605DC988F84574A
+5152E8F40CF20B26BE241B1036C9BF67942A8664398F43C4A5F1ADE0EB752D34
+1201D0DEC34EA95609A2DD65A7F761A0BE2FAB352F7AB8BFA31D559D39BC356B
+E796188AC31E0C512B37AA9637604C6656B10F0BF5C8F083496E3FBA6F449420
+C05C5371B16BA0B047F450104834C2FF96ED9E66F146D19E807B4C1C78746CF2
+C918DEBFA52C49A4645CCB2F3C5FF2E4588DDD1CC6832A7991CBCF3D3387992E
+4DBE05C65455EFC9D3F88248B27C5B83DBCFB13E72B24B9A13DF66E68CBACA95
+BEC7C0A6E2CBEE404259455688DA4F512A2AEACA619C2CB1FF20546200F164C9
+DAAD09F2CAAD9A9B05FD59790FB8B892B9A72B3A04F9443EB216E762AD9C0695
+B966BC2510652F31A1DD10AECE493329982E3583A7C106E8E4EDF7186574ADC4
+CF2227B520ED9DCEA96D8FDBA7E227219DC13DEEEF8958EA602FCB52DEF6F9A1
+589C659AAA7A4CA5D78176CD27F7328BB71FADE61224866B756C78329BB6557A
+3B003E15B66A6C307023282FFC3EA63467683B1428DCE51B2D5BA418661A4DA4
+BE4E35945C93F22D9B4467B2A20D1B282724A02D9032F48F2829868163989995
+1B866536E43B6AFD8090ECD4AE576A28CE2DC7BAF04111701A71EF4C3B8E8BA8
+8AFF6E096BCFEF20DF3BF29ABFDC2507896D53E3AA48DDCC77BB58D85A3515FF
+BA5BBB0A44D4FE8580838AB91BA337CE461B537EFCB0D4BD968D0CA8F4B808FC
+3ACB08AF1C580C634AE27123E50E7E42A8C861667238A52856A66E9BBBECB160
+DBDB1DD426A2F76CB8C7890320F7DF50C9FE89ED1405A59721D11FDF2FA2B048
+83B77C164248F7BF436E2007AC9BB4F27BD8FF62C4ED9D377F2044D2F5F63420
+1D9935BEC227187942805B7A66342044F54692D71C820729691709CFE6720A1C
+6DCE3E05095351635827C6C03B1E67C9CE546E5D464B6E2F608CFBDF7EBD0280
+04D2C1DD0AB53E75E0C4D2864D793E617477F3A308E95D68E717790B3BA4B4B6
+9CDC5B978CCA0A52FBF14D7FDB5AAEA8AF591CCEF944D9757163370A95394324
+8AE2885C1F9FDC8D5365811D20355BAFCCDA0722057A229D9609D5DBCAB0C3B7
+354B8A0432FF196F4B5DE84BF7B7C799C5772D9B1FE97ABBA646916F7081B98C
+5EE2019F992CD1611956B9C500F89DD6610224371833D0B85319EA50CA5B6797
+DFF2EAAD1A190F32CCC801C06D40DB4978646590FF40A943C419BEF1C1E7C642
+1CC1F33899247BF8B830FE58A2F0B93E5F011BF23A54782CA0EA09A0BDCC10DF
+7B688287D2D0DA736A9194F070DDA4D39248DEC41CB441A4225602C87AC3F7CC
+780120F4F92E65ADD62FEBA9F5D8AD1029AFC86EB4D8AB729B17E1AB21E5A07A
+DA4AF13BB3C02B9CDD7C063741D0E79310D48D7A435D8904F87BAD143BE8E521
+A51D6E7F3D348A3512C2D315BDF1A68D87FE3DE03F5D95E440B691AEE8C7DED7
+92189FC58C20E36FD72932BF07A921DFCB5C444F180D78F7CC5B83848DE155A2
+F3E47F45F576CF59C5D46ADD277B0DE74778F11F999F3C2B6436CDA253033328
+65D0BDBE877B644A4A6685C239921821357CFD228E9BE92C21B3428D693F48EC
+058CD8C02C5EEBE3957A671555703F01E430A5CDAFA3A95155E6750A4CE39D1E
+A89F19195788625B26FE693F312CBA53F08DE5E3A2A8C29FD7312A92DBF79C73
+0BC7A31C9D1945CF8578672F586493132463032964C629E0CCE49647DB95EF33
+CB434C8816E0E3427A0114F795F8A0C51CB2AEAEAA62C98CED7B87024BC16B30
+40D997940650EAE72BE6323F1697205F608091BE8AF08A9C91089C120420B3A6
+68FD09615D986FFD06EEDD39BBAC9C4C166FCB9E3657D88FADEFB2EAD4941591
+4420282BE836A4CCB74476114E2979CA9CDA9845668DC89B04BA0AD91CA46BF5
+F91F8E677815B3D2CACA13A3C7E62BA3FF44B35E957A0BE4A1EDB4DE5EC2B42B
+CC427D4E8B8907C7F0E3B82E960663456C1AEC4C2B275A1EAE6126BB5A802238
+1830D00CCF43963C8CA537D24D7B8A8A767E978DA955613A819AE1F5A0D12BFD
+378B8118EA7ED73D6914DA71C0FD41620151A7CAE1AA36625E98A25F72D0CEAD
+F48F4A822862095EEFA5FEA97A7A72047985E455F326F94F65F9B8ECAC0B2A42
+58396F7F3C4211EE320CBBE9280B08ED54171E44D8973256A286AF41730A9A7E
+A88FC1F92509135434BABCA88CEAAA2ED499E2F3C316529DEE9D024FC1F92FFA
+69D8BF95AE1A5ABAD706442CCA15D352D10A03384B06DB6C31AAE831013B32F7
+53C0D21ECB615D0F08BE01C0E7FB1F23715A10CE32F1E33CB40292CEDF59A4A3
+4BF715EDABE23B4D1FCFF71C40550249A03235D307F948D462944BF685530035
+1269AA516F99D95618B24B07A8D2E56F1DE82C5A2336263C46F329A5AFF5AB23
+FED8E1B05B07935581816B5A3F3412C403DCD207A1F332C79F17B711442DF1CD
+7A54B90653F78C0180FAF33C82BF371D56CCB71CC73B9EB2BB10E3617FB7E0D8
+C8AD510865216E44B6D2D3B2A02178A42766BBE1F738402C6DCE694307C8EA63
+25CCB6D7298A2200C63CEE67739D14270D1898C495361504B38A15F81057B129
+89835CA35A523E2B848DE47F50EEE2062050522B8C6E4EE0C3CDF8EA7E878C1C
+387B5BA7EAED5E890CA1508413CEAE9370286690BDE5A96E89E916A8A81A90CF
+223797B54F0C408044F035D1BCADFE1850DA6EEC5D61211A543741C36CA5A14B
+D5402FE65382DF64CE4072E5A532F009D156287866C0035953B5AC4CBFD33EB6
+AC1123A0D0B8AED978F2D9B7EA1923C104237A97AEE2263163727E98D22CC5FF
+BDC0352C9BC16ADFD1D4DC968882D53DCC5E7ADA2CA2FD67DA972CFF17735833
+D4E0DF395B0F5F8038E4B70D6CBB8DA85AAC12D8C9B63EDA42066977FAA79121
+43AE6F4692A9F7F88DC200D049FBAF35D776BDBB0B89811F2FADB8224690902B
+2A6E146A133A517CA12386AC920A4543A0F6CF05A9071074CD157C133EA7A7BC
+4E6A2874A6699DD65DC25C5859580308316E743B8938ED9DFAEA61E1F836D2D5
+F13DF35A82339269D80A1041651CB4A28B4608D0E2C326F01B698816DD20541A
+5D01822C865109022872230FC18DA7A7B3BD858712AF458F4D17F3286303F837
+954F784FF3CAC74E28C5C633A4581AB32C11B9974BDC0FC47F546A9F81FDC281
+6495A1229CA0B91B63E491842BCBFF262DE9556EFCBAE22881466AA874904438
+A57EE59D023A2D3C6EF7D5478323812CD8719A14AC99D480ACFD5CC9DC5C13B4
+28E43CC9784386169BA06D306E25C8D1BB6C0C325885423DAE98B7B74F477768
+6AC27A297360C8530142BC1E7DEFA726C2A6B191442BD7CA8936EF73087D8ADF
+6C9A1557BCA49C69E33081FD3F4766092F00DB3C7DC71CC151DEF1EBA8D9001C
+4F11AB87091DB2646CCF6D480B6E71E7106581A0509FA55E8326A428F3A2865C
+94B3A88660C35B24559ACC697DE7DB5729F33D1E72719D38CA6BBE24D3E6A0CC
+D291719268709C7AA1B4F00D42A973164E573827773F5D476D5FC2C915937065
+66C6F51D1E9293BE96E0E16AF71E5A26A64FB07D29D5548FEE89DC3A6CB98388
+5505C882BBFE323D4E7483BB1F5F75D9332C8FA1C75628FACC6F6C9CA2065DA3
+A69E213ECFE3B1EC646DAF1422AA8E8734B028314EC6318ADB331E25223E4C1A
+1312A03BC70E0A390F9F07A15E46AF1F39F561BF65790669866A9444D72C4D57
+181AD91B1350573D35122EDC10EF57CB6505EE89148D8750704A036F9B80078A
+D6DE659C19193236E531DEF598D972D826379B9C675A8CF10B3977E7088C717D
+A211BFCADDE1B91C9F79B3DB488C5EEF262F0524E6F82BE7E5D94B58953E72C9
+63F6778919F1F2126404A2E1EF9397773BB32C0C4EAA1B8E02BBE3E9FC75546A
+072611BF1D5DA8360AE0E2B199288F690859D9BA2720878301E6A358D26F04F0
+D93B36441077B89CD9ECC805B87BDD1FF13E6E4426C1CCA3E9F4141B4D268A07
+02ED31E3EE96C6E62DA983E9DDC28796995F452F5F1B9635DF1914140006FA69
+AE2D0C04D504E4B735B8BF7A5CA4ED496D56EF87389EDCD78B6870951F963F17
+A4A9E2378830CFD1B0AFAC64C93203C083D580D0DC575A69E5F2A318C35C4052
+FFFC7F4EC5DD7556DF2CE165A362FD3BD3BEB568C247569F18FD85B5CEBAB263
+9B7F1E9B5886F07E9E3BF192E462659944241030D9375DCC40E1D744CCCD18CB
+5A6595A1976E3767C0F1829F76F220A335A5EC49A6E099F7288FB1A415DE05CE
+F41FE8AF2DB82BE6B53EC82A0AB3FF14ADD98F5AFD9B68B76F5199BABA5436DC
+921C36A6AC8B245BE2702A7C036216C82E81A775D1AD068FF106789CED865D64
+A4FAA7861BF49C52065A1C9E52AFE9A0CC9BBC8863B902FA5DC046A645C3D72E
+E28FA624B18103C9782123D6AEB075E22B0707348C15159D1A3002B2822F3269
+129457B3FBDE1DD4E148B77D75A50A0A063D541DC4D00E1500E5A19BEF09BFCD
+C36D7E0B60BC2A745B50BD7B650536C563AC305C0AB63389BA4E9AB11A171D6E
+36EBB5CCA1A06960173A865B7BE57336C18BA87710092A12C88A4BB739A070B1
+92D1D52A22EA87E84B9D70A0C8764F48076F7C381E2FEA4DD8F9A86FAB2FF56A
+9FCE5A47BCFEBB78F4248513E9F117A50DF41F14379F9D61EE774F109162B87E
+A3F45F36EEAFFBC1EB63D796FE6D4FAF2D16B3807E4BE4E54F9779FA01EB853C
+B6DDCD9773EEDAD35F4795D90D17BE66400B31A2E4C3ECA5B5282E22CD2846AD
+C1D46908A493998F17D13A2416D4671F956398EBFD075FFC676F4BA9B8CD5BCE
+391B45AD842C43F98FF8FA42F6ADAF4C429DAF025AA7383F4CB0195CC514E804
+C47FC3217159F58E174481B4037112F219F4E7CD8816DD332F2596109AC3E46D
+C38E214ACBA5A55ABF5177D53782E2CE38763618ACA0E461B0B735AB5A9DC1AB
+B92F8588E3362F24202F163DB7CBB3D24A06620F0D75F621869A97DFB8678ABC
+EB57767E94672F51154F22FFF68EDC69279603BF5499F58B3BCF5ED32848F42A
+78A029DD1F5950DA3C6C4E7CB911C69A88075E14970EF23ACAB307D52A627EC4
+4359B28C00D05ADB4EB726FC31B0335E7C2942A851870D3520C5C96A4F1F834D
+584D92A454BAE25D79F2984A708C864B853B24A303F4EB132BD9DEAB438BCA65
+78864ECC83C746D63B7CF7B5CF1B9734E102007F9A0954EFB8550C43A9410168
+2D21E28DE211D231EE4A165EE129F47D07186048A152496E4FC9CE844FE45903
+076F6D4FEF780A52BCC56D8435A3949DB75C12F1F62CDFDC521CBCEC2554C460
+F700716A202A10153C800797C00F0162A14B8CB0E9B355938039773407738B57
+6380CAEAC0AA2AD724739796A9485D12ECCC0F3546F46D6040372B6E811212D0
+88758DF06DE11650C52F3C178CBE912B749351F065468DFFDCA9A01E14348D98
+EBBB9A7A168D1C4EEF97AA0C20FE37C3B3CE1CFD53AB00F5C7FA394F2123CFEB
+7A1DC68E7BA6467B2578EA2B00847F6BE6E11F77AD6EDAB10AF837551B81D429
+AB185372A6E567B73C56378A023AC24D83BDEC508CEA954A2609F0BF06389A22
+8F8D4ED71E2C0B202B68C0597DCB2421AA163E77CEEEA6908CD7F08B5DBFDD28
+DA55017714ABD1C98B5D5C8E01EAC1FFB4D4D00D7879B6EA44DFCF7C73EB1AD7
+0F8ACCC9A404496F769F5DC79FA1C28FB86F3C863D3B5961406B630D87270C63
+84FB51C5A8060B7E59211E3953A3FA571008D3677E8CED908A8BA2C7A0FBE6FF
+ADAC7053ECF03073C33A681065B5013F1F39E4D63CB657FC9DF6763440272B45
+0E908CBA727375DCE5D479B7604510D081F452E30AEE9335635BAC3FC4B4516F
+714A5D709BDB673A0E4C4A7CF7833F8011B1632F03B3C5815E4C2BC44502ECFE
+5791A5A92A8EA997530DB13A5BB2C9B8DC2E60D18FF029A88F63103AB54E9B52
+D08F82AFA775AEA9E0354C77F3442019698A08D366E88435A5FE1C388CCBDE65
+94A41A384AA4B4E47CA54D2F37B8B80FC3485EA95B33DF87A4A5CF313325C08A
+76C669C86AE536AE345D7E5A3052BAA92DBB827FB877A1EE8AB6914F672C37A2
+9469AFD84800A913AB4A1F681E7DF81E93B9C34076B32D03BDD8FFB2036A6035
+86E4CBDC20263AC0A990AFAC2EBD451CAB04EB66542AE984D0E610CA79FC3268
+CABBD8F91E8DB1AD7E81C13B5E9C682C679D48E9DC94DEDDC52A68F76DB57242
+1628F8941AF3B433B8A780C209DFA18AF329E93769DDDAABB87EB1FF71CF2401
+F3162EAB20883AE2423E84E05BD0A4D3A4BD1A3627FEBACF14E1245ABC8B378F
+406C6FD1C60F2B02B72DB5449582C0348B4DB66CD1B1800A27FC41DCC0F1B9C4
+E6ED1E83A78C452A4B55AA0A93EBEA6CC4618FEEA937695E6513B7875E4EFCDC
+643A87DE5F11B40ADA5D5A3D0F4245D5F8C8CB8D6E22
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueID 5000793 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
+0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
+B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
+AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
+97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
+FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
+20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
+0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
+F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
+3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122
+A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379
+5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA77428025D4059BA
+2988AC2E3D7246BAAAFB89745F0E38580546045527C8779A254DB08DCC6FB9B9
+0E172209FBE3857AF495A7F2B34BC895A39A30F903DC6E3202D29AC110D868F4
+7184CB78407B8B9D42F6375F67FD4B828592E4A977B9E71854D143CD1A9EDCD1
+767CC2929E071FBA4C3D17500E28A23F697B5D5CC68D5F56EAD14BD504E07182
+3FDC12F5404E74EC1C02AF00C1A6A17F958770ED4A024F5B3644DEFB61F2578E
+56013D0B4E7CA3AD255E23DD63369A921D427EEE0E098E8148B16E8A5613A8F8
+A5F1099E15AD16EC554B644DF306F0CF3571055A81F1B464529DB49E919F88E7
+581066BEC4765E31BBE28C245BBF0B74610DBA30C63A71A4F3B60593A6B41C6C
+636C980828CFE9A3362FBC02F1967F0F770A4790F90DEF9D56E0A76B0703FC58
+2841E6E8D984FB476D4FEB960FFB6B386EC6CBB9EB83704B0AF63F38C77090A8
+DAA165E6C6BC86601B14F8E9F504A9D578AF05128D8C1BCEA9D21057958D5DCF
+63459352EAD6B4A2A666CC5D85855641CB31507F9E30405977B74356FE985A6D
+541884CB65A4F5A8D4C82CB9D82846CC510CBD243E98A0011AD37A81047021DF
+46F69D7C3DFAF2F10F1F0CCEFBE12EB70420BE90C450975434E223C67D24226E
+8B62BCA6BF93B0B1373AF55E4ADD92775B2DF199B6599CB02DB64B2D6160BEBE
+449C057B5B2D226E0F5D7CFB5C9A4A7184FB29A595E91252AE787861A6331FC2
+6605C995D55120121CB463473A7CBD22F270D56CA8E0DA99832A468D399CB9F5
+A1CBCF0031D99F3C4F4B78A0944BED5A7B1AE23E3A66EED453917F9296077306
+06CFA772BE60854A30885DC5FB8417E0D3F7AB45ABFE186D877A377F5D17DD35
+0FAB81745294E35A5DCAB20321C6ECAE276B63BB17366867F346CAD53E06AD96
+091CAC75465BCDDFDE9C4364B2A8EF496C4CDF76B058E4BC1F616F6CF62FB60A
+64F81BABA7A729B8CF679CEE01B1C985558E8D1493C03B834F3696E5511A1917
+2AE7E16AA8FC516CD2CEDE020BC5777598165B6EF2310F4DBD54FE14071101EB
+47F4B2B59778B1EA7DE13ADF46393E07DBE2082C2487944A71CEDD4ED7D3D877
+749D2500636C3996A34EE0CBA770F6B6A655DCB9840AA8236EF3F6182E1C8997
+395077D9DB15B9D0A2DF9A3F6042C94E6E492C965E4E8542AC4AF5B21906B6E8
+4AE2B01C0810E38BFAE99DD83EBFF8E145D09F763B6B134A25A1CC067C6DC1D0
+7286045CE90BA968598D83E5602ED96C72A424848E211C028CB344D95DA04ADE
+4C5DADCE9009A72B6EC01E7B5CF8C52BDFD2B416F5E1833F514659D94BB2F452
+EC4F2E65CE71AAF79106A0468D76D283ADD44D7DB5760AA429D61C1DC2E912C7
+9446C19557A1D12E7116B765BE522EA166E8F0B604807215323DC5C2DB1F2E05
+246873CE189E03FA291A961E4AD90563A8F7B0E08A67DE4CB3607C6ECA114DD0
+DCE97976E208615F3CA13FC44041360086A4A173D5441D9C33A38013099F73E9
+0FBC96808F7442FD4D56DF7C4F2D4C9B2301F7CE626B4C6C1617B8F1584DF195
+F92FC6385070EB02BF2541307E4EA34C131815FB9028C118F4B792C5E74EAF2B
+2FEAAA4F5CE91829ABEEAD9B4DC623A08AE0D8049DC1FB98349FFBABD1D2B5F7
+B2D58CF489C1116C69B0E39BA3E669B3858004BCD4518C3E0718DC4A64B2EB60
+6502E783FA4B6EBD1A7D112670467B74F8A04DA69311381DC4C26044B4696BEF
+EFB07B0BFEB7E3F7713B61706F348EF1AC277E6C43A8DAD97241D9A7C0B97D44
+1032D8AE53999D179CF8D749E383D14DFBD6AD57C6808ECD8BC8A3A14ADD112D
+77874CA9C03F752F15DC94D2839AA4638F0F842CA5D8D1617BBDD108CA950AF1
+23A235EC6CF12B1D3F4741AC28C4B2906383A1A5492AC1BAB91FC6C7182DA522
+7098CCF89A5D5093AC0BB825E1D135847F5A710DC831D4FC712C41ED765502D1
+BC4B74CA6F65B776BF110862316382644EA5C79A6E0C49BCB44DD88A536E25B4
+BEBB9CB3A583E579E775BC22B1FB3C1848A7E3B6665942E9AAB756B0522005F1
+BCD665F977B85C37FA97B5FF19D2558A874611364B4318FD659D018498E2C994
+ACB091EFDAA211F3AD8F720489753816FCD5097334D12B02F6C5CD060AB925F8
+E61FA171FC57353144D2946B33E8001D3AB8CEE91F02945934BAD0C06B4757B7
+7CDC8EC97B4FF04B3470D1D4AF486589BA1B55ED9DB471877784FC57398AA686
+E7E220D04C06AAB74E7EBF3103ED1248CB7C9F49643CC27E21F3270E096FA915
+486BD1D3B7CE89DBB225AA0F9D75B951817D41472C7B791CACAC2B36BE2005F2
+04AD42AF90A2EC433F70C085DF6589C50744017EB9BEAD58FC26B1B56C285910
+2B2DBA4870802BA859F275815A7AC1032B05028D3044CE118DE5DCF048713250
+BDFEF7B95E8CE4DD75EC4B97CFA5C5ED5B8F9191E7D2D2313357230E0629C41F
+474B1B9F5F6FC94266621F0D2A50CAEBC60AAF6F24D7062FF4FA0948E12A74F7
+238663776C8A8031577FC30FE095DA64C90E29F51807DCA8F4F83780624DDB14
+556472128263E12E16736088DBFEC7085D3628FFB8A35DF8DF5E400E5C18086B
+352680C7575B4DD9063CD9BD7372DF56D39061F6A5A5B1FC98FF6DF7E00978C7
+26220733B9D40E4A97EE56A8FF28BA37EF3ADA813230C43F33A7A84041757A27
+2156176B2F668CC4D76516E4E3C356A9EF414D51FD0549A70647AC86B6456A43
+84056088E5119AA4594F6487B75946BE84C510200BBD779D70E8B61C700A939E
+3217C49E69985AD039CC7BE4C730732FE2FE01CBE34CB774B16CEE0358BBB56F
+C8115E3555D2AA629AA2EEFFD19D729A18ADE2F91B3364818670905186B9B029
+D25C642313375FDFA4D6A3BCF349865E7EDDEE435C61FB30B04B8FBB1378D0D2
+694162AD5E4B4A79C234F469DABA61EB15EF3C3D20D8AB5C01BBB4E724FAE144
+E9A8470BB2699F3ED8E6F7DD946A0879123459B44E642452C64620F18C7B04D0
+AC4296DC67D8FB0B13F180FE00E82FEBEDD7319FC6CBA642489FF2ACF91793F6
+6AB7C3ADC0D0F09A02F42099CEB111C097D73FCFC007422F4EAEBEC99EF05732
+09AAF021324F0B190D026CB0A21838C494A00E4DB00E362A29AA54E05F987D51
+F50E98795962DA5A3D7DE59C89E60554AC31E04AC7DE6FB46C5264FF771987AE
+12F9E5DCDB3365BB2AE18CEAA43246845CEB68E938AD726BBDDEDB561CF1D260
+AF3B9787B7B491F1169E118850886319D2F8A5600AF06675862367BCD68C6D2D
+27C5DCE0D733566DDD430FB83A4900B131475116B6D123374463B22148CBD831
+4C524195BADDEB0105C6911770FB4875E94ABDDA49E4AC41D8BA10FC28CC2807
+706AEFFE3B12D4FDAEBA50B255FE2213FB623ECBE1A2BF57355768F12B022AE7
+3F18DBBFCE10279DE13A0633737C7794073255DE5E424DF633C700324C8C795B
+0037E819A252770267E46B2307CF4791CF6CBC4D857A18B9DC2B5C493F389AB7
+5A859765342A8F71088A9BF7C94A26FF5EA240B798AA3888FD0D3AB7E696D693
+551D3E2678A451027C4BC4A2A774A3335CA803D85A1D205225E9DD2E219B0849
+AAD18F56F7FF65DA30B21DEC14047039178652040A5B3BB9514FE1EDF202660A
+24546B62117862181469C192D74F2D5E24483BFDB8173EFA1B62CC8E96553B74
+7BA2A2C763A7DC9E78818FDD67B5C4B13E893A99068383D6A5644DAE0177CA5F
+BD2B00031ED86DD51E7DF343539233BC6A8B7D75D8A47CB16E1819E8C749EE07
+4053F56BE02CC04A67B73D25365C1BF41AD384749BA989866D54B8A4F69AA1F9
+C9752774E8C0C917318567EC7AF0B847EAADB75FDC46BC48FCC80D9F5AB0D56F
+762404B5190A07AA02C3F8278BC3058CB57A51D338754BD152E956D42158208C
+AC56715B72570E91D0F0CE72EAD1E3A9C5895513DA0599AE2B6F2DB678E732A3
+4CC0918D27A93EE94CEBD3A2A2D350A6C116DDF6BF5CBADCBBD83FE3A2CE888E
+58F1B8EE470EE81F8EB0E87F30E228616190F4847AA95A77E4D1D85CB463D7EF
+A33F63AEAAD1822B739AFA770AFBD394B5745ED510C84A9F2B226AC67A9BC0BA
+254B6A69F1A3CDD616DD72DEB93677AC1E2FA973B53DA945BAE7FF61B8677A34
+9B53BCD8D20DB78159BF76ABF5708DD847F97A875F1184EDDB3CB7B8086D8568
+36A6557D675CBD5EA77137336E805BC7886CF89651EE2DA8B7FD3D7FD5944361
+42272408AD91353519F895A302A419DB8533730A51BB40BAEB512029B8817E69
+0B8B130DD9E3EF42C32AC8FDB022D55576EA671EE98D484C268953B3D95E8EAF
+3524231212ED7116534D26BFC2D69E621FC08EA38C00BA7EEEA53BD71792276D
+20630F4F2CE9C444FDB3F0F03C32F419FAD16C05B80CC74FB0187472A78A019F
+2E38BBE6E0D62655A4E09F40980217EB56DDF74F42A52459D261B91A240581EC
+EBFD52810A1FA41EF65D2785484B80F1D728597D8669C0D5C09D2816AF24F752
+EA846D2B028077EC6D9830B8CA4ECA7DB77AE637750528395754CC531C905FFF
+182B160C780C6EA7AE8F8F42FC07E8B0CB5F9B6AF842C728FAF7F7FC8CB5EFCA
+2161C8E0BCDA9B3F100F2FEE71F9BA941DFC5C1A4ACBB3177D2D0A60C7BB23B5
+C8304153EC1DC5A4EDE951FBA3CE223B57CAB15E7AEA03104975990DBA44B971
+F7D52112B6309798DB7ABF51383CB091225A7BB1721ED1A03DB2684F3754A706
+750B6BF629136CE3353DB97BAF71D6CCC5E857A2ABFE104A6445E3392045DD66
+ECD4A5479C18038B5375A0DF3586187ADD6A8F61A51EA1E41FB67FD9D728F3F9
+DB8B04772112E69382A34FB7B2DAAF5E7E653B6BB300D8EE284FB49FFEE69A5D
+8ADC239268E0612EED7F08E8A9E2995F10856866A7E739FCF376664B92EFDB91
+F2633033398A215918D9DA74A4F0F09692FDEFD1BC7FC1899580E6C08D8AF26D
+6F720E25241E76A87205A65DC8871D32F92056B5BE9438F3D1225FBAE577ABD7
+952C75DDF86C433F1AADD9798344C62BD300663662E35DF041F143DCD6A4248D
+094D9727DB6389CB05BAAA752323280E10C99A8A1717D811C8030DD97DF3D98B
+9759CB26CC003F574BDDDB8FE1FC1C8197F8B071FD1E7F4BC3E2212471AC384C
+8770AFF104742B88F8158EBBB3467B4ACF504F4A3C4EED87245F0811D936B2F4
+5904EBCA5C1224736F5DFA8934DFF8F6AE0DA84DF6B43CDB6A491F36525CA7AA
+221CE05922DC7C0ADEDA5D7A992EDD52CBC4CF82580CE15D953A9658B2EC71D9
+E8DC5B3FA8C9534451D457F745DD18C44438A70C7FE457745CDED39FB6F7223D
+CC4D063B2940B6FA6645E1D68BBB62A440BAF0341B883B1DA34F340B21703E3F
+D9DE3965E40EB9E61ED42EA03455F25BC25112B11E81A917F02866013E77E47E
+3F6F92BB76F2EFA8F7B4BCC20772A78345BA34A074CB4B7AE7988563E402872F
+B1310D0CB7EBFDF05EAD32944BDC70953DACBAD16E6C72590E403FEDE9A8AEC6
+4520334FB4C53202EA19C5825CE0E8784696AC16C23FCB2A7E8C88417A898594
+7B0A4BAC3B46F6174C9821B3B169E49FB340AB07BB3383868CF6C542A384D610
+6DC6E0C10C26F6FFF27BE7D82936A15A3555AD6B19E84D548D9D58D54998E459
+12CC0C89325E7373588449DAB292DBFECF9872F2C4601B731334B86CAC488F2B
+D399EBCE0A084B90FF3F41169E124E6777A0DDD635FB31A2572A19C516451978
+717368FD0E14D446AF7382D424F6750E0D61536D574373B42838E4BDAA34FE52
+625EDFDDCAA6E32952115D7FC1B22229AB7BFA0D31E3F19604A79F0EE9529287
+2498C49610A099F76B0A736AA0B887CB0344CB3F32D9654C3607B6373F053233
+02D960850D39EE00007F83ACA09FDBF3E70EE39A24FC57FD0A3AE046DF02A8C4
+8F2432E78BD517E179DFB16AE0FCA608606C8E4F6BD81FE20C168FB3C3625C42
+64CF2BA9CA83298AECD584157576ADF528832AF12415129BF324A3813C324D89
+D13EB101F6ECCCDA77AFB15AF36F7B48B34D57D7DE23328D8A97CAD0C5A2461D
+6535407EF0F907BA3274B4A87D8BCDC9838398EC738949532BC511FEDCA9772E
+E7423BEAEECB19FFFDBE73F89138157C87D7726EDCAFAFFE237E3CD466CB668F
+D2329976D5BA24E298ED057940C2E87A48D65DE79B4F986A4105289776A137F6
+FEE20222F3F5F049C7F14B330D4627B15BD48EBC734C8F568755515127A7A8F1
+471CF2ACFA2DBA613834DD7E0B2DDD59ABB2382C2B3D1905C39719EAF1EC04F2
+7F731D084DF76B6948D8F2A0571D66E84DD9626785929DEF390982B9A324BC3E
+D6D1C5D5FB41F147ADA0BD282387B9DBBD1576E6E128405A4AC575F2F2B83954
+B42E52781AE341371167763940506B4EA4A8B243FA32403020498A12D350CDD4
+E05A59605665A337B38D8F3F34FFCEA5C16CEAEB4C34E670852C80FFF4E3C624
+6220F65BEE999AA487A2D24C58C4CE684B74A3C5E49C01C4CE274B9C4A442CA8
+50973A35ECD40B85E048B1C0FACF78964D60C026C2E2DFB8941A36E0B7B28CE0
+DB5F5A58260716DAB92E187A4E518CD9A93AB5F97CE6ECB8E7523D7B932C99E0
+7A40A73ACCF22F0139925B76E388789F252CCA699209D23B8D341C9C5FF81F0F
+A2A10C7F159C45896A244B7EFED4CAFE35FDA8C3D4DDD28F336B09DC2CB8F56B
+A7378D2F3D13CCBCE823A81FB84D051734AAE8395EEA9F9CC35E10B3770BF2B7
+827CEC011B2B125A21B9D923152983DF7196F6B54588C258372D5EF51827B2A6
+23934358274D7ED265EC913C596E9545B357606A2CE0F644A38052B6B9BFE3F0
+C973035A7F11BFDF17CB5B3547485C8088551F0A8B739C9E798C15853317FF98
+599A65934B447EB6844727F740985FBB16BC77FBB89622F950B9ECA9F4CF215F
+4584CB8C3FABD1F45CE7CFA3123BCFEF5D427E37290DD7E8F5FABF2C1FE63BD3
+8FDE1816F9DCAF432789679CCAA4AC856F8E06A63040CA81FB90E37F3804C7DA
+C82A0B8C4B9AB803FF5B5494586955608D9B6472583B38203B18BE0943CF6B67
+3EB41329EE7EB0E7B5ABF722F9E855821BB63EA32FA5D4284D3D0F365B2030C4
+5E855F51A64EFD5827BA4AA5865731C1FBFED2F75BDC40D5448A66F1B0EA7CFB
+F893034C42386B15E22A255A218926E1C4001F499C7127FB7DE4AD11B6FF8E53
+BDECEDD7E59F13F614C849FE407F653FF6A4D7F3DC6C260D728B36A7EAD4453C
+934B3A6CE00C42F3B5093B9A6783C36F989278C3B2BE8A5909589F0F95937F2D
+D2AD01B3C289E9BCBC07CFEB2B0668678CCBEF25C2F939CBE4E332870E705946
+35FDFE97E45D356B6C0AA8164A05D6FFBFEAC2990937E9024861DF345B485B83
+21A1B21A779EED3EE73A7ECDC0C464D1653D76B611A8C76CBC9D2C280EE59347
+71331132D76F5E0D2B3277958B49C7E36E9ADE80E7C9654A68413519E4FF29C8
+A05534C8C1E12A228F022C7AB1B5523FFED08986443074CB7C029D2F535A972F
+6E9414811636A915F95B7264505C2DC4531C9C6D8B8399FF96D46A358796EF7C
+AB643E601824CFC87692AFF952DA1103AC8C396579F6C3D345263B9C09560DA4
+8369CFD7DD502C3116B270BD74219B39B368EDCE1BA32DF8976850ED46480612
+D069C3731337BB9232F2D641A5ED8611C97716597D6C7FFCF6A42D00432935B0
+95A56030C4CDF19EFB5FDBEE9806744332A18873711076E6EC4FABE9588D1D4C
+1771FFCF701E6FDC9CB9BE14C7E91D8FFC898C9A4483FB67176B65E4B517131A
+6420B2C2B92C6AF4E3DF7C16F1FCD5041FDA0DB071C902204A219064E00D3829
+94BB53E1468F984777F412A8205DD06F7B9F7CCB61963411B69E39A6B0969684
+0F04A5D4CFE09D9448B91033E8E0DF40BFC7A2C26B391982328FE357D811A7F7
+31DCE0991BC63F286C63072503E3BE5A4FA023FD0C90B60AD076D879D5142C60
+33E9A2F6BECA8FA37EAB6F6AD1C007AD8458CFF7062C0D59FBE2F464CC5F819C
+0100DC5B1F492C994C21DB335E31F9028A8405BD2C7C9E6B4E6B1664DB0924C6
+C4C3421D5DBD24AB2364A4FF49301E18CEAAE951D58874020EC0FA0CCC8F38CD
+28718F2B31F98160BD68187256DA6E01B5D3CD36BE526EB02090DFC6AFD89C4A
+D03F115EDC247B41211A4E289CDE67B424CD665B4D2DD457874D160400F0255B
+ADF7EF681C6C52DD9FD13D2780CD10D11D1136A72CA8072CF43CCCCFD4E54FFB
+B36EBE90605C4E273D7BD418958EB0B170312CC10B1BF7BC0D8F94BC4FD984DB
+937891E06C7F3AC2FBD3C4F916A7D7CCF96C38168A9662326C4AC8860F1CC17D
+0A02AA42C73D0D974B3B61A0D81B93DE2641D71272B9F2BCA4B5A1F2AF440BD1
+9DC246A79AEEC9CF26DC34572C5F0FD0433E6684859C9D43F06DC15594298A9C
+47D3DD335FE4D21B2B26BA0ABBA0A8DAAFC4FBED4E107C2E680DCDCFA0659E53
+66319DF3D69924E79D9B3123A085245208E712A4F86D023CE0A3BFD16C4F5890
+69DFB64E9E48E4F0AA062AA392F0224511DABF7FEC63B94FA3E5B1D74816257A
+3A4DA3AA4A8575DEDEE71B854E004FC2784D7BAB4C84A7DEF212AFE275C29A85
+00BD8F311E3687EB95C20E3FD328A904117E71CFEDD68780A1F595B1BF5755D0
+6CC3C174A3D4D9C4BD0ADB763898043607ADFE2F62DCD913433E02C1C1D1363C
+CE328B6C1466839E3C22F30D9353EA0611D68EF070235F731EEE2950C6CFE0C1
+09563F9B9C39EA4526E8CE38FFCB9FDCC762B25AD3189ED8FFA914E59D8DF563
+441C51C304D6587D5B543C25AF3673E532AEFE0C1D2BFFA04C9450E55B223CD7
+446F777B5E52154E6F980E1E7380E5DCB12AA7B1905ECB92E3E7DD250D64C7EC
+E2A1FE667B328277A33177655C3E453E10CBB5DE3630E633887E39BC92B29B82
+14ADDC605199C950BCD18C28F2CD834BBCC37ADEAA6139C6765ED40C08FCB1D9
+24CB537F0F0F14F9C89FA111CD84E5A417BF282A65C22F1AF43F7A00CFF754D0
+4CD244FEB1B7299FD69BEE63C0E4899EFA527367CFC4C920C20085483EECC059
+2F66C368808DA656B1C092CB53A9B3E5A5250889BAD55E241EAB6004ACE3431E
+BEFCB9BE94C25E1CEF0B3632D3D72279CE5E2F05F75A343CB7658BDC2C120C26
+685800504B05A938C56FC91627652B0D8FAB94F4F57DF2702C85AB021E640DC9
+013F7EC636AD0770A6D90F7289946CF03951E6D92F8066F68F23842E70C0008E
+BA986F9DF7A78C0EB30350DD52EAF82D32053C3C8182C51BE3171F9094952C13
+628403CABE67EF308B2492419D94F93E7C0453873A7C6141D12ED6B482A70AD0
+33C572EFC7431EC51A388D0A7FFB1122F6DE4DE70BDC8597B7F7FF220275A8C6
+AA05147874727458E624A5338EBE95A99D1529E7FAF981F4E5B7158D2F6DB7D7
+057756D3E0146EEA649108E6EB17B186FD2314ABB0DEF5A02C75542C3EDF11DC
+E5660CAEE7A102627B110ECABEF1F0457E619F429EED4B4D4F2ED19D276B50ED
+C53A515750A44A139CE3AF0F54EC7E4D2E9A95E7C5560C37AE2CE8C2069C69B9
+49D82C48629D21CB7976CAF638EDEBB48BCF928211909F9FC6F1EC53557C3CDE
+B536D5C2397681C2EEC7B1B45AA6330336C5A1A603B117B328FBF1DCE5DD4984
+CF2EA6BE5AE975AC530AD0AEAA68C6854452A8E152B01CE21A3EF3FBBF814808
+041F415F88F4C0D1B138C6794396D6384BB3B1940D8541072D0E0EF3B072C84F
+175E90E9BE167D3623BAA68BAE16EB8D3A37B01EFA248C99BC387EC50FC1FCAE
+81F2059B29868ED55DFB5EA982942766466C2912A51B9B245E26704767B05377
+EE575D2723260CF9443EE83D48AF5311D19F3AB2E0B9EA99EE33A9DAA08E6884
+4885BA35B092C033C52547F35CC840FBD7ADE26AB8E5791930A80ED7EBC17F96
+40C4E1F142253C8BEAEB88061D486C8BA3776DF2598C6EE4D22A371B02D2FD20
+402A7F2278DC774236E57CC2E43BAD027D695D04AF02A9668E7092E21FB3F268
+1453AD9C2158B231E5CDCDA5A37A4EA0B408C61EBD2AC7A669270999BB7C3D4A
+9590E4DDAC50350CC929557EE6B694EE13BCBF3A8889ED59AB36505F238106E4
+908C678110AFF73227B0C1F6C1B622C76C242DFA0213AA7ADD5C98F344AE0530
+C97EB6B4FD044C1752977AE8577E22DBC0B183711E47A410D9DA539121932A36
+313F9B79F48DBFCA5F6700D89DC9469DEF3C5D0E8A36FCD60A3C2B00748F53A2
+C928B80420610C7FFE1C141C226BAD4468C9439954692DC5BCC7F01562C902C8
+6BA19D25BF6993DADDDE6EFCA7564DBBD28B37D8A3262A08EAF397A48BDF547D
+E2B3B20B3AA1F105F092A2189AECE726EF0F7F25D497CEEE57CAE48576453CA3
+369222BF23760E85A714E33821B4B08B3C1159B766BBFC8B87BDC64A3FB8096A
+695FB27F7625D20A822A731887F119E45255348442BC5F8C08BEE83B37951225
+70C65307C98895BA0FCFA9DAFC464BAD78A182BEA1DE19B34CE77CC4A14B78F6
+E11C085DE14039B61084E9E83E074722DA3D4772C239E51606648B866874D40D
+9B445DB50B497725E2373C268ABE838CFA5FF2DFACD643539A6A9F86C25F0CEB
+51429E91FE1AC28B04D9E8FD5E440F59B0FF11BCFC1CC834E42E19C202986947
+08A7FE14B616C5C105C400B88151231E0303D22E1426DF7D586598D1378AF870
+6F590BDB68110428D0561C5E1AE7400BEC60AA1FDB9A189A0BFFEB2312414C95
+187F70F0B327F09B83FCBDCBA8CCCC0E41ECB9AEC489ECAB26666BE8A8AB10FE
+5A95F2A0EE3EAAF21D40D5CB3B155A2B9CEC7615D6F267121CBEB3D85C283E9B
+36D9B0940DE48B5687FF8E5364C8D7B851AF3F8502B288AF7570965E62029803
+153080441CA754CFF0951056ECAC2C1C58D0EA87B93D3B09A0423E3FDFE1E44B
+97550E8AF88B65E672E8B309F526590A438E38E48A14E01530BAAB755721AED7
+00BE9A1AD476F61170D4A1FEBC0FCB1486F75F68F5E8809F735F7C7EE0398BAD
+6670E1A678A99F2AE33D639FDB6E504AA9F02B3D875DADCDC965993A86112BB1
+4E06541C8D658E64B26A7B4F38C0BD161D25AD0B0E815C4CAA65D85C998D7DFE
+DFE69331D0447ADEAE5E24A9896BFEF8493CEA0FDFB81209DD068EBF24D3E9DB
+A91FFAB381BA9B169595C1171F986820E9BB9AF52726340C8A256411D89A777B
+2B804FE94DA7D9E9FD0832F22BC354D4D31198712BD3D2A3FA433B0C2C8EC0D9
+B8A0A852C2106A040658AFDA6ACF672F02D432FA4CEF0ED148A6F08645D0C73B
+268AD4AAC25EF9DACCD53E4FCF07E2DCD9A32210340D7F4295A187365A4A904D
+68960C4E644A40B9F4E3C6EB2154B8456A7F8200CAC41F87A5936D1B230E0431
+F4D65028EAD48BA22CF41815D8CFFAEF0BC411E100A401CCF25AA630782D9C0C
+4DCC6834877FF4A0330C2C7EE37C58AEE4A53AC28F0AE02ABF2ED7E65D80061F
+905E38EACCB58390375DADD554C98CA2B005579F8E724C97B88F6AE8289EF21C
+F351267D586922AFDD20892BF3263F5FBAA4A3E7C16024187FBBED81B557196B
+D2EACC985930C0E97539EFA52BE652EC950212E156F8DF4B88D1AF2992B79C5F
+D25DCD8099CD2AF75FCDEC084AC81B94D4B09488B6A8DB446741774E11AF113D
+DE79BCDE46F1D30EAFADA8401EB76FFF0613F54C508076AC8CE62773DC44DC65
+194083F0305D174A25E9CAB354019D1DD787DCBFC00079AF126E5C75CB4CB10B
+CCE3BCBFCFF8470658E234CE47CE610A064C90CEEE64BF4E94CBFF0769EDA6CB
+3F60B4F4A12236BD273ADC174DA360C7A302B7154D610C2EBD0439EC2A0AC1BF
+708F327C709AC551F72F93318C61E227B2C04BA2F5BEC6913A7D14E684831B80
+F625FD2526552FC2A952112EA17BD97C28C4D5C4A985703206EA7599C7CE5543
+9F06D89FAE65483C61CC99C1B479062F514156462B010FB0C130FC44BCC8B1F3
+6437FEFC5682B9619235BDE023C7FCD389848BB255BA164FCC11B298E6FF81F0
+198FBAE98AAE5094380AEF9C9EBDF7D9DC8E063E01D20CFF3318C0BE4539B03D
+454FEE6C426FB9B50EFC5A5D90993C2ABE542ABB07540EFD18DEF8BA9C649452
+0BAAAEE1BA0AA0174616980A1FAA41DBF6045F6D71911826BCBBB85A29C50DFE
+81D474562C33133AFA8BCE730A347B7225928AC3393FF04080DD74B685D83C71
+C79974FF1BD93EB1483B4115633F8D22F5740EDDF7C0AB00EA0E5C0E33BB9AB2
+6B25E4783B47E129BBF5315249BAADD06EE754442F58F803F50FDFC3B90E33A1
+F15D292ADA6C5A562474E339A0EDE2AE8C5225E182C0AA5986E34AF85CA30185
+73FDA3B97EA7AC64E1834E4B7BAC07C4404B41D7D327E4A6D11E672AF6B0FD5B
+B16BC5C05C3A6021030129C7970EA1B6255E57AEB5DFAE77951667C85E9C7912
+D626DD5EBE8080FAF71916E21E3908CF1187C239AE7F99BAFA6AF6FA9BB8F6FA
+10548EDF22519AA6C065B6F36B362FF63AB22C28EB9A2C096AB5C3B3ABF9F0E4
+230B111051268A91099FD425298224BBBF3D82773E80661F46A2108E434E950E
+0667FFC199BBDF202A02760561FA2C938D633141C2567A71769553DDBB977E62
+487AE5F58F405E2DF065A1082C64230EF6988F371875E7455AE359D413FC19E1
+618E13423380CF7101C1E5786E437697BCD3AFFDFAD0E2F4988B59AFD74CCA7F
+C0849B717EC76D1CDADAE754FF3E2888100F6F8AA5A407565CBAE2519FCAC7A3
+6BA7D2804B55277A96785BAA7007840ABA7097BF029A42F09BBABDA7F618B009
+02B20D0C5166170E49F927ECEA486DBF60D4545C406288BEA9185D29419AF9B1
+DC5B2426047444D704D1C8284DB6C8916028CB559A1A1D993C372432A8FEF201
+8B15EBDF1839FBCC99AF4B2CC70184227739FEEA44F71B17C066BC6E8281BE57
+FA43B781CD0B22DCBB4D45FE5D043F7F77FEBBBD6E901021405E21F369075CC1
+A5EFAE8B1223DA341CDBA4422051DAD575D85B8F21D3D0A23AEF706E6C7889E8
+90BD5507B77214FEC20248907D9CC76F06261EDB9C1872B58D5B24EC75A12637
+46B326DA1CB035F5101A0D61423E929D1492857D8D3472CA79CF864B75E8C884
+CBC59B3F398D2AC1E72EDD7712EB9C771E151DA8F345F49CA9184D793531AC0E
+6C61BBF5374CC131D7D132CD9DE327A6466ADBA8ED66CAF4C3619CCCF439036A
+C79828F7F6CA8FA0E6BF1156589D5FCA0180A8E40B9BD937C20A3759C4A5D2CD
+AF6065B9B04660DA644AC7812348F005614E3E68F34FFD9CE2A8D4BD457EF076
+B53F1AD0855916BB95532FA2191B5AFF57E34028A2438363A281D4A8A17C7271
+73C772DC4E1E13214B8C8FDEE2535C68728AB24D9D1A966B745FF6DB0347B907
+92EAFEF9B76EEDF4A9D21D77E48DA53AE70D4B82C2F170D746667AA7560481D9
+953DC48BD52240ABC2CCA770150E0766F6D2CD68D3C6C98A216CFDAC5F7AA074
+439A23338CCBE958C09B80A1114492669E06A8B59F11E09A06D5CA95F5079CE7
+1F05A6C757F2E7E77063BE425D4F9C231774326C5F474662DA165929D06DC06E
+5EB521CCD55445C0D8D309CD4E86DCC01BCBED2461536DD64C8EFABAE3113080
+33756075E86C360F5172C2AE9751E166E095C2768C6F78D2F034D7B8AAEB4AF1
+5AF5455B393ABDA883E40430EADF998233BCFF3FEB60BE426FA32BBF703087D5
+162A205F35C5EE5B495C818576E0A0D0185C46B2261D0A3AE5581AFC867F0421
+33EFA2AAD59FF5F4B28B4237BE6EA30F411C480A5419E88FFFF6F71CFBF524B7
+3373C8779F3D38348202046FF56A9AA81DE74452FB2B4D74FF664484128E9773
+3828C9CBC64ED407B4D249DFD88E4C6059E3A0EF0F78C477D9173A8AAAF3C2C0
+4442D24EE56A41796E1F022625F147350D01A2941005D7D76466C09F72B4C6EC
+2ABEC87DCB93686A9490D123996F2E0233A4D5789606C1DF88FA1E2346334FBE
+8C2F1D0604EFB1480D7D92C60EF352B98D40E529D1FA9BFC08E65ABE99E9A3A7
+ECBD6640D103D25F7CA7C3746DDE20F8872E34CE5CE1A5D705F26505607B534B
+D1E2EFF16A88B21785BCF5C0C7C94EF71D7F5B70C1CD648F79A0D62E8DD798AF
+78A6BE13AF22426C6A3F84E74AEDF294FBC6CECC7DA03263BA8D3BECEB51E07E
+5183C9714D421273EEA1786FCF2136FB35200F39403247204A93D8DD0E061A70
+FD3FAC8DE2941B0790D1286E70BB164B608F663157B36B92D9FBF4806AC5C85C
+83D3AADDA9B5ADC8801F54DFACBD443D0671EFCC98638D5AA83640991C468B02
+050576A22700A7D253C080847012A5D12AFE1F64E9CEB0A8BD9D9835BE9DFD73
+C08F415F9FAC16E7335CFAAD30916DA2208A1A1D92D94CC43FFE83536320607A
+AE216F2423F1C44F3EEAE597C614DE23A4F5AD0E0EEC702DDB0B681518AC2661
+83D85D58BA9351FDFAEDCEE6A657F3013D10FB108BEC655DDDD2B292A0DBA305
+76E08D8776153981BD805B191643C49FE7F112ECCF33887E05208CFDA3035E7C
+53DE8F2DC368F3EFD64A5FF94EB46372FFC5C3600A5EB79F6D55F0F5EE536255
+564E3D4605CD5513812E00C02E68AE770FC74B5D2B474EB11257CE60B2EE5385
+8D79B59B8E57FEA51662D012044EB1E759424B00D6E3C9B60F760629AA6B3C71
+AE02C0D5E8EEF62B316E200F2A65DFEA797673AB9DBDB269675F4EBE0AEE8A56
+938B7ECFB5D0818831CD99DA461145B2A7733400650880C582B5FE0A7F65373B
+9F06931E17B0E338C9749913C4416B1A2948672B5920AC7394BD49B512A96788
+EA25AEB8111D7B1010F78A6F0568BCC2A92E3E13569EDEAE5E6AA4BD2DB61687
+C271F6FA05A7374E156C580483B5AB1C352BB2FF2FA68BFA681E8C4FDEE4D8D2
+A794254B3340FA82B3A4D373D2780C7404F3E1C58EBF35C235D47A67094E2982
+2D2CEFC9D4546127FE445ADDBA25BCEE039D86874BE5D3A8B35C8E6DE6D7C751
+F91DD71BA744782C422C2A4410CCDE106C17BE390D58480565FB9C382AD36D2B
+674DC1AD7A72D3E61AC694509ACE0D0CD0BD0DDB3E4C54B026A803A82973D875
+13DCD6A5D33A89893C0E1B03EF1BA703753969925B835D1EA598ED1C464CBBDC
+DE0048DF3B5597B9A8B69620721016D72F217EFE031C690E78F55AB9F25D50FF
+0A9313DBF049CC299B66741668FB6602A8FDA41791BD90D61C039D8181CF9CDF
+E0E400EA339267C6DE2B6787385714C53DBFD8A3B11FA8ACDFD1D9E1DCFB9F00
+823AA131B63CBC3CA7838A410BB79A777E7AFF2E94539E6CC4F644558FAF742A
+7D96591496EF10E5B4D9197B6B8A1DF530DE579F6198EAAC693E8E4342283898
+D809C1EEC0EAA25D8F9D2483255F3EABC9FB4E9EE501077C2611A4A9C37304D5
+9DA262A5A272E1FAA9A4691C5A2D095042C4A0E81003B4A3D9C3D53A88DEA774
+1880BEE754D33DFAF8058A7919DB3F3EDC3B565F8E86E231557A4D48FF9722B9
+905631EEE5331EB628B68553279CF12D3B124FDA6C82CC741E45456A5152685D
+7656D0373F3BE63445DAE733E6271FF786DC1CEB0F76286F8B1BB3E4EF745C7D
+D64916DFD010A1754C6BF0F1545E865924F6FC60B8B36901C9984A2123144EF5
+DF3ED789DFE1C2A9C8C4165771BE0475238D78BC3C4B89E1281B842C9484BCED
+9C04781D867F142E4CD8870ABED25BD99CACC7E16762CB89D83C32DAE0BB4A43
+BA2CD338F47DAA89524529F276664C563C23EBED3A46A3A1837BE45FA0D92C74
+7D2F624AC5379325AAD79C73AD35C55952BEB47D938E1E069530AD71A19CC017
+6F215945A8299281E8D603884F30D948F583BDF3D0634511D24EF5F81CB639DB
+EF876929DBD5882BE184D9FD1DAEDE8CE9BBBF0650B820B94F8FB1DE9C72317D
+A3CB6D4018B5DD3F15658121816266243E5576A9593F6CEB97A3DA96EE7A0913
+C67E9C7E67EA60618250E53A4922B087DCEB67A6FD88A38B95F2905878074EC7
+2EEE2E47986F5B4DE3E734CB12C635435D1F3CB9FB73AB976B4B62B50029D650
+BCCB5CB2C16912C7798DBA5A10E05BE321E0D8141760CD4A71A58615503624CA
+D18653A8051F18BDA8530020883188513B44ACB06C51761A69A9454264B4353E
+3C691FD15BC6490AACD307018B211C444A3BA2DFBE64B4554589C3EE03985ED6
+19964D980CBF18EF329C905B1562D07A476592161431BB9C13DD616C324856B1
+D99367903981A959D6544C668FF56A11A4E6A8F137CCF811C08760C335EACD7A
+896DEB339070364757DA87D674AEC3CF2B73A907972111AD235E3E687BEBEFC4
+1B9E0244FE67A10C1F1F483C25A077440357190D8C23086A468DF5F204C4E77D
+A99E44D25F84F187759F801DB1E823042391062DC6CDB515AD7468A21E67BD8D
+531DDA55A4484C5737393AC599F7142DCF408D39E6F21FEEA1E255ECAB4880CB
+BD30235F6A06D8B85BB96C496BB4945B5D869D03AE23CD53592B1CC9E603D198
+9636D1EEF8CC323D05A4D115DF2050D0336EB847FD254C6DD87DB1C16F957637
+1328D89FD3E824277B47F4D184292023F7164FC817402915AD18EA5FDDC0E568
+484B69C1BD707EE0F17E99F841A003ADA952DA003D7E3015F7CD6671C99866C0
+38AA0004C4EC22083FC499B2D54426D73F355FC40CE9FF0F4FF898D3ACF54CE9
+F5C35329EA8C3D8342C375E94D76746321EC3C2C41CBC5C99111D35BDA763A95
+F3E087E544B8FF99442822D00C64519AFF28A4567239251D7F857CB66C411A92
+3EB1A627B5DF96AE5186F2A2C6DC3599EAE470E9D5E4DD51AA51DB6CE0DF132C
+C49E2267E3AE73A37974CAF206FAA471502CA50DD99A02D23E0BD2ADA02DB11A
+FAA4F1CC935ED0CC09366A347B5C102485247803980B88F87068DADC477EA546
+BED59BAB0DD6C146EE76891DC7AF56D87C5128C6B026ACFDDD40F9311848F1B0
+3745D94A521C53F96169EB060AA88AC19762B7BA18298A7E6783CFCE246A8162
+EFF4A3FF1D589C7B4F24C60E04F073882A3B7AEE9517DB1673E86353F8C7A2DC
+C7450175350658583C38546D7171A7D9A2F95961622E5DE16BE57FDC37FCBEF3
+17D5EFFB641A127B76B0E210782DCB7A6D9C8FF97727B7CB885E77DE90BB77B7
+93E59B9B05EFAD7EA49396A590F926F0E3EED3C3D00B3469C45234E48E5A3C70
+95F6B06783446665A1FF599209988DF2E14C8A4EB6B4DDA0C919A73FBC5DD48F
+278AADF0F2DC3B1AD4D5177A751B206455B2B8180A7D0A6CA16A2CFD6F042800
+0A51B62EDF48A50FC30534DE393F56298C446FDA0E2688619D25DDA39512E5C3
+07DBD0AFA890DEF8377901E3D083FD5E041DE516800D366760CF2F60EA788F38
+E31229C576DC3C2ACE277621BF3E1945A8AEE7F64F590C6E9BD7B8182F0E7052
+0B04E382A9D021E2959A4A7B7F0B8153D1815FE44491EFEB187C484CFF9470AB
+9760044720C74C13499D52860603439FE20AAFBC968A7085BF7903715A103390
+408DF7BF7F5AABD26E640BC4ACC9AD5A5420EAAE93C01C54D4774ECE5AD5DAC0
+A375696AE02782C54006A6C5E7AB2376DD3CF580DC319BD8AF07556B3198F678
+4690576921D1DA4E8CA6E8D2AB24144BE55C0CAAA29FE540DBEDE0FA19CE4915
+F7FDC6F3D415C163159AA840EDDBF61A32DA2282BB6F7BE3C0B25B97D6F33B9D
+ADB359E7FE393FD07F66A90F24CBDF65ACA58991D236BF55E70F0F83EEEFFA7B
+BD9280C77836ACA05F62087D87FC851BA3FAA9B4828C1C04DF4874B08134AAC0
+D7375DFE924480A118551247A787F46701484F13B78CBF53C4E2505E9BDB4A6D
+46EB367B6C592BEF0C4F0435F6AA1AB16EFE3CFFF2E0EF873878EAEFD8F7BC46
+91442950C720410F21132F1CC1072DD9AA0732E7A808A4B4DB0EF4C0FC4075B5
+3E05559438311C575D06FFE434832932457F14A3B344822DB9251781B4AE7130
+C6BD78F20AE92800782012B65AA2F50E5F586481E2B2555F9E220636BD042219
+6D0ED63BC5A1C9745AEAA322848605D0A21BFF7063668D4424603C3B7BBA7E77
+1A487FDBA58C679B6EC246740FDC50E965504B13EE43757B8D7021C6DEFD5D89
+A6F0CCA97767C20D1B8A3AE2603A32DCAB67CDB24563811976850786CE6555A3
+C4E05C5144F6BB540C67C6AAAB1549C698E67953F6C723072D000128F5972331
+FAF75692D9C468365C2D314617C1A9ED01621C246202A838A5C090722A93C946
+39FE88C132E81ADB3057B068E5AAB73388F11281B4464C70FA539E5DB5600431
+46F3B5F9708F0A702C59D022A3E490BD13F1163841408D5FE0296E3787DC7824
+D7DF4D1F51DD1D691B9116EBD597A15E991686B587C34B99D48DE220E4DE678F
+70C18D63A8A928EAF6D4020BB86ED766CED705064CA178108F824E69D23948B3
+918D8990A9DA0D5BC6BB6BFAB120C4116C4E3748BAFC59774D2E2B1E54E28356
+1223B92E55DD1C38C7992EAE97499342C34205EA9D78962228312BC8544C4C35
+64A7B9F0995EF130FCDF4A6AC271B238CCF2F14ACFAF2C52CF5E88D94427B59D
+3CA2192E072E60AE68635AA43B4CCD84818F8BA3BE6E7C3A12141B051EC066CE
+F22B72F32F7DB4C2DE9641473F2E7DD67B3016360293C495AACB39D0D09EE8A5
+829EA662A480655AF4372BC006D9000553BF51BCD2820759776AF30A58A4CD01
+F909C84B66320F657E59932B16CBB4660F30003F8D537358C07F0534C0EA2E9A
+93632315A142C322159D6E8C243767FCD9A6AE5E44608F1C546D6F14988C289E
+F724AD9706E1AC8B8B69525F1D9A1EF2123C1E226F34D8CD54B0A5831EFFAC4E
+824F342E25FDD64C8095CB7E0B077CAB654DD5CD8410B2B776C750F4A03198C3
+60D50F2091D26CA50C3D1EADD19A4474152013C0A7C4395C43A67DE232D21B96
+44F30F6A33B7A6E515705F50730FAE828CB828A83C6245F29BA4BDB0F2DED3D9
+4D1247CC5844DB55A42D11BD6D5D2A36FE316C0287789955B81B32B2C7BC490F
+78021F2667D4F0C866F5FE119A416CC10AD5E0E66BA57EDA546299E6FEC3D74B
+C1A0144D3759CE48361B442546425E1A5BADCB653F888EA9005B1BCBBE61F117
+F7DB7003CEB38EC717D97CB107E8C36D5C9CBDA7A64CBA9DCA6F4D37C72A754C
+54D7E98B45EAEBF36FEA9617EE21BE9302AE83F8D63ACCC2ED2A930A9A506823
+8D402F62664DCFF4A30AD57E7CCD617EE8D65EA164C3A6258937E76BF1CF6F9E
+DE29CC5CC415DA1CAC77E47EA11F0581403207A4BA16C060AF0B7EBBAB4CB949
+EB01F91C29151CDC84940BFF14BB524DEB28A0BC04D3435B9BC2ADCB20FDB237
+4719C73156BFD458ED3203A03C7E2672D96D77D3392455E51664AC15EBCA25A0
+700BB1D41AB6787C8B5B8247445B02394EFADBEEAC50950266C8B5D412590C1F
+CE473FBC668B9E34BFB993AEC72FFA4C0404D845AB9A7015617E314CF30EA7FE
+D55ABB0566CF07BF9EE798FAA2DAC7DB46AF29BAF4336BA55380CA606784ADBC
+1557AA647220FF1545D4932A5F1DC343AA1CEBE547EAF0CBFB3073614D0D9529
+499884742FC1564657BF85E7CDF0B4A808CF72E7795628DC27FB352A88E9EEF9
+A1F87518E565B56ACE1B38268E1A145B3D337DC708E43C5531E392BEE0C88675
+29A7A7F0AF6C8463036B9F0BB3F13EE9D80E7FEEC301136C6B9B8127B0796A56
+7A649DF11FA433BACC73C9119055962D0B4B9D8357E7D85F0AD462E498F492B0
+56A39629217CCFBA0A2D64E614E49CF82D2A07264069FC97A9D3CB23AEA7AF41
+276B91EFBC9D29996E78C35F5C5E2D55F8EF74743CBF70B30F99152C4CCF3B89
+7E63CF273D8A7A144DD378E349057DAC564A504C779F2302CAD97D3DDE96F547
+3C825E38DF9D5B8B7AA92992EC0DA0435C45F5B11A25E8AB8EF8686644046B5D
+5EE08DCCB9F0C63C2BBD9F86F9EA6A1A75F430393DBD276D89A46632B5F4806F
+E2AC2AF6FA72EB3B63CD97E10A41D74C861DF50B269E9ACFF80AB7103E6FDA0D
+221D90E26BE737901DD5360000F4C66930DCAA8F564DEEB7D9B33DEB663A3F0D
+B19EEB5F2F137DA03DAA25547C56CAF187C3877C1E272D126D7AF5185C7E4590
+108BD19DB3BA70888E7E24DD0AF9723598E5722716BAAAC7CEC44B42FA3EACD6
+7AC8F81A9EE1551AC9D67A8BC2FC07B40B61CFB0375DF2554B69AF994DC56255
+E7288CC7264487DF62510042005EA32B0152DE4B6DDB72C4C5C5FB8D4C6E0B99
+9583A88B94EBE302AC43874B57D903535068B731E18FD1097B43A18097D19373
+C7BEDCC310BBF683C7A7ED3DF6248219AD63E6A064FF9300CDDC6689213415E8
+2B65787B1D62B3194A64F2B9F4BC98C6F1D0090647288965E5A3AD841A88ED68
+1A0A7C27E6A17FF9AF31881F9A6EAD18688A473D74D9382688938BC9806DCB42
+2537E5897E6E3AC020325942FA482C9EFB6C1BA346C8B0FC3A5E8B8A5B66C8BC
+4589DA12816201A2BD7FADC77B30B992CFCA4FEBD70834E20A00F557C2EEDC1F
+3A66D6B459C763B39E2C6E5858E4DAC6CFF97C5775B5590C621755ABE64EFCC8
+A3C6B093EEA54ADE8943D533000DA3AA06A0CE15AC5EF05E1892E7AE5A0819FF
+C01D58C56F99B67588BC1D35181998C99F13D0B931B3A059D42F6501DF04888E
+00BDCC4515D4C10986ABF47697808223FD2D5653BCDEEF74179237BE8E90E832
+F98302AE9F1926A90BD6A7BF826FEBFF898CFDDDDDDDCDBEB8366B95780DF205
+42766E31290F09775D684B4F3102C6F17B8798DD03A07893720F8DAC799001BB
+E53E6E249420D739B686CC979EADFE335A71517B505E4088640FB2365FEC3A3A
+536EBD10C64F6472F46E6789A9022F61FD39E99A34FEF7F8A77AD8B4277C20E9
+21F6ECF7C0272DF3E8EB1282D80CDA9A7ABBF4553787EDA5D87772DF5F17ABAE
+BE0F4485121EF3CA4C2E484F56EBDEC8445FB13BEBC70E427428C746E979C8BE
+BA1409FD47C8A8CCAECBD762A2A9EC4DBED06320782CE1D516ECF8A4B4C0F515
+68257E14FDA7CFFC8B2EEE670C3F0867A9D0F2AE01DF1B2E99FAFB707D0C7752
+96E05956C8D4E1FB350EEEF51D557ECF9406DF03DAC8F475389B447BAC94AB39
+1AF3F3EC487506CFCEC37945FBC56226E98BF406AFDD02A0713F7B089D3E7EBC
+F11E5ADF5C2953873F8DFAA42AF78360B3D9D03238291736006506D31C121145
+DA6CB0AC8C11B02CD04E1A4C01E4C1B5EF7467BD42160DF83515640D6B0D9BA3
+E8C9F9D3A1010C2AC7F50BD2329AD2BE095525964B1FD4B317A747C91674990C
+A0FE282E204A58A3C08AE386CAA8
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi)
+@start /Fa 130[62 1[62 123[{ TeX09fbbfacEncoding ReEncodeFont }2
+119.552 /CMTT12 rf /Fb 133[34 41 41 55 41 43 30 30 30
+41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 8[58
+2[58 1[43 57 1[52 60 58 70 48 2[28 58 60 50 1[59 1[54
+58 7[38 38 38 38 38 38 38 38 38 38 3[21 31[43 12[{
+ TeXf7b6d320Encoding ReEncodeFont }54 74.7198 /CMR9 rf
+/Fc 209[24 46[{ TeX74afc74cEncoding ReEncodeFont }1 74.7198
+/CMTI9 rf /Fd 134[39 39 2[39 39 39 39 2[39 39 39 39 2[39
+39 2[39 3[39 19[39 27[39 39 2[39 45[{ TeX09fbbfacEncoding ReEncodeFont }
+18 74.7198 /CMSLTT10 rf /Fe 129[39 39 1[39 39 39 39 39
+39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
+39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39
+39 1[39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39
+39 39 1[39 39 39 5[39 39 39 39 39 39 39 39 39 1[39 39
+39 39 39 1[39 39 1[39 33[{ TeX09fbbfacEncoding ReEncodeFont }81
+74.7198 /CMTT9 rf /Ff 138[39 27 28 28 1[39 1[39 2[37
+22 4[31 1[31 1[35 5[20 6[51 39 52 1[48 3[44 5[46 48 54
+51 50 53 15[35 3[24 5[20 39[{ TeXf7b6d320Encoding ReEncodeFont }26
+66.4176 /CMR8 rf /Fg 150[30 30 104[{ TeXbbad153fEncoding ReEncodeFont }
+2 74.7198 /CMSY9 rf /Fh 135[61 2[61 1[46 2[56 63 5[30
+1[64 2[62 52[55 47[{ TeX0ef0afcaEncoding ReEncodeFont }9
+99.6264 /CMCSC10 rf /Fi 140[56 3[56 56 1[56 2[56 56 56
+57[56 45[{ TeX09fbbfacEncoding ReEncodeFont }8 109.091
+/CMTT12 rf /Fj 134[48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 2[48 3[48
+3[48 1[48 1[48 1[48 48 48 1[48 48 48 1[48 48 48 48 1[48
+6[48 6[48 48 48 48 2[48 2[48 2[48 39[{
+ TeX09fbbfacEncoding ReEncodeFont }50 90.9091 /CMSLTT10
+rf /Fk 134[65 65 89 65 68 48 48 50 65 68 61 68 102 34
+65 1[34 68 61 37 56 68 55 68 60 34 6[93 1[127 1[94 85
+68 92 92 84 92 96 116 74 96 1[46 96 96 77 81 94 89 87
+93 1[58 4[34 61 61 61 61 61 61 61 61 61 2[34 41 34 4[34
+26[68 72 11[{ TeXf7b6d320Encoding ReEncodeFont }64 109.091
+/CMBX12 rf /Fl 135[56 2[56 54 42 55 1[51 58 56 68 47
+1[39 27 56 58 49 51 57 54 53 56 46[50 2[50 1[34 45[{
+ TeX0ef0afcaEncoding ReEncodeFont }23 90.9091 /CMCSC10
+rf /Fm 135[42 1[42 1[30 37 38 1[46 46 51 74 23 2[28 1[42
+1[42 46 42 1[46 50[28 33[51 12[{ TeX74afc74cEncoding ReEncodeFont }18
+90.9091 /CMTI10 rf /Fn 209[43 46[{ TeX74afc74cEncoding ReEncodeFont }1
+119.552 /CMBXTI10 rf /Fo 134[85 85 1[85 90 63 64 66 1[90
+81 90 134 45 1[49 45 90 81 49 74 90 72 90 78 9[167 122
+124 112 90 120 1[110 2[153 97 1[83 60 126 1[101 106 124
+117 115 122 7[81 81 81 81 81 81 81 81 81 81 35[90 94
+11[{ TeXf7b6d320Encoding ReEncodeFont }52 143.462 /CMBX12
+rf /Fp 200[0 21[91 17[45 1[91 12[71{ TeXbbad153fEncoding ReEncodeFont }
+5 90.9091 /CMSY10 rf /Fq 134[48 48 66 48 51 35 36 36
+48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 8[68
+93 1[68 66 51 67 1[62 71 68 83 57 71 1[33 68 71 59 62
+69 66 64 68 13[45 45 45 3[30 2[45 27[76 1[51 53 11[{
+ TeXf7b6d320Encoding ReEncodeFont }54 90.9091 /CMSL10
+rf /Fr 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37
+71 41 37 75 67 41 61 75 60 75 65 3[37 1[37 1[102 102
+139 102 103 94 75 100 101 92 101 105 128 81 105 69 50
+105 106 85 88 103 97 96 102 105 64 4[37 67 67 67 67 67
+67 67 67 67 67 1[37 45 37 1[67 5[67 112 1[41 20[75 78
+11[{ TeXf7b6d320Encoding ReEncodeFont }73 119.552 /CMBX12
+rf /Fs 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 33[{ TeX09fbbfacEncoding ReEncodeFont }93
+90.9091 /CMTT10 rf /Ft 131[91 1[40 48 48 66 48 51 35
+36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
+45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71
+68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25
+25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35
+25 1[76 45 1[45 25 18[76 51 51 53 11[{
+ TeXf7b6d320Encoding ReEncodeFont }86 90.9091 /CMR10
+rf /Fu 138[108 1[76 79 3[108 1[54 3[108 1[59 88 1[86
+1[94 14[144 4[184 10[138 66[{ TeXf7b6d320Encoding ReEncodeFont }13
+172.154 /CMBX12 rf end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
%%BeginPaperSize: Letter
letter
%%EndPaperSize
-
+ end
%%EndSetup
%%Page: 1 1
-1 0 bop 150 1318 a Fu(Bash)64 b(Reference)j(Man)-5 b(ual)p
-150 1385 3600 34 v 2361 1481 a Ft(Reference)31 b(Do)s(cumen)m(tation)h
-(for)e(Bash)2276 1589 y(Edition)f(3.0,)i(for)g Fs(Bash)e
-Ft(V)-8 b(ersion)30 b(3.0-rc1.)3350 1697 y(June)f(2004)150
+TeXDict begin 1 0 bop 150 1318 a Fu(Bash)64 b(Reference)j(Man)-5
+b(ual)p 150 1385 3600 34 v 2361 1481 a Ft(Reference)31
+b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(3.0,)g(for)f
+Fs(Bash)g Ft(V)-8 b(ersion)31 b(3.0.)3367 1697 y(July)f(2004)150
4935 y Fr(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46
b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11
b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11
-b(oundation)p 150 5141 3600 17 v eop
+b(oundation)p 150 5141 3600 17 v eop end
%%Page: 2 2
-2 1 bop 150 2889 a Ft(This)34 b(text)i(is)f(a)h(brief)e(description)g
-(of)h(the)h(features)g(that)g(are)g(presen)m(t)g(in)e(the)i(Bash)f
-(shell)f(\(v)m(ersion)150 2999 y(3.0-rc1,)e(26)g(June)d(2004\).)150
-3133 y(This)k(is)h(Edition)f(3.0,)k(last)d(up)s(dated)g(26)h(June)f
-(2004,)k(of)d Fq(The)f(GNU)i(Bash)f(Reference)g(Man)m(ual)p
-Ft(,)h(for)150 3243 y Fs(Bash)p Ft(,)29 b(V)-8 b(ersion)30
-b(3.0-rc1.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577
-3377 y Fp(\015)g Ft(1988-2004)k(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8
-b(oundation,)31 b(Inc.)150 3512 y(P)m(ermission)f(is)i(gran)m(ted)h(to)
-f(mak)m(e)i(and)d(distribute)f(v)m(erbatim)i(copies)g(of)g(this)f(man)m
-(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f(and)g
-(this)f(p)s(ermission)f(notice)i(are)h(preserv)m(ed)f(on)h(all)e
-(copies.)390 3756 y(P)m(ermission)k(is)i(gran)m(ted)g(to)h(cop)m(y)-8
-b(,)38 b(distribute)33 b(and/or)i(mo)s(dify)e(this)h(do)s(cumen)m(t)h
+TeXDict begin 2 1 bop 150 2889 a Ft(This)35 b(text)h(is)g(a)g(brief)f
+(description)h(of)f(the)h(features)g(that)g(are)g(presen)m(t)g(in)f
+(the)h(Bash)f(shell)h(\(v)m(ersion)150 2999 y(3.0,)c(27)f(July)f
+(2004\).)150 3133 y(This)35 b(is)h(Edition)g(3.0,)j(last)d(up)s(dated)f
+(27)i(July)e(2004,)k(of)d Fq(The)g(GNU)g(Bash)g(Reference)h(Man)m(ual)p
+Ft(,)h(for)150 3243 y Fs(Bash)p Ft(,)29 b(V)-8 b(ersion)31
+b(3.0.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577 3377
+y Fp(\015)f Ft(1988-2004)k(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8
+b(oundation,)32 b(Inc.)150 3512 y(P)m(ermission)g(is)h(gran)m(ted)g(to)
+f(mak)m(e)i(and)d(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g(man)m
+(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f(and)f
+(this)g(p)s(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g
+(copies.)390 3756 y(P)m(ermission)k(is)h(gran)m(ted)f(to)h(cop)m(y)-8
+b(,)38 b(distribute)d(and/or)g(mo)s(dify)f(this)h(do)s(cumen)m(t)g
(under)390 3866 y(the)j(terms)g(of)g(the)g(GNU)h(F)-8
-b(ree)39 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)38
-b(1.1)h(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)27
-b(published)c(b)m(y)28 b(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8
-b(oundation;)29 b(with)d(no)h(In)m(v)-5 b(arian)m(t)27
-b(Sections,)390 4085 y(with)i(the)i(F)-8 b(ron)m(t-Co)m(v)m(er)33
-b(texts)e(b)s(eing)f(\\A)h(GNU)g(Man)m(ual,")g(and)f(with)f(the)i(Bac)m
-(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)e(\(a\))i(b)s(elo)m
-(w.)46 b(A)33 b(cop)m(y)g(of)f(the)h(license)e(is)h(included)d(in)i
-(the)i(section)f(en)m(titled)390 4304 y(\\GNU)f(F)-8
-b(ree)32 b(Do)s(cumen)m(tation)f(License.")390 4438 y(\(a\))39
-b(The)f(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)39 b(is:)55
+b(ree)39 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)39
+b(1.1)g(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)28
+b(published)d(b)m(y)j(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8
+b(oundation;)30 b(with)d(no)g(In)m(v)-5 b(arian)m(t)28
+b(Sections,)390 4085 y(with)i(the)h(F)-8 b(ron)m(t-Co)m(v)m(er)33
+b(texts)e(b)s(eing)g(\\A)g(GNU)g(Man)m(ual,")h(and)e(with)g(the)h(Bac)m
+(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)f(\(a\))h(b)s(elo)m
+(w.)47 b(A)33 b(cop)m(y)g(of)f(the)h(license)g(is)g(included)e(in)h
+(the)h(section)g(en)m(titled)390 4304 y(\\GNU)e(F)-8
+b(ree)32 b(Do)s(cumen)m(tation)g(License.")390 4438 y(\(a\))39
+b(The)f(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)39 b(is:)56
b(\\Y)-8 b(ou)39 b(ha)m(v)m(e)g(freedom)f(to)h(cop)m(y)f(and)g(mo)s
-(dify)390 4548 y(this)31 b(GNU)j(Man)m(ual,)f(lik)m(e)f(GNU)h(soft)m(w)
-m(are.)49 b(Copies)31 b(published)e(b)m(y)j(the)h(F)-8
-b(ree)34 b(Soft)m(w)m(are)390 4658 y(F)-8 b(oundation)30
-b(raise)g(funds)e(for)j(GNU)g(dev)m(elopmen)m(t.")150
-4902 y(Published)c(b)m(y)j(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
-b(oundation)150 5011 y(59)31 b(T)-8 b(emple)30 b(Place,)h(Suite)e(330,)
-150 5121 y(Boston,)j(MA)e(02111-1307)150 5230 y(USA)p
-eop
+(dify)390 4548 y(this)32 b(GNU)i(Man)m(ual,)g(lik)m(e)g(GNU)f(soft)m(w)
+m(are.)49 b(Copies)32 b(published)f(b)m(y)h(the)h(F)-8
+b(ree)34 b(Soft)m(w)m(are)390 4658 y(F)-8 b(oundation)31
+b(raise)g(funds)d(for)j(GNU)g(dev)m(elopmen)m(t.")150
+4902 y(Published)e(b)m(y)h(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
+b(oundation)150 5011 y(59)31 b(T)-8 b(emple)31 b(Place,)h(Suite)e(330,)
+150 5121 y(Boston,)i(MA)e(02111-1307)150 5230 y(USA)p
+eop end
%%Page: -1 3
--1 2 bop 3725 -116 a Ft(i)150 299 y Fo(T)-13 b(able)54
-b(of)g(Con)l(ten)l(ts)150 641 y Fr(1)135 b(In)l(tro)t(duction)15
-b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
-(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
-b Fr(1)449 778 y Ft(1.1)92 b(What)31 b(is)e(Bash?)21
+TeXDict begin -1 2 bop 3725 -116 a Ft(i)150 299 y Fo(T)-13
+b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fr(1)135 b(In)l(tro)t
+(duction)15 b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
+(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)
+60 b Fr(1)449 778 y Ft(1.1)92 b(What)31 b(is)f(Bash?)21
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Ft(1)449 888 y(1.2)92
-b(What)31 b(is)e(a)i(shell?)14 b Fm(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(What)31 b(is)f(a)h(shell?)14 b Fm(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44
b Ft(1)150 1130 y Fr(2)135 b(De\014nitions)37 b Fn(.)19
b Fr(3)150 1400 y(3)135 b(Basic)45 b(Shell)g(F)-11 b(eatures)12
b Fn(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)57 b Fr(5)449 1537 y Ft(3.1)92
-b(Shell)28 b(Syn)m(tax)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Shell)30 b(Syn)m(tax)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
-b Ft(5)748 1646 y(3.1.1)93 b(Shell)28 b(Op)s(eration)10
-b Fm(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
-b Ft(5)748 1756 y(3.1.2)93 b(Quoting)10 b Fm(.)k(.)h(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
+b Ft(5)748 1646 y(3.1.1)93 b(Shell)30 b(Op)s(eration)10
+b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
+b Ft(5)748 1756 y(3.1.2)93 b(Quoting)10 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
b Ft(5)1047 1866 y(3.1.2.1)93 b(Escap)s(e)30 b(Character)24
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)53 b Ft(6)1047 1975 y(3.1.2.2)93
-b(Single)29 b(Quotes)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+b(Single)31 b(Quotes)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45
-b Ft(6)1047 2085 y(3.1.2.3)93 b(Double)30 b(Quotes)15
+b Ft(6)1047 2085 y(3.1.2.3)93 b(Double)31 b(Quotes)15
b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)44 b Ft(6)1047 2194 y(3.1.2.4)93
-b(ANSI-C)30 b(Quoting)18 b Fm(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+b(ANSI-C)30 b(Quoting)18 b Fm(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48
-b Ft(6)1047 2304 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c)30
-b(T)-8 b(ranslation)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)41 b Ft(7)748 2413 y(3.1.3)93 b(Commen)m(ts)25
+b Ft(6)1047 2304 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c)32
+b(T)-8 b(ranslation)11 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)41 b Ft(7)748 2413 y(3.1.3)93 b(Commen)m(ts)25
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)55 b Ft(7)449 2523 y(3.2)92 b(Shell)28 b(Commands)23
+g(.)g(.)g(.)55 b Ft(7)449 2523 y(3.2)92 b(Shell)30 b(Commands)23
b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)53 b Ft(7)748 2633 y(3.2.1)93
-b(Simple)28 b(Commands)15 b Fm(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Simple)30 b(Commands)15 b Fm(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)45 b Ft(8)748 2742 y(3.2.2)93 b(Pip)s(elines)14
-b Fm(.)e(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+b Fm(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)44 b Ft(8)748 2852 y(3.2.3)93 b(Lists)29
-b(of)i(Commands)23 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)44 b Ft(8)748 2852 y(3.2.3)93 b(Lists)30
+b(of)h(Commands)23 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
54 b Ft(8)748 2961 y(3.2.4)93 b(Comp)s(ound)28 b(Commands)17
b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Ft(9)1047 3071
-y(3.2.4.1)93 b(Lo)s(oping)29 b(Constructs)d Fm(.)15 b(.)g(.)g(.)g(.)g
+y(3.2.4.1)93 b(Lo)s(oping)30 b(Constructs)c Fm(.)15 b(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56
-b Ft(9)1047 3181 y(3.2.4.2)93 b(Conditional)28 b(Constructs)18
+b Ft(9)1047 3181 y(3.2.4.2)93 b(Conditional)31 b(Constructs)18
b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
-b Ft(10)1047 3290 y(3.2.4.3)93 b(Grouping)29 b(Commands)13
+b Ft(10)1047 3290 y(3.2.4.3)93 b(Grouping)30 b(Commands)13
b Fm(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)42 b Ft(13)449 3400 y(3.3)92 b(Shell)28 b(F)-8 b(unctions)8
-b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+g(.)42 b Ft(13)449 3400 y(3.3)92 b(Shell)30 b(F)-8 b(unctions)8
+b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Ft(13)449 3509 y(3.4)92
-b(Shell)28 b(P)m(arameters)20 b Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Shell)30 b(P)m(arameters)20 b Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 b
-Ft(14)748 3619 y(3.4.1)93 b(P)m(ositional)29 b(P)m(arameters)14
+Ft(14)748 3619 y(3.4.1)93 b(P)m(ositional)32 b(P)m(arameters)14
b Fm(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Ft(15)748 3729
-y(3.4.2)93 b(Sp)s(ecial)28 b(P)m(arameters)h Fm(.)15
+y(3.4.2)93 b(Sp)s(ecial)30 b(P)m(arameters)f Fm(.)15
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Ft(15)449
-3838 y(3.5)92 b(Shell)28 b(Expansions)20 b Fm(.)13 b(.)i(.)g(.)g(.)g(.)
+3838 y(3.5)92 b(Shell)30 b(Expansions)20 b Fm(.)14 b(.)h(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
-b Ft(16)748 3948 y(3.5.1)93 b(Brace)31 b(Expansion)d
+b Ft(16)748 3948 y(3.5.1)93 b(Brace)31 b(Expansion)e
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)58
-b Ft(17)748 4057 y(3.5.2)93 b(Tilde)28 b(Expansion)17
-b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+b Ft(17)748 4057 y(3.5.2)93 b(Tilde)30 b(Expansion)17
+b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
-b Ft(17)748 4167 y(3.5.3)93 b(Shell)28 b(P)m(arameter)j(Expansion)18
-b Fm(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+b Ft(17)748 4167 y(3.5.3)93 b(Shell)30 b(P)m(arameter)h(Expansion)18
+b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)47 b Ft(18)748 4276 y(3.5.4)93 b(Command)29
-b(Substitution)d Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Substitution)f Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(21)748
-4386 y(3.5.5)93 b(Arithmetic)29 b(Expansion)12 b Fm(.)i(.)h(.)g(.)g(.)g
+4386 y(3.5.5)93 b(Arithmetic)31 b(Expansion)12 b Fm(.)j(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)42 b Ft(21)748 4496 y(3.5.6)93 b(Pro)s(cess)30
-b(Substitution)19 b Fm(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
-b Ft(21)748 4605 y(3.5.7)93 b(W)-8 b(ord)30 b(Splitting)23
-b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Substitution)19 b Fm(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
+b Ft(21)748 4605 y(3.5.7)93 b(W)-8 b(ord)30 b(Splitting)c
+Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55
-b Ft(22)748 4715 y(3.5.8)93 b(Filename)29 b(Expansion)24
+b Ft(22)748 4715 y(3.5.8)93 b(Filename)31 b(Expansion)25
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Ft(22)1047
4824 y(3.5.8.1)93 b(P)m(attern)31 b(Matc)m(hing)20 b
-Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+Fm(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)49 b Ft(23)748 4934 y(3.5.9)93 b(Quote)30
-b(Remo)m(v)-5 b(al)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Remo)m(v)-5 b(al)15 b Fm(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)44 b Ft(24)449 5044 y(3.6)92 b(Redirections)22
+g(.)g(.)g(.)44 b Ft(24)449 5044 y(3.6)92 b(Redirections)24
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Ft(24)748 5153
-y(3.6.1)93 b(Redirecting)29 b(Input)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g
+y(3.6.1)93 b(Redirecting)31 b(Input)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)40 b Ft(25)748 5263 y(3.6.2)93 b(Redirecting)29
+g(.)h(.)f(.)g(.)g(.)40 b Ft(25)748 5263 y(3.6.2)93 b(Redirecting)31
b(Output)18 b Fm(.)13 b(.)i(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
-b Ft(25)p eop
+b Ft(25)p eop end
%%Page: -2 4
--2 3 bop 150 -116 a Ft(ii)2610 b(Bash)31 b(Reference)g(Man)m(ual)748
-83 y(3.6.3)93 b(App)s(ending)27 b(Redirected)j(Output)16
-b Fm(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)45 b Ft(26)748 193 y(3.6.4)93 b(Redirecting)29 b(Standard)g(Output)
-g(and)h(Standard)f(Error)954 302 y Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)54 b Ft(26)748 412 y(3.6.5)93 b(Here)30
-b(Do)s(cumen)m(ts)13 b Fm(.)k(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+TeXDict begin -2 3 bop 150 -116 a Ft(ii)2612 b(Bash)31
+b(Reference)g(Man)m(ual)748 83 y(3.6.3)93 b(App)s(ending)28
+b(Redirected)j(Output)16 b Fm(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Ft(26)748 193 y(3.6.4)93
+b(Redirecting)31 b(Standard)e(Output)g(and)h(Standard)f(Error)954
+302 y Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)43 b Ft(26)748 521 y(3.6.6)93 b(Here)30 b(Strings)10
-b Fm(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)39 b Ft(26)748 631 y(3.6.7)93 b(Duplicating)28 b(File)i(Descriptors)
-17 b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)47 b Ft(27)748 741 y(3.6.8)93 b(Mo)m(ving)30
-b(File)g(Descriptors)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
+b Ft(26)748 412 y(3.6.5)93 b(Here)30 b(Do)s(cumen)m(ts)13
+b Fm(.)k(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43
+b Ft(26)748 521 y(3.6.6)93 b(Here)30 b(Strings)10 b Fm(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39
+b Ft(26)748 631 y(3.6.7)93 b(Duplicating)31 b(File)h(Descriptors)17
+b Fm(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)47 b Ft(27)748 741 y(3.6.8)93 b(Mo)m(ving)31
+b(File)h(Descriptors)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44
-b Ft(27)748 850 y(3.6.9)93 b(Op)s(ening)28 b(File)h(Descriptors)h(for)g
-(Reading)g(and)g(W)-8 b(riting)954 960 y Fm(.)16 b(.)f(.)g(.)g(.)g(.)g
+b Ft(27)748 850 y(3.6.9)93 b(Op)s(ening)29 b(File)i(Descriptors)g(for)f
+(Reading)h(and)f(W)-8 b(riting)954 960 y Fm(.)16 b(.)f(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Ft(27)449 1069 y(3.7)92
-b(Executing)30 b(Commands)25 b Fm(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+b(Executing)31 b(Commands)25 b Fm(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(27)748 1179 y(3.7.1)93
-b(Simple)28 b(Command)h(Expansion)24 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b
-Ft(27)748 1289 y(3.7.2)93 b(Command)29 b(Searc)m(h)i(and)e(Execution)13
-b Fm(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42
-b Ft(28)748 1398 y(3.7.3)93 b(Command)29 b(Execution)h(En)m(vironmen)m
-(t)18 b Fm(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
+b(Simple)30 b(Command)f(Expansion)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Ft(27)748
+1289 y(3.7.2)93 b(Command)29 b(Searc)m(h)i(and)e(Execution)13
+b Fm(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42
+b Ft(28)748 1398 y(3.7.3)93 b(Command)29 b(Execution)i(En)m(vironmen)m
+(t)18 b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
b Ft(29)748 1508 y(3.7.4)93 b(En)m(vironmen)m(t)21 b
-Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-50 b Ft(30)748 1617 y(3.7.5)93 b(Exit)29 b(Status)8 b
+50 b Ft(30)748 1617 y(3.7.5)93 b(Exit)30 b(Status)8 b
Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)37 b Ft(30)748 1727 y(3.7.6)93 b(Signals)10 b
-Fm(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)39 b Ft(31)449 1836 y(3.8)92 b(Shell)28
-b(Scripts)21 b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
+Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)39 b Ft(31)449 1836 y(3.8)92
+b(Shell)30 b(Scripts)21 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
b Ft(31)150 2079 y Fr(4)135 b(Shell)45 b(Builtin)g(Commands)38
b Fn(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h
-(.)f(.)82 b Fr(33)449 2216 y Ft(4.1)92 b(Bourne)30 b(Shell)e(Builtins)
-16 b Fm(.)c(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)f(.)82 b Fr(33)449 2216 y Ft(4.1)92 b(Bourne)30 b(Shell)g(Builtins)
+16 b Fm(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)45 b Ft(33)449 2325 y(4.2)92 b(Bash)30 b(Builtin)e(Commands)17
+g(.)45 b Ft(33)449 2325 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)17
b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
-b Ft(39)449 2435 y(4.3)92 b(The)30 b(Set)g(Builtin)22
+b Ft(39)449 2435 y(4.3)92 b(The)30 b(Set)g(Builtin)25
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)53 b Ft(50)449 2545 y(4.4)92
-b(Sp)s(ecial)29 b(Builtins)22 b Fm(.)12 b(.)j(.)g(.)g(.)g(.)g(.)g(.)h
+b(Sp)s(ecial)31 b(Builtins)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
b Ft(53)150 2787 y Fr(5)135 b(Shell)45 b(V)-11 b(ariables)10
b Fn(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)55 b Fr(55)449
-2924 y Ft(5.1)92 b(Bourne)30 b(Shell)e(V)-8 b(ariables)11
-b Fm(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
-b Ft(55)449 3034 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)17
-b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+2924 y Ft(5.1)92 b(Bourne)30 b(Shell)g(V)-8 b(ariables)11
+b Fm(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+40 b Ft(55)449 3034 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)17
+b Fm(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Ft(55)150 3276 y Fr(6)135
b(Bash)44 b(F)-11 b(eatures)31 b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h
(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
-g(.)h(.)75 b Fr(63)449 3413 y Ft(6.1)92 b(In)m(v)m(oking)30
-b(Bash)f Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+g(.)h(.)75 b Fr(63)449 3413 y Ft(6.1)92 b(In)m(v)m(oking)31
+b(Bash)e Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(63)449 3523
-y(6.2)92 b(Bash)30 b(Startup)g(Files)24 b Fm(.)15 b(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55
-b Ft(65)449 3632 y(6.3)92 b(In)m(teractiv)m(e)32 b(Shells)14
-b Fm(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+y(6.2)92 b(Bash)30 b(Startup)g(Files)c Fm(.)15 b(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55
+b Ft(65)449 3632 y(6.3)92 b(In)m(teractiv)m(e)33 b(Shells)14
+b Fm(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)43 b Ft(67)748 3742 y(6.3.1)93 b(What)31
-b(is)e(an)h(In)m(teractiv)m(e)i(Shell?)20 b Fm(.)13 b(.)i(.)g(.)g(.)g
+b(is)f(an)g(In)m(teractiv)m(e)j(Shell?)20 b Fm(.)15 b(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
-b Ft(67)748 3851 y(6.3.2)93 b(Is)30 b(this)f(Shell)f(In)m(teractiv)m
-(e?)10 b Fm(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b Ft(67)748 3851 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m
+(e?)10 b Fm(.)18 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(67)748
-3961 y(6.3.3)93 b(In)m(teractiv)m(e)31 b(Shell)e(Beha)m(vior)22
-b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+3961 y(6.3.3)93 b(In)m(teractiv)m(e)32 b(Shell)f(Beha)m(vior)22
+b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)51 b Ft(67)449 4071 y(6.4)92 b(Bash)30
-b(Conditional)e(Expressions)20 b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g
+b(Conditional)h(Expressions)20 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)49 b Ft(68)449 4180 y(6.5)92 b(Shell)28 b(Arithmetic)f
+f(.)49 b Ft(68)449 4180 y(6.5)92 b(Shell)30 b(Arithmetic)f
Fm(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)57 b Ft(70)449 4290 y(6.6)92 b(Aliases)23
+g(.)g(.)h(.)f(.)g(.)57 b Ft(70)449 4290 y(6.6)92 b(Aliases)25
b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(72)449 4509 y(6.8)92
-b(The)30 b(Directory)h(Stac)m(k)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+b(The)30 b(Directory)i(Stac)m(k)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 b Ft(73)748
-4619 y(6.8.1)93 b(Directory)30 b(Stac)m(k)i(Builtins)10
-b Fm(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(73)449 4728 y(6.9)92
-b(Con)m(trolling)28 b(the)j(Prompt)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+4619 y(6.8.1)93 b(Directory)31 b(Stac)m(k)h(Builtins)10
+b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(73)449 4728 y(6.9)92
+b(Con)m(trolling)31 b(the)g(Prompt)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)44 b Ft(74)449 4838 y(6.10)92
-b(The)30 b(Restricted)h(Shell)11 b Fm(.)i(.)i(.)g(.)g(.)g(.)g(.)g(.)g
+b(The)30 b(Restricted)i(Shell)11 b Fm(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)40 b Ft(76)449 4947
y(6.11)92 b(Bash)31 b(POSIX)e(Mo)s(de)16 b Fm(.)f(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b
-Ft(76)p eop
+Ft(76)p eop end
%%Page: -3 5
--3 4 bop 3674 -116 a Ft(iii)150 83 y Fr(7)135 b(Job)45
-b(Con)l(trol)32 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
-76 b Fr(79)449 220 y Ft(7.1)92 b(Job)30 b(Con)m(trol)g(Basics)23
-b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)52 b Ft(79)449 330 y(7.2)92 b(Job)30 b(Con)m(trol)g
-(Builtins)12 b Fm(.)g(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)41 b Ft(80)449 439 y(7.3)92 b(Job)30
-b(Con)m(trol)g(V)-8 b(ariables)28 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(81)150 682
-y Fr(8)135 b(Command)45 b(Line)g(Editing)38 b Fn(.)19
-b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)81 b Fr(83)449 819 y Ft(8.1)92 b(In)m(tro)s(duction)29
-b(to)i(Line)e(Editing)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+TeXDict begin -3 4 bop 3674 -116 a Ft(iii)150 83 y Fr(7)135
+b(Job)45 b(Con)l(trol)32 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
+(.)h(.)f(.)76 b Fr(79)449 220 y Ft(7.1)92 b(Job)30 b(Con)m(trol)h
+(Basics)23 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)52 b Ft(79)449 330 y(7.2)92 b(Job)30
+b(Con)m(trol)h(Builtins)12 b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b Ft(80)449 439 y(7.3)92
+b(Job)30 b(Con)m(trol)h(V)-8 b(ariables)30 b Fm(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58
+b Ft(81)150 682 y Fr(8)135 b(Command)45 b(Line)g(Editing)38
+b Fn(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)81 b Fr(83)449 819 y Ft(8.1)92 b(In)m(tro)s(duction)30
+b(to)h(Line)f(Editing)24 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)53 b Ft(83)449 928 y(8.2)92 b(Readline)29 b(In)m(teraction)15
-b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+(.)53 b Ft(83)449 928 y(8.2)92 b(Readline)31 b(In)m(teraction)15
+b Fm(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)44 b Ft(83)748 1038 y(8.2.1)93 b(Readline)29 b(Bare)i(Essen)m
-(tials)23 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)44 b Ft(83)748 1038 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m
+(tials)25 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Ft(83)748
-1147 y(8.2.2)93 b(Readline)29 b(Mo)m(v)m(emen)m(t)j(Commands)13
+1147 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)h(Commands)13
b Fm(.)h(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-42 b Ft(84)748 1257 y(8.2.3)93 b(Readline)29 b(Killing)e(Commands)20
+42 b Ft(84)748 1257 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)20
b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)50 b Ft(84)748 1367 y(8.2.4)93 b(Readline)29
+(.)g(.)g(.)g(.)50 b Ft(84)748 1367 y(8.2.4)93 b(Readline)31
b(Argumen)m(ts)23 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53
-b Ft(85)748 1476 y(8.2.5)93 b(Searc)m(hing)29 b(for)i(Commands)e(in)g
-(the)h(History)25 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
-b Ft(85)449 1586 y(8.3)92 b(Readline)29 b(Init)g(File)e
+b Ft(85)748 1476 y(8.2.5)93 b(Searc)m(hing)30 b(for)h(Commands)e(in)h
+(the)g(History)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
+b Ft(85)449 1586 y(8.3)92 b(Readline)31 b(Init)f(File)f
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)56 b Ft(86)748 1695 y(8.3.1)93 b(Readline)29
-b(Init)g(File)g(Syn)m(tax)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+g(.)g(.)g(.)g(.)56 b Ft(86)748 1695 y(8.3.1)93 b(Readline)31
+b(Init)f(File)h(Syn)m(tax)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41
-b Ft(86)748 1805 y(8.3.2)93 b(Conditional)27 b(Init)j(Constructs)f
+b Ft(86)748 1805 y(8.3.2)93 b(Conditional)30 b(Init)h(Constructs)e
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)59 b Ft(91)748 1914 y(8.3.3)93 b(Sample)29
-b(Init)g(File)21 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)51 b Ft(92)449 2024 y(8.4)92 b(Bindable)29 b(Readline)g
-(Commands)12 b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41
-b Ft(95)748 2134 y(8.4.1)93 b(Commands)29 b(F)-8 b(or)31
-b(Mo)m(ving)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(95)748
-2243 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)d(The)i
-(History)18 b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)47 b Ft(95)748
-2353 y(8.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)e(T)-8
-b(ext)30 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)58 b Ft(96)748 2462 y(8.4.4)93 b(Killing)27
-b(And)i(Y)-8 b(anking)17 b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)46
-b Ft(98)748 2572 y(8.4.5)93 b(Sp)s(ecifying)27 b(Numeric)j(Argumen)m
+(.)g(.)g(.)g(.)59 b Ft(91)748 1914 y(8.3.3)93 b(Sample)30
+b(Init)g(File)21 b Fm(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)51 b Ft(92)449 2024 y(8.4)92 b(Bindable)31 b(Readline)g(Commands)12
+b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 b Ft(95)748
+2134 y(8.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)d
+Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(95)748 2243 y(8.4.2)93
+b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)18
+b Fm(.)e(.)f(.)g(.)g(.)g(.)g(.)47 b Ft(95)748 2353 y(8.4.3)93
+b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)30
+b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)58 b Ft(96)748 2462 y(8.4.4)93 b(Killing)31 b(And)e(Y)-8
+b(anking)17 b Fm(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)46
+b Ft(98)748 2572 y(8.4.5)93 b(Sp)s(ecifying)29 b(Numeric)i(Argumen)m
(ts)25 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)54 b Ft(99)748 2682 y(8.4.6)93 b(Letting)30
-b(Readline)f(T)m(yp)s(e)h(F)-8 b(or)31 b(Y)-8 b(ou)19
+(.)g(.)g(.)54 b Ft(99)748 2682 y(8.4.6)93 b(Letting)31
+b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)19
b Fm(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
49 b Ft(99)748 2791 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)10
b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
-b Ft(100)748 2901 y(8.4.8)93 b(Some)30 b(Miscellaneous)f(Commands)12
+b Ft(100)748 2901 y(8.4.8)93 b(Some)30 b(Miscellaneous)i(Commands)12
b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42
-b Ft(101)449 3010 y(8.5)92 b(Readline)29 b(vi)g(Mo)s(de)d
+b Ft(101)449 3010 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)c
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)55 b Ft(103)449 3120 y(8.6)92 b(Programmable)30
-b(Completion)12 b Fm(.)h(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)55 b Ft(103)449 3120 y(8.6)92 b(Programmable)31
+b(Completion)12 b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41
-b Ft(103)449 3230 y(8.7)92 b(Programmable)30 b(Completion)f(Builtins)12
-b Fm(.)g(.)j(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+b Ft(103)449 3230 y(8.7)92 b(Programmable)31 b(Completion)g(Builtins)12
+b Fm(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)42 b Ft(105)150 3472 y Fr(9)135 b(Using)45
b(History)h(In)l(teractiv)l(ely)14 b Fn(.)22 b(.)d(.)h(.)f(.)g(.)h(.)f
(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)58 b Fr(109)449 3609 y
-Ft(9.1)92 b(Bash)30 b(History)g(F)-8 b(acilities)11 b
-Fm(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41
-b Ft(109)449 3719 y(9.2)92 b(Bash)30 b(History)g(Builtins)9
-b Fm(.)k(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)38
-b Ft(109)449 3828 y(9.3)92 b(History)30 b(Expansion)d
+Ft(9.1)92 b(Bash)30 b(History)h(F)-8 b(acilities)11 b
+Fm(.)19 b(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41
+b Ft(109)449 3719 y(9.2)92 b(Bash)30 b(History)h(Builtins)9
+b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+38 b Ft(109)449 3828 y(9.3)92 b(History)31 b(Expansion)d
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)58 b Ft(111)748 3938 y(9.3.1)93 b(Ev)m(en)m(t)31
-b(Designators)21 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
-b Ft(111)748 4047 y(9.3.2)93 b(W)-8 b(ord)30 b(Designators)f
+b(Designators)21 b Fm(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
+b Ft(111)748 4047 y(9.3.2)93 b(W)-8 b(ord)30 b(Designators)g
Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(112)748
-4157 y(9.3.3)93 b(Mo)s(di\014ers)26 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+4157 y(9.3.3)93 b(Mo)s(di\014ers)27 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)57 b Ft(113)150
4399 y Fr(10)135 b(Installing)46 b(Bash)30 b Fn(.)20
b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
(.)h(.)f(.)g(.)h(.)f(.)h(.)74 b Fr(115)449 4536 y Ft(10.1)92
-b(Basic)31 b(Installation)26 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Ft(115)449
-4646 y(10.2)92 b(Compilers)28 b(and)i(Options)22 b Fm(.)14
-b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b(Basic)32 b(Installation)d Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Ft(115)449 4646
+y(10.2)92 b(Compilers)30 b(and)g(Options)22 b Fm(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)51
-b Ft(115)449 4755 y(10.3)92 b(Compiling)28 b(F)-8 b(or)31
-b(Multiple)d(Arc)m(hitectures)12 b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+b Ft(115)449 4755 y(10.3)92 b(Compiling)31 b(F)-8 b(or)31
+b(Multiple)g(Arc)m(hitectures)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)41 b Ft(116)449
-4865 y(10.4)92 b(Installation)29 b(Names)22 b Fm(.)16
+4865 y(10.4)92 b(Installation)32 b(Names)22 b Fm(.)16
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)51
-b Ft(116)449 4975 y(10.5)92 b(Sp)s(ecifying)28 b(the)j(System)f(T)m(yp)
+b Ft(116)449 4975 y(10.5)92 b(Sp)s(ecifying)30 b(the)h(System)f(T)m(yp)
s(e)11 b Fm(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b Ft(116)449
-5084 y(10.6)92 b(Sharing)29 b(Defaults)21 b Fm(.)15 b(.)g(.)g(.)g(.)g
+5084 y(10.6)92 b(Sharing)30 b(Defaults)21 b Fm(.)16 b(.)f(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
-b Ft(117)449 5194 y(10.7)92 b(Op)s(eration)29 b(Con)m(trols)12
-b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+b Ft(117)449 5194 y(10.7)92 b(Op)s(eration)30 b(Con)m(trols)12
+b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)41 b Ft(117)449 5303 y(10.8)92 b(Optional)29 b(F)-8
+(.)41 b Ft(117)449 5303 y(10.8)92 b(Optional)31 b(F)-8
b(eatures)17 b Fm(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)47 b Ft(117)p eop
+g(.)g(.)g(.)g(.)g(.)47 b Ft(117)p eop end
%%Page: -4 6
--4 5 bop 150 -116 a Ft(iv)2588 b(Bash)31 b(Reference)g(Man)m(ual)150
-83 y Fr(App)t(endix)44 b(A)99 b(Rep)t(orting)46 b(Bugs)12
-b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)
-56 b Fr(123)150 353 y(App)t(endix)44 b(B)105 b(Ma)7 b(jor)46
-b(Di\013erences)g(F)-11 b(rom)45 b(The)f(Bourne)419 486
-y(Shell)17 b Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
-(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)
-f(.)h(.)f(.)61 b Fr(125)449 623 y Ft(B.1)92 b(Implemen)m(tation)29
-b(Di\013erences)i(F)-8 b(rom)31 b(The)f(SVR4.2)h(Shell)21
-b Fm(.)13 b(.)i(.)g(.)g(.)50 b Ft(129)150 865 y Fr(App)t(endix)44
-b(C)104 b(Cop)l(ying)46 b(This)e(Man)l(ual)27 b Fn(.)20
-b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71 b Fr(131)449 1002
-y Ft(C.1)91 b(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)f(License)26
-b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)56 b Ft(131)748 1112 y(C.1.1)92 b(ADDENDUM:)32
-b(Ho)m(w)f(to)h(use)e(this)f(License)h(for)g(y)m(our)930
-1221 y(do)s(cumen)m(ts)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(137)150 1464
-y Fr(Index)45 b(of)g(Shell)g(Builtin)h(Commands)27 b
-Fn(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)71
+TeXDict begin -4 5 bop 150 -116 a Ft(iv)2589 b(Bash)31
+b(Reference)g(Man)m(ual)150 83 y Fr(App)t(endix)44 b(A)99
+b(Rep)t(orting)46 b(Bugs)12 b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)g(.)h(.)f(.)h(.)56 b Fr(123)150 353 y(App)t(endix)44
+b(B)105 b(Ma)7 b(jor)46 b(Di\013erences)g(F)-11 b(rom)45
+b(The)f(Bourne)419 486 y(Shell)17 b Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h
+(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)61 b Fr(125)449 623
+y Ft(B.1)92 b(Implemen)m(tation)31 b(Di\013erences)h(F)-8
+b(rom)31 b(The)f(SVR4.2)h(Shell)21 b Fm(.)15 b(.)g(.)g(.)g(.)50
+b Ft(129)150 865 y Fr(App)t(endix)44 b(C)104 b(Cop)l(ying)46
+b(This)e(Man)l(ual)27 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71
+b Fr(131)449 1002 y Ft(C.1)91 b(GNU)31 b(F)-8 b(ree)32
+b(Do)s(cumen)m(tation)g(License)27 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)56
+b Ft(131)748 1112 y(C.1.1)92 b(ADDENDUM:)32 b(Ho)m(w)f(to)h(use)e(this)
+g(License)h(for)f(y)m(our)930 1221 y(do)s(cumen)m(ts)c
+Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)56 b Ft(137)150 1464 y Fr(Index)45 b(of)g(Shell)g(Builtin)h
+(Commands)27 b Fn(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)71
b Fr(139)150 1733 y(Index)45 b(of)g(Shell)g(Reserv)l(ed)h(W)-11
b(ords)41 b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
(.)85 b Fr(141)150 2003 y(P)l(arameter)47 b(and)d(V)-11
(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)80
b Fr(145)150 2543 y(Concept)45 b(Index)18 b Fn(.)i(.)f(.)h(.)f(.)g(.)h
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)
-h(.)f(.)g(.)h(.)f(.)h(.)62 b Fr(147)p eop
+h(.)f(.)g(.)h(.)f(.)h(.)62 b Fr(147)p eop end
%%Page: 1 7
-1 6 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591
-b(1)150 299 y Fo(1)80 b(In)l(tro)t(duction)150 675 y
-Fr(1.1)68 b(What)45 b(is)g(Bash?)275 923 y Ft(Bash)29
-b(is)g(the)g(shell,)g(or)g(command)g(language)h(in)m(terpreter,)g(for)f
-(the)h Fl(gnu)f Ft(op)s(erating)g(system.)40 b(The)150
-1033 y(name)33 b(is)f(an)h(acron)m(ym)g(for)g(the)g(`)p
+TeXDict begin 1 6 bop 150 -116 a Ft(Chapter)30 b(1:)41
+b(In)m(tro)s(duction)2592 b(1)150 299 y Fo(1)80 b(In)l(tro)t(duction)
+150 675 y Fr(1.1)68 b(What)45 b(is)g(Bash?)275 923 y
+Ft(Bash)29 b(is)h(the)f(shell,)i(or)e(command)g(language)i(in)m
+(terpreter,)g(for)e(the)h Fl(gnu)f Ft(op)s(erating)h(system.)40
+b(The)150 1033 y(name)33 b(is)g(an)g(acron)m(ym)g(for)g(the)g(`)p
Fs(Bourne-Again)27 b(SHell)p Ft(',)32 b(a)i(pun)d(on)i(Stephen)f
-(Bourne,)h(the)g(author)150 1142 y(of)f(the)f(direct)g(ancestor)i(of)e
-(the)h(curren)m(t)f(Unix)f(shell)g Fs(sh)p Ft(,)h(whic)m(h)f(app)s
-(eared)h(in)f(the)i(Sev)m(en)m(th)g(Edition)150 1252
-y(Bell)e(Labs)g(Researc)m(h)h(v)m(ersion)f(of)g(Unix.)275
-1391 y(Bash)f(is)f(largely)h(compatible)f(with)g Fs(sh)h
-Ft(and)g(incorp)s(orates)f(useful)g(features)h(from)g(the)g(Korn)g
-(shell)150 1500 y Fs(ksh)37 b Ft(and)h(the)g(C)g(shell)e
-Fs(csh)p Ft(.)64 b(It)38 b(is)f(in)m(tended)g(to)i(b)s(e)f(a)g
-(conforman)m(t)h(implemen)m(tation)e(of)h(the)g Fl(ieee)150
-1610 y(posix)44 b Ft(Shell)f(and)i(T)-8 b(o)s(ols)45
-b(sp)s(eci\014cation)e(\()p Fl(ieee)i Ft(W)-8 b(orking)46
-b(Group)e(1003.2\).)88 b(It)45 b(o\013ers)h(functional)150
-1719 y(impro)m(v)m(emen)m(ts)31 b(o)m(v)m(er)g Fs(sh)f
-Ft(for)g(b)s(oth)g(in)m(teractiv)m(e)h(and)f(programming)f(use.)275
-1858 y(While)g(the)i Fl(gnu)f Ft(op)s(erating)g(system)h(pro)m(vides)e
-(other)i(shells,)e(including)e(a)k(v)m(ersion)f(of)h
-Fs(csh)p Ft(,)f(Bash)150 1968 y(is)i(the)i(default)e(shell.)47
-b(Lik)m(e)33 b(other)h Fl(gnu)f Ft(soft)m(w)m(are,)i(Bash)f(is)e(quite)
-h(p)s(ortable.)48 b(It)33 b(curren)m(tly)f(runs)g(on)150
-2077 y(nearly)27 b(ev)m(ery)h(v)m(ersion)f(of)g(Unix)g(and)f(a)i(few)f
-(other)h(op)s(erating)f(systems)g Fp(\000)g Ft(indep)s(enden)m
-(tly-supp)s(orted)150 2187 y(p)s(orts)j(exist)g(for)g
-Fl(ms-dos)p Ft(,)f Fl(os/2)p Ft(,)i(and)f(Windo)m(ws)f(platforms.)150
+(Bourne,)h(the)g(author)150 1142 y(of)f(the)f(direct)h(ancestor)h(of)e
+(the)h(curren)m(t)f(Unix)g(shell)h Fs(sh)p Ft(,)f(whic)m(h)g(app)s
+(eared)g(in)g(the)h(Sev)m(en)m(th)g(Edition)150 1252
+y(Bell)g(Labs)e(Researc)m(h)h(v)m(ersion)g(of)f(Unix.)275
+1391 y(Bash)f(is)g(largely)i(compatible)f(with)f Fs(sh)g
+Ft(and)g(incorp)s(orates)g(useful)g(features)g(from)g(the)g(Korn)g
+(shell)150 1500 y Fs(ksh)37 b Ft(and)h(the)g(C)g(shell)g
+Fs(csh)p Ft(.)64 b(It)38 b(is)g(in)m(tended)g(to)h(b)s(e)f(a)g
+(conforman)m(t)h(implemen)m(tation)h(of)e(the)g Fl(ieee)150
+1610 y(posix)44 b Ft(Shell)h(and)g(T)-8 b(o)s(ols)46
+b(sp)s(eci\014cation)f(\()p Fl(ieee)g Ft(W)-8 b(orking)47
+b(Group)d(1003.2\).)88 b(It)45 b(o\013ers)h(functional)150
+1719 y(impro)m(v)m(emen)m(ts)32 b(o)m(v)m(er)f Fs(sh)f
+Ft(for)g(b)s(oth)g(in)m(teractiv)m(e)j(and)d(programming)g(use.)275
+1858 y(While)h(the)g Fl(gnu)f Ft(op)s(erating)h(system)g(pro)m(vides)f
+(other)h(shells,)g(including)f(a)h(v)m(ersion)g(of)g
+Fs(csh)p Ft(,)f(Bash)150 1968 y(is)j(the)h(default)f(shell.)49
+b(Lik)m(e)34 b(other)g Fl(gnu)f Ft(soft)m(w)m(are,)i(Bash)f(is)f(quite)
+h(p)s(ortable.)49 b(It)33 b(curren)m(tly)g(runs)f(on)150
+2077 y(nearly)c(ev)m(ery)g(v)m(ersion)g(of)f(Unix)h(and)e(a)i(few)f
+(other)h(op)s(erating)g(systems)f Fp(\000)g Ft(indep)s(enden)m
+(tly-supp)s(orted)150 2187 y(p)s(orts)j(exist)h(for)f
+Fl(ms-dos)p Ft(,)f Fl(os/2)p Ft(,)i(and)f(Windo)m(ws)g(platforms.)150
2455 y Fr(1.2)68 b(What)45 b(is)g(a)h(shell?)275 2703
-y Ft(A)m(t)41 b(its)e(base,)k(a)e(shell)d(is)h(simply)f(a)j(macro)f
+y Ft(A)m(t)41 b(its)f(base,)j(a)e(shell)f(is)g(simply)g(a)h(macro)f
(pro)s(cessor)g(that)h(executes)g(commands.)70 b(The)40
-b(term)150 2813 y(macro)29 b(pro)s(cessor)f(means)g(functionalit)m(y)f
-(where)h(text)i(and)e(sym)m(b)s(ols)f(are)h(expanded)g(to)h(create)h
-(larger)150 2922 y(expressions.)275 3061 y(A)k(Unix)g(shell)f(is)g(b)s
-(oth)h(a)h(command)g(in)m(terpreter)f(and)g(a)h(programming)e
-(language.)54 b(As)35 b(a)g(com-)150 3170 y(mand)30 b(in)m(terpreter,)h
-(the)h(shell)d(pro)m(vides)h(the)i(user)e(in)m(terface)i(to)g(the)f
-(ric)m(h)g(set)h(of)f Fl(gnu)g Ft(utilities.)40 b(The)150
-3280 y(programming)25 b(language)i(features)g(allo)m(w)f(these)h
-(utilitites)d(to)j(b)s(e)f(com)m(bined.)39 b(Files)25
-b(con)m(taining)h(com-)150 3390 y(mands)j(can)i(b)s(e)e(created,)j(and)
-d(b)s(ecome)i(commands)f(themselv)m(es.)41 b(These)30
+b(term)150 2813 y(macro)29 b(pro)s(cessor)f(means)g(functionalit)m(y)i
+(where)e(text)i(and)e(sym)m(b)s(ols)g(are)g(expanded)g(to)h(create)h
+(larger)150 2922 y(expressions.)275 3061 y(A)k(Unix)h(shell)g(is)f(b)s
+(oth)g(a)h(command)g(in)m(terpreter)g(and)f(a)h(programming)f
+(language.)55 b(As)35 b(a)g(com-)150 3170 y(mand)30 b(in)m(terpreter,)i
+(the)g(shell)f(pro)m(vides)g(the)h(user)e(in)m(terface)j(to)f(the)f
+(ric)m(h)h(set)g(of)f Fl(gnu)g Ft(utilities.)44 b(The)150
+3280 y(programming)26 b(language)i(features)f(allo)m(w)h(these)f
+(utilitites)h(to)f(b)s(e)f(com)m(bined.)40 b(Files)27
+b(con)m(taining)h(com-)150 3390 y(mands)h(can)i(b)s(e)e(created,)j(and)
+d(b)s(ecome)i(commands)f(themselv)m(es.)42 b(These)30
b(new)f(commands)h(ha)m(v)m(e)i(the)150 3499 y(same)f(status)h(as)f
-(system)g(commands)g(in)f(directories)g(suc)m(h)h(as)g(`)p
-Fs(/bin)p Ft(',)g(allo)m(wing)f(users)g(or)h(groups)f(to)150
-3609 y(establish)f(custom)h(en)m(vironmen)m(ts)g(to)h(automate)h(their)
-e(common)g(tasks.)275 3748 y(Shells)h(ma)m(y)j(b)s(e)f(used)g(in)m
-(teractiv)m(ely)h(or)g(non-in)m(teractiv)m(ely)-8 b(.)51
-b(In)33 b(in)m(teractiv)m(e)h(mo)s(de,)h(they)e(accept)150
-3857 y(input)20 b(t)m(yp)s(ed)i(from)g(the)h(k)m(eyb)s(oard.)37
-b(When)22 b(executing)h(non-in)m(teractiv)m(ely)-8 b(,)24
-b(shells)d(execute)i(commands)150 3967 y(read)30 b(from)g(a)h(\014le.)
-275 4105 y(A)41 b(shell)e(allo)m(ws)h(execution)i(of)f
-Fl(gnu)g Ft(commands,)i(b)s(oth)e(sync)m(hronously)e(and)i(async)m
-(hronously)-8 b(.)150 4215 y(The)29 b(shell)e(w)m(aits)j(for)f(sync)m
-(hronous)f(commands)h(to)h(complete)g(b)s(efore)f(accepting)g(more)h
-(input;)e(asyn-)150 4325 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)g
-(to)g(execute)h(in)d(parallel)g(with)h(the)g(shell)f(while)g(it)h
-(reads)h(and)f(executes)150 4434 y(additional)32 b(commands.)50
-b(The)33 b Fq(redirection)f Ft(constructs)i(p)s(ermit)e(\014ne-grained)
-g(con)m(trol)i(of)g(the)g(input)150 4544 y(and)40 b(output)f(of)i
-(those)f(commands.)70 b(Moreo)m(v)m(er,)45 b(the)c(shell)d(allo)m(ws)h
-(con)m(trol)i(o)m(v)m(er)h(the)e(con)m(ten)m(ts)i(of)150
-4653 y(commands')30 b(en)m(vironmen)m(ts.)275 4792 y(Shells)i(also)j
-(pro)m(vide)g(a)g(small)f(set)h(of)g(built-in)d(commands)j(\()p
-Fq(builtins)t Ft(\))d(implemen)m(ting)h(function-)150
-4902 y(alit)m(y)j(imp)s(ossible)d(or)j(incon)m(v)m(enien)m(t)h(to)g
-(obtain)f(via)g(separate)h(utilities.)57 b(F)-8 b(or)37
-b(example,)h Fs(cd)p Ft(,)f Fs(break)p Ft(,)150 5011
+(system)g(commands)g(in)g(directories)h(suc)m(h)f(as)g(`)p
+Fs(/bin)p Ft(',)g(allo)m(wing)i(users)d(or)h(groups)f(to)150
+3609 y(establish)h(custom)f(en)m(vironmen)m(ts)h(to)g(automate)h(their)
+f(common)f(tasks.)275 3748 y(Shells)j(ma)m(y)h(b)s(e)f(used)g(in)m
+(teractiv)m(ely)k(or)d(non-in)m(teractiv)m(ely)-8 b(.)54
+b(In)33 b(in)m(teractiv)m(e)j(mo)s(de,)f(they)e(accept)150
+3857 y(input)21 b(t)m(yp)s(ed)h(from)g(the)h(k)m(eyb)s(oard.)37
+b(When)22 b(executing)i(non-in)m(teractiv)m(ely)-8 b(,)27
+b(shells)c(execute)g(commands)150 3967 y(read)30 b(from)g(a)h(\014le.)
+275 4105 y(A)41 b(shell)g(allo)m(ws)h(execution)h(of)e
+Fl(gnu)g Ft(commands,)i(b)s(oth)e(sync)m(hronously)f(and)h(async)m
+(hronously)-8 b(.)150 4215 y(The)29 b(shell)g(w)m(aits)i(for)e(sync)m
+(hronous)f(commands)h(to)h(complete)h(b)s(efore)e(accepting)h(more)g
+(input;)f(asyn-)150 4325 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)h
+(to)f(execute)h(in)e(parallel)i(with)f(the)f(shell)h(while)g(it)g
+(reads)g(and)f(executes)150 4434 y(additional)35 b(commands.)50
+b(The)33 b Fq(redirection)h Ft(constructs)g(p)s(ermit)f(\014ne-grained)
+g(con)m(trol)i(of)f(the)g(input)150 4544 y(and)40 b(output)f(of)i
+(those)f(commands.)70 b(Moreo)m(v)m(er,)45 b(the)c(shell)f(allo)m(ws)h
+(con)m(trol)h(o)m(v)m(er)g(the)e(con)m(ten)m(ts)i(of)150
+4653 y(commands')30 b(en)m(vironmen)m(ts.)275 4792 y(Shells)k(also)i
+(pro)m(vide)g(a)f(small)h(set)f(of)g(built-in)g(commands)g(\()p
+Fq(builtins)t Ft(\))g(implemen)m(ting)h(function-)150
+4902 y(alit)m(y)i(imp)s(ossible)e(or)g(incon)m(v)m(enien)m(t)j(to)e
+(obtain)g(via)g(separate)g(utilities.)61 b(F)-8 b(or)37
+b(example,)i Fs(cd)p Ft(,)e Fs(break)p Ft(,)150 5011
y Fs(continue)p Ft(,)43 b(and)f Fs(exec)p Ft(\))g(cannot)h(b)s(e)e
-(implemen)m(ted)g(outside)h(of)g(the)h(shell)d(b)s(ecause)j(they)f
-(directly)150 5121 y(manipulate)35 b(the)i(shell)d(itself.)59
+(implemen)m(ted)i(outside)g(of)f(the)h(shell)f(b)s(ecause)h(they)f
+(directly)150 5121 y(manipulate)37 b(the)g(shell)f(itself.)61
b(The)36 b Fs(history)p Ft(,)g Fs(getopts)p Ft(,)g Fs(kill)p
-Ft(,)h(or)g Fs(pwd)f Ft(builtins,)e(among)k(others,)150
-5230 y(could)32 b(b)s(e)g(implemen)m(ted)f(in)h(separate)h(utilities,)e
-(but)h(they)h(are)h(more)f(con)m(v)m(enien)m(t)g(to)h(use)e(as)h
-(builtin)150 5340 y(commands.)40 b(All)29 b(of)i(the)f(shell)f
-(builtins)e(are)k(describ)s(ed)d(in)h(subsequen)m(t)h(sections.)p
-eop
+Ft(,)h(or)g Fs(pwd)f Ft(builtins,)h(among)h(others,)150
+5230 y(could)33 b(b)s(e)f(implemen)m(ted)h(in)g(separate)g(utilities,)i
+(but)d(they)h(are)h(more)f(con)m(v)m(enien)m(t)h(to)g(use)e(as)h
+(builtin)150 5340 y(commands.)40 b(All)31 b(of)g(the)f(shell)h
+(builtins)f(are)h(describ)s(ed)e(in)h(subsequen)m(t)g(sections.)p
+eop end
%%Page: 2 8
-2 7 bop 150 -116 a Ft(2)2617 b(Bash)31 b(Reference)g(Man)m(ual)275
-299 y(While)37 b(executing)i(commands)f(is)f(essen)m(tial,)k(most)e(of)
-g(the)g(p)s(o)m(w)m(er)f(\(and)g(complexit)m(y\))h(of)g(shells)150
-408 y(is)33 b(due)g(to)i(their)e(em)m(b)s(edded)g(programming)g
-(languages.)51 b(Lik)m(e)34 b(an)m(y)g(high-lev)m(el)f(language,)j(the)
-e(shell)150 518 y(pro)m(vides)29 b(v)-5 b(ariables,)30
-b(\015o)m(w)g(con)m(trol)h(constructs,)g(quoting,)f(and)g(functions.)
-275 653 y(Shells)19 b(o\013er)k(features)f(geared)h(sp)s(eci\014cally)d
-(for)i(in)m(teractiv)m(e)h(use)f(rather)g(than)g(to)h(augmen)m(t)g(the)
-f(pro-)150 762 y(gramming)31 b(language.)47 b(These)32
-b(in)m(teractiv)m(e)h(features)f(include)e(job)i(con)m(trol,)i(command)
-d(line)g(editing,)150 872 y(command)f(history)f(and)h(aliases.)40
-b(Eac)m(h)31 b(of)g(these)g(features)f(is)g(describ)s(ed)e(in)h(this)g
-(man)m(ual.)p eop
+TeXDict begin 2 7 bop 150 -116 a Ft(2)2617 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 y(While)39 b(executing)h(commands)e(is)
+g(essen)m(tial,)43 b(most)c(of)g(the)g(p)s(o)m(w)m(er)f(\(and)g
+(complexit)m(y\))j(of)e(shells)150 408 y(is)34 b(due)f(to)i(their)f(em)
+m(b)s(edded)f(programming)h(languages.)52 b(Lik)m(e)35
+b(an)m(y)f(high-lev)m(el)i(language,)h(the)d(shell)150
+518 y(pro)m(vides)c(v)-5 b(ariables,)32 b(\015o)m(w)e(con)m(trol)i
+(constructs,)f(quoting,)g(and)f(functions.)275 653 y(Shells)21
+b(o\013er)i(features)f(geared)h(sp)s(eci\014cally)g(for)f(in)m
+(teractiv)m(e)j(use)d(rather)g(than)g(to)h(augmen)m(t)g(the)f(pro-)150
+762 y(gramming)32 b(language.)48 b(These)32 b(in)m(teractiv)m(e)j
+(features)d(include)g(job)g(con)m(trol,)j(command)c(line)i(editing,)150
+872 y(command)d(history)g(and)g(aliases.)42 b(Eac)m(h)31
+b(of)g(these)g(features)f(is)h(describ)s(ed)e(in)h(this)g(man)m(ual.)p
+eop end
%%Page: 3 9
-3 8 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(De\014nitions)2660
-b(3)150 299 y Fo(2)80 b(De\014nitions)275 527 y Ft(These)30
-b(de\014nitions)e(are)i(used)g(throughout)g(the)g(remainder)f(of)i
-(this)e(man)m(ual.)150 684 y Fs(POSIX)240 b Ft(A)41 b(family)e(of)i(op)
-s(en)g(system)g(standards)f(based)g(on)h(Unix.)71 b(Bash)41
-b(is)f(concerned)h(with)630 794 y Fl(posix)30 b Ft(1003.2,)j(the)d
-(Shell)f(and)g(T)-8 b(o)s(ols)30 b(Standard.)150 950
-y Fs(blank)240 b Ft(A)30 b(space)h(or)g(tab)f(c)m(haracter.)150
-1107 y Fs(builtin)144 b Ft(A)35 b(command)g(that)g(is)f(implemen)m(ted)
-f(in)m(ternally)g(b)m(y)i(the)g(shell)e(itself,)i(rather)f(than)h(b)m
-(y)630 1217 y(an)30 b(executable)h(program)f(somewhere)h(in)e(the)h
-(\014le)g(system.)150 1374 y Fs(control)e(operator)630
-1484 y Ft(A)c Fs(word)e Ft(that)i(p)s(erforms)f(a)h(con)m(trol)g
-(function.)37 b(It)24 b(is)e(a)i Fs(newline)e Ft(or)i(one)g(of)f(the)h
-(follo)m(wing:)630 1593 y(`)p Fs(||)p Ft(',)31 b(`)p
-Fs(&&)p Ft(',)f(`)p Fs(&)p Ft(',)h(`)p Fs(;)p Ft(',)g(`)p
-Fs(;;)p Ft(',)f(`)p Fs(|)p Ft(',)h(`)p Fs(\()p Ft(',)g(or)f(`)p
-Fs(\))p Ft('.)150 1750 y Fs(exit)f(status)630 1860 y
-Ft(The)f(v)-5 b(alue)28 b(returned)f(b)m(y)h(a)h(command)f(to)h(its)f
-(caller.)39 b(The)28 b(v)-5 b(alue)28 b(is)f(restricted)h(to)i(eigh)m
-(t)630 1969 y(bits,)g(so)g(the)h(maxim)m(um)e(v)-5 b(alue)30
-b(is)f(255.)150 2126 y Fs(field)240 b Ft(A)27 b(unit)f(of)h(text)h
-(that)g(is)e(the)h(result)f(of)h(one)h(of)f(the)g(shell)e(expansions.)
-39 b(After)27 b(expansion,)630 2236 y(when)e(executing)g(a)h(command,)h
-(the)f(resulting)d(\014elds)h(are)i(used)f(as)h(the)g(command)f(name)
-630 2346 y(and)30 b(argumen)m(ts.)150 2503 y Fs(filename)96
-b Ft(A)30 b(string)g(of)g(c)m(haracters)i(used)e(to)h(iden)m(tify)e(a)h
-(\014le.)150 2659 y Fs(job)336 b Ft(A)31 b(set)h(of)f(pro)s(cesses)g
-(comprising)e(a)i(pip)s(eline,)d(and)j(an)m(y)g(pro)s(cesses)g
-(descended)g(from)f(it,)630 2769 y(that)h(are)g(all)e(in)g(the)i(same)f
-(pro)s(cess)g(group.)150 2926 y Fs(job)f(control)630
-3036 y Ft(A)22 b(mec)m(hanism)f(b)m(y)g(whic)m(h)g(users)g(can)h
-(selectiv)m(ely)f(stop)h(\(susp)s(end\))e(and)h(restart)i(\(resume\))
-630 3145 y(execution)31 b(of)f(pro)s(cesses.)150 3302
-y Fs(metacharacter)630 3412 y Ft(A)25 b(c)m(haracter)i(that,)g(when)d
-(unquoted,)i(separates)g(w)m(ords.)38 b(A)26 b(metac)m(haracter)i(is)c
-(a)h Fs(blank)630 3521 y Ft(or)30 b(one)h(of)g(the)f(follo)m(wing)f(c)m
-(haracters:)42 b(`)p Fs(|)p Ft(',)31 b(`)p Fs(&)p Ft(',)g(`)p
-Fs(;)p Ft(',)g(`)p Fs(\()p Ft(',)f(`)p Fs(\))p Ft(',)h(`)p
-Fs(<)p Ft(',)g(or)f(`)p Fs(>)p Ft('.)150 3678 y Fs(name)288
-b Ft(A)37 b Fs(word)f Ft(consisting)g(solely)h(of)g(letters,)i(n)m(um)m
-(b)s(ers,)f(and)f(underscores,)h(and)f(b)s(eginning)630
-3788 y(with)22 b(a)h(letter)g(or)g(underscore.)38 b Fs(Name)p
-Ft(s)22 b(are)h(used)f(as)i(shell)d(v)-5 b(ariable)22
-b(and)g(function)g(names.)630 3898 y(Also)30 b(referred)g(to)h(as)f(an)
-h Fs(identifier)p Ft(.)150 4055 y Fs(operator)96 b Ft(A)38
-b Fs(control)28 b(operator)36 b Ft(or)h(a)i Fs(redirection)27
-b(operator)p Ft(.)61 b(See)38 b(Section)f(3.6)i([Redirec-)630
-4164 y(tions],)30 b(page)h(24,)h(for)e(a)h(list)e(of)h(redirection)f
-(op)s(erators.)150 4321 y Fs(process)f(group)630 4431
-y Ft(A)i(collection)h(of)f(related)g(pro)s(cesses)h(eac)m(h)g(ha)m
-(ving)f(the)h(same)f(pro)s(cess)g(group)g Fl(id)p Ft(.)150
-4588 y Fs(process)e(group)h(ID)630 4697 y Ft(A)h(unique)f(iden)m(tifer)
-g(that)i(represen)m(ts)f(a)h Fs(process)d(group)h Ft(during)f(its)i
-(lifetime.)150 4854 y Fs(reserved)e(word)630 4964 y Ft(A)h
-Fs(word)e Ft(that)i(has)f(a)h(sp)s(ecial)e(meaning)g(to)i(the)g(shell.)
-38 b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)630
-5073 y(shell)h(\015o)m(w)h(con)m(trol)h(constructs,)g(suc)m(h)f(as)g
+TeXDict begin 3 8 bop 150 -116 a Ft(Chapter)30 b(2:)41
+b(De\014nitions)2662 b(3)150 299 y Fo(2)80 b(De\014nitions)275
+527 y Ft(These)30 b(de\014nitions)g(are)g(used)g(throughout)g(the)g
+(remainder)g(of)h(this)f(man)m(ual.)150 684 y Fs(POSIX)240
+b Ft(A)41 b(family)g(of)g(op)s(en)g(system)g(standards)f(based)g(on)h
+(Unix.)72 b(Bash)41 b(is)g(concerned)g(with)630 794 y
+Fl(posix)30 b Ft(1003.2,)j(the)d(Shell)h(and)e(T)-8 b(o)s(ols)31
+b(Standard.)150 950 y Fs(blank)240 b Ft(A)30 b(space)h(or)g(tab)f(c)m
+(haracter.)150 1107 y Fs(builtin)144 b Ft(A)35 b(command)g(that)g(is)g
+(implemen)m(ted)g(in)m(ternally)h(b)m(y)f(the)g(shell)g(itself,)i
+(rather)d(than)h(b)m(y)630 1217 y(an)30 b(executable)i(program)e
+(somewhere)h(in)f(the)g(\014le)h(system.)150 1374 y Fs(control)d
+(operator)630 1484 y Ft(A)c Fs(word)e Ft(that)i(p)s(erforms)f(a)h(con)m
+(trol)h(function.)38 b(It)24 b(is)f(a)h Fs(newline)e
+Ft(or)i(one)g(of)f(the)h(follo)m(wing:)630 1593 y(`)p
+Fs(||)p Ft(',)31 b(`)p Fs(&&)p Ft(',)f(`)p Fs(&)p Ft(',)h(`)p
+Fs(;)p Ft(',)g(`)p Fs(;;)p Ft(',)f(`)p Fs(|)p Ft(',)h(`)p
+Fs(\()p Ft(',)g(or)f(`)p Fs(\))p Ft('.)150 1750 y Fs(exit)f(status)630
+1860 y Ft(The)f(v)-5 b(alue)29 b(returned)e(b)m(y)h(a)h(command)f(to)h
+(its)g(caller.)41 b(The)28 b(v)-5 b(alue)29 b(is)f(restricted)h(to)h
+(eigh)m(t)630 1969 y(bits,)h(so)f(the)h(maxim)m(um)f(v)-5
+b(alue)31 b(is)f(255.)150 2126 y Fs(field)240 b Ft(A)27
+b(unit)g(of)g(text)h(that)g(is)f(the)g(result)g(of)g(one)h(of)f(the)g
+(shell)g(expansions.)40 b(After)27 b(expansion,)630 2236
+y(when)e(executing)h(a)g(command,)h(the)f(resulting)f(\014elds)g(are)h
+(used)f(as)h(the)g(command)f(name)630 2346 y(and)30 b(argumen)m(ts.)150
+2503 y Fs(filename)96 b Ft(A)30 b(string)h(of)f(c)m(haracters)i(used)e
+(to)h(iden)m(tify)g(a)f(\014le.)150 2659 y Fs(job)336
+b Ft(A)31 b(set)h(of)f(pro)s(cesses)g(comprising)g(a)g(pip)s(eline,)g
+(and)g(an)m(y)g(pro)s(cesses)g(descended)g(from)f(it,)630
+2769 y(that)h(are)g(all)g(in)f(the)h(same)f(pro)s(cess)g(group.)150
+2926 y Fs(job)f(control)630 3036 y Ft(A)22 b(mec)m(hanism)g(b)m(y)f
+(whic)m(h)h(users)f(can)h(selectiv)m(ely)i(stop)e(\(susp)s(end\))e(and)
+h(restart)i(\(resume\))630 3145 y(execution)32 b(of)e(pro)s(cesses.)150
+3302 y Fs(metacharacter)630 3412 y Ft(A)25 b(c)m(haracter)i(that,)g
+(when)d(unquoted,)i(separates)g(w)m(ords.)38 b(A)26 b(metac)m(haracter)
+i(is)d(a)g Fs(blank)630 3521 y Ft(or)30 b(one)h(of)g(the)f(follo)m
+(wing)i(c)m(haracters:)42 b(`)p Fs(|)p Ft(',)31 b(`)p
+Fs(&)p Ft(',)g(`)p Fs(;)p Ft(',)g(`)p Fs(\()p Ft(',)f(`)p
+Fs(\))p Ft(',)h(`)p Fs(<)p Ft(',)g(or)f(`)p Fs(>)p Ft('.)150
+3678 y Fs(name)288 b Ft(A)37 b Fs(word)f Ft(consisting)i(solely)h(of)e
+(letters,)j(n)m(um)m(b)s(ers,)e(and)f(underscores,)h(and)f(b)s
+(eginning)630 3788 y(with)23 b(a)g(letter)h(or)f(underscore.)38
+b Fs(Name)p Ft(s)22 b(are)h(used)f(as)i(shell)f(v)-5
+b(ariable)24 b(and)e(function)h(names.)630 3898 y(Also)31
+b(referred)f(to)h(as)f(an)h Fs(identifier)p Ft(.)150
+4055 y Fs(operator)96 b Ft(A)38 b Fs(control)28 b(operator)36
+b Ft(or)h(a)i Fs(redirection)27 b(operator)p Ft(.)61
+b(See)38 b(Section)g(3.6)h([Redirec-)630 4164 y(tions],)31
+b(page)g(24,)h(for)e(a)h(list)g(of)f(redirection)h(op)s(erators.)150
+4321 y Fs(process)d(group)630 4431 y Ft(A)i(collection)k(of)c(related)h
+(pro)s(cesses)g(eac)m(h)g(ha)m(ving)g(the)g(same)f(pro)s(cess)g(group)g
+Fl(id)p Ft(.)150 4588 y Fs(process)e(group)h(ID)630 4697
+y Ft(A)h(unique)g(iden)m(tifer)h(that)g(represen)m(ts)f(a)h
+Fs(process)d(group)h Ft(during)g(its)i(lifetime.)150
+4854 y Fs(reserved)d(word)630 4964 y Ft(A)h Fs(word)e
+Ft(that)i(has)f(a)h(sp)s(ecial)g(meaning)f(to)h(the)g(shell.)40
+b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)630
+5073 y(shell)j(\015o)m(w)f(con)m(trol)i(constructs,)f(suc)m(h)f(as)g
Fs(for)g Ft(and)g Fs(while)p Ft(.)150 5230 y Fs(return)f(status)630
5340 y Ft(A)h(synon)m(ym)g(for)g Fs(exit)g(status)p Ft(.)p
-eop
+eop end
%%Page: 4 10
-4 9 bop 150 -116 a Ft(4)2617 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(signal)192 b Ft(A)40 b(mec)m(hanism)g(b)m(y)f(whic)m(h)g(a)i
-(pro)s(cess)e(ma)m(y)i(b)s(e)e(noti\014ed)g(b)m(y)h(the)h(k)m(ernel)e
-(of)h(an)g(ev)m(en)m(t)630 408 y(o)s(ccurring)29 b(in)g(the)i(system.)
-150 568 y Fs(special)d(builtin)630 677 y Ft(A)e(shell)f(builtin)e
-(command)j(that)h(has)f(b)s(een)f(classi\014ed)g(as)h(sp)s(ecial)f(b)m
-(y)h(the)h Fl(posix)e Ft(1003.2)630 787 y(standard.)150
-946 y Fs(token)240 b Ft(A)38 b(sequence)h(of)f(c)m(haracters)h
-(considered)e(a)i(single)e(unit)f(b)m(y)i(the)h(shell.)62
-b(It)38 b(is)f(either)h(a)630 1056 y Fs(word)29 b Ft(or)i(an)f
-Fs(operator)p Ft(.)150 1215 y Fs(word)288 b Ft(A)30 b
-Fs(token)f Ft(that)i(is)f(not)g(an)h Fs(operator)p Ft(.)p
-eop
+TeXDict begin 4 9 bop 150 -116 a Ft(4)2617 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(signal)192 b Ft(A)40
+b(mec)m(hanism)h(b)m(y)e(whic)m(h)h(a)h(pro)s(cess)e(ma)m(y)i(b)s(e)e
+(noti\014ed)h(b)m(y)g(the)h(k)m(ernel)f(of)g(an)g(ev)m(en)m(t)630
+408 y(o)s(ccurring)30 b(in)g(the)h(system.)150 568 y
+Fs(special)d(builtin)630 677 y Ft(A)e(shell)h(builtin)f(command)g(that)
+h(has)f(b)s(een)f(classi\014ed)i(as)f(sp)s(ecial)h(b)m(y)f(the)h
+Fl(posix)e Ft(1003.2)630 787 y(standard.)150 946 y Fs(token)240
+b Ft(A)38 b(sequence)h(of)f(c)m(haracters)h(considered)f(a)h(single)g
+(unit)e(b)m(y)h(the)h(shell.)64 b(It)38 b(is)g(either)h(a)630
+1056 y Fs(word)29 b Ft(or)i(an)f Fs(operator)p Ft(.)150
+1215 y Fs(word)288 b Ft(A)30 b Fs(token)f Ft(that)i(is)g(not)f(an)h
+Fs(operator)p Ft(.)p eop end
%%Page: 5 11
-5 10 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2292 b(5)150 299 y Fo(3)80 b(Basic)55
-b(Shell)f(F)-13 b(eatures)275 544 y Ft(Bash)27 b(is)f(an)h(acron)m(ym)h
-(for)f(`)p Fs(Bourne-Again)g(SHell)p Ft('.)39 b(The)26
-b(Bourne)h(shell)f(is)g(the)h(traditional)f(Unix)150
-653 y(shell)32 b(originally)f(written)h(b)m(y)h(Stephen)g(Bourne.)50
-b(All)32 b(of)i(the)f(Bourne)h(shell)d(builtin)f(commands)k(are)150
-763 y(a)m(v)-5 b(ailable)29 b(in)e(Bash,)j(The)f(rules)f(for)h(ev)-5
-b(aluation)29 b(and)f(quoting)h(are)g(tak)m(en)i(from)d(the)i
-Fl(posix)e Ft(sp)s(eci\014ca-)150 872 y(tion)i(for)g(the)h(`standard')f
-(Unix)f(shell.)275 1010 y(This)h(c)m(hapter)j(brie\015y)d(summarizes)h
-(the)i(shell's)d(`building)f(blo)s(c)m(ks':)44 b(commands,)32
-b(con)m(trol)h(struc-)150 1120 y(tures,)38 b(shell)c(functions,)i
-(shell)f Fm(p)-5 b(ar)g(ameters)p Ft(,)41 b(shell)34
-b(expansions,)j Fm(r)-5 b(e)g(dir)g(e)g(ctions)p Ft(,)40
-b(whic)m(h)35 b(are)i(a)f(w)m(a)m(y)h(to)150 1230 y(direct)30
-b(input)e(and)i(output)g(from)g(and)g(to)h(named)f(\014les,)f(and)h(ho)
-m(w)g(the)h(shell)e(executes)i(commands.)150 1496 y Fr(3.1)68
-b(Shell)45 b(Syn)l(tax)275 1744 y Ft(When)32 b(the)h(shell)e(reads)i
-(input,)f(it)g(pro)s(ceeds)g(through)h(a)g(sequence)g(of)g(op)s
-(erations.)47 b(If)33 b(the)g(input)150 1853 y(indicates)c(the)h(b)s
-(eginning)d(of)j(a)g(commen)m(t,)h(the)f(shell)e(ignores)h(the)h
-(commen)m(t)h(sym)m(b)s(ol)e(\(`)p Fs(#)p Ft('\),)i(and)e(the)150
-1963 y(rest)i(of)f(that)h(line.)275 2101 y(Otherwise,)g(roughly)f(sp)s
-(eaking,)i(the)g(shell)e(reads)i(its)f(input)f(and)i(divides)d(the)k
-(input)d(in)m(to)h(w)m(ords)150 2210 y(and)23 b(op)s(erators,)j(emplo)m
-(ying)c(the)i(quoting)g(rules)e(to)i(select)h(whic)m(h)d(meanings)h(to)
-i(assign)e(v)-5 b(arious)22 b(w)m(ords)150 2320 y(and)30
-b(c)m(haracters.)275 2458 y(The)38 b(shell)f(then)h(parses)g(these)h
-(tok)m(ens)h(in)m(to)e(commands)h(and)f(other)h(constructs,)i(remo)m(v)
-m(es)f(the)150 2568 y(sp)s(ecial)29 b(meaning)g(of)h(certain)g(w)m
-(ords)g(or)g(c)m(haracters,)i(expands)d(others,)h(redirects)g(input)e
-(and)h(output)150 2677 y(as)d(needed,)g(executes)g(the)g(sp)s
-(eci\014ed)d(command,)k(w)m(aits)e(for)g(the)g(command's)g(exit)h
-(status,)g(and)f(mak)m(es)150 2787 y(that)31 b(exit)f(status)h(a)m(v)-5
-b(ailable)30 b(for)g(further)f(insp)s(ection)f(or)j(pro)s(cessing.)150
+TeXDict begin 5 10 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(5)150 299
+y Fo(3)80 b(Basic)54 b(Shell)e(F)-13 b(eatures)275 544
+y Ft(Bash)27 b(is)g(an)g(acron)m(ym)h(for)f(`)p Fs(Bourne-Again)g
+(SHell)p Ft('.)39 b(The)26 b(Bourne)h(shell)h(is)f(the)g(traditional)i
+(Unix)150 653 y(shell)34 b(originally)h(written)e(b)m(y)g(Stephen)g
+(Bourne.)50 b(All)34 b(of)g(the)f(Bourne)h(shell)f(builtin)g(commands)h
+(are)150 763 y(a)m(v)-5 b(ailable)32 b(in)c(Bash,)i(The)f(rules)g(for)g
+(ev)-5 b(aluation)31 b(and)d(quoting)i(are)f(tak)m(en)i(from)d(the)i
+Fl(posix)e Ft(sp)s(eci\014ca-)150 872 y(tion)j(for)f(the)h(`standard')f
+(Unix)g(shell.)275 1010 y(This)h(c)m(hapter)i(brie\015y)e(summarizes)h
+(the)h(shell's)f(`building)g(blo)s(c)m(ks':)45 b(commands,)32
+b(con)m(trol)i(struc-)150 1120 y(tures,)k(shell)e(functions,)h(shell)g
+Fm(p)-5 b(ar)g(ameters)p Ft(,)41 b(shell)36 b(expansions,)i
+Fm(r)-5 b(e)g(dir)g(e)g(ctions)p Ft(,)40 b(whic)m(h)c(are)h(a)f(w)m(a)m
+(y)h(to)150 1230 y(direct)31 b(input)e(and)h(output)g(from)g(and)g(to)h
+(named)f(\014les,)g(and)g(ho)m(w)g(the)h(shell)g(executes)g(commands.)
+150 1496 y Fr(3.1)68 b(Shell)45 b(Syn)l(tax)275 1744
+y Ft(When)32 b(the)h(shell)g(reads)g(input,)g(it)g(pro)s(ceeds)f
+(through)h(a)g(sequence)g(of)g(op)s(erations.)48 b(If)33
+b(the)g(input)150 1853 y(indicates)e(the)f(b)s(eginning)f(of)h(a)g
+(commen)m(t,)h(the)f(shell)g(ignores)g(the)g(commen)m(t)h(sym)m(b)s(ol)
+f(\(`)p Fs(#)p Ft('\),)h(and)e(the)150 1963 y(rest)i(of)f(that)h(line.)
+275 2101 y(Otherwise,)h(roughly)f(sp)s(eaking,)i(the)f(shell)g(reads)g
+(its)g(input)f(and)h(divides)f(the)i(input)e(in)m(to)h(w)m(ords)150
+2210 y(and)23 b(op)s(erators,)j(emplo)m(ying)e(the)g(quoting)h(rules)e
+(to)h(select)i(whic)m(h)d(meanings)h(to)h(assign)f(v)-5
+b(arious)23 b(w)m(ords)150 2320 y(and)30 b(c)m(haracters.)275
+2458 y(The)38 b(shell)h(then)f(parses)g(these)h(tok)m(ens)h(in)m(to)f
+(commands)g(and)f(other)h(constructs,)i(remo)m(v)m(es)f(the)150
+2568 y(sp)s(ecial)31 b(meaning)f(of)g(certain)h(w)m(ords)f(or)g(c)m
+(haracters,)i(expands)d(others,)h(redirects)h(input)e(and)g(output)150
+2677 y(as)d(needed,)g(executes)g(the)g(sp)s(eci\014ed)e(command,)j(w)m
+(aits)f(for)f(the)g(command's)g(exit)i(status,)f(and)f(mak)m(es)150
+2787 y(that)31 b(exit)g(status)g(a)m(v)-5 b(ailable)33
+b(for)d(further)f(insp)s(ection)h(or)h(pro)s(cessing.)150
3018 y Fk(3.1.1)63 b(Shell)41 b(Op)s(eration)275 3266
-y Ft(The)28 b(follo)m(wing)f(is)h(a)h(brief)e(description)g(of)i(the)g
-(shell's)e(op)s(eration)i(when)e(it)i(reads)f(and)g(executes)j(a)150
-3375 y(command.)40 b(Basically)-8 b(,)31 b(the)f(shell)f(do)s(es)h(the)
-h(follo)m(wing:)199 3513 y(1.)61 b(Reads)42 b(its)g(input)e(from)i(a)g
-(\014le)g(\(see)h(Section)f(3.8)h([Shell)d(Scripts],)k(page)f(31\),)k
-(from)41 b(a)i(string)330 3623 y(supplied)24 b(as)k(an)f(argumen)m(t)g
-(to)h(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)g(option)g(\(see)h
-(Section)g(6.1)g([In)m(v)m(oking)f(Bash],)330 3732 y(page)k(63\),)h(or)
+y Ft(The)28 b(follo)m(wing)i(is)f(a)g(brief)f(description)h(of)g(the)g
+(shell's)g(op)s(eration)h(when)d(it)j(reads)e(and)g(executes)j(a)150
+3375 y(command.)40 b(Basically)-8 b(,)34 b(the)c(shell)h(do)s(es)f(the)
+h(follo)m(wing:)199 3513 y(1.)61 b(Reads)42 b(its)h(input)e(from)h(a)g
+(\014le)h(\(see)g(Section)g(3.8)g([Shell)f(Scripts],)j(page)e(31\),)k
+(from)41 b(a)i(string)330 3623 y(supplied)26 b(as)i(an)f(argumen)m(t)g
+(to)h(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)i(option)f(\(see)g
+(Section)h(6.1)f([In)m(v)m(oking)g(Bash],)330 3732 y(page)j(63\),)h(or)
e(from)g(the)h(user's)f(terminal.)199 3869 y(2.)61 b(Breaks)43
-b(the)g(input)e(in)m(to)h(w)m(ords)g(and)g(op)s(erators,)k(ob)s(eying)c
-(the)h(quoting)f(rules)f(describ)s(ed)f(in)330 3978 y(Section)26
-b(3.1.2)j([Quoting],)e(page)g(6.)40 b(These)26 b(tok)m(ens)i(are)f
+b(the)g(input)f(in)m(to)h(w)m(ords)f(and)g(op)s(erators,)k(ob)s(eying)d
+(the)g(quoting)g(rules)f(describ)s(ed)f(in)330 3978 y(Section)27
+b(3.1.2)i([Quoting],)f(page)f(6.)40 b(These)26 b(tok)m(ens)i(are)f
(separated)g(b)m(y)f Fs(metacharacters)p Ft(.)36 b(Alias)330
-4088 y(expansion)29 b(is)h(p)s(erformed)e(b)m(y)j(this)e(step)h(\(see)i
-(Section)e(6.6)h([Aliases],)g(page)g(71\).)199 4224 y(3.)61
-b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)g(simple)d(and)i(comp)s
-(ound)f(commands)h(\(see)h(Section)g(3.2)g([Shell)e(Com-)330
-4334 y(mands],)d(page)h(8\).)199 4470 y(4.)61 b(P)m(erforms)40
-b(the)h(v)-5 b(arious)39 b(shell)g(expansions)g(\(see)i(Section)f(3.5)h
-([Shell)e(Expansions],)i(page)g(16\),)330 4580 y(breaking)34
-b(the)h(expanded)g(tok)m(ens)h(in)m(to)f(lists)e(of)i(\014lenames)g
-(\(see)h(Section)e(3.5.8)j([Filename)e(Ex-)330 4689 y(pansion],)29
-b(page)i(22\))h(and)e(commands)g(and)g(argumen)m(ts.)199
-4826 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)e
-(\(see)j(Section)e(3.6)i([Redirections],)g(page)g(24\))g(and)e(re-)330
-4935 y(mo)m(v)m(es)c(the)e(redirection)f(op)s(erators)i(and)f(their)f
-(op)s(erands)g(from)h(the)h(argumen)m(t)f(list.)199 5071
-y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)f(3.7)i
-([Executing)e(Commands],)g(page)h(28\).)199 5208 y(7.)61
-b(Optionally)37 b(w)m(aits)i(for)g(the)g(command)g(to)h(complete)f(and)
-g(collects)g(its)g(exit)g(status)g(\(see)h(Sec-)330 5317
-y(tion)30 b(3.7.5)i([Exit)e(Status],)h(page)g(30\).)p
-eop
+4088 y(expansion)30 b(is)h(p)s(erformed)d(b)m(y)j(this)f(step)g(\(see)i
+(Section)f(6.6)g([Aliases],)i(page)e(71\).)199 4224 y(3.)61
+b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)h(simple)e(and)g(comp)s
+(ound)f(commands)h(\(see)h(Section)h(3.2)f([Shell)g(Com-)330
+4334 y(mands],)30 b(page)h(8\).)199 4470 y(4.)61 b(P)m(erforms)40
+b(the)h(v)-5 b(arious)40 b(shell)h(expansions)f(\(see)h(Section)g(3.5)g
+([Shell)g(Expansions],)h(page)f(16\),)330 4580 y(breaking)35
+b(the)g(expanded)g(tok)m(ens)h(in)m(to)g(lists)f(of)g(\014lenames)h
+(\(see)g(Section)f(3.5.8)i([Filename)g(Ex-)330 4689 y(pansion],)30
+b(page)h(22\))h(and)e(commands)g(and)g(argumen)m(ts.)199
+4826 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)g
+(\(see)h(Section)f(3.6)h([Redirections],)i(page)e(24\))g(and)e(re-)330
+4935 y(mo)m(v)m(es)c(the)e(redirection)h(op)s(erators)g(and)f(their)g
+(op)s(erands)f(from)h(the)h(argumen)m(t)f(list.)199 5071
+y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)g(3.7)h
+([Executing)f(Commands],)f(page)h(28\).)199 5208 y(7.)61
+b(Optionally)40 b(w)m(aits)g(for)f(the)g(command)g(to)h(complete)g(and)
+f(collects)i(its)f(exit)g(status)f(\(see)h(Sec-)330 5317
+y(tion)31 b(3.7.5)h([Exit)f(Status],)g(page)g(30\).)p
+eop end
%%Page: 6 12
-6 11 bop 150 -116 a Ft(6)2617 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fk(3.1.2)63 b(Quoting)275 543 y Ft(Quoting)23 b(is)g(used)g(to)h
-(remo)m(v)m(e)i(the)e(sp)s(ecial)e(meaning)h(of)h(certain)g(c)m
-(haracters)i(or)d(w)m(ords)h(to)g(the)g(shell.)150 653
-y(Quoting)j(can)g(b)s(e)g(used)f(to)j(disable)c(sp)s(ecial)h(treatmen)m
-(t)j(for)e(sp)s(ecial)f(c)m(haracters,)k(to)e(prev)m(en)m(t)g(reserv)m
-(ed)150 762 y(w)m(ords)i(from)g(b)s(eing)f(recognized)h(as)h(suc)m(h,)f
-(and)g(to)h(prev)m(en)m(t)g(parameter)g(expansion.)275
-897 y(Eac)m(h)22 b(of)g(the)g(shell)e(metac)m(haracters)k(\(see)f
-(Chapter)e(2)i([De\014nitions],)f(page)h(3\))g(has)e(sp)s(ecial)g
-(meaning)150 1006 y(to)40 b(the)g(shell)d(and)i(m)m(ust)g(b)s(e)g
-(quoted)g(if)g(it)g(is)f(to)i(represen)m(t)g(itself.)66
-b(When)39 b(the)h(command)f(history)150 1116 y(expansion)e(facilities)g
-(are)h(b)s(eing)f(used,)j(the)e Fq(history)g(expansion)f
-Ft(c)m(haracter,)42 b(usually)36 b(`)p Fs(!)p Ft(',)k(m)m(ust)f(b)s(e)
-150 1225 y(quoted)27 b(to)g(prev)m(en)m(t)g(history)e(expansion.)38
-b(See)27 b(Section)f(9.1)i([Bash)e(History)g(F)-8 b(acilities],)27
-b(page)g(109,)i(for)150 1335 y(more)i(details)e(concerning)h(history)f
-(expansion.)275 1469 y(There)37 b(are)h(three)f(quoting)g(mec)m
-(hanisms:)55 b(the)38 b Fq(escap)s(e)g(c)m(haracter)p
-Ft(,)j(single)36 b(quotes,)k(and)d(double)150 1579 y(quotes.)150
+TeXDict begin 6 11 bop 150 -116 a Ft(6)2617 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fk(3.1.2)63 b(Quoting)275
+543 y Ft(Quoting)24 b(is)g(used)f(to)h(remo)m(v)m(e)i(the)e(sp)s(ecial)
+g(meaning)g(of)g(certain)h(c)m(haracters)h(or)d(w)m(ords)h(to)g(the)g
+(shell.)150 653 y(Quoting)k(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s
+(ecial)h(treatmen)m(t)h(for)e(sp)s(ecial)h(c)m(haracters,)i(to)e(prev)m
+(en)m(t)g(reserv)m(ed)150 762 y(w)m(ords)i(from)g(b)s(eing)g
+(recognized)h(as)g(suc)m(h,)f(and)g(to)h(prev)m(en)m(t)g(parameter)g
+(expansion.)275 897 y(Eac)m(h)22 b(of)g(the)g(shell)g(metac)m
+(haracters)i(\(see)f(Chapter)e(2)i([De\014nitions],)h(page)f(3\))g(has)
+e(sp)s(ecial)i(meaning)150 1006 y(to)40 b(the)g(shell)f(and)g(m)m(ust)g
+(b)s(e)g(quoted)g(if)h(it)g(is)f(to)h(represen)m(t)g(itself.)68
+b(When)39 b(the)h(command)f(history)150 1116 y(expansion)f(facilities)j
+(are)d(b)s(eing)g(used,)i(the)e Fq(history)h(expansion)f
+Ft(c)m(haracter,)k(usually)c(`)p Fs(!)p Ft(',)i(m)m(ust)f(b)s(e)150
+1225 y(quoted)27 b(to)g(prev)m(en)m(t)g(history)f(expansion.)39
+b(See)27 b(Section)g(9.1)h([Bash)e(History)h(F)-8 b(acilities],)31
+b(page)c(109,)i(for)150 1335 y(more)i(details)g(concerning)g(history)f
+(expansion.)275 1469 y(There)37 b(are)h(three)f(quoting)h(mec)m
+(hanisms:)56 b(the)38 b Fq(escap)s(e)g(c)m(haracter)p
+Ft(,)j(single)d(quotes,)i(and)d(double)150 1579 y(quotes.)150
1803 y Fk(3.1.2.1)63 b(Escap)s(e)41 b(Character)275 2047
-y Ft(A)27 b(non-quoted)g(bac)m(kslash)g(`)p Fs(\\)p Ft(')g(is)f(the)i
+y Ft(A)27 b(non-quoted)g(bac)m(kslash)h(`)p Fs(\\)p Ft(')f(is)g(the)h
(Bash)f(escap)s(e)g(c)m(haracter.)42 b(It)27 b(preserv)m(es)g(the)g
-(literal)f(v)-5 b(alue)27 b(of)150 2157 y(the)g(next)g(c)m(haracter)h
-(that)f(follo)m(ws,)g(with)e(the)i(exception)f(of)h Fs(newline)p
-Ft(.)38 b(If)26 b(a)h Fs(\\newline)d Ft(pair)h(app)s(ears,)150
-2267 y(and)30 b(the)h(bac)m(kslash)f(itself)f(is)h(not)h(quoted,)g(the)
-f Fs(\\newline)f Ft(is)g(treated)j(as)f(a)g(line)e(con)m(tin)m(uation)h
-(\(that)150 2376 y(is,)g(it)g(is)f(remo)m(v)m(ed)i(from)f(the)h(input)d
-(stream)j(and)f(e\013ectiv)m(ely)h(ignored\).)150 2600
-y Fk(3.1.2.2)63 b(Single)42 b(Quotes)275 2844 y Ft(Enclosing)34
-b(c)m(haracters)k(in)c(single)h(quotes)i(\(`)p Fs(')p
-Ft('\))f(preserv)m(es)h(the)f(literal)e(v)-5 b(alue)36
-b(of)g(eac)m(h)h(c)m(haracter)150 2954 y(within)22 b(the)j(quotes.)39
-b(A)25 b(single)f(quote)h(ma)m(y)g(not)g(o)s(ccur)g(b)s(et)m(w)m(een)g
-(single)f(quotes,)i(ev)m(en)g(when)d(preceded)150 3064
+(literal)i(v)-5 b(alue)28 b(of)150 2157 y(the)f(next)g(c)m(haracter)h
+(that)f(follo)m(ws,)i(with)d(the)h(exception)g(of)g Fs(newline)p
+Ft(.)38 b(If)26 b(a)h Fs(\\newline)d Ft(pair)i(app)s(ears,)150
+2267 y(and)k(the)h(bac)m(kslash)g(itself)g(is)g(not)g(quoted,)g(the)f
+Fs(\\newline)f Ft(is)h(treated)i(as)f(a)g(line)g(con)m(tin)m(uation)h
+(\(that)150 2376 y(is,)f(it)g(is)f(remo)m(v)m(ed)h(from)f(the)h(input)e
+(stream)i(and)f(e\013ectiv)m(ely)j(ignored\).)150 2600
+y Fk(3.1.2.2)63 b(Single)42 b(Quotes)275 2844 y Ft(Enclosing)36
+b(c)m(haracters)i(in)d(single)i(quotes)g(\(`)p Fs(')p
+Ft('\))f(preserv)m(es)h(the)f(literal)h(v)-5 b(alue)37
+b(of)f(eac)m(h)h(c)m(haracter)150 2954 y(within)24 b(the)h(quotes.)39
+b(A)25 b(single)h(quote)f(ma)m(y)g(not)g(o)s(ccur)g(b)s(et)m(w)m(een)g
+(single)h(quotes,)g(ev)m(en)g(when)d(preceded)150 3064
y(b)m(y)30 b(a)h(bac)m(kslash.)150 3288 y Fk(3.1.2.3)63
-b(Double)42 b(Quotes)275 3532 y Ft(Enclosing)34 b(c)m(haracters)k(in)d
-(double)g(quotes)i(\(`)p Fs(")p Ft('\))g(preserv)m(es)f(the)g(literal)f
-(v)-5 b(alue)36 b(of)g(all)f(c)m(haracters)150 3641 y(within)30
-b(the)j(quotes,)h(with)d(the)i(exception)g(of)f(`)p Fs($)p
+b(Double)42 b(Quotes)275 3532 y Ft(Enclosing)36 b(c)m(haracters)i(in)e
+(double)g(quotes)h(\(`)p Fs(")p Ft('\))g(preserv)m(es)f(the)g(literal)i
+(v)-5 b(alue)37 b(of)f(all)h(c)m(haracters)150 3641 y(within)32
+b(the)h(quotes,)h(with)e(the)h(exception)h(of)e(`)p Fs($)p
Ft(',)i(`)p Fs(`)p Ft(',)f(and)f(`)p Fs(\\)p Ft('.)48
b(The)32 b(c)m(haracters)i(`)p Fs($)p Ft(')f(and)f(`)p
-Fs(`)p Ft(')g(retain)150 3751 y(their)j(sp)s(ecial)g(meaning)h(within)e
-(double)h(quotes)i(\(see)g(Section)f(3.5)h([Shell)e(Expansions],)h
-(page)h(16\).)150 3861 y(The)30 b(bac)m(kslash)g(retains)f(its)h(sp)s
-(ecial)f(meaning)g(only)h(when)f(follo)m(w)m(ed)h(b)m(y)g(one)h(of)f
-(the)h(follo)m(wing)d(c)m(har-)150 3970 y(acters:)54
+Fs(`)p Ft(')g(retain)150 3751 y(their)k(sp)s(ecial)h(meaning)g(within)f
+(double)g(quotes)h(\(see)g(Section)g(3.5)g([Shell)g(Expansions],)g
+(page)g(16\).)150 3861 y(The)30 b(bac)m(kslash)h(retains)f(its)h(sp)s
+(ecial)g(meaning)f(only)h(when)e(follo)m(w)m(ed)j(b)m(y)e(one)h(of)f
+(the)h(follo)m(wing)g(c)m(har-)150 3970 y(acters:)54
b(`)p Fs($)p Ft(',)39 b(`)p Fs(`)p Ft(',)g(`)p Fs(")p
Ft(',)g(`)p Fs(\\)p Ft(',)f(or)f Fs(newline)p Ft(.)58
-b(Within)35 b(double)g(quotes,)k(bac)m(kslashes)e(that)g(are)g(follo)m
+b(Within)37 b(double)f(quotes,)j(bac)m(kslashes)f(that)f(are)g(follo)m
(w)m(ed)150 4080 y(b)m(y)28 b(one)g(of)g(these)g(c)m(haracters)i(are)e
-(remo)m(v)m(ed.)41 b(Bac)m(kslashes)29 b(preceding)e(c)m(haracters)i
-(without)e(a)h(sp)s(ecial)150 4189 y(meaning)i(are)i(left)e(unmo)s
-(di\014ed.)40 b(A)31 b(double)f(quote)h(ma)m(y)h(b)s(e)e(quoted)i
-(within)c(double)i(quotes)h(b)m(y)g(pre-)150 4299 y(ceding)k(it)g(with)
-f(a)i(bac)m(kslash.)55 b(When)36 b(command)f(history)f(is)h(b)s(eing)f
-(used,)i(the)f(double)f(quote)i(ma)m(y)150 4408 y(not)31
-b(b)s(e)e(used)h(to)h(quote)g(the)g(history)e(expansion)g(c)m
-(haracter.)275 4543 y(The)41 b(sp)s(ecial)f(parameters)h(`)p
-Fs(*)p Ft(')h(and)f(`)p Fs(@)p Ft(')h(ha)m(v)m(e)g(sp)s(ecial)e
-(meaning)h(when)g(in)f(double)g(quotes)i(\(see)150 4653
-y(Section)30 b(3.5.3)i([Shell)d(P)m(arameter)j(Expansion],)d(page)i
+(remo)m(v)m(ed.)41 b(Bac)m(kslashes)30 b(preceding)e(c)m(haracters)h
+(without)f(a)g(sp)s(ecial)150 4189 y(meaning)j(are)h(left)f(unmo)s
+(di\014ed.)41 b(A)31 b(double)g(quote)g(ma)m(y)h(b)s(e)e(quoted)i
+(within)e(double)h(quotes)g(b)m(y)g(pre-)150 4299 y(ceding)36
+b(it)g(with)f(a)h(bac)m(kslash.)56 b(When)36 b(command)f(history)g(is)h
+(b)s(eing)f(used,)h(the)f(double)g(quote)h(ma)m(y)150
+4408 y(not)31 b(b)s(e)e(used)h(to)h(quote)g(the)g(history)f(expansion)g
+(c)m(haracter.)275 4543 y(The)41 b(sp)s(ecial)h(parameters)f(`)p
+Fs(*)p Ft(')h(and)f(`)p Fs(@)p Ft(')h(ha)m(v)m(e)g(sp)s(ecial)g
+(meaning)g(when)f(in)g(double)g(quotes)h(\(see)150 4653
+y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h(Expansion],)e(page)h
(18\).)150 4877 y Fk(3.1.2.4)63 b(ANSI-C)40 b(Quoting)275
5121 y Ft(W)-8 b(ords)33 b(of)h(the)g(form)f Fs($')p
Fj(string)11 b Fs(')31 b Ft(are)j(treated)g(sp)s(ecially)-8
-b(.)49 b(The)33 b(w)m(ord)g(expands)g(to)i Fq(string)p
-Ft(,)e(with)150 5230 y(bac)m(kslash-escap)s(ed)43 b(c)m(haracters)i
-(replaced)e(as)h(sp)s(eci\014ed)e(b)m(y)h(the)g(ANSI)g(C)g(standard.)79
-b(Bac)m(kslash)150 5340 y(escap)s(e)31 b(sequences,)g(if)e(presen)m(t,)
-i(are)g(deco)s(ded)f(as)g(follo)m(ws:)p eop
+b(.)52 b(The)33 b(w)m(ord)g(expands)g(to)i Fq(string)p
+Ft(,)f(with)150 5230 y(bac)m(kslash-escap)s(ed)44 b(c)m(haracters)h
+(replaced)f(as)g(sp)s(eci\014ed)f(b)m(y)g(the)g(ANSI)g(C)g(standard.)79
+b(Bac)m(kslash)150 5340 y(escap)s(e)31 b(sequences,)g(if)f(presen)m(t,)
+h(are)g(deco)s(ded)f(as)g(follo)m(ws:)p eop end
%%Page: 7 13
-7 12 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2292 b(7)150 299 y Fs(\\a)384
-b Ft(alert)30 b(\(b)s(ell\))150 487 y Fs(\\b)384 b Ft(bac)m(kspace)150
-675 y Fs(\\e)g Ft(an)30 b(escap)s(e)h(c)m(haracter)h(\(not)f(ANSI)f
-(C\))150 862 y Fs(\\f)384 b Ft(form)30 b(feed)150 1050
-y Fs(\\n)384 b Ft(newline)150 1238 y Fs(\\r)g Ft(carriage)31
-b(return)150 1426 y Fs(\\t)384 b Ft(horizon)m(tal)30
-b(tab)150 1614 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)150
-1802 y Fs(\\\\)384 b Ft(bac)m(kslash)150 1989 y Fs(\\')g
-Ft(single)29 b(quote)150 2177 y Fs(\\)p Fj(nnn)288 b
-Ft(the)31 b(eigh)m(t-bit)f(c)m(haracter)i(whose)e(v)-5
-b(alue)30 b(is)f(the)i(o)s(ctal)f(v)-5 b(alue)30 b Fq(nnn)f
+TeXDict begin 7 12 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(7)150 299
+y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))150 487 y Fs(\\b)384
+b Ft(bac)m(kspace)150 675 y Fs(\\e)g Ft(an)30 b(escap)s(e)h(c)m
+(haracter)h(\(not)f(ANSI)f(C\))150 862 y Fs(\\f)384 b
+Ft(form)30 b(feed)150 1050 y Fs(\\n)384 b Ft(newline)150
+1238 y Fs(\\r)g Ft(carriage)32 b(return)150 1426 y Fs(\\t)384
+b Ft(horizon)m(tal)32 b(tab)150 1614 y Fs(\\v)384 b Ft(v)m(ertical)32
+b(tab)150 1802 y Fs(\\\\)384 b Ft(bac)m(kslash)150 1989
+y Fs(\\')g Ft(single)31 b(quote)150 2177 y Fs(\\)p Fj(nnn)288
+b Ft(the)31 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5
+b(alue)31 b(is)f(the)h(o)s(ctal)g(v)-5 b(alue)31 b Fq(nnn)e
Ft(\(one)i(to)g(three)g(digits\))150 2365 y Fs(\\x)p
-Fj(HH)288 b Ft(the)36 b(eigh)m(t-bit)g(c)m(haracter)h(whose)f(v)-5
-b(alue)35 b(is)g(the)h(hexadecimal)f(v)-5 b(alue)35 b
+Fj(HH)288 b Ft(the)36 b(eigh)m(t-bit)i(c)m(haracter)f(whose)f(v)-5
+b(alue)36 b(is)g(the)g(hexadecimal)h(v)-5 b(alue)36 b
Fq(HH)46 b Ft(\(one)37 b(or)f(t)m(w)m(o)630 2475 y(hex)30
b(digits\))150 2662 y Fs(\\c)p Fj(x)336 b Ft(a)31 b(con)m(trol-)p
-Fq(x)37 b Ft(c)m(haracter)150 2865 y(The)30 b(expanded)f(result)h(is)f
-(single-quoted,)h(as)h(if)e(the)h(dollar)f(sign)h(had)f(not)i(b)s(een)f
+Fq(x)38 b Ft(c)m(haracter)150 2865 y(The)30 b(expanded)f(result)i(is)f
+(single-quoted,)i(as)f(if)f(the)g(dollar)h(sign)g(had)e(not)i(b)s(een)f
(presen)m(t.)150 3146 y Fk(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41
-b(T)-10 b(ranslation)275 3418 y Ft(A)30 b(double-quoted)g(string)f
-(preceded)h(b)m(y)h(a)g(dollar)e(sign)g(\(`)p Fs($)p
-Ft('\))j(will)27 b(cause)32 b(the)e(string)g(to)h(b)s(e)f(trans-)150
-3528 y(lated)i(according)g(to)h(the)f(curren)m(t)g(lo)s(cale.)45
-b(If)32 b(the)g(curren)m(t)g(lo)s(cale)g(is)f Fs(C)h
-Ft(or)g Fs(POSIX)p Ft(,)f(the)h(dollar)f(sign)g(is)150
-3637 y(ignored.)40 b(If)30 b(the)g(string)g(is)f(translated)h(and)g
-(replaced,)g(the)h(replacemen)m(t)f(is)g(double-quoted.)275
-3800 y(Some)20 b(systems)h(use)f(the)h(message)h(catalog)g(selected)f
-(b)m(y)g(the)g Fs(LC_MESSAGES)c Ft(shell)i(v)-5 b(ariable.)37
-b(Others)150 3910 y(create)i(the)e(name)g(of)g(the)g(message)h(catalog)
-h(from)e(the)g(v)-5 b(alue)36 b(of)h(the)h Fs(TEXTDOMAIN)c
-Ft(shell)h(v)-5 b(ariable,)150 4019 y(p)s(ossibly)29
-b(adding)h(a)h(su\016x)g(of)h(`)p Fs(.mo)p Ft('.)43 b(If)31
-b(y)m(ou)h(use)f(the)h Fs(TEXTDOMAIN)c Ft(v)-5 b(ariable,)31
-b(y)m(ou)h(ma)m(y)g(need)f(to)h(set)150 4129 y(the)22
-b Fs(TEXTDOMAINDIR)d Ft(v)-5 b(ariable)21 b(to)i(the)f(lo)s(cation)g
-(of)g(the)h(message)g(catalog)h(\014les.)37 b(Still)20
-b(others)i(use)g(b)s(oth)150 4238 y(v)-5 b(ariables)29
-b(in)g(this)g(fashion:)40 b Fs(TEXTDOMAINDIR)p Ft(/)p
+b(T)-10 b(ranslation)275 3418 y Ft(A)30 b(double-quoted)h(string)f
+(preceded)g(b)m(y)h(a)g(dollar)g(sign)f(\(`)p Fs($)p
+Ft('\))i(will)e(cause)i(the)e(string)h(to)g(b)s(e)f(trans-)150
+3528 y(lated)j(according)g(to)g(the)f(curren)m(t)g(lo)s(cale.)47
+b(If)32 b(the)g(curren)m(t)g(lo)s(cale)i(is)e Fs(C)g
+Ft(or)g Fs(POSIX)p Ft(,)f(the)h(dollar)h(sign)f(is)150
+3637 y(ignored.)41 b(If)30 b(the)g(string)h(is)f(translated)h(and)f
+(replaced,)h(the)g(replacemen)m(t)g(is)g(double-quoted.)275
+3800 y(Some)20 b(systems)h(use)f(the)h(message)h(catalog)h(selected)f
+(b)m(y)f(the)g Fs(LC_MESSAGES)c Ft(shell)k(v)-5 b(ariable.)39
+b(Others)150 3910 y(create)g(the)e(name)g(of)g(the)g(message)h(catalog)
+i(from)d(the)g(v)-5 b(alue)37 b(of)g(the)h Fs(TEXTDOMAIN)c
+Ft(shell)j(v)-5 b(ariable,)150 4019 y(p)s(ossibly)31
+b(adding)g(a)g(su\016x)g(of)h(`)p Fs(.mo)p Ft('.)43 b(If)31
+b(y)m(ou)h(use)f(the)h Fs(TEXTDOMAIN)c Ft(v)-5 b(ariable,)33
+b(y)m(ou)f(ma)m(y)g(need)f(to)h(set)150 4129 y(the)22
+b Fs(TEXTDOMAINDIR)d Ft(v)-5 b(ariable)23 b(to)g(the)f(lo)s(cation)i
+(of)e(the)h(message)g(catalog)i(\014les.)38 b(Still)23
+b(others)f(use)g(b)s(oth)150 4238 y(v)-5 b(ariables)31
+b(in)f(this)g(fashion:)41 b Fs(TEXTDOMAINDIR)p Ft(/)p
Fs(LC_MESSAGES)p Ft(/LC)p 2528 4238 28 4 v 34 w(MESSA)m(GES/)p
Fs(TEXTDOMAIN)p Ft(.mo.)150 4520 y Fk(3.1.3)63 b(Commen)m(ts)275
-4792 y Ft(In)34 b(a)j(non-in)m(teractiv)m(e)f(shell,)f(or)h(an)f(in)m
-(teractiv)m(e)i(shell)d(in)g(whic)m(h)h(the)g Fs(interactive_comments)
-150 4902 y Ft(option)i(to)h(the)f Fs(shopt)f Ft(builtin)e(is)i(enabled)
-g(\(see)i(Section)g(4.2)g([Bash)f(Builtins],)g(page)h(39\),)j(a)c(w)m
-(ord)150 5011 y(b)s(eginning)24 b(with)h(`)p Fs(#)p Ft(')h(causes)h
-(that)f(w)m(ord)g(and)g(all)f(remaining)g(c)m(haracters)i(on)f(that)h
-(line)e(to)i(b)s(e)f(ignored.)150 5121 y(An)43 b(in)m(teractiv)m(e)h
-(shell)e(without)g(the)h Fs(interactive_comments)38 b
-Ft(option)43 b(enabled)f(do)s(es)h(not)g(allo)m(w)150
+4792 y Ft(In)34 b(a)j(non-in)m(teractiv)m(e)h(shell,)f(or)f(an)f(in)m
+(teractiv)m(e)k(shell)d(in)f(whic)m(h)h(the)f Fs(interactive_comments)
+150 4902 y Ft(option)j(to)g(the)f Fs(shopt)f Ft(builtin)h(is)g(enabled)
+g(\(see)h(Section)h(4.2)f([Bash)f(Builtins],)j(page)e(39\),)j(a)c(w)m
+(ord)150 5011 y(b)s(eginning)26 b(with)g(`)p Fs(#)p Ft(')g(causes)h
+(that)f(w)m(ord)g(and)g(all)h(remaining)g(c)m(haracters)g(on)f(that)h
+(line)g(to)g(b)s(e)f(ignored.)150 5121 y(An)43 b(in)m(teractiv)m(e)j
+(shell)e(without)f(the)g Fs(interactive_comments)38 b
+Ft(option)44 b(enabled)f(do)s(es)g(not)g(allo)m(w)150
5230 y(commen)m(ts.)56 b(The)34 b Fs(interactive_comments)c
-Ft(option)k(is)g(on)h(b)m(y)g(default)f(in)g(in)m(teractiv)m(e)i
-(shells.)53 b(See)150 5340 y(Section)29 b(6.3)g([In)m(teractiv)m(e)i
-(Shells],)c(page)j(67,)g(for)e(a)i(description)c(of)j(what)g(mak)m(es)h
-(a)f(shell)e(in)m(teractiv)m(e.)p eop
+Ft(option)35 b(is)g(on)g(b)m(y)g(default)g(in)g(in)m(teractiv)m(e)j
+(shells.)55 b(See)150 5340 y(Section)30 b(6.3)f([In)m(teractiv)m(e)j
+(Shells],)d(page)h(67,)g(for)e(a)i(description)e(of)h(what)g(mak)m(es)h
+(a)f(shell)g(in)m(teractiv)m(e.)p eop end
%%Page: 8 14
-8 13 bop 150 -116 a Ft(8)2617 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fr(3.2)68 b(Shell)45 b(Commands)275 553 y Ft(A)32
-b(simple)e(shell)g(command)i(suc)m(h)g(as)h Fs(echo)c(a)h(b)g(c)i
-Ft(consists)f(of)i(the)f(command)g(itself)f(follo)m(w)m(ed)h(b)m(y)150
-663 y(argumen)m(ts,)f(separated)g(b)m(y)f(spaces.)275
-808 y(More)h(complex)g(shell)e(commands)i(are)g(comp)s(osed)g(of)g
-(simple)e(commands)i(arranged)g(together)h(in)150 917
-y(a)f(v)-5 b(ariet)m(y)31 b(of)g(w)m(a)m(ys:)41 b(in)30
-b(a)h(pip)s(eline)c(in)i(whic)m(h)g(the)i(output)f(of)h(one)f(command)h
-(b)s(ecomes)f(the)h(input)e(of)150 1027 y(a)i(second,)f(in)g(a)g(lo)s
-(op)g(or)g(conditional)f(construct,)i(or)f(in)f(some)i(other)g
-(grouping.)150 1272 y Fk(3.2.1)63 b(Simple)40 b(Commands)275
-1526 y Ft(A)26 b(simple)f(command)i(is)e(the)i(kind)e(of)i(command)g
+TeXDict begin 8 13 bop 150 -116 a Ft(8)2617 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(3.2)68 b(Shell)45
+b(Commands)275 553 y Ft(A)32 b(simple)g(shell)g(command)g(suc)m(h)g(as)
+h Fs(echo)c(a)h(b)g(c)i Ft(consists)g(of)h(the)f(command)g(itself)h
+(follo)m(w)m(ed)h(b)m(y)150 663 y(argumen)m(ts,)d(separated)g(b)m(y)f
+(spaces.)275 808 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
+917 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 1027 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 1272 y Fk(3.2.1)63 b(Simple)41 b(Commands)275
+1526 y Ft(A)26 b(simple)h(command)g(is)f(the)h(kind)f(of)h(command)g
(encoun)m(tered)g(most)g(often.)40 b(It's)27 b(just)f(a)i(sequence)150
1636 y(of)f(w)m(ords)f(separated)h(b)m(y)g Fs(blank)p
-Ft(s,)f(terminated)g(b)m(y)h(one)g(of)g(the)g(shell's)e(con)m(trol)i
-(op)s(erators)g(\(see)h(Chap-)150 1745 y(ter)34 b(2)g([De\014nitions],)
-g(page)h(3\).)51 b(The)34 b(\014rst)f(w)m(ord)g(generally)g(sp)s
-(eci\014es)f(a)j(command)e(to)i(b)s(e)e(executed,)150
-1855 y(with)c(the)i(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)f(that)i
+Ft(s,)f(terminated)h(b)m(y)g(one)g(of)g(the)g(shell's)g(con)m(trol)h
+(op)s(erators)f(\(see)h(Chap-)150 1745 y(ter)34 b(2)g([De\014nitions],)
+i(page)f(3\).)51 b(The)34 b(\014rst)f(w)m(ord)g(generally)i(sp)s
+(eci\014es)e(a)i(command)e(to)i(b)s(e)e(executed,)150
+1855 y(with)d(the)h(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)g(that)h
(command's)f(argumen)m(ts.)275 2000 y(The)h(return)h(status)g(\(see)i
-(Section)e(3.7.5)i([Exit)e(Status],)i(page)f(30\))g(of)g(a)g(simple)d
-(command)i(is)g(its)150 2109 y(exit)37 b(status)g(as)g(pro)m(vided)e(b)
-m(y)i(the)g Fl(posix)f Ft(1003.1)j Fs(waitpid)c Ft(function,)i(or)g
-(128)p Fs(+)p Fq(n)g Ft(if)f(the)h(command)150 2219 y(w)m(as)31
-b(terminated)f(b)m(y)g(signal)f Fq(n)p Ft(.)150 2463
+(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(30\))g(of)g(a)g(simple)f
+(command)g(is)h(its)150 2109 y(exit)38 b(status)f(as)g(pro)m(vided)f(b)
+m(y)h(the)g Fl(posix)f Ft(1003.1)j Fs(waitpid)c Ft(function,)j(or)f
+(128)p Fs(+)p Fq(n)g Ft(if)g(the)g(command)150 2219 y(w)m(as)31
+b(terminated)g(b)m(y)f(signal)h Fq(n)p Ft(.)150 2463
y Fk(3.2.2)63 b(Pip)s(elines)275 2718 y Ft(A)30 b Fs(pipeline)e
-Ft(is)i(a)g(sequence)h(of)g(simple)d(commands)i(separated)h(b)m(y)f(`)p
-Fs(|)p Ft('.)275 2863 y(The)f(format)i(for)f(a)h(pip)s(eline)c(is)390
+Ft(is)j(a)f(sequence)h(of)g(simple)f(commands)g(separated)h(b)m(y)f(`)p
+Fs(|)p Ft('.)275 2863 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390
3007 y Fs([time)46 b([-p]])h([!])g Fj(command1)56 b Fs([|)47
b Fj(command2)56 b Fs(...)o(])150 3152 y Ft(The)36 b(output)h(of)g(eac)
-m(h)h(command)e(in)g(the)h(pip)s(eline)c(is)j(connected)i(via)e(a)h
-(pip)s(e)e(to)j(the)f(input)e(of)i(the)150 3262 y(next)31
-b(command.)40 b(That)30 b(is,)g(eac)m(h)i(command)e(reads)g(the)g
-(previous)f(command's)h(output.)275 3407 y(The)36 b(reserv)m(ed)g(w)m
-(ord)g Fs(time)g Ft(causes)h(timing)e(statistics)h(to)h(b)s(e)f(prin)m
-(ted)f(for)h(the)h(pip)s(eline)c(once)k(it)150 3516 y(\014nishes.)50
-b(The)34 b(statistics)g(curren)m(tly)f(consist)h(of)g(elapsed)g(\(w)m
-(all-clo)s(c)m(k\))g(time)g(and)g(user)f(and)h(system)150
-3626 y(time)h(consumed)g(b)m(y)g(the)h(command's)f(execution.)56
-b(The)35 b(`)p Fs(-p)p Ft(')h(option)e(c)m(hanges)j(the)f(output)f
-(format)150 3735 y(to)i(that)f(sp)s(eci\014ed)e(b)m(y)i
+m(h)h(command)e(in)h(the)g(pip)s(eline)f(is)h(connected)h(via)f(a)g
+(pip)s(e)f(to)i(the)f(input)f(of)h(the)150 3262 y(next)31
+b(command.)40 b(That)30 b(is,)h(eac)m(h)h(command)e(reads)g(the)g
+(previous)g(command's)g(output.)275 3407 y(The)36 b(reserv)m(ed)g(w)m
+(ord)g Fs(time)g Ft(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 3516 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
+3626 y(time)i(consumed)f(b)m(y)g(the)h(command's)f(execution.)57
+b(The)35 b(`)p Fs(-p)p Ft(')h(option)f(c)m(hanges)i(the)f(output)f
+(format)150 3735 y(to)i(that)f(sp)s(eci\014ed)f(b)m(y)h
Fl(posix)p Ft(.)57 b(The)35 b Fs(TIMEFORMAT)e Ft(v)-5
-b(ariable)35 b(ma)m(y)i(b)s(e)e(set)h(to)h(a)f(format)g(string)f(that)
-150 3845 y(sp)s(eci\014es)28 b(ho)m(w)h(the)g(timing)e(information)h
-(should)e(b)s(e)j(displa)m(y)m(ed.)39 b(See)29 b(Section)g(5.2)h([Bash)
-f(V)-8 b(ariables],)150 3955 y(page)29 b(55,)h(for)e(a)g(description)f
-(of)h(the)g(a)m(v)-5 b(ailable)28 b(formats.)40 b(The)28
+b(ariable)37 b(ma)m(y)g(b)s(e)e(set)h(to)h(a)f(format)g(string)g(that)
+150 3845 y(sp)s(eci\014es)29 b(ho)m(w)g(the)g(timing)g(information)h
+(should)d(b)s(e)i(displa)m(y)m(ed.)41 b(See)29 b(Section)h(5.2)g([Bash)
+f(V)-8 b(ariables],)150 3955 y(page)29 b(55,)h(for)e(a)g(description)h
+(of)f(the)g(a)m(v)-5 b(ailable)31 b(formats.)40 b(The)28
b(use)g(of)g Fs(time)f Ft(as)i(a)f(reserv)m(ed)h(w)m(ord)f(p)s(er-)150
-4064 y(mits)f(the)h(timing)e(of)i(shell)e(builtins,)f(shell)h
-(functions,)h(and)g(pip)s(elines.)37 b(An)27 b(external)h
-Fs(time)e Ft(command)150 4174 y(cannot)31 b(time)f(these)h(easily)-8
-b(.)275 4318 y(If)24 b(the)h(pip)s(eline)d(is)i(not)h(executed)h(async)
-m(hronously)e(\(see)i(Section)f(3.2.3)i([Lists],)f(page)f(9\),)i(the)f
-(shell)150 4428 y(w)m(aits)k(for)g(all)g(commands)g(in)f(the)h(pip)s
-(eline)d(to)k(complete.)275 4573 y(Eac)m(h)25 b(command)g(in)f(a)h(pip)
-s(eline)d(is)i(executed)i(in)e(its)g(o)m(wn)i(subshell)c(\(see)k
-(Section)f(3.7.3)i([Command)150 4682 y(Execution)35 b(En)m(vironmen)m
-(t],)i(page)f(29\).)58 b(The)36 b(exit)f(status)h(of)g(a)g(pip)s(eline)
-d(is)h(the)i(exit)g(status)g(of)g(the)150 4792 y(last)31
-b(command)g(in)f(the)h(pip)s(eline,)d(unless)i(the)h
-Fs(pipefail)e Ft(option)i(is)f(enabled)g(\(see)i(Section)f(4.3)h([The)
-150 4902 y(Set)i(Builtin],)g(page)h(50\).)53 b(If)34
-b Fs(pipefail)e Ft(is)h(enabled,)h(the)h(pip)s(eline's)c(return)i
-(status)h(is)g(the)g(v)-5 b(alue)34 b(of)150 5011 y(the)e(last)g
-(\(righ)m(tmost\))h(command)f(to)h(exit)f(with)e(a)j(non-zero)f
-(status,)h(or)f(zero)h(if)e(all)g(commands)h(exit)150
-5121 y(successfully)-8 b(.)65 b(If)38 b(the)h(reserv)m(ed)g(w)m(ord)g
-(`)p Fs(!)p Ft(')g(precedes)g(the)g(pip)s(eline,)e(the)j(exit)e(status)
-h(is)f(the)h(logical)150 5230 y(negation)g(of)g(the)f(exit)h(status)g
-(as)f(describ)s(ed)f(ab)s(o)m(v)m(e.)66 b(The)38 b(shell)f(w)m(aits)i
-(for)f(all)f(commands)i(in)e(the)150 5340 y(pip)s(eline)27
-b(to)k(terminate)f(b)s(efore)g(returning)f(a)i(v)-5 b(alue.)p
-eop
+4064 y(mits)g(the)g(timing)g(of)g(shell)g(builtins,)g(shell)g
+(functions,)g(and)f(pip)s(elines.)40 b(An)27 b(external)i
+Fs(time)d Ft(command)150 4174 y(cannot)31 b(time)g(these)g(easily)-8
+b(.)275 4318 y(If)24 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)
+m(hronously)f(\(see)h(Section)g(3.2.3)h([Lists],)g(page)e(9\),)i(the)f
+(shell)150 4428 y(w)m(aits)31 b(for)f(all)i(commands)e(in)g(the)g(pip)s
+(eline)g(to)h(complete.)275 4573 y(Eac)m(h)25 b(command)g(in)g(a)g(pip)
+s(eline)g(is)g(executed)h(in)f(its)g(o)m(wn)h(subshell)e(\(see)i
+(Section)g(3.7.3)h([Command)150 4682 y(Execution)36 b(En)m(vironmen)m
+(t],)i(page)e(29\).)58 b(The)36 b(exit)g(status)g(of)g(a)g(pip)s(eline)
+g(is)f(the)h(exit)h(status)f(of)g(the)150 4792 y(last)c(command)f(in)g
+(the)g(pip)s(eline,)g(unless)g(the)g Fs(pipefail)e Ft(option)j(is)f
+(enabled)g(\(see)h(Section)g(4.3)g([The)150 4902 y(Set)i(Builtin],)j
+(page)e(50\).)53 b(If)34 b Fs(pipefail)e Ft(is)i(enabled,)h(the)g(pip)s
+(eline's)f(return)f(status)h(is)h(the)f(v)-5 b(alue)35
+b(of)150 5011 y(the)d(last)h(\(righ)m(tmost\))h(command)e(to)h(exit)g
+(with)e(a)i(non-zero)f(status,)h(or)f(zero)h(if)f(all)h(commands)f
+(exit)150 5121 y(successfully)-8 b(.)67 b(If)38 b(the)h(reserv)m(ed)g
+(w)m(ord)g(`)p Fs(!)p Ft(')g(precedes)g(the)g(pip)s(eline,)h(the)g
+(exit)f(status)g(is)g(the)g(logical)150 5230 y(negation)h(of)f(the)f
+(exit)i(status)f(as)f(describ)s(ed)g(ab)s(o)m(v)m(e.)66
+b(The)38 b(shell)h(w)m(aits)h(for)e(all)h(commands)g(in)f(the)150
+5340 y(pip)s(eline)30 b(to)h(terminate)g(b)s(efore)f(returning)g(a)h(v)
+-5 b(alue.)p eop end
%%Page: 9 15
-9 14 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2292 b(9)150 299 y Fk(3.2.3)63
-b(Lists)41 b(of)g(Commands)275 547 y Ft(A)29 b Fs(list)f
-Ft(is)h(a)g(sequence)h(of)g(one)f(or)h(more)f(pip)s(elines)d(separated)
-k(b)m(y)f(one)h(of)f(the)h(op)s(erators)g(`)p Fs(;)p
-Ft(',)g(`)p Fs(&)p Ft(',)150 657 y(`)p Fs(&&)p Ft(',)h(or)f(`)p
-Fs(||)p Ft(',)g(and)g(optionally)f(terminated)h(b)m(y)g(one)h(of)f(`)p
-Fs(;)p Ft(',)h(`)p Fs(&)p Ft(',)g(or)f(a)h Fs(newline)p
-Ft(.)275 795 y(Of)23 b(these)h(list)e(op)s(erators,)k(`)p
-Fs(&&)p Ft(')d(and)g(`)p Fs(||)p Ft(')h(ha)m(v)m(e)h(equal)e
-(precedence,)j(follo)m(w)m(ed)d(b)m(y)h(`)p Fs(;)p Ft(')g(and)f(`)p
-Fs(&)p Ft(',)i(whic)m(h)150 905 y(ha)m(v)m(e)32 b(equal)d(precedence.)
-275 1044 y(A)g(sequence)h(of)g(one)g(or)g(more)g(newlines)d(ma)m(y)j
-(app)s(ear)f(in)g(a)h Fs(list)e Ft(to)j(delimit)c(commands,)j(equiv-)
-150 1153 y(alen)m(t)h(to)g(a)g(semicolon.)275 1292 y(If)c(a)h(command)f
-(is)g(terminated)g(b)m(y)h(the)g(con)m(trol)g(op)s(erator)g(`)p
-Fs(&)p Ft(',)h(the)e(shell)f(executes)j(the)f(command)150
-1401 y(async)m(hronously)f(in)h(a)h(subshell.)37 b(This)27
-b(is)h(kno)m(wn)g(as)h(executing)g(the)g(command)g(in)e(the)i
-Fq(bac)m(kground)p Ft(.)150 1511 y(The)f(shell)f(do)s(es)h(not)h(w)m
-(ait)f(for)g(the)h(command)f(to)i(\014nish,)c(and)i(the)h(return)e
-(status)i(is)f(0)h(\(true\).)40 b(When)150 1621 y(job)g(con)m(trol)g
-(is)g(not)g(activ)m(e)h(\(see)g(Chapter)f(7)h([Job)f(Con)m(trol],)i
-(page)f(79\),)j(the)d(standard)e(input)f(for)150 1730
-y(async)m(hronous)43 b(commands,)k(in)c(the)g(absence)i(of)f(an)m(y)g
-(explicit)e(redirections,)k(is)c(redirected)h(from)150
+TeXDict begin 9 14 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(9)150 299
+y Fk(3.2.3)63 b(Lists)41 b(of)h(Commands)275 547 y Ft(A)29
+b Fs(list)f Ft(is)i(a)f(sequence)h(of)g(one)f(or)h(more)f(pip)s(elines)
+g(separated)h(b)m(y)f(one)h(of)f(the)h(op)s(erators)g(`)p
+Fs(;)p Ft(',)g(`)p Fs(&)p Ft(',)150 657 y(`)p Fs(&&)p
+Ft(',)h(or)f(`)p Fs(||)p Ft(',)g(and)g(optionally)i(terminated)f(b)m(y)
+f(one)h(of)f(`)p Fs(;)p Ft(',)h(`)p Fs(&)p Ft(',)g(or)f(a)h
+Fs(newline)p Ft(.)275 795 y(Of)23 b(these)h(list)g(op)s(erators,)i(`)p
+Fs(&&)p Ft(')d(and)g(`)p Fs(||)p Ft(')h(ha)m(v)m(e)h(equal)f
+(precedence,)i(follo)m(w)m(ed)f(b)m(y)f(`)p Fs(;)p Ft(')g(and)f(`)p
+Fs(&)p Ft(',)i(whic)m(h)150 905 y(ha)m(v)m(e)32 b(equal)e(precedence.)
+275 1044 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 Fs(list)e Ft(to)j(delimit)f(commands,)g(equiv-)
+150 1153 y(alen)m(t)i(to)f(a)g(semicolon.)275 1292 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
+Fs(&)p Ft(',)h(the)e(shell)h(executes)h(the)f(command)150
+1401 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
+Fq(bac)m(kground)p Ft(.)150 1511 y(The)f(shell)h(do)s(es)f(not)h(w)m
+(ait)g(for)f(the)h(command)f(to)i(\014nish,)d(and)h(the)h(return)e
+(status)i(is)g(0)g(\(true\).)40 b(When)150 1621 y(job)g(con)m(trol)h
+(is)g(not)f(activ)m(e)i(\(see)f(Chapter)f(7)h([Job)f(Con)m(trol],)j
+(page)e(79\),)j(the)d(standard)e(input)g(for)150 1730
+y(async)m(hronous)k(commands,)k(in)d(the)f(absence)i(of)f(an)m(y)g
+(explicit)h(redirections,)j(is)43 b(redirected)h(from)150
1840 y Fs(/dev/null)p Ft(.)275 1979 y(Commands)19 b(separated)j(b)m(y)f
-(a)g(`)p Fs(;)p Ft(')g(are)h(executed)g(sequen)m(tially;)h(the)e(shell)
-e(w)m(aits)i(for)g(eac)m(h)h(command)150 2088 y(to)31
-b(terminate)g(in)e(turn.)39 b(The)30 b(return)f(status)i(is)e(the)i
-(exit)f(status)h(of)g(the)f(last)g(command)g(executed.)275
-2227 y(The)f(con)m(trol)i(op)s(erators)f(`)p Fs(&&)p
-Ft(')g(and)g(`)p Fs(||)p Ft(')g(denote)h Fl(and)e Ft(lists)g(and)h
-Fl(or)f Ft(lists,)g(resp)s(ectiv)m(ely)-8 b(.)41 b(An)30
-b Fl(and)150 2336 y Ft(list)f(has)h(the)h(form)390 2475
+(a)g(`)p Fs(;)p Ft(')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 2088
+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
+2227 y(The)f(con)m(trol)j(op)s(erators)e(`)p Fs(&&)p
+Ft(')g(and)g(`)p Fs(||)p Ft(')g(denote)h Fl(and)e Ft(lists)i(and)f
+Fl(or)f Ft(lists,)i(resp)s(ectiv)m(ely)-8 b(.)43 b(An)30
+b Fl(and)150 2336 y Ft(list)h(has)f(the)h(form)390 2475
y Fj(command1)56 b Fs(&&)47 b Fj(command2)150 2614 y
-Fq(command2)38 b Ft(is)29 b(executed)j(if,)d(and)h(only)f(if,)h
-Fq(command1)38 b Ft(returns)29 b(an)h(exit)g(status)h(of)g(zero.)275
-2752 y(An)f Fl(or)f Ft(list)g(has)h(the)h(form)390 2891
+Fq(command2)38 b Ft(is)30 b(executed)i(if,)e(and)g(only)g(if,)h
+Fq(command1)38 b Ft(returns)29 b(an)h(exit)h(status)g(of)g(zero.)275
+2752 y(An)f Fl(or)f Ft(list)i(has)f(the)h(form)390 2891
y Fj(command1)56 b Fs(||)47 b Fj(command2)150 3030 y
-Fq(command2)38 b Ft(is)29 b(executed)j(if,)d(and)h(only)f(if,)h
-Fq(command1)38 b Ft(returns)29 b(a)i(non-zero)g(exit)f(status.)275
-3168 y(The)i(return)g(status)i(of)f Fl(and)f Ft(and)h
-Fl(or)f Ft(lists)g(is)g(the)h(exit)g(status)h(of)f(the)g(last)g
-(command)g(executed)150 3278 y(in)c(the)i(list.)150 3510
-y Fk(3.2.4)63 b(Comp)s(ound)41 b(Commands)275 3759 y
-Ft(Comp)s(ound)f(commands)i(are)h(the)g(shell)e(programming)g
+Fq(command2)38 b Ft(is)30 b(executed)i(if,)e(and)g(only)g(if,)h
+Fq(command1)38 b Ft(returns)29 b(a)i(non-zero)g(exit)g(status.)275
+3168 y(The)h(return)g(status)i(of)f Fl(and)f Ft(and)h
+Fl(or)f Ft(lists)i(is)f(the)g(exit)h(status)g(of)f(the)g(last)h
+(command)f(executed)150 3278 y(in)d(the)h(list.)150 3510
+y Fk(3.2.4)63 b(Comp)s(ound)42 b(Commands)275 3759 y
+Ft(Comp)s(ound)e(commands)i(are)h(the)g(shell)g(programming)f
(constructs.)77 b(Eac)m(h)44 b(construct)e(b)s(egins)150
-3868 y(with)c(a)h(reserv)m(ed)g(w)m(ord)f(or)h(con)m(trol)g(op)s
-(erator)g(and)g(is)f(terminated)g(b)m(y)h(a)g(corresp)s(onding)e
-(reserv)m(ed)150 3978 y(w)m(ord)42 b(or)h(op)s(erator.)77
-b(An)m(y)42 b(redirections)f(\(see)j(Section)e(3.6)i([Redirections],)h
-(page)e(24\))g(asso)s(ciated)150 4087 y(with)25 b(a)h(comp)s(ound)f
-(command)h(apply)f(to)i(all)e(commands)h(within)d(that)k(comp)s(ound)e
-(command)h(unless)150 4197 y(explicitly)i(o)m(v)m(erridden.)275
-4336 y(Bash)45 b(pro)m(vides)g(lo)s(oping)f(constructs,)49
-b(conditional)44 b(commands,)50 b(and)44 b(mec)m(hanisms)h(to)h(group)
-150 4445 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150
+3868 y(with)d(a)g(reserv)m(ed)g(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 3978 y(w)m(ord)k(or)h(op)s(erator.)77
+b(An)m(y)42 b(redirections)h(\(see)h(Section)f(3.6)h([Redirections],)j
+(page)c(24\))g(asso)s(ciated)150 4087 y(with)26 b(a)g(comp)s(ound)f
+(command)h(apply)g(to)h(all)g(commands)f(within)f(that)i(comp)s(ound)e
+(command)h(unless)150 4197 y(explicitly)32 b(o)m(v)m(erridden.)275
+4336 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
+4445 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150
4678 y Fk(3.2.4.1)63 b(Lo)s(oping)43 b(Constructs)275
-4926 y Ft(Bash)30 b(supp)s(orts)f(the)h(follo)m(wing)f(lo)s(oping)g
-(constructs.)275 5065 y(Note)35 b(that)f(wherev)m(er)g(a)g(`)p
-Fs(;)p Ft(')g(app)s(ears)f(in)g(the)h(description)e(of)i(a)g(command's)
-g(syn)m(tax,)i(it)d(ma)m(y)i(b)s(e)150 5174 y(replaced)30
-b(with)f(one)i(or)f(more)g(newlines.)150 5340 y Fs(until)240
-b Ft(The)30 b(syn)m(tax)h(of)f(the)h Fs(until)e Ft(command)h(is:)p
-eop
+4926 y Ft(Bash)30 b(supp)s(orts)f(the)h(follo)m(wing)i(lo)s(oping)f
+(constructs.)275 5065 y(Note)k(that)f(wherev)m(er)g(a)g(`)p
+Fs(;)p Ft(')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 5174 y(replaced)c(with)f(one)h
+(or)f(more)g(newlines.)150 5340 y Fs(until)240 b Ft(The)30
+b(syn)m(tax)h(of)f(the)h Fs(until)e Ft(command)h(is:)p
+eop end
%%Page: 10 16
-10 15 bop 150 -116 a Ft(10)2572 b(Bash)31 b(Reference)g(Man)m(ual)870
-299 y Fs(until)46 b Fj(test-commands)11 b Fs(;)44 b(do)j
-Fj(consequent-commands)11 b Fs(;)42 b(done)630 434 y
-Ft(Execute)g Fq(consequen)m(t-commands)k Ft(as)41 b(long)g(as)g
-Fq(test-commands)46 b Ft(has)41 b(an)g(exit)g(status)630
-543 y(whic)m(h)c(is)h(not)h(zero.)67 b(The)38 b(return)f(status)j(is)d
-(the)i(exit)g(status)g(of)g(the)g(last)f(command)630
-653 y(executed)31 b(in)e Fq(consequen)m(t-commands)p
-Ft(,)j(or)e(zero)h(if)f(none)g(w)m(as)h(executed.)150
+TeXDict begin 10 15 bop 150 -116 a Ft(10)2572 b(Bash)31
+b(Reference)g(Man)m(ual)870 299 y Fs(until)46 b Fj(test-commands)11
+b Fs(;)44 b(do)j Fj(consequent-commands)11 b Fs(;)42
+b(done)630 434 y Ft(Execute)g Fq(consequen)m(t-commands)k
+Ft(as)41 b(long)h(as)f Fq(test-commands)46 b Ft(has)41
+b(an)g(exit)h(status)630 543 y(whic)m(h)c(is)h(not)g(zero.)67
+b(The)38 b(return)f(status)j(is)e(the)h(exit)h(status)f(of)g(the)g
+(last)g(command)630 653 y(executed)31 b(in)f Fq(consequen)m(t-commands)
+p Ft(,)i(or)e(zero)h(if)g(none)f(w)m(as)h(executed.)150
813 y Fs(while)240 b Ft(The)30 b(syn)m(tax)h(of)f(the)h
Fs(while)e Ft(command)h(is:)870 948 y Fs(while)46 b Fj(test-commands)11
b Fs(;)44 b(do)j Fj(consequent-commands)11 b Fs(;)42
b(done)630 1083 y Ft(Execute)g Fq(consequen)m(t-commands)k
-Ft(as)41 b(long)g(as)g Fq(test-commands)46 b Ft(has)41
-b(an)g(exit)g(status)630 1193 y(of)34 b(zero.)53 b(The)34
-b(return)f(status)h(is)g(the)g(exit)g(status)h(of)f(the)g(last)g
-(command)g(executed)h(in)630 1302 y Fq(consequen)m(t-commands)p
-Ft(,)c(or)g(zero)g(if)e(none)h(w)m(as)h(executed.)150
+Ft(as)41 b(long)h(as)f Fq(test-commands)46 b Ft(has)41
+b(an)g(exit)h(status)630 1193 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 1302 y Fq(consequen)m(t-commands)p
+Ft(,)c(or)g(zero)g(if)f(none)g(w)m(as)h(executed.)150
1463 y Fs(for)336 b Ft(The)30 b(syn)m(tax)h(of)f(the)h
Fs(for)e Ft(command)i(is:)870 1598 y Fs(for)47 b Fj(name)57
b Fs([in)47 b Fj(words)57 b Fs(...)o(];)47 b(do)g Fj(commands)11
b Fs(;)45 b(done)630 1733 y Ft(Expand)31 b Fq(w)m(ords)p
Ft(,)j(and)e(execute)i Fq(commands)i Ft(once)d(for)g(eac)m(h)h(mem)m(b)
-s(er)e(in)f(the)i(resultan)m(t)630 1842 y(list,)27 b(with)g
+s(er)e(in)g(the)h(resultan)m(t)630 1842 y(list,)c(with)f
Fq(name)33 b Ft(b)s(ound)26 b(to)j(the)f(curren)m(t)g(mem)m(b)s(er.)40
-b(If)27 b(`)p Fs(in)j Fj(words)11 b Ft(')27 b(is)g(not)h(presen)m(t,)h
+b(If)27 b(`)p Fs(in)j Fj(words)11 b Ft(')27 b(is)h(not)g(presen)m(t,)h
(the)630 1952 y Fs(for)g Ft(command)g(executes)i(the)e
-Fq(commands)k Ft(once)d(for)f(eac)m(h)i(p)s(ositional)c(parameter)j
-(that)630 2061 y(is)c(set,)i(as)f(if)f(`)p Fs(in)k("$@")p
-Ft(')c(had)g(b)s(een)g(sp)s(eci\014ed)f(\(see)j(Section)e(3.4.2)j([Sp)s
-(ecial)c(P)m(arameters],)630 2171 y(page)e(15\).)39 b(The)21
-b(return)g(status)h(is)f(the)h(exit)g(status)g(of)g(the)g(last)f
-(command)h(that)g(executes.)630 2281 y(If)i(there)h(are)h(no)e(items)h
-(in)e(the)i(expansion)f(of)h Fq(w)m(ords)p Ft(,)h(no)f(commands)f(are)h
-(executed,)j(and)630 2390 y(the)j(return)e(status)i(is)e(zero.)630
-2525 y(An)h(alternate)h(form)f(of)h(the)f Fs(for)g Ft(command)g(is)f
+Fq(commands)k Ft(once)d(for)f(eac)m(h)i(p)s(ositional)f(parameter)g
+(that)630 2061 y(is)d(set,)h(as)f(if)g(`)p Fs(in)j("$@")p
+Ft(')c(had)g(b)s(een)g(sp)s(eci\014ed)g(\(see)i(Section)f(3.4.2)i([Sp)s
+(ecial)e(P)m(arameters],)630 2171 y(page)c(15\).)39 b(The)21
+b(return)g(status)h(is)g(the)g(exit)h(status)f(of)g(the)g(last)g
+(command)g(that)g(executes.)630 2281 y(If)i(there)h(are)h(no)e(items)i
+(in)e(the)h(expansion)g(of)g Fq(w)m(ords)p Ft(,)h(no)f(commands)f(are)h
+(executed,)j(and)630 2390 y(the)j(return)e(status)i(is)f(zero.)630
+2525 y(An)g(alternate)i(form)e(of)h(the)f Fs(for)g Ft(command)g(is)g
(also)h(supp)s(orted:)870 2660 y Fs(for)47 b(\(\()g Fj(expr1)57
b Fs(;)47 b Fj(expr2)57 b Fs(;)48 b Fj(expr3)57 b Fs(\)\))47
b(;)g(do)g Fj(commands)57 b Fs(;)47 b(done)630 2795 y
-Ft(First,)37 b(the)g(arithmetic)f(expression)f Fq(expr1)43
-b Ft(is)35 b(ev)-5 b(aluated)37 b(according)f(to)h(the)g(rules)e(de-)
-630 2905 y(scrib)s(ed)40 b(b)s(elo)m(w)h(\(see)i(Section)f(6.5)h
-([Shell)e(Arithmetic],)j(page)f(70\).)77 b(The)42 b(arithmetic)630
-3014 y(expression)32 b Fq(expr2)41 b Ft(is)33 b(then)g(ev)-5
-b(aluated)34 b(rep)s(eatedly)f(un)m(til)f(it)h(ev)-5
-b(aluates)34 b(to)h(zero.)51 b(Eac)m(h)630 3124 y(time)22
-b Fq(expr2)30 b Ft(ev)-5 b(aluates)24 b(to)f(a)g(non-zero)h(v)-5
-b(alue,)24 b Fq(commands)i Ft(are)d(executed)g(and)g(the)g(arith-)630
-3233 y(metic)28 b(expression)f Fq(expr3)36 b Ft(is)27
-b(ev)-5 b(aluated.)40 b(If)28 b(an)m(y)h(expression)e(is)g(omitted,)i
-(it)f(b)s(eha)m(v)m(es)h(as)630 3343 y(if)h(it)h(ev)-5
-b(aluates)31 b(to)h(1.)44 b(The)30 b(return)g(v)-5 b(alue)31
-b(is)f(the)h(exit)g(status)h(of)f(the)g(last)g(command)g(in)630
-3453 y Fq(list)g Ft(that)g(is)e(executed,)j(or)e(false)g(if)g(an)m(y)g
-(of)h(the)f(expressions)f(is)h(in)m(v)-5 b(alid.)275
-3613 y(The)26 b Fs(break)g Ft(and)h Fs(continue)e Ft(builtins)f(\(see)k
-(Section)g(4.1)g([Bourne)g(Shell)d(Builtins],)h(page)i(33\))g(ma)m(y)
-150 3723 y(b)s(e)i(used)f(to)i(con)m(trol)g(lo)s(op)f(execution.)150
+Ft(First,)38 b(the)f(arithmetic)h(expression)e Fq(expr1)43
+b Ft(is)36 b(ev)-5 b(aluated)38 b(according)f(to)g(the)g(rules)f(de-)
+630 2905 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(70\).)77 b(The)42 b(arithmetic)630
+3014 y(expression)33 b Fq(expr2)41 b Ft(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 3124 y(time)23
+b Fq(expr2)30 b Ft(ev)-5 b(aluates)25 b(to)e(a)g(non-zero)h(v)-5
+b(alue,)25 b Fq(commands)h Ft(are)d(executed)g(and)g(the)g(arith-)630
+3233 y(metic)29 b(expression)f Fq(expr3)36 b Ft(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 3343 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
+3453 y Fq(list)i Ft(that)e(is)f(executed,)i(or)e(false)h(if)g(an)m(y)f
+(of)h(the)f(expressions)g(is)h(in)m(v)-5 b(alid.)275
+3613 y(The)26 b Fs(break)g Ft(and)h Fs(continue)e Ft(builtins)i(\(see)h
+(Section)h(4.1)f([Bourne)g(Shell)f(Builtins],)i(page)f(33\))g(ma)m(y)
+150 3723 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150
3949 y Fk(3.2.4.2)63 b(Conditional)42 b(Constructs)150
4193 y Fs(if)384 b Ft(The)30 b(syn)m(tax)h(of)f(the)h
Fs(if)f Ft(command)g(is:)870 4328 y Fs(if)47 b Fj(test-commands)11
b Fs(;)42 b(then)965 4657 y Fj(more-consequents)11 b
Fs(;])870 4767 y([else)46 b Fj(alternate-consequents)11
b Fs(;])870 4876 y(fi)630 5011 y Ft(The)53 b Fq(test-commands)58
-b Ft(list)52 b(is)h(executed,)60 b(and)53 b(if)f(its)h(return)f(status)
-i(is)e(zero,)61 b(the)630 5121 y Fq(consequen)m(t-commands)44
-b Ft(list)39 b(is)g(executed.)70 b(If)40 b Fq(test-commands)k
+b Ft(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 5121 y Fq(consequen)m(t-commands)44
+b Ft(list)d(is)f(executed.)70 b(If)40 b Fq(test-commands)k
Ft(returns)39 b(a)h(non-zero)630 5230 y(status,)45 b(eac)m(h)e
-Fs(elif)d Ft(list)g(is)h(executed)i(in)d(turn,)k(and)d(if)f(its)h(exit)
-h(status)g(is)e(zero,)46 b(the)630 5340 y(corresp)s(onding)36
-b Fq(more-consequen)m(ts)42 b Ft(is)37 b(executed)h(and)f(the)h
-(command)g(completes.)62 b(If)p eop
+Fs(elif)d Ft(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 5340 y(corresp)s(onding)37
+b Fq(more-consequen)m(ts)42 b Ft(is)c(executed)g(and)f(the)h(command)g
+(completes.)63 b(If)p eop end
%%Page: 11 17
-11 16 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(11)630 299 y(`)p Fs(else)29
-b Fj(alternate-consequents)11 b Ft(')23 b(is)29 b(presen)m(t,)g(and)g
-(the)g(\014nal)f(command)g(in)g(the)h(\014nal)630 408
-y Fs(if)44 b Ft(or)g Fs(elif)f Ft(clause)h(has)g(a)h(non-zero)g(exit)f
-(status,)k(then)c Fq(alternate-consequen)m(ts)50 b Ft(is)630
-518 y(executed.)55 b(The)34 b(return)g(status)h(is)e(the)i(exit)g
-(status)g(of)g(the)g(last)f(command)h(executed,)630 628
-y(or)30 b(zero)i(if)d(no)h(condition)f(tested)i(true.)150
+TeXDict begin 11 16 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(11)630 299
+y(`)p Fs(else)29 b Fj(alternate-consequents)11 b Ft(')23
+b(is)30 b(presen)m(t,)f(and)g(the)g(\014nal)g(command)f(in)h(the)g
+(\014nal)630 408 y Fs(if)44 b Ft(or)g Fs(elif)f Ft(clause)i(has)f(a)h
+(non-zero)g(exit)g(status,)j(then)c Fq(alternate-consequen)m(ts)51
+b Ft(is)630 518 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
+628 y(or)30 b(zero)i(if)e(no)g(condition)h(tested)g(true.)150
784 y Fs(case)288 b Ft(The)30 b(syn)m(tax)h(of)f(the)h
Fs(case)e Ft(command)h(is:)870 917 y Fs(case)47 b Fj(word)57
b Fs(in)47 b([)g([\(])g Fj(pattern)57 b Fs([|)47 b Fj(pattern)11
b Fs(]...)l(\))48 b Fj(command-list)55 b Fs(;;]...)46
-b(esac)630 1050 y(case)34 b Ft(will)e(selectiv)m(ely)i(execute)i(the)f
-Fq(command-list)h Ft(corresp)s(onding)c(to)k(the)e(\014rst)g
+b(esac)630 1050 y(case)34 b Ft(will)h(selectiv)m(ely)i(execute)f(the)f
+Fq(command-list)j Ft(corresp)s(onding)33 b(to)j(the)e(\014rst)g
Fq(pat-)630 1160 y(tern)40 b Ft(that)i(matc)m(hes)g Fq(w)m(ord)p
-Ft(.)71 b(The)40 b(`)p Fs(|)p Ft(')h(is)f(used)g(to)h(separate)h(m)m
-(ultiple)c(patterns,)44 b(and)630 1270 y(the)31 b(`)p
-Fs(\))p Ft(')h(op)s(erator)f(terminates)g(a)h(pattern)f(list.)42
-b(A)31 b(list)f(of)i(patterns)f(and)f(an)h(asso)s(ciated)630
-1379 y(command-list)e(is)g(kno)m(wn)h(as)g(a)h Fq(clause)p
-Ft(.)40 b(Eac)m(h)31 b(clause)f(m)m(ust)g(b)s(e)f(terminated)h(with)f
-(`)p Fs(;;)p Ft('.)630 1489 y(The)e Fq(w)m(ord)j Ft(undergo)s(es)d
-(tilde)f(expansion,)h(parameter)g(expansion,)g(command)h(substitu-)630
-1598 y(tion,)38 b(arithmetic)e(expansion,)h(and)g(quote)g(remo)m(v)-5
-b(al)37 b(b)s(efore)f(matc)m(hing)h(is)f(attempted.)630
-1708 y(Eac)m(h)e Fq(pattern)f Ft(undergo)s(es)g(tilde)f(expansion,)h
-(parameter)h(expansion,)f(command)g(sub-)630 1817 y(stitution,)c(and)h
-(arithmetic)g(expansion.)630 1951 y(There)g(ma)m(y)g(b)s(e)f(an)h
-(arbitrary)f(n)m(um)m(b)s(er)g(of)h Fs(case)f Ft(clauses,)h(eac)m(h)h
-(terminated)f(b)m(y)f(a)i(`)p Fs(;;)p Ft('.)630 2060
-y(The)f(\014rst)f(pattern)i(that)g(matc)m(hes)g(determines)f(the)g
-(command-list)g(that)h(is)e(executed.)630 2193 y(Here)35
-b(is)f(an)h(example)g(using)e Fs(case)h Ft(in)f(a)i(script)f(that)i
-(could)e(b)s(e)g(used)g(to)h(describ)s(e)f(one)630 2303
-y(in)m(teresting)c(feature)h(of)f(an)g(animal:)870 2436
+Ft(.)71 b(The)40 b(`)p Fs(|)p Ft(')h(is)g(used)f(to)h(separate)h(m)m
+(ultiple)f(patterns,)j(and)630 1270 y(the)31 b(`)p Fs(\))p
+Ft(')h(op)s(erator)f(terminates)h(a)g(pattern)f(list.)44
+b(A)31 b(list)h(of)g(patterns)f(and)f(an)h(asso)s(ciated)630
+1379 y(command-list)g(is)f(kno)m(wn)g(as)g(a)h Fq(clause)p
+Ft(.)41 b(Eac)m(h)31 b(clause)g(m)m(ust)f(b)s(e)f(terminated)i(with)f
+(`)p Fs(;;)p Ft('.)630 1489 y(The)d Fq(w)m(ord)j Ft(undergo)s(es)d
+(tilde)h(expansion,)g(parameter)f(expansion,)h(command)g(substitu-)630
+1598 y(tion,)39 b(arithmetic)f(expansion,)g(and)f(quote)g(remo)m(v)-5
+b(al)38 b(b)s(efore)e(matc)m(hing)i(is)f(attempted.)630
+1708 y(Eac)m(h)d Fq(pattern)f Ft(undergo)s(es)g(tilde)h(expansion,)g
+(parameter)g(expansion,)g(command)f(sub-)630 1817 y(stitution,)e(and)f
+(arithmetic)i(expansion.)630 1951 y(There)e(ma)m(y)g(b)s(e)f(an)h
+(arbitrary)g(n)m(um)m(b)s(er)f(of)h Fs(case)f Ft(clauses,)i(eac)m(h)g
+(terminated)g(b)m(y)e(a)i(`)p Fs(;;)p Ft('.)630 2060
+y(The)f(\014rst)f(pattern)i(that)g(matc)m(hes)g(determines)g(the)f
+(command-list)i(that)f(is)f(executed.)630 2193 y(Here)35
+b(is)g(an)g(example)h(using)e Fs(case)g Ft(in)g(a)h(script)g(that)h
+(could)f(b)s(e)f(used)g(to)h(describ)s(e)g(one)630 2303
+y(in)m(teresting)d(feature)f(of)f(an)g(animal:)870 2436
y Fs(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f(animal:)f(")870
2545 y(read)h(ANIMAL)870 2655 y(echo)g(-n)g("The)f($ANIMAL)g(has)h(")
870 2765 y(case)g($ANIMAL)e(in)965 2874 y(horse)i(|)g(dog)g(|)h(cat\))e
(echo)h(-n)g("four";;)965 2984 y(man)g(|)h(kangaroo)d(\))j(echo)e(-n)i
("two";;)965 3093 y(*\))g(echo)e(-n)h("an)g(unknown)f(number)g(of";;)
870 3203 y(esac)870 3313 y(echo)h(")g(legs.")630 3446
-y Ft(The)26 b(return)f(status)h(is)f(zero)i(if)e(no)h
-Fq(pattern)g Ft(is)f(matc)m(hed.)40 b(Otherwise,)26 b(the)h(return)e
-(status)630 3555 y(is)k(the)i(exit)f(status)h(of)f(the)h
-Fq(command-list)g Ft(executed.)150 3712 y Fs(select)630
-3845 y Ft(The)i Fs(select)f Ft(construct)i(allo)m(ws)f(the)h(easy)g
-(generation)g(of)f(men)m(us.)50 b(It)34 b(has)f(almost)h(the)630
-3954 y(same)d(syn)m(tax)g(as)f(the)h Fs(for)e Ft(command:)870
+y Ft(The)26 b(return)f(status)h(is)g(zero)h(if)f(no)g
+Fq(pattern)g Ft(is)g(matc)m(hed.)40 b(Otherwise,)27 b(the)g(return)e
+(status)630 3555 y(is)30 b(the)h(exit)g(status)g(of)f(the)h
+Fq(command-list)i Ft(executed.)150 3712 y Fs(select)630
+3845 y Ft(The)g Fs(select)f Ft(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
+3954 y(same)c(syn)m(tax)g(as)f(the)h Fs(for)e Ft(command:)870
4088 y Fs(select)46 b Fj(name)57 b Fs([in)47 b Fj(words)57
b Fs(...)o(];)47 b(do)h Fj(commands)11 b Fs(;)44 b(done)630
-4221 y Ft(The)d(list)g(of)g(w)m(ords)h(follo)m(wing)e
-Fs(in)h Ft(is)g(expanded,)j(generating)e(a)g(list)e(of)i(items.)74
-b(The)630 4330 y(set)41 b(of)f(expanded)f(w)m(ords)g(is)h(prin)m(ted)e
-(on)i(the)g(standard)f(error)h(output)g(stream,)j(eac)m(h)630
+4221 y Ft(The)d(list)i(of)e(w)m(ords)h(follo)m(wing)h
+Fs(in)e Ft(is)h(expanded,)i(generating)f(a)f(list)g(of)g(items.)75
+b(The)630 4330 y(set)41 b(of)f(expanded)f(w)m(ords)g(is)i(prin)m(ted)e
+(on)h(the)g(standard)f(error)h(output)g(stream,)j(eac)m(h)630
4440 y(preceded)30 b(b)m(y)g(a)h(n)m(um)m(b)s(er.)40
-b(If)29 b(the)i(`)p Fs(in)f Fj(words)11 b Ft(')29 b(is)g(omitted,)i
-(the)f(p)s(ositional)f(parameters)630 4549 y(are)24 b(prin)m(ted,)f(as)
-h(if)e(`)p Fs(in)30 b("$@")p Ft(')23 b(had)f(b)s(een)h(sp)s(ecifed.)37
-b(The)23 b Fs(PS3)f Ft(prompt)h(is)f(then)h(displa)m(y)m(ed)630
-4659 y(and)38 b(a)h(line)e(is)g(read)i(from)f(the)h(standard)e(input.)
-64 b(If)38 b(the)h(line)e(consists)h(of)g(a)h(n)m(um)m(b)s(er)630
-4769 y(corresp)s(onding)32 b(to)j(one)f(of)g(the)g(displa)m(y)m(ed)f(w)
-m(ords,)h(then)g(the)g(v)-5 b(alue)33 b(of)i Fq(name)k
-Ft(is)33 b(set)h(to)630 4878 y(that)g(w)m(ord.)49 b(If)32
-b(the)i(line)d(is)i(empt)m(y)-8 b(,)35 b(the)e(w)m(ords)g(and)f(prompt)
-h(are)g(displa)m(y)m(ed)f(again.)49 b(If)630 4988 y Fs(EOF)23
-b Ft(is)f(read,)k(the)d Fs(select)f Ft(command)i(completes.)39
-b(An)m(y)23 b(other)h(v)-5 b(alue)23 b(read)h(causes)g
-Fq(name)630 5097 y Ft(to)31 b(b)s(e)f(set)h(to)g(n)m(ull.)39
-b(The)29 b(line)g(read)h(is)g(sa)m(v)m(ed)h(in)e(the)i(v)-5
-b(ariable)29 b Fs(REPLY)p Ft(.)630 5230 y(The)42 b Fq(commands)j
-Ft(are)d(executed)h(after)g(eac)m(h)g(selection)f(un)m(til)e(a)j
-Fs(break)d Ft(command)i(is)630 5340 y(executed,)32 b(at)f(whic)m(h)e(p)
-s(oin)m(t)g(the)i Fs(select)d Ft(command)i(completes.)p
-eop
+b(If)29 b(the)i(`)p Fs(in)f Fj(words)11 b Ft(')29 b(is)h(omitted,)i
+(the)e(p)s(ositional)i(parameters)630 4549 y(are)24 b(prin)m(ted,)g(as)
+g(if)f(`)p Fs(in)30 b("$@")p Ft(')23 b(had)f(b)s(een)h(sp)s(ecifed.)38
+b(The)23 b Fs(PS3)f Ft(prompt)h(is)g(then)g(displa)m(y)m(ed)630
+4659 y(and)38 b(a)h(line)g(is)f(read)h(from)f(the)h(standard)e(input.)
+65 b(If)38 b(the)h(line)g(consists)g(of)f(a)h(n)m(um)m(b)s(er)630
+4769 y(corresp)s(onding)33 b(to)i(one)f(of)g(the)g(displa)m(y)m(ed)h(w)
+m(ords,)f(then)g(the)g(v)-5 b(alue)34 b(of)h Fq(name)k
+Ft(is)34 b(set)g(to)630 4878 y(that)g(w)m(ord.)49 b(If)32
+b(the)i(line)f(is)h(empt)m(y)-8 b(,)35 b(the)e(w)m(ords)g(and)f(prompt)
+h(are)g(displa)m(y)m(ed)h(again.)50 b(If)630 4988 y Fs(EOF)23
+b Ft(is)g(read,)j(the)d Fs(select)f Ft(command)i(completes.)40
+b(An)m(y)23 b(other)h(v)-5 b(alue)24 b(read)g(causes)g
+Fq(name)630 5097 y Ft(to)31 b(b)s(e)f(set)h(to)g(n)m(ull.)41
+b(The)29 b(line)i(read)f(is)h(sa)m(v)m(ed)g(in)f(the)h(v)-5
+b(ariable)31 b Fs(REPLY)p Ft(.)630 5230 y(The)42 b Fq(commands)j
+Ft(are)d(executed)h(after)g(eac)m(h)g(selection)h(un)m(til)e(a)h
+Fs(break)d Ft(command)i(is)630 5340 y(executed,)32 b(at)f(whic)m(h)f(p)
+s(oin)m(t)g(the)h Fs(select)d Ft(command)i(completes.)p
+eop end
%%Page: 12 18
-12 17 bop 150 -116 a Ft(12)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(Here)39 b(is)f(an)h(example)g(that)g(allo)m(ws)g(the)g(user)f(to)
-i(pic)m(k)e(a)h(\014lename)g(from)f(the)h(curren)m(t)630
-408 y(directory)-8 b(,)31 b(and)e(displa)m(ys)g(the)h(name)h(and)f
-(index)e(of)j(the)g(\014le)e(selected.)870 542 y Fs(select)46
-b(fname)g(in)i(*;)870 651 y(do)870 761 y(echo)f(you)g(picked)f($fname)g
-(\\\($REPLY\\\))870 870 y(break;)870 980 y(done)150 1136
-y(\(\(...)o(\)\))870 1270 y(\(\()h Fj(expression)56 b
-Fs(\)\))630 1403 y Ft(The)33 b(arithmetic)g Fq(expression)g
-Ft(is)f(ev)-5 b(aluated)34 b(according)g(to)g(the)g(rules)e(describ)s
-(ed)g(b)s(elo)m(w)630 1512 y(\(see)k(Section)e(6.5)i([Shell)d
-(Arithmetic],)i(page)h(70\).)55 b(If)34 b(the)h(v)-5
-b(alue)34 b(of)h(the)g(expression)f(is)630 1622 y(non-zero,)27
-b(the)f(return)e(status)i(is)f(0;)i(otherwise)e(the)h(return)e(status)i
-(is)f(1.)39 b(This)24 b(is)g(exactly)630 1731 y(equiv)-5
-b(alen)m(t)30 b(to)870 1864 y Fs(let)47 b(")p Fj(expression)11
-b Fs(")630 1998 y Ft(See)25 b(Section)g(4.2)i([Bash)e(Builtins],)f
-(page)i(39,)i(for)c(a)i(full)d(description)g(of)i(the)h
-Fs(let)e Ft(builtin.)150 2154 y Fs([[...)o(]])870 2287
-y([[)47 b Fj(expression)56 b Fs(]])630 2420 y Ft(Return)25
-b(a)h(status)f(of)h(0)g(or)g(1)g(dep)s(ending)d(on)i(the)h(ev)-5
-b(aluation)25 b(of)g(the)h(conditional)e(expres-)630
-2530 y(sion)29 b Fq(expression)p Ft(.)40 b(Expressions)28
-b(are)j(comp)s(osed)f(of)g(the)h(primaries)d(describ)s(ed)g(b)s(elo)m
-(w)h(in)630 2639 y(Section)35 b(6.4)i([Bash)f(Conditional)d
-(Expressions],)j(page)g(69.)57 b(W)-8 b(ord)36 b(splitting)e(and)h
-(\014le-)630 2749 y(name)24 b(expansion)g(are)h(not)f(p)s(erformed)f
+TeXDict begin 12 17 bop 150 -116 a Ft(12)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 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 408 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
+542 y Fs(select)46 b(fname)g(in)i(*;)870 651 y(do)870
+761 y(echo)f(you)g(picked)f($fname)g(\\\($REPLY\\\))870
+870 y(break;)870 980 y(done)150 1136 y(\(\(...)o(\)\))870
+1270 y(\(\()h Fj(expression)56 b Fs(\)\))630 1403 y Ft(The)33
+b(arithmetic)i Fq(expression)f Ft(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
+1512 y(\(see)j(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)f(70\).)55
+b(If)34 b(the)h(v)-5 b(alue)35 b(of)g(the)g(expression)g(is)630
+1622 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
+1731 y(equiv)-5 b(alen)m(t)32 b(to)870 1864 y Fs(let)47
+b(")p Fj(expression)11 b Fs(")630 1998 y Ft(See)25 b(Section)h(4.2)h
+([Bash)e(Builtins],)i(page)f(39,)i(for)c(a)i(full)f(description)g(of)g
+(the)h Fs(let)e Ft(builtin.)150 2154 y Fs([[...)o(]])870
+2287 y([[)47 b Fj(expression)56 b Fs(]])630 2420 y Ft(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
+2530 y(sion)j Fq(expression)p Ft(.)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 2639 y(Section)36 b(6.4)h([Bash)f(Conditional)g
+(Expressions],)h(page)f(69.)57 b(W)-8 b(ord)36 b(splitting)h(and)e
+(\014le-)630 2749 y(name)24 b(expansion)h(are)g(not)f(p)s(erformed)f
(on)h(the)h(w)m(ords)f(b)s(et)m(w)m(een)h(the)g(`)p Fs([[)p
-Ft(')f(and)g(`)p Fs(]])p Ft(';)i(tilde)630 2859 y(expansion,)k
-(parameter)h(and)f(v)-5 b(ariable)29 b(expansion,)h(arithmetic)f
-(expansion,)h(command)630 2968 y(substitution,)38 b(pro)s(cess)h
-(substitution,)f(and)g(quote)h(remo)m(v)-5 b(al)39 b(are)g(p)s
-(erformed.)63 b(Condi-)630 3078 y(tional)30 b(op)s(erators)g(suc)m(h)g
+Ft(')f(and)g(`)p Fs(]])p Ft(';)i(tilde)630 2859 y(expansion,)31
+b(parameter)g(and)f(v)-5 b(ariable)31 b(expansion,)g(arithmetic)g
+(expansion,)g(command)630 2968 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 3078 y(tional)32 b(op)s(erators)e(suc)m(h)g
(as)h(`)p Fs(-f)p Ft(')f(m)m(ust)g(b)s(e)g(unquoted)g(to)h(b)s(e)e
-(recognized)i(as)g(primaries.)630 3211 y(When)22 b(the)h(`)p
+(recognized)j(as)f(primaries.)630 3211 y(When)22 b(the)h(`)p
Fs(==)p Ft(')f(and)g(`)p Fs(!=)p Ft(')g(op)s(erators)h(are)g(used,)g
-(the)g(string)e(to)j(the)e(righ)m(t)g(of)h(the)g(op)s(erator)630
-3320 y(is)30 b(considered)g(a)i(pattern)f(and)g(matc)m(hed)h(according)
-f(to)h(the)g(rules)e(describ)s(ed)f(b)s(elo)m(w)h(in)630
-3430 y(Section)g(3.5.8.1)j([P)m(attern)e(Matc)m(hing],)h(page)f(23.)41
-b(The)30 b(return)f(v)-5 b(alue)30 b(is)f(0)h(if)g(the)g(string)630
+(the)g(string)f(to)i(the)e(righ)m(t)h(of)g(the)g(op)s(erator)630
+3320 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
+3430 y(Section)g(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i(page)e(23.)41
+b(The)30 b(return)f(v)-5 b(alue)31 b(is)f(0)g(if)h(the)f(string)630
3540 y(matc)m(hes)c(or)f(do)s(es)g(not)h(matc)m(h)f(the)h(pattern,)g
-(resp)s(ectiv)m(ely)-8 b(,)26 b(and)f(1)h(otherwise.)38
+(resp)s(ectiv)m(ely)-8 b(,)28 b(and)d(1)h(otherwise.)39
b(An)m(y)25 b(part)630 3649 y(of)31 b(the)f(pattern)h(ma)m(y)g(b)s(e)e
-(quoted)i(to)g(force)g(it)f(to)h(b)s(e)f(matc)m(hed)h(as)f(a)h(string.)
-630 3782 y(An)i(additional)f(binary)g(op)s(erator,)j(`)p
-Fs(=~)p Ft(',)g(is)e(a)m(v)-5 b(ailable,)34 b(with)e(the)i(same)g
+(quoted)i(to)g(force)g(it)g(to)g(b)s(e)f(matc)m(hed)h(as)f(a)h(string.)
+630 3782 y(An)i(additional)i(binary)e(op)s(erator,)i(`)p
+Fs(=~)p Ft(',)g(is)f(a)m(v)-5 b(ailable,)37 b(with)c(the)h(same)g
(precedence)h(as)630 3892 y(`)p Fs(==)p Ft(')29 b(and)f(`)p
-Fs(!=)p Ft('.)40 b(When)29 b(it)f(is)g(used,)g(the)h(string)f(to)i(the)
-e(righ)m(t)h(of)g(the)g(op)s(erator)g(is)f(consid-)630
-4001 y(ered)34 b(an)g(extended)g(regular)f(expression)g(and)g(matc)m
-(hed)i(accordingly)e(\(as)h(in)f Fm(r)-5 b(e)g(gex)11
-b Ft(3\)\).)630 4111 y(The)39 b(return)f(v)-5 b(alue)39
-b(is)f(0)i(if)e(the)h(string)g(matc)m(hes)h(the)f(pattern,)j(and)d(1)h
-(otherwise.)66 b(If)630 4221 y(the)26 b(regular)f(expression)g(is)g
-(syn)m(tactically)h(incorrect,)h(the)f(conditional)e(expression's)h
-(re-)630 4330 y(turn)35 b(v)-5 b(alue)36 b(is)f(2.)59
-b(If)36 b(the)g(shell)f(option)g Fs(nocaseglob)f Ft(\(see)j(the)g
-(description)d(of)i Fs(shopt)630 4440 y Ft(in)42 b(Section)h(4.2)h
-([Bash)f(Builtins],)h(page)g(39\))g(is)e(enabled,)j(the)f(matc)m(h)f
-(is)f(p)s(erformed)630 4549 y(without)d(regard)h(to)h(the)f(case)h(of)g
-(alphab)s(etic)d(c)m(haracters.)72 b(Substrings)37 b(matc)m(hed)k(b)m
-(y)630 4659 y(paren)m(thesized)i(sub)s(expressions)e(within)h(the)i
-(regular)f(expression)g(are)h(sa)m(v)m(ed)h(in)e(the)630
-4769 y(arra)m(y)38 b(v)-5 b(ariable)36 b Fs(BASH_REMATCH)p
-Ft(.)59 b(The)36 b(elemen)m(t)i(of)g Fs(BASH_REMATCH)c
-Ft(with)i(index)g(0)i(is)630 4878 y(the)c(p)s(ortion)e(of)i(the)f
-(string)g(matc)m(hing)g(the)h(en)m(tire)g(regular)e(expression.)49
+Fs(!=)p Ft('.)40 b(When)29 b(it)g(is)g(used,)f(the)h(string)g(to)h(the)
+e(righ)m(t)i(of)f(the)g(op)s(erator)g(is)g(consid-)630
+4001 y(ered)34 b(an)g(extended)g(regular)g(expression)g(and)f(matc)m
+(hed)i(accordingly)g(\(as)f(in)g Fm(r)-5 b(e)g(gex)11
+b Ft(3\)\).)630 4111 y(The)39 b(return)f(v)-5 b(alue)40
+b(is)f(0)h(if)f(the)g(string)h(matc)m(hes)g(the)f(pattern,)j(and)d(1)h
+(otherwise.)67 b(If)630 4221 y(the)26 b(regular)g(expression)g(is)g
+(syn)m(tactically)j(incorrect,)f(the)e(conditional)h(expression's)f
+(re-)630 4330 y(turn)35 b(v)-5 b(alue)37 b(is)f(2.)59
+b(If)36 b(the)g(shell)h(option)f Fs(nocaseglob)e Ft(\(see)j(the)g
+(description)f(of)g Fs(shopt)630 4440 y Ft(in)43 b(Section)h(4.2)g
+([Bash)f(Builtins],)k(page)d(39\))g(is)f(enabled,)j(the)e(matc)m(h)f
+(is)g(p)s(erformed)630 4549 y(without)d(regard)g(to)h(the)f(case)h(of)g
+(alphab)s(etic)f(c)m(haracters.)72 b(Substrings)38 b(matc)m(hed)j(b)m
+(y)630 4659 y(paren)m(thesized)j(sub)s(expressions)e(within)i(the)g
+(regular)g(expression)g(are)g(sa)m(v)m(ed)h(in)f(the)630
+4769 y(arra)m(y)38 b(v)-5 b(ariable)38 b Fs(BASH_REMATCH)p
+Ft(.)59 b(The)36 b(elemen)m(t)j(of)f Fs(BASH_REMATCH)c
+Ft(with)j(index)g(0)h(is)630 4878 y(the)c(p)s(ortion)f(of)h(the)f
+(string)h(matc)m(hing)g(the)g(en)m(tire)h(regular)e(expression.)50
b(The)33 b(elemen)m(t)630 4988 y(of)39 b Fs(BASH_REMATCH)c
-Ft(with)i(index)g Fq(n)g Ft(is)h(the)g(p)s(ortion)f(of)i(the)f(string)g
-(matc)m(hing)g(the)h Fq(n)p Ft(th)630 5097 y(paren)m(thesized)30
-b(sub)s(expression.)630 5230 y(Expressions)22 b(ma)m(y)i(b)s(e)e(com)m
-(bined)h(using)f(the)i(follo)m(wing)e(op)s(erators,)j(listed)d(in)g
+Ft(with)j(index)g Fq(n)f Ft(is)i(the)f(p)s(ortion)g(of)h(the)f(string)h
+(matc)m(hing)g(the)g Fq(n)p Ft(th)630 5097 y(paren)m(thesized)31
+b(sub)s(expression.)630 5230 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 5340 y(order)30 b(of)g(precedence:)p
-eop
+eop end
%%Page: 13 19
-13 18 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(13)630 299 y Fs(\()30
-b Fj(expression)38 b Fs(\))1110 408 y Ft(Returns)30 b(the)h(v)-5
-b(alue)30 b(of)h Fq(expression)p Ft(.)41 b(This)29 b(ma)m(y)j(b)s(e)e
-(used)g(to)i(o)m(v)m(erride)f(the)1110 518 y(normal)e(precedence)i(of)g
-(op)s(erators.)630 667 y Fs(!)f Fj(expression)1110 776
-y Ft(T)-8 b(rue)30 b(if)f Fq(expression)g Ft(is)h(false.)630
-925 y Fj(expression1)38 b Fs(&&)30 b Fj(expression2)1110
-1034 y Ft(T)-8 b(rue)30 b(if)f(b)s(oth)h Fq(expression1)37
-b Ft(and)29 b Fq(expression2)37 b Ft(are)31 b(true.)630
-1183 y Fj(expression1)38 b Fs(||)30 b Fj(expression2)1110
-1292 y Ft(T)-8 b(rue)30 b(if)f(either)h Fq(expression1)37
-b Ft(or)30 b Fq(expression2)37 b Ft(is)29 b(true.)630
-1441 y(The)c Fs(&&)g Ft(and)g Fs(||)f Ft(op)s(erators)i(do)f(not)h(ev)
--5 b(aluate)26 b Fq(expression2)32 b Ft(if)25 b(the)g(v)-5
-b(alue)25 b(of)h Fq(expression1)630 1550 y Ft(is)j(su\016cien)m(t)h(to)
-h(determine)f(the)g(return)g(v)-5 b(alue)30 b(of)g(the)h(en)m(tire)f
-(conditional)f(expression.)150 1758 y Fk(3.2.4.3)63 b(Grouping)43
-b(Commands)275 1997 y Ft(Bash)22 b(pro)m(vides)f(t)m(w)m(o)i(w)m(a)m
-(ys)g(to)g(group)f(a)g(list)f(of)h(commands)g(to)g(b)s(e)g(executed)h
-(as)f(a)h(unit.)36 b(When)22 b(com-)150 2106 y(mands)30
-b(are)i(group)s(ed,)f(redirections)f(ma)m(y)i(b)s(e)e(applied)g(to)i
-(the)f(en)m(tire)g(command)h(list.)42 b(F)-8 b(or)32
-b(example,)150 2216 y(the)f(output)f(of)g(all)f(the)i(commands)f(in)f
-(the)i(list)e(ma)m(y)i(b)s(e)e(redirected)h(to)h(a)g(single)e(stream.)
-150 2364 y Fs(\(\))870 2494 y(\()47 b Fj(list)58 b Fs(\))630
-2623 y Ft(Placing)28 b(a)h(list)e(of)i(commands)f(b)s(et)m(w)m(een)i
-(paren)m(theses)e(causes)i(a)f(subshell)c(en)m(vironmen)m(t)630
-2732 y(to)31 b(b)s(e)e(created)j(\(see)f(Section)f(3.7.3)i([Command)d
-(Execution)h(En)m(vironmen)m(t],)g(page)g(29\),)630 2842
-y(and)d(eac)m(h)i(of)e(the)h(commands)f(in)f Fq(list)i
-Ft(to)h(b)s(e)e(executed)h(in)e(that)i(subshell.)37 b(Since)27
-b(the)g Fq(list)630 2951 y Ft(is)h(executed)h(in)e(a)i(subshell,)e(v)-5
-b(ariable)27 b(assignmen)m(ts)h(do)h(not)g(remain)e(in)g(e\013ect)k
-(after)e(the)630 3061 y(subshell)e(completes.)150 3209
+TeXDict begin 13 18 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(13)630 299
+y Fs(\()30 b Fj(expression)38 b Fs(\))1110 408 y Ft(Returns)30
+b(the)h(v)-5 b(alue)31 b(of)g Fq(expression)p Ft(.)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
+518 y(normal)e(precedence)h(of)g(op)s(erators.)630 667
+y Fs(!)f Fj(expression)1110 776 y Ft(T)-8 b(rue)30 b(if)g
+Fq(expression)g Ft(is)h(false.)630 925 y Fj(expression1)38
+b Fs(&&)30 b Fj(expression2)1110 1034 y Ft(T)-8 b(rue)30
+b(if)g(b)s(oth)g Fq(expression1)38 b Ft(and)29 b Fq(expression2)38
+b Ft(are)31 b(true.)630 1183 y Fj(expression1)38 b Fs(||)30
+b Fj(expression2)1110 1292 y Ft(T)-8 b(rue)30 b(if)g(either)h
+Fq(expression1)38 b Ft(or)30 b Fq(expression2)38 b Ft(is)30
+b(true.)630 1441 y(The)25 b Fs(&&)g Ft(and)g Fs(||)f
+Ft(op)s(erators)i(do)f(not)h(ev)-5 b(aluate)27 b Fq(expression2)33
+b Ft(if)26 b(the)f(v)-5 b(alue)26 b(of)g Fq(expression1)630
+1550 y Ft(is)k(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
+1758 y Fk(3.2.4.3)63 b(Grouping)43 b(Commands)275 1997
+y Ft(Bash)22 b(pro)m(vides)g(t)m(w)m(o)h(w)m(a)m(ys)g(to)g(group)f(a)g
+(list)h(of)f(commands)g(to)g(b)s(e)g(executed)h(as)f(a)h(unit.)37
+b(When)22 b(com-)150 2106 y(mands)30 b(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 2216
+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 2364
+y Fs(\(\))870 2494 y(\()47 b Fj(list)58 b Fs(\))630 2623
+y Ft(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
+2732 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(29\),)630 2842
+y(and)d(eac)m(h)i(of)e(the)h(commands)f(in)g Fq(list)j
+Ft(to)f(b)s(e)e(executed)h(in)f(that)h(subshell.)39 b(Since)28
+b(the)f Fq(list)630 2951 y Ft(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 3061 y(subshell)g(completes.)150 3209
y Fs({})870 3338 y({)47 b Fj(list)11 b Fs(;)46 b(})630
-3467 y Ft(Placing)28 b(a)i(list)e(of)i(commands)f(b)s(et)m(w)m(een)h
-(curly)e(braces)h(causes)h(the)f(list)f(to)i(b)s(e)f(executed)630
-3577 y(in)c(the)i(curren)m(t)g(shell)d(con)m(text.)42
-b(No)27 b(subshell)d(is)h(created.)41 b(The)26 b(semicolon)g(\(or)h
-(newline\))630 3687 y(follo)m(wing)i Fq(list)i Ft(is)e(required.)275
-3835 y(In)j(addition)f(to)i(the)g(creation)h(of)f(a)g(subshell,)e
-(there)i(is)f(a)h(subtle)e(di\013erence)i(b)s(et)m(w)m(een)g(these)h(t)
-m(w)m(o)150 3945 y(constructs)43 b(due)f(to)h(historical)e(reasons.)77
+3467 y Ft(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
+3577 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 3687 y(follo)m(wing)32 b Fq(list)h Ft(is)d(required.)275
+3835 y(In)i(addition)h(to)g(the)g(creation)i(of)e(a)g(subshell,)g
+(there)g(is)g(a)g(subtle)f(di\013erence)i(b)s(et)m(w)m(een)f(these)h(t)
+m(w)m(o)150 3945 y(constructs)43 b(due)f(to)h(historical)h(reasons.)77
b(The)42 b(braces)h(are)g Fs(reserved)28 b(words)p Ft(,)45
b(so)d(they)h(m)m(ust)g(b)s(e)150 4054 y(separated)33
-b(from)f(the)g Fq(list)i Ft(b)m(y)e Fs(blank)p Ft(s.)45
+b(from)f(the)g Fq(list)k Ft(b)m(y)c Fs(blank)p Ft(s.)45
b(The)32 b(paren)m(theses)h(are)g Fs(operators)p Ft(,)d(and)i(are)h
-(recognized)g(as)150 4164 y(separate)e(tok)m(ens)h(b)m(y)e(the)h(shell)
-d(ev)m(en)j(if)e(they)i(are)g(not)f(separated)h(from)f(the)h
-Fq(list)g Ft(b)m(y)f(whitespace.)275 4293 y(The)f(exit)i(status)f(of)h
-(b)s(oth)f(of)g(these)h(constructs)g(is)e(the)i(exit)f(status)g(of)h
+(recognized)h(as)150 4164 y(separate)d(tok)m(ens)h(b)m(y)e(the)h(shell)
+f(ev)m(en)h(if)f(they)h(are)g(not)f(separated)h(from)f(the)h
+Fq(list)i Ft(b)m(y)d(whitespace.)275 4293 y(The)f(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
Fq(list)p Ft(.)150 4534 y Fr(3.3)68 b(Shell)45 b(F)-11
-b(unctions)275 4773 y Ft(Shell)25 b(functions)h(are)h(a)h(w)m(a)m(y)g
-(to)g(group)f(commands)g(for)g(later)h(execution)f(using)f(a)i(single)e
-(name)h(for)150 4882 y(the)35 b(group.)55 b(They)35 b(are)g(executed)h
-(just)f(lik)m(e)f(a)i Fs(")p Ft(regular)p Fs(")e Ft(command.)54
-b(When)35 b(the)h(name)f(of)g(a)h(shell)150 4992 y(function)i(is)g
-(used)g(as)h(a)h(simple)d(command)i(name,)i(the)e(list)f(of)h(commands)
-g(asso)s(ciated)h(with)d(that)150 5101 y(function)24
-b(name)i(is)f(executed.)40 b(Shell)23 b(functions)h(are)j(executed)f
-(in)e(the)i(curren)m(t)g(shell)e(con)m(text;)29 b(no)c(new)150
-5211 y(pro)s(cess)30 b(is)f(created)j(to)f(in)m(terpret)f(them.)275
-5340 y(F)-8 b(unctions)29 b(are)i(declared)f(using)f(this)g(syn)m(tax:)
-p eop
+b(unctions)275 4773 y Ft(Shell)27 b(functions)g(are)g(a)h(w)m(a)m(y)g
+(to)g(group)f(commands)g(for)g(later)i(execution)f(using)f(a)h(single)g
+(name)f(for)150 4882 y(the)35 b(group.)55 b(They)35 b(are)g(executed)h
+(just)f(lik)m(e)h(a)g Fs(")p Ft(regular)p Fs(")f Ft(command.)54
+b(When)35 b(the)h(name)f(of)g(a)h(shell)150 4992 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 5101 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
+5211 y(pro)s(cess)30 b(is)g(created)i(to)f(in)m(terpret)g(them.)275
+5340 y(F)-8 b(unctions)30 b(are)h(declared)g(using)f(this)g(syn)m(tax:)
+p eop end
%%Page: 14 20
-14 19 bop 150 -116 a Ft(14)2572 b(Bash)31 b(Reference)g(Man)m(ual)390
-299 y Fs([)47 b(function)f(])h Fj(name)58 b Fs(\(\))47
-b Fj(compound-command)54 b Fs([)47 b Fj(redirections)55
-b Fs(])275 450 y Ft(This)30 b(de\014nes)i(a)h(shell)e(function)h(named)
-g Fq(name)p Ft(.)48 b(The)32 b(reserv)m(ed)h(w)m(ord)f
-Fs(function)f Ft(is)g(optional.)47 b(If)150 559 y(the)39
-b Fs(function)f Ft(reserv)m(ed)h(w)m(ord)g(is)f(supplied,)h(the)g
-(paren)m(theses)h(are)f(optional.)67 b(The)39 b Fq(b)s(o)s(dy)45
-b Ft(of)40 b(the)150 669 y(function)g(is)h(the)h(comp)s(ound)e(command)
-h Fq(comp)s(ound-command)j Ft(\(see)e(Section)g(3.2.4)h([Comp)s(ound)
-150 778 y(Commands],)33 b(page)g(9\).)48 b(That)33 b(command)g(is)e
-(usually)g(a)i Fq(list)g Ft(enclosed)f(b)s(et)m(w)m(een)i
-Fs({)e Ft(and)g Fs(})p Ft(,)h(but)f(ma)m(y)150 888 y(b)s(e)27
-b(an)m(y)h(comp)s(ound)e(command)h(listed)f(ab)s(o)m(v)m(e.)41
-b Fq(comp)s(ound-command)30 b Ft(is)d(executed)h(whenev)m(er)g
-Fq(name)150 998 y Ft(is)36 b(sp)s(eci\014ed)g(as)h(the)h(name)f(of)g(a)
-h(command.)61 b(An)m(y)37 b(redirections)f(\(see)i(Section)f(3.6)h
-([Redirections],)150 1107 y(page)31 b(24\))h(asso)s(ciated)f(with)e
-(the)h(shell)f(function)g(are)i(p)s(erformed)d(when)i(the)g(function)f
-(is)h(executed.)275 1258 y(The)c(exit)h(status)h(of)f(a)h(function)e
-(de\014nition)f(is)h(zero)i(unless)e(a)h(syn)m(tax)h(error)f(o)s(ccurs)
-g(or)g(a)h(readonly)150 1367 y(function)j(with)f(the)j(same)f(name)g
-(already)g(exists.)45 b(When)32 b(executed,)h(the)f(exit)g(status)h(of)
-f(a)g(function)150 1477 y(is)d(the)i(exit)f(status)h(of)f(the)h(last)f
-(command)g(executed)i(in)d(the)h(b)s(o)s(dy)-8 b(.)275
-1628 y(Note)22 b(that)f(for)f(historical)f(reasons,)k(in)d(the)h(most)g
-(common)g(usage)g(the)g(curly)e(braces)i(that)g(surround)150
-1737 y(the)38 b(b)s(o)s(dy)d(of)j(the)f(function)f(m)m(ust)h(b)s(e)g
+TeXDict begin 14 19 bop 150 -116 a Ft(14)2572 b(Bash)31
+b(Reference)g(Man)m(ual)390 299 y Fs([)47 b(function)f(])h
+Fj(name)58 b Fs(\(\))47 b Fj(compound-command)54 b Fs([)47
+b Fj(redirections)55 b Fs(])275 450 y Ft(This)31 b(de\014nes)h(a)h
+(shell)g(function)g(named)f Fq(name)p Ft(.)48 b(The)32
+b(reserv)m(ed)h(w)m(ord)f Fs(function)f Ft(is)h(optional.)49
+b(If)150 559 y(the)39 b Fs(function)f Ft(reserv)m(ed)h(w)m(ord)g(is)g
+(supplied,)i(the)e(paren)m(theses)h(are)f(optional.)69
+b(The)39 b Fq(b)s(o)s(dy)45 b Ft(of)40 b(the)150 669
+y(function)h(is)h(the)g(comp)s(ound)e(command)h Fq(comp)s(ound-command)
+j Ft(\(see)e(Section)h(3.2.4)g([Comp)s(ound)150 778 y(Commands],)33
+b(page)g(9\).)48 b(That)33 b(command)g(is)f(usually)h(a)g
+Fq(list)i Ft(enclosed)e(b)s(et)m(w)m(een)h Fs({)e Ft(and)g
+Fs(})p Ft(,)h(but)f(ma)m(y)150 888 y(b)s(e)27 b(an)m(y)h(comp)s(ound)e
+(command)h(listed)h(ab)s(o)m(v)m(e.)41 b Fq(comp)s(ound-command)30
+b Ft(is)e(executed)g(whenev)m(er)g Fq(name)150 998 y
+Ft(is)37 b(sp)s(eci\014ed)g(as)g(the)h(name)f(of)g(a)h(command.)61
+b(An)m(y)37 b(redirections)h(\(see)g(Section)g(3.6)g([Redirections],)
+150 1107 y(page)31 b(24\))h(asso)s(ciated)g(with)e(the)g(shell)h
+(function)f(are)h(p)s(erformed)d(when)i(the)g(function)g(is)h
+(executed.)275 1258 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 1367 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 1477 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
+1628 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
+1737 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 Fs(blank)p
-Ft(s)f(or)h(newlines.)60 b(This)150 1847 y(is)37 b(b)s(ecause)h(the)h
-(braces)f(are)h(reserv)m(ed)f(w)m(ords)g(and)f(are)i(only)e(recognized)
-i(as)f(suc)m(h)g(when)f(they)i(are)150 1956 y(separated)e(b)m(y)g
-(whitespace.)60 b(Also,)38 b(when)e(using)f(the)i(braces,)i(the)e
-Fq(list)h Ft(m)m(ust)e(b)s(e)g(terminated)h(b)m(y)g(a)150
-2066 y(semicolon,)30 b(a)h(`)p Fs(&)p Ft(',)f(or)h(a)g(newline.)275
-2217 y(When)h(a)i(function)e(is)g(executed,)j(the)e(argumen)m(ts)h(to)g
-(the)f(function)f(b)s(ecome)h(the)h(p)s(ositional)d(pa-)150
-2326 y(rameters)42 b(during)d(its)i(execution)h(\(see)g(Section)f
-(3.4.1)i([P)m(ositional)e(P)m(arameters],)46 b(page)c(15\).)75
-b(The)150 2436 y(sp)s(ecial)35 b(parameter)h(`)p Fs(#)p
+Ft(s)f(or)h(newlines.)62 b(This)150 1847 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 1956 y(separated)e(b)m(y)g
+(whitespace.)61 b(Also,)39 b(when)d(using)g(the)h(braces,)i(the)e
+Fq(list)j Ft(m)m(ust)c(b)s(e)g(terminated)i(b)m(y)f(a)150
+2066 y(semicolon,)32 b(a)f(`)p Fs(&)p Ft(',)f(or)h(a)g(newline.)275
+2217 y(When)h(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
+2326 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(15\).)75
+b(The)150 2436 y(sp)s(ecial)37 b(parameter)f(`)p Fs(#)p
Ft(')g(that)h(expands)e(to)i(the)f(n)m(um)m(b)s(er)f(of)h(p)s
-(ositional)e(parameters)i(is)f(up)s(dated)g(to)150 2545
-y(re\015ect)h(the)f(c)m(hange.)56 b(Sp)s(ecial)33 b(parameter)j
-Fs(0)f Ft(is)f(unc)m(hanged.)54 b(The)35 b(\014rst)f(elemen)m(t)i(of)f
-(the)g Fs(FUNCNAME)150 2655 y Ft(v)-5 b(ariable)25 b(is)h(set)h(to)h
-(the)f(name)f(of)h(the)g(function)e(while)g(the)i(function)e(is)h
-(executing.)39 b(All)26 b(other)h(asp)s(ects)150 2765
-y(of)32 b(the)g(shell)e(execution)j(en)m(vironmen)m(t)e(are)i(iden)m
-(tical)d(b)s(et)m(w)m(een)j(a)f(function)f(and)g(its)h(caller)f(with)g
-(the)150 2874 y(exception)25 b(that)h(the)f Fs(DEBUG)f
-Ft(trap)h(b)s(elo)m(w\))g(is)f(not)i(inherited)c(unless)i(the)h
-(function)f(has)h(b)s(een)g(giv)m(en)g(the)150 2984 y
-Fs(trace)36 b Ft(attribute)g(using)g(the)h Fs(declare)e
-Ft(builtin)e(or)k(the)g Fs(-o)30 b(functrace)35 b Ft(option)h(has)h(b)s
-(een)f(enabled)150 3093 y(with)c(the)h Fs(set)g Ft(builtin,)e(\(in)h
-(whic)m(h)g(case)i(all)e(functions)g(inherit)f(the)j
-Fs(DEBUG)e Ft(trap\).)49 b(See)34 b(Section)f(4.1)150
-3203 y([Bourne)d(Shell)f(Builtins],)f(page)j(33,)g(for)g(the)f
-(description)f(of)h(the)h Fs(trap)e Ft(builtin.)275 3354
-y(If)37 b(the)g(builtin)d(command)k Fs(return)d Ft(is)i(executed)h(in)f
-(a)h(function,)g(the)f(function)g(completes)h(and)150
-3463 y(execution)24 b(resumes)f(with)g(the)h(next)g(command)f(after)i
-(the)f(function)e(call.)38 b(An)m(y)24 b(command)f(asso)s(ciated)150
-3573 y(with)35 b(the)i Fs(RETURN)d Ft(trap)i(is)g(executed)h(b)s(efore)
-f(execution)h(resumes.)57 b(When)37 b(a)f(function)f(completes,)150
-3682 y(the)i(v)-5 b(alues)37 b(of)g(the)g(p)s(ositional)e(parameters)i
-(and)g(the)g(sp)s(ecial)f(parameter)h(`)p Fs(#)p Ft(')g(are)h(restored)
-f(to)h(the)150 3792 y(v)-5 b(alues)25 b(they)g(had)g(prior)e(to)j(the)g
-(function's)e(execution.)39 b(If)25 b(a)h(n)m(umeric)e(argumen)m(t)i
-(is)e(giv)m(en)h(to)h Fs(return)p Ft(,)150 3902 y(that)j(is)f(the)g
-(function's)g(return)f(status;)j(otherwise)e(the)g(function's)g(return)
-f(status)i(is)e(the)i(exit)g(status)150 4011 y(of)i(the)f(last)g
-(command)g(executed)i(b)s(efore)e(the)g Fs(return)p Ft(.)275
-4162 y(V)-8 b(ariables)29 b(lo)s(cal)g(to)h(the)g(function)e(ma)m(y)j
-(b)s(e)e(declared)g(with)f(the)i Fs(local)f Ft(builtin.)37
-b(These)29 b(v)-5 b(ariables)150 4271 y(are)31 b(visible)d(only)h(to)i
-(the)g(function)e(and)h(the)g(commands)g(it)g(in)m(v)m(ok)m(es.)275
-4422 y(F)-8 b(unction)37 b(names)g(and)g(de\014nitions)e(ma)m(y)k(b)s
-(e)e(listed)f(with)g(the)i(`)p Fs(-f)p Ft(')f(option)g(to)i(the)e
-Fs(declare)f Ft(or)150 4532 y Fs(typeset)d Ft(builtin)e(commands)k
-(\(see)h(Section)f(4.2)h([Bash)f(Builtins],)f(page)i(39\).)55
-b(The)35 b(`)p Fs(-F)p Ft(')g(option)f(to)150 4641 y
-Fs(declare)g Ft(or)i Fs(typeset)e Ft(will)f(list)i(the)h(function)f
-(names)h(only)f(\(and)h(optionally)e(the)i(source)g(\014le)g(and)150
-4751 y(line)31 b(n)m(um)m(b)s(er,)i(if)e(the)i Fs(extdebug)e
-Ft(shell)g(option)h(is)g(enabled\).)48 b(F)-8 b(unctions)32
-b(ma)m(y)i(b)s(e)e(exp)s(orted)g(so)h(that)150 4861 y(subshells)d
-(automatically)k(ha)m(v)m(e)g(them)g(de\014ned)e(with)g(the)h(`)p
-Fs(-f)p Ft(')h(option)f(to)h(the)f Fs(export)f Ft(builtin)e(\(see)150
-4970 y(Section)i(4.1)h([Bourne)f(Shell)e(Builtins],)h(page)i(33\).)47
-b(Note)33 b(that)g(shell)d(functions)h(and)g(v)-5 b(ariables)31
-b(with)150 5080 y(the)f(same)g(name)g(ma)m(y)g(result)f(in)g(m)m
-(ultiple)e(iden)m(tically-named)h(en)m(tries)i(in)e(the)i(en)m
-(vironmen)m(t)f(passed)150 5189 y(to)i(the)g(shell's)d(c)m(hildren.)39
-b(Care)30 b(should)f(b)s(e)g(tak)m(en)j(in)d(cases)i(where)f(this)f(ma)
-m(y)i(cause)g(a)g(problem.)275 5340 y(F)-8 b(unctions)29
-b(ma)m(y)i(b)s(e)f(recursiv)m(e.)40 b(No)31 b(limit)d(is)i(placed)g(on)
-g(the)g(n)m(um)m(b)s(er)g(of)g(recursiv)m(e)g(calls.)p
-eop
+(ositional)h(parameters)f(is)g(up)s(dated)f(to)150 2545
+y(re\015ect)h(the)f(c)m(hange.)56 b(Sp)s(ecial)35 b(parameter)h
+Fs(0)f Ft(is)g(unc)m(hanged.)54 b(The)35 b(\014rst)f(elemen)m(t)j(of)e
+(the)g Fs(FUNCNAME)150 2655 y Ft(v)-5 b(ariable)27 b(is)g(set)g(to)h
+(the)f(name)f(of)h(the)g(function)f(while)h(the)g(function)f(is)h
+(executing.)40 b(All)28 b(other)f(asp)s(ects)150 2765
+y(of)32 b(the)g(shell)g(execution)i(en)m(vironmen)m(t)e(are)h(iden)m
+(tical)g(b)s(et)m(w)m(een)g(a)f(function)g(and)f(its)i(caller)g(with)f
+(the)150 2874 y(exception)26 b(that)g(the)f Fs(DEBUG)f
+Ft(trap)h(b)s(elo)m(w\))h(is)f(not)h(inherited)e(unless)h(the)g
+(function)g(has)g(b)s(een)g(giv)m(en)h(the)150 2984 y
+Fs(trace)36 b Ft(attribute)h(using)g(the)g Fs(declare)e
+Ft(builtin)h(or)h(the)g Fs(-o)30 b(functrace)35 b Ft(option)i(has)g(b)s
+(een)f(enabled)150 3093 y(with)d(the)g Fs(set)g Ft(builtin,)h(\(in)f
+(whic)m(h)g(case)h(all)g(functions)f(inherit)g(the)h
+Fs(DEBUG)e Ft(trap\).)49 b(See)34 b(Section)g(4.1)150
+3203 y([Bourne)c(Shell)h(Builtins],)g(page)g(33,)g(for)g(the)f
+(description)h(of)f(the)h Fs(trap)e Ft(builtin.)275 3354
+y(If)37 b(the)g(builtin)g(command)h Fs(return)d Ft(is)j(executed)g(in)g
+(a)g(function,)h(the)e(function)h(completes)h(and)150
+3463 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
+3573 y(with)36 b(the)h Fs(RETURN)d Ft(trap)i(is)h(executed)g(b)s(efore)
+f(execution)i(resumes.)57 b(When)37 b(a)f(function)g(completes,)150
+3682 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 Fs(#)p Ft(')g(are)h(restored)
+f(to)h(the)150 3792 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 Fs(return)p Ft(,)150 3902 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 4011 y(of)h(the)f(last)h
+(command)f(executed)i(b)s(efore)e(the)g Fs(return)p Ft(.)275
+4162 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 Fs(local)f Ft(builtin.)40
+b(These)29 b(v)-5 b(ariables)150 4271 y(are)31 b(visible)g(only)f(to)h
+(the)g(function)f(and)g(the)g(commands)g(it)h(in)m(v)m(ok)m(es.)275
+4422 y(F)-8 b(unction)38 b(names)f(and)g(de\014nitions)g(ma)m(y)i(b)s
+(e)e(listed)h(with)f(the)h(`)p Fs(-f)p Ft(')f(option)h(to)h(the)e
+Fs(declare)f Ft(or)150 4532 y Fs(typeset)d Ft(builtin)h(commands)h
+(\(see)h(Section)g(4.2)g([Bash)f(Builtins],)i(page)f(39\).)55
+b(The)35 b(`)p Fs(-F)p Ft(')g(option)g(to)150 4641 y
+Fs(declare)f Ft(or)i Fs(typeset)e Ft(will)i(list)h(the)f(function)g
+(names)g(only)g(\(and)g(optionally)h(the)f(source)g(\014le)h(and)150
+4751 y(line)c(n)m(um)m(b)s(er,)g(if)f(the)h Fs(extdebug)e
+Ft(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 4861 y(subshells)f
+(automatically)37 b(ha)m(v)m(e)d(them)g(de\014ned)e(with)h(the)g(`)p
+Fs(-f)p Ft(')h(option)g(to)g(the)f Fs(export)f Ft(builtin)h(\(see)150
+4970 y(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(33\).)47
+b(Note)33 b(that)g(shell)f(functions)g(and)f(v)-5 b(ariables)33
+b(with)150 5080 y(the)d(same)g(name)g(ma)m(y)g(result)g(in)g(m)m
+(ultiple)g(iden)m(tically-named)i(en)m(tries)f(in)e(the)h(en)m
+(vironmen)m(t)g(passed)150 5189 y(to)h(the)g(shell's)f(c)m(hildren.)41
+b(Care)30 b(should)g(b)s(e)f(tak)m(en)j(in)e(cases)h(where)f(this)g(ma)
+m(y)h(cause)g(a)g(problem.)275 5340 y(F)-8 b(unctions)30
+b(ma)m(y)h(b)s(e)f(recursiv)m(e.)41 b(No)31 b(limit)g(is)g(placed)g(on)
+f(the)g(n)m(um)m(b)s(er)g(of)g(recursiv)m(e)h(calls.)p
+eop end
%%Page: 15 21
-15 20 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(15)150 299 y Fr(3.4)68
-b(Shell)45 b(P)l(arameters)275 544 y Ft(A)32 b Fq(parameter)40
-b Ft(is)31 b(an)i(en)m(tit)m(y)g(that)g(stores)g(v)-5
-b(alues.)47 b(It)33 b(can)g(b)s(e)e(a)i Fs(name)p Ft(,)g(a)g(n)m(um)m
-(b)s(er,)f(or)g(one)h(of)g(the)150 654 y(sp)s(ecial)g(c)m(haracters)j
-(listed)e(b)s(elo)m(w.)52 b(A)35 b Fq(v)-5 b(ariable)39
-b Ft(is)33 b(a)i(parameter)h(denoted)e(b)m(y)h(a)g Fs(name)p
+TeXDict begin 15 20 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(15)150 299
+y Fr(3.4)68 b(Shell)45 b(P)l(arameters)275 544 y Ft(A)32
+b Fq(parameter)40 b Ft(is)32 b(an)h(en)m(tit)m(y)h(that)f(stores)g(v)-5
+b(alues.)48 b(It)33 b(can)g(b)s(e)e(a)i Fs(name)p Ft(,)g(a)g(n)m(um)m
+(b)s(er,)f(or)g(one)h(of)g(the)150 654 y(sp)s(ecial)i(c)m(haracters)h
+(listed)g(b)s(elo)m(w.)53 b(A)35 b Fq(v)-5 b(ariable)41
+b Ft(is)34 b(a)h(parameter)h(denoted)e(b)m(y)h(a)g Fs(name)p
Ft(.)52 b(A)35 b(v)-5 b(ariable)150 764 y(has)29 b(a)h
-Fq(v)-5 b(alue)34 b Ft(and)28 b(zero)j(or)e(more)g Fq(attributes)p
-Ft(.)40 b(A)m(ttributes)29 b(are)h(assigned)f(using)f(the)h
+Fq(v)-5 b(alue)35 b Ft(and)28 b(zero)j(or)e(more)g Fq(attributes)p
+Ft(.)41 b(A)m(ttributes)30 b(are)g(assigned)g(using)f(the)g
Fs(declare)e Ft(builtin)150 873 y(command)22 b(\(see)h(the)f
-(description)e(of)i(the)g Fs(declare)f Ft(builtin)d(in)j(Section)h(4.2)
-h([Bash)f(Builtins],)g(page)g(39\).)275 1009 y(A)28 b(parameter)h(is)f
-(set)h(if)e(it)h(has)g(b)s(een)g(assigned)g(a)h(v)-5
-b(alue.)39 b(The)28 b(n)m(ull)f(string)g(is)h(a)h(v)-5
-b(alid)26 b(v)-5 b(alue.)40 b(Once)150 1119 y(a)31 b(v)-5
-b(ariable)29 b(is)g(set,)j(it)d(ma)m(y)i(b)s(e)f(unset)g(only)g(b)m(y)g
-(using)f(the)h Fs(unset)f Ft(builtin)e(command.)275 1254
-y(A)j(v)-5 b(ariable)29 b(ma)m(y)i(b)s(e)f(assigned)f(to)j(b)m(y)e(a)h
+(description)g(of)g(the)g Fs(declare)f Ft(builtin)g(in)h(Section)h(4.2)
+g([Bash)f(Builtins],)j(page)d(39\).)275 1009 y(A)28 b(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 1119 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 Fs(unset)f Ft(builtin)h(command.)275 1254
+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 1390 y Fj(name)11
b Fs(=[)p Fj(value)g Fs(])150 1526 y Ft(If)34 b Fq(v)-5
-b(alue)39 b Ft(is)34 b(not)h(giv)m(en,)g(the)g(v)-5 b(ariable)33
-b(is)h(assigned)g(the)g(n)m(ull)f(string.)52 b(All)33
-b Fq(v)-5 b(alue)5 b Ft(s)34 b(undergo)g(tilde)f(ex-)150
-1636 y(pansion,)i(parameter)g(and)f(v)-5 b(ariable)34
-b(expansion,)g(command)h(substitution,)f(arithmetic)g(expansion,)150
-1745 y(and)40 b(quote)h(remo)m(v)-5 b(al)41 b(\(detailed)g(b)s(elo)m
-(w\).)71 b(If)40 b(the)h(v)-5 b(ariable)39 b(has)i(its)f
-Fs(integer)f Ft(attribute)h(set,)k(then)150 1855 y Fq(v)-5
-b(alue)37 b Ft(is)32 b(ev)-5 b(aluated)33 b(as)g(an)g(arithmetic)f
-(expression)g(ev)m(en)i(if)d(the)i Fs($\(\(...)o(\)\))f
-Ft(expansion)g(is)g(not)h(used)150 1965 y(\(see)e(Section)f(3.5.5)j
-([Arithmetic)c(Expansion],)g(page)i(21\).)42 b(W)-8 b(ord)31
-b(splitting)d(is)i(not)g(p)s(erformed,)f(with)150 2074
-y(the)35 b(exception)g(of)g Fs("$@")f Ft(as)h(explained)e(b)s(elo)m(w.)
-53 b(Filename)34 b(expansion)g(is)g(not)h(p)s(erformed.)53
-b(Assign-)150 2184 y(men)m(t)33 b(statemen)m(ts)h(ma)m(y)f(also)f(app)s
-(ear)g(as)g(argumen)m(ts)h(to)g(the)g Fs(alias)p Ft(,)e
-Fs(declare)p Ft(,)g Fs(typeset)p Ft(,)g Fs(export)p Ft(,)150
-2293 y Fs(readonly)p Ft(,)d(and)i Fs(local)f Ft(builtin)e(commands.)150
+b(alue)40 b Ft(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 Fq(v)-5 b(alue)5 b Ft(s)35 b(undergo)f(tilde)h(ex-)150
+1636 y(pansion,)h(parameter)f(and)f(v)-5 b(ariable)36
+b(expansion,)f(command)g(substitution,)h(arithmetic)g(expansion,)150
+1745 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 Fs(integer)e
+Ft(attribute)i(set,)j(then)150 1855 y Fq(v)-5 b(alue)38
+b Ft(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 Fs($\(\(...)o(\)\))f Ft(expansion)h(is)g(not)g
+(used)150 1965 y(\(see)e(Section)g(3.5.5)i([Arithmetic)e(Expansion],)f
+(page)h(21\).)42 b(W)-8 b(ord)31 b(splitting)g(is)g(not)f(p)s
+(erformed,)f(with)150 2074 y(the)35 b(exception)h(of)f
+Fs("$@")f Ft(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
+2184 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 Fs(alias)p Ft(,)e Fs(declare)p
+Ft(,)g Fs(typeset)p Ft(,)g Fs(export)p Ft(,)150 2293
+y Fs(readonly)p Ft(,)d(and)i Fs(local)f Ft(builtin)h(commands.)150
2520 y Fk(3.4.1)63 b(P)m(ositional)41 b(P)m(arameters)275
-2766 y Ft(A)36 b Fq(p)s(ositional)f(parameter)44 b Ft(is)36
-b(a)h(parameter)g(denoted)g(b)m(y)g(one)g(or)g(more)g(digits,)g(other)g
-(than)g(the)150 2875 y(single)i(digit)f Fs(0)p Ft(.)69
-b(P)m(ositional)39 b(parameters)i(are)f(assigned)f(from)h(the)g
-(shell's)e(argumen)m(ts)i(when)f(it)h(is)150 2985 y(in)m(v)m(ok)m(ed,)f
-(and)e(ma)m(y)g(b)s(e)g(reassigned)f(using)f(the)j Fs(set)e
-Ft(builtin)d(command.)61 b(P)m(ositional)36 b(parameter)h
+2766 y Ft(A)36 b Fq(p)s(ositional)i(parameter)44 b Ft(is)37
+b(a)g(parameter)g(denoted)g(b)m(y)g(one)g(or)g(more)g(digits,)i(other)e
+(than)g(the)150 2875 y(single)k(digit)f Fs(0)p Ft(.)69
+b(P)m(ositional)42 b(parameters)f(are)f(assigned)g(from)g(the)g
+(shell's)g(argumen)m(ts)g(when)f(it)i(is)150 2985 y(in)m(v)m(ok)m(ed,)f
+(and)d(ma)m(y)g(b)s(e)g(reassigned)g(using)f(the)i Fs(set)e
+Ft(builtin)g(command.)61 b(P)m(ositional)39 b(parameter)e
Fs(N)150 3094 y Ft(ma)m(y)27 b(b)s(e)g(referenced)f(as)h
-Fs(${N})p Ft(,)g(or)g(as)g Fs($N)f Ft(when)g Fs(N)g Ft(consists)h(of)g
-(a)g(single)e(digit.)39 b(P)m(ositional)26 b(parameters)150
-3204 y(ma)m(y)32 b(not)f(b)s(e)g(assigned)g(to)h(with)e(assignmen)m(t)h
+Fs(${N})p Ft(,)g(or)g(as)g Fs($N)f Ft(when)g Fs(N)g Ft(consists)i(of)f
+(a)g(single)g(digit.)41 b(P)m(ositional)29 b(parameters)150
+3204 y(ma)m(y)j(not)f(b)s(e)g(assigned)h(to)g(with)f(assignmen)m(t)h
(statemen)m(ts.)45 b(The)30 b Fs(set)h Ft(and)g Fs(shift)e
-Ft(builtins)f(are)k(used)150 3314 y(to)h(set)f(and)f(unset)h(them)g
-(\(see)h(Chapter)e(4)h([Shell)e(Builtin)g(Commands],)h(page)i(33\).)47
+Ft(builtins)i(are)h(used)150 3314 y(to)h(set)f(and)f(unset)h(them)g
+(\(see)h(Chapter)e(4)h([Shell)g(Builtin)h(Commands],)e(page)i(33\).)47
b(The)31 b(p)s(ositional)150 3423 y(parameters)24 b(are)g(temp)s
-(orarily)e(replaced)i(when)e(a)j(shell)d(function)g(is)h(executed)i
-(\(see)f(Section)g(3.3)h([Shell)150 3533 y(F)-8 b(unctions],)30
-b(page)i(13\).)275 3669 y(When)27 b(a)i(p)s(ositional)d(parameter)j
-(consisting)d(of)j(more)f(than)g(a)g(single)f(digit)g(is)g(expanded,)h
-(it)g(m)m(ust)150 3778 y(b)s(e)i(enclosed)g(in)f(braces.)150
+(orarily)g(replaced)h(when)d(a)j(shell)f(function)f(is)h(executed)h
+(\(see)f(Section)h(3.3)g([Shell)150 3533 y(F)-8 b(unctions],)31
+b(page)h(13\).)275 3669 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 3778 y(b)s(e)h(enclosed)h(in)f(braces.)150
4005 y Fk(3.4.2)63 b(Sp)s(ecial)41 b(P)m(arameters)275
-4251 y Ft(The)27 b(shell)f(treats)j(sev)m(eral)f(parameters)h(sp)s
-(ecially)-8 b(.)38 b(These)28 b(parameters)g(ma)m(y)g(only)f(b)s(e)h
-(referenced;)150 4360 y(assignmen)m(t)i(to)h(them)g(is)e(not)i(allo)m
+4251 y Ft(The)27 b(shell)h(treats)h(sev)m(eral)g(parameters)g(sp)s
+(ecially)-8 b(.)41 b(These)28 b(parameters)g(ma)m(y)g(only)g(b)s(e)g
+(referenced;)150 4360 y(assignmen)m(t)j(to)g(them)g(is)f(not)h(allo)m
(w)m(ed.)150 4522 y Fs(*)432 b Ft(Expands)29 b(to)h(the)h(p)s
-(ositional)c(parameters,)k(starting)f(from)f(one.)41
-b(When)30 b(the)g(expansion)630 4631 y(o)s(ccurs)e(within)d(double)i
-(quotes,)i(it)f(expands)f(to)i(a)f(single)f(w)m(ord)h(with)f(the)h(v)-5
-b(alue)28 b(of)g(eac)m(h)630 4741 y(parameter)i(separated)g(b)m(y)f
-(the)g(\014rst)g(c)m(haracter)i(of)e(the)h Fs(IFS)e Ft(sp)s(ecial)g(v)
--5 b(ariable.)39 b(That)30 b(is,)630 4850 y Fs("$*")h
-Ft(is)h(equiv)-5 b(alen)m(t)31 b(to)j Fs("$1)p Fj(c)11
+(ositional)f(parameters,)h(starting)g(from)e(one.)41
+b(When)30 b(the)g(expansion)630 4631 y(o)s(ccurs)e(within)f(double)h
+(quotes,)h(it)g(expands)e(to)i(a)f(single)h(w)m(ord)f(with)g(the)g(v)-5
+b(alue)29 b(of)f(eac)m(h)630 4741 y(parameter)i(separated)g(b)m(y)f
+(the)g(\014rst)g(c)m(haracter)i(of)e(the)h Fs(IFS)e Ft(sp)s(ecial)i(v)
+-5 b(ariable.)41 b(That)30 b(is,)630 4850 y Fs("$*")h
+Ft(is)i(equiv)-5 b(alen)m(t)33 b(to)h Fs("$1)p Fj(c)11
b Fs($2)p Fj(c)g Fs(...)l(")p Ft(,)33 b(where)f Fq(c)38
-b Ft(is)31 b(the)i(\014rst)e(c)m(haracter)j(of)f(the)f(v)-5
-b(alue)630 4960 y(of)30 b(the)g Fs(IFS)g Ft(v)-5 b(ariable.)39
-b(If)30 b Fs(IFS)f Ft(is)g(unset,)h(the)g(parameters)g(are)h(separated)
-f(b)m(y)g(spaces.)41 b(If)630 5070 y Fs(IFS)29 b Ft(is)h(n)m(ull,)e
-(the)j(parameters)g(are)f(joined)g(without)f(in)m(terv)m(ening)h
+b Ft(is)32 b(the)h(\014rst)e(c)m(haracter)j(of)f(the)f(v)-5
+b(alue)630 4960 y(of)30 b(the)g Fs(IFS)g Ft(v)-5 b(ariable.)41
+b(If)30 b Fs(IFS)f Ft(is)h(unset,)g(the)g(parameters)g(are)h(separated)
+f(b)m(y)g(spaces.)41 b(If)630 5070 y Fs(IFS)29 b Ft(is)i(n)m(ull,)f
+(the)h(parameters)g(are)f(joined)h(without)f(in)m(terv)m(ening)i
(separators.)150 5230 y Fs(@)432 b Ft(Expands)39 b(to)i(the)g(p)s
-(ositional)d(parameters,)44 b(starting)c(from)g(one.)71
-b(When)40 b(the)h(expan-)630 5340 y(sion)30 b(o)s(ccurs)h(within)d
-(double)i(quotes,)i(eac)m(h)g(parameter)g(expands)e(to)i(a)f(separate)h
-(w)m(ord.)p eop
+(ositional)g(parameters,)j(starting)d(from)f(one.)71
+b(When)40 b(the)h(expan-)630 5340 y(sion)31 b(o)s(ccurs)g(within)f
+(double)h(quotes,)h(eac)m(h)g(parameter)g(expands)e(to)i(a)f(separate)h
+(w)m(ord.)p eop end
%%Page: 16 22
-16 21 bop 150 -116 a Ft(16)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(That)38 b(is,)i Fs("$@")d Ft(is)h(equiv)-5 b(alen)m(t)38
-b(to)h Fs("$1")29 b("$2")g(...)o Ft(.)65 b(When)38 b(there)h(are)g(no)f
-(p)s(ositional)630 408 y(parameters,)31 b Fs("$@")e Ft(and)h
-Fs($@)g Ft(expand)f(to)i(nothing)f(\(i.e.,)h(they)f(are)h(remo)m(v)m
-(ed\).)150 568 y Fs(#)432 b Ft(Expands)29 b(to)i(the)g(n)m(um)m(b)s(er)
-e(of)h(p)s(ositional)e(parameters)j(in)e(decimal.)150
-727 y Fs(?)432 b Ft(Expands)29 b(to)i(the)g(exit)f(status)h(of)f(the)h
-(most)f(recen)m(tly)h(executed)g(foreground)f(pip)s(eline.)150
-886 y Fs(-)432 b Ft(\(A)31 b(h)m(yphen.\))42 b(Expands)30
-b(to)h(the)g(curren)m(t)g(option)g(\015ags)g(as)g(sp)s(eci\014ed)e(up)s
-(on)h(in)m(v)m(o)s(cation,)630 996 y(b)m(y)35 b(the)h
-Fs(set)e Ft(builtin)e(command,)k(or)g(those)g(set)f(b)m(y)h(the)f
-(shell)f(itself)g(\(suc)m(h)h(as)h(the)f(`)p Fs(-i)p
-Ft(')630 1105 y(option\).)150 1264 y Fs($)432 b Ft(Expands)39
-b(to)j(the)f(pro)s(cess)f Fl(id)h Ft(of)g(the)g(shell.)71
-b(In)40 b(a)h Fs(\(\))f Ft(subshell,)h(it)f(expands)g(to)i(the)630
-1374 y(pro)s(cess)30 b Fl(id)g Ft(of)h(the)g(in)m(v)m(oking)e(shell,)g
-(not)i(the)f(subshell.)150 1533 y Fs(!)432 b Ft(Expands)39
-b(to)i(the)g(pro)s(cess)e Fl(id)i Ft(of)f(the)h(most)g(recen)m(tly)f
-(executed)h(bac)m(kground)g(\(asyn-)630 1643 y(c)m(hronous\))30
+TeXDict begin 16 21 bop 150 -116 a Ft(16)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(That)38 b(is,)j Fs("$@")c
+Ft(is)i(equiv)-5 b(alen)m(t)40 b(to)f Fs("$1")29 b("$2")g(...)o
+Ft(.)65 b(When)38 b(there)h(are)g(no)f(p)s(ositional)630
+408 y(parameters,)31 b Fs("$@")e Ft(and)h Fs($@)g Ft(expand)f(to)i
+(nothing)g(\(i.e.,)h(they)e(are)h(remo)m(v)m(ed\).)150
+568 y Fs(#)432 b Ft(Expands)29 b(to)i(the)g(n)m(um)m(b)s(er)e(of)h(p)s
+(ositional)h(parameters)g(in)f(decimal.)150 727 y Fs(?)432
+b Ft(Expands)29 b(to)i(the)g(exit)g(status)g(of)f(the)h(most)f(recen)m
+(tly)i(executed)f(foreground)f(pip)s(eline.)150 886 y
+Fs(-)432 b Ft(\(A)31 b(h)m(yphen.\))42 b(Expands)30 b(to)h(the)g
+(curren)m(t)g(option)h(\015ags)f(as)g(sp)s(eci\014ed)f(up)s(on)g(in)m
+(v)m(o)s(cation,)630 996 y(b)m(y)35 b(the)h Fs(set)e
+Ft(builtin)h(command,)h(or)g(those)g(set)f(b)m(y)h(the)f(shell)h
+(itself)g(\(suc)m(h)f(as)h(the)f(`)p Fs(-i)p Ft(')630
+1105 y(option\).)150 1264 y Fs($)432 b Ft(Expands)39
+b(to)j(the)f(pro)s(cess)f Fl(id)h Ft(of)g(the)g(shell.)73
+b(In)40 b(a)h Fs(\(\))f Ft(subshell,)j(it)e(expands)f(to)i(the)630
+1374 y(pro)s(cess)30 b Fl(id)g Ft(of)h(the)g(in)m(v)m(oking)g(shell,)g
+(not)g(the)f(subshell.)150 1533 y Fs(!)432 b Ft(Expands)39
+b(to)i(the)g(pro)s(cess)e Fl(id)i Ft(of)f(the)h(most)g(recen)m(tly)g
+(executed)g(bac)m(kground)g(\(asyn-)630 1643 y(c)m(hronous\))30
b(command.)150 1802 y Fs(0)432 b Ft(Expands)20 b(to)j(the)f(name)g(of)g
-(the)g(shell)e(or)h(shell)f(script.)37 b(This)20 b(is)h(set)h(at)h
-(shell)d(initialization.)630 1911 y(If)44 b(Bash)g(is)f(in)m(v)m(ok)m
-(ed)i(with)e(a)h(\014le)f(of)i(commands)e(\(see)j(Section)e(3.8)h
-([Shell)d(Scripts],)630 2021 y(page)d(31\),)i Fs($0)d
-Ft(is)f(set)h(to)h(the)f(name)g(of)g(that)h(\014le.)63
-b(If)37 b(Bash)i(is)e(started)h(with)f(the)h(`)p Fs(-c)p
-Ft(')630 2131 y(option)h(\(see)h(Section)g(6.1)g([In)m(v)m(oking)g
-(Bash],)i(page)e(63\),)j(then)d Fs($0)e Ft(is)h(set)h(to)g(the)g
-(\014rst)630 2240 y(argumen)m(t)31 b(after)g(the)g(string)f(to)h(b)s(e)
-f(executed,)i(if)e(one)h(is)e(presen)m(t.)42 b(Otherwise,)30
-b(it)g(is)f(set)630 2350 y(to)i(the)g(\014lename)e(used)h(to)h(in)m(v)m
-(ok)m(e)g(Bash,)g(as)g(giv)m(en)f(b)m(y)g(argumen)m(t)h(zero.)150
+(the)g(shell)g(or)f(shell)h(script.)38 b(This)21 b(is)h(set)g(at)h
+(shell)f(initialization.)630 1911 y(If)44 b(Bash)g(is)g(in)m(v)m(ok)m
+(ed)i(with)e(a)g(\014le)g(of)h(commands)e(\(see)j(Section)f(3.8)g
+([Shell)f(Scripts],)630 2021 y(page)39 b(31\),)i Fs($0)d
+Ft(is)g(set)g(to)h(the)f(name)g(of)g(that)h(\014le.)64
+b(If)37 b(Bash)i(is)f(started)g(with)g(the)g(`)p Fs(-c)p
+Ft(')630 2131 y(option)i(\(see)g(Section)h(6.1)f([In)m(v)m(oking)h
+(Bash],)h(page)e(63\),)j(then)d Fs($0)e Ft(is)i(set)g(to)g(the)g
+(\014rst)630 2240 y(argumen)m(t)31 b(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 2350 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
2509 y Fs(_)432 b Ft(\(An)34 b(underscore.\))50 b(A)m(t)34
-b(shell)e(startup,)j(set)f(to)g(the)g(absolute)f(\014lename)g(of)h(the)
-g(shell)e(or)630 2619 y(shell)j(script)i(b)s(eing)e(executed)j(as)g
-(passed)f(in)f(the)h(argumen)m(t)h(list.)60 b(Subsequen)m(tly)-8
-b(,)37 b(ex-)630 2728 y(pands)f(to)i(the)g(last)f(argumen)m(t)h(to)h
-(the)e(previous)f(command,)j(after)f(expansion.)61 b(Also)630
-2838 y(set)30 b(to)f(the)h(full)c(pathname)j(of)h(eac)m(h)g(command)f
-(executed)h(and)e(placed)h(in)e(the)j(en)m(viron-)630
+b(shell)g(startup,)h(set)f(to)g(the)g(absolute)g(\014lename)g(of)g(the)
+g(shell)g(or)630 2619 y(shell)j(script)h(b)s(eing)e(executed)i(as)g
+(passed)f(in)g(the)g(argumen)m(t)h(list.)62 b(Subsequen)m(tly)-8
+b(,)38 b(ex-)630 2728 y(pands)e(to)i(the)g(last)g(argumen)m(t)g(to)h
+(the)e(previous)g(command,)i(after)f(expansion.)62 b(Also)630
+2838 y(set)30 b(to)f(the)h(full)e(pathname)h(of)h(eac)m(h)g(command)f
+(executed)h(and)e(placed)i(in)e(the)i(en)m(viron-)630
2947 y(men)m(t)37 b(exp)s(orted)f(to)h(that)h(command.)58
-b(When)37 b(c)m(hec)m(king)g(mail,)g(this)e(parameter)i(holds)630
-3057 y(the)31 b(name)f(of)h(the)f(mail)f(\014le.)150
-3314 y Fr(3.5)68 b(Shell)45 b(Expansions)275 3558 y Ft(Expansion)28
-b(is)h(p)s(erformed)f(on)i(the)g(command)g(line)e(after)j(it)e(has)h(b)
-s(een)f(split)f(in)m(to)i Fs(token)p Ft(s.)39 b(There)150
-3667 y(are)31 b(sev)m(en)g(kinds)d(of)j(expansion)e(p)s(erformed:)225
+b(When)37 b(c)m(hec)m(king)h(mail,)h(this)d(parameter)h(holds)630
+3057 y(the)31 b(name)f(of)h(the)f(mail)h(\014le.)150
+3314 y Fr(3.5)68 b(Shell)45 b(Expansions)275 3558 y Ft(Expansion)29
+b(is)h(p)s(erformed)e(on)i(the)g(command)g(line)g(after)h(it)f(has)g(b)
+s(een)f(split)h(in)m(to)h Fs(token)p Ft(s.)39 b(There)150
+3667 y(are)31 b(sev)m(en)g(kinds)e(of)i(expansion)f(p)s(erformed:)225
3802 y Fp(\017)60 b Ft(brace)31 b(expansion)225 3936
-y Fp(\017)60 b Ft(tilde)29 b(expansion)225 4071 y Fp(\017)60
-b Ft(parameter)31 b(and)f(v)-5 b(ariable)29 b(expansion)225
+y Fp(\017)60 b Ft(tilde)31 b(expansion)225 4071 y Fp(\017)60
+b Ft(parameter)31 b(and)f(v)-5 b(ariable)31 b(expansion)225
4205 y Fp(\017)60 b Ft(command)30 b(substitution)225
-4339 y Fp(\017)60 b Ft(arithmetic)30 b(expansion)225
+4339 y Fp(\017)60 b Ft(arithmetic)32 b(expansion)225
4474 y Fp(\017)60 b Ft(w)m(ord)30 b(splitting)225 4608
-y Fp(\017)60 b Ft(\014lename)30 b(expansion)275 4767
-y(The)j(order)g(of)h(expansions)f(is:)46 b(brace)34 b(expansion,)g
-(tilde)f(expansion,)g(parameter,)j(v)-5 b(ariable,)34
-b(and)150 4877 y(arithmetic)44 b(expansion)g(and)h(command)f
-(substitution)f(\(done)i(in)f(a)h(left-to-righ)m(t)h(fashion\),)i(w)m
-(ord)150 4986 y(splitting,)28 b(and)i(\014lename)g(expansion.)275
-5121 y(On)42 b(systems)h(that)h(can)g(supp)s(ort)e(it,)k(there)e(is)e
-(an)i(additional)d(expansion)h(a)m(v)-5 b(ailable:)66
-b Fq(pro)s(cess)150 5230 y(substitution)p Ft(.)59 b(This)35
-b(is)h(p)s(erformed)g(at)i(the)f(same)h(time)e(as)i(parameter,)h(v)-5
-b(ariable,)38 b(and)f(arithmetic)150 5340 y(expansion)29
-b(and)h(command)g(substitution.)p eop
+y Fp(\017)60 b Ft(\014lename)31 b(expansion)275 4767
+y(The)i(order)g(of)h(expansions)g(is:)47 b(brace)34 b(expansion,)h
+(tilde)g(expansion,)f(parameter,)i(v)-5 b(ariable,)36
+b(and)150 4877 y(arithmetic)46 b(expansion)f(and)g(command)f
+(substitution)h(\(done)g(in)g(a)g(left-to-righ)m(t)j(fashion\),)h(w)m
+(ord)150 4986 y(splitting,)31 b(and)f(\014lename)h(expansion.)275
+5121 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 Fq(pro)s(cess)150 5230 y(substitution)p
+Ft(.)61 b(This)36 b(is)h(p)s(erformed)f(at)i(the)f(same)h(time)f(as)h
+(parameter,)h(v)-5 b(ariable,)40 b(and)d(arithmetic)150
+5340 y(expansion)30 b(and)g(command)g(substitution.)p
+eop end
%%Page: 17 23
-17 22 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(17)275 299 y(Only)34
-b(brace)j(expansion,)g(w)m(ord)f(splitting,)g(and)g(\014lename)f
-(expansion)g(can)i(c)m(hange)h(the)e(n)m(um)m(b)s(er)150
-408 y(of)h(w)m(ords)f(of)g(the)h(expansion;)h(other)f(expansions)e
-(expand)h(a)h(single)e(w)m(ord)h(to)h(a)g(single)e(w)m(ord.)58
-b(The)150 518 y(only)31 b(exceptions)i(to)g(this)e(are)i(the)f
-(expansions)f(of)i Fs("$@")e Ft(\(see)i(Section)f(3.4.2)i([Sp)s(ecial)d
-(P)m(arameters],)150 628 y(page)g(15\))h(and)d Fs("${)p
-Fj(name)11 b Fs([@]}")27 b Ft(\(see)k(Section)g(6.7)g([Arra)m(ys],)g
-(page)g(72\).)275 787 y(After)41 b(all)g(expansions,)i
-Fs(quote)29 b(removal)40 b Ft(\(see)i(Section)g(3.5.9)h([Quote)f(Remo)m
-(v)-5 b(al],)46 b(page)c(24\))h(is)150 897 y(p)s(erformed.)150
+TeXDict begin 17 22 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(17)275 299
+y(Only)35 b(brace)i(expansion,)h(w)m(ord)e(splitting,)j(and)d
+(\014lename)g(expansion)g(can)h(c)m(hange)h(the)e(n)m(um)m(b)s(er)150
+408 y(of)h(w)m(ords)f(of)g(the)h(expansion;)i(other)e(expansions)f
+(expand)g(a)h(single)g(w)m(ord)f(to)h(a)g(single)g(w)m(ord.)58
+b(The)150 518 y(only)32 b(exceptions)i(to)f(this)f(are)h(the)f
+(expansions)g(of)h Fs("$@")e Ft(\(see)i(Section)g(3.4.2)h([Sp)s(ecial)f
+(P)m(arameters],)150 628 y(page)e(15\))h(and)d Fs("${)p
+Fj(name)11 b Fs([@]}")27 b Ft(\(see)k(Section)h(6.7)f([Arra)m(ys],)g
+(page)g(72\).)275 787 y(After)41 b(all)i(expansions,)h
+Fs(quote)29 b(removal)40 b Ft(\(see)i(Section)h(3.5.9)g([Quote)f(Remo)m
+(v)-5 b(al],)47 b(page)42 b(24\))h(is)150 897 y(p)s(erformed.)150
1172 y Fk(3.5.1)63 b(Brace)40 b(Expansion)275 1441 y
-Ft(Brace)21 b(expansion)f(is)g(a)h(mec)m(hanism)f(b)m(y)h(whic)m(h)e
-(arbitrary)h(strings)f(ma)m(y)j(b)s(e)e(generated.)38
-b(This)19 b(mec)m(h-)150 1551 y(anism)34 b(is)h(similar)d(to)k
-Fq(\014lename)f(expansion)f Ft(\(see)j(Section)e(3.5.8)i([Filename)e
-(Expansion],)g(page)h(22\),)150 1660 y(but)31 b(the)h(\014le)f(names)g
-(generated)i(need)f(not)g(exist.)44 b(P)m(atterns)33
+Ft(Brace)21 b(expansion)g(is)g(a)g(mec)m(hanism)g(b)m(y)g(whic)m(h)f
+(arbitrary)h(strings)f(ma)m(y)i(b)s(e)e(generated.)38
+b(This)20 b(mec)m(h-)150 1551 y(anism)35 b(is)h(similar)f(to)h
+Fq(\014lename)g(expansion)f Ft(\(see)i(Section)f(3.5.8)h([Filename)g
+(Expansion],)f(page)g(22\),)150 1660 y(but)31 b(the)h(\014le)g(names)f
+(generated)i(need)f(not)g(exist.)45 b(P)m(atterns)33
b(to)f(b)s(e)f(brace)h(expanded)f(tak)m(e)i(the)f(form)150
-1770 y(of)26 b(an)f(optional)f Fq(pream)m(ble)p Ft(,)i(follo)m(w)m(ed)f
-(b)m(y)h(either)f(a)g(series)g(of)h(comma-separated)h(strings)d(or)h(a)
-h(sequnce)150 1879 y(expression)35 b(b)s(et)m(w)m(een)h(a)h(pair)d(of)j
-(braces,)g(follo)m(w)m(ed)f(b)m(y)g(an)g(optional)f Fq(p)s(ostscript)p
-Ft(.)56 b(The)36 b(pream)m(ble)f(is)150 1989 y(pre\014xed)28
-b(to)h(eac)m(h)h(string)e(con)m(tained)h(within)d(the)j(braces,)g(and)g
-(the)g(p)s(ostscript)e(is)h(then)g(app)s(ended)f(to)150
-2099 y(eac)m(h)32 b(resulting)c(string,)i(expanding)e(left)j(to)g(righ)
-m(t.)275 2258 y(Brace)37 b(expansions)e(ma)m(y)i(b)s(e)f(nested.)59
-b(The)36 b(results)f(of)i(eac)m(h)g(expanded)f(string)f(are)i(not)g
-(sorted;)150 2368 y(left)30 b(to)h(righ)m(t)f(order)g(is)f(preserv)m
+1770 y(of)26 b(an)f(optional)h Fq(pream)m(ble)p Ft(,)h(follo)m(w)m(ed)g
+(b)m(y)f(either)g(a)f(series)h(of)g(comma-separated)h(strings)e(or)g(a)
+h(sequnce)150 1879 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 Fq(p)s(ostscript)p
+Ft(.)57 b(The)36 b(pream)m(ble)g(is)150 1989 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
+2099 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ)
+m(t.)275 2258 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 2368 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 2528 y Fs(bash$)46
b(echo)h(a{d,c,b}e)390 2637 y(ade)g(ace)g(abe)275 2797
-y Ft(A)24 b(sequence)h(expression)f(tak)m(es)i(the)f(form)f
+y Ft(A)24 b(sequence)h(expression)g(tak)m(es)h(the)f(form)f
Fs({)p Fj(x)p Fs(..)p Fj(y)11 b Fs(})p Ft(,)23 b(where)i
-Fq(x)30 b Ft(and)24 b Fq(y)33 b Ft(are)25 b(either)f(in)m(tegers)h(or)f
-(single)150 2907 y(c)m(haracters.)43 b(When)30 b(in)m(tegers)h(are)g
-(supplied,)c(the)k(expression)e(expands)h(to)h(eac)m(h)h(n)m(um)m(b)s
+Fq(x)30 b Ft(and)24 b Fq(y)33 b Ft(are)25 b(either)g(in)m(tegers)h(or)e
+(single)150 2907 y(c)m(haracters.)43 b(When)30 b(in)m(tegers)i(are)f
+(supplied,)e(the)i(expression)f(expands)g(to)h(eac)m(h)h(n)m(um)m(b)s
(er)d(b)s(et)m(w)m(een)i Fq(x)150 3016 y Ft(and)i Fq(y)p
-Ft(,)i(inclusiv)m(e.)50 b(When)34 b(c)m(haracters)h(are)f(supplied,)e
-(the)j(expression)d(expands)h(to)i(eac)m(h)g(c)m(haracter)150
-3126 y(lexicographically)28 b(b)s(et)m(w)m(een)j Fq(x)37
-b Ft(and)30 b Fq(y)p Ft(,)h(inclusiv)m(e.)39 b(Note)31
+Ft(,)i(inclusiv)m(e.)53 b(When)34 b(c)m(haracters)h(are)f(supplied,)g
+(the)h(expression)e(expands)g(to)i(eac)m(h)g(c)m(haracter)150
+3126 y(lexicographically)e(b)s(et)m(w)m(een)e Fq(x)37
+b Ft(and)30 b Fq(y)p Ft(,)h(inclusiv)m(e.)42 b(Note)31
b(that)g(b)s(oth)f Fq(x)37 b Ft(and)30 b Fq(y)38 b Ft(m)m(ust)30
b(b)s(e)g(of)h(the)g(same)150 3235 y(t)m(yp)s(e.)275
-3395 y(Brace)36 b(expansion)f(is)f(p)s(erformed)g(b)s(efore)h(an)m(y)h
-(other)g(expansions,)g(and)f(an)m(y)g(c)m(haracters)i(sp)s(ecial)150
-3505 y(to)32 b(other)g(expansions)f(are)h(preserv)m(ed)f(in)g(the)g
-(result.)44 b(It)32 b(is)f(strictly)f(textual.)45 b(Bash)32
-b(do)s(es)f(not)h(apply)150 3614 y(an)m(y)27 b(syn)m(tactic)h(in)m
-(terpretation)f(to)h(the)f(con)m(text)i(of)e(the)g(expansion)f(or)h
+3395 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
+3505 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 3614 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.)150 3724
-y(T)-8 b(o)37 b(a)m(v)m(oid)f(con\015icts)g(with)f(parameter)i
-(expansion,)f(the)h(string)e(`)p Fs(${)p Ft(')h(is)f(not)h(considered)f
-(eligible)f(for)150 3833 y(brace)d(expansion.)275 3993
-y(A)e(correctly-formed)h(brace)g(expansion)e(m)m(ust)i(con)m(tain)g
-(unquoted)f(op)s(ening)f(and)h(closing)g(braces,)150
-4103 y(and)j(at)i(least)f(one)g(unquoted)g(comma)g(or)g(a)h(v)-5
-b(alid)31 b(sequence)i(expression.)47 b(An)m(y)33 b(incorrectly)f
-(formed)150 4212 y(brace)f(expansion)e(is)g(left)h(unc)m(hanged.)275
+y(T)-8 b(o)37 b(a)m(v)m(oid)g(con\015icts)g(with)f(parameter)h
+(expansion,)g(the)g(string)f(`)p Fs(${)p Ft(')g(is)g(not)g(considered)g
+(eligible)i(for)150 3833 y(brace)31 b(expansion.)275
+3993 y(A)e(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
+4103 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 4212 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275
4372 y(A)25 b Fs({)g Ft(or)g(`)p Fs(,)p Ft(')g(ma)m(y)h(b)s(e)f(quoted)
-g(with)f(a)i(bac)m(kslash)e(to)i(prev)m(en)m(t)g(its)f(b)s(eing)f
-(considered)g(part)h(of)g(a)h(brace)150 4482 y(expression.)50
-b(T)-8 b(o)34 b(a)m(v)m(oid)h(con\015icts)e(with)g(parameter)h
-(expansion,)g(the)g(string)f(`)p Fs(${)p Ft(')h(is)f(not)h(considered)
-150 4591 y(eligible)28 b(for)i(brace)h(expansion.)275
-4751 y(This)e(construct)i(is)f(t)m(ypically)g(used)g(as)h(shorthand)f
-(when)g(the)h(common)g(pre\014x)f(of)h(the)g(strings)f(to)150
-4861 y(b)s(e)g(generated)h(is)f(longer)g(than)g(in)f(the)h(ab)s(o)m(v)m
+g(with)g(a)h(bac)m(kslash)f(to)h(prev)m(en)m(t)g(its)g(b)s(eing)f
+(considered)g(part)g(of)g(a)h(brace)150 4482 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 Fs(${)p Ft(')g(is)g(not)g(considered)
+150 4591 y(eligible)e(for)e(brace)h(expansion.)275 4751
+y(This)f(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
+4861 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 5020 y Fs(mkdir)46 b(/usr/local/src/bash/{old,n)o
(ew,)o(dist)o(,bug)o(s})275 5180 y Ft(or)390 5340 y Fs(chown)g(root)h
(/usr/{ucb/{ex,edit},lib/)o({ex?)o(.?*,)o(how)o(_ex})o(})p
-eop
+eop end
%%Page: 18 24
-18 23 bop 150 -116 a Ft(18)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)275 541 y Ft(If)i(a)i(w)m(ord)
-e(b)s(egins)g(with)f(an)i(unquoted)f(tilde)g(c)m(haracter)j(\(`)p
-Fs(~)p Ft('\),)i(all)43 b(of)i(the)f(c)m(haracters)h(up)e(to)150
-651 y(the)35 b(\014rst)f(unquoted)f(slash)h(\(or)h(all)e(c)m
-(haracters,)k(if)d(there)h(is)e(no)i(unquoted)e(slash\))h(are)h
-(considered)f(a)150 760 y Fq(tilde-pre\014x)p Ft(.)53
-b(If)35 b(none)g(of)g(the)g(c)m(haracters)i(in)c(the)j(tilde-pre\014x)d
-(are)i(quoted,)i(the)e(c)m(haracters)i(in)d(the)150 870
-y(tilde-pre\014x)25 b(follo)m(wing)g(the)i(tilde)f(are)h(treated)h(as)f
-(a)g(p)s(ossible)d Fq(login)i(name)p Ft(.)39 b(If)27
-b(this)e(login)h(name)h(is)f(the)150 979 y(n)m(ull)j(string,)i(the)g
-(tilde)f(is)h(replaced)g(with)f(the)h(v)-5 b(alue)31
-b(of)g(the)h Fs(HOME)e Ft(shell)f(v)-5 b(ariable.)43
-b(If)31 b Fs(HOME)f Ft(is)g(unset,)150 1089 y(the)37
-b(home)f(directory)g(of)h(the)f(user)g(executing)h(the)g(shell)d(is)i
-(substituted)f(instead.)58 b(Otherwise,)37 b(the)150
-1198 y(tilde-pre\014x)28 b(is)i(replaced)g(with)f(the)h(home)h
-(directory)f(asso)s(ciated)g(with)f(the)i(sp)s(eci\014ed)e(login)g
-(name.)275 1331 y(If)j(the)h(tilde-pre\014x)d(is)i(`)p
-Fs(~+)p Ft(',)h(the)g(v)-5 b(alue)32 b(of)h(the)g(shell)e(v)-5
-b(ariable)32 b Fs(PWD)f Ft(replaces)i(the)g(tilde-pre\014x.)45
-b(If)150 1441 y(the)31 b(tilde-pre\014x)d(is)h(`)p Fs(~-)p
-Ft(',)i(the)f(v)-5 b(alue)30 b(of)h(the)f(shell)f(v)-5
-b(ariable)29 b Fs(OLDPWD)p Ft(,)g(if)g(it)h(is)g(set,)h(is)e
-(substituted.)275 1573 y(If)g(the)h(c)m(haracters)h(follo)m(wing)e(the)
-h(tilde)e(in)h(the)h(tilde-pre\014x)e(consist)h(of)h(a)h(n)m(um)m(b)s
+TeXDict begin 18 23 bop 150 -116 a Ft(18)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fk(3.5.2)63 b(Tilde)41
+b(Expansion)275 541 y Ft(If)i(a)i(w)m(ord)e(b)s(egins)h(with)f(an)h
+(unquoted)f(tilde)i(c)m(haracter)h(\(`)p Fs(~)p Ft('\),)i(all)d(of)g
+(the)f(c)m(haracters)h(up)e(to)150 651 y(the)35 b(\014rst)f(unquoted)f
+(slash)i(\(or)g(all)g(c)m(haracters,)i(if)e(there)g(is)f(no)h(unquoted)
+e(slash\))i(are)g(considered)g(a)150 760 y Fq(tilde-pre\014x)p
+Ft(.)55 b(If)35 b(none)g(of)g(the)g(c)m(haracters)i(in)d(the)i
+(tilde-pre\014x)f(are)g(quoted,)i(the)e(c)m(haracters)i(in)e(the)150
+870 y(tilde-pre\014x)27 b(follo)m(wing)h(the)f(tilde)h(are)f(treated)h
+(as)f(a)g(p)s(ossible)f Fq(login)i(name)p Ft(.)39 b(If)27
+b(this)f(login)i(name)f(is)g(the)150 979 y(n)m(ull)k(string,)h(the)f
+(tilde)h(is)g(replaced)g(with)f(the)g(v)-5 b(alue)32
+b(of)f(the)h Fs(HOME)e Ft(shell)h(v)-5 b(ariable.)45
+b(If)31 b Fs(HOME)f Ft(is)h(unset,)150 1089 y(the)37
+b(home)f(directory)h(of)g(the)f(user)g(executing)i(the)f(shell)f(is)h
+(substituted)f(instead.)59 b(Otherwise,)38 b(the)150
+1198 y(tilde-pre\014x)30 b(is)h(replaced)g(with)f(the)g(home)h
+(directory)g(asso)s(ciated)g(with)f(the)h(sp)s(eci\014ed)f(login)h
+(name.)275 1331 y(If)h(the)h(tilde-pre\014x)f(is)h(`)p
+Fs(~+)p Ft(',)g(the)g(v)-5 b(alue)33 b(of)g(the)g(shell)g(v)-5
+b(ariable)34 b Fs(PWD)d Ft(replaces)j(the)f(tilde-pre\014x.)47
+b(If)150 1441 y(the)31 b(tilde-pre\014x)f(is)g(`)p Fs(~-)p
+Ft(',)h(the)f(v)-5 b(alue)31 b(of)g(the)f(shell)h(v)-5
+b(ariable)31 b Fs(OLDPWD)p Ft(,)e(if)h(it)h(is)g(set,)g(is)f
+(substituted.)275 1573 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 Fq(N)p Ft(,)j(optionally)150 1683 y(pre\014xed)22
b(b)m(y)h(a)h(`)p Fs(+)p Ft(')f(or)h(a)f(`)p Fs(-)p Ft(',)j(the)d
-(tilde-pre\014x)e(is)i(replaced)f(with)g(the)i(corresp)s(onding)d
-(elemen)m(t)j(from)f(the)150 1792 y(directory)35 b(stac)m(k,)j(as)e(it)
-f(w)m(ould)f(b)s(e)h(displa)m(y)m(ed)f(b)m(y)i(the)f
-Fs(dirs)g Ft(builtin)d(in)m(v)m(ok)m(ed)k(with)e(the)h(c)m(haracters)
-150 1902 y(follo)m(wing)i(tilde)g(in)h(the)g(tilde-pre\014x)f(as)i(an)f
-(argumen)m(t)h(\(see)h(Section)e(6.8)i([The)e(Directory)h(Stac)m(k],)
-150 2011 y(page)d(73\).)57 b(If)35 b(the)g(tilde-pre\014x,)g(sans)g
-(the)h(tilde,)f(consists)g(of)h(a)f(n)m(um)m(b)s(er)f(without)h(a)g
-(leading)f(`)p Fs(+)p Ft(')i(or)150 2121 y(`)p Fs(-)p
-Ft(',)31 b(`)p Fs(+)p Ft(')f(is)g(assumed.)275 2253 y(If)f(the)i(login)
-e(name)i(is)e(in)m(v)-5 b(alid,)28 b(or)j(the)f(tilde)f(expansion)g
-(fails,)h(the)g(w)m(ord)g(is)g(left)g(unc)m(hanged.)275
-2386 y(Eac)m(h)f(v)-5 b(ariable)29 b(assignmen)m(t)g(is)f(c)m(hec)m(k)m
-(ed)j(for)e(unquoted)g(tilde-pre\014xes)e(immediately)h(follo)m(wing)g
-(a)150 2495 y(`)p Fs(:)p Ft(')j(or)f(`)p Fs(=)p Ft('.)42
-b(In)30 b(these)h(cases,)h(tilde)d(expansion)h(is)f(also)i(p)s
-(erformed.)40 b(Consequen)m(tly)-8 b(,)30 b(one)h(ma)m(y)h(use)e
-(\014le)150 2605 y(names)f(with)e(tildes)g(in)g(assignmen)m(ts)i(to)g
+(tilde-pre\014x)g(is)h(replaced)f(with)g(the)h(corresp)s(onding)e
+(elemen)m(t)j(from)e(the)150 1792 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
+Fs(dirs)g Ft(builtin)g(in)m(v)m(ok)m(ed)i(with)e(the)g(c)m(haracters)
+150 1902 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 2011 y(page)c(73\).)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 Fs(+)p Ft(')g(or)150 2121 y(`)p Fs(-)p
+Ft(',)31 b(`)p Fs(+)p Ft(')f(is)h(assumed.)275 2253 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
+2386 y(Eac)m(h)e(v)-5 b(ariable)31 b(assignmen)m(t)f(is)f(c)m(hec)m(k)m
+(ed)i(for)e(unquoted)g(tilde-pre\014xes)g(immediately)i(follo)m(wing)g
+(a)150 2495 y(`)p Fs(:)p Ft(')g(or)f(`)p Fs(=)p Ft('.)42
+b(In)30 b(these)h(cases,)h(tilde)f(expansion)g(is)f(also)i(p)s
+(erformed.)40 b(Consequen)m(tly)-8 b(,)31 b(one)g(ma)m(y)h(use)e
+(\014le)150 2605 y(names)f(with)f(tildes)h(in)f(assignmen)m(ts)i(to)f
Fs(PATH)p Ft(,)f Fs(MAILPATH)p Ft(,)f(and)h Fs(CDPATH)p
-Ft(,)f(and)h(the)h(shell)e(assigns)h(the)150 2715 y(expanded)i(v)-5
-b(alue.)275 2847 y(The)29 b(follo)m(wing)g(table)i(sho)m(ws)f(ho)m(w)g
+Ft(,)f(and)h(the)h(shell)g(assigns)g(the)150 2715 y(expanded)h(v)-5
+b(alue.)275 2847 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 3002
-y Fs(~)432 b Ft(The)30 b(v)-5 b(alue)30 b(of)g Fs($HOME)150
+y Fs(~)432 b Ft(The)30 b(v)-5 b(alue)31 b(of)f Fs($HOME)150
3158 y(~/foo)240 b Ft(`)p Fs($HOME/foo)p Ft(')150 3313
-y Fs(~fred/foo)630 3423 y Ft(The)30 b(sub)s(directory)e
-Fs(foo)i Ft(of)g(the)h(home)f(directory)g(of)h(the)f(user)g
+y Fs(~fred/foo)630 3423 y Ft(The)30 b(sub)s(directory)f
+Fs(foo)h Ft(of)g(the)h(home)f(directory)h(of)g(the)f(user)g
Fs(fred)150 3578 y(~+/foo)192 b Ft(`)p Fs($PWD/foo)p
Ft(')150 3733 y Fs(~-/foo)g Ft(`)p Fs(${OLDPWD-'~-'}/foo)p
-Ft(')150 3889 y Fs(~)p Fj(N)384 b Ft(The)30 b(string)f(that)i(w)m(ould)
-e(b)s(e)h(displa)m(y)m(ed)f(b)m(y)h(`)p Fs(dirs)g(+)p
+Ft(')150 3889 y Fs(~)p Fj(N)384 b Ft(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 Fs(dirs)g(+)p
Fj(N)11 b Ft(')150 4044 y Fs(~+)p Fj(N)336 b Ft(The)30
-b(string)f(that)i(w)m(ould)e(b)s(e)h(displa)m(y)m(ed)f(b)m(y)h(`)p
+b(string)g(that)h(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)f(`)p
Fs(dirs)g(+)p Fj(N)11 b Ft(')150 4199 y Fs(~-)p Fj(N)336
-b Ft(The)30 b(string)f(that)i(w)m(ould)e(b)s(e)h(displa)m(y)m(ed)f(b)m
-(y)h(`)p Fs(dirs)g(-)p Fj(N)11 b Ft(')150 4418 y Fk(3.5.3)63
-b(Shell)41 b(P)m(arameter)e(Expansion)275 4660 y Ft(The)26
-b(`)p Fs($)p Ft(')i(c)m(haracter)h(in)m(tro)s(duces)d(parameter)i
-(expansion,)f(command)g(substitution,)f(or)i(arithmetic)150
-4769 y(expansion.)37 b(The)22 b(parameter)h(name)f(or)g(sym)m(b)s(ol)g
-(to)h(b)s(e)e(expanded)h(ma)m(y)h(b)s(e)f(enclosed)g(in)f(braces,)j
-(whic)m(h)150 4879 y(are)31 b(optional)e(but)h(serv)m(e)h(to)h(protect)
-f(the)g(v)-5 b(ariable)29 b(to)i(b)s(e)f(expanded)g(from)g(c)m
-(haracters)i(immediately)150 4988 y(follo)m(wing)d(it)h(whic)m(h)f
-(could)g(b)s(e)h(in)m(terpreted)g(as)g(part)h(of)f(the)h(name.)275
-5121 y(When)44 b(braces)i(are)f(used,)j(the)e(matc)m(hing)f(ending)f
-(brace)h(is)f(the)h(\014rst)g(`)p Fs(})p Ft(')g(not)g(escap)s(ed)h(b)m
-(y)f(a)150 5230 y(bac)m(kslash)39 b(or)g(within)e(a)i(quoted)g(string,)
-i(and)d(not)i(within)c(an)j(em)m(b)s(edded)f(arithmetic)h(expansion,)
-150 5340 y(command)30 b(substitution,)e(or)j(parameter)g(expansion.)p
-eop
+b Ft(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 Fs(dirs)g(-)p Fj(N)11 b Ft(')150 4418 y Fk(3.5.3)63
+b(Shell)41 b(P)m(arameter)f(Expansion)275 4660 y Ft(The)26
+b(`)p Fs($)p Ft(')i(c)m(haracter)h(in)m(tro)s(duces)e(parameter)h
+(expansion,)g(command)f(substitution,)h(or)g(arithmetic)150
+4769 y(expansion.)38 b(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 4879 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 4988 y(follo)m(wing)g(it)f(whic)m(h)f
+(could)g(b)s(e)g(in)m(terpreted)h(as)f(part)h(of)f(the)h(name.)275
+5121 y(When)44 b(braces)i(are)f(used,)j(the)e(matc)m(hing)g(ending)f
+(brace)g(is)g(the)g(\014rst)g(`)p Fs(})p Ft(')g(not)g(escap)s(ed)h(b)m
+(y)f(a)150 5230 y(bac)m(kslash)40 b(or)f(within)g(a)g(quoted)g(string,)
+j(and)c(not)i(within)e(an)h(em)m(b)s(edded)f(arithmetic)j(expansion,)
+150 5340 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)p
+eop end
%%Page: 19 25
-19 24 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(19)275 299 y(The)40 b(basic)g(form)h
-(of)g(parameter)h(expansion)d(is)h($)p Fs({)p Fq(parameter)7
-b Fs(})p Ft(.)73 b(The)40 b(v)-5 b(alue)41 b(of)g Fq(parameter)48
-b Ft(is)150 408 y(substituted.)42 b(The)31 b(braces)g(are)h(required)d
-(when)i Fq(parameter)38 b Ft(is)30 b(a)i(p)s(ositional)d(parameter)j
-(with)e(more)150 518 y(than)i(one)g(digit,)g(or)g(when)g
-Fq(parameter)39 b Ft(is)31 b(follo)m(w)m(ed)h(b)m(y)g(a)h(c)m(haracter)
-h(that)e(is)g(not)g(to)h(b)s(e)f(in)m(terpreted)150 628
-y(as)f(part)f(of)g(its)g(name.)275 772 y(If)c(the)i(\014rst)f(c)m
-(haracter)i(of)e Fq(parameter)35 b Ft(is)26 b(an)h(exclamation)h(p)s
-(oin)m(t,)f(a)h(lev)m(el)f(of)g(v)-5 b(ariable)27 b(indirection)150
-882 y(is)37 b(in)m(tro)s(duced.)61 b(Bash)38 b(uses)f(the)h(v)-5
-b(alue)37 b(of)h(the)g(v)-5 b(ariable)37 b(formed)g(from)g(the)h(rest)g
+TeXDict begin 19 24 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(19)275 299
+y(The)40 b(basic)h(form)g(of)g(parameter)h(expansion)e(is)h($)p
+Fs({)p Fq(parameter)7 b Fs(})p Ft(.)73 b(The)40 b(v)-5
+b(alue)42 b(of)f Fq(parameter)48 b Ft(is)150 408 y(substituted.)43
+b(The)31 b(braces)g(are)h(required)e(when)h Fq(parameter)38
+b Ft(is)31 b(a)h(p)s(ositional)g(parameter)g(with)f(more)150
+518 y(than)h(one)g(digit,)i(or)e(when)g Fq(parameter)39
+b Ft(is)32 b(follo)m(w)m(ed)i(b)m(y)e(a)h(c)m(haracter)h(that)e(is)h
+(not)f(to)h(b)s(e)f(in)m(terpreted)150 628 y(as)f(part)f(of)g(its)h
+(name.)275 772 y(If)26 b(the)i(\014rst)f(c)m(haracter)i(of)e
+Fq(parameter)35 b Ft(is)27 b(an)g(exclamation)j(p)s(oin)m(t,)e(a)g(lev)
+m(el)h(of)e(v)-5 b(ariable)29 b(indirection)150 882 y(is)38
+b(in)m(tro)s(duced.)62 b(Bash)38 b(uses)f(the)h(v)-5
+b(alue)38 b(of)g(the)g(v)-5 b(ariable)39 b(formed)e(from)g(the)h(rest)g
(of)g Fq(parameter)45 b Ft(as)150 991 y(the)32 b(name)h(of)f(the)h(v)-5
-b(ariable;)32 b(this)f(v)-5 b(ariable)31 b(is)h(then)g(expanded)f(and)h
-(that)h(v)-5 b(alue)31 b(is)h(used)f(in)g(the)i(rest)150
-1101 y(of)h(the)f(substitution,)g(rather)g(than)g(the)h(v)-5
-b(alue)33 b(of)h Fq(parameter)40 b Ft(itself.)49 b(This)32
-b(is)g(kno)m(wn)h(as)h Fs(indirect)150 1210 y(expansion)p
-Ft(.)81 b(The)44 b(exceptions)g(to)i(this)d(are)i(the)g(expansions)e
-(of)i($)p Fs({)p Ft(!)p Fq(pre\014x*)8 b Fs(})43 b Ft(and)h($)p
+b(ariable;)34 b(this)e(v)-5 b(ariable)33 b(is)g(then)f(expanded)f(and)h
+(that)h(v)-5 b(alue)32 b(is)h(used)e(in)h(the)h(rest)150
+1101 y(of)h(the)f(substitution,)i(rather)e(than)g(the)h(v)-5
+b(alue)34 b(of)g Fq(parameter)40 b Ft(itself.)51 b(This)33
+b(is)g(kno)m(wn)g(as)h Fs(indirect)150 1210 y(expansion)p
+Ft(.)81 b(The)44 b(exceptions)h(to)h(this)e(are)h(the)g(expansions)f
+(of)h($)p Fs({)p Ft(!)p Fq(pre\014x*)8 b Fs(})43 b Ft(and)h($)p
Fs({)p Ft(!)p Fq(name)5 b Ft([)p Fs(@)p Ft(])p Fs(})150
-1320 y Ft(describ)s(ed)27 b(b)s(elo)m(w.)40 b(The)28
-b(exclamation)h(p)s(oin)m(t)g(m)m(ust)g(immediately)e(follo)m(w)h(the)i
-(left)e(brace)i(in)e(order)g(to)150 1430 y(in)m(tro)s(duce)h
+1320 y Ft(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 1430 y(in)m(tro)s(duce)i
(indirection.)275 1574 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m
-(w,)h Fq(w)m(ord)i Ft(is)39 b(sub)5 b(ject)40 b(to)h(tilde)d
-(expansion,)k(parameter)f(expansion,)150 1684 y(command)30
-b(substitution,)e(and)i(arithmetic)g(expansion.)275 1828
-y(When)j(not)g(p)s(erforming)e(substring)g(expansion,)j(Bash)f(tests)h
-(for)f(a)h(parameter)g(that)g(is)e(unset)h(or)150 1938
-y(n)m(ull;)j(omitting)e(the)h(colon)g(results)f(in)g(a)i(test)g(only)e
-(for)h(a)g(parameter)h(that)f(is)g(unset.)54 b(Put)35
-b(another)150 2047 y(w)m(a)m(y)-8 b(,)31 b(if)d(the)h(colon)g(is)f
-(included,)e(the)j(op)s(erator)h(tests)f(for)g(b)s(oth)f(existence)h
-(and)g(that)g(the)g(v)-5 b(alue)29 b(is)f(not)150 2157
-y(n)m(ull;)h(if)g(the)h(colon)h(is)e(omitted,)i(the)f(op)s(erator)h
-(tests)g(only)f(for)g(existence.)150 2331 y Fs(${)p Fj(parameter)11
-b Fs(:)p Fp(\000)p Fj(word)g Fs(})630 2441 y Ft(If)30
-b Fq(parameter)37 b Ft(is)29 b(unset)h(or)h(n)m(ull,)d(the)j(expansion)
-e(of)h Fq(w)m(ord)k Ft(is)29 b(substituted.)39 b(Otherwise,)630
-2550 y(the)31 b(v)-5 b(alue)29 b(of)i Fq(parameter)37
-b Ft(is)30 b(substituted.)150 2720 y Fs(${)p Fj(parameter)11
-b Fs(:=)p Fj(word)g Fs(})630 2829 y Ft(If)33 b Fq(parameter)40
-b Ft(is)32 b(unset)g(or)h(n)m(ull,)f(the)h(expansion)f(of)h
-Fq(w)m(ord)j Ft(is)c(assigned)g(to)i Fq(parameter)p Ft(.)630
-2939 y(The)c(v)-5 b(alue)31 b(of)g Fq(parameter)38 b
-Ft(is)30 b(then)h(substituted.)41 b(P)m(ositional)30
-b(parameters)h(and)f(sp)s(ecial)630 3049 y(parameters)h(ma)m(y)g(not)f
-(b)s(e)g(assigned)g(to)h(in)e(this)g(w)m(a)m(y)-8 b(.)150
+(w,)i Fq(w)m(ord)h Ft(is)c(sub)5 b(ject)40 b(to)h(tilde)f(expansion,)j
+(parameter)e(expansion,)150 1684 y(command)30 b(substitution,)g(and)g
+(arithmetic)i(expansion.)275 1828 y(When)h(not)g(p)s(erforming)f
+(substring)g(expansion,)j(Bash)e(tests)h(for)f(a)h(parameter)g(that)g
+(is)f(unset)g(or)150 1938 y(n)m(ull;)38 b(omitting)e(the)f(colon)h
+(results)f(in)g(a)h(test)g(only)f(for)g(a)g(parameter)h(that)f(is)h
+(unset.)54 b(Put)35 b(another)150 2047 y(w)m(a)m(y)-8
+b(,)31 b(if)e(the)g(colon)h(is)f(included,)f(the)h(op)s(erator)h(tests)
+f(for)g(b)s(oth)f(existence)i(and)f(that)g(the)g(v)-5
+b(alue)30 b(is)f(not)150 2157 y(n)m(ull;)i(if)f(the)g(colon)i(is)e
+(omitted,)i(the)e(op)s(erator)h(tests)g(only)g(for)f(existence.)150
+2331 y Fs(${)p Fj(parameter)11 b Fs(:)p Fp(\000)p Fj(word)g
+Fs(})630 2441 y Ft(If)30 b Fq(parameter)37 b Ft(is)30
+b(unset)g(or)h(n)m(ull,)f(the)h(expansion)f(of)g Fq(w)m(ord)k
+Ft(is)c(substituted.)40 b(Otherwise,)630 2550 y(the)31
+b(v)-5 b(alue)30 b(of)h Fq(parameter)37 b Ft(is)31 b(substituted.)150
+2720 y Fs(${)p Fj(parameter)11 b Fs(:=)p Fj(word)g Fs(})630
+2829 y Ft(If)33 b Fq(parameter)40 b Ft(is)33 b(unset)f(or)h(n)m(ull,)h
+(the)f(expansion)g(of)g Fq(w)m(ord)j Ft(is)d(assigned)g(to)h
+Fq(parameter)p Ft(.)630 2939 y(The)c(v)-5 b(alue)32 b(of)f
+Fq(parameter)38 b Ft(is)31 b(then)g(substituted.)42 b(P)m(ositional)33
+b(parameters)e(and)f(sp)s(ecial)630 3049 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
3218 y Fs(${)p Fj(parameter)11 b Fs(:?)p Fj(word)g Fs(})630
-3328 y Ft(If)26 b Fq(parameter)33 b Ft(is)25 b(n)m(ull)f(or)i(unset,)h
-(the)f(expansion)f(of)h Fq(w)m(ord)k Ft(\(or)c(a)h(message)g(to)g(that)
-f(e\013ect)630 3437 y(if)h Fq(w)m(ord)k Ft(is)c(not)h(presen)m(t\))h
-(is)e(written)g(to)i(the)f(standard)f(error)h(and)f(the)h(shell,)f(if)g
-(it)h(is)f(not)630 3547 y(in)m(teractiv)m(e,)k(exits.)41
-b(Otherwise,)29 b(the)i(v)-5 b(alue)30 b(of)g Fq(parameter)38
-b Ft(is)29 b(substituted.)150 3716 y Fs(${)p Fj(parameter)11
+3328 y Ft(If)26 b Fq(parameter)33 b Ft(is)26 b(n)m(ull)g(or)g(unset,)h
+(the)f(expansion)g(of)g Fq(w)m(ord)k Ft(\(or)c(a)h(message)g(to)g(that)
+f(e\013ect)630 3437 y(if)i Fq(w)m(ord)j Ft(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 3547 y(in)m(teractiv)m(e,)33 b(exits.)42
+b(Otherwise,)30 b(the)h(v)-5 b(alue)31 b(of)f Fq(parameter)38
+b Ft(is)30 b(substituted.)150 3716 y Fs(${)p Fj(parameter)11
b Fs(:+)p Fj(word)g Fs(})630 3826 y Ft(If)35 b Fq(parameter)42
-b Ft(is)35 b(n)m(ull)e(or)j(unset,)g(nothing)f(is)f(substituted,)i
-(otherwise)e(the)i(expansion)630 3935 y(of)31 b Fq(w)m(ord)i
-Ft(is)d(substituted.)150 4105 y Fs(${)p Fj(parameter)11
+b Ft(is)36 b(n)m(ull)f(or)h(unset,)g(nothing)g(is)f(substituted,)i
+(otherwise)e(the)h(expansion)630 3935 y(of)31 b Fq(w)m(ord)i
+Ft(is)e(substituted.)150 4105 y Fs(${)p Fj(parameter)11
b Fs(:)p Fj(offset)g Fs(})150 4214 y(${)p Fj(parameter)g
Fs(:)p Fj(offset)g Fs(:)p Fj(le)o(ngt)o(h)g Fs(})630
-4324 y Ft(Expands)44 b(to)i(up)e(to)i Fq(length)f Ft(c)m(haracters)i
-(of)e Fq(parameter)53 b Ft(starting)45 b(at)h(the)f(c)m(haracter)630
-4433 y(sp)s(eci\014ed)29 b(b)m(y)i Fq(o\013set)p Ft(.)42
-b(If)31 b Fq(length)f Ft(is)g(omitted,)h(expands)f(to)h(the)g
-(substring)e(of)h Fq(parameter)630 4543 y Ft(starting)37
-b(at)h(the)f(c)m(haracter)i(sp)s(eci\014ed)d(b)m(y)h
-Fq(o\013set)p Ft(.)62 b Fq(length)37 b Ft(and)g Fq(o\013set)j
-Ft(are)e(arithmetic)630 4653 y(expressions)29 b(\(see)j(Section)f(6.5)h
-([Shell)d(Arithmetic],)h(page)i(70\).)43 b(This)29 b(is)h(referred)g
-(to)i(as)630 4762 y(Substring)c(Expansion.)630 4902 y
-Fq(length)f Ft(m)m(ust)h(ev)-5 b(aluate)28 b(to)g(a)h(n)m(um)m(b)s(er)d
-(greater)j(than)e(or)h(equal)f(to)i(zero.)40 b(If)27
+4324 y Ft(Expands)44 b(to)i(up)e(to)i Fq(length)g Ft(c)m(haracters)h
+(of)e Fq(parameter)53 b Ft(starting)46 b(at)g(the)f(c)m(haracter)630
+4433 y(sp)s(eci\014ed)30 b(b)m(y)h Fq(o\013set)p Ft(.)42
+b(If)31 b Fq(length)g Ft(is)g(omitted,)h(expands)e(to)h(the)g
+(substring)f(of)g Fq(parameter)630 4543 y Ft(starting)38
+b(at)g(the)f(c)m(haracter)i(sp)s(eci\014ed)e(b)m(y)g
+Fq(o\013set)p Ft(.)62 b Fq(length)38 b Ft(and)f Fq(o\013set)j
+Ft(are)e(arithmetic)630 4653 y(expressions)30 b(\(see)i(Section)g(6.5)g
+([Shell)f(Arithmetic],)h(page)g(70\).)43 b(This)30 b(is)h(referred)f
+(to)i(as)630 4762 y(Substring)d(Expansion.)630 4902 y
+Fq(length)f Ft(m)m(ust)g(ev)-5 b(aluate)29 b(to)f(a)h(n)m(um)m(b)s(er)d
+(greater)j(than)e(or)h(equal)g(to)h(zero.)40 b(If)27
b Fq(o\013set)k Ft(ev)-5 b(alu-)630 5011 y(ates)24 b(to)h(a)e(n)m(um)m
-(b)s(er)f(less)h(than)g(zero,)j(the)e(v)-5 b(alue)23
-b(is)f(used)h(as)g(an)h(o\013set)g(from)f(the)g(end)g(of)h(the)630
-5121 y(v)-5 b(alue)21 b(of)g Fq(parameter)p Ft(.)38 b(If)21
-b Fq(parameter)28 b Ft(is)20 b(`)p Fs(@)p Ft(',)j(the)f(result)e(is)g
-Fq(length)h Ft(p)s(ositional)e(parameters)630 5230 y(b)s(eginning)25
-b(at)k Fq(o\013set)p Ft(.)41 b(If)28 b Fq(parameter)35
-b Ft(is)27 b(an)h(arra)m(y)h(name)f(indexed)e(b)m(y)i(`)p
+(b)s(er)f(less)i(than)f(zero,)j(the)e(v)-5 b(alue)24
+b(is)f(used)g(as)g(an)h(o\013set)g(from)f(the)g(end)g(of)h(the)630
+5121 y(v)-5 b(alue)22 b(of)f Fq(parameter)p Ft(.)38 b(If)21
+b Fq(parameter)28 b Ft(is)21 b(`)p Fs(@)p Ft(',)i(the)f(result)f(is)g
+Fq(length)h Ft(p)s(ositional)g(parameters)630 5230 y(b)s(eginning)27
+b(at)i Fq(o\013set)p Ft(.)41 b(If)28 b Fq(parameter)35
+b Ft(is)28 b(an)g(arra)m(y)h(name)f(indexed)f(b)m(y)h(`)p
Fs(@)p Ft(')g(or)g(`)p Fs(*)p Ft(',)h(the)g(re-)630 5340
-y(sult)20 b(is)h(the)g Fq(length)g Ft(mem)m(b)s(ers)g(of)g(the)h(arra)m
-(y)f(b)s(eginning)e(with)h Fs(${)p Fj(parameter)11 b
-Fs([)p Fj(offset)g Fs(]})p Ft(.)p eop
+y(sult)21 b(is)h(the)f Fq(length)h Ft(mem)m(b)s(ers)f(of)g(the)h(arra)m
+(y)f(b)s(eginning)g(with)g Fs(${)p Fj(parameter)11 b
+Fs([)p Fj(offset)g Fs(]})p Ft(.)p eop end
%%Page: 20 26
-20 25 bop 150 -116 a Ft(20)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(Substring)g(indexing)h(is)g(zero-based)j(unless)d(the)i(p)s
-(ositional)d(parameters)j(are)g(used,)g(in)630 408 y(whic)m(h)29
-b(case)j(the)e(indexing)e(starts)j(at)g(1.)150 573 y
-Fs(${!)p Fj(prefix)11 b Fs(*})150 682 y(${!)p Fj(prefix)g
+TeXDict begin 20 25 bop 150 -116 a Ft(20)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(Substring)h(indexing)i(is)f
+(zero-based)i(unless)e(the)h(p)s(ositional)g(parameters)g(are)g(used,)g
+(in)630 408 y(whic)m(h)c(case)i(the)e(indexing)g(starts)h(at)g(1.)150
+573 y Fs(${!)p Fj(prefix)11 b Fs(*})150 682 y(${!)p Fj(prefix)g
Fs(@})630 792 y Ft(Expands)34 b(to)j(the)f(names)g(of)g(v)-5
-b(ariables)35 b(whose)g(names)h(b)s(egin)e(with)h Fq(pre\014x)p
-Ft(,)h(separated)630 902 y(b)m(y)30 b(the)h(\014rst)e(c)m(haracter)j
-(of)f(the)g Fs(IFS)e Ft(sp)s(ecial)g(v)-5 b(ariable.)150
+b(ariables)37 b(whose)e(names)h(b)s(egin)f(with)h Fq(pre\014x)p
+Ft(,)g(separated)630 902 y(b)m(y)30 b(the)h(\014rst)e(c)m(haracter)j
+(of)f(the)g Fs(IFS)e Ft(sp)s(ecial)i(v)-5 b(ariable.)150
1066 y Fs(${!)p Fj(name)11 b Fs([@]})150 1176 y(${!)p
Fj(name)g Fs([*]})630 1285 y Ft(If)26 b Fq(name)32 b
-Ft(is)26 b(an)g(arra)m(y)h(v)-5 b(ariable,)27 b(expands)f(to)h(the)g
-(list)e(of)i(arra)m(y)g(indices)e(\(k)m(eys\))j(assigned)630
-1395 y(in)23 b Fq(name)p Ft(.)39 b(If)24 b Fq(name)30
-b Ft(is)23 b(not)i(an)f(arra)m(y)-8 b(,)27 b(expands)c(to)j(0)f(if)e
-Fq(name)30 b Ft(is)23 b(set)i(and)f(n)m(ull)e(otherwise.)630
-1504 y(When)39 b(`)p Fs(@)p Ft(')h(is)e(used)h(and)f(the)i(expansion)e
-(app)s(ears)h(within)d(double)i(quotes,)43 b(eac)m(h)d(k)m(ey)630
+Ft(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
+1395 y(in)c Fq(name)p Ft(.)39 b(If)24 b Fq(name)30 b
+Ft(is)24 b(not)h(an)f(arra)m(y)-8 b(,)27 b(expands)c(to)j(0)f(if)f
+Fq(name)30 b Ft(is)24 b(set)h(and)f(n)m(ull)g(otherwise.)630
+1504 y(When)39 b(`)p Fs(@)p Ft(')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
1614 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150
1778 y Fs(${#)p Fj(parameter)11 b Fs(})630 1888 y Ft(The)40
-b(length)f(in)g(c)m(haracters)j(of)e(the)h(expanded)e(v)-5
-b(alue)40 b(of)g Fq(parameter)47 b Ft(is)39 b(substituted.)630
-1998 y(If)j Fq(parameter)50 b Ft(is)42 b(`)p Fs(*)p Ft(')h(or)g(`)p
-Fs(@)p Ft(',)k(the)c(v)-5 b(alue)42 b(substituted)f(is)h(the)h(n)m(um)m
+b(length)g(in)g(c)m(haracters)i(of)e(the)h(expanded)e(v)-5
+b(alue)41 b(of)f Fq(parameter)47 b Ft(is)40 b(substituted.)630
+1998 y(If)i Fq(parameter)50 b Ft(is)43 b(`)p Fs(*)p Ft(')g(or)g(`)p
+Fs(@)p Ft(',)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 2107 y(parameters.)i(If)32
-b Fq(parameter)38 b Ft(is)31 b(an)h(arra)m(y)g(name)g(subscripted)e(b)m
-(y)h(`)p Fs(*)p Ft(')h(or)g(`)p Fs(@)p Ft(',)g(the)g(v)-5
-b(alue)630 2217 y(substituted)29 b(is)g(the)i(n)m(um)m(b)s(er)e(of)h
-(elemen)m(ts)h(in)e(the)i(arra)m(y)-8 b(.)150 2381 y
+b Fq(parameter)38 b Ft(is)32 b(an)g(arra)m(y)g(name)g(subscripted)f(b)m
+(y)g(`)p Fs(*)p Ft(')h(or)g(`)p Fs(@)p Ft(',)g(the)g(v)-5
+b(alue)630 2217 y(substituted)30 b(is)g(the)h(n)m(um)m(b)s(er)e(of)h
+(elemen)m(ts)i(in)e(the)h(arra)m(y)-8 b(.)150 2381 y
Fs(${)p Fj(parameter)11 b Fs(#)p Fj(word)g Fs(})150 2491
y(${)p Fj(parameter)g Fs(##)p Fj(word)g Fs(})630 2600
-y Ft(The)31 b Fq(w)m(ord)k Ft(is)c(expanded)g(to)i(pro)s(duce)e(a)h
-(pattern)g(just)f(as)i(in)d(\014lename)h(expansion)g(\(see)630
-2710 y(Section)k(3.5.8)i([Filename)e(Expansion],)h(page)g(22\).)56
+y Ft(The)31 b Fq(w)m(ord)k Ft(is)d(expanded)f(to)i(pro)s(duce)e(a)h
+(pattern)g(just)f(as)i(in)e(\014lename)h(expansion)g(\(see)630
+2710 y(Section)k(3.5.8)h([Filename)g(Expansion],)g(page)f(22\).)56
b(If)35 b(the)h(pattern)f(matc)m(hes)i(the)e(b)s(e-)630
-2819 y(ginning)26 b(of)i(the)h(expanded)e(v)-5 b(alue)28
-b(of)g Fq(parameter)p Ft(,)h(then)f(the)g(result)f(of)i(the)f
-(expansion)f(is)630 2929 y(the)36 b(expanded)f(v)-5 b(alue)35
-b(of)h Fq(parameter)43 b Ft(with)34 b(the)i(shortest)g(matc)m(hing)g
-(pattern)g(\(the)g(`)p Fs(#)p Ft(')630 3039 y(case\))26
-b(or)f(the)g(longest)f(matc)m(hing)h(pattern)g(\(the)g(`)p
-Fs(##)p Ft(')g(case\))h(deleted.)38 b(If)24 b Fq(parameter)32
-b Ft(is)24 b(`)p Fs(@)p Ft(')630 3148 y(or)k(`)p Fs(*)p
-Ft(',)i(the)e(pattern)h(remo)m(v)-5 b(al)28 b(op)s(eration)g(is)f
-(applied)g(to)i(eac)m(h)g(p)s(ositional)d(parameter)j(in)630
-3258 y(turn,)i(and)g(the)h(expansion)f(is)g(the)h(resultan)m(t)f(list.)
-43 b(If)32 b Fq(parameter)38 b Ft(is)31 b(an)h(arra)m(y)g(v)-5
-b(ariable)630 3367 y(subscripted)38 b(with)g(`)p Fs(@)p
-Ft(')i(or)g(`)p Fs(*)p Ft(',)j(the)d(pattern)h(remo)m(v)-5
-b(al)40 b(op)s(eration)f(is)g(applied)f(to)j(eac)m(h)630
-3477 y(mem)m(b)s(er)30 b(of)g(the)h(arra)m(y)g(in)e(turn,)g(and)h(the)h
-(expansion)e(is)g(the)i(resultan)m(t)f(list.)150 3641
+2819 y(ginning)28 b(of)g(the)h(expanded)e(v)-5 b(alue)29
+b(of)f Fq(parameter)p Ft(,)h(then)f(the)g(result)g(of)h(the)f
+(expansion)g(is)630 2929 y(the)36 b(expanded)f(v)-5 b(alue)36
+b(of)g Fq(parameter)43 b Ft(with)35 b(the)h(shortest)g(matc)m(hing)h
+(pattern)f(\(the)g(`)p Fs(#)p Ft(')630 3039 y(case\))26
+b(or)f(the)g(longest)g(matc)m(hing)h(pattern)f(\(the)g(`)p
+Fs(##)p Ft(')g(case\))h(deleted.)39 b(If)24 b Fq(parameter)32
+b Ft(is)25 b(`)p Fs(@)p Ft(')630 3148 y(or)j(`)p Fs(*)p
+Ft(',)i(the)e(pattern)h(remo)m(v)-5 b(al)29 b(op)s(eration)g(is)f
+(applied)h(to)g(eac)m(h)g(p)s(ositional)g(parameter)g(in)630
+3258 y(turn,)i(and)g(the)h(expansion)g(is)g(the)g(resultan)m(t)g(list.)
+45 b(If)32 b Fq(parameter)38 b Ft(is)32 b(an)g(arra)m(y)g(v)-5
+b(ariable)630 3367 y(subscripted)39 b(with)g(`)p Fs(@)p
+Ft(')h(or)g(`)p Fs(*)p Ft(',)j(the)d(pattern)h(remo)m(v)-5
+b(al)41 b(op)s(eration)f(is)g(applied)g(to)h(eac)m(h)630
+3477 y(mem)m(b)s(er)30 b(of)g(the)h(arra)m(y)g(in)f(turn,)f(and)h(the)h
+(expansion)f(is)g(the)h(resultan)m(t)g(list.)150 3641
y Fs(${)p Fj(parameter)11 b Fs(\045)p Fj(word)g Fs(})150
3751 y(${)p Fj(parameter)g Fs(\045\045)p Fj(word)g Fs(})630
-3861 y Ft(The)35 b Fq(w)m(ord)k Ft(is)34 b(expanded)h(to)h(pro)s(duce)e
-(a)i(pattern)f(just)g(as)h(in)e(\014lename)h(expansion.)54
-b(If)630 3970 y(the)43 b(pattern)g(matc)m(hes)h(a)g(trailing)d(p)s
-(ortion)g(of)i(the)g(expanded)g(v)-5 b(alue)42 b(of)h
-Fq(parameter)p Ft(,)630 4080 y(then)c(the)g(result)f(of)i(the)f
-(expansion)f(is)h(the)g(v)-5 b(alue)39 b(of)g Fq(parameter)46
-b Ft(with)38 b(the)i(shortest)630 4189 y(matc)m(hing)30
-b(pattern)f(\(the)h(`)p Fs(\045)p Ft(')g(case\))h(or)e(the)h(longest)g
-(matc)m(hing)f(pattern)h(\(the)g(`)p Fs(\045\045)p Ft(')g(case\))630
-4299 y(deleted.)48 b(If)32 b Fq(parameter)40 b Ft(is)32
-b(`)p Fs(@)p Ft(')h(or)g(`)p Fs(*)p Ft(',)h(the)f(pattern)g(remo)m(v)-5
-b(al)33 b(op)s(eration)g(is)f(applied)e(to)630 4408 y(eac)m(h)38
-b(p)s(ositional)d(parameter)j(in)e(turn,)i(and)e(the)h(expansion)f(is)h
-(the)g(resultan)m(t)g(list.)59 b(If)630 4518 y Fq(parameter)38
-b Ft(is)31 b(an)g(arra)m(y)h(v)-5 b(ariable)30 b(subscripted)f(with)h
-(`)p Fs(@)p Ft(')h(or)h(`)p Fs(*)p Ft(',)g(the)f(pattern)h(remo)m(v)-5
-b(al)630 4628 y(op)s(eration)29 b(is)g(applied)e(to)k(eac)m(h)g(mem)m
-(b)s(er)e(of)h(the)g(arra)m(y)g(in)e(turn,)h(and)g(the)h(expansion)f
-(is)630 4737 y(the)i(resultan)m(t)f(list.)150 4902 y
+3861 y Ft(The)35 b Fq(w)m(ord)k Ft(is)c(expanded)g(to)h(pro)s(duce)e(a)
+i(pattern)f(just)g(as)h(in)f(\014lename)h(expansion.)55
+b(If)630 3970 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
+Fq(parameter)p Ft(,)630 4080 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 Fq(parameter)46
+b Ft(with)39 b(the)h(shortest)630 4189 y(matc)m(hing)31
+b(pattern)e(\(the)h(`)p Fs(\045)p Ft(')g(case\))h(or)e(the)h(longest)h
+(matc)m(hing)f(pattern)g(\(the)g(`)p Fs(\045\045)p Ft(')g(case\))630
+4299 y(deleted.)49 b(If)32 b Fq(parameter)40 b Ft(is)33
+b(`)p Fs(@)p Ft(')g(or)g(`)p Fs(*)p Ft(',)h(the)f(pattern)g(remo)m(v)-5
+b(al)34 b(op)s(eration)g(is)f(applied)f(to)630 4408 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 4518 y Fq(parameter)38
+b Ft(is)32 b(an)f(arra)m(y)h(v)-5 b(ariable)32 b(subscripted)e(with)h
+(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)g(the)f(pattern)h(remo)m(v)-5
+b(al)630 4628 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 4737 y(the)h(resultan)m(t)g(list.)150 4902 y
Fs(${)p Fj(parameter)11 b Fs(/)p Fj(pattern)g Fs(/)p
Fj(s)o(tri)o(ng)f Fs(})150 5011 y(${)p Fj(parameter)h
Fs(//)p Fj(pattern)g Fs(/)o Fj(str)o(ing)f Fs(})630 5121
-y Ft(The)37 b Fq(pattern)g Ft(is)f(expanded)h(to)h(pro)s(duce)e(a)h
-(pattern)g(just)g(as)h(in)d(\014lename)i(expansion.)630
-5230 y Fq(P)m(arameter)46 b Ft(is)37 b(expanded)g(and)g(the)i(longest)f
-(matc)m(h)h(of)f Fq(pattern)g Ft(against)g(its)f(v)-5
-b(alue)38 b(is)630 5340 y(replaced)e(with)f Fq(string)p
-Ft(.)57 b(In)35 b(the)i(\014rst)e(form,)j(only)d(the)i(\014rst)e(matc)m
-(h)i(is)f(replaced.)57 b(The)p eop
+y Ft(The)37 b Fq(pattern)g Ft(is)g(expanded)g(to)h(pro)s(duce)e(a)h
+(pattern)g(just)g(as)h(in)e(\014lename)i(expansion.)630
+5230 y Fq(P)m(arameter)46 b Ft(is)38 b(expanded)f(and)g(the)i(longest)g
+(matc)m(h)g(of)f Fq(pattern)g Ft(against)h(its)f(v)-5
+b(alue)39 b(is)630 5340 y(replaced)e(with)f Fq(string)p
+Ft(.)58 b(In)35 b(the)i(\014rst)e(form,)j(only)e(the)h(\014rst)e(matc)m
+(h)i(is)g(replaced.)58 b(The)p eop end
%%Page: 21 27
-21 26 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(21)630 299 y(second)26
-b(form)g(causes)h(all)e(matc)m(hes)i(of)g Fq(pattern)f
-Ft(to)h(b)s(e)f(replaced)g(with)f Fq(string)p Ft(.)38
-b(If)26 b Fq(pattern)630 408 y Ft(b)s(egins)34 b(with)g(`)p
-Fs(#)p Ft(',)j(it)e(m)m(ust)g(matc)m(h)h(at)g(the)g(b)s(eginning)d(of)i
-(the)h(expanded)e(v)-5 b(alue)35 b(of)h Fq(pa-)630 518
-y(rameter)p Ft(.)45 b(If)32 b Fq(pattern)g Ft(b)s(egins)e(with)g(`)p
-Fs(\045)p Ft(',)j(it)e(m)m(ust)h(matc)m(h)g(at)h(the)f(end)f(of)h(the)g
-(expanded)630 628 y(v)-5 b(alue)32 b(of)h Fq(parameter)p
-Ft(.)47 b(If)32 b Fq(string)39 b Ft(is)32 b(n)m(ull,)f(matc)m(hes)i(of)
-g Fq(pattern)g Ft(are)g(deleted)f(and)g(the)g Fs(/)630
-737 y Ft(follo)m(wing)i Fq(pattern)h Ft(ma)m(y)h(b)s(e)e(omitted.)55
-b(If)35 b Fq(parameter)42 b Ft(is)35 b(`)p Fs(@)p Ft(')g(or)g(`)p
-Fs(*)p Ft(',)i(the)e(substitution)630 847 y(op)s(eration)29
-b(is)f(applied)f(to)j(eac)m(h)g(p)s(ositional)d(parameter)j(in)d(turn,)
-i(and)g(the)g(expansion)f(is)630 956 y(the)j(resultan)m(t)g(list.)43
-b(If)30 b Fq(parameter)39 b Ft(is)30 b(an)h(arra)m(y)h(v)-5
-b(ariable)30 b(subscripted)f(with)h(`)p Fs(@)p Ft(')h(or)h(`)p
-Fs(*)p Ft(',)630 1066 y(the)e(substitution)e(op)s(eration)i(is)f
-(applied)f(to)j(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g(arra)m(y)h(in)e
-(turn,)h(and)630 1176 y(the)h(expansion)e(is)g(the)i(resultan)m(t)f
-(list.)150 1443 y Fk(3.5.4)63 b(Command)39 b(Substitution)275
-1709 y Ft(Command)29 b(substitution)g(allo)m(ws)h(the)h(output)g(of)g
-(a)g(command)g(to)g(replace)g(the)g(command)g(itself.)150
-1819 y(Command)e(substitution)f(o)s(ccurs)j(when)e(a)i(command)f(is)f
-(enclosed)h(as)h(follo)m(ws:)390 1975 y Fs($\()p Fj(command)11
+TeXDict begin 21 26 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(21)630 299
+y(second)26 b(form)g(causes)h(all)g(matc)m(hes)g(of)g
+Fq(pattern)f Ft(to)h(b)s(e)f(replaced)h(with)f Fq(string)p
+Ft(.)39 b(If)26 b Fq(pattern)630 408 y Ft(b)s(egins)35
+b(with)g(`)p Fs(#)p Ft(',)i(it)f(m)m(ust)f(matc)m(h)h(at)g(the)g(b)s
+(eginning)f(of)g(the)h(expanded)e(v)-5 b(alue)36 b(of)g
+Fq(pa-)630 518 y(rameter)p Ft(.)45 b(If)32 b Fq(pattern)g
+Ft(b)s(egins)f(with)g(`)p Fs(\045)p Ft(',)i(it)f(m)m(ust)g(matc)m(h)g
+(at)h(the)f(end)f(of)h(the)g(expanded)630 628 y(v)-5
+b(alue)33 b(of)g Fq(parameter)p Ft(.)47 b(If)32 b Fq(string)40
+b Ft(is)33 b(n)m(ull,)g(matc)m(hes)g(of)g Fq(pattern)g
+Ft(are)g(deleted)g(and)f(the)g Fs(/)630 737 y Ft(follo)m(wing)37
+b Fq(pattern)e Ft(ma)m(y)h(b)s(e)e(omitted.)56 b(If)35
+b Fq(parameter)42 b Ft(is)36 b(`)p Fs(@)p Ft(')f(or)g(`)p
+Fs(*)p Ft(',)i(the)e(substitution)630 847 y(op)s(eration)30
+b(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 956 y(the)i(resultan)m(t)h(list.)45
+b(If)30 b Fq(parameter)39 b Ft(is)31 b(an)g(arra)m(y)h(v)-5
+b(ariable)32 b(subscripted)e(with)h(`)p Fs(@)p Ft(')g(or)h(`)p
+Fs(*)p Ft(',)630 1066 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 1176 y(the)h(expansion)f(is)g(the)h(resultan)m(t)g
+(list.)150 1443 y Fk(3.5.4)63 b(Command)41 b(Substitution)275
+1709 y Ft(Command)29 b(substitution)i(allo)m(ws)h(the)f(output)g(of)g
+(a)g(command)g(to)g(replace)h(the)f(command)g(itself.)150
+1819 y(Command)e(substitution)h(o)s(ccurs)h(when)e(a)i(command)f(is)g
+(enclosed)h(as)g(follo)m(ws:)390 1975 y Fs($\()p Fj(command)11
b Fs(\))150 2131 y Ft(or)390 2288 y Fs(`)p Fj(command)g
-Fs(`)150 2444 y Ft(Bash)45 b(p)s(erforms)f(the)h(expansion)e(b)m(y)i
-(executing)h Fq(command)i Ft(and)c(replacing)g(the)h(command)g(sub-)150
-2554 y(stitution)39 b(with)g(the)h(standard)g(output)g(of)g(the)g
-(command,)j(with)c(an)m(y)i(trailing)d(newlines)g(deleted.)150
-2663 y(Em)m(b)s(edded)30 b(newlines)f(are)j(not)f(deleted,)h(but)f
-(they)g(ma)m(y)h(b)s(e)f(remo)m(v)m(ed)i(during)c(w)m(ord)i(splitting.)
-41 b(The)150 2773 y(command)21 b(substitution)e Fs($\(cat)29
-b Fj(file)11 b Fs(\))20 b Ft(can)i(b)s(e)f(replaced)f(b)m(y)i(the)g
-(equiv)-5 b(alen)m(t)20 b(but)h(faster)h Fs($\(<)30 b
-Fj(file)11 b Fs(\))p Ft(.)275 2929 y(When)33 b(the)i(old-st)m(yle)f
-(bac)m(kquote)h(form)f(of)g(substitution)e(is)h(used,)i(bac)m(kslash)e
-(retains)h(its)f(literal)150 3039 y(meaning)k(except)i(when)e(follo)m
-(w)m(ed)h(b)m(y)g(`)p Fs($)p Ft(',)j(`)p Fs(`)p Ft(',)f(or)e(`)p
+Fs(`)150 2444 y Ft(Bash)45 b(p)s(erforms)f(the)h(expansion)f(b)m(y)h
+(executing)i Fq(command)h Ft(and)c(replacing)i(the)f(command)g(sub-)150
+2554 y(stitution)c(with)f(the)g(standard)g(output)g(of)g(the)g
+(command,)j(with)d(an)m(y)h(trailing)g(newlines)f(deleted.)150
+2663 y(Em)m(b)s(edded)30 b(newlines)h(are)h(not)f(deleted,)i(but)e
+(they)g(ma)m(y)h(b)s(e)f(remo)m(v)m(ed)i(during)d(w)m(ord)h(splitting.)
+44 b(The)150 2773 y(command)21 b(substitution)g Fs($\(cat)29
+b Fj(file)11 b Fs(\))20 b Ft(can)i(b)s(e)f(replaced)g(b)m(y)h(the)g
+(equiv)-5 b(alen)m(t)22 b(but)f(faster)h Fs($\(<)30 b
+Fj(file)11 b Fs(\))p Ft(.)275 2929 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 3039 y(meaning)k(except)h(when)e(follo)m
+(w)m(ed)j(b)m(y)e(`)p Fs($)p Ft(',)j(`)p Fs(`)p Ft(',)f(or)e(`)p
Fs(\\)p Ft('.)64 b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g
-(b)m(y)g(a)150 3148 y(bac)m(kslash)i(terminates)g(the)g(command)g
-(substitution.)67 b(When)40 b(using)f(the)h Fs($\()p
+(b)m(y)g(a)150 3148 y(bac)m(kslash)j(terminates)g(the)f(command)g
+(substitution.)69 b(When)40 b(using)g(the)g Fs($\()p
Fj(command)11 b Fs(\))37 b Ft(form,)42 b(all)150 3258
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 3414 y(Command)22 b(substitutions)e(ma)m(y)k(b)s(e)e(nested.)39
-b(T)-8 b(o)23 b(nest)g(when)f(using)g(the)h(bac)m(kquoted)h(form,)g
-(escap)s(e)150 3524 y(the)31 b(inner)d(bac)m(kquotes)k(with)d(bac)m
-(kslashes.)275 3680 y(If)f(the)i(substitution)c(app)s(ears)j(within)e
-(double)g(quotes,)j(w)m(ord)f(splitting)e(and)i(\014lename)f(expansion)
-150 3790 y(are)j(not)f(p)s(erformed)f(on)h(the)h(results.)150
-4057 y Fk(3.5.5)63 b(Arithmetic)39 b(Expansion)275 4323
-y Ft(Arithmetic)31 b(expansion)g(allo)m(ws)h(the)g(ev)-5
-b(aluation)32 b(of)h(an)f(arithmetic)g(expression)f(and)h(the)g
-(substi-)150 4433 y(tution)e(of)g(the)h(result.)39 b(The)30
-b(format)h(for)f(arithmetic)g(expansion)f(is:)390 4589
+b(.)275 3414 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 3524 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m
+(kslashes.)275 3680 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 3790 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150
+4057 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)275 4323
+y Ft(Arithmetic)33 b(expansion)f(allo)m(ws)i(the)e(ev)-5
+b(aluation)34 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g
+(substi-)150 4433 y(tution)f(of)f(the)h(result.)40 b(The)30
+b(format)h(for)f(arithmetic)i(expansion)e(is:)390 4589
y Fs($\(\()47 b Fj(expression)55 b Fs(\)\))275 4745 y
-Ft(The)33 b(expression)f(is)h(treated)h(as)g(if)f(it)g(w)m(ere)h
-(within)d(double)i(quotes,)i(but)e(a)h(double)e(quote)i(inside)150
-4855 y(the)27 b(paren)m(theses)g(is)f(not)h(treated)h(sp)s(ecially)-8
-b(.)38 b(All)25 b(tok)m(ens)j(in)d(the)i(expression)f(undergo)g
-(parameter)h(ex-)150 4965 y(pansion,)g(command)g(substitution,)f(and)h
-(quote)i(remo)m(v)-5 b(al.)40 b(Arithmetic)26 b(expansions)h(ma)m(y)h
-(b)s(e)f(nested.)275 5121 y(The)34 b(ev)-5 b(aluation)35
-b(is)g(p)s(erformed)f(according)h(to)h(the)g(rules)e(listed)g(b)s(elo)m
-(w)h(\(see)h(Section)f(6.5)i([Shell)150 5230 y(Arithmetic],)30
-b(page)h(70\).)42 b(If)30 b(the)h(expression)e(is)g(in)m(v)-5
-b(alid,)29 b(Bash)h(prin)m(ts)f(a)i(message)g(indicating)e(failure)150
-5340 y(to)i(the)g(standard)e(error)h(and)g(no)g(substitution)e(o)s
-(ccurs.)p eop
+Ft(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
+4855 y(the)27 b(paren)m(theses)g(is)g(not)g(treated)h(sp)s(ecially)-8
+b(.)41 b(All)27 b(tok)m(ens)h(in)e(the)h(expression)g(undergo)f
+(parameter)h(ex-)150 4965 y(pansion,)h(command)f(substitution,)h(and)f
+(quote)i(remo)m(v)-5 b(al.)41 b(Arithmetic)28 b(expansions)g(ma)m(y)g
+(b)s(e)f(nested.)275 5121 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 5230 y(Arithmetic],)32
+b(page)f(70\).)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
+5340 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s
+(ccurs.)p eop end
%%Page: 22 28
-22 27 bop 150 -116 a Ft(22)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fk(3.5.6)63 b(Pro)s(cess)42 b(Substitution)275
-539 y Ft(Pro)s(cess)33 b(substitution)f(is)h(supp)s(orted)f(on)h
-(systems)h(that)h(supp)s(ort)d(named)h(pip)s(es)f(\()p
-Fl(fif)n(o)p Ft(s\))i(or)g(the)150 649 y(`)p Fs(/dev/fd)p
-Ft(')29 b(metho)s(d)h(of)g(naming)f(op)s(en)h(\014les.)40
+TeXDict begin 22 27 bop 150 -116 a Ft(22)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fk(3.5.6)63 b(Pro)s(cess)42
+b(Substitution)275 539 y Ft(Pro)s(cess)33 b(substitution)h(is)g(supp)s
+(orted)e(on)h(systems)h(that)h(supp)s(ort)d(named)h(pip)s(es)g(\()p
+Fl(fif)n(o)p Ft(s\))h(or)g(the)150 649 y(`)p Fs(/dev/fd)p
+Ft(')29 b(metho)s(d)h(of)g(naming)g(op)s(en)g(\014les.)41
b(It)30 b(tak)m(es)i(the)f(form)f(of)390 779 y Fs(<\()p
Fj(list)11 b Fs(\))150 910 y Ft(or)390 1041 y Fs(>\()p
-Fj(list)g Fs(\))150 1171 y Ft(The)23 b(pro)s(cess)g Fq(list)h
-Ft(is)e(run)g(with)g(its)h(input)f(or)h(output)g(connected)h(to)h(a)e
-Fl(fif)n(o)g Ft(or)h(some)g(\014le)e(in)g(`)p Fs(/dev/fd)p
-Ft('.)150 1281 y(The)28 b(name)h(of)g(this)e(\014le)h(is)g(passed)g(as)
+Fj(list)g Fs(\))150 1171 y Ft(The)23 b(pro)s(cess)g Fq(list)j
+Ft(is)d(run)f(with)h(its)h(input)f(or)g(output)g(connected)h(to)h(a)e
+Fl(fif)n(o)g Ft(or)h(some)g(\014le)f(in)g(`)p Fs(/dev/fd)p
+Ft('.)150 1281 y(The)28 b(name)h(of)g(this)f(\014le)h(is)g(passed)f(as)
h(an)f(argumen)m(t)h(to)h(the)f(curren)m(t)f(command)h(as)f(the)h
-(result)f(of)h(the)150 1391 y(expansion.)39 b(If)28 b(the)h
-Fs(>\()p Fj(list)11 b Fs(\))26 b Ft(form)i(is)g(used,)g(writing)f(to)i
-(the)g(\014le)e(will)f(pro)m(vide)i(input)f(for)h Fq(list)p
-Ft(.)39 b(If)28 b(the)150 1500 y Fs(<\()p Fj(list)11
-b Fs(\))23 b Ft(form)h(is)h(used,)g(the)h(\014le)e(passed)h(as)g(an)g
-(argumen)m(t)h(should)d(b)s(e)i(read)g(to)h(obtain)f(the)g(output)g(of)
-150 1610 y Fq(list)p Ft(.)39 b(Note)31 b(that)f(no)g(space)g(ma)m(y)g
+(result)g(of)g(the)150 1391 y(expansion.)40 b(If)28 b(the)h
+Fs(>\()p Fj(list)11 b Fs(\))26 b Ft(form)i(is)h(used,)f(writing)h(to)g
+(the)g(\014le)f(will)h(pro)m(vide)g(input)f(for)g Fq(list)p
+Ft(.)41 b(If)28 b(the)150 1500 y Fs(<\()p Fj(list)11
+b Fs(\))23 b Ft(form)h(is)i(used,)f(the)h(\014le)f(passed)g(as)g(an)g
+(argumen)m(t)h(should)e(b)s(e)h(read)g(to)h(obtain)g(the)f(output)g(of)
+150 1610 y Fq(list)p Ft(.)41 b(Note)31 b(that)f(no)g(space)g(ma)m(y)g
(app)s(ear)f(b)s(et)m(w)m(een)h(the)g Fs(<)f Ft(or)h
-Fs(>)f Ft(and)g(the)h(left)f(paren)m(thesis,)h(otherwise)150
-1719 y(the)h(construct)f(w)m(ould)f(b)s(e)h(in)m(terpreted)g(as)g(a)h
-(redirection.)275 1850 y(When)36 b(a)m(v)-5 b(ailable,)37
-b(pro)s(cess)f(substitution)f(is)g(p)s(erformed)g(sim)m(ultaneously)f
-(with)i(parameter)h(and)150 1960 y(v)-5 b(ariable)29
-b(expansion,)h(command)g(substitution,)e(and)i(arithmetic)g(expansion.)
+Fs(>)f Ft(and)g(the)h(left)g(paren)m(thesis,)h(otherwise)150
+1719 y(the)g(construct)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(as)f(a)h
+(redirection.)275 1850 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 1960 y(v)-5 b(ariable)31
+b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.)
150 2172 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)275
-2413 y Ft(The)35 b(shell)g(scans)h(the)g(results)f(of)h(parameter)h
-(expansion,)g(command)e(substitution,)h(and)g(arith-)150
-2522 y(metic)30 b(expansion)g(that)h(did)d(not)j(o)s(ccur)f(within)e
-(double)h(quotes)i(for)f(w)m(ord)g(splitting.)275 2653
-y(The)43 b(shell)f(treats)j(eac)m(h)h(c)m(haracter)f(of)g
-Fs($IFS)e Ft(as)h(a)g(delimiter,)i(and)d(splits)f(the)j(results)d(of)j
-(the)150 2763 y(other)40 b(expansions)e(in)m(to)i(w)m(ords)f(on)h
-(these)g(c)m(haracters.)70 b(If)39 b Fs(IFS)g Ft(is)g(unset,)j(or)d
-(its)g(v)-5 b(alue)39 b(is)g(exactly)150 2872 y Fs
-(<space><tab><newline>)p Ft(,)20 b(the)25 b(default,)g(then)f(an)m(y)g
+2413 y Ft(The)35 b(shell)i(scans)f(the)g(results)g(of)g(parameter)h
+(expansion,)h(command)d(substitution,)j(and)e(arith-)150
+2522 y(metic)31 b(expansion)g(that)g(did)e(not)i(o)s(ccur)f(within)g
+(double)g(quotes)h(for)f(w)m(ord)g(splitting.)275 2653
+y(The)43 b(shell)h(treats)h(eac)m(h)h(c)m(haracter)f(of)g
+Fs($IFS)e Ft(as)h(a)g(delimiter,)49 b(and)43 b(splits)h(the)h(results)e
+(of)i(the)150 2763 y(other)40 b(expansions)f(in)m(to)i(w)m(ords)e(on)h
+(these)g(c)m(haracters.)70 b(If)39 b Fs(IFS)g Ft(is)h(unset,)i(or)d
+(its)h(v)-5 b(alue)40 b(is)g(exactly)150 2872 y Fs
+(<space><tab><newline>)p Ft(,)20 b(the)25 b(default,)h(then)e(an)m(y)g
(sequence)h(of)g Fs(IFS)e Ft(c)m(haracters)j(serv)m(es)f(to)g(delimit)
150 2982 y(w)m(ords.)38 b(If)21 b Fs(IFS)h Ft(has)g(a)h(v)-5
-b(alue)22 b(other)g(than)h(the)f(default,)i(then)e(sequences)g(of)h
-(the)f(whitespace)g(c)m(haracters)150 3091 y Fs(space)k
-Ft(and)h Fs(tab)g Ft(are)h(ignored)f(at)i(the)f(b)s(eginning)d(and)i
-(end)g(of)h(the)g(w)m(ord,)g(as)g(long)f(as)h(the)g(whitespace)150
-3201 y(c)m(haracter)34 b(is)e(in)f(the)i(v)-5 b(alue)32
-b(of)g Fs(IFS)g Ft(\(an)h Fs(IFS)e Ft(whitespace)i(c)m(haracter\).)49
-b(An)m(y)32 b(c)m(haracter)i(in)e Fs(IFS)f Ft(that)150
-3311 y(is)e(not)i Fs(IFS)f Ft(whitespace,)g(along)g(with)f(an)m(y)i
-(adjacen)m(t)h Fs(IFS)d Ft(whitespace)h(c)m(haracters,)i(delimits)c(a)j
-(\014eld.)150 3420 y(A)h(sequence)h(of)f Fs(IFS)f Ft(whitespace)h(c)m
-(haracters)i(is)d(also)h(treated)h(as)g(a)f(delimiter.)44
-b(If)32 b(the)g(v)-5 b(alue)32 b(of)g Fs(IFS)150 3530
-y Ft(is)d(n)m(ull,)g(no)h(w)m(ord)g(splitting)e(o)s(ccurs.)275
-3660 y(Explicit)41 b(n)m(ull)g(argumen)m(ts)i(\()p Fs("")g
-Ft(or)h Fs('')p Ft(\))f(are)g(retained.)79 b(Unquoted)43
-b(implicit)d(n)m(ull)h(argumen)m(ts,)150 3770 y(resulting)22
-b(from)h(the)g(expansion)f(of)i(parameters)g(that)g(ha)m(v)m(e)h(no)e
-(v)-5 b(alues,)24 b(are)g(remo)m(v)m(ed.)40 b(If)23 b(a)g(parameter)150
-3880 y(with)29 b(no)h(v)-5 b(alue)30 b(is)g(expanded)f(within)f(double)
-h(quotes,)i(a)g(n)m(ull)d(argumen)m(t)j(results)e(and)h(is)f(retained.)
-275 4010 y(Note)i(that)g(if)f(no)g(expansion)f(o)s(ccurs,)h(no)h
-(splitting)d(is)h(p)s(erformed.)150 4223 y Fk(3.5.8)63
-b(Filename)40 b(Expansion)275 4463 y Ft(After)22 b(w)m(ord)g
-(splitting,)g(unless)f(the)i(`)p Fs(-f)p Ft(')f(option)g(has)g(b)s(een)
-g(set)h(\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)150
+b(alue)23 b(other)f(than)h(the)f(default,)j(then)d(sequences)g(of)h
+(the)f(whitespace)h(c)m(haracters)150 3091 y Fs(space)j
+Ft(and)h Fs(tab)g Ft(are)h(ignored)g(at)h(the)f(b)s(eginning)f(and)g
+(end)g(of)h(the)g(w)m(ord,)g(as)g(long)g(as)g(the)g(whitespace)150
+3201 y(c)m(haracter)34 b(is)f(in)f(the)h(v)-5 b(alue)33
+b(of)f Fs(IFS)g Ft(\(an)h Fs(IFS)e Ft(whitespace)j(c)m(haracter\).)49
+b(An)m(y)32 b(c)m(haracter)i(in)f Fs(IFS)e Ft(that)150
+3311 y(is)f(not)h Fs(IFS)f Ft(whitespace,)h(along)g(with)f(an)m(y)h
+(adjacen)m(t)h Fs(IFS)d Ft(whitespace)i(c)m(haracters,)h(delimits)f(a)g
+(\014eld.)150 3420 y(A)h(sequence)h(of)f Fs(IFS)f Ft(whitespace)i(c)m
+(haracters)h(is)e(also)h(treated)g(as)g(a)f(delimiter.)47
+b(If)32 b(the)g(v)-5 b(alue)33 b(of)f Fs(IFS)150 3530
+y Ft(is)e(n)m(ull,)h(no)f(w)m(ord)g(splitting)h(o)s(ccurs.)275
+3660 y(Explicit)44 b(n)m(ull)f(argumen)m(ts)g(\()p Fs("")g
+Ft(or)h Fs('')p Ft(\))f(are)g(retained.)80 b(Unquoted)43
+b(implicit)h(n)m(ull)f(argumen)m(ts,)150 3770 y(resulting)24
+b(from)f(the)g(expansion)g(of)h(parameters)g(that)g(ha)m(v)m(e)h(no)e
+(v)-5 b(alues,)25 b(are)f(remo)m(v)m(ed.)40 b(If)23 b(a)g(parameter)150
+3880 y(with)30 b(no)g(v)-5 b(alue)31 b(is)g(expanded)e(within)h(double)
+g(quotes,)h(a)g(n)m(ull)f(argumen)m(t)h(results)f(and)g(is)g(retained.)
+275 4010 y(Note)h(that)g(if)g(no)f(expansion)g(o)s(ccurs,)g(no)h
+(splitting)g(is)f(p)s(erformed.)150 4223 y Fk(3.5.8)63
+b(Filename)41 b(Expansion)275 4463 y Ft(After)22 b(w)m(ord)g
+(splitting,)j(unless)d(the)h(`)p Fs(-f)p Ft(')f(option)h(has)f(b)s(een)
+g(set)h(\(see)g(Section)h(4.3)f([The)f(Set)h(Builtin],)150
4573 y(page)k(50\),)i(Bash)d(scans)h(eac)m(h)h(w)m(ord)e(for)g(the)h(c)
m(haracters)g(`)p Fs(*)p Ft(',)h(`)p Fs(?)p Ft(',)g(and)e(`)p
Fs([)p Ft('.)39 b(If)26 b(one)h(of)g(these)f(c)m(haracters)150
-4682 y(app)s(ears,)h(then)f(the)h(w)m(ord)f(is)g(regarded)h(as)g(a)g
-Fq(pattern)p Ft(,)g(and)g(replaced)f(with)f(an)i(alphab)s(etically)d
-(sorted)150 4792 y(list)30 b(of)i(\014le)f(names)h(matc)m(hing)g(the)g
-(pattern.)45 b(If)32 b(no)f(matc)m(hing)h(\014le)f(names)h(are)g
-(found,)f(and)h(the)g(shell)150 4902 y(option)27 b Fs(nullglob)f
-Ft(is)h(disabled,)g(the)h(w)m(ord)g(is)f(left)g(unc)m(hanged.)40
-b(If)28 b(the)g Fs(nullglob)e Ft(option)h(is)g(set,)j(and)150
-5011 y(no)38 b(matc)m(hes)h(are)f(found,)h(the)f(w)m(ord)f(is)g(remo)m
-(v)m(ed.)65 b(If)37 b(the)h Fs(failglob)e Ft(shell)g(option)h(is)g
-(set,)k(and)c(no)150 5121 y(matc)m(hes)f(are)g(found,)f(an)g(error)f
-(message)j(is)d(prin)m(ted)f(and)i(the)g(command)g(is)f(not)h
-(executed.)56 b(If)35 b(the)150 5230 y(shell)c(option)i
-Fs(nocaseglob)d Ft(is)i(enabled,)h(the)h(matc)m(h)g(is)e(p)s(erformed)f
-(without)h(regard)h(to)h(the)g(case)g(of)150 5340 y(alphab)s(etic)29
-b(c)m(haracters.)p eop
+4682 y(app)s(ears,)h(then)f(the)h(w)m(ord)f(is)h(regarded)g(as)g(a)g
+Fq(pattern)p Ft(,)g(and)g(replaced)g(with)f(an)h(alphab)s(etically)h
+(sorted)150 4792 y(list)k(of)g(\014le)g(names)g(matc)m(hing)h(the)f
+(pattern.)45 b(If)32 b(no)f(matc)m(hing)i(\014le)f(names)g(are)g
+(found,)f(and)h(the)g(shell)150 4902 y(option)c Fs(nullglob)e
+Ft(is)i(disabled,)h(the)f(w)m(ord)g(is)g(left)g(unc)m(hanged.)40
+b(If)28 b(the)g Fs(nullglob)e Ft(option)i(is)g(set,)i(and)150
+5011 y(no)38 b(matc)m(hes)h(are)f(found,)h(the)f(w)m(ord)f(is)h(remo)m
+(v)m(ed.)65 b(If)37 b(the)h Fs(failglob)e Ft(shell)i(option)g(is)g
+(set,)j(and)c(no)150 5121 y(matc)m(hes)f(are)g(found,)f(an)g(error)f
+(message)j(is)e(prin)m(ted)f(and)h(the)g(command)g(is)g(not)g
+(executed.)56 b(If)35 b(the)150 5230 y(shell)e(option)h
+Fs(nocaseglob)c Ft(is)j(enabled,)h(the)g(matc)m(h)g(is)f(p)s(erformed)e
+(without)i(regard)g(to)h(the)g(case)g(of)150 5340 y(alphab)s(etic)d(c)m
+(haracters.)p eop end
%%Page: 23 29
-23 28 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(23)275 299 y(When)21
-b(a)i(pattern)f(is)f(used)h(for)f(\014lename)h(generation,)i(the)e(c)m
-(haracter)i(`)p Fs(.)p Ft(')e(at)h(the)f(start)h(of)f(a)h(\014lename)
-150 408 y(or)g(immediately)f(follo)m(wing)g(a)i(slash)e(m)m(ust)i(b)s
-(e)f(matc)m(hed)h(explicitly)-8 b(,)23 b(unless)f(the)h(shell)f(option)
-h Fs(dotglob)150 518 y Ft(is)30 b(set.)45 b(When)31 b(matc)m(hing)g(a)h
-(\014le)e(name,)i(the)g(slash)e(c)m(haracter)j(m)m(ust)e(alw)m(a)m(ys)h
-(b)s(e)f(matc)m(hed)h(explicitly)-8 b(.)150 628 y(In)30
-b(other)g(cases,)i(the)e(`)p Fs(.)p Ft(')h(c)m(haracter)h(is)d(not)i
-(treated)g(sp)s(ecially)-8 b(.)275 772 y(See)30 b(the)g(description)d
-(of)j Fs(shopt)f Ft(in)f(Section)i(4.2)h([Bash)f(Builtins],)e(page)i
-(39,)h(for)f(a)g(description)e(of)150 882 y(the)j Fs(nocaseglob)p
-Ft(,)c Fs(nullglob)p Ft(,)i Fs(failglob)p Ft(,)f(and)i
-Fs(dotglob)e Ft(options.)275 1026 y(The)k Fs(GLOBIGNORE)f
-Ft(shell)g(v)-5 b(ariable)32 b(ma)m(y)i(b)s(e)f(used)f(to)i(restrict)f
-(the)h(set)f(of)h(\014lenames)e(matc)m(hing)i(a)150 1136
-y(pattern.)39 b(If)25 b Fs(GLOBIGNORE)e Ft(is)i(set,)i(eac)m(h)g(matc)m
-(hing)f(\014lename)f(that)h(also)g(matc)m(hes)g(one)g(of)g(the)g
-(patterns)150 1245 y(in)32 b Fs(GLOBIGNORE)e Ft(is)i(remo)m(v)m(ed)i
-(from)e(the)i(list)d(of)i(matc)m(hes.)50 b(The)33 b(\014lenames)f(`)p
-Fs(.)p Ft(')h(and)f(`)p Fs(..)p Ft(')h(are)g(alw)m(a)m(ys)150
-1355 y(ignored)f(when)f Fs(GLOBIGNORE)f Ft(is)i(set)h(and)f(not)h(n)m
-(ull.)46 b(Ho)m(w)m(ev)m(er,)35 b(setting)e Fs(GLOBIGNORE)d
-Ft(to)j(a)g(non-n)m(ull)150 1465 y(v)-5 b(alue)33 b(has)g(the)h
-(e\013ect)h(of)f(enabling)e(the)i Fs(dotglob)e Ft(shell)f(option,)k(so)
-f(all)e(other)i(\014lenames)f(b)s(eginning)150 1574 y(with)42
-b(a)i(`)p Fs(.)p Ft(')f(will)e(matc)m(h.)80 b(T)-8 b(o)44
-b(get)h(the)e(old)g(b)s(eha)m(vior)f(of)i(ignoring)d(\014lenames)i(b)s
-(eginning)e(with)h(a)150 1684 y(`)p Fs(.)p Ft(',)d(mak)m(e)g(`)p
-Fs(.*)p Ft(')e(one)g(of)g(the)h(patterns)f(in)f Fs(GLOBIGNORE)p
-Ft(.)58 b(The)37 b Fs(dotglob)e Ft(option)i(is)f(disabled)f(when)150
-1793 y Fs(GLOBIGNORE)28 b Ft(is)h(unset.)150 2037 y Fk(3.5.8.1)63
+TeXDict begin 23 28 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(23)275 299
+y(When)21 b(a)i(pattern)f(is)g(used)g(for)f(\014lename)i(generation,)i
+(the)d(c)m(haracter)i(`)p Fs(.)p Ft(')e(at)h(the)f(start)h(of)f(a)h
+(\014lename)150 408 y(or)g(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 Fs(dotglob)150 518 y Ft(is)31 b(set.)45
+b(When)31 b(matc)m(hing)h(a)g(\014le)f(name,)h(the)g(slash)f(c)m
+(haracter)i(m)m(ust)e(alw)m(a)m(ys)i(b)s(e)e(matc)m(hed)h(explicitly)-8
+b(.)150 628 y(In)30 b(other)g(cases,)i(the)e(`)p Fs(.)p
+Ft(')h(c)m(haracter)h(is)e(not)h(treated)g(sp)s(ecially)-8
+b(.)275 772 y(See)30 b(the)g(description)f(of)h Fs(shopt)f
+Ft(in)g(Section)i(4.2)g([Bash)f(Builtins],)h(page)f(39,)h(for)f(a)g
+(description)g(of)150 882 y(the)h Fs(nocaseglob)p Ft(,)c
+Fs(nullglob)p Ft(,)i Fs(failglob)p Ft(,)f(and)i Fs(dotglob)e
+Ft(options.)275 1026 y(The)k Fs(GLOBIGNORE)f Ft(shell)i(v)-5
+b(ariable)34 b(ma)m(y)g(b)s(e)f(used)f(to)i(restrict)g(the)g(set)f(of)h
+(\014lenames)f(matc)m(hing)i(a)150 1136 y(pattern.)k(If)25
+b Fs(GLOBIGNORE)e Ft(is)j(set,)h(eac)m(h)g(matc)m(hing)g(\014lename)f
+(that)g(also)h(matc)m(hes)f(one)g(of)g(the)g(patterns)150
+1245 y(in)33 b Fs(GLOBIGNORE)d Ft(is)j(remo)m(v)m(ed)h(from)e(the)i
+(list)f(of)g(matc)m(hes.)50 b(The)33 b(\014lenames)g(`)p
+Fs(.)p Ft(')g(and)f(`)p Fs(..)p Ft(')h(are)g(alw)m(a)m(ys)150
+1355 y(ignored)g(when)e Fs(GLOBIGNORE)f Ft(is)j(set)g(and)f(not)h(n)m
+(ull.)48 b(Ho)m(w)m(ev)m(er,)35 b(setting)f Fs(GLOBIGNORE)c
+Ft(to)j(a)g(non-n)m(ull)150 1465 y(v)-5 b(alue)34 b(has)f(the)h
+(e\013ect)h(of)f(enabling)g(the)g Fs(dotglob)e Ft(shell)h(option,)j(so)
+e(all)g(other)g(\014lenames)g(b)s(eginning)150 1574 y(with)43
+b(a)h(`)p Fs(.)p Ft(')f(will)h(matc)m(h.)80 b(T)-8 b(o)44
+b(get)h(the)e(old)h(b)s(eha)m(vior)f(of)h(ignoring)f(\014lenames)h(b)s
+(eginning)f(with)g(a)150 1684 y(`)p Fs(.)p Ft(',)c(mak)m(e)g(`)p
+Fs(.*)p Ft(')e(one)g(of)g(the)h(patterns)f(in)g Fs(GLOBIGNORE)p
+Ft(.)58 b(The)37 b Fs(dotglob)e Ft(option)j(is)f(disabled)g(when)150
+1793 y Fs(GLOBIGNORE)28 b Ft(is)i(unset.)150 2037 y Fk(3.5.8.1)63
b(P)m(attern)40 b(Matc)m(hing)275 2291 y Ft(An)m(y)33
-b(c)m(haracter)i(that)f(app)s(ears)f(in)f(a)i(pattern,)g(other)g(than)f
-(the)g(sp)s(ecial)f(pattern)i(c)m(haracters)h(de-)150
-2401 y(scrib)s(ed)29 b(b)s(elo)m(w,)h(matc)m(hes)i(itself.)41
-b(The)31 b Fl(nul)f Ft(c)m(haracter)i(ma)m(y)f(not)h(o)s(ccur)e(in)g(a)
-h(pattern.)42 b(A)31 b(bac)m(kslash)150 2511 y(escap)s(es)36
-b(the)f(follo)m(wing)f(c)m(haracter;)40 b(the)c(escaping)f(bac)m
-(kslash)g(is)f(discarded)g(when)h(matc)m(hing.)55 b(The)150
-2620 y(sp)s(ecial)29 b(pattern)h(c)m(haracters)i(m)m(ust)f(b)s(e)e
-(quoted)i(if)e(they)i(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8
-b(.)275 2765 y(The)29 b(sp)s(ecial)g(pattern)i(c)m(haracters)h(ha)m(v)m
-(e)f(the)g(follo)m(wing)e(meanings:)150 2939 y Fs(*)432
-b Ft(Matc)m(hes)32 b(an)m(y)f(string,)e(including)e(the)k(n)m(ull)d
-(string.)150 3108 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)e(c)m
+b(c)m(haracter)i(that)f(app)s(ears)f(in)g(a)h(pattern,)g(other)g(than)f
+(the)g(sp)s(ecial)h(pattern)g(c)m(haracters)h(de-)150
+2401 y(scrib)s(ed)30 b(b)s(elo)m(w,)h(matc)m(hes)h(itself.)43
+b(The)31 b Fl(nul)f Ft(c)m(haracter)i(ma)m(y)f(not)h(o)s(ccur)e(in)h(a)
+g(pattern.)42 b(A)31 b(bac)m(kslash)150 2511 y(escap)s(es)36
+b(the)f(follo)m(wing)i(c)m(haracter;)j(the)c(escaping)g(bac)m(kslash)g
+(is)f(discarded)g(when)g(matc)m(hing.)56 b(The)150 2620
+y(sp)s(ecial)31 b(pattern)f(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 2765 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 2939 y Fs(*)432
+b Ft(Matc)m(hes)32 b(an)m(y)f(string,)f(including)g(the)h(n)m(ull)f
+(string.)150 3108 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)g(c)m
(haracter.)150 3278 y Fs([...)o(])241 b Ft(Matc)m(hes)27
-b(an)m(y)e(one)g(of)g(the)g(enclosed)f(c)m(haracters.)41
-b(A)25 b(pair)e(of)i(c)m(haracters)i(separated)e(b)m(y)g(a)630
+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
3387 y(h)m(yphen)i(denotes)h(a)g Fq(range)g(expression)p
-Ft(;)f(an)m(y)i(c)m(haracter)g(that)f(sorts)g(b)s(et)m(w)m(een)g(those)
-h(t)m(w)m(o)630 3497 y(c)m(haracters,)f(inclusiv)m(e,)c(using)f(the)i
-(curren)m(t)f(lo)s(cale's)h(collating)f(sequence)h(and)f(c)m(haracter)
-630 3606 y(set,)31 b(is)e(matc)m(hed.)42 b(If)30 b(the)g(\014rst)g(c)m
-(haracter)i(follo)m(wing)d(the)h(`)p Fs([)p Ft(')h(is)e(a)i(`)p
+Ft(;)g(an)m(y)h(c)m(haracter)g(that)f(sorts)g(b)s(et)m(w)m(een)g(those)
+h(t)m(w)m(o)630 3497 y(c)m(haracters,)f(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 3606 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 Fs([)p Ft(')h(is)f(a)h(`)p
Fs(!)p Ft(')f(or)g(a)h(`)p Fs(^)p Ft(')g(then)f(an)m(y)630
-3716 y(c)m(haracter)c(not)f(enclosed)f(is)g(matc)m(hed.)40
+3716 y(c)m(haracter)c(not)f(enclosed)g(is)g(matc)m(hed.)40
b(A)25 b(`)p Fp(\000)p Ft(')f(ma)m(y)i(b)s(e)e(matc)m(hed)h(b)m(y)f
-(including)e(it)i(as)h(the)630 3826 y(\014rst)32 b(or)h(last)g(c)m
-(haracter)i(in)d(the)h(set.)50 b(A)33 b(`)p Fs(])p Ft(')g(ma)m(y)h(b)s
-(e)e(matc)m(hed)i(b)m(y)f(including)d(it)i(as)i(the)630
-3935 y(\014rst)25 b(c)m(haracter)i(in)d(the)i(set.)40
-b(The)25 b(sorting)g(order)g(of)h(c)m(haracters)h(in)e(range)h
-(expressions)e(is)630 4045 y(determined)e(b)m(y)h(the)g(curren)m(t)f
-(lo)s(cale)h(and)g(the)g(v)-5 b(alue)22 b(of)h(the)h
-Fs(LC_COLLATE)c Ft(shell)h(v)-5 b(ariable,)630 4154 y(if)29
-b(set.)630 4294 y(F)-8 b(or)34 b(example,)f(in)f(the)h(default)f(C)g
-(lo)s(cale,)i(`)p Fs([a-dx-z])p Ft(')d(is)h(equiv)-5
-b(alen)m(t)32 b(to)i(`)p Fs([abcdxyz])p Ft('.)630 4403
-y(Man)m(y)68 b(lo)s(cales)f(sort)h(c)m(haracters)h(in)d(dictionary)h
-(order,)76 b(and)67 b(in)f(these)i(lo)s(cales)630 4513
-y(`)p Fs([a-dx-z])p Ft(')36 b(is)h(t)m(ypically)g(not)h(equiv)-5
-b(alen)m(t)37 b(to)i(`)p Fs([abcdxyz])p Ft(';)g(it)f(migh)m(t)f(b)s(e)g
+(including)h(it)g(as)g(the)630 3826 y(\014rst)32 b(or)h(last)h(c)m
+(haracter)h(in)e(the)g(set.)50 b(A)33 b(`)p Fs(])p Ft(')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
+3935 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 4045 y(determined)e(b)m(y)g(the)g(curren)m(t)f
+(lo)s(cale)j(and)e(the)g(v)-5 b(alue)23 b(of)g(the)h
+Fs(LC_COLLATE)c Ft(shell)j(v)-5 b(ariable,)630 4154 y(if)30
+b(set.)630 4294 y(F)-8 b(or)34 b(example,)g(in)f(the)g(default)g(C)f
+(lo)s(cale,)k(`)p Fs([a-dx-z])p Ft(')31 b(is)i(equiv)-5
+b(alen)m(t)34 b(to)g(`)p Fs([abcdxyz])p Ft('.)630 4403
+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 4513
+y(`)p Fs([a-dx-z])p Ft(')36 b(is)i(t)m(ypically)i(not)e(equiv)-5
+b(alen)m(t)39 b(to)g(`)p Fs([abcdxyz])p Ft(';)g(it)g(migh)m(t)f(b)s(e)f
(equiv)-5 b(alen)m(t)630 4623 y(to)34 b(`)p Fs([aBbCcDdxXyYz])p
-Ft(',)c(for)j(example.)48 b(T)-8 b(o)33 b(obtain)g(the)g(traditional)e
-(in)m(terpretation)i(of)630 4732 y(ranges)g(in)e(brac)m(k)m(et)j
-(expressions,)f(y)m(ou)g(can)g(force)g(the)g(use)f(of)h(the)g(C)f(lo)s
-(cale)g(b)m(y)h(setting)630 4842 y(the)e Fs(LC_COLLATE)c
-Ft(or)k Fs(LC_ALL)d Ft(en)m(vironmen)m(t)i(v)-5 b(ariable)29
-b(to)i(the)g(v)-5 b(alue)30 b(`)p Fs(C)p Ft('.)630 4981
-y(Within)21 b(`)p Fs([)p Ft(')j(and)e(`)p Fs(])p Ft(',)j
-Fq(c)m(haracter)g(classes)i Ft(can)d(b)s(e)e(sp)s(eci\014ed)g(using)f
-(the)j(syn)m(tax)f Fs([:)p Fq(class)t Fs(:])p Ft(,)630
-5091 y(where)j Fq(class)k Ft(is)c(one)h(of)g(the)g(follo)m(wing)e
-(classes)i(de\014ned)e(in)h(the)g Fl(posix)g Ft(1003.2)k(standard:)870
+Ft(',)c(for)j(example.)49 b(T)-8 b(o)33 b(obtain)h(the)f(traditional)h
+(in)m(terpretation)h(of)630 4732 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 4842 y(the)e Fs(LC_COLLATE)c
+Ft(or)k Fs(LC_ALL)d Ft(en)m(vironmen)m(t)j(v)-5 b(ariable)31
+b(to)g(the)g(v)-5 b(alue)31 b(`)p Fs(C)p Ft('.)630 4981
+y(Within)23 b(`)p Fs([)p Ft(')h(and)e(`)p Fs(])p Ft(',)j
+Fq(c)m(haracter)g(classes)j Ft(can)c(b)s(e)e(sp)s(eci\014ed)h(using)f
+(the)i(syn)m(tax)f Fs([:)p Fq(class)t Fs(:])p Ft(,)630
+5091 y(where)j Fq(class)31 b Ft(is)c(one)g(of)g(the)g(follo)m(wing)h
+(classes)g(de\014ned)d(in)i(the)f Fl(posix)g Ft(1003.2)k(standard:)870
5230 y Fs(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g
(lower)870 5340 y(print)g(punct)g(space)f(upper)h(word)190
-b(xdigit)p eop
+b(xdigit)p eop end
%%Page: 24 30
-24 29 bop 150 -116 a Ft(24)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(A)42 b(c)m(haracter)h(class)e(matc)m(hes)i(an)m(y)f(c)m(haracter)
-h(b)s(elonging)d(to)i(that)g(class.)74 b(The)41 b Fs(word)630
-408 y Ft(c)m(haracter)32 b(class)e(matc)m(hes)i(letters,)e(digits,)g
-(and)f(the)i(c)m(haracter)h(`)p Fs(_)p Ft('.)630 544
-y(Within)23 b(`)p Fs([)p Ft(')h(and)g(`)p Fs(])p Ft(',)i(an)e
-Fq(equiv)-5 b(alence)24 b(class)k Ft(can)c(b)s(e)g(sp)s(eci\014ed)f
-(using)g(the)h(syn)m(tax)h Fs([=)p Fq(c)6 b Fs(=])p Ft(,)630
-653 y(whic)m(h)28 b(matc)m(hes)j(all)d(c)m(haracters)j(with)d(the)i
-(same)g(collation)e(w)m(eigh)m(t)i(\(as)g(de\014ned)e(b)m(y)i(the)630
-763 y(curren)m(t)g(lo)s(cale\))h(as)f(the)h(c)m(haracter)h
-Fq(c)p Ft(.)630 898 y(Within)20 b(`)p Fs([)p Ft(')h(and)g(`)p
-Fs(])p Ft(',)j(the)d(syn)m(tax)h Fs([.)p Fq(sym)m(b)s(ol)t
-Fs(.])d Ft(matc)m(hes)j(the)g(collating)f(sym)m(b)s(ol)f
-Fq(sym)m(b)s(ol)p Ft(.)275 1061 y(If)29 b(the)g Fs(extglob)f
-Ft(shell)f(option)i(is)g(enabled)f(using)g(the)i Fs(shopt)e
-Ft(builtin,)e(sev)m(eral)k(extended)g(pattern)150 1170
-y(matc)m(hing)36 b(op)s(erators)f(are)h(recognized.)57
-b(In)35 b(the)g(follo)m(wing)f(description,)h(a)h Fq(pattern-list)h
-Ft(is)e(a)h(list)e(of)150 1280 y(one)f(or)f(more)h(patterns)f
-(separated)h(b)m(y)f(a)h(`)p Fs(|)p Ft('.)47 b(Comp)s(osite)32
-b(patterns)g(ma)m(y)i(b)s(e)d(formed)h(using)f(one)i(or)150
-1389 y(more)e(of)f(the)h(follo)m(wing)d(sub-patterns:)150
+TeXDict begin 24 29 bop 150 -116 a Ft(24)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(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 Fs(word)630 408 y Ft(c)m(haracter)32 b(class)f(matc)m(hes)h
+(letters,)f(digits,)h(and)d(the)i(c)m(haracter)h(`)p
+Fs(_)p Ft('.)630 544 y(Within)25 b(`)p Fs([)p Ft(')f(and)g(`)p
+Fs(])p Ft(',)i(an)e Fq(equiv)-5 b(alence)26 b(class)j
+Ft(can)24 b(b)s(e)g(sp)s(eci\014ed)g(using)g(the)g(syn)m(tax)h
+Fs([=)p Fq(c)6 b Fs(=])p Ft(,)630 653 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 763 y(curren)m(t)g(lo)s(cale\))j(as)d(the)
+h(c)m(haracter)h Fq(c)p Ft(.)630 898 y(Within)22 b(`)p
+Fs([)p Ft(')f(and)g(`)p Fs(])p Ft(',)j(the)d(syn)m(tax)h
+Fs([.)p Fq(sym)m(b)s(ol)t Fs(.])e Ft(matc)m(hes)i(the)g(collating)i
+(sym)m(b)s(ol)d Fq(sym)m(b)s(ol)p Ft(.)275 1061 y(If)29
+b(the)g Fs(extglob)f Ft(shell)h(option)h(is)g(enabled)f(using)g(the)h
+Fs(shopt)e Ft(builtin,)h(sev)m(eral)i(extended)f(pattern)150
+1170 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 Fq(pattern-list)j
+Ft(is)d(a)g(list)g(of)150 1280 y(one)d(or)f(more)h(patterns)f
+(separated)h(b)m(y)f(a)h(`)p Fs(|)p Ft('.)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
+1389 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150
1551 y Fs(?\()p Fj(pattern-list)11 b Fs(\))630 1661 y
Ft(Matc)m(hes)32 b(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m
-(en)f(patterns.)150 1822 y Fs(*\()p Fj(pattern-list)11
+(en)g(patterns.)150 1822 y Fs(*\()p Fj(pattern-list)11
b Fs(\))630 1932 y Ft(Matc)m(hes)32 b(zero)f(or)g(more)f(o)s
-(ccurrences)h(of)f(the)h(giv)m(en)f(patterns.)150 2093
+(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)150 2093
y Fs(+\()p Fj(pattern-list)11 b Fs(\))630 2203 y Ft(Matc)m(hes)32
-b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)h(patterns.)
+b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)i(patterns.)
150 2364 y Fs(@\()p Fj(pattern-list)11 b Fs(\))630 2473
-y Ft(Matc)m(hes)32 b(exactly)f(one)g(of)f(the)h(giv)m(en)f(patterns.)
+y Ft(Matc)m(hes)32 b(exactly)g(one)f(of)f(the)h(giv)m(en)g(patterns.)
150 2635 y Fs(!\()p Fj(pattern-list)11 b Fs(\))630 2744
-y Ft(Matc)m(hes)32 b(an)m(ything)e(except)h(one)g(of)f(the)h(giv)m(en)f
+y Ft(Matc)m(hes)32 b(an)m(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g
(patterns.)150 2972 y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7
-b(al)275 3218 y Ft(After)32 b(the)h(preceding)e(expansions,)h(all)f
-(unquoted)h(o)s(ccurrences)g(of)h(the)f(c)m(haracters)i(`)p
+b(al)275 3218 y Ft(After)32 b(the)h(preceding)f(expansions,)h(all)g
+(unquoted)f(o)s(ccurrences)g(of)h(the)f(c)m(haracters)i(`)p
Fs(\\)p Ft(',)f(`)p Fs(')p Ft(',)h(and)150 3327 y(`)p
-Fs(")p Ft(')d(that)g(did)d(not)j(result)e(from)h(one)h(of)f(the)h(ab)s
-(o)m(v)m(e)g(expansions)e(are)i(remo)m(v)m(ed.)150 3589
-y Fr(3.6)68 b(Redirections)275 3835 y Ft(Before)33 b(a)h(command)e(is)g
-(executed,)j(its)d(input)f(and)i(output)f(ma)m(y)i(b)s(e)e
-Fq(redirected)k Ft(using)31 b(a)i(sp)s(ecial)150 3945
-y(notation)f(in)m(terpreted)g(b)m(y)g(the)g(shell.)44
-b(Redirection)31 b(ma)m(y)i(also)f(b)s(e)g(used)f(to)i(op)s(en)e(and)h
-(close)g(\014les)f(for)150 4054 y(the)i(curren)m(t)g(shell)e(execution)
-i(en)m(vironmen)m(t.)48 b(The)33 b(follo)m(wing)e(redirection)h(op)s
-(erators)h(ma)m(y)h(precede)150 4164 y(or)29 b(app)s(ear)g(an)m(ywhere)
-g(within)e(a)j(simple)d(command)i(or)h(ma)m(y)g(follo)m(w)e(a)i
-(command.)40 b(Redirections)29 b(are)150 4274 y(pro)s(cessed)h(in)f
-(the)h(order)g(they)h(app)s(ear,)f(from)g(left)g(to)h(righ)m(t.)275
-4410 y(In)c(the)i(follo)m(wing)e(descriptions,)h(if)f(the)i(\014le)f
-(descriptor)f(n)m(um)m(b)s(er)h(is)f(omitted,)i(and)g(the)f(\014rst)g
-(c)m(har-)150 4519 y(acter)42 b(of)f(the)g(redirection)e(op)s(erator)i
-(is)f(`)p Fs(<)p Ft(',)j(the)e(redirection)e(refers)i(to)g(the)g
-(standard)f(input)e(\(\014le)150 4629 y(descriptor)32
+Fs(")p Ft(')d(that)g(did)e(not)i(result)f(from)g(one)h(of)f(the)h(ab)s
+(o)m(v)m(e)g(expansions)f(are)h(remo)m(v)m(ed.)150 3589
+y Fr(3.6)68 b(Redirections)275 3835 y Ft(Before)33 b(a)h(command)e(is)h
+(executed,)i(its)e(input)f(and)h(output)f(ma)m(y)i(b)s(e)e
+Fq(redirected)37 b Ft(using)32 b(a)h(sp)s(ecial)150 3945
+y(notation)g(in)m(terpreted)g(b)m(y)f(the)g(shell.)46
+b(Redirection)33 b(ma)m(y)g(also)g(b)s(e)f(used)f(to)i(op)s(en)e(and)h
+(close)h(\014les)f(for)150 4054 y(the)h(curren)m(t)g(shell)g(execution)
+h(en)m(vironmen)m(t.)49 b(The)33 b(follo)m(wing)h(redirection)g(op)s
+(erators)f(ma)m(y)h(precede)150 4164 y(or)29 b(app)s(ear)g(an)m(ywhere)
+g(within)g(a)h(simple)f(command)g(or)h(ma)m(y)g(follo)m(w)g(a)g
+(command.)40 b(Redirections)31 b(are)150 4274 y(pro)s(cessed)f(in)g
+(the)g(order)g(they)h(app)s(ear,)f(from)g(left)h(to)g(righ)m(t.)275
+4410 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 4519 y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g
+(is)g(`)p Fs(<)p Ft(',)i(the)e(redirection)g(refers)g(to)g(the)g
+(standard)f(input)f(\(\014le)150 4629 y(descriptor)33
b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f
-(redirection)e(op)s(erator)j(is)e(`)p Fs(>)p Ft(',)i(the)f(redirection)
-e(refers)150 4739 y(to)g(the)g(standard)e(output)h(\(\014le)g
-(descriptor)f(1\).)275 4875 y(The)i(w)m(ord)h(follo)m(wing)f(the)i
-(redirection)e(op)s(erator)h(in)f(the)i(follo)m(wing)e(descriptions,)g
-(unless)f(other-)150 4984 y(wise)20 b(noted,)j(is)d(sub)5
-b(jected)21 b(to)h(brace)f(expansion,)h(tilde)e(expansion,)i(parameter)
-f(expansion,)h(command)150 5094 y(substitution,)29 b(arithmetic)h
-(expansion,)g(quote)i(remo)m(v)-5 b(al,)32 b(\014lename)e(expansion,)g
-(and)g(w)m(ord)h(splitting.)150 5204 y(If)f(it)g(expands)f(to)i(more)g
+(redirection)g(op)s(erator)h(is)f(`)p Fs(>)p Ft(',)h(the)f(redirection)
+g(refers)150 4739 y(to)e(the)g(standard)e(output)h(\(\014le)h
+(descriptor)f(1\).)275 4875 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 4984 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 5094 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 5204 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
-5340 y(Note)h(that)g(the)g(order)f(of)g(redirections)f(is)h
-(signi\014can)m(t.)39 b(F)-8 b(or)31 b(example,)g(the)f(command)p
-eop
+5340 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)p
+eop end
%%Page: 25 31
-25 30 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(25)390 299 y Fs(ls)47
-b(>)h Fj(dirlist)56 b Fs(2>&1)150 437 y Ft(directs)27
-b(b)s(oth)g(standard)g(output)g(\(\014le)g(descriptor)f(1\))j(and)e
-(standard)f(error)i(\(\014le)f(descriptor)f(2\))i(to)h(the)150
-547 y(\014le)g Fq(dirlist)p Ft(,)f(while)g(the)j(command)390
-685 y Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 823 y Ft(directs)33
-b(only)g(the)g(standard)g(output)g(to)h(\014le)f Fq(dirlist)p
-Ft(,)f(b)s(ecause)h(the)h(standard)f(error)g(w)m(as)h(duplicated)150
+TeXDict begin 25 30 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(25)390 299
+y Fs(ls)47 b(>)h Fj(dirlist)56 b Fs(2>&1)150 437 y Ft(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
+547 y(\014le)h Fq(dirlist)p Ft(,)h(while)f(the)h(command)390
+685 y Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 823 y Ft(directs)34
+b(only)g(the)f(standard)g(output)g(to)h(\014le)g Fq(dirlist)p
+Ft(,)h(b)s(ecause)e(the)h(standard)f(error)g(w)m(as)h(duplicated)150
932 y(as)d(standard)e(output)h(b)s(efore)g(the)h(standard)e(output)h(w)
-m(as)h(redirected)f(to)h Fq(dirlist)p Ft(.)275 1070 y(Bash)26
-b(handles)e(sev)m(eral)j(\014lenames)e(sp)s(ecially)f(when)i(they)g
-(are)g(used)g(in)f(redirections,)h(as)g(describ)s(ed)150
-1180 y(in)j(the)i(follo)m(wing)d(table:)150 1345 y Fs(/dev/fd/)p
-Fj(fd)630 1454 y Ft(If)i Fq(fd)j Ft(is)c(a)i(v)-5 b(alid)29
-b(in)m(teger,)i(\014le)e(descriptor)h Fq(fd)j Ft(is)c(duplicated.)150
-1617 y Fs(/dev/stdin)630 1727 y Ft(File)h(descriptor)f(0)i(is)e
-(duplicated.)150 1890 y Fs(/dev/stdout)630 1999 y Ft(File)h(descriptor)
-f(1)i(is)e(duplicated.)150 2162 y Fs(/dev/stderr)630
-2272 y Ft(File)h(descriptor)f(2)i(is)e(duplicated.)150
+m(as)h(redirected)g(to)g Fq(dirlist)p Ft(.)275 1070 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
+1180 y(in)k(the)h(follo)m(wing)g(table:)150 1345 y Fs(/dev/fd/)p
+Fj(fd)630 1454 y Ft(If)f Fq(fd)j Ft(is)d(a)h(v)-5 b(alid)31
+b(in)m(teger,)h(\014le)e(descriptor)h Fq(fd)i Ft(is)d(duplicated.)150
+1617 y Fs(/dev/stdin)630 1727 y Ft(File)i(descriptor)e(0)h(is)f
+(duplicated.)150 1890 y Fs(/dev/stdout)630 1999 y Ft(File)i(descriptor)
+e(1)h(is)f(duplicated.)150 2162 y Fs(/dev/stderr)630
+2272 y Ft(File)i(descriptor)e(2)h(is)f(duplicated.)150
2435 y Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630
-2544 y Ft(If)41 b Fq(host)i Ft(is)e(a)h(v)-5 b(alid)39
-b(hostname)j(or)f(In)m(ternet)h(address,)i(and)c Fq(p)s(ort)j
-Ft(is)e(an)g(in)m(teger)h(p)s(ort)630 2654 y(n)m(um)m(b)s(er)i(or)h
-(service)g(name,)k(Bash)c(attempts)h(to)g(op)s(en)f(a)g(TCP)g
-(connection)g(to)h(the)630 2764 y(corresp)s(onding)28
+2544 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5 b(alid)41
+b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c Fq(p)s(ort)j
+Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 2654 y(n)m(um)m(b)s(er)h(or)h
+(service)h(name,)j(Bash)c(attempts)h(to)g(op)s(en)f(a)g(TCP)g
+(connection)h(to)g(the)630 2764 y(corresp)s(onding)29
b(so)s(c)m(k)m(et.)150 2927 y Fs(/dev/udp/)p Fj(host)11
-b Fs(/)p Fj(port)630 3036 y Ft(If)41 b Fq(host)i Ft(is)e(a)h(v)-5
-b(alid)39 b(hostname)j(or)f(In)m(ternet)h(address,)i(and)c
-Fq(p)s(ort)j Ft(is)e(an)g(in)m(teger)h(p)s(ort)630 3146
-y(n)m(um)m(b)s(er)h(or)i(service)f(name,)49 b(Bash)c(attempts)g(to)h
-(op)s(en)e(a)h(UDP)g(connection)f(to)i(the)630 3255 y(corresp)s(onding)
-28 b(so)s(c)m(k)m(et.)275 3420 y(A)i(failure)f(to)i(op)s(en)e(or)i
-(create)h(a)e(\014le)g(causes)h(the)f(redirection)f(to)i(fail.)150
+b Fs(/)p Fj(port)630 3036 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5
+b(alid)41 b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c
+Fq(p)s(ort)j Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 3146
+y(n)m(um)m(b)s(er)g(or)i(service)g(name,)k(Bash)c(attempts)g(to)h(op)s
+(en)e(a)h(UDP)g(connection)g(to)h(the)630 3255 y(corresp)s(onding)29
+b(so)s(c)m(k)m(et.)275 3420 y(A)h(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.)150
3651 y Fk(3.6.1)63 b(Redirecting)40 b(Input)275 3899
-y Ft(Redirection)33 b(of)h(input)f(causes)h(the)h(\014le)e(whose)h
-(name)h(results)e(from)h(the)g(expansion)f(of)i Fq(w)m(ord)i
-Ft(to)150 4009 y(b)s(e)d(op)s(ened)g(for)g(reading)f(on)i(\014le)e
-(descriptor)h Fs(n)p Ft(,)h(or)g(the)f(standard)g(input)f(\(\014le)h
-(descriptor)f(0\))i(if)f Fs(n)g Ft(is)150 4118 y(not)d(sp)s(eci\014ed.)
-275 4256 y(The)e(general)i(format)f(for)h(redirecting)e(input)f(is:)390
+y Ft(Redirection)35 b(of)f(input)g(causes)g(the)h(\014le)f(whose)g
+(name)h(results)f(from)g(the)g(expansion)g(of)h Fq(w)m(ord)i
+Ft(to)150 4009 y(b)s(e)d(op)s(ened)g(for)g(reading)g(on)h(\014le)f
+(descriptor)h Fs(n)p Ft(,)g(or)g(the)f(standard)g(input)g(\(\014le)h
+(descriptor)f(0\))h(if)g Fs(n)f Ft(is)150 4118 y(not)d(sp)s(eci\014ed.)
+275 4256 y(The)e(general)j(format)e(for)h(redirecting)g(input)e(is:)390
4394 y Fs([)p Fj(n)11 b Fs(]<)p Fj(word)150 4626 y Fk(3.6.2)63
-b(Redirecting)40 b(Output)275 4873 y Ft(Redirection)29
-b(of)h(output)g(causes)h(the)g(\014le)e(whose)h(name)h(results)e(from)g
-(the)i(expansion)e(of)i Fq(w)m(ord)i Ft(to)150 4983 y(b)s(e)e(op)s
-(ened)g(for)g(writing)f(on)h(\014le)g(descriptor)f Fq(n)p
-Ft(,)i(or)f(the)h(standard)f(output)g(\(\014le)g(descriptor)f(1\))i(if)
-f Fq(n)g Ft(is)150 5092 y(not)j(sp)s(eci\014ed.)49 b(If)33
-b(the)h(\014le)f(do)s(es)g(not)h(exist)f(it)g(is)g(created;)k(if)32
-b(it)h(do)s(es)h(exist)f(it)g(is)g(truncated)h(to)g(zero)150
-5202 y(size.)275 5340 y(The)29 b(general)i(format)f(for)h(redirecting)e
-(output)h(is:)p eop
+b(Redirecting)40 b(Output)275 4873 y Ft(Redirection)31
+b(of)f(output)g(causes)h(the)g(\014le)f(whose)g(name)h(results)f(from)f
+(the)i(expansion)f(of)h Fq(w)m(ord)i Ft(to)150 4983 y(b)s(e)e(op)s
+(ened)g(for)g(writing)h(on)f(\014le)h(descriptor)f Fq(n)p
+Ft(,)h(or)f(the)h(standard)f(output)g(\(\014le)h(descriptor)f(1\))h(if)
+g Fq(n)f Ft(is)150 5092 y(not)j(sp)s(eci\014ed.)50 b(If)33
+b(the)h(\014le)g(do)s(es)f(not)h(exist)g(it)g(is)g(created;)j(if)c(it)h
+(do)s(es)g(exist)g(it)g(is)g(truncated)g(to)g(zero)150
+5202 y(size.)275 5340 y(The)29 b(general)j(format)e(for)h(redirecting)g
+(output)f(is:)p eop end
%%Page: 26 32
-26 31 bop 150 -116 a Ft(26)2572 b(Bash)31 b(Reference)g(Man)m(ual)390
-299 y Fs([)p Fj(n)11 b Fs(]>[|])p Fj(word)275 426 y Ft(If)30
-b(the)h(redirection)e(op)s(erator)i(is)f(`)p Fs(>)p Ft(',)h(and)f(the)h
-Fs(noclobber)d Ft(option)i(to)h(the)g Fs(set)f Ft(builtin)d(has)k(b)s
-(een)150 535 y(enabled,)h(the)g(redirection)f(will)e(fail)i(if)g(the)h
-(\014le)f(whose)h(name)g(results)f(from)h(the)g(expansion)f(of)h
-Fq(w)m(ord)150 645 y Ft(exists)e(and)g(is)f(a)i(regular)f(\014le.)40
-b(If)30 b(the)h(redirection)e(op)s(erator)i(is)e(`)p
-Fs(>|)p Ft(',)i(or)f(the)h(redirection)e(op)s(erator)i(is)150
+TeXDict begin 26 31 bop 150 -116 a Ft(26)2572 b(Bash)31
+b(Reference)g(Man)m(ual)390 299 y Fs([)p Fj(n)11 b Fs(]>[|])p
+Fj(word)275 426 y Ft(If)30 b(the)h(redirection)g(op)s(erator)g(is)g(`)p
+Fs(>)p Ft(',)g(and)f(the)h Fs(noclobber)d Ft(option)j(to)g(the)g
+Fs(set)f Ft(builtin)g(has)h(b)s(een)150 535 y(enabled,)i(the)f
+(redirection)h(will)f(fail)h(if)f(the)g(\014le)g(whose)g(name)g
+(results)g(from)g(the)g(expansion)g(of)g Fq(w)m(ord)150
+645 y Ft(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
+Fs(>|)p Ft(',)h(or)f(the)h(redirection)g(op)s(erator)g(is)150
754 y(`)p Fs(>)p Ft(')36 b(and)f(the)g Fs(noclobber)e
-Ft(option)i(is)g(not)h(enabled,)g(the)f(redirection)f(is)h(attempted)h
-(ev)m(en)h(if)d(the)i(\014le)150 864 y(named)30 b(b)m(y)g
+Ft(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 864 y(named)30 b(b)m(y)g
Fq(w)m(ord)k Ft(exists.)150 1065 y Fk(3.6.3)63 b(App)s(ending)42
-b(Redirected)e(Output)275 1301 y Ft(Redirection)27 b(of)i(output)f(in)f
-(this)h(fashion)f(causes)i(the)g(\014le)f(whose)g(name)h(results)e
-(from)h(the)h(expan-)150 1411 y(sion)k(of)g Fq(w)m(ord)k
-Ft(to)e(b)s(e)e(op)s(ened)g(for)g(app)s(ending)e(on)j(\014le)e
-(descriptor)h Fq(n)p Ft(,)h(or)g(the)f(standard)g(output)g(\(\014le)150
-1520 y(descriptor)c(1\))i(if)f Fq(n)g Ft(is)f(not)i(sp)s(eci\014ed.)39
-b(If)29 b(the)i(\014le)e(do)s(es)i(not)f(exist)g(it)g(is)g(created.)275
-1647 y(The)f(general)i(format)f(for)h(app)s(ending)d(output)i(is:)390
+b(Redirected)e(Output)275 1301 y Ft(Redirection)29 b(of)g(output)f(in)g
+(this)h(fashion)f(causes)h(the)g(\014le)g(whose)f(name)h(results)f
+(from)g(the)h(expan-)150 1411 y(sion)34 b(of)f Fq(w)m(ord)k
+Ft(to)e(b)s(e)e(op)s(ened)g(for)g(app)s(ending)f(on)i(\014le)f
+(descriptor)h Fq(n)p Ft(,)g(or)g(the)f(standard)g(output)g(\(\014le)150
+1520 y(descriptor)d(1\))h(if)g Fq(n)f Ft(is)g(not)h(sp)s(eci\014ed.)40
+b(If)29 b(the)i(\014le)f(do)s(es)h(not)f(exist)h(it)g(is)g(created.)275
+1647 y(The)e(general)j(format)e(for)h(app)s(ending)e(output)h(is:)390
1774 y Fs([)p Fj(n)11 b Fs(]>>)p Fj(word)150 1975 y Fk(3.6.4)63
b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g(Error)275
-2211 y Ft(Bash)31 b(allo)m(ws)f(b)s(oth)g(the)h(standard)g(output)f
-(\(\014le)h(descriptor)e(1\))j(and)e(the)i(standard)e(error)g(output)
-150 2320 y(\(\014le)c(descriptor)g(2\))i(to)f(b)s(e)g(redirected)f(to)i
-(the)f(\014le)f(whose)g(name)h(is)f(the)h(expansion)f(of)h
-Fq(w)m(ord)j Ft(with)c(this)150 2430 y(construct.)275
-2557 y(There)j(are)i(t)m(w)m(o)h(formats)e(for)h(redirecting)e
-(standard)g(output)h(and)g(standard)f(error:)390 2684
+2211 y Ft(Bash)31 b(allo)m(ws)h(b)s(oth)e(the)h(standard)g(output)f
+(\(\014le)i(descriptor)e(1\))i(and)e(the)i(standard)e(error)g(output)
+150 2320 y(\(\014le)d(descriptor)g(2\))h(to)f(b)s(e)g(redirected)g(to)h
+(the)f(\014le)g(whose)f(name)h(is)g(the)g(expansion)g(of)g
+Fq(w)m(ord)j Ft(with)d(this)150 2430 y(construct.)275
+2557 y(There)i(are)i(t)m(w)m(o)h(formats)e(for)h(redirecting)g
+(standard)e(output)h(and)g(standard)f(error:)390 2684
y Fs(&>)p Fj(word)150 2810 y Ft(and)390 2937 y Fs(>&)p
Fj(word)150 3064 y Ft(Of)h(the)g(t)m(w)m(o)i(forms,)e(the)h(\014rst)e
-(is)h(preferred.)39 b(This)29 b(is)g(seman)m(tically)h(equiv)-5
-b(alen)m(t)30 b(to)390 3190 y Fs(>)p Fj(word)57 b Fs(2>&1)150
+(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j(equiv)-5
+b(alen)m(t)32 b(to)390 3190 y Fs(>)p Fj(word)57 b Fs(2>&1)150
3391 y Fk(3.6.5)63 b(Here)41 b(Do)s(cumen)m(ts)275 3628
-y Ft(This)27 b(t)m(yp)s(e)i(of)h(redirection)e(instructs)g(the)h(shell)
-f(to)i(read)f(input)e(from)i(the)g(curren)m(t)h(source)f(un)m(til)f(a)
-150 3737 y(line)h(con)m(taining)g(only)h Fq(w)m(ord)j
-Ft(\(with)c(no)i(trailing)d(blanks\))h(is)g(seen.)41
-b(All)29 b(of)h(the)h(lines)d(read)i(up)f(to)i(that)150
-3847 y(p)s(oin)m(t)e(are)i(then)f(used)g(as)g(the)h(standard)f(input)e
-(for)i(a)h(command.)275 3973 y(The)e(format)i(of)g(here-do)s(cumen)m
+y Ft(This)28 b(t)m(yp)s(e)h(of)h(redirection)g(instructs)f(the)g(shell)
+h(to)g(read)f(input)f(from)h(the)g(curren)m(t)h(source)f(un)m(til)h(a)
+150 3737 y(line)h(con)m(taining)g(only)g Fq(w)m(ord)i
+Ft(\(with)d(no)h(trailing)g(blanks\))f(is)g(seen.)41
+b(All)31 b(of)f(the)h(lines)f(read)g(up)f(to)i(that)150
+3847 y(p)s(oin)m(t)f(are)h(then)f(used)g(as)g(the)h(standard)f(input)f
+(for)h(a)h(command.)275 3973 y(The)e(format)i(of)g(here-do)s(cumen)m
(ts)f(is:)390 4100 y Fs(<<[)p Fp(\000)p Fs(])p Fj(word)772
4210 y(here-document)390 4319 y(delimiter)275 4446 y
-Ft(No)j(parameter)h(expansion,)f(command)g(substitution,)f(arithmetic)h
-(expansion,)g(or)g(\014lename)f(ex-)150 4556 y(pansion)i(is)g(p)s
-(erformed)f(on)i Fq(w)m(ord)p Ft(.)55 b(If)34 b(an)m(y)i(c)m(haracters)
-g(in)e Fq(w)m(ord)k Ft(are)d(quoted,)i(the)e Fq(delimiter)40
-b Ft(is)34 b(the)150 4665 y(result)39 b(of)i(quote)g(remo)m(v)-5
-b(al)41 b(on)f Fq(w)m(ord)p Ft(,)j(and)d(the)g(lines)f(in)g(the)i
+Ft(No)j(parameter)h(expansion,)g(command)f(substitution,)h(arithmetic)h
+(expansion,)f(or)f(\014lename)g(ex-)150 4556 y(pansion)i(is)g(p)s
+(erformed)e(on)i Fq(w)m(ord)p Ft(.)55 b(If)34 b(an)m(y)i(c)m(haracters)
+g(in)f Fq(w)m(ord)j Ft(are)d(quoted,)i(the)e Fq(delimiter)43
+b Ft(is)35 b(the)150 4665 y(result)40 b(of)h(quote)g(remo)m(v)-5
+b(al)42 b(on)e Fq(w)m(ord)p Ft(,)j(and)d(the)g(lines)h(in)f(the)h
(here-do)s(cumen)m(t)f(are)h(not)f(expanded.)150 4775
-y(If)32 b Fq(w)m(ord)k Ft(is)c(unquoted,)g(all)g(lines)f(of)h(the)h
+y(If)32 b Fq(w)m(ord)k Ft(is)d(unquoted,)f(all)i(lines)f(of)f(the)h
(here-do)s(cumen)m(t)g(are)g(sub)5 b(jected)32 b(to)i(parameter)f
-(expansion,)150 4884 y(command)25 b(substitution,)e(and)i(arithmetic)f
-(expansion.)38 b(In)24 b(the)h(latter)g(case,)i(the)e(c)m(haracter)i
-(sequence)150 4994 y Fs(\\newline)h Ft(is)i(ignored,)f(and)h(`)p
+(expansion,)150 4884 y(command)25 b(substitution,)g(and)g(arithmetic)h
+(expansion.)39 b(In)24 b(the)h(latter)h(case,)h(the)e(c)m(haracter)i
+(sequence)150 4994 y Fs(\\newline)h Ft(is)j(ignored,)f(and)g(`)p
Fs(\\)p Ft(')h(m)m(ust)f(b)s(e)g(used)f(to)i(quote)g(the)g(c)m
(haracters)h(`)p Fs(\\)p Ft(',)e(`)p Fs($)p Ft(',)h(and)f(`)p
-Fs(`)p Ft('.)275 5121 y(If)21 b(the)i(redirection)e(op)s(erator)i(is)e
-(`)p Fs(<<-)p Ft(',)j(then)e(all)f(leading)g(tab)i(c)m(haracters)h(are)
-e(stripp)s(ed)e(from)i(input)150 5230 y(lines)31 b(and)h(the)h(line)f
-(con)m(taining)g Fq(delimiter)p Ft(.)46 b(This)31 b(allo)m(ws)h
-(here-do)s(cumen)m(ts)h(within)d(shell)i(scripts)f(to)150
-5340 y(b)s(e)f(inden)m(ted)f(in)g(a)i(natural)e(fashion.)p
-eop
+Fs(`)p Ft('.)275 5121 y(If)21 b(the)i(redirection)g(op)s(erator)g(is)f
+(`)p Fs(<<-)p Ft(',)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 Fq(delimiter)p Ft(.)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: 27 33
-27 32 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(27)150 299 y Fk(3.6.6)63
-b(Here)41 b(Strings)275 551 y Ft(A)30 b(v)-5 b(arian)m(t)30
-b(of)h(here)f(do)s(cumen)m(ts,)g(the)h(format)g(is:)390
+TeXDict begin 27 32 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)150 299
+y Fk(3.6.6)63 b(Here)41 b(Strings)275 551 y Ft(A)30 b(v)-5
+b(arian)m(t)31 b(of)g(here)f(do)s(cumen)m(ts,)g(the)h(format)g(is:)390
694 y Fs(<<<)47 b Fj(word)275 836 y Ft(The)29 b Fq(w)m(ord)34
-b Ft(is)29 b(expanded)h(and)g(supplied)d(to)k(the)f(command)h(on)f(its)
-g(standard)f(input.)150 1077 y Fk(3.6.7)63 b(Duplicating)41
-b(File)g(Descriptors)275 1329 y Ft(The)29 b(redirection)g(op)s(erator)
+b Ft(is)c(expanded)g(and)g(supplied)f(to)i(the)f(command)h(on)f(its)h
+(standard)e(input.)150 1077 y Fk(3.6.7)63 b(Duplicating)41
+b(File)g(Descriptors)275 1329 y Ft(The)29 b(redirection)i(op)s(erator)
390 1471 y Fs([)p Fj(n)11 b Fs(]<&)p Fj(word)150 1614
-y Ft(is)34 b(used)f(to)j(duplicate)d(input)g(\014le)g(descriptors.)52
-b(If)34 b Fq(w)m(ord)k Ft(expands)c(to)h(one)g(or)g(more)g(digits,)f
-(the)h(\014le)150 1724 y(descriptor)d(denoted)i(b)m(y)g
-Fq(n)f Ft(is)f(made)i(to)g(b)s(e)f(a)h(cop)m(y)g(of)g(that)g(\014le)f
-(descriptor.)49 b(If)33 b(the)h(digits)e(in)g Fq(w)m(ord)150
-1833 y Ft(do)d(not)h(sp)s(ecify)e(a)i(\014le)e(descriptor)g(op)s(en)h
-(for)g(input,)f(a)i(redirection)e(error)h(o)s(ccurs.)40
+y Ft(is)35 b(used)e(to)j(duplicate)f(input)f(\014le)g(descriptors.)53
+b(If)34 b Fq(w)m(ord)k Ft(expands)c(to)h(one)g(or)g(more)g(digits,)h
+(the)f(\014le)150 1724 y(descriptor)e(denoted)h(b)m(y)g
+Fq(n)f Ft(is)g(made)h(to)g(b)s(e)f(a)h(cop)m(y)g(of)g(that)g(\014le)g
+(descriptor.)50 b(If)33 b(the)h(digits)g(in)f Fq(w)m(ord)150
+1833 y Ft(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 Fq(w)m(ord)j Ft(ev)-5 b(aluates)150 1943 y(to)31
-b(`)p Fs(-)p Ft(',)g(\014le)f(descriptor)g Fq(n)g Ft(is)f(closed.)42
-b(If)30 b Fq(n)g Ft(is)f(not)i(sp)s(eci\014ed,)e(the)i(standard)f
-(input)f(\(\014le)h(descriptor)f(0\))150 2052 y(is)g(used.)275
-2195 y(The)g(op)s(erator)390 2337 y Fs([)p Fj(n)11 b
-Fs(]>&)p Fj(word)150 2480 y Ft(is)39 b(used)h(similarly)d(to)k
-(duplicate)d(output)i(\014le)g(descriptors.)69 b(If)40
-b Fq(n)f Ft(is)h(not)g(sp)s(eci\014ed,)h(the)g(standard)150
-2590 y(output)30 b(\(\014le)f(descriptor)g(1\))i(is)e(used.)39
-b(If)30 b(the)g(digits)f(in)f Fq(w)m(ord)34 b Ft(do)29
-b(not)i(sp)s(ecify)d(a)j(\014le)e(descriptor)g(op)s(en)150
-2699 y(for)38 b(output,)i(a)e(redirection)f(error)h(o)s(ccurs.)63
-b(As)38 b(a)h(sp)s(ecial)d(case,)42 b(if)37 b Fq(n)g
-Ft(is)g(omitted,)k(and)c Fq(w)m(ord)k Ft(do)s(es)150
-2809 y(not)28 b(expand)f(to)i(one)f(or)f(more)h(digits,)g(the)g
-(standard)e(output)i(and)f(standard)g(error)g(are)i(redirected)e(as)150
-2918 y(describ)s(ed)h(previously)-8 b(.)150 3159 y Fk(3.6.8)63
-b(Mo)m(ving)41 b(File)h(Descriptors)275 3411 y Ft(The)29
-b(redirection)g(op)s(erator)390 3554 y Fs([)p Fj(n)11
-b Fs(]<&)p Fj(digit)p Fs(-)150 3696 y Ft(mo)m(v)m(es)33
-b(the)f(\014le)f(descriptor)f Fq(digit)j Ft(to)f(\014le)f(descriptor)g
-Fq(n)p Ft(,)g(or)h(the)g(standard)f(input)e(\(\014le)j(descriptor)e
-(0\))150 3806 y(if)f Fq(n)h Ft(is)g(not)g(sp)s(eci\014ed.)39
-b Fq(digit)31 b Ft(is)f(closed)g(after)h(b)s(eing)e(duplicated)f(to)j
-Fq(n)p Ft(.)275 3948 y(Similarly)-8 b(,)27 b(the)j(redirection)f(op)s
+b(`)p Fs(-)p Ft(',)g(\014le)g(descriptor)g Fq(n)f Ft(is)g(closed.)43
+b(If)30 b Fq(n)g Ft(is)g(not)h(sp)s(eci\014ed,)f(the)h(standard)f
+(input)g(\(\014le)h(descriptor)f(0\))150 2052 y(is)g(used.)275
+2195 y(The)f(op)s(erator)390 2337 y Fs([)p Fj(n)11 b
+Fs(]>&)p Fj(word)150 2480 y Ft(is)40 b(used)g(similarly)h(to)g
+(duplicate)f(output)g(\014le)h(descriptors.)70 b(If)40
+b Fq(n)f Ft(is)i(not)f(sp)s(eci\014ed,)i(the)f(standard)150
+2590 y(output)30 b(\(\014le)g(descriptor)g(1\))h(is)f(used.)39
+b(If)30 b(the)g(digits)h(in)e Fq(w)m(ord)34 b Ft(do)29
+b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g(op)s(en)150
+2699 y(for)38 b(output,)i(a)e(redirection)h(error)f(o)s(ccurs.)63
+b(As)38 b(a)h(sp)s(ecial)f(case,)k(if)c Fq(n)f Ft(is)h(omitted,)k(and)
+37 b Fq(w)m(ord)k Ft(do)s(es)150 2809 y(not)28 b(expand)f(to)i(one)f
+(or)f(more)h(digits,)i(the)e(standard)e(output)i(and)f(standard)g
+(error)g(are)i(redirected)f(as)150 2918 y(describ)s(ed)h(previously)-8
+b(.)150 3159 y Fk(3.6.8)63 b(Mo)m(ving)41 b(File)h(Descriptors)275
+3411 y Ft(The)29 b(redirection)i(op)s(erator)390 3554
+y Fs([)p Fj(n)11 b Fs(]<&)p Fj(digit)p Fs(-)150 3696
+y Ft(mo)m(v)m(es)33 b(the)f(\014le)g(descriptor)f Fq(digit)k
+Ft(to)d(\014le)g(descriptor)g Fq(n)p Ft(,)f(or)h(the)g(standard)f
+(input)f(\(\014le)j(descriptor)e(0\))150 3806 y(if)f
+Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)40 b Fq(digit)33
+b Ft(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h
+Fq(n)p Ft(.)275 3948 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s
(erator)390 4091 y Fs([)p Fj(n)11 b Fs(]>&)p Fj(digit)p
-Fs(-)150 4233 y Ft(mo)m(v)m(es)29 b(the)g(\014le)e(descriptor)f
-Fq(digit)j Ft(to)g(\014le)e(descriptor)g Fq(n)p Ft(,)h(or)g(the)g
-(standard)f(output)h(\(\014le)f(descriptor)g(1\))150
-4343 y(if)i Fq(n)h Ft(is)g(not)g(sp)s(eci\014ed.)150
-4583 y Fk(3.6.9)63 b(Op)s(ening)42 b(File)f(Descriptors)h(for)f
-(Reading)g(and)g(W)-10 b(riting)275 4836 y Ft(The)29
-b(redirection)g(op)s(erator)390 4978 y Fs([)p Fj(n)11
-b Fs(]<>)p Fj(word)150 5121 y Ft(causes)39 b(the)g(\014le)f(whose)h
-(name)g(is)f(the)h(expansion)f(of)h Fq(w)m(ord)j Ft(to)d(b)s(e)g(op)s
-(ened)f(for)g(b)s(oth)h(reading)f(and)150 5230 y(writing)31
-b(on)h(\014le)g(descriptor)f Fq(n)p Ft(,)i(or)g(on)f(\014le)g
-(descriptor)g(0)h(if)e Fq(n)h Ft(is)g(not)h(sp)s(eci\014ed.)46
-b(If)32 b(the)h(\014le)e(do)s(es)i(not)150 5340 y(exist,)d(it)g(is)g
-(created.)p eop
+Fs(-)150 4233 y Ft(mo)m(v)m(es)29 b(the)g(\014le)f(descriptor)f
+Fq(digit)k Ft(to)e(\014le)f(descriptor)g Fq(n)p Ft(,)g(or)g(the)g
+(standard)f(output)h(\(\014le)g(descriptor)g(1\))150
+4343 y(if)i Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)150
+4583 y Fk(3.6.9)63 b(Op)s(ening)42 b(File)f(Descriptors)h(for)g
+(Reading)f(and)g(W)-10 b(riting)275 4836 y Ft(The)29
+b(redirection)i(op)s(erator)390 4978 y Fs([)p Fj(n)11
+b Fs(]<>)p Fj(word)150 5121 y Ft(causes)39 b(the)g(\014le)g(whose)g
+(name)g(is)g(the)g(expansion)g(of)g Fq(w)m(ord)j Ft(to)d(b)s(e)g(op)s
+(ened)f(for)g(b)s(oth)h(reading)g(and)150 5230 y(writing)33
+b(on)f(\014le)h(descriptor)f Fq(n)p Ft(,)h(or)g(on)f(\014le)h
+(descriptor)g(0)g(if)f Fq(n)g Ft(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: 28 34
-28 33 bop 150 -116 a Ft(28)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fr(3.7)68 b(Executing)46 b(Commands)150 632 y Fk(3.7.1)63
-b(Simple)40 b(Command)g(Expansion)275 876 y Ft(When)35
-b(a)h(simple)d(command)j(is)e(executed,)k(the)e(shell)e(p)s(erforms)g
-(the)i(follo)m(wing)e(expansions,)h(as-)150 985 y(signmen)m(ts,)30
-b(and)g(redirections,)f(from)h(left)g(to)h(righ)m(t.)199
-1119 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)37 b(assignmen)m(ts)h(\(those)h(preceding)e
-(the)330 1229 y(command)30 b(name\))h(and)f(redirections)f(are)h(sa)m
-(v)m(ed)i(for)e(later)g(pro)s(cessing.)199 1363 y(2.)61
-b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5 b(ariable)38
-b(assignmen)m(ts)i(or)f(redirections)g(are)h(expanded)f(\(see)h(Sec-)
-330 1473 y(tion)c(3.5)j([Shell)c(Expansions],)i(page)h(16\).)61
-b(If)37 b(an)m(y)g(w)m(ords)f(remain)g(after)i(expansion,)g(the)f
-(\014rst)330 1582 y(w)m(ord)31 b(is)f(tak)m(en)i(to)g(b)s(e)f(the)g
-(name)h(of)f(the)h(command)f(and)f(the)i(remaining)d(w)m(ords)i(are)g
-(the)h(argu-)330 1692 y(men)m(ts.)199 1826 y(3.)61 b(Redirections)23
-b(are)h(p)s(erformed)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)g
-(Section)f(3.6)h([Redirections],)g(page)f(24\).)199 1961
-y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Fs(=)p Ft(')h(in)d(eac)m(h)
-k(v)-5 b(ariable)23 b(assignmen)m(t)i(undergo)s(es)f(tilde)g
-(expansion,)h(parameter)330 2070 y(expansion,)48 b(command)e
-(substitution,)h(arithmetic)d(expansion,)49 b(and)c(quote)h(remo)m(v)-5
-b(al)45 b(b)s(efore)330 2180 y(b)s(eing)29 b(assigned)h(to)h(the)f(v)-5
-b(ariable.)275 2339 y(If)32 b(no)i(command)f(name)g(results,)g(the)h(v)
--5 b(ariable)32 b(assignmen)m(ts)h(a\013ect)i(the)f(curren)m(t)f(shell)
-f(en)m(viron-)150 2448 y(men)m(t.)39 b(Otherwise,)26
-b(the)f(v)-5 b(ariables)24 b(are)i(added)f(to)h(the)f(en)m(vironmen)m
-(t)g(of)h(the)f(executed)h(command)g(and)150 2558 y(do)35
-b(not)f(a\013ect)j(the)d(curren)m(t)h(shell)e(en)m(vironmen)m(t.)53
-b(If)34 b(an)m(y)h(of)g(the)f(assignmen)m(ts)h(attempts)g(to)h(assign)
-150 2667 y(a)j(v)-5 b(alue)38 b(to)h(a)g(readonly)e(v)-5
-b(ariable,)40 b(an)e(error)g(o)s(ccurs,)j(and)c(the)i(command)f(exits)g
-(with)g(a)g(non-zero)150 2777 y(status.)275 2911 y(If)33
-b(no)g(command)g(name)h(results,)f(redirections)f(are)i(p)s(erformed,)f
-(but)g(do)h(not)f(a\013ect)i(the)f(curren)m(t)150 3021
-y(shell)29 b(en)m(vironmen)m(t.)40 b(A)30 b(redirection)f(error)h
-(causes)h(the)g(command)f(to)h(exit)f(with)f(a)i(non-zero)g(status.)275
-3155 y(If)26 b(there)i(is)e(a)i(command)f(name)h(left)f(after)h
-(expansion,)f(execution)h(pro)s(ceeds)f(as)g(describ)s(ed)e(b)s(elo)m
-(w.)150 3265 y(Otherwise,)38 b(the)f(command)g(exits.)61
-b(If)37 b(one)g(of)g(the)h(expansions)e(con)m(tained)h(a)h(command)f
-(substitu-)150 3374 y(tion,)h(the)e(exit)g(status)h(of)f(the)h(command)
-f(is)g(the)g(exit)g(status)h(of)f(the)h(last)f(command)g(substitution)
-150 3484 y(p)s(erformed.)55 b(If)35 b(there)g(w)m(ere)h(no)g(command)f
-(substitutions,)g(the)g(command)h(exits)f(with)f(a)i(status)g(of)150
-3593 y(zero.)150 3817 y Fk(3.7.2)63 b(Command)39 b(Searc)m(h)h(and)h
-(Execution)275 4061 y Ft(After)35 b(a)h(command)f(has)h(b)s(een)e
-(split)g(in)m(to)h(w)m(ords,)i(if)d(it)h(results)g(in)f(a)i(simple)d
-(command)i(and)g(an)150 4170 y(optional)30 b(list)f(of)h(argumen)m(ts,)
-h(the)g(follo)m(wing)d(actions)j(are)g(tak)m(en.)199
-4304 y(1.)61 b(If)24 b(the)g(command)g(name)g(con)m(tains)h(no)f
-(slashes,)h(the)f(shell)f(attempts)i(to)g(lo)s(cate)g(it.)38
-b(If)24 b(there)g(exists)330 4414 y(a)h(shell)e(function)g(b)m(y)h
-(that)h(name,)h(that)f(function)e(is)h(in)m(v)m(ok)m(ed)h(as)f(describ)
-s(ed)f(in)g(Section)h(3.3)i([Shell)330 4524 y(F)-8 b(unctions],)30
-b(page)i(13.)199 4658 y(2.)61 b(If)41 b(the)g(name)h(do)s(es)f(not)g
-(matc)m(h)i(a)e(function,)i(the)f(shell)d(searc)m(hes)k(for)e(it)g(in)f
-(the)h(list)f(of)i(shell)330 4767 y(builtins.)37 b(If)30
-b(a)h(matc)m(h)g(is)e(found,)h(that)h(builtin)c(is)i(in)m(v)m(ok)m(ed.)
-199 4902 y(3.)61 b(If)40 b(the)g(name)h(is)e(neither)h(a)g(shell)f
-(function)g(nor)h(a)g(builtin,)g(and)g(con)m(tains)g(no)h(slashes,)h
-(Bash)330 5011 y(searc)m(hes)d(eac)m(h)g(elemen)m(t)f(of)h
-Fs($PATH)d Ft(for)i(a)g(directory)g(con)m(taining)f(an)h(executable)g
-(\014le)f(b)m(y)h(that)330 5121 y(name.)56 b(Bash)36
-b(uses)f(a)h(hash)e(table)i(to)g(remem)m(b)s(er)f(the)h(full)d
-(pathnames)i(of)h(executable)g(\014les)e(to)330 5230
-y(a)m(v)m(oid)e(m)m(ultiple)d Fs(PATH)i Ft(searc)m(hes)i(\(see)f(the)g
-(description)e(of)h Fs(hash)g Ft(in)f(Section)i(4.1)g([Bourne)g(Shell)
-330 5340 y(Builtins],)i(page)i(33\).)55 b(A)35 b(full)e(searc)m(h)i(of)
-g(the)g(directories)f(in)g Fs($PATH)f Ft(is)h(p)s(erformed)g(only)g(if)
-g(the)p eop
+TeXDict begin 28 33 bop 150 -116 a Ft(28)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(3.7)68 b(Executing)46
+b(Commands)150 632 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)275
+876 y Ft(When)35 b(a)h(simple)f(command)h(is)f(executed,)j(the)e(shell)
+g(p)s(erforms)e(the)i(follo)m(wing)h(expansions,)f(as-)150
+985 y(signmen)m(ts,)31 b(and)f(redirections,)h(from)f(left)h(to)g(righ)
+m(t.)199 1119 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 1229 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
+1363 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 1473 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g
+(16\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h
+(the)e(\014rst)330 1582 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 1692 y(men)m(ts.)199 1826 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(24\).)199
+1961 y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Fs(=)p
+Ft(')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 2070 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 2180 y(b)s(eing)30
+b(assigned)h(to)g(the)f(v)-5 b(ariable.)275 2339 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 2448 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 2558 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 2667 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
+2777 y(status.)275 2911 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 3021 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 3155 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 3265 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 3374 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 3484 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 3593 y(zero.)150
+3817 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)275
+4061 y Ft(After)35 b(a)h(command)f(has)h(b)s(een)e(split)i(in)m(to)g(w)
+m(ords,)h(if)e(it)h(results)g(in)f(a)h(simple)f(command)g(and)g(an)150
+4170 y(optional)d(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g
+(actions)h(are)f(tak)m(en.)199 4304 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 4414 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
+4524 y(F)-8 b(unctions],)31 b(page)h(13.)199 4658 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
+4767 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 4902 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 5011 y(searc)m(hes)c(eac)m(h)g
+(elemen)m(t)g(of)g Fs($PATH)d Ft(for)i(a)g(directory)h(con)m(taining)g
+(an)f(executable)h(\014le)f(b)m(y)g(that)330 5121 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 5230
+y(a)m(v)m(oid)e(m)m(ultiple)f Fs(PATH)f Ft(searc)m(hes)i(\(see)f(the)g
+(description)g(of)f Fs(hash)g Ft(in)g(Section)i(4.1)f([Bourne)g(Shell)
+330 5340 y(Builtins],)37 b(page)f(33\).)55 b(A)35 b(full)g(searc)m(h)g
+(of)g(the)g(directories)h(in)f Fs($PATH)e Ft(is)i(p)s(erformed)f(only)h
+(if)g(the)p eop end
%%Page: 29 35
-29 34 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(29)330 299 y(command)31
-b(is)f(not)h(found)f(in)f(the)j(hash)e(table.)42 b(If)31
-b(the)g(searc)m(h)h(is)e(unsuccessful,)f(the)i(shell)e(prin)m(ts)330
-408 y(an)h(error)g(message)i(and)e(returns)f(an)h(exit)g(status)h(of)f
-(127.)199 544 y(4.)61 b(If)33 b(the)g(searc)m(h)h(is)f(successful,)g
-(or)g(if)f(the)i(command)f(name)g(con)m(tains)h(one)g(or)f(more)g
-(slashes,)h(the)330 653 y(shell)f(executes)j(the)f(named)f(program)g
-(in)g(a)h(separate)h(execution)e(en)m(vironmen)m(t.)54
-b(Argumen)m(t)35 b(0)330 763 y(is)29 b(set)i(to)h(the)e(name)h(giv)m
-(en,)f(and)g(the)h(remaining)d(argumen)m(ts)j(to)g(the)g(command)f(are)
-h(set)g(to)g(the)330 872 y(argumen)m(ts)g(supplied,)c(if)i(an)m(y)-8
-b(.)199 1008 y(5.)61 b(If)35 b(this)g(execution)h(fails)e(b)s(ecause)i
-(the)f(\014le)g(is)g(not)h(in)e(executable)j(format,)g(and)e(the)h
-(\014le)f(is)g(not)330 1117 y(a)e(directory)-8 b(,)33
-b(it)f(is)g(assumed)f(to)j(b)s(e)d(a)i Fq(shell)e(script)i
-Ft(and)f(the)h(shell)d(executes)k(it)e(as)h(describ)s(ed)d(in)330
-1227 y(Section)g(3.8)i([Shell)c(Scripts],)h(page)j(31.)199
+TeXDict begin 29 34 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(29)330 299
+y(command)31 b(is)g(not)g(found)f(in)g(the)i(hash)e(table.)43
+b(If)31 b(the)g(searc)m(h)h(is)f(unsuccessful,)f(the)h(shell)g(prin)m
+(ts)330 408 y(an)f(error)g(message)i(and)e(returns)f(an)h(exit)h
+(status)g(of)f(127.)199 544 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 653 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 763 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 872 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
+b(.)199 1008 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 1117 y(a)d(directory)-8 b(,)34
+b(it)f(is)g(assumed)e(to)j(b)s(e)d(a)i Fq(shell)g(script)h
+Ft(and)e(the)h(shell)f(executes)i(it)f(as)g(describ)s(ed)e(in)330
+1227 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(31.)199
1362 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(,)41 b(the)d(shell)f(w)m(aits)i(for)f(the)h(command)f
-(to)330 1472 y(complete)31 b(and)f(collects)g(its)g(exit)g(status.)150
-1698 y Fk(3.7.3)63 b(Command)39 b(Execution)h(En)m(vironmen)m(t)275
-1944 y Ft(The)29 b(shell)g(has)h(an)g Fq(execution)h(en)m(vironmen)m(t)
-p Ft(,)f(whic)m(h)f(consists)h(of)h(the)f(follo)m(wing:)225
-2080 y Fp(\017)60 b Ft(op)s(en)32 b(\014les)f(inherited)f(b)m(y)j(the)f
-(shell)f(at)i(in)m(v)m(o)s(cation,)h(as)e(mo)s(di\014ed)f(b)m(y)h
-(redirections)f(supplied)e(to)330 2189 y(the)i Fs(exec)e
+m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f
+(to)330 1472 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150
+1698 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)275
+1944 y Ft(The)29 b(shell)i(has)f(an)g Fq(execution)i(en)m(vironmen)m(t)
+p Ft(,)f(whic)m(h)f(consists)h(of)g(the)f(follo)m(wing:)225
+2080 y Fp(\017)60 b Ft(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 2189 y(the)g Fs(exec)e
Ft(builtin)225 2325 y Fp(\017)60 b Ft(the)28 b(curren)m(t)g(w)m(orking)
-g(directory)g(as)g(set)h(b)m(y)f Fs(cd)p Ft(,)g Fs(pushd)p
-Ft(,)g(or)g Fs(popd)p Ft(,)g(or)g(inherited)e(b)m(y)i(the)h(shell)d(at)
+h(directory)g(as)f(set)h(b)m(y)f Fs(cd)p Ft(,)g Fs(pushd)p
+Ft(,)g(or)g Fs(popd)p Ft(,)g(or)g(inherited)g(b)m(y)g(the)h(shell)f(at)
330 2434 y(in)m(v)m(o)s(cation)225 2569 y Fp(\017)60
-b Ft(the)31 b(\014le)e(creation)i(mo)s(de)f(mask)g(as)h(set)g(b)m(y)f
-Fs(umask)f Ft(or)h(inherited)e(from)i(the)h(shell's)d(paren)m(t)225
+b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)g(as)h(set)g(b)m(y)f
+Fs(umask)f Ft(or)h(inherited)g(from)g(the)h(shell's)f(paren)m(t)225
2705 y Fp(\017)60 b Ft(curren)m(t)30 b(traps)g(set)h(b)m(y)f
-Fs(trap)225 2840 y Fp(\017)60 b Ft(shell)28 b(parameters)h(that)h(are)g
-(set)g(b)m(y)g(v)-5 b(ariable)28 b(assignmen)m(t)h(or)h(with)e
-Fs(set)g Ft(or)i(inherited)d(from)i(the)330 2949 y(shell's)g(paren)m(t)
-h(in)f(the)i(en)m(vironmen)m(t)225 3084 y Fp(\017)60
-b Ft(shell)42 b(functions)g(de\014ned)g(during)g(execution)i(or)f
-(inherited)f(from)h(the)h(shell's)e(paren)m(t)h(in)g(the)330
-3194 y(en)m(vironmen)m(t)225 3329 y Fp(\017)60 b Ft(options)32
-b(enabled)g(at)i(in)m(v)m(o)s(cation)f(\(either)g(b)m(y)g(default)f(or)
-h(with)f(command-line)f(argumen)m(ts\))j(or)330 3439
-y(b)m(y)c Fs(set)225 3574 y Fp(\017)60 b Ft(options)30
-b(enabled)f(b)m(y)h Fs(shopt)225 3709 y Fp(\017)60 b
-Ft(shell)29 b(aliases)g(de\014ned)h(with)f Fs(alias)g
-Ft(\(see)i(Section)f(6.6)i([Aliases],)e(page)h(71\))225
-3844 y Fp(\017)60 b Ft(v)-5 b(arious)49 b(pro)s(cess)g
-Fl(id)p Ft(s,)55 b(including)46 b(those)51 b(of)e(bac)m(kground)h(jobs)
-f(\(see)i(Section)f(3.2.3)h([Lists],)330 3954 y(page)31
-b(9\),)g(the)g(v)-5 b(alue)30 b(of)g Fs($$)p Ft(,)g(and)g(the)h(v)-5
-b(alue)30 b(of)g Fs($PPID)275 4115 y Ft(When)k(a)g(simple)f(command)h
-(other)g(than)g(a)h(builtin)c(or)j(shell)f(function)g(is)g(to)i(b)s(e)f
-(executed,)i(it)e(is)150 4225 y(in)m(v)m(ok)m(ed)24 b(in)f(a)h
-(separate)h(execution)f(en)m(vironmen)m(t)g(that)g(consists)f(of)i(the)
-f(follo)m(wing.)37 b(Unless)23 b(otherwise)150 4335 y(noted,)31
-b(the)f(v)-5 b(alues)30 b(are)h(inherited)d(from)i(the)g(shell.)225
-4470 y Fp(\017)60 b Ft(the)31 b(shell's)f(op)s(en)g(\014les,)h(plus)e
-(an)m(y)i(mo)s(di\014cations)f(and)g(additions)f(sp)s(eci\014ed)h(b)m
-(y)h(redirections)e(to)330 4580 y(the)i(command)225 4715
-y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)f(directory)225
-4850 y Fp(\017)60 b Ft(the)31 b(\014le)e(creation)i(mo)s(de)f(mask)225
-4986 y Fp(\017)60 b Ft(shell)30 b(v)-5 b(ariables)31
-b(and)g(functions)g(mark)m(ed)h(for)g(exp)s(ort,)g(along)g(with)f(v)-5
-b(ariables)30 b(exp)s(orted)i(for)g(the)330 5095 y(command,)e(passed)g
-(in)f(the)i(en)m(vironmen)m(t)f(\(see)h(Section)f(3.7.4)j([En)m
-(vironmen)m(t],)d(page)h(30\))225 5230 y Fp(\017)60 b
-Ft(traps)31 b(caugh)m(t)h(b)m(y)f(the)g(shell)f(are)h(reset)h(to)g(the)
-f(v)-5 b(alues)31 b(inherited)d(from)j(the)g(shell's)f(paren)m(t,)i
-(and)330 5340 y(traps)e(ignored)g(b)m(y)g(the)g(shell)f(are)i(ignored)p
-eop
+Fs(trap)225 2840 y Fp(\017)60 b Ft(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
+Fs(set)f Ft(or)i(inherited)f(from)g(the)330 2949 y(shell's)i(paren)m(t)
+f(in)g(the)h(en)m(vironmen)m(t)225 3084 y Fp(\017)60
+b Ft(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
+3194 y(en)m(vironmen)m(t)225 3329 y Fp(\017)60 b Ft(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 3439
+y(b)m(y)c Fs(set)225 3574 y Fp(\017)60 b Ft(options)31
+b(enabled)f(b)m(y)g Fs(shopt)225 3709 y Fp(\017)60 b
+Ft(shell)31 b(aliases)g(de\014ned)f(with)g Fs(alias)f
+Ft(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(71\))225
+3844 y Fp(\017)60 b Ft(v)-5 b(arious)50 b(pro)s(cess)f
+Fl(id)p Ft(s,)55 b(including)49 b(those)i(of)e(bac)m(kground)h(jobs)f
+(\(see)i(Section)g(3.2.3)g([Lists],)330 3954 y(page)31
+b(9\),)g(the)g(v)-5 b(alue)31 b(of)f Fs($$)p Ft(,)g(and)g(the)h(v)-5
+b(alue)31 b(of)f Fs($PPID)275 4115 y Ft(When)k(a)g(simple)h(command)f
+(other)g(than)g(a)h(builtin)f(or)g(shell)h(function)f(is)g(to)h(b)s(e)f
+(executed,)i(it)f(is)150 4225 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 4335 y(noted,)31
+b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225
+4470 y Fp(\017)60 b Ft(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 4580 y(the)g(command)225 4715
+y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)g(directory)225
+4850 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
+4986 y Fp(\017)60 b Ft(shell)32 b(v)-5 b(ariables)33
+b(and)e(functions)h(mark)m(ed)g(for)g(exp)s(ort,)g(along)h(with)f(v)-5
+b(ariables)32 b(exp)s(orted)g(for)g(the)330 5095 y(command,)e(passed)g
+(in)g(the)h(en)m(vironmen)m(t)g(\(see)g(Section)g(3.7.4)i([En)m
+(vironmen)m(t],)e(page)g(30\))225 5230 y Fp(\017)60 b
+Ft(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: 30 36
-30 35 bop 150 -116 a Ft(30)2572 b(Bash)31 b(Reference)g(Man)m(ual)275
-299 y(A)41 b(command)g(in)m(v)m(ok)m(ed)h(in)e(this)h(separate)h(en)m
-(vironmen)m(t)f(cannot)h(a\013ect)h(the)f(shell's)e(execution)150
-408 y(en)m(vironmen)m(t.)275 540 y(Command)35 b(substitution,)h
-(commands)g(group)s(ed)f(with)h(paren)m(theses,)i(and)e(async)m
-(hronous)g(com-)150 650 y(mands)c(are)h(in)m(v)m(ok)m(ed)h(in)d(a)j
-(subshell)c(en)m(vironmen)m(t)i(that)i(is)e(a)h(duplicate)f(of)h(the)g
-(shell)e(en)m(vironmen)m(t,)150 760 y(except)k(that)g(traps)f(caugh)m
-(t)h(b)m(y)f(the)h(shell)d(are)i(reset)h(to)g(the)f(v)-5
-b(alues)34 b(that)h(the)f(shell)f(inherited)e(from)150
-869 y(its)h(paren)m(t)g(at)h(in)m(v)m(o)s(cation.)47
-b(Builtin)29 b(commands)j(that)h(are)g(in)m(v)m(ok)m(ed)g(as)f(part)g
-(of)h(a)f(pip)s(eline)d(are)k(also)150 979 y(executed)41
-b(in)e(a)i(subshell)c(en)m(vironmen)m(t.)71 b(Changes)40
-b(made)g(to)h(the)g(subshell)c(en)m(vironmen)m(t)j(cannot)150
-1088 y(a\013ect)32 b(the)f(shell's)d(execution)j(en)m(vironmen)m(t.)275
-1220 y(If)38 b(a)h(command)f(is)f(follo)m(w)m(ed)i(b)m(y)f(a)h(`)p
-Fs(&)p Ft(')g(and)f(job)g(con)m(trol)h(is)e(not)i(activ)m(e,)j(the)d
-(default)f(standard)150 1330 y(input)e(for)h(the)h(command)f(is)g(the)h
-(empt)m(y)g(\014le)e(`)p Fs(/dev/null)p Ft('.)61 b(Otherwise,)38
-b(the)g(in)m(v)m(ok)m(ed)g(command)150 1440 y(inherits)28
-b(the)j(\014le)e(descriptors)g(of)i(the)f(calling)f(shell)g(as)h(mo)s
-(di\014ed)f(b)m(y)h(redirections.)150 1656 y Fk(3.7.4)63
-b(En)m(vironmen)m(t)275 1898 y Ft(When)31 b(a)g(program)h(is)e(in)m(v)m
-(ok)m(ed)i(it)f(is)f(giv)m(en)h(an)h(arra)m(y)g(of)f(strings)f(called)h
-(the)g Fq(en)m(vironmen)m(t)p Ft(.)44 b(This)150 2007
-y(is)29 b(a)i(list)e(of)i(name-v)-5 b(alue)30 b(pairs,)f(of)i(the)f
-(form)g Fs(name=value)p Ft(.)275 2139 y(Bash)39 b(pro)m(vides)f(sev)m
-(eral)i(w)m(a)m(ys)h(to)f(manipulate)d(the)j(en)m(vironmen)m(t.)68
-b(On)38 b(in)m(v)m(o)s(cation,)k(the)e(shell)150 2249
-y(scans)g(its)g(o)m(wn)g(en)m(vironmen)m(t)g(and)g(creates)i(a)f
-(parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)150
-2359 y(marking)25 b(it)g(for)h Fq(exp)s(ort)h Ft(to)g(c)m(hild)d(pro)s
-(cesses.)39 b(Executed)26 b(commands)g(inherit)e(the)i(en)m(vironmen)m
-(t.)38 b(The)150 2468 y Fs(export)d Ft(and)i(`)p Fs(declare)29
-b(-x)p Ft(')36 b(commands)h(allo)m(w)g(parameters)g(and)g(functions)f
-(to)i(b)s(e)e(added)h(to)h(and)150 2578 y(deleted)20
-b(from)g(the)h(en)m(vironmen)m(t.)37 b(If)20 b(the)h(v)-5
-b(alue)20 b(of)h(a)g(parameter)g(in)e(the)h(en)m(vironmen)m(t)h(is)e
-(mo)s(di\014ed,)i(the)150 2687 y(new)31 b(v)-5 b(alue)31
-b(b)s(ecomes)g(part)h(of)f(the)h(en)m(vironmen)m(t,)f(replacing)g(the)g
-(old.)43 b(The)31 b(en)m(vironmen)m(t)g(inherited)150
-2797 y(b)m(y)g(an)m(y)g(executed)h(command)f(consists)f(of)h(the)g
-(shell's)f(initial)e(en)m(vironmen)m(t,)j(whose)g(v)-5
-b(alues)30 b(ma)m(y)i(b)s(e)150 2907 y(mo)s(di\014ed)25
-b(in)g(the)i(shell,)f(less)g(an)m(y)h(pairs)e(remo)m(v)m(ed)j(b)m(y)f
+TeXDict begin 30 35 bop 150 -116 a Ft(30)2572 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 y(A)41 b(command)g(in)m(v)m(ok)m(ed)i
+(in)e(this)h(separate)g(en)m(vironmen)m(t)g(cannot)g(a\013ect)h(the)f
+(shell's)g(execution)150 408 y(en)m(vironmen)m(t.)275
+540 y(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 650
+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 760 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 869 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 979
+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 1088 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m
+(t.)275 1220 y(If)38 b(a)h(command)f(is)g(follo)m(w)m(ed)j(b)m(y)d(a)h
+(`)p Fs(&)p Ft(')g(and)f(job)g(con)m(trol)i(is)e(not)h(activ)m(e,)k
+(the)c(default)g(standard)150 1330 y(input)e(for)g(the)h(command)f(is)h
+(the)g(empt)m(y)g(\014le)f(`)p Fs(/dev/null)p Ft('.)61
+b(Otherwise,)39 b(the)f(in)m(v)m(ok)m(ed)h(command)150
+1440 y(inherits)30 b(the)h(\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
+1656 y Fk(3.7.4)63 b(En)m(vironmen)m(t)275 1898 y Ft(When)31
+b(a)g(program)h(is)f(in)m(v)m(ok)m(ed)i(it)f(is)f(giv)m(en)h(an)g(arra)
+m(y)g(of)f(strings)g(called)i(the)e Fq(en)m(vironmen)m(t)p
+Ft(.)45 b(This)150 2007 y(is)30 b(a)h(list)g(of)g(name-v)-5
+b(alue)31 b(pairs,)f(of)h(the)f(form)g Fs(name=value)p
+Ft(.)275 2139 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 2249 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 2359 y(marking)26 b(it)g(for)g
+Fq(exp)s(ort)h Ft(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
+2468 y Fs(export)c Ft(and)i(`)p Fs(declare)29 b(-x)p
+Ft(')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 2578 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
+2687 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 2797 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 2907 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 Fs(unset)e Ft(and)h(`)p Fs(export)j(-n)p Ft(')e(commands,)g
-(plus)150 3016 y(an)m(y)k(additions)d(via)i(the)h Fs(export)d
+(plus)150 3016 y(an)m(y)k(additions)f(via)h(the)g Fs(export)d
Ft(and)i(`)p Fs(declare)f(-x)p Ft(')h(commands.)275 3148
-y(The)j(en)m(vironmen)m(t)h(for)g(an)m(y)g(simple)f(command)h(or)g
-(function)f(ma)m(y)h(b)s(e)g(augmen)m(ted)h(temp)s(orarily)150
-3258 y(b)m(y)c(pre\014xing)d(it)i(with)g(parameter)h(assignmen)m(ts,)g
-(as)f(describ)s(ed)f(in)g(Section)i(3.4)h([Shell)c(P)m(arameters],)150
-3367 y(page)i(15.)41 b(These)29 b(assignmen)m(t)h(statemen)m(ts)h
-(a\013ect)f(only)f(the)g(en)m(vironmen)m(t)g(seen)h(b)m(y)f(that)h
-(command.)275 3499 y(If)h(the)i(`)p Fs(-k)p Ft(')f(option)g(is)f(set)i
-(\(see)g(Section)f(4.3)h([The)f(Set)h(Builtin],)d(page)j(50\),)h(then)e
-(all)f(parameter)150 3609 y(assignmen)m(ts)e(are)h(placed)g(in)e(the)i
-(en)m(vironmen)m(t)f(for)h(a)g(command,)f(not)h(just)f(those)i(that)f
+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
+3258 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
+3367 y(page)g(15.)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 3499 y(If)h(the)i(`)p Fs(-k)p Ft(')f(option)h(is)f(set)h
+(\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)g(page)g(50\),)h(then)e
+(all)h(parameter)150 3609 y(assignmen)m(ts)d(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 3719 y(command)g(name.)275 3851 y(When)f(Bash)h(in)m
-(v)m(ok)m(es)h(an)f(external)f(command,)h(the)g(v)-5
-b(ariable)29 b(`)p Fs($_)p Ft(')h(is)f(set)h(to)h(the)f(full)d(path)j
+(v)m(ok)m(es)i(an)e(external)g(command,)g(the)g(v)-5
+b(ariable)31 b(`)p Fs($_)p Ft(')f(is)g(set)g(to)h(the)f(full)f(path)h
(name)150 3960 y(of)h(the)f(command)g(and)g(passed)g(to)h(that)g
-(command)f(in)f(its)h(en)m(vironmen)m(t.)150 4177 y Fk(3.7.5)63
-b(Exit)40 b(Status)275 4418 y Ft(F)-8 b(or)32 b(the)g(shell's)e(purp)s
-(oses,)g(a)j(command)e(whic)m(h)g(exits)g(with)g(a)h(zero)g(exit)g
-(status)g(has)f(succeeded.)150 4528 y(A)e(non-zero)h(exit)f(status)h
-(indicates)e(failure.)38 b(This)27 b(seemingly)h(coun)m(ter-in)m
-(tuitiv)m(e)h(sc)m(heme)h(is)e(used)h(so)150 4638 y(there)34
-b(is)f(one)h(w)m(ell-de\014ned)e(w)m(a)m(y)i(to)h(indicate)e(success)h
-(and)f(a)h(v)-5 b(ariet)m(y)34 b(of)g(w)m(a)m(ys)h(to)f(indicate)f(v)-5
-b(arious)150 4747 y(failure)36 b(mo)s(des.)62 b(When)38
-b(a)g(command)f(terminates)h(on)f(a)i(fatal)f(signal)e(whose)i(n)m(um)m
-(b)s(er)e(is)h Fq(N)p Ft(,)h(Bash)150 4857 y(uses)30
-b(the)g(v)-5 b(alue)30 b(128)p Fs(+)p Fq(N)42 b Ft(as)30
-b(the)h(exit)f(status.)275 4989 y(If)35 b(a)h(command)g(is)f(not)h
-(found,)g(the)g(c)m(hild)f(pro)s(cess)g(created)i(to)g(execute)g(it)f
-(returns)e(a)j(status)f(of)150 5098 y(127.)42 b(If)30
-b(a)h(command)f(is)f(found)g(but)h(is)f(not)i(executable,)g(the)g
-(return)e(status)i(is)e(126.)275 5230 y(If)j(a)i(command)f(fails)e(b)s
-(ecause)i(of)h(an)f(error)f(during)f(expansion)h(or)h(redirection,)g
-(the)h(exit)f(status)150 5340 y(is)c(greater)j(than)e(zero.)p
-eop
+(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4177 y Fk(3.7.5)63
+b(Exit)40 b(Status)275 4418 y Ft(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 4528 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 4638 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 4747 y(failure)38 b(mo)s(des.)62 b(When)38
+b(a)g(command)f(terminates)i(on)e(a)i(fatal)g(signal)f(whose)g(n)m(um)m
+(b)s(er)e(is)i Fq(N)p Ft(,)g(Bash)150 4857 y(uses)30
+b(the)g(v)-5 b(alue)31 b(128)p Fs(+)p Fq(N)42 b Ft(as)30
+b(the)h(exit)g(status.)275 4989 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 5098 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
+5230 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
+5340 y(is)c(greater)i(than)e(zero.)p eop end
%%Page: 31 37
-31 36 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31
-b(Shell)d(F)-8 b(eatures)2246 b(31)275 299 y(The)38 b(exit)g(status)h
-(is)f(used)g(b)m(y)g(the)h(Bash)g(conditional)e(commands)h(\(see)h
-(Section)g(3.2.4.2)i([Con-)150 408 y(ditional)f(Constructs],)k(page)f
-(10\))g(and)e(some)i(of)f(the)g(list)e(constructs)i(\(see)h(Section)e
-(3.2.3)j([Lists],)150 518 y(page)31 b(9\).)275 651 y(All)38
-b(of)i(the)h(Bash)f(builtins)c(return)j(an)h(exit)g(status)h(of)f(zero)
-h(if)e(they)h(succeed)g(and)g(a)g(non-zero)150 760 y(status)34
-b(on)f(failure,)g(so)h(they)g(ma)m(y)g(b)s(e)f(used)g(b)m(y)g(the)h
-(conditional)e(and)h(list)f(constructs.)50 b(All)33 b(builtins)150
-870 y(return)c(an)i(exit)f(status)h(of)f(2)h(to)g(indicate)e(incorrect)
-i(usage.)150 1089 y Fk(3.7.6)63 b(Signals)275 1332 y
-Ft(When)27 b(Bash)h(is)g(in)m(teractiv)m(e,)h(in)e(the)h(absence)h(of)f
-(an)m(y)g(traps,)h(it)e(ignores)h Fs(SIGTERM)e Ft(\(so)i(that)h(`)p
-Fs(kill)150 1441 y(0)p Ft(')k(do)s(es)g(not)g(kill)d(an)j(in)m
-(teractiv)m(e)h(shell\),)f(and)f Fs(SIGINT)f Ft(is)h(caugh)m(t)i(and)f
-(handled)e(\(so)i(that)h(the)f Fs(wait)150 1551 y Ft(builtin)21
-b(is)j(in)m(terruptible\).)36 b(When)24 b(Bash)g(receiv)m(es)i(a)e
-Fs(SIGINT)p Ft(,)h(it)f(breaks)g(out)h(of)f(an)m(y)h(executing)g(lo)s
-(ops.)150 1660 y(In)31 b(all)f(cases,)j(Bash)f(ignores)f
-Fs(SIGQUIT)p Ft(.)42 b(If)32 b(job)f(con)m(trol)h(is)e(in)h(e\013ect)i
-(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 1770 y(page)f(79\),)h
-(Bash)e(ignores)g Fs(SIGTTIN)p Ft(,)f Fs(SIGTTOU)p Ft(,)g(and)g
-Fs(SIGTSTP)p Ft(.)275 1903 y(Non-builtin)f(commands)j(started)g(b)m(y)g
-(Bash)h(ha)m(v)m(e)g(signal)e(handlers)f(set)j(to)g(the)g(v)-5
-b(alues)30 b(inherited)150 2012 y(b)m(y)37 b(the)h(shell)e(from)h(its)g
-(paren)m(t.)62 b(When)38 b(job)f(con)m(trol)h(is)e(not)i(in)e
-(e\013ect,)41 b(async)m(hronous)c(commands)150 2122 y(ignore)e
-Fs(SIGINT)f Ft(and)h Fs(SIGQUIT)e Ft(in)i(addition)e(to)k(these)f
-(inherited)d(handlers.)54 b(Commands)35 b(run)f(as)i(a)150
-2232 y(result)26 b(of)i(command)f(substitution)f(ignore)h(the)h(k)m
-(eyb)s(oard-generated)g(job)g(con)m(trol)g(signals)e
-Fs(SIGTTIN)p Ft(,)150 2341 y Fs(SIGTTOU)p Ft(,)j(and)g
-Fs(SIGTSTP)p Ft(.)275 2474 y(The)h(shell)g(exits)h(b)m(y)g(default)f
-(up)s(on)g(receipt)h(of)g(a)h Fs(SIGHUP)p Ft(.)42 b(Before)32
-b(exiting,)f(an)g(in)m(teractiv)m(e)h(shell)150 2584
-y(resends)41 b(the)i Fs(SIGHUP)e Ft(to)i(all)e(jobs,)k(running)40
-b(or)i(stopp)s(ed.)76 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g
-Fs(SIGCONT)d Ft(to)150 2693 y(ensure)32 b(that)h(they)g(receiv)m(e)h
-(the)f Fs(SIGHUP)p Ft(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)
-e(from)i(sending)e(the)i Fs(SIGHUP)e Ft(signal)150 2803
-y(to)i(a)g(particular)e(job,)i(it)f(should)f(b)s(e)h(remo)m(v)m(ed)h
-(from)g(the)f(jobs)g(table)h(with)e(the)i Fs(disown)e
-Ft(builtin)e(\(see)150 2912 y(Section)h(7.2)h([Job)f(Con)m(trol)g
-(Builtins],)e(page)j(80\))h(or)e(mark)m(ed)g(to)h(not)f(receiv)m(e)h
-Fs(SIGHUP)e Ft(using)g Fs(disown)150 3022 y(-h)p Ft(.)275
-3155 y(If)i(the)h Fs(huponexit)d Ft(shell)i(option)g(has)h(b)s(een)f
-(set)h(with)f Fs(shopt)f Ft(\(see)j(Section)f(4.2)h([Bash)f(Builtins],)
-150 3264 y(page)f(39\),)h(Bash)e(sends)g(a)h Fs(SIGHUP)d
-Ft(to)j(all)f(jobs)g(when)f(an)h(in)m(teractiv)m(e)h(login)f(shell)e
-(exits.)275 3397 y(If)38 b(Bash)h(is)f(w)m(aiting)g(for)h(a)g(command)f
-(to)i(complete)f(and)f(receiv)m(es)i(a)f(signal)f(for)g(whic)m(h)g(a)h
-(trap)150 3507 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)d(not)j(b)s
-(e)f(executed)i(un)m(til)d(the)i(command)f(completes.)54
-b(When)35 b(Bash)g(is)150 3616 y(w)m(aiting)h(for)h(an)g(async)m
-(hronous)g(command)g(via)g(the)g Fs(wait)f Ft(builtin,)f(the)j
-(reception)f(of)g(a)g(signal)f(for)150 3726 y(whic)m(h)e(a)h(trap)g
-(has)g(b)s(een)f(set)h(will)e(cause)i(the)g Fs(wait)f
-Ft(builtin)e(to)j(return)f(immediately)f(with)h(an)h(exit)150
-3836 y(status)c(greater)g(than)f(128,)i(immediately)d(after)i(whic)m(h)
-e(the)i(trap)f(is)f(executed.)150 4088 y Fr(3.8)68 b(Shell)45
-b(Scripts)275 4330 y Ft(A)c(shell)f(script)h(is)g(a)h(text)h(\014le)e
-(con)m(taining)g(shell)f(commands.)75 b(When)41 b(suc)m(h)h(a)g(\014le)
-f(is)g(used)g(as)150 4440 y(the)33 b(\014rst)f(non-option)g(argumen)m
-(t)i(when)e(in)m(v)m(oking)g(Bash,)i(and)e(neither)g(the)h(`)p
-Fs(-c)p Ft(')g(nor)g(`)p Fs(-s)p Ft(')f(option)h(is)150
-4550 y(supplied)i(\(see)40 b(Section)f(6.1)g([In)m(v)m(oking)g(Bash],)i
+TeXDict begin 31 36 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(31)275 299
+y(The)38 b(exit)h(status)g(is)g(used)f(b)m(y)g(the)h(Bash)g
+(conditional)h(commands)e(\(see)h(Section)h(3.2.4.2)h([Con-)150
+408 y(ditional)i(Constructs],)h(page)f(10\))g(and)e(some)i(of)f(the)g
+(list)g(constructs)g(\(see)h(Section)f(3.2.3)i([Lists],)150
+518 y(page)31 b(9\).)275 651 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 760 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 870 y(return)29 b(an)i(exit)g(status)g(of)f
+(2)h(to)g(indicate)g(incorrect)h(usage.)150 1089 y Fk(3.7.6)63
+b(Signals)275 1332 y Ft(When)27 b(Bash)h(is)h(in)m(teractiv)m(e,)i(in)d
+(the)g(absence)h(of)f(an)m(y)g(traps,)h(it)f(ignores)h
+Fs(SIGTERM)d Ft(\(so)i(that)h(`)p Fs(kill)150 1441 y(0)p
+Ft(')k(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j(shell\),)f(and)d
+Fs(SIGINT)f Ft(is)i(caugh)m(t)h(and)f(handled)f(\(so)h(that)h(the)f
+Fs(wait)150 1551 y Ft(builtin)24 b(is)h(in)m(terruptible\).)39
+b(When)24 b(Bash)g(receiv)m(es)j(a)d Fs(SIGINT)p Ft(,)h(it)g(breaks)f
+(out)h(of)f(an)m(y)h(executing)h(lo)s(ops.)150 1660 y(In)31
+b(all)h(cases,)h(Bash)f(ignores)g Fs(SIGQUIT)p Ft(.)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 1770 y(page)f(79\),)h(Bash)e(ignores)h
+Fs(SIGTTIN)p Ft(,)e Fs(SIGTTOU)p Ft(,)g(and)g Fs(SIGTSTP)p
+Ft(.)275 1903 y(Non-builtin)i(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 2012 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 2122 y(ignore)f Fs(SIGINT)e
+Ft(and)h Fs(SIGQUIT)e Ft(in)j(addition)f(to)i(these)f(inherited)f
+(handlers.)55 b(Commands)35 b(run)f(as)i(a)150 2232 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 Fs(SIGTTIN)p
+Ft(,)150 2341 y Fs(SIGTTOU)p Ft(,)h(and)g Fs(SIGTSTP)p
+Ft(.)275 2474 y(The)h(shell)i(exits)g(b)m(y)f(default)g(up)s(on)f
+(receipt)i(of)f(a)h Fs(SIGHUP)p Ft(.)42 b(Before)32 b(exiting,)h(an)e
+(in)m(teractiv)m(e)j(shell)150 2584 y(resends)41 b(the)i
+Fs(SIGHUP)e Ft(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 Fs(SIGCONT)d
+Ft(to)150 2693 y(ensure)32 b(that)h(they)g(receiv)m(e)i(the)e
+Fs(SIGHUP)p Ft(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)g(from)
+g(sending)f(the)h Fs(SIGHUP)e Ft(signal)150 2803 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 Fs(disown)e Ft(builtin)h(\(see)150
+2912 y(Section)f(7.2)g([Job)f(Con)m(trol)h(Builtins],)g(page)g(80\))h
+(or)e(mark)m(ed)g(to)h(not)f(receiv)m(e)i Fs(SIGHUP)d
+Ft(using)h Fs(disown)150 3022 y(-h)p Ft(.)275 3155 y(If)h(the)h
+Fs(huponexit)d Ft(shell)k(option)f(has)g(b)s(een)f(set)h(with)g
+Fs(shopt)e Ft(\(see)j(Section)g(4.2)g([Bash)f(Builtins],)150
+3264 y(page)f(39\),)h(Bash)e(sends)g(a)h Fs(SIGHUP)d
+Ft(to)j(all)h(jobs)e(when)f(an)h(in)m(teractiv)m(e)j(login)f(shell)e
+(exits.)275 3397 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 3507 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 3616 y(w)m(aiting)j(for)f(an)g(async)m
+(hronous)g(command)g(via)h(the)f Fs(wait)f Ft(builtin,)i(the)g
+(reception)g(of)f(a)g(signal)h(for)150 3726 y(whic)m(h)d(a)g(trap)g
+(has)g(b)s(een)f(set)h(will)h(cause)f(the)g Fs(wait)f
+Ft(builtin)h(to)g(return)f(immediately)i(with)f(an)g(exit)150
+3836 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 4088 y Fr(3.8)68 b(Shell)45
+b(Scripts)275 4330 y Ft(A)c(shell)h(script)g(is)g(a)g(text)h(\014le)f
+(con)m(taining)h(shell)f(commands.)75 b(When)41 b(suc)m(h)h(a)g(\014le)
+g(is)g(used)f(as)150 4440 y(the)33 b(\014rst)f(non-option)h(argumen)m
+(t)h(when)e(in)m(v)m(oking)i(Bash,)g(and)e(neither)h(the)g(`)p
+Fs(-c)p Ft(')g(nor)g(`)p Fs(-s)p Ft(')f(option)i(is)150
+4550 y(supplied)j(\(see)j(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)h
(page)f(63\),)i(Bash)d(reads)f(and)g(executes)i(commands)150
-4659 y(from)31 b(the)h(\014le,)g(then)f(exits.)45 b(This)30
-b(mo)s(de)h(of)h(op)s(eration)g(creates)h(a)f(non-in)m(teractiv)m(e)g
-(shell.)43 b(The)32 b(shell)150 4769 y(\014rst)26 b(searc)m(hes)h(for)f
-(the)g(\014le)g(in)f(the)h(curren)m(t)h(directory)-8
-b(,)27 b(and)f(lo)s(oks)f(in)h(the)g(directories)f(in)g
-Fs($PATH)g Ft(if)h(not)150 4878 y(found)j(there.)275
-5011 y(When)34 b(Bash)h(runs)e(a)i(shell)e(script,)h(it)h(sets)g(the)f
-(sp)s(ecial)g(parameter)h Fs(0)f Ft(to)h(the)g(name)g(of)g(the)g
-(\014le,)150 5121 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)h
-(and)f(the)h(p)s(ositional)d(parameters)i(are)h(set)g(to)g(the)g
-(remain-)150 5230 y(ing)e(argumen)m(ts,)k(if)c(an)m(y)h(are)g(giv)m
-(en.)66 b(If)39 b(no)g(additional)d(argumen)m(ts)k(are)f(supplied,)f
-(the)h(p)s(ositional)150 5340 y(parameters)31 b(are)f(unset.)p
-eop
+4659 y(from)31 b(the)h(\014le,)h(then)e(exits.)46 b(This)31
+b(mo)s(de)g(of)h(op)s(eration)h(creates)g(a)f(non-in)m(teractiv)m(e)i
+(shell.)45 b(The)32 b(shell)150 4769 y(\014rst)26 b(searc)m(hes)h(for)f
+(the)g(\014le)h(in)f(the)g(curren)m(t)h(directory)-8
+b(,)28 b(and)e(lo)s(oks)g(in)h(the)f(directories)h(in)f
+Fs($PATH)f Ft(if)i(not)150 4878 y(found)i(there.)275
+5011 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 Fs(0)f Ft(to)h(the)g(name)g(of)g(the)g
+(\014le,)150 5121 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 5230 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 5340 y(parameters)31 b(are)f(unset.)p
+eop end
%%Page: 32 38
-32 37 bop 150 -116 a Ft(32)2572 b(Bash)31 b(Reference)g(Man)m(ual)275
-299 y(A)39 b(shell)f(script)g(ma)m(y)i(b)s(e)f(made)h(executable)g(b)m
-(y)f(using)f(the)i Fs(chmod)e Ft(command)h(to)h(turn)e(on)i(the)150
-408 y(execute)j(bit.)72 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h
-(\014le)e(while)f(searc)m(hing)i(the)g Fs($PATH)f Ft(for)h(a)h
-(command,)h(it)150 518 y(spa)m(wns)30 b(a)g(subshell)e(to)j(execute)h
-(it.)40 b(In)30 b(other)g(w)m(ords,)g(executing)390 653
-y Fs(filename)46 b Fj(arguments)150 787 y Ft(is)29 b(equiv)-5
-b(alen)m(t)30 b(to)h(executing)390 922 y Fs(bash)47 b(filename)e
-Fj(arguments)150 1056 y Ft(if)29 b Fs(filename)e Ft(is)i(an)g
-(executable)i(shell)d(script.)39 b(This)28 b(subshell)f(reinitializes)f
-(itself,)j(so)h(that)h(the)e(e\013ect)150 1166 y(is)35
-b(as)i(if)f(a)g(new)g(shell)f(had)h(b)s(een)g(in)m(v)m(ok)m(ed)g(to)i
-(in)m(terpret)d(the)i(script,)g(with)e(the)i(exception)g(that)g(the)150
-1275 y(lo)s(cations)23 b(of)i(commands)e(remem)m(b)s(ered)h(b)m(y)g
-(the)g(paren)m(t)g(\(see)h(the)f(description)e(of)i Fs(hash)f
-Ft(in)g(Section)h(4.1)150 1385 y([Bourne)30 b(Shell)f(Builtins],)f
-(page)j(33\))h(are)e(retained)g(b)m(y)g(the)h(c)m(hild.)275
-1519 y(Most)36 b(v)m(ersions)f(of)h(Unix)e(mak)m(e)i(this)f(a)h(part)f
-(of)h(the)g(op)s(erating)f(system's)g(command)h(execution)150
-1629 y(mec)m(hanism.)49 b(If)33 b(the)g(\014rst)g(line)f(of)h(a)h
-(script)e(b)s(egins)g(with)g(the)h(t)m(w)m(o)i(c)m(haracters)g(`)p
-Fs(#!)p Ft(',)f(the)g(remainder)150 1738 y(of)d(the)g(line)f(sp)s
-(eci\014es)f(an)i(in)m(terpreter)f(for)h(the)g(program.)43
-b(Th)m(us,)30 b(y)m(ou)h(can)h(sp)s(ecify)d(Bash,)j Fs(awk)p
-Ft(,)e(P)m(erl,)150 1848 y(or)g(some)h(other)g(in)m(terpreter)f(and)f
-(write)h(the)g(rest)h(of)g(the)f(script)f(\014le)h(in)f(that)i
+TeXDict begin 32 37 bop 150 -116 a Ft(32)2572 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 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 Fs(chmod)e
+Ft(command)h(to)h(turn)e(on)i(the)150 408 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 Fs($PATH)f Ft(for)h(a)h(command,)h(it)150
+518 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 653 y Fs(filename)46
+b Fj(arguments)150 787 y Ft(is)30 b(equiv)-5 b(alen)m(t)32
+b(to)f(executing)390 922 y Fs(bash)47 b(filename)e Fj(arguments)150
+1056 y Ft(if)30 b Fs(filename)d Ft(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 1166 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 1275 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 Fs(hash)f Ft(in)h(Section)h(4.1)150
+1385 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(33\))h(are)e(retained)h
+(b)m(y)f(the)h(c)m(hild.)275 1519 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 1629 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 Fs(#!)p Ft(',)f(the)g(remainder)150
+1738 y(of)d(the)g(line)h(sp)s(eci\014es)e(an)h(in)m(terpreter)g(for)g
+(the)g(program.)43 b(Th)m(us,)30 b(y)m(ou)h(can)h(sp)s(ecify)e(Bash,)i
+Fs(awk)p Ft(,)e(P)m(erl,)150 1848 y(or)g(some)h(other)g(in)m(terpreter)
+g(and)e(write)i(the)f(rest)h(of)g(the)f(script)g(\014le)h(in)f(that)h
(language.)275 1983 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m
-(terpreter)f(consist)g(of)h(a)g(single)f(optional)f(argumen)m(t)j
-(follo)m(wing)d(the)150 2092 y(in)m(terpreter)32 b(name)i(on)f(the)g
-(\014rst)f(line)g(of)h(the)g(script)f(\014le,)h(follo)m(w)m(ed)g(b)m(y)
-g(the)g(name)g(of)g(the)h(script)e(\014le,)150 2202 y(follo)m(w)m(ed)f
-(b)m(y)h(the)f(rest)h(of)g(the)f(argumen)m(ts.)45 b(Bash)31
-b(will)e(p)s(erform)h(this)h(action)h(on)f(op)s(erating)g(systems)150
-2311 y(that)24 b(do)g(not)f(handle)f(it)h(themselv)m(es.)39
-b(Note)25 b(that)f(some)g(older)f(v)m(ersions)f(of)i(Unix)e(limit)g
-(the)i(in)m(terpreter)150 2421 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g
-(maxim)m(um)e(of)i(32)g(c)m(haracters.)275 2555 y(Bash)h(scripts)f
-(often)h(b)s(egin)f(with)g Fs(#!)f(/bin/bash)g Ft(\(assuming)h(that)i
-(Bash)f(has)g(b)s(een)f(installed)f(in)150 2665 y(`)p
-Fs(/bin)p Ft('\),)25 b(since)d(this)g(ensures)g(that)i(Bash)f(will)e(b)
-s(e)h(used)h(to)h(in)m(terpret)e(the)h(script,)h(ev)m(en)g(if)e(it)h
+(terpreter)g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h
+(follo)m(wing)g(the)150 2092 y(in)m(terpreter)33 b(name)h(on)f(the)g
+(\014rst)f(line)i(of)f(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)
+e(the)g(name)g(of)g(the)h(script)f(\014le,)150 2202 y(follo)m(w)m(ed)g
+(b)m(y)f(the)f(rest)h(of)g(the)f(argumen)m(ts.)45 b(Bash)31
+b(will)h(p)s(erform)e(this)i(action)h(on)e(op)s(erating)h(systems)150
+2311 y(that)24 b(do)g(not)f(handle)g(it)h(themselv)m(es.)40
+b(Note)25 b(that)f(some)g(older)g(v)m(ersions)f(of)h(Unix)f(limit)i
+(the)f(in)m(terpreter)150 2421 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g
+(maxim)m(um)f(of)h(32)g(c)m(haracters.)275 2555 y(Bash)h(scripts)g
+(often)g(b)s(egin)g(with)g Fs(#!)e(/bin/bash)g Ft(\(assuming)i(that)h
+(Bash)f(has)g(b)s(een)f(installed)i(in)150 2665 y(`)p
+Fs(/bin)p Ft('\),)25 b(since)e(this)g(ensures)f(that)i(Bash)f(will)h(b)
+s(e)e(used)h(to)h(in)m(terpret)f(the)g(script,)i(ev)m(en)f(if)f(it)h
(is)f(executed)150 2775 y(under)29 b(another)h(shell.)p
-eop
+eop end
%%Page: 33 39
-33 38 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(33)150 299 y Fo(4)80 b(Shell)55
-b(Builtin)g(Commands)275 525 y Ft(Builtin)22 b(commands)i(are)h(con)m
-(tained)g(within)d(the)j(shell)e(itself.)38 b(When)24
-b(the)h(name)g(of)g(a)g(builtin)c(com-)150 635 y(mand)26
-b(is)h(used)f(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f(simple)f(command)
-h(\(see)h(Section)f(3.2.1)i([Simple)d(Commands],)150
-745 y(page)21 b(8\),)j(the)d(shell)e(executes)j(the)f(command)f
-(directly)-8 b(,)22 b(without)e(in)m(v)m(oking)g(another)h(program.)37
-b(Builtin)150 854 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)e
-(functionalit)m(y)g(imp)s(ossible)e(or)k(incon)m(v)m(enien)m(t)f(to)h
-(obtain)150 964 y(with)29 b(separate)i(utilities.)275
-1097 y(This)i(section)i(brie\015y)f(the)h(builtins)d(whic)m(h)i(Bash)h
-(inherits)e(from)i(the)g(Bourne)g(Shell,)g(as)g(w)m(ell)g(as)150
-1206 y(the)c(builtin)26 b(commands)k(whic)m(h)g(are)g(unique)f(to)i(or)
-f(ha)m(v)m(e)i(b)s(een)e(extended)g(in)f(Bash.)275 1339
-y(Sev)m(eral)44 b(builtin)c(commands)k(are)h(describ)s(ed)d(in)h(other)
-h(c)m(hapters:)69 b(builtin)40 b(commands)k(whic)m(h)150
-1449 y(pro)m(vide)22 b(the)i(Bash)f(in)m(terface)h(to)g(the)g(job)f
-(con)m(trol)h(facilities)d(\(see)j(Section)g(7.2)g([Job)f(Con)m(trol)g
-(Builtins],)150 1558 y(page)40 b(80\),)j(the)c(directory)g(stac)m(k)h
-(\(see)g(Section)f(6.8.1)i([Directory)f(Stac)m(k)g(Builtins],)f(page)h
-(73\),)j(the)150 1668 y(command)23 b(history)g(\(see)h(Section)f(9.2)i
-([Bash)f(History)f(Builtins],)f(page)j(109\),)h(and)d(the)h
-(programmable)150 1778 y(completion)30 b(facilities)e(\(see)k(Section)e
-(8.7)h([Programmable)f(Completion)f(Builtins],)f(page)k(105\).)275
-1911 y(Man)m(y)f(of)f(the)h(builtins)26 b(ha)m(v)m(e)32
-b(b)s(een)e(extended)g(b)m(y)g Fl(posix)g Ft(or)g(Bash.)275
-2044 y(Unless)19 b(otherwise)h(noted,)i(eac)m(h)g(builtin)17
-b(command)j(do)s(cumen)m(ted)g(as)h(accepting)g(options)e(preceded)150
-2153 y(b)m(y)30 b(`)p Fs(-)p Ft(')h(accepts)g(`)p Fs(--)p
-Ft(')g(to)g(signify)d(the)j(end)f(of)g(the)h(options.)150
-2406 y Fr(4.1)68 b(Bourne)45 b(Shell)g(Builtins)275 2648
-y Ft(The)31 b(follo)m(wing)f(shell)f(builtin)g(commands)i(are)h
-(inherited)d(from)i(the)h(Bourne)f(Shell.)43 b(These)31
-b(com-)150 2758 y(mands)e(are)i(implemen)m(ted)e(as)i(sp)s(eci\014ed)d
-(b)m(y)j(the)f Fl(posix)g Ft(1003.2)j(standard.)150 2914
-y Fs(:)d Ft(\(a)h(colon\))870 3024 y Fs(:)47 b([)p Fj(arguments)11
-b Fs(])630 3157 y Ft(Do)43 b(nothing)e(b)s(ey)m(ond)h(expanding)e
-Fq(argumen)m(ts)46 b Ft(and)c(p)s(erforming)e(redirections.)74
-b(The)630 3267 y(return)29 b(status)i(is)e(zero.)150
-3423 y Fs(.)h Ft(\(a)h(p)s(erio)s(d\))870 3532 y Fs(.)47
+TeXDict begin 33 38 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(33)150 299 y Fo(4)80
+b(Shell)53 b(Builtin)f(Commands)275 525 y Ft(Builtin)25
+b(commands)f(are)h(con)m(tained)h(within)e(the)h(shell)g(itself.)40
+b(When)24 b(the)h(name)g(of)g(a)g(builtin)f(com-)150
+635 y(mand)i(is)i(used)e(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f
+(simple)h(command)f(\(see)h(Section)g(3.2.1)h([Simple)f(Commands],)150
+745 y(page)21 b(8\),)j(the)d(shell)g(executes)h(the)f(command)f
+(directly)-8 b(,)24 b(without)d(in)m(v)m(oking)h(another)f(program.)37
+b(Builtin)150 854 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)g
+(functionalit)m(y)h(imp)s(ossible)e(or)h(incon)m(v)m(enien)m(t)h(to)f
+(obtain)150 964 y(with)30 b(separate)h(utilities.)275
+1097 y(This)j(section)i(brie\015y)f(the)g(builtins)g(whic)m(h)g(Bash)g
+(inherits)g(from)g(the)g(Bourne)g(Shell,)i(as)e(w)m(ell)i(as)150
+1206 y(the)31 b(builtin)e(commands)h(whic)m(h)h(are)f(unique)g(to)h(or)
+f(ha)m(v)m(e)i(b)s(een)e(extended)g(in)g(Bash.)275 1339
+y(Sev)m(eral)45 b(builtin)e(commands)h(are)h(describ)s(ed)e(in)h(other)
+g(c)m(hapters:)69 b(builtin)43 b(commands)h(whic)m(h)150
+1449 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 1558 y(page)40 b(80\),)j(the)c(directory)h(stac)m(k)g
+(\(see)g(Section)g(6.8.1)h([Directory)g(Stac)m(k)f(Builtins],)i(page)e
+(73\),)j(the)150 1668 y(command)23 b(history)h(\(see)g(Section)g(9.2)h
+([Bash)f(History)g(Builtins],)h(page)g(109\),)h(and)d(the)h
+(programmable)150 1778 y(completion)32 b(facilities)g(\(see)g(Section)f
+(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(105\).)275
+1911 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 Fl(posix)g Ft(or)g(Bash.)275 2044 y(Unless)20
+b(otherwise)h(noted,)h(eac)m(h)g(builtin)e(command)g(do)s(cumen)m(ted)g
+(as)h(accepting)h(options)e(preceded)150 2153 y(b)m(y)30
+b(`)p Fs(-)p Ft(')h(accepts)g(`)p Fs(--)p Ft(')g(to)g(signify)f(the)h
+(end)f(of)g(the)h(options.)150 2406 y Fr(4.1)68 b(Bourne)45
+b(Shell)g(Builtins)275 2648 y Ft(The)31 b(follo)m(wing)i(shell)e
+(builtin)h(commands)f(are)h(inherited)f(from)g(the)h(Bourne)f(Shell.)45
+b(These)31 b(com-)150 2758 y(mands)e(are)i(implemen)m(ted)g(as)g(sp)s
+(eci\014ed)e(b)m(y)i(the)f Fl(posix)g Ft(1003.2)j(standard.)150
+2914 y Fs(:)d Ft(\(a)h(colon\))870 3024 y Fs(:)47 b([)p
+Fj(arguments)11 b Fs(])630 3157 y Ft(Do)43 b(nothing)f(b)s(ey)m(ond)g
+(expanding)f Fq(argumen)m(ts)46 b Ft(and)c(p)s(erforming)f
+(redirections.)76 b(The)630 3267 y(return)29 b(status)i(is)f(zero.)150
+3423 y Fs(.)g Ft(\(a)h(p)s(erio)s(d\))870 3532 y Fs(.)47
b Fj(filename)57 b Fs([)p Fj(arguments)11 b Fs(])630
3665 y Ft(Read)34 b(and)f(execute)i(commands)e(from)g(the)h
-Fq(\014lename)k Ft(argumen)m(t)c(in)e(the)i(curren)m(t)g(shell)630
-3775 y(con)m(text.)45 b(If)31 b Fq(\014lename)36 b Ft(do)s(es)31
-b(not)g(con)m(tain)h(a)f(slash,)g(the)h Fs(PATH)e Ft(v)-5
-b(ariable)30 b(is)g(used)g(to)i(\014nd)630 3885 y Fq(\014lename)p
-Ft(.)51 b(When)34 b(Bash)g(is)g(not)g(in)f Fl(posix)g
-Ft(mo)s(de,)i(the)g(curren)m(t)f(directory)f(is)g(searc)m(hed)630
-3994 y(if)d Fq(\014lename)35 b Ft(is)30 b(not)i(found)d(in)h
+Fq(\014lename)39 b Ft(argumen)m(t)34 b(in)f(the)h(curren)m(t)g(shell)
+630 3775 y(con)m(text.)45 b(If)31 b Fq(\014lename)37
+b Ft(do)s(es)31 b(not)g(con)m(tain)i(a)e(slash,)h(the)g
+Fs(PATH)e Ft(v)-5 b(ariable)32 b(is)f(used)f(to)i(\014nd)630
+3885 y Fq(\014lename)p Ft(.)52 b(When)34 b(Bash)g(is)h(not)f(in)g
+Fl(posix)f Ft(mo)s(de,)i(the)g(curren)m(t)f(directory)g(is)g(searc)m
+(hed)630 3994 y(if)d Fq(\014lename)36 b Ft(is)31 b(not)h(found)d(in)i
Fs($PATH)p Ft(.)41 b(If)31 b(an)m(y)g Fq(argumen)m(ts)k
-Ft(are)c(supplied,)d(they)k(b)s(ecome)630 4104 y(the)e(p)s(ositional)e
-(parameters)j(when)e Fq(\014lename)34 b Ft(is)29 b(executed.)42
-b(Otherwise)29 b(the)h(p)s(ositional)630 4213 y(parameters)43
-b(are)h(unc)m(hanged.)79 b(The)42 b(return)g(status)i(is)e(the)h(exit)g
-(status)h(of)f(the)g(last)630 4323 y(command)37 b(executed,)k(or)c
-(zero)h(if)f(no)g(commands)g(are)h(executed.)63 b(If)36
-b Fq(\014lename)42 b Ft(is)37 b(not)630 4433 y(found,)22
-b(or)f(cannot)g(b)s(e)f(read,)j(the)e(return)f(status)h(is)f(non-zero.)
-38 b(This)19 b(builtin)f(is)h(equiv)-5 b(alen)m(t)630
+Ft(are)c(supplied,)f(they)i(b)s(ecome)630 4104 y(the)e(p)s(ositional)h
+(parameters)g(when)e Fq(\014lename)35 b Ft(is)30 b(executed.)42
+b(Otherwise)30 b(the)g(p)s(ositional)630 4213 y(parameters)43
+b(are)h(unc)m(hanged.)79 b(The)42 b(return)g(status)i(is)f(the)g(exit)h
+(status)g(of)f(the)g(last)630 4323 y(command)37 b(executed,)k(or)c
+(zero)h(if)g(no)f(commands)g(are)h(executed.)63 b(If)36
+b Fq(\014lename)43 b Ft(is)38 b(not)630 4433 y(found,)22
+b(or)f(cannot)g(b)s(e)f(read,)j(the)e(return)f(status)h(is)g(non-zero.)
+38 b(This)20 b(builtin)h(is)f(equiv)-5 b(alen)m(t)630
4542 y(to)31 b Fs(source)p Ft(.)150 4699 y Fs(break)870
-4831 y(break)46 b([)p Fj(n)11 b Fs(])630 4964 y Ft(Exit)44
-b(from)g(a)g Fs(for)p Ft(,)k Fs(while)p Ft(,)e Fs(until)p
-Ft(,)h(or)d Fs(select)f Ft(lo)s(op.)82 b(If)44 b Fq(n)g
-Ft(is)f(supplied,)i(the)g Fq(n)p Ft(th)630 5074 y(enclosing)39
-b(lo)s(op)g(is)h(exited.)69 b Fq(n)40 b Ft(m)m(ust)g(b)s(e)f(greater)j
-(than)d(or)i(equal)e(to)i(1.)70 b(The)40 b(return)630
-5184 y(status)31 b(is)e(zero)i(unless)e Fq(n)h Ft(is)f(not)i(greater)g
-(than)g(or)f(equal)g(to)h(1.)150 5340 y Fs(cd)p eop
+4831 y(break)46 b([)p Fj(n)11 b Fs(])630 4964 y Ft(Exit)45
+b(from)f(a)g Fs(for)p Ft(,)k Fs(while)p Ft(,)e Fs(until)p
+Ft(,)h(or)d Fs(select)f Ft(lo)s(op.)83 b(If)44 b Fq(n)g
+Ft(is)g(supplied,)j(the)e Fq(n)p Ft(th)630 5074 y(enclosing)c(lo)s(op)f
+(is)h(exited.)70 b Fq(n)40 b Ft(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 5184 y(status)31
+b(is)f(zero)h(unless)f Fq(n)g Ft(is)g(not)h(greater)g(than)g(or)f
+(equal)h(to)g(1.)150 5340 y Fs(cd)p eop end
%%Page: 34 40
-34 39 bop 150 -116 a Ft(34)2572 b(Bash)31 b(Reference)g(Man)m(ual)870
-299 y Fs(cd)47 b([-L|-P])f([)p Fj(directory)11 b Fs(])630
-431 y Ft(Change)37 b(the)g(curren)m(t)f(w)m(orking)h(directory)f(to)i
-Fq(directory)p Ft(.)59 b(If)37 b Fq(directory)44 b Ft(is)36
-b(not)h(giv)m(en,)630 541 y(the)31 b(v)-5 b(alue)30 b(of)h(the)g
-Fs(HOME)e Ft(shell)g(v)-5 b(ariable)30 b(is)g(used.)40
-b(If)31 b(the)g(shell)e(v)-5 b(ariable)29 b Fs(CDPATH)g
-Ft(exists,)630 650 y(it)e(is)f(used)g(as)h(a)h(searc)m(h)f(path.)40
-b(If)26 b Fq(directory)34 b Ft(b)s(egins)26 b(with)g(a)h(slash,)g
-Fs(CDPATH)e Ft(is)h(not)h(used.)630 783 y(The)h(`)p Fs(-P)p
-Ft(')h(option)f(means)g(to)h(not)g(follo)m(w)f(sym)m(b)s(olic)f(links;)
-g(sym)m(b)s(olic)g(links)f(are)j(follo)m(w)m(ed)630 892
-y(b)m(y)23 b(default)g(or)h(with)e(the)i(`)p Fs(-L)p
-Ft(')f(option.)38 b(If)23 b Fq(directory)31 b Ft(is)22
-b(`)p Fs(-)p Ft(',)k(it)d(is)f(equiv)-5 b(alen)m(t)23
-b(to)i Fs($OLDPWD)p Ft(.)630 1025 y(If)33 b(a)h(non-empt)m(y)g
-(directory)f(name)g(from)g Fs(CDPATH)f Ft(is)g(used,)i(or)g(if)e(`)p
-Fs(-)p Ft(')i(is)e(the)i(\014rst)f(argu-)630 1134 y(men)m(t,)28
-b(and)e(the)h(directory)f(c)m(hange)i(is)e(successful,)h(the)g
-(absolute)f(pathname)h(of)f(the)h(new)630 1244 y(w)m(orking)j
-(directory)g(is)f(written)g(to)j(the)e(standard)g(output.)630
-1377 y(The)f(return)g(status)h(is)e(zero)j(if)d(the)i(directory)f(is)g
-(successfully)f(c)m(hanged,)i(non-zero)g(oth-)630 1486
+TeXDict begin 34 39 bop 150 -116 a Ft(34)2572 b(Bash)31
+b(Reference)g(Man)m(ual)870 299 y Fs(cd)47 b([-L|-P])f([)p
+Fj(directory)11 b Fs(])630 431 y Ft(Change)37 b(the)g(curren)m(t)f(w)m
+(orking)i(directory)f(to)h Fq(directory)p Ft(.)60 b(If)37
+b Fq(directory)45 b Ft(is)37 b(not)g(giv)m(en,)630 541
+y(the)31 b(v)-5 b(alue)31 b(of)g(the)g Fs(HOME)e Ft(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 Fs(CDPATH)e Ft(exists,)630 650 y(it)f(is)f(used)f(as)h
+(a)h(searc)m(h)f(path.)40 b(If)26 b Fq(directory)35 b
+Ft(b)s(egins)27 b(with)g(a)g(slash,)h Fs(CDPATH)d Ft(is)i(not)g(used.)
+630 783 y(The)h(`)p Fs(-P)p Ft(')h(option)g(means)f(to)h(not)g(follo)m
+(w)h(sym)m(b)s(olic)f(links;)g(sym)m(b)s(olic)g(links)f(are)h(follo)m
+(w)m(ed)630 892 y(b)m(y)23 b(default)h(or)g(with)f(the)h(`)p
+Fs(-L)p Ft(')f(option.)39 b(If)23 b Fq(directory)32 b
+Ft(is)23 b(`)p Fs(-)p Ft(',)j(it)e(is)f(equiv)-5 b(alen)m(t)25
+b(to)g Fs($OLDPWD)p Ft(.)630 1025 y(If)33 b(a)h(non-empt)m(y)g
+(directory)g(name)f(from)g Fs(CDPATH)f Ft(is)h(used,)h(or)g(if)f(`)p
+Fs(-)p Ft(')h(is)f(the)h(\014rst)f(argu-)630 1134 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 1244 y(w)m(orking)k
+(directory)g(is)f(written)g(to)i(the)e(standard)g(output.)630
+1377 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 1486
y(erwise.)150 1641 y Fs(continue)870 1774 y(continue)46
-b([)p Fj(n)11 b Fs(])630 1906 y Ft(Resume)32 b(the)g(next)g(iteration)g
-(of)g(an)g(enclosing)f Fs(for)p Ft(,)h Fs(while)p Ft(,)f
+b([)p Fj(n)11 b Fs(])630 1906 y Ft(Resume)32 b(the)g(next)g(iteration)i
+(of)e(an)g(enclosing)h Fs(for)p Ft(,)f Fs(while)p Ft(,)f
Fs(until)p Ft(,)g(or)h Fs(select)f Ft(lo)s(op.)630 2016
-y(If)f Fq(n)h Ft(is)f(supplied,)d(the)32 b(execution)f(of)g(the)g
-Fq(n)p Ft(th)f(enclosing)g(lo)s(op)g(is)f(resumed.)42
+y(If)f Fq(n)h Ft(is)g(supplied,)e(the)j(execution)g(of)f(the)g
+Fq(n)p Ft(th)f(enclosing)i(lo)s(op)f(is)f(resumed.)42
b Fq(n)30 b Ft(m)m(ust)h(b)s(e)630 2125 y(greater)39
-b(than)f(or)g(equal)f(to)i(1.)63 b(The)38 b(return)e(status)j(is)d
-(zero)j(unless)d Fq(n)i Ft(is)f(not)h(greater)630 2235
-y(than)30 b(or)g(equal)g(to)h(1.)150 2390 y Fs(eval)870
+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 Fq(n)h Ft(is)g(not)g(greater)630 2235
+y(than)30 b(or)g(equal)h(to)g(1.)150 2390 y Fs(eval)870
2523 y(eval)47 b([)p Fj(arguments)11 b Fs(])630 2655
-y Ft(The)25 b(argumen)m(ts)h(are)g(concatenated)i(together)f(in)m(to)e
-(a)h(single)f(command,)h(whic)m(h)f(is)f(then)630 2765
-y(read)35 b(and)g(executed,)j(and)d(its)g(exit)g(status)h(returned)e
-(as)h(the)h(exit)f(status)h(of)g Fs(eval)p Ft(.)54 b(If)630
-2874 y(there)31 b(are)f(no)h(argumen)m(ts)f(or)h(only)e(empt)m(y)i
-(argumen)m(ts,)g(the)f(return)g(status)g(is)g(zero.)150
+y Ft(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 2765
+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 Fs(eval)p Ft(.)54 b(If)630
+2874 y(there)31 b(are)f(no)h(argumen)m(ts)f(or)h(only)f(empt)m(y)h
+(argumen)m(ts,)g(the)f(return)g(status)g(is)h(zero.)150
3029 y Fs(exec)870 3162 y(exec)47 b([-cl])f([-a)h Fj(name)11
b Fs(])46 b([)p Fj(command)56 b Fs([)p Fj(arguments)11
-b Fs(]])630 3294 y Ft(If)28 b Fq(command)j Ft(is)d(supplied,)d(it)j
-(replaces)g(the)g(shell)f(without)g(creating)i(a)f(new)g(pro)s(cess.)39
-b(If)630 3404 y(the)25 b(`)p Fs(-l)p Ft(')f(option)h(is)e(supplied,)g
-(the)i(shell)e(places)h(a)h(dash)f(at)i(the)f(b)s(eginning)d(of)i(the)h
+b Fs(]])630 3294 y Ft(If)28 b Fq(command)j Ft(is)e(supplied,)e(it)i
+(replaces)g(the)f(shell)h(without)f(creating)i(a)e(new)g(pro)s(cess.)39
+b(If)630 3404 y(the)25 b(`)p Fs(-l)p Ft(')f(option)i(is)e(supplied,)h
+(the)g(shell)g(places)g(a)g(dash)f(at)i(the)f(b)s(eginning)f(of)g(the)h
(zeroth)630 3513 y(arg)h(passed)f(to)h Fq(command)p Ft(.)39
-b(This)23 b(is)i(what)g(the)h Fs(login)d Ft(program)j(do)s(es.)38
+b(This)24 b(is)i(what)f(the)h Fs(login)d Ft(program)j(do)s(es.)38
b(The)25 b(`)p Fs(-c)p Ft(')g(option)630 3623 y(causes)g
-Fq(command)i Ft(to)e(b)s(e)f(executed)h(with)e(an)h(empt)m(y)h(en)m
-(vironmen)m(t.)38 b(If)24 b(`)p Fs(-a)p Ft(')g(is)f(supplied,)630
-3733 y(the)32 b(shell)e(passes)i Fq(name)37 b Ft(as)c(the)f(zeroth)h
+Fq(command)i Ft(to)e(b)s(e)f(executed)h(with)f(an)g(empt)m(y)h(en)m
+(vironmen)m(t.)39 b(If)24 b(`)p Fs(-a)p Ft(')g(is)g(supplied,)630
+3733 y(the)32 b(shell)g(passes)g Fq(name)37 b Ft(as)c(the)f(zeroth)h
(argumen)m(t)f(to)h Fq(command)p Ft(.)45 b(If)32 b(no)g
-Fq(command)j Ft(is)630 3842 y(sp)s(eci\014ed,)f(redirections)f(ma)m(y)i
-(b)s(e)f(used)f(to)i(a\013ect)h(the)f(curren)m(t)f(shell)f(en)m
-(vironmen)m(t.)52 b(If)630 3952 y(there)34 b(are)h(no)f(redirection)f
-(errors,)i(the)f(return)f(status)i(is)e(zero;)k(otherwise)d(the)g
-(return)630 4061 y(status)d(is)e(non-zero.)150 4217 y
+Fq(command)j Ft(is)630 3842 y(sp)s(eci\014ed,)g(redirections)g(ma)m(y)g
+(b)s(e)f(used)f(to)i(a\013ect)h(the)f(curren)m(t)f(shell)h(en)m
+(vironmen)m(t.)53 b(If)630 3952 y(there)34 b(are)h(no)f(redirection)h
+(errors,)g(the)f(return)f(status)i(is)f(zero;)j(otherwise)e(the)f
+(return)630 4061 y(status)d(is)f(non-zero.)150 4217 y
Fs(exit)870 4349 y(exit)47 b([)p Fj(n)11 b Fs(])630 4482
-y Ft(Exit)29 b(the)h(shell,)f(returning)e(a)k(status)f(of)g
-Fq(n)f Ft(to)h(the)g(shell's)e(paren)m(t.)41 b(If)30
-b Fq(n)f Ft(is)g(omitted,)h(the)630 4591 y(exit)c(status)h(is)f(that)h
-(of)g(the)g(last)f(command)g(executed.)41 b(An)m(y)26
-b(trap)h(on)f Fs(EXIT)f Ft(is)h(executed)630 4701 y(b)s(efore)k(the)h
-(shell)d(terminates.)150 4856 y Fs(export)870 4988 y(export)46
+y Ft(Exit)30 b(the)g(shell,)h(returning)d(a)j(status)f(of)g
+Fq(n)f Ft(to)h(the)g(shell's)g(paren)m(t.)41 b(If)30
+b Fq(n)f Ft(is)h(omitted,)h(the)630 4591 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 Fs(EXIT)f Ft(is)i(executed)630 4701 y(b)s(efore)j(the)h
+(shell)f(terminates.)150 4856 y Fs(export)870 4988 y(export)46
b([-fn])g([-p])h([)p Fj(name)11 b Fs([=)p Fj(value)g
Fs(]])630 5121 y Ft(Mark)40 b(eac)m(h)h Fq(name)k Ft(to)40
-b(b)s(e)f(passed)g(to)i(c)m(hild)d(pro)s(cesses)h(in)f(the)i(en)m
-(vironmen)m(t.)69 b(If)39 b(the)630 5230 y(`)p Fs(-f)p
-Ft(')29 b(option)g(is)g(supplied,)e(the)i Fq(name)5 b
-Ft(s)30 b(refer)f(to)h(shell)e(functions;)g(otherwise)h(the)h(names)630
-5340 y(refer)36 b(to)i(shell)c(v)-5 b(ariables.)58 b(The)36
-b(`)p Fs(-n)p Ft(')h(option)f(means)g(to)h(no)g(longer)f(mark)g(eac)m
-(h)i Fq(name)p eop
+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 5230 y(`)p Fs(-f)p
+Ft(')29 b(option)h(is)g(supplied,)f(the)g Fq(name)5 b
+Ft(s)30 b(refer)f(to)h(shell)g(functions;)f(otherwise)h(the)g(names)630
+5340 y(refer)36 b(to)i(shell)e(v)-5 b(ariables.)60 b(The)36
+b(`)p Fs(-n)p Ft(')h(option)g(means)f(to)h(no)g(longer)g(mark)f(eac)m
+(h)i Fq(name)p eop end
%%Page: 35 41
-35 40 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(35)630 299 y(for)39 b(exp)s(ort.)65
-b(If)39 b(no)g Fq(names)j Ft(are)d(supplied,)f(or)h(if)f(the)h(`)p
-Fs(-p)p Ft(')g(option)f(is)g(giv)m(en,)j(a)e(list)f(of)630
-408 y(exp)s(orted)e(names)h(is)e(displa)m(y)m(ed.)58
-b(The)37 b(`)p Fs(-p)p Ft(')f(option)g(displa)m(ys)f(output)h(in)f(a)i
-(form)f(that)630 518 y(ma)m(y)c(b)s(e)e(reused)g(as)i(input.)41
-b(If)30 b(a)i(v)-5 b(ariable)29 b(name)j(is)e(follo)m(w)m(ed)g(b)m(y)h
-(=)p Fq(v)-5 b(alue)p Ft(,)31 b(the)g(v)-5 b(alue)31
-b(of)630 628 y(the)g(v)-5 b(ariable)29 b(is)g(set)i(to)g
-Fq(v)-5 b(alue)p Ft(.)630 761 y(The)29 b(return)e(status)j(is)e(zero)i
-(unless)d(an)i(in)m(v)-5 b(alid)26 b(option)j(is)f(supplied,)e(one)k
-(of)f(the)g(names)630 870 y(is)g(not)i(a)f(v)-5 b(alid)29
-b(shell)f(v)-5 b(ariable)29 b(name,)h(or)h(`)p Fs(-f)p
-Ft(')f(is)f(supplied)e(with)h(a)j(name)f(that)h(is)e(not)i(a)630
-980 y(shell)e(function.)150 1136 y Fs(getopts)870 1270
+TeXDict begin 35 40 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(35)630 299 y(for)39
+b(exp)s(ort.)65 b(If)39 b(no)g Fq(names)j Ft(are)d(supplied,)h(or)f(if)
+g(the)g(`)p Fs(-p)p Ft(')g(option)g(is)g(giv)m(en,)j(a)d(list)h(of)630
+408 y(exp)s(orted)c(names)h(is)f(displa)m(y)m(ed.)60
+b(The)37 b(`)p Fs(-p)p Ft(')f(option)h(displa)m(ys)g(output)f(in)g(a)h
+(form)f(that)630 518 y(ma)m(y)c(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 Fq(v)-5 b(alue)p Ft(,)32 b(the)f(v)-5 b(alue)32
+b(of)630 628 y(the)f(v)-5 b(ariable)31 b(is)f(set)h(to)g
+Fq(v)-5 b(alue)p Ft(.)630 761 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 870 y(is)h(not)h(a)f(v)-5 b(alid)31
+b(shell)f(v)-5 b(ariable)31 b(name,)f(or)h(`)p Fs(-f)p
+Ft(')f(is)g(supplied)f(with)g(a)i(name)f(that)h(is)f(not)h(a)630
+980 y(shell)g(function.)150 1136 y Fs(getopts)870 1270
y(getopts)46 b Fj(optstring)56 b(name)h Fs([)p Fj(args)11
-b Fs(])630 1403 y(getopts)28 b Ft(is)h(used)h(b)m(y)g(shell)e(scripts)h
-(to)h(parse)g(p)s(ositional)e(parameters.)41 b Fq(optstring)c
-Ft(con-)630 1512 y(tains)k(the)h(option)e(c)m(haracters)j(to)g(b)s(e)d
-(recognized;)48 b(if)41 b(a)g(c)m(haracter)j(is)c(follo)m(w)m(ed)h(b)m
-(y)h(a)630 1622 y(colon,)32 b(the)g(option)f(is)g(exp)s(ected)h(to)h
-(ha)m(v)m(e)g(an)e(argumen)m(t,)i(whic)m(h)e(should)e(b)s(e)i
-(separated)630 1731 y(from)37 b(it)g(b)m(y)g(white)g(space.)63
-b(The)37 b(colon)g(\(`)p Fs(:)p Ft('\))i(and)d(question)h(mark)g(\(`)p
-Fs(?)p Ft('\))i(ma)m(y)f(not)g(b)s(e)630 1841 y(used)g(as)g(option)g(c)
-m(haracters.)67 b(Eac)m(h)39 b(time)f(it)g(is)f(in)m(v)m(ok)m(ed,)k
-Fs(getopts)c Ft(places)h(the)h(next)630 1951 y(option)28
-b(in)f(the)i(shell)e(v)-5 b(ariable)28 b Fq(name)p Ft(,)h(initializing)
-c Fq(name)34 b Ft(if)27 b(it)h(do)s(es)h(not)g(exist,)g(and)f(the)630
-2060 y(index)k(of)h(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s
-(cessed)h(in)m(to)g(the)h(v)-5 b(ariable)32 b Fs(OPTIND)p
-Ft(.)48 b Fs(OPTIND)630 2170 y Ft(is)40 b(initialized)e(to)k(1)f(eac)m
-(h)h(time)f(the)g(shell)e(or)i(a)g(shell)e(script)h(is)g(in)m(v)m(ok)m
-(ed.)73 b(When)41 b(an)630 2279 y(option)35 b(requires)e(an)i(argumen)m
-(t,)i Fs(getopts)c Ft(places)i(that)h(argumen)m(t)g(in)m(to)f(the)g(v)
+b Fs(])630 1403 y(getopts)28 b Ft(is)i(used)g(b)m(y)g(shell)g(scripts)g
+(to)g(parse)g(p)s(ositional)h(parameters.)41 b Fq(optstring)d
+Ft(con-)630 1512 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 1622 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 1731 y(from)37 b(it)h(b)m(y)f(white)h(space.)63
+b(The)37 b(colon)h(\(`)p Fs(:)p Ft('\))h(and)d(question)i(mark)f(\(`)p
+Fs(?)p Ft('\))i(ma)m(y)f(not)g(b)s(e)630 1841 y(used)g(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
+Fs(getopts)37 b Ft(places)i(the)g(next)630 1951 y(option)29
+b(in)f(the)h(shell)g(v)-5 b(ariable)30 b Fq(name)p Ft(,)f(initializing)
+i Fq(name)j Ft(if)28 b(it)h(do)s(es)g(not)g(exist,)h(and)e(the)630
+2060 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 Fs(OPTIND)p
+Ft(.)48 b Fs(OPTIND)630 2170 y Ft(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 2279 y(option)36 b(requires)e(an)h(argumen)m
+(t,)i Fs(getopts)c Ft(places)j(that)g(argumen)m(t)g(in)m(to)g(the)f(v)
-5 b(ariable)630 2389 y Fs(OPTARG)p Ft(.)55 b(The)35
-b(shell)e(do)s(es)j(not)g(reset)g Fs(OPTIND)e Ft(automatically;)k(it)d
-(m)m(ust)g(b)s(e)g(man)m(ually)630 2498 y(reset)i(b)s(et)m(w)m(een)g(m)
-m(ultiple)e(calls)g(to)i Fs(getopts)e Ft(within)f(the)j(same)g(shell)d
-(in)m(v)m(o)s(cation)j(if)f(a)630 2608 y(new)30 b(set)h(of)f
-(parameters)h(is)e(to)j(b)s(e)d(used.)630 2741 y(When)41
-b(the)h(end)e(of)i(options)f(is)f(encoun)m(tered,)45
-b Fs(getopts)39 b Ft(exits)i(with)f(a)i(return)e(v)-5
-b(alue)630 2851 y(greater)32 b(than)e(zero.)41 b Fs(OPTIND)29
-b Ft(is)g(set)i(to)g(the)g(index)e(of)h(the)h(\014rst)f(non-option)f
-(argumen)m(t,)630 2960 y(and)h Fs(name)f Ft(is)g(set)i(to)g(`)p
-Fs(?)p Ft('.)630 3093 y Fs(getopts)c Ft(normally)h(parses)g(the)i(p)s
-(ositional)d(parameters,)j(but)e(if)h(more)g(argumen)m(ts)h(are)630
-3203 y(giv)m(en)g(in)f Fq(args)p Ft(,)i Fs(getopts)e
+b(shell)g(do)s(es)h(not)g(reset)g Fs(OPTIND)e Ft(automatically;)41
+b(it)36 b(m)m(ust)f(b)s(e)g(man)m(ually)630 2498 y(reset)i(b)s(et)m(w)m
+(een)g(m)m(ultiple)h(calls)f(to)g Fs(getopts)e Ft(within)h(the)h(same)g
+(shell)f(in)m(v)m(o)s(cation)j(if)e(a)630 2608 y(new)30
+b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)630
+2741 y(When)41 b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k
+Fs(getopts)39 b Ft(exits)j(with)f(a)h(return)e(v)-5 b(alue)630
+2851 y(greater)32 b(than)e(zero.)41 b Fs(OPTIND)29 b
+Ft(is)h(set)h(to)g(the)g(index)f(of)g(the)h(\014rst)f(non-option)g
+(argumen)m(t,)630 2960 y(and)g Fs(name)f Ft(is)h(set)h(to)g(`)p
+Fs(?)p Ft('.)630 3093 y Fs(getopts)c Ft(normally)j(parses)e(the)i(p)s
+(ositional)g(parameters,)g(but)e(if)i(more)f(argumen)m(ts)h(are)630
+3203 y(giv)m(en)h(in)f Fq(args)p Ft(,)h Fs(getopts)e
Ft(parses)h(those)h(instead.)630 3336 y Fs(getopts)h
-Ft(can)h(rep)s(ort)g(errors)g(in)g(t)m(w)m(o)i(w)m(a)m(ys.)51
-b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d Fq(optstring)41
-b Ft(is)33 b(a)630 3446 y(colon,)i Fq(silen)m(t)h Ft(error)d(rep)s
-(orting)g(is)h(used.)51 b(In)33 b(normal)h(op)s(eration)f(diagnostic)h
-(messages)630 3555 y(are)c(prin)m(ted)d(when)h(in)m(v)-5
-b(alid)27 b(options)i(or)g(missing)e(option)h(argumen)m(ts)i(are)f
-(encoun)m(tered.)630 3665 y(If)34 b(the)g(v)-5 b(ariable)33
-b Fs(OPTERR)f Ft(is)h(set)i(to)f(0,)i(no)e(error)g(messages)h(will)c(b)
-s(e)i(displa)m(y)m(ed,)h(ev)m(en)h(if)630 3774 y(the)c(\014rst)e(c)m
-(haracter)j(of)f Fs(optstring)d Ft(is)h(not)i(a)f(colon.)630
-3907 y(If)39 b(an)h(in)m(v)-5 b(alid)38 b(option)h(is)g(seen,)j
-Fs(getopts)c Ft(places)i(`)p Fs(?)p Ft(')g(in)m(to)g
-Fq(name)45 b Ft(and,)d(if)d(not)h(silen)m(t,)630 4017
-y(prin)m(ts)e(an)i(error)f(message)h(and)f(unsets)g Fs(OPTARG)p
-Ft(.)67 b(If)39 b Fs(getopts)f Ft(is)h(silen)m(t,)i(the)e(option)630
-4127 y(c)m(haracter)32 b(found)d(is)g(placed)h(in)f Fs(OPTARG)g
-Ft(and)h(no)g(diagnostic)g(message)h(is)f(prin)m(ted.)630
-4260 y(If)d(a)g(required)e(argumen)m(t)j(is)e(not)h(found,)g(and)f
-Fs(getopts)f Ft(is)h(not)i(silen)m(t,)f(a)g(question)f(mark)630
-4369 y(\(`)p Fs(?)p Ft('\))i(is)f(placed)g(in)f Fq(name)p
-Ft(,)i Fs(OPTARG)e Ft(is)g(unset,)i(and)f(a)g(diagnostic)g(message)i
-(is)d(prin)m(ted.)38 b(If)630 4479 y Fs(getopts)28 b
-Ft(is)g(silen)m(t,)h(then)g(a)h(colon)g(\(`)p Fs(:)p
-Ft('\))g(is)f(placed)g(in)f Fq(name)35 b Ft(and)29 b
-Fs(OPTARG)f Ft(is)g(set)i(to)h(the)630 4589 y(option)f(c)m(haracter)i
+Ft(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 Fq(optstring)42
+b Ft(is)34 b(a)630 3446 y(colon,)i Fq(silen)m(t)i Ft(error)33
+b(rep)s(orting)h(is)h(used.)51 b(In)33 b(normal)i(op)s(eration)f
+(diagnostic)i(messages)630 3555 y(are)30 b(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 3665 y(If)34 b(the)g(v)-5 b(ariable)35
+b Fs(OPTERR)d Ft(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 3774 y(the)c(\014rst)e(c)m
+(haracter)j(of)f Fs(optstring)d Ft(is)i(not)h(a)f(colon.)630
+3907 y(If)39 b(an)h(in)m(v)-5 b(alid)41 b(option)f(is)g(seen,)i
+Fs(getopts)c Ft(places)j(`)p Fs(?)p Ft(')f(in)m(to)h
+Fq(name)k Ft(and,)d(if)e(not)g(silen)m(t,)630 4017 y(prin)m(ts)f(an)h
+(error)f(message)h(and)f(unsets)g Fs(OPTARG)p Ft(.)67
+b(If)39 b Fs(getopts)f Ft(is)i(silen)m(t,)j(the)c(option)630
+4127 y(c)m(haracter)32 b(found)d(is)h(placed)h(in)f Fs(OPTARG)f
+Ft(and)h(no)g(diagnostic)i(message)f(is)g(prin)m(ted.)630
+4260 y(If)c(a)g(required)f(argumen)m(t)i(is)f(not)g(found,)g(and)f
+Fs(getopts)f Ft(is)i(not)h(silen)m(t,)h(a)e(question)g(mark)630
+4369 y(\(`)p Fs(?)p Ft('\))h(is)g(placed)g(in)f Fq(name)p
+Ft(,)h Fs(OPTARG)e Ft(is)h(unset,)h(and)f(a)g(diagnostic)i(message)g
+(is)e(prin)m(ted.)39 b(If)630 4479 y Fs(getopts)28 b
+Ft(is)h(silen)m(t,)i(then)e(a)h(colon)h(\(`)p Fs(:)p
+Ft('\))f(is)g(placed)g(in)f Fq(name)35 b Ft(and)29 b
+Fs(OPTARG)f Ft(is)h(set)h(to)h(the)630 4589 y(option)g(c)m(haracter)h
(found.)150 4745 y Fs(hash)870 4878 y(hash)47 b([-'r])f([-p)h
Fj(filename)11 b Fs(])45 b([-dt])h([)p Fj(name)11 b Fs(])630
-5011 y Ft(Remem)m(b)s(er)36 b(the)g(full)e(pathnames)i(of)g(commands)g
-(sp)s(eci\014ed)f(as)h Fq(name)41 b Ft(argumen)m(ts,)e(so)630
+5011 y Ft(Remem)m(b)s(er)36 b(the)g(full)g(pathnames)g(of)g(commands)g
+(sp)s(eci\014ed)g(as)g Fq(name)41 b Ft(argumen)m(ts,)e(so)630
5121 y(they)34 b(need)h(not)f(b)s(e)g(searc)m(hed)h(for)f(on)g
-(subsequen)m(t)f(in)m(v)m(o)s(cations.)53 b(The)34 b(commands)g(are)630
-5230 y(found)39 b(b)m(y)i(searc)m(hing)f(through)g(the)h(directories)e
-(listed)g(in)g Fs($PATH)p Ft(.)70 b(The)40 b(`)p Fs(-p)p
-Ft(')g(option)630 5340 y(inhibits)35 b(the)k(path)g(searc)m(h,)j(and)c
-Fq(\014lename)43 b Ft(is)38 b(used)g(as)i(the)f(lo)s(cation)f(of)h
-Fq(name)p Ft(.)66 b(The)p eop
+(subsequen)m(t)f(in)m(v)m(o)s(cations.)55 b(The)34 b(commands)g(are)630
+5230 y(found)39 b(b)m(y)i(searc)m(hing)g(through)f(the)h(directories)g
+(listed)g(in)f Fs($PATH)p Ft(.)70 b(The)40 b(`)p Fs(-p)p
+Ft(')g(option)630 5340 y(inhibits)e(the)h(path)g(searc)m(h,)j(and)c
+Fq(\014lename)44 b Ft(is)39 b(used)f(as)i(the)f(lo)s(cation)h(of)f
+Fq(name)p Ft(.)66 b(The)p eop end
%%Page: 36 42
-36 41 bop 150 -116 a Ft(36)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(`)p Fs(-r)p Ft(')d(option)f(causes)h(the)g(shell)f(to)h(forget)h
-(all)e(remem)m(b)s(ered)g(lo)s(cations.)39 b(The)28 b(`)p
-Fs(-d)p Ft(')f(option)630 408 y(causes)38 b(the)g(shell)e(to)i(forget)g
-(the)g(remem)m(b)s(ered)f(lo)s(cation)g(of)h(eac)m(h)h
-Fq(name)p Ft(.)62 b(If)37 b(the)h(`)p Fs(-t)p Ft(')630
-518 y(option)21 b(is)g(supplied,)f(the)i(full)d(pathname)j(to)g(whic)m
-(h)f(eac)m(h)h Fq(name)27 b Ft(corresp)s(onds)20 b(is)h(prin)m(ted.)630
-628 y(If)33 b(m)m(ultiple)e Fq(name)38 b Ft(argumen)m(ts)c(are)f
-(supplied)d(with)i(`)p Fs(-t)p Ft(')h(the)h Fq(name)k
-Ft(is)33 b(prin)m(ted)e(b)s(efore)630 737 y(the)i(hashed)f(full)e
-(pathname.)48 b(The)32 b(`)p Fs(-l)p Ft(')h(option)f(causes)h(output)f
-(to)i(b)s(e)e(displa)m(y)m(ed)f(in)h(a)630 847 y(format)g(that)g(ma)m
-(y)g(b)s(e)f(reused)g(as)g(input.)42 b(If)31 b(no)h(argumen)m(ts)g(are)
-f(giv)m(en,)i(or)e(if)f(only)h(`)p Fs(-l)p Ft(')630 956
-y(is)j(supplied,)e(information)h(ab)s(out)i(remem)m(b)s(ered)f
-(commands)g(is)g(prin)m(ted.)52 b(The)34 b(return)630
-1066 y(status)d(is)e(zero)i(unless)e(a)i Fq(name)k Ft(is)30
-b(not)g(found)f(or)i(an)f(in)m(v)-5 b(alid)28 b(option)i(is)f
-(supplied.)150 1217 y Fs(pwd)870 1347 y(pwd)47 b([-LP])630
-1477 y Ft(Prin)m(t)23 b(the)i(absolute)f(pathname)h(of)f(the)h(curren)m
-(t)f(w)m(orking)g(directory)-8 b(.)39 b(If)23 b(the)i(`)p
-Fs(-P)p Ft(')f(option)630 1587 y(is)35 b(supplied,)e(the)j(pathname)f
-(prin)m(ted)f(will)f(not)j(con)m(tain)g(sym)m(b)s(olic)e(links.)53
-b(If)35 b(the)h(`)p Fs(-L)p Ft(')630 1696 y(option)43
-b(is)g(supplied,)h(the)g(pathname)f(prin)m(ted)g(ma)m(y)h(con)m(tain)g
-(sym)m(b)s(olic)e(links.)78 b(The)630 1806 y(return)26
-b(status)h(is)g(zero)h(unless)d(an)i(error)g(is)f(encoun)m(tered)h
-(while)f(determining)f(the)i(name)630 1915 y(of)k(the)f(curren)m(t)g
-(directory)g(or)g(an)h(in)m(v)-5 b(alid)28 b(option)i(is)f(supplied.)
-150 2066 y Fs(readonly)870 2196 y(readonly)46 b([-apf])g([)p
-Fj(name)11 b Fs([=)p Fj(value)g Fs(]])43 b(...)630 2326
-y Ft(Mark)24 b(eac)m(h)h Fq(name)k Ft(as)24 b(readonly)-8
-b(.)38 b(The)24 b(v)-5 b(alues)23 b(of)h(these)g(names)g(ma)m(y)g(not)g
-(b)s(e)g(c)m(hanged)g(b)m(y)630 2436 y(subsequen)m(t)e(assignmen)m(t.)
-38 b(If)22 b(the)h(`)p Fs(-f)p Ft(')f(option)h(is)e(supplied,)g(eac)m
-(h)j Fq(name)k Ft(refers)22 b(to)i(a)f(shell)630 2545
-y(function.)51 b(The)34 b(`)p Fs(-a)p Ft(')g(option)g(means)h(eac)m(h)g
+TeXDict begin 36 41 bop 150 -116 a Ft(36)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(`)p Fs(-r)p Ft(')d(option)g(causes)g
+(the)g(shell)h(to)f(forget)h(all)g(remem)m(b)s(ered)e(lo)s(cations.)41
+b(The)28 b(`)p Fs(-d)p Ft(')f(option)630 408 y(causes)38
+b(the)g(shell)g(to)g(forget)g(the)g(remem)m(b)s(ered)f(lo)s(cation)i
+(of)f(eac)m(h)h Fq(name)p Ft(.)62 b(If)37 b(the)h(`)p
+Fs(-t)p Ft(')630 518 y(option)22 b(is)g(supplied,)g(the)g(full)f
+(pathname)h(to)g(whic)m(h)g(eac)m(h)g Fq(name)27 b Ft(corresp)s(onds)20
+b(is)i(prin)m(ted.)630 628 y(If)33 b(m)m(ultiple)h Fq(name)k
+Ft(argumen)m(ts)c(are)f(supplied)f(with)h(`)p Fs(-t)p
+Ft(')g(the)h Fq(name)k Ft(is)c(prin)m(ted)e(b)s(efore)630
+737 y(the)h(hashed)f(full)g(pathname.)48 b(The)32 b(`)p
+Fs(-l)p Ft(')h(option)g(causes)g(output)f(to)i(b)s(e)e(displa)m(y)m(ed)
+h(in)g(a)630 847 y(format)f(that)g(ma)m(y)g(b)s(e)f(reused)g(as)g
+(input.)43 b(If)31 b(no)h(argumen)m(ts)g(are)f(giv)m(en,)j(or)d(if)g
+(only)h(`)p Fs(-l)p Ft(')630 956 y(is)j(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 1066 y(status)d(is)f(zero)h(unless)f(a)h
+Fq(name)k Ft(is)c(not)f(found)f(or)i(an)f(in)m(v)-5 b(alid)31
+b(option)g(is)f(supplied.)150 1217 y Fs(pwd)870 1347
+y(pwd)47 b([-LP])630 1477 y Ft(Prin)m(t)24 b(the)h(absolute)g(pathname)
+g(of)f(the)h(curren)m(t)f(w)m(orking)h(directory)-8 b(.)40
+b(If)23 b(the)i(`)p Fs(-P)p Ft(')f(option)630 1587 y(is)36
+b(supplied,)f(the)h(pathname)f(prin)m(ted)g(will)h(not)g(con)m(tain)h
+(sym)m(b)s(olic)f(links.)55 b(If)35 b(the)h(`)p Fs(-L)p
+Ft(')630 1696 y(option)44 b(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 1806 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
+1915 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 2066 y Fs(readonly)870
+2196 y(readonly)46 b([-apf])g([)p Fj(name)11 b Fs([=)p
+Fj(value)g Fs(]])43 b(...)630 2326 y Ft(Mark)24 b(eac)m(h)h
+Fq(name)k Ft(as)24 b(readonly)-8 b(.)39 b(The)24 b(v)-5
+b(alues)24 b(of)g(these)g(names)g(ma)m(y)g(not)g(b)s(e)g(c)m(hanged)g
+(b)m(y)630 2436 y(subsequen)m(t)e(assignmen)m(t.)39 b(If)22
+b(the)h(`)p Fs(-f)p Ft(')f(option)i(is)e(supplied,)h(eac)m(h)h
+Fq(name)k Ft(refers)22 b(to)i(a)f(shell)630 2545 y(function.)52
+b(The)34 b(`)p Fs(-a)p Ft(')g(option)h(means)g(eac)m(h)g
Fq(name)40 b Ft(refers)33 b(to)j(an)e(arra)m(y)h(v)-5
-b(ariable.)51 b(If)34 b(no)630 2655 y Fq(name)d Ft(argumen)m(ts)26
-b(are)g(giv)m(en,)h(or)e(if)g(the)h(`)p Fs(-p)p Ft(')f(option)g(is)g
-(supplied,)e(a)j(list)f(of)g(all)g(readonly)630 2765
-y(names)37 b(is)f(prin)m(ted.)58 b(The)37 b(`)p Fs(-p)p
-Ft(')f(option)h(causes)g(output)g(to)g(b)s(e)f(displa)m(y)m(ed)g(in)f
-(a)j(format)630 2874 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.)
-37 b(If)24 b(a)h(v)-5 b(ariable)23 b(name)i(is)f(follo)m(w)m(ed)g(b)m
-(y)g(=)p Fq(v)-5 b(alue)p Ft(,)26 b(the)e(v)-5 b(alue)630
-2984 y(of)27 b(the)g(v)-5 b(ariable)25 b(is)h(set)h(to)g
-Fq(v)-5 b(alue)p Ft(.)39 b(The)26 b(return)g(status)h(is)e(zero)j
-(unless)d(an)h(in)m(v)-5 b(alid)24 b(option)630 3093
-y(is)29 b(supplied,)e(one)j(of)g(the)g Fq(name)35 b Ft(argumen)m(ts)30
-b(is)f(not)h(a)g(v)-5 b(alid)29 b(shell)f(v)-5 b(ariable)28
-b(or)i(function)630 3203 y(name,)h(or)f(the)h(`)p Fs(-f)p
-Ft(')f(option)g(is)f(supplied)e(with)i(a)i(name)f(that)h(is)f(not)g(a)h
-(shell)e(function.)150 3354 y Fs(return)870 3484 y(return)46
-b([)p Fj(n)11 b Fs(])630 3614 y Ft(Cause)30 b(a)g(shell)e(function)h
-(to)i(exit)e(with)g(the)h(return)f(v)-5 b(alue)30 b Fq(n)p
-Ft(.)40 b(If)29 b Fq(n)h Ft(is)f(not)h(supplied,)d(the)630
-3724 y(return)35 b(v)-5 b(alue)36 b(is)f(the)h(exit)g(status)g(of)h
-(the)f(last)g(command)g(executed)h(in)e(the)h(function.)630
-3833 y(This)20 b(ma)m(y)j(also)f(b)s(e)f(used)g(to)i(terminate)f
-(execution)g(of)g(a)h(script)e(b)s(eing)f(executed)j(with)e(the)630
-3943 y Fs(.)27 b Ft(\(or)g Fs(source)p Ft(\))f(builtin,)f(returning)g
-(either)h Fq(n)h Ft(or)g(the)g(exit)g(status)h(of)f(the)g(last)g
-(command)630 4052 y(executed)46 b(within)d(the)i(script)f(as)i(the)f
-(exit)g(status)h(of)f(the)h(script.)84 b(An)m(y)45 b(command)630
-4162 y(asso)s(ciated)29 b(with)e(the)h Fs(RETURN)f Ft(trap)h(is)f
-(executed)i(b)s(efore)f(execution)g(resumes)g(after)h(the)630
-4271 y(function)37 b(or)g(script.)62 b(The)38 b(return)e(status)i(is)f
-(non-zero)i(if)d Fs(return)h Ft(is)f(used)h(outside)h(a)630
-4381 y(function)29 b(and)h(not)g(during)f(the)h(execution)h(of)f(a)h
-(script)e(b)m(y)i Fs(.)f Ft(or)g Fs(source)p Ft(.)150
+b(ariable.)53 b(If)34 b(no)630 2655 y Fq(name)d Ft(argumen)m(ts)26
+b(are)g(giv)m(en,)i(or)d(if)h(the)g(`)p Fs(-p)p Ft(')f(option)h(is)g
+(supplied,)f(a)h(list)h(of)e(all)i(readonly)630 2765
+y(names)37 b(is)g(prin)m(ted.)59 b(The)37 b(`)p Fs(-p)p
+Ft(')f(option)i(causes)f(output)g(to)g(b)s(e)f(displa)m(y)m(ed)i(in)e
+(a)i(format)630 2874 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 Fq(v)-5 b(alue)p Ft(,)27 b(the)d(v)-5 b(alue)630
+2984 y(of)27 b(the)g(v)-5 b(ariable)27 b(is)g(set)g(to)g
+Fq(v)-5 b(alue)p Ft(.)40 b(The)26 b(return)g(status)h(is)f(zero)i
+(unless)e(an)g(in)m(v)-5 b(alid)27 b(option)630 3093
+y(is)j(supplied,)f(one)h(of)g(the)g Fq(name)35 b Ft(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 3203 y(name,)h(or)f(the)h(`)p Fs(-f)p
+Ft(')f(option)h(is)f(supplied)f(with)h(a)h(name)f(that)h(is)g(not)f(a)h
+(shell)g(function.)150 3354 y Fs(return)870 3484 y(return)46
+b([)p Fj(n)11 b Fs(])630 3614 y Ft(Cause)30 b(a)g(shell)g(function)g
+(to)h(exit)f(with)g(the)g(return)f(v)-5 b(alue)31 b Fq(n)p
+Ft(.)40 b(If)29 b Fq(n)h Ft(is)g(not)g(supplied,)f(the)630
+3724 y(return)35 b(v)-5 b(alue)37 b(is)f(the)g(exit)h(status)f(of)h
+(the)f(last)h(command)f(executed)h(in)f(the)g(function.)630
+3833 y(This)21 b(ma)m(y)i(also)g(b)s(e)e(used)g(to)i(terminate)g
+(execution)g(of)f(a)h(script)f(b)s(eing)f(executed)i(with)f(the)630
+3943 y Fs(.)27 b Ft(\(or)g Fs(source)p Ft(\))f(builtin,)i(returning)e
+(either)h Fq(n)g Ft(or)g(the)g(exit)h(status)g(of)f(the)g(last)h
+(command)630 4052 y(executed)46 b(within)f(the)g(script)g(as)h(the)f
+(exit)h(status)g(of)f(the)h(script.)85 b(An)m(y)45 b(command)630
+4162 y(asso)s(ciated)30 b(with)e(the)g Fs(RETURN)f Ft(trap)h(is)g
+(executed)h(b)s(efore)f(execution)h(resumes)f(after)h(the)630
+4271 y(function)38 b(or)f(script.)63 b(The)38 b(return)e(status)i(is)g
+(non-zero)h(if)e Fs(return)g Ft(is)g(used)g(outside)i(a)630
+4381 y(function)30 b(and)g(not)g(during)g(the)g(execution)i(of)e(a)h
+(script)f(b)m(y)h Fs(.)f Ft(or)g Fs(source)p Ft(.)150
4532 y Fs(shift)870 4662 y(shift)46 b([)p Fj(n)11 b Fs(])630
-4792 y Ft(Shift)40 b(the)h(p)s(ositional)e(parameters)j(to)g(the)f
-(left)g(b)m(y)h Fq(n)p Ft(.)73 b(The)40 b(p)s(ositional)g(parameters)
+4792 y Ft(Shift)41 b(the)g(p)s(ositional)h(parameters)g(to)g(the)f
+(left)h(b)m(y)g Fq(n)p Ft(.)73 b(The)40 b(p)s(ositional)j(parameters)
630 4902 y(from)27 b Fq(n)p Fs(+)p Ft(1)33 b(.)22 b(.)g(.)39
b Fs($#)27 b Ft(are)g(renamed)g(to)i Fs($1)j Ft(.)22
b(.)h(.)38 b Fs($#)p Ft(-)p Fq(n)p Fs(+)p Ft(1.)h(P)m(arameters)29
b(represen)m(ted)e(b)m(y)h(the)630 5011 y(n)m(um)m(b)s(ers)34
b Fs($#)h Ft(to)h Fq(n)p Fs(+)p Ft(1)f(are)g(unset.)55
-b Fq(n)35 b Ft(m)m(ust)g(b)s(e)g(a)h(non-negativ)m(e)g(n)m(um)m(b)s(er)
-e(less)h(than)g(or)630 5121 y(equal)d(to)i Fs($#)p Ft(.)47
-b(If)33 b Fq(n)f Ft(is)g(zero)h(or)g(greater)h(than)f
-Fs($#)p Ft(,)g(the)g(p)s(ositional)d(parameters)j(are)h(not)630
-5230 y(c)m(hanged.)48 b(If)32 b Fq(n)g Ft(is)g(not)g(supplied,)f(it)h
-(is)f(assumed)h(to)h(b)s(e)f(1.)48 b(The)32 b(return)g(status)h(is)e
-(zero)630 5340 y(unless)e Fq(n)g Ft(is)h(greater)h(than)g
-Fs($#)e Ft(or)i(less)e(than)i(zero,)g(non-zero)g(otherwise.)p
-eop
+b Fq(n)35 b Ft(m)m(ust)g(b)s(e)g(a)h(non-negativ)m(e)h(n)m(um)m(b)s(er)
+d(less)i(than)f(or)630 5121 y(equal)e(to)h Fs($#)p Ft(.)47
+b(If)33 b Fq(n)f Ft(is)h(zero)g(or)g(greater)h(than)f
+Fs($#)p Ft(,)g(the)g(p)s(ositional)g(parameters)g(are)h(not)630
+5230 y(c)m(hanged.)48 b(If)32 b Fq(n)g Ft(is)h(not)f(supplied,)h(it)g
+(is)f(assumed)g(to)h(b)s(e)f(1.)48 b(The)32 b(return)g(status)h(is)f
+(zero)630 5340 y(unless)e Fq(n)f Ft(is)i(greater)g(than)g
+Fs($#)e Ft(or)i(less)f(than)h(zero,)g(non-zero)g(otherwise.)p
+eop end
%%Page: 37 43
-37 42 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(37)150 299 y Fs(test)150
-408 y([)432 b Ft(Ev)-5 b(aluate)31 b(a)g(conditional)e(expression)g
+TeXDict begin 37 42 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(37)150 299 y Fs(test)150
+408 y([)432 b Ft(Ev)-5 b(aluate)32 b(a)f(conditional)h(expression)e
Fq(expr)p Ft(.)41 b(Eac)m(h)31 b(op)s(erator)g(and)f(op)s(erand)g(m)m
(ust)h(b)s(e)f(a)630 518 y(separate)d(argumen)m(t.)40
-b(Expressions)24 b(are)j(comp)s(osed)e(of)i(the)f(primaries)e(describ)s
-(ed)g(b)s(elo)m(w)630 628 y(in)29 b(Section)h(6.4)i([Bash)e
-(Conditional)e(Expressions],)h(page)j(69.)630 762 y(When)e(the)h
-Fs([)f Ft(form)g(is)f(used,)h(the)g(last)h(argumen)m(t)f(to)i(the)e
+b(Expressions)25 b(are)i(comp)s(osed)e(of)i(the)f(primaries)g(describ)s
+(ed)f(b)s(elo)m(w)630 628 y(in)30 b(Section)h(6.4)h([Bash)e
+(Conditional)h(Expressions],)f(page)i(69.)630 762 y(When)e(the)h
+Fs([)f Ft(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 Fs(])p Ft(.)630 897
-y(Expressions)22 b(ma)m(y)i(b)s(e)e(com)m(bined)h(using)f(the)i(follo)m
-(wing)e(op)s(erators,)j(listed)d(in)g(decreasing)630
+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
1006 y(order)30 b(of)g(precedence.)630 1166 y Fs(!)g
-Fj(expr)210 b Ft(T)-8 b(rue)30 b(if)f Fq(expr)37 b Ft(is)29
-b(false.)630 1325 y Fs(\()h Fj(expr)40 b Fs(\))122 b
-Ft(Returns)23 b(the)i(v)-5 b(alue)24 b(of)g Fq(expr)p
-Ft(.)38 b(This)23 b(ma)m(y)i(b)s(e)e(used)h(to)h(o)m(v)m(erride)f(the)h
+Fj(expr)210 b Ft(T)-8 b(rue)30 b(if)g Fq(expr)37 b Ft(is)30
+b(false.)630 1325 y Fs(\()g Fj(expr)40 b Fs(\))122 b
+Ft(Returns)23 b(the)i(v)-5 b(alue)25 b(of)f Fq(expr)p
+Ft(.)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 1435 y(precedence)31 b(of)f(op)s(erators.)630
1594 y Fj(expr1)39 b Fs(-a)30 b Fj(expr2)1110 1704 y
-Ft(T)-8 b(rue)30 b(if)f(b)s(oth)h Fq(expr1)37 b Ft(and)30
+Ft(T)-8 b(rue)30 b(if)g(b)s(oth)g Fq(expr1)37 b Ft(and)30
b Fq(expr2)38 b Ft(are)30 b(true.)630 1863 y Fj(expr1)39
-b Fs(-o)30 b Fj(expr2)1110 1973 y Ft(T)-8 b(rue)30 b(if)f(either)h
-Fq(expr1)38 b Ft(or)30 b Fq(expr2)37 b Ft(is)30 b(true.)630
-2132 y(The)37 b Fs(test)f Ft(and)g Fs([)h Ft(builtins)d(ev)-5
-b(aluate)38 b(conditional)d(expressions)h(using)g(a)h(set)h(of)f(rules)
+b Fs(-o)30 b Fj(expr2)1110 1973 y Ft(T)-8 b(rue)30 b(if)g(either)h
+Fq(expr1)38 b Ft(or)30 b Fq(expr2)37 b Ft(is)31 b(true.)630
+2132 y(The)37 b Fs(test)f Ft(and)g Fs([)h Ft(builtins)g(ev)-5
+b(aluate)39 b(conditional)f(expressions)f(using)g(a)g(set)h(of)f(rules)
630 2242 y(based)30 b(on)g(the)h(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.)
-630 2401 y(0)h(argumen)m(ts)1110 2511 y(The)f(expression)f(is)g(false.)
-630 2670 y(1)i(argumen)m(t)1110 2780 y(The)f(expression)f(is)g(true)i
-(if)e(and)h(only)f(if)h(the)g(argumen)m(t)h(is)e(not)i(n)m(ull.)630
+630 2401 y(0)h(argumen)m(ts)1110 2511 y(The)f(expression)g(is)g(false.)
+630 2670 y(1)h(argumen)m(t)1110 2780 y(The)f(expression)g(is)g(true)h
+(if)f(and)g(only)g(if)h(the)f(argumen)m(t)h(is)f(not)h(n)m(ull.)630
2939 y(2)g(argumen)m(ts)1110 3049 y(If)f(the)h(\014rst)f(argumen)m(t)h
-(is)f(`)p Fs(!)p Ft(',)h(the)g(expression)f(is)g(true)g(if)g(and)g
-(only)g(if)g(the)1110 3158 y(second)k(argumen)m(t)f(is)g(n)m(ull.)48
-b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)f(one)h(of)f(the)h(unary)
-1110 3268 y(conditional)39 b(op)s(erators)i(\(see)g(Section)g(6.4)g
-([Bash)g(Conditional)d(Expres-)1110 3377 y(sions],)33
-b(page)g(69\),)i(the)e(expression)e(is)h(true)h(if)f(the)h(unary)e
-(test)j(is)e(true.)47 b(If)1110 3487 y(the)33 b(\014rst)g(argumen)m(t)h
-(is)e(not)h(a)h(v)-5 b(alid)32 b(unary)g(op)s(erator,)i(the)g
-(expression)e(is)1110 3597 y(false.)630 3756 y(3)f(argumen)m(ts)1110
-3866 y(If)k(the)g(second)g(argumen)m(t)g(is)f(one)i(of)f(the)g(binary)e
-(conditional)h(op)s(erators)1110 3975 y(\(see)23 b(Section)f(6.4)g
-([Bash)h(Conditional)c(Expressions],)j(page)h(69\),)i(the)d(result)1110
-4085 y(of)44 b(the)h(expression)e(is)g(the)h(result)f(of)i(the)f
-(binary)f(test)i(using)d(the)j(\014rst)1110 4194 y(and)33
-b(third)f(argumen)m(ts)i(as)g(op)s(erands.)50 b(If)33
-b(the)h(\014rst)g(argumen)m(t)g(is)f(`)p Fs(!)p Ft(',)i(the)1110
-4304 y(v)-5 b(alue)24 b(is)g(the)h(negation)g(of)g(the)g(t)m(w)m
-(o-argumen)m(t)i(test)f(using)d(the)i(second)g(and)1110
-4413 y(third)31 b(argumen)m(ts.)47 b(If)33 b(the)f(\014rst)g(argumen)m
-(t)h(is)f(exactly)h(`)p Fs(\()p Ft(')g(and)f(the)h(third)1110
-4523 y(argumen)m(t)h(is)f(exactly)h(`)p Fs(\))p Ft(',)h(the)f(result)e
-(is)h(the)h(one-argumen)m(t)g(test)h(of)f(the)1110 4633
-y(second)d(argumen)m(t.)45 b(Otherwise,)30 b(the)i(expression)e(is)g
-(false.)43 b(The)31 b(`)p Fs(-a)p Ft(')h(and)1110 4742
-y(`)p Fs(-o)p Ft(')e(op)s(erators)h(are)g(considered)e(binary)f(op)s
-(erators)j(in)e(this)g(case.)630 4902 y(4)i(argumen)m(ts)1110
-5011 y(If)h(the)i(\014rst)e(argumen)m(t)h(is)f(`)p Fs(!)p
-Ft(',)i(the)f(result)f(is)g(the)h(negation)g(of)g(the)g(three-)1110
-5121 y(argumen)m(t)h(expression)e(comp)s(osed)i(of)f(the)h(remaining)e
-(argumen)m(ts.)50 b(Oth-)1110 5230 y(erwise,)33 b(the)g(expression)f
-(is)g(parsed)h(and)f(ev)-5 b(aluated)33 b(according)h(to)f(prece-)1110
-5340 y(dence)e(using)d(the)j(rules)e(listed)g(ab)s(o)m(v)m(e.)p
-eop
+(is)g(`)p Fs(!)p Ft(',)g(the)g(expression)g(is)g(true)f(if)h(and)f
+(only)h(if)g(the)1110 3158 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 3268 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f
+([Bash)g(Conditional)g(Expres-)1110 3377 y(sions],)34
+b(page)f(69\),)i(the)e(expression)f(is)h(true)g(if)g(the)g(unary)e
+(test)j(is)f(true.)47 b(If)1110 3487 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 3597 y(false.)630 3756 y(3)e(argumen)m(ts)1110
+3866 y(If)k(the)g(second)g(argumen)m(t)g(is)g(one)h(of)f(the)g(binary)f
+(conditional)j(op)s(erators)1110 3975 y(\(see)23 b(Section)g(6.4)f
+([Bash)h(Conditional)f(Expressions],)h(page)g(69\),)i(the)d(result)1110
+4085 y(of)44 b(the)h(expression)f(is)g(the)g(result)g(of)h(the)f
+(binary)g(test)h(using)e(the)i(\014rst)1110 4194 y(and)33
+b(third)g(argumen)m(ts)h(as)g(op)s(erands.)50 b(If)33
+b(the)h(\014rst)g(argumen)m(t)g(is)g(`)p Fs(!)p Ft(',)h(the)1110
+4304 y(v)-5 b(alue)25 b(is)g(the)g(negation)h(of)f(the)g(t)m(w)m
+(o-argumen)m(t)i(test)f(using)e(the)h(second)g(and)1110
+4413 y(third)32 b(argumen)m(ts.)47 b(If)33 b(the)f(\014rst)g(argumen)m
+(t)h(is)g(exactly)h(`)p Fs(\()p Ft(')f(and)f(the)h(third)1110
+4523 y(argumen)m(t)h(is)g(exactly)h(`)p Fs(\))p Ft(',)g(the)f(result)f
+(is)h(the)g(one-argumen)m(t)g(test)h(of)f(the)1110 4633
+y(second)d(argumen)m(t.)45 b(Otherwise,)31 b(the)h(expression)f(is)g
+(false.)44 b(The)31 b(`)p Fs(-a)p Ft(')h(and)1110 4742
+y(`)p Fs(-o)p Ft(')e(op)s(erators)h(are)g(considered)f(binary)f(op)s
+(erators)i(in)f(this)g(case.)630 4902 y(4)h(argumen)m(ts)1110
+5011 y(If)h(the)i(\014rst)e(argumen)m(t)h(is)g(`)p Fs(!)p
+Ft(',)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: 38 44
-38 43 bop 150 -116 a Ft(38)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(5)g(or)f(more)h(argumen)m(ts)1110 408 y(The)43
-b(expression)e(is)i(parsed)f(and)g(ev)-5 b(aluated)44
-b(according)f(to)g(precedence)1110 518 y(using)29 b(the)h(rules)f
-(listed)g(ab)s(o)m(v)m(e.)150 675 y Fs(times)870 808
-y(times)630 941 y Ft(Prin)m(t)36 b(out)i(the)g(user)e(and)h(system)g
-(times)g(used)g(b)m(y)g(the)h(shell)d(and)i(its)g(c)m(hildren.)59
-b(The)630 1050 y(return)29 b(status)i(is)e(zero.)150
+TeXDict begin 38 43 bop 150 -116 a Ft(38)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(5)g(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.)150 675 y Fs(times)870
+808 y(times)630 941 y Ft(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 1050 y(return)29 b(status)i(is)f(zero.)150
1207 y Fs(trap)870 1340 y(trap)47 b([-lp])f([)p Fj(arg)11
b Fs(])46 b([)p Fj(sigspec)56 b Fs(...)o(])630 1473 y
-Ft(The)43 b(commands)f(in)g Fq(arg)51 b Ft(are)44 b(to)g(b)s(e)e(read)h
-(and)g(executed)h(when)e(the)h(shell)e(receiv)m(es)630
-1583 y(signal)34 b Fq(sigsp)s(ec)p Ft(.)56 b(If)35 b
-Fq(arg)44 b Ft(is)35 b(absen)m(t)h(\(and)f(there)h(is)f(a)g(single)g
-Fq(sigsp)s(ec)6 b Ft(\))34 b(or)i(equal)f(to)i(`)p Fs(-)p
-Ft(',)630 1692 y(eac)m(h)28 b(sp)s(eci\014ed)d(signal's)g(disp)s
-(osition)e(is)j(reset)h(to)g(the)g(v)-5 b(alue)26 b(it)g(had)g(when)f
-(the)i(shell)e(w)m(as)630 1802 y(started.)63 b(If)37
-b Fq(arg)46 b Ft(is)36 b(the)i(n)m(ull)e(string,)i(then)f(the)h(signal)
-f(sp)s(eci\014ed)e(b)m(y)j(eac)m(h)h Fq(sigsp)s(ec)j
-Ft(is)630 1911 y(ignored)35 b(b)m(y)h(the)g(shell)e(and)i(commands)f
-(it)h(in)m(v)m(ok)m(es.)58 b(If)35 b Fq(arg)45 b Ft(is)35
-b(not)h(presen)m(t)g(and)f(`)p Fs(-p)p Ft(')630 2021
-y(has)e(b)s(een)g(supplied,)d(the)k(shell)d(displa)m(ys)h(the)h(trap)g
-(commands)g(asso)s(ciated)h(with)e(eac)m(h)630 2131 y
-Fq(sigsp)s(ec)p Ft(.)39 b(If)29 b(no)g(argumen)m(ts)g(are)g(supplied,)d
-(or)j(only)f(`)p Fs(-p)p Ft(')h(is)f(giv)m(en,)h Fs(trap)f
-Ft(prin)m(ts)f(the)i(list)630 2240 y(of)f(commands)f(asso)s(ciated)h
-(with)f(eac)m(h)i(signal)d(n)m(um)m(b)s(er)g(in)h(a)h(form)f(that)h(ma)
-m(y)h(b)s(e)e(reused)630 2350 y(as)c(shell)e(input.)36
-b(The)23 b(`)p Fs(-l)p Ft(')f(option)h(causes)g(the)g(shell)e(to)i
-(prin)m(t)f(a)h(list)e(of)i(signal)f(names)h(and)630
-2459 y(their)32 b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47
-b(Eac)m(h)34 b Fq(sigsp)s(ec)k Ft(is)32 b(either)g(a)i(signal)e(name)h
-(or)g(a)g(signal)630 2569 y(n)m(um)m(b)s(er.)46 b(Signal)31
-b(names)i(are)g(case)h(insensitiv)m(e)c(and)j(the)f Fs(SIG)g
-Ft(pre\014x)g(is)g(optional.)46 b(If)33 b(a)630 2679
-y Fq(sigsp)s(ec)g Ft(is)27 b Fs(0)g Ft(or)h Fs(EXIT)p
-Ft(,)f Fq(arg)37 b Ft(is)26 b(executed)j(when)e(the)h(shell)e(exits.)40
-b(If)27 b(a)i Fq(sigsp)s(ec)j Ft(is)27 b Fs(DEBUG)p Ft(,)630
-2788 y(the)40 b(command)g Fq(arg)48 b Ft(is)39 b(executed)i(b)s(efore)f
-(ev)m(ery)g(simple)e(command,)43 b Fs(for)c Ft(command,)630
+Ft(The)43 b(commands)f(in)h Fq(arg)51 b Ft(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
+1583 y(signal)36 b Fq(sigsp)s(ec)p Ft(.)57 b(If)35 b
+Fq(arg)44 b Ft(is)36 b(absen)m(t)g(\(and)f(there)h(is)g(a)f(single)i
+Fq(sigsp)s(ec)6 b Ft(\))35 b(or)h(equal)g(to)h(`)p Fs(-)p
+Ft(',)630 1692 y(eac)m(h)28 b(sp)s(eci\014ed)e(signal's)h(disp)s
+(osition)f(is)h(reset)g(to)g(the)g(v)-5 b(alue)27 b(it)g(had)f(when)f
+(the)i(shell)g(w)m(as)630 1802 y(started.)63 b(If)37
+b Fq(arg)46 b Ft(is)37 b(the)h(n)m(ull)g(string,)h(then)e(the)h(signal)
+h(sp)s(eci\014ed)d(b)m(y)i(eac)m(h)h Fq(sigsp)s(ec)k
+Ft(is)630 1911 y(ignored)36 b(b)m(y)g(the)g(shell)g(and)g(commands)f
+(it)i(in)m(v)m(ok)m(es.)59 b(If)35 b Fq(arg)45 b Ft(is)36
+b(not)g(presen)m(t)g(and)f(`)p Fs(-p)p Ft(')630 2021
+y(has)e(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 2131 y
+Fq(sigsp)s(ec)p Ft(.)40 b(If)29 b(no)g(argumen)m(ts)g(are)g(supplied,)f
+(or)h(only)g(`)p Fs(-p)p Ft(')g(is)g(giv)m(en,)h Fs(trap)e
+Ft(prin)m(ts)g(the)h(list)630 2240 y(of)f(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 2350 y(as)c(shell)g(input.)37
+b(The)23 b(`)p Fs(-l)p Ft(')f(option)i(causes)f(the)g(shell)g(to)g
+(prin)m(t)g(a)g(list)g(of)g(signal)h(names)f(and)630
+2459 y(their)33 b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47
+b(Eac)m(h)34 b Fq(sigsp)s(ec)39 b Ft(is)33 b(either)g(a)h(signal)g
+(name)f(or)g(a)g(signal)630 2569 y(n)m(um)m(b)s(er.)46
+b(Signal)33 b(names)g(are)g(case)h(insensitiv)m(e)f(and)g(the)f
+Fs(SIG)g Ft(pre\014x)g(is)h(optional.)48 b(If)33 b(a)630
+2679 y Fq(sigsp)s(ec)h Ft(is)28 b Fs(0)f Ft(or)h Fs(EXIT)p
+Ft(,)f Fq(arg)37 b Ft(is)27 b(executed)i(when)e(the)h(shell)g(exits.)41
+b(If)27 b(a)i Fq(sigsp)s(ec)k Ft(is)28 b Fs(DEBUG)p Ft(,)630
+2788 y(the)40 b(command)g Fq(arg)48 b Ft(is)40 b(executed)h(b)s(efore)f
+(ev)m(ery)g(simple)g(command,)j Fs(for)c Ft(command,)630
2898 y Fs(case)28 b Ft(command,)i Fs(select)d Ft(command,)j(ev)m(ery)g
-(arithmetic)f Fs(for)f Ft(command,)i(and)e(b)s(efore)630
-3007 y(the)k(\014rst)e(command)h(executes)i(in)d(a)i(shell)d(function.)
-43 b(Refer)31 b(to)h(the)g(description)d(of)j(the)630
-3117 y Fs(extglob)d Ft(option)i(to)h(the)g Fs(shopt)e
-Ft(builtin)e(\(see)k(Section)g(4.2)g([Bash)g(Builtins],)e(page)i(39\))
-630 3226 y(for)c(details)g(of)g(its)g(e\013ect)i(on)f(the)g
-Fs(DEBUG)e Ft(trap.)40 b(If)28 b(a)g Fq(sigsp)s(ec)34
-b Ft(is)27 b Fs(ERR)p Ft(,)i(the)f(command)g Fq(arg)630
-3336 y Ft(is)i(executed)h(whenev)m(er)g(a)g(simple)d(command)j(has)f(a)
-h(non-zero)g(exit)g(status,)g(sub)5 b(ject)30 b(to)630
-3446 y(the)k(follo)m(wing)f(conditions.)51 b(The)34 b
-Fs(ERR)f Ft(trap)h(is)f(not)i(executed)g(if)e(the)h(failed)f(command)
-630 3555 y(is)27 b(part)h(of)h(the)f(command)g(list)f(immediately)g
-(follo)m(wing)f(an)i Fs(until)f Ft(or)h Fs(while)f Ft(k)m(eyw)m(ord,)
-630 3665 y(part)h(of)h(the)g(test)g(in)e(an)i Fs(if)f
+(arithmetic)h Fs(for)d Ft(command,)i(and)e(b)s(efore)630
+3007 y(the)k(\014rst)e(command)h(executes)i(in)e(a)h(shell)f(function.)
+44 b(Refer)31 b(to)h(the)g(description)f(of)h(the)630
+3117 y Fs(extglob)d Ft(option)j(to)g(the)g Fs(shopt)e
+Ft(builtin)h(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)h(page)f(39\))
+630 3226 y(for)c(details)i(of)e(its)h(e\013ect)h(on)f(the)g
+Fs(DEBUG)e Ft(trap.)40 b(If)28 b(a)g Fq(sigsp)s(ec)35
+b Ft(is)28 b Fs(ERR)p Ft(,)h(the)f(command)g Fq(arg)630
+3336 y Ft(is)j(executed)g(whenev)m(er)g(a)g(simple)f(command)h(has)f(a)
+h(non-zero)g(exit)h(status,)f(sub)5 b(ject)30 b(to)630
+3446 y(the)k(follo)m(wing)i(conditions.)53 b(The)34 b
+Fs(ERR)f Ft(trap)h(is)g(not)h(executed)g(if)f(the)g(failed)h(command)
+630 3555 y(is)28 b(part)g(of)h(the)f(command)g(list)h(immediately)h
+(follo)m(wing)f(an)f Fs(until)f Ft(or)h Fs(while)f Ft(k)m(eyw)m(ord,)
+630 3665 y(part)h(of)h(the)g(test)g(in)f(an)h Fs(if)f
Ft(statemen)m(t,)j(part)d(of)h(a)f Fs(&&)g Ft(or)h Fs(||)f
-Ft(list,)f(or)i(if)e(the)i(command's)630 3774 y(return)i(status)i(is)e
+Ft(list,)h(or)g(if)f(the)h(command's)630 3774 y(return)i(status)i(is)f
(b)s(eing)f(in)m(v)m(erted)i(using)f Fs(!)p Ft(.)46 b(These)32
-b(are)g(the)h(same)f(conditions)f(ob)s(ey)m(ed)630 3884
-y(b)m(y)k(the)g Fs(errexit)e Ft(option.)54 b(If)34 b(a)i
-Fq(sigsp)s(ec)j Ft(is)34 b Fs(RETURN)p Ft(,)h(the)g(command)g
-Fq(arg)43 b Ft(is)34 b(executed)630 3994 y(eac)m(h)k(time)e(a)g(shell)f
-(function)g(or)h(a)h(script)e(executed)j(with)d(the)h
-Fs(.)g Ft(or)h Fs(source)e Ft(builtins)630 4103 y(\014nishes)28
-b(executing.)630 4236 y(Signals)35 b(ignored)g(up)s(on)g(en)m(try)i(to)
-g(the)f(shell)f(cannot)i(b)s(e)f(trapp)s(ed)f(or)h(reset.)59
-b(T)-8 b(rapp)s(ed)630 4346 y(signals)29 b(are)i(reset)g(to)g(their)e
-(original)g(v)-5 b(alues)29 b(in)g(a)i(c)m(hild)e(pro)s(cess)h(when)f
-(it)h(is)g(created.)630 4479 y(The)g(return)f(status)i(is)e(zero)i
-(unless)e(a)i Fq(sigsp)s(ec)k Ft(do)s(es)30 b(not)h(sp)s(ecify)e(a)h(v)
--5 b(alid)29 b(signal.)150 4635 y Fs(umask)870 4769 y(umask)46
-b([-p])h([-S])g([)p Fj(mode)11 b Fs(])630 4902 y Ft(Set)30
-b(the)f(shell)f(pro)s(cess's)h(\014le)g(creation)g(mask)h(to)g
-Fq(mo)s(de)p Ft(.)40 b(If)29 b Fq(mo)s(de)34 b Ft(b)s(egins)28
-b(with)g(a)i(digit,)630 5011 y(it)d(is)f(in)m(terpreted)g(as)h(an)g(o)s
-(ctal)h(n)m(um)m(b)s(er;)f(if)f(not,)i(it)f(is)f(in)m(terpreted)g(as)h
-(a)h(sym)m(b)s(olic)d(mo)s(de)630 5121 y(mask)k(similar)d(to)j(that)h
-(accepted)g(b)m(y)f(the)g Fs(chmod)e Ft(command.)40 b(If)28
-b Fq(mo)s(de)34 b Ft(is)27 b(omitted,)j(the)630 5230
-y(curren)m(t)36 b(v)-5 b(alue)35 b(of)h(the)h(mask)f(is)f(prin)m(ted.)
-56 b(If)35 b(the)h(`)p Fs(-S)p Ft(')g(option)g(is)f(supplied)e(without)
-i(a)630 5340 y Fq(mo)s(de)40 b Ft(argumen)m(t,)d(the)e(mask)g(is)f
-(prin)m(ted)g(in)g(a)i(sym)m(b)s(olic)d(format.)55 b(If)35
-b(the)g(`)p Fs(-p)p Ft(')g(option)p eop
+b(are)g(the)h(same)f(conditions)h(ob)s(ey)m(ed)630 3884
+y(b)m(y)i(the)g Fs(errexit)e Ft(option.)55 b(If)34 b(a)i
+Fq(sigsp)s(ec)k Ft(is)35 b Fs(RETURN)p Ft(,)g(the)g(command)g
+Fq(arg)43 b Ft(is)35 b(executed)630 3994 y(eac)m(h)j(time)f(a)f(shell)h
+(function)f(or)g(a)h(script)f(executed)i(with)e(the)g
+Fs(.)g Ft(or)h Fs(source)e Ft(builtins)630 4103 y(\014nishes)29
+b(executing.)630 4236 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 4346 y(signals)31 b(are)g(reset)g(to)g(their)f
+(original)i(v)-5 b(alues)30 b(in)g(a)h(c)m(hild)g(pro)s(cess)f(when)f
+(it)i(is)g(created.)630 4479 y(The)f(return)f(status)i(is)f(zero)h
+(unless)f(a)h Fq(sigsp)s(ec)36 b Ft(do)s(es)30 b(not)h(sp)s(ecify)f(a)g
+(v)-5 b(alid)31 b(signal.)150 4635 y Fs(umask)870 4769
+y(umask)46 b([-p])h([-S])g([)p Fj(mode)11 b Fs(])630
+4902 y Ft(Set)30 b(the)f(shell)h(pro)s(cess's)f(\014le)h(creation)g
+(mask)g(to)g Fq(mo)s(de)p Ft(.)40 b(If)29 b Fq(mo)s(de)34
+b Ft(b)s(egins)29 b(with)g(a)h(digit,)630 5011 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
+5121 y(mask)i(similar)g(to)g(that)h(accepted)g(b)m(y)f(the)g
+Fs(chmod)e Ft(command.)40 b(If)28 b Fq(mo)s(de)34 b Ft(is)28
+b(omitted,)j(the)630 5230 y(curren)m(t)36 b(v)-5 b(alue)36
+b(of)g(the)h(mask)f(is)g(prin)m(ted.)57 b(If)35 b(the)h(`)p
+Fs(-S)p Ft(')g(option)h(is)f(supplied)f(without)h(a)630
+5340 y Fq(mo)s(de)k Ft(argumen)m(t,)d(the)e(mask)g(is)g(prin)m(ted)g
+(in)g(a)h(sym)m(b)s(olic)f(format.)55 b(If)35 b(the)g(`)p
+Fs(-p)p Ft(')g(option)p eop end
%%Page: 39 45
-39 44 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(39)630 299 y(is)33 b(supplied,)e(and)i
-Fq(mo)s(de)38 b Ft(is)32 b(omitted,)j(the)f(output)f(is)f(in)h(a)h
-(form)f(that)h(ma)m(y)g(b)s(e)f(reused)630 408 y(as)e(input.)40
-b(The)31 b(return)f(status)h(is)f(zero)i(if)d(the)i(mo)s(de)g(is)f
-(successfully)f(c)m(hanged)i(or)g(if)f(no)630 518 y Fq(mo)s(de)35
-b Ft(argumen)m(t)c(is)e(supplied,)f(and)h(non-zero)i(otherwise.)630
-653 y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)f(in)m(terpreted)h(as)
-g(an)g(o)s(ctal)h(n)m(um)m(b)s(er,)f(eac)m(h)i(n)m(um)m(b)s(er)d(of)630
-762 y(the)f(umask)g(is)g(subtracted)g(from)f Fs(7)p Ft(.)53
-b(Th)m(us,)34 b(a)h(umask)e(of)i Fs(022)e Ft(results)g(in)g(p)s
-(ermissions)630 872 y(of)e Fs(755)p Ft(.)150 1031 y Fs(unset)870
-1166 y(unset)46 b([-fv])h([)p Fj(name)11 b Fs(])630 1300
-y Ft(Eac)m(h)34 b(v)-5 b(ariable)31 b(or)i(function)f
-Fq(name)38 b Ft(is)32 b(remo)m(v)m(ed.)50 b(If)32 b(no)h(options)g(are)
-g(supplied,)e(or)i(the)630 1410 y(`)p Fs(-v)p Ft(')h(option)g(is)g(giv)
-m(en,)h(eac)m(h)h Fq(name)k Ft(refers)34 b(to)h(a)g(shell)d(v)-5
-b(ariable.)52 b(If)34 b(the)h(`)p Fs(-f)p Ft(')f(option)g(is)630
-1520 y(giv)m(en,)26 b(the)e Fq(name)5 b Ft(s)25 b(refer)f(to)h(shell)e
-(functions,)h(and)g(the)g(function)f(de\014nition)f(is)i(remo)m(v)m
-(ed.)630 1629 y(Readonly)31 b(v)-5 b(ariables)31 b(and)h(functions)e
-(ma)m(y)j(not)f(b)s(e)g(unset.)45 b(The)32 b(return)f(status)h(is)f
-(zero)630 1739 y(unless)e(a)h Fq(name)36 b Ft(is)29 b(readonly)-8
+TeXDict begin 39 44 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(39)630 299 y(is)34
+b(supplied,)f(and)g Fq(mo)s(de)38 b Ft(is)33 b(omitted,)j(the)e(output)
+f(is)g(in)h(a)g(form)f(that)h(ma)m(y)g(b)s(e)f(reused)630
+408 y(as)e(input.)41 b(The)31 b(return)f(status)h(is)g(zero)h(if)e(the)
+h(mo)s(de)g(is)g(successfully)g(c)m(hanged)g(or)g(if)g(no)630
+518 y Fq(mo)s(de)k Ft(argumen)m(t)c(is)f(supplied,)g(and)f(non-zero)i
+(otherwise.)630 653 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 762 y(the)f(umask)g(is)h(subtracted)f(from)f
+Fs(7)p Ft(.)53 b(Th)m(us,)34 b(a)h(umask)e(of)i Fs(022)e
+Ft(results)h(in)g(p)s(ermissions)630 872 y(of)d Fs(755)p
+Ft(.)150 1031 y Fs(unset)870 1166 y(unset)46 b([-fv])h([)p
+Fj(name)11 b Fs(])630 1300 y Ft(Eac)m(h)34 b(v)-5 b(ariable)33
+b(or)g(function)g Fq(name)38 b Ft(is)33 b(remo)m(v)m(ed.)50
+b(If)32 b(no)h(options)h(are)f(supplied,)g(or)g(the)630
+1410 y(`)p Fs(-v)p Ft(')h(option)h(is)g(giv)m(en,)h(eac)m(h)g
+Fq(name)k Ft(refers)34 b(to)h(a)g(shell)f(v)-5 b(ariable.)54
+b(If)34 b(the)h(`)p Fs(-f)p Ft(')f(option)h(is)630 1520
+y(giv)m(en,)27 b(the)d Fq(name)5 b Ft(s)25 b(refer)f(to)h(shell)g
+(functions,)g(and)f(the)g(function)g(de\014nition)g(is)h(remo)m(v)m
+(ed.)630 1629 y(Readonly)32 b(v)-5 b(ariables)33 b(and)f(functions)f
+(ma)m(y)i(not)f(b)s(e)g(unset.)45 b(The)32 b(return)f(status)h(is)g
+(zero)630 1739 y(unless)e(a)g Fq(name)36 b Ft(is)30 b(readonly)-8
b(.)150 1997 y Fr(4.2)68 b(Bash)45 b(Builtin)g(Commands)275
-2241 y Ft(This)29 b(section)j(describ)s(es)e(builtin)f(commands)i(whic)
-m(h)f(are)j(unique)c(to)k(or)f(ha)m(v)m(e)h(b)s(een)e(extended)g(in)150
+2241 y Ft(This)30 b(section)j(describ)s(es)e(builtin)h(commands)f(whic)
+m(h)g(are)i(unique)d(to)j(or)f(ha)m(v)m(e)h(b)s(een)e(extended)g(in)150
2350 y(Bash.)41 b(Some)30 b(of)h(these)g(commands)f(are)g(sp)s
-(eci\014ed)f(in)g(the)i Fl(posix)e Ft(1003.2)k(standard.)150
+(eci\014ed)g(in)g(the)h Fl(posix)e Ft(1003.2)k(standard.)150
2510 y Fs(alias)870 2645 y(alias)46 b([-p])h([)p Fj(name)11
-b Fs([=)p Fj(value)g Fs(])43 b(...)o(])630 2779 y Ft(Without)g(argumen)
-m(ts)g(or)g(with)f(the)i(`)p Fs(-p)p Ft(')f(option,)j
-Fs(alias)41 b Ft(prin)m(ts)h(the)h(list)f(of)h(aliases)630
-2889 y(on)36 b(the)g(standard)f(output)h(in)e(a)j(form)e(that)i(allo)m
-(ws)e(them)h(to)g(b)s(e)g(reused)f(as)h(input.)55 b(If)630
-2998 y(argumen)m(ts)29 b(are)g(supplied,)d(an)j(alias)f(is)g(de\014ned)
-f(for)i(eac)m(h)h Fq(name)k Ft(whose)28 b Fq(v)-5 b(alue)34
-b Ft(is)28 b(giv)m(en.)630 3108 y(If)39 b(no)h Fq(v)-5
-b(alue)44 b Ft(is)39 b(giv)m(en,)j(the)e(name)f(and)g(v)-5
-b(alue)39 b(of)h(the)g(alias)f(is)g(prin)m(ted.)67 b(Aliases)39
-b(are)630 3217 y(describ)s(ed)28 b(in)h(Section)i(6.6)g([Aliases],)f
-(page)h(71.)150 3377 y Fs(bind)870 3512 y(bind)47 b([-m)g
+b Fs([=)p Fj(value)g Fs(])43 b(...)o(])630 2779 y Ft(Without)h(argumen)
+m(ts)f(or)g(with)g(the)h(`)p Fs(-p)p Ft(')f(option,)k
+Fs(alias)41 b Ft(prin)m(ts)i(the)g(list)h(of)f(aliases)630
+2889 y(on)36 b(the)g(standard)f(output)h(in)f(a)i(form)e(that)i(allo)m
+(ws)g(them)f(to)g(b)s(e)g(reused)f(as)h(input.)56 b(If)630
+2998 y(argumen)m(ts)29 b(are)g(supplied,)f(an)h(alias)h(is)f(de\014ned)
+e(for)i(eac)m(h)h Fq(name)k Ft(whose)28 b Fq(v)-5 b(alue)35
+b Ft(is)29 b(giv)m(en.)630 3108 y(If)39 b(no)h Fq(v)-5
+b(alue)45 b Ft(is)40 b(giv)m(en,)j(the)d(name)f(and)g(v)-5
+b(alue)40 b(of)g(the)g(alias)h(is)f(prin)m(ted.)68 b(Aliases)41
+b(are)630 3217 y(describ)s(ed)29 b(in)h(Section)i(6.6)f([Aliases],)h
+(page)f(71.)150 3377 y Fs(bind)870 3512 y(bind)47 b([-m)g
Fj(keymap)11 b Fs(])45 b([-lpsvPSV])870 3621 y(bind)i([-m)g
Fj(keymap)11 b Fs(])45 b([-q)i Fj(function)11 b Fs(])45
b([-u)h Fj(function)11 b Fs(])45 b([-r)i Fj(keyseq)11
b(-f)i Fj(filename)870 3840 y Fs(bind)g([-m)g Fj(keymap)11
b Fs(])45 b(-x)i Fj(keyseq:shell-command)870 3950 y Fs(bind)g([-m)g
Fj(keymap)11 b Fs(])45 b Fj(keyseq:function-name)870
-4060 y Fs(bind)i Fj(readline-command)630 4194 y Ft(Displa)m(y)24
-b(curren)m(t)h(Readline)f(\(see)i(Chapter)f(8)g([Command)g(Line)f
-(Editing],)h(page)h(83\))g(k)m(ey)630 4304 y(and)36 b(function)f
-(bindings,)h(bind)e(a)j(k)m(ey)g(sequence)g(to)h(a)f(Readline)e
-(function)g(or)i(macro,)630 4413 y(or)44 b(set)h(a)g(Readline)d(v)-5
-b(ariable.)81 b(Eac)m(h)45 b(non-option)f(argumen)m(t)g(is)f(a)i
-(command)f(as)g(it)630 4523 y(w)m(ould)34 b(app)s(ear)g(in)f(a)j(a)f
-(Readline)e(initialization)f(\014le)i(\(see)i(Section)e(8.3)i
-([Readline)e(Init)630 4632 y(File],)41 b(page)e(86\),)k(but)38
-b(eac)m(h)i(binding)c(or)j(command)g(m)m(ust)g(b)s(e)f(passed)g(as)i(a)
+4060 y Fs(bind)i Fj(readline-command)630 4194 y Ft(Displa)m(y)26
+b(curren)m(t)f(Readline)h(\(see)g(Chapter)f(8)g([Command)g(Line)g
+(Editing],)i(page)f(83\))g(k)m(ey)630 4304 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 4413 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 4523 y(w)m(ould)35 b(app)s(ear)f(in)g(a)i(a)f
+(Readline)g(initialization)j(\014le)d(\(see)h(Section)f(8.3)h
+([Readline)g(Init)630 4632 y(File],)43 b(page)c(86\),)k(but)38
+b(eac)m(h)i(binding)e(or)h(command)g(m)m(ust)g(b)s(e)f(passed)g(as)i(a)
f(separate)630 4742 y(argumen)m(t;)d(e.g.,)f(`)p Fs
-("\\C-x\\C-r":re-read-init-fi)o(le)p Ft('.)43 b(Options,)33
-b(if)g(supplied,)e(ha)m(v)m(e)630 4852 y(the)g(follo)m(wing)d
-(meanings:)630 5011 y Fs(-m)i Fj(keymap)1110 5121 y Ft(Use)54
+("\\C-x\\C-r":re-read-init-fi)o(le)p Ft('.)43 b(Options,)34
+b(if)g(supplied,)f(ha)m(v)m(e)630 4852 y(the)e(follo)m(wing)g
+(meanings:)630 5011 y Fs(-m)f Fj(keymap)1110 5121 y Ft(Use)54
b Fq(k)m(eymap)j Ft(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 5230 y(bindings.)44 b(Acceptable)33
-b Fq(k)m(eymap)j Ft(names)c(are)h Fs(emacs)p Ft(,)f Fs(emacs-standard)p
+m(y)f(the)g(subsequen)m(t)1110 5230 y(bindings.)46 b(Acceptable)34
+b Fq(k)m(eymap)i Ft(names)c(are)h Fs(emacs)p Ft(,)f Fs(emacs-standard)p
Ft(,)1110 5340 y Fs(emacs-meta)p Ft(,)99 b Fs(emacs-ctlx)p
Ft(,)f Fs(vi)p Ft(,)j Fs(vi-move)p Ft(,)f Fs(vi-command)p
-Ft(,)f(and)p eop
+Ft(,)f(and)p eop end
%%Page: 40 46
-40 45 bop 150 -116 a Ft(40)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110
-299 y Fs(vi-insert)p Ft(.)64 b Fs(vi)38 b Ft(is)g(equiv)-5
-b(alen)m(t)39 b(to)g Fs(vi-command)p Ft(;)i Fs(emacs)c
-Ft(is)h(equiv)-5 b(alen)m(t)1110 408 y(to)31 b Fs(emacs-standard)p
-Ft(.)630 562 y Fs(-l)384 b Ft(List)30 b(the)g(names)g(of)h(all)e
-(Readline)g(functions.)630 715 y Fs(-p)384 b Ft(Displa)m(y)32
-b(Readline)f(function)h(names)h(and)f(bindings)d(in)j(suc)m(h)g(a)i(w)m
-(a)m(y)f(that)1110 825 y(they)e(can)f(b)s(e)g(used)g(as)g(input)f(or)h
-(in)f(a)i(Readline)e(initialization)e(\014le.)630 978
-y Fs(-P)384 b Ft(List)30 b(curren)m(t)g(Readline)f(function)g(names)h
-(and)g(bindings.)630 1132 y Fs(-v)384 b Ft(Displa)m(y)23
-b(Readline)f(v)-5 b(ariable)23 b(names)h(and)f(v)-5 b(alues)23
-b(in)g(suc)m(h)g(a)i(w)m(a)m(y)f(that)h(they)1110 1241
-y(can)31 b(b)s(e)e(used)h(as)h(input)d(or)i(in)f(a)i(Readline)e
-(initialization)f(\014le.)630 1395 y Fs(-V)384 b Ft(List)30
-b(curren)m(t)g(Readline)f(v)-5 b(ariable)29 b(names)h(and)g(v)-5
-b(alues.)630 1548 y Fs(-s)384 b Ft(Displa)m(y)37 b(Readline)f(k)m(ey)i
+TeXDict begin 40 45 bop 150 -116 a Ft(40)2572 b(Bash)31
+b(Reference)g(Man)m(ual)1110 299 y Fs(vi-insert)p Ft(.)64
+b Fs(vi)38 b Ft(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fs(vi-command)p
+Ft(;)i Fs(emacs)c Ft(is)i(equiv)-5 b(alen)m(t)1110 408
+y(to)31 b Fs(emacs-standard)p Ft(.)630 562 y Fs(-l)384
+b Ft(List)31 b(the)f(names)g(of)h(all)g(Readline)g(functions.)630
+715 y Fs(-p)384 b Ft(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
+825 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 978 y Fs(-P)384 b Ft(List)31
+b(curren)m(t)f(Readline)h(function)f(names)g(and)g(bindings.)630
+1132 y Fs(-v)384 b Ft(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 1241 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
+1395 y Fs(-V)384 b Ft(List)31 b(curren)m(t)f(Readline)h(v)-5
+b(ariable)31 b(names)f(and)g(v)-5 b(alues.)630 1548 y
+Fs(-s)384 b Ft(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 1658 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 1767 y(Readline)d(initialization)i(\014le.)
+630 1921 y Fs(-S)384 b Ft(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
-1658 y(they)d(output)f(in)g(suc)m(h)g(a)h(w)m(a)m(y)h(that)f(they)g
-(can)g(b)s(e)f(used)g(as)h(input)d(or)j(in)f(a)1110 1767
-y(Readline)c(initialization)e(\014le.)630 1921 y Fs(-S)384
-b Ft(Displa)m(y)37 b(Readline)f(k)m(ey)i(sequences)f(b)s(ound)f(to)i
-(macros)g(and)f(the)g(strings)1110 2030 y(they)31 b(output.)630
-2184 y Fs(-f)f Fj(filename)1110 2293 y Ft(Read)h(k)m(ey)g(bindings)c
-(from)j Fq(\014lename)p Ft(.)630 2447 y Fs(-q)g Fj(function)1110
-2556 y Ft(Query)g(ab)s(out)g(whic)m(h)f(k)m(eys)i(in)m(v)m(ok)m(e)g
-(the)g(named)f Fq(function)p Ft(.)630 2710 y Fs(-u)g
-Fj(function)1110 2819 y Ft(Un)m(bind)e(all)h(k)m(eys)i(b)s(ound)e(to)i
-(the)f(named)g Fq(function)p Ft(.)630 2973 y Fs(-r)g
-Fj(keyseq)1110 3082 y Ft(Remo)m(v)m(e)i(an)m(y)f(curren)m(t)f(binding)d
-(for)j Fq(k)m(eyseq)p Ft(.)630 3236 y Fs(-x)g Fj(keyseq:shell-command)
-1110 3345 y Ft(Cause)g Fq(shell-command)i Ft(to)g(b)s(e)d(executed)j
-(whenev)m(er)e Fq(k)m(eyseq)j Ft(is)d(en)m(tered.)630
-3499 y(The)c(return)f(status)i(is)e(zero)j(unless)c(an)j(in)m(v)-5
-b(alid)24 b(option)i(is)f(supplied)e(or)k(an)f(error)g(o)s(ccurs.)150
+2030 y(they)31 b(output.)630 2184 y Fs(-f)f Fj(filename)1110
+2293 y Ft(Read)h(k)m(ey)g(bindings)e(from)h Fq(\014lename)p
+Ft(.)630 2447 y Fs(-q)g Fj(function)1110 2556 y Ft(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
+Fq(function)p Ft(.)630 2710 y Fs(-u)g Fj(function)1110
+2819 y Ft(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i(the)f(named)g
+Fq(function)p Ft(.)630 2973 y Fs(-r)g Fj(keyseq)1110
+3082 y Ft(Remo)m(v)m(e)i(an)m(y)f(curren)m(t)f(binding)f(for)h
+Fq(k)m(eyseq)p Ft(.)630 3236 y Fs(-x)g Fj(keyseq:shell-command)1110
+3345 y Ft(Cause)g Fq(shell-command)k Ft(to)e(b)s(e)d(executed)j(whenev)
+m(er)e Fq(k)m(eyseq)j Ft(is)e(en)m(tered.)630 3499 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
3652 y Fs(builtin)870 3784 y(builtin)46 b([)p Fj(shell-builtin)54
-b Fs([)p Fj(args)11 b Fs(]])630 3915 y Ft(Run)35 b(a)i(shell)d
-(builtin,)h(passing)g(it)h Fq(args)p Ft(,)i(and)e(return)f(its)h(exit)g
-(status.)59 b(This)34 b(is)i(useful)630 4025 y(when)29
-b(de\014ning)g(a)h(shell)f(function)g(with)g(the)h(same)h(name)f(as)h
-(a)g(shell)d(builtin,)f(retaining)630 4134 y(the)34 b(functionalit)m(y)
-e(of)i(the)f(builtin)d(within)h(the)j(function.)49 b(The)33
-b(return)g(status)h(is)e(non-)630 4244 y(zero)f(if)f
-Fq(shell-builtin)25 b Ft(is)k(not)i(a)g(shell)d(builtin)f(command.)150
+b Fs([)p Fj(args)11 b Fs(]])630 3915 y Ft(Run)35 b(a)i(shell)f
+(builtin,)i(passing)e(it)h Fq(args)p Ft(,)h(and)e(return)f(its)i(exit)g
+(status.)59 b(This)35 b(is)i(useful)630 4025 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 4134 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 4244 y(zero)e(if)g
+Fq(shell-builtin)f Ft(is)g(not)h(a)g(shell)f(builtin)g(command.)150
4398 y Fs(caller)870 4529 y(caller)46 b([)p Fj(expr)11
b Fs(])630 4661 y Ft(Returns)34 b(the)g(con)m(text)j(of)e(an)m(y)g
-(activ)m(e)h(subroutine)c(call)i(\(a)h(shell)e(function)g(or)i(a)g
-(script)630 4770 y(executed)c(with)e(the)i Fs(.)f Ft(or)g
-Fs(source)f Ft(builtins\).)630 4902 y(Without)44 b Fq(expr)p
-Ft(,)k Fs(caller)43 b Ft(displa)m(ys)g(the)h(line)f(n)m(um)m(b)s(er)h
-(and)g(source)g(\014lename)g(of)h(the)630 5011 y(curren)m(t)35
-b(subroutine)f(call.)56 b(If)35 b(a)h(non-negativ)m(e)h(in)m(teger)f
-(is)f(supplied)d(as)k Fq(expr)p Ft(,)h Fs(caller)630
-5121 y Ft(displa)m(ys)i(the)h(line)f(n)m(um)m(b)s(er,)j(subroutine)c
-(name,)44 b(and)c(source)g(\014le)g(corresp)s(onding)e(to)630
-5230 y(that)d(p)s(osition)e(in)g(the)i(curren)m(t)f(execution)h(call)f
-(stac)m(k.)54 b(This)33 b(extra)i(information)e(ma)m(y)630
-5340 y(b)s(e)d(used,)g(for)g(example,)g(to)h(prin)m(t)e(a)i(stac)m(k)h
-(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)f(frame)i(0.)p
-eop
+(activ)m(e)i(subroutine)c(call)j(\(a)f(shell)g(function)f(or)h(a)g
+(script)630 4770 y(executed)c(with)f(the)h Fs(.)f Ft(or)g
+Fs(source)f Ft(builtins\).)630 4902 y(Without)45 b Fq(expr)p
+Ft(,)j Fs(caller)43 b Ft(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 5011 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 Fq(expr)p Ft(,)h Fs(caller)630
+5121 y Ft(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
+5230 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
+5340 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.)p
+eop end
%%Page: 41 47
-41 46 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(41)630 299 y(The)29 b(return)f(v)-5
-b(alue)28 b(is)h(0)g(unless)f(the)h(shell)e(is)i(not)g(executing)g(a)h
-(subroutine)d(call)h(or)i Fq(expr)630 408 y Ft(do)s(es)g(not)h(corresp)
-s(ond)e(to)i(a)g(v)-5 b(alid)28 b(p)s(osition)h(in)g(the)h(call)g(stac)
-m(k.)150 578 y Fs(command)870 717 y(command)46 b([-pVv])g
-Fj(command)56 b Fs([)p Fj(arguments)g Fs(...)o(])630
-857 y Ft(Runs)32 b Fq(command)k Ft(with)c Fq(argumen)m(ts)37
-b Ft(ignoring)31 b(an)m(y)i(shell)f(function)f(named)i
-Fq(command)p Ft(.)630 966 y(Only)38 b(shell)h(builtin)d(commands)k(or)g
-(commands)f(found)g(b)m(y)h(searc)m(hing)g(the)g Fs(PATH)f
-Ft(are)630 1076 y(executed.)g(If)23 b(there)h(is)e(a)i(shell)d
-(function)h(named)h Fs(ls)p Ft(,)i(running)20 b(`)p Fs(command)29
-b(ls)p Ft(')23 b(within)e(the)630 1186 y(function)32
-b(will)e(execute)35 b(the)f(external)f(command)g Fs(ls)f
-Ft(instead)h(of)g(calling)f(the)h(function)630 1295 y(recursiv)m(ely)-8
-b(.)82 b(The)44 b(`)p Fs(-p)p Ft(')h(option)f(means)g(to)h(use)g(a)f
-(default)g(v)-5 b(alue)44 b(for)g Fs(PATH)g Ft(that)h(is)630
-1405 y(guaran)m(teed)35 b(to)f(\014nd)e(all)h(of)h(the)g(standard)f
-(utilities.)48 b(The)33 b(return)g(status)h(in)e(this)h(case)630
-1514 y(is)28 b(127)h(if)f Fq(command)k Ft(cannot)d(b)s(e)e(found)h(or)g
-(an)g(error)h(o)s(ccurred,)f(and)g(the)h(exit)f(status)h(of)630
+TeXDict begin 41 46 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(41)630 299 y(The)29
+b(return)f(v)-5 b(alue)29 b(is)h(0)f(unless)g(the)g(shell)g(is)h(not)f
+(executing)h(a)g(subroutine)e(call)i(or)g Fq(expr)630
+408 y Ft(do)s(es)g(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
+578 y Fs(command)870 717 y(command)46 b([-pVv])g Fj(command)56
+b Fs([)p Fj(arguments)g Fs(...)o(])630 857 y Ft(Runs)32
+b Fq(command)k Ft(with)d Fq(argumen)m(ts)k Ft(ignoring)c(an)m(y)g
+(shell)h(function)e(named)h Fq(command)p Ft(.)630 966
+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 Fs(PATH)f Ft(are)630 1076 y(executed.)g(If)23
+b(there)h(is)f(a)h(shell)f(function)g(named)g Fs(ls)p
+Ft(,)i(running)c(`)p Fs(command)29 b(ls)p Ft(')23 b(within)g(the)630
+1186 y(function)33 b(will)g(execute)i(the)f(external)g(command)f
+Fs(ls)f Ft(instead)i(of)f(calling)i(the)e(function)630
+1295 y(recursiv)m(ely)-8 b(.)84 b(The)44 b(`)p Fs(-p)p
+Ft(')h(option)g(means)f(to)h(use)g(a)f(default)h(v)-5
+b(alue)45 b(for)f Fs(PATH)g Ft(that)h(is)630 1405 y(guaran)m(teed)35
+b(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 1514
+y(is)29 b(127)g(if)g Fq(command)j Ft(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
1624 y Fq(command)34 b Ft(otherwise.)630 1763 y(If)25
-b(either)f(the)i(`)p Fs(-V)p Ft(')f(or)g(`)p Fs(-v)p
-Ft(')g(option)f(is)g(supplied,)g(a)h(description)e(of)j
-Fq(command)i Ft(is)c(prin)m(ted.)630 1873 y(The)j(`)p
-Fs(-v)p Ft(')h(option)g(causes)g(a)h(single)d(w)m(ord)i(indicating)e
-(the)i(command)g(or)g(\014le)f(name)h(used)630 1983 y(to)36
-b(in)m(v)m(ok)m(e)f Fq(command)k Ft(to)c(b)s(e)g(displa)m(y)m(ed;)h
-(the)f(`)p Fs(-V)p Ft(')g(option)f(pro)s(duces)f(a)j(more)f(v)m(erb)s
-(ose)630 2092 y(description.)59 b(In)36 b(this)g(case,)k(the)e(return)e
-(status)h(is)f(zero)i(if)e Fq(command)41 b Ft(is)36 b(found,)i(and)630
-2202 y(non-zero)31 b(if)e(not.)150 2371 y Fs(declare)870
+b(either)g(the)h(`)p Fs(-V)p Ft(')f(or)g(`)p Fs(-v)p
+Ft(')g(option)g(is)g(supplied,)h(a)f(description)g(of)h
+Fq(command)i Ft(is)d(prin)m(ted.)630 1873 y(The)i(`)p
+Fs(-v)p Ft(')h(option)h(causes)f(a)h(single)f(w)m(ord)g(indicating)h
+(the)f(command)g(or)g(\014le)g(name)g(used)630 1983 y(to)36
+b(in)m(v)m(ok)m(e)g Fq(command)j Ft(to)c(b)s(e)g(displa)m(y)m(ed;)j
+(the)d(`)p Fs(-V)p Ft(')g(option)g(pro)s(duces)e(a)j(more)f(v)m(erb)s
+(ose)630 2092 y(description.)61 b(In)36 b(this)h(case,)j(the)e(return)e
+(status)h(is)g(zero)h(if)f Fq(command)k Ft(is)c(found,)h(and)630
+2202 y(non-zero)31 b(if)f(not.)150 2371 y Fs(declare)870
2511 y(declare)46 b([-afFirtx])f([-p])h([)p Fj(name)11
-b Fs([=)p Fj(value)g Fs(])44 b(...)o(])630 2650 y Ft(Declare)28
-b(v)-5 b(ariables)26 b(and)g(giv)m(e)i(them)f(attributes.)39
-b(If)27 b(no)g Fq(name)5 b Ft(s)27 b(are)h(giv)m(en,)g(then)f(displa)m
-(y)630 2760 y(the)k(v)-5 b(alues)29 b(of)i(v)-5 b(ariables)29
-b(instead.)630 2899 y(The)f(`)p Fs(-p)p Ft(')g(option)f(will)f(displa)m
-(y)g(the)j(attributes)e(and)h(v)-5 b(alues)27 b(of)i(eac)m(h)g
+b Fs([=)p Fj(value)g Fs(])44 b(...)o(])630 2650 y Ft(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 Fq(name)5 b Ft(s)27 b(are)h(giv)m(en,)h(then)e(displa)m
+(y)630 2760 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31
+b(instead.)630 2899 y(The)d(`)p Fs(-p)p Ft(')g(option)g(will)h(displa)m
+(y)f(the)h(attributes)f(and)g(v)-5 b(alues)28 b(of)h(eac)m(h)g
Fq(name)p Ft(.)40 b(When)28 b(`)p Fs(-p)p Ft(')630 3009
-y(is)j(used,)h(additional)e(options)h(are)i(ignored.)45
-b(The)31 b(`)p Fs(-F)p Ft(')h(option)g(inhibits)c(the)k(displa)m(y)f
-(of)630 3118 y(function)g(de\014nitions;)g(only)h(the)g(function)f
-(name)i(and)f(attributes)g(are)g(prin)m(ted.)46 b(If)32
-b(the)630 3228 y Fs(extdebug)e Ft(shell)h(option)h(is)g(enabled)f
-(using)g Fs(shopt)h Ft(\(see)h(Section)f(4.2)i([Bash)f(Builtins],)630
-3337 y(page)k(39\),)h(the)e(source)g(\014le)f(name)h(and)g(line)e(n)m
-(um)m(b)s(er)g(where)i(the)g(function)e(is)h(de\014ned)630
-3447 y(are)g(displa)m(y)m(ed)f(as)h(w)m(ell.)53 b(`)p
-Fs(-F)p Ft(')34 b(implies)e(`)p Fs(-f)p Ft('.)54 b(The)35
-b(follo)m(wing)e(options)h(can)h(b)s(e)f(used)g(to)630
-3557 y(restrict)40 b(output)h(to)g(v)-5 b(ariables)40
-b(with)f(the)i(sp)s(eci\014ed)e(attributes)h(or)h(to)g(giv)m(e)g(v)-5
+y(is)k(used,)g(additional)h(options)f(are)h(ignored.)46
+b(The)31 b(`)p Fs(-F)p Ft(')h(option)h(inhibits)e(the)h(displa)m(y)h
+(of)630 3118 y(function)f(de\014nitions;)h(only)g(the)f(function)g
+(name)h(and)f(attributes)h(are)f(prin)m(ted.)47 b(If)32
+b(the)630 3228 y Fs(extdebug)e Ft(shell)j(option)g(is)g(enabled)f
+(using)g Fs(shopt)g Ft(\(see)h(Section)g(4.2)h([Bash)f(Builtins],)630
+3337 y(page)k(39\),)h(the)e(source)g(\014le)g(name)g(and)g(line)g(n)m
+(um)m(b)s(er)e(where)i(the)g(function)f(is)h(de\014ned)630
+3447 y(are)f(displa)m(y)m(ed)h(as)f(w)m(ell.)55 b(`)p
+Fs(-F)p Ft(')34 b(implies)h(`)p Fs(-f)p Ft('.)54 b(The)35
+b(follo)m(wing)h(options)f(can)g(b)s(e)f(used)g(to)630
+3557 y(restrict)41 b(output)g(to)g(v)-5 b(ariables)42
+b(with)e(the)h(sp)s(eci\014ed)f(attributes)h(or)g(to)g(giv)m(e)h(v)-5
b(ariables)630 3666 y(attributes:)630 3836 y Fs(-a)384
-b Ft(Eac)m(h)30 b Fq(name)k Ft(is)28 b(an)h(arra)m(y)h(v)-5
-b(ariable)28 b(\(see)i(Section)f(6.7)h([Arra)m(ys],)h(page)e(72\).)630
-4005 y Fs(-f)384 b Ft(Use)31 b(function)e(names)h(only)-8
-b(.)630 4174 y Fs(-i)384 b Ft(The)36 b(v)-5 b(ariable)35
-b(is)g(to)i(b)s(e)f(treated)h(as)g(an)f(in)m(teger;)k(arithmetic)35
-b(ev)-5 b(aluation)1110 4284 y(\(see)29 b(Section)e(6.5)i([Shell)d
-(Arithmetic],)i(page)g(70\))h(is)e(p)s(erformed)f(when)h(the)1110
-4394 y(v)-5 b(ariable)29 b(is)h(assigned)f(a)i(v)-5 b(alue.)630
-4563 y Fs(-r)384 b Ft(Mak)m(e)25 b Fq(name)5 b Ft(s)23
-b(readonly)-8 b(.)38 b(These)24 b(names)f(cannot)h(then)f(b)s(e)g
-(assigned)g(v)-5 b(alues)1110 4672 y(b)m(y)30 b(subsequen)m(t)g
-(assignmen)m(t)g(statemen)m(ts)i(or)f(unset.)630 4842
-y Fs(-t)384 b Ft(Giv)m(e)32 b(eac)m(h)i Fq(name)j Ft(the)32
-b Fs(trace)f Ft(attribute.)45 b(T)-8 b(raced)32 b(functions)f(inherit)f
-(the)1110 4951 y Fs(DEBUG)21 b Ft(trap)h(from)h(the)f(calling)f(shell.)
-37 b(The)22 b(trace)h(attribute)g(has)f(no)g(sp)s(ecial)1110
-5061 y(meaning)30 b(for)g(v)-5 b(ariables.)630 5230 y
+b Ft(Eac)m(h)30 b Fq(name)k Ft(is)29 b(an)g(arra)m(y)h(v)-5
+b(ariable)30 b(\(see)g(Section)g(6.7)g([Arra)m(ys],)h(page)e(72\).)630
+4005 y Fs(-f)384 b Ft(Use)31 b(function)f(names)g(only)-8
+b(.)630 4174 y Fs(-i)384 b Ft(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 4284 y(\(see)29
+b(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)e(70\))h(is)f(p)s
+(erformed)e(when)h(the)1110 4394 y(v)-5 b(ariable)31
+b(is)g(assigned)f(a)h(v)-5 b(alue.)630 4563 y Fs(-r)384
+b Ft(Mak)m(e)25 b Fq(name)5 b Ft(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 Fs(-t)384 b Ft(Giv)m(e)33
+b(eac)m(h)h Fq(name)j Ft(the)32 b Fs(trace)f Ft(attribute.)46
+b(T)-8 b(raced)32 b(functions)g(inherit)g(the)1110 4951
+y Fs(DEBUG)21 b Ft(trap)h(from)h(the)f(calling)i(shell.)39
+b(The)22 b(trace)h(attribute)h(has)e(no)g(sp)s(ecial)1110
+5061 y(meaning)31 b(for)f(v)-5 b(ariables.)630 5230 y
Fs(-x)384 b Ft(Mark)30 b(eac)m(h)h Fq(name)k Ft(for)29
-b(exp)s(ort)h(to)g(subsequen)m(t)f(commands)h(via)f(the)h(en)m(vi-)1110
-5340 y(ronmen)m(t.)p eop
+b(exp)s(ort)h(to)g(subsequen)m(t)f(commands)h(via)g(the)g(en)m(vi-)1110
+5340 y(ronmen)m(t.)p eop end
%%Page: 42 48
-42 47 bop 150 -116 a Ft(42)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(Using)24 b(`)p Fs(+)p Ft(')h(instead)g(of)g(`)p
-Fs(-)p Ft(')g(turns)f(o\013)h(the)g(attribute)g(instead.)38
-b(When)25 b(used)f(in)g(a)h(function,)630 408 y Fs(declare)37
-b Ft(mak)m(es)i(eac)m(h)h Fq(name)k Ft(lo)s(cal,)d(as)d(with)g(the)h
-Fs(local)e Ft(command.)66 b(If)38 b(a)h(v)-5 b(ariable)630
-518 y(name)30 b(is)g(follo)m(w)m(ed)g(b)m(y)g(=)p Fq(v)-5
-b(alue)p Ft(,)30 b(the)g(v)-5 b(alue)30 b(of)h(the)f(v)-5
-b(ariable)30 b(is)f(set)i(to)g Fq(v)-5 b(alue)p Ft(.)630
-658 y(The)35 b(return)f(status)i(is)f(zero)h(unless)e(an)h(in)m(v)-5
-b(alid)33 b(option)i(is)g(encoun)m(tered,)i(an)f(attempt)630
-767 y(is)31 b(made)h(to)g(de\014ne)f(a)h(function)f(using)f(`)p
-Fs(-f)g(foo=bar)p Ft(',)h(an)h(attempt)g(is)f(made)h(to)h(assign)630
-877 y(a)42 b(v)-5 b(alue)42 b(to)h(a)f(readonly)f(v)-5
-b(ariable,)45 b(an)d(attempt)h(is)e(made)h(to)h(assign)e(a)i(v)-5
-b(alue)41 b(to)i(an)630 986 y(arra)m(y)30 b(v)-5 b(ariable)28
-b(without)h(using)e(the)j(comp)s(ound)e(assignmen)m(t)h(syn)m(tax)h
-(\(see)h(Section)e(6.7)630 1096 y([Arra)m(ys],)47 b(page)c(72\),)48
-b(one)43 b(of)g(the)g Fq(names)k Ft(is)42 b(not)h(a)g(v)-5
-b(alid)41 b(shell)g(v)-5 b(ariable)42 b(name,)k(an)630
-1205 y(attempt)28 b(is)e(made)i(to)f(turn)f(o\013)i(readonly)e(status)h
-(for)g(a)h(readonly)e(v)-5 b(ariable,)27 b(an)g(attempt)630
-1315 y(is)g(made)i(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,)28 b(or)g(an)g(attempt)i(is)d(made)h(to)630
-1425 y(displa)m(y)h(a)h(non-existen)m(t)h(function)e(with)g(`)p
+TeXDict begin 42 47 bop 150 -116 a Ft(42)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(Using)25 b(`)p Fs(+)p
+Ft(')g(instead)h(of)f(`)p Fs(-)p Ft(')g(turns)f(o\013)h(the)g
+(attribute)h(instead.)39 b(When)25 b(used)f(in)h(a)g(function,)630
+408 y Fs(declare)37 b Ft(mak)m(es)i(eac)m(h)h Fq(name)k
+Ft(lo)s(cal,)f(as)38 b(with)h(the)g Fs(local)e Ft(command.)66
+b(If)38 b(a)h(v)-5 b(ariable)630 518 y(name)30 b(is)h(follo)m(w)m(ed)h
+(b)m(y)e(=)p Fq(v)-5 b(alue)p Ft(,)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 Fq(v)-5
+b(alue)p Ft(.)630 658 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 767 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f
+(`)p Fs(-f)f(foo=bar)p Ft(',)h(an)h(attempt)g(is)g(made)g(to)h(assign)
+630 877 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 986 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 1096 y([Arra)m(ys],)47 b(page)c(72\),)48
+b(one)43 b(of)g(the)g Fq(names)k Ft(is)c(not)g(a)g(v)-5
+b(alid)43 b(shell)g(v)-5 b(ariable)44 b(name,)i(an)630
+1205 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
+1315 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
+1425 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g(`)p
Fs(-f)p Ft('.)150 1594 y Fs(echo)870 1733 y(echo)47 b([-neE])f([)p
Fj(arg)57 b Fs(...)o(])630 1873 y Ft(Output)31 b(the)i
-Fq(arg)8 b Ft(s,)33 b(separated)g(b)m(y)g(spaces,)g(terminated)f(with)f
-(a)i(newline.)45 b(The)32 b(return)630 1983 y(status)f(is)f(alw)m(a)m
-(ys)h(0.)41 b(If)31 b(`)p Fs(-n)p Ft(')f(is)g(sp)s(eci\014ed,)f(the)i
-(trailing)d(newline)h(is)g(suppressed.)40 b(If)30 b(the)630
-2092 y(`)p Fs(-e)p Ft(')23 b(option)h(is)e(giv)m(en,)j(in)m
-(terpretation)e(of)h(the)g(follo)m(wing)e(bac)m(kslash-escap)s(ed)h(c)m
-(haracters)630 2202 y(is)32 b(enabled.)47 b(The)32 b(`)p
-Fs(-E)p Ft(')h(option)f(disables)f(the)i(in)m(terpretation)f(of)h
+Fq(arg)8 b Ft(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 1983 y(status)f(is)g(alw)m(a)m
+(ys)h(0.)41 b(If)31 b(`)p Fs(-n)p Ft(')f(is)h(sp)s(eci\014ed,)f(the)h
+(trailing)g(newline)g(is)f(suppressed.)40 b(If)30 b(the)630
+2092 y(`)p Fs(-e)p Ft(')23 b(option)i(is)e(giv)m(en,)j(in)m
+(terpretation)f(of)f(the)g(follo)m(wing)h(bac)m(kslash-escap)s(ed)f(c)m
+(haracters)630 2202 y(is)33 b(enabled.)48 b(The)32 b(`)p
+Fs(-E)p Ft(')h(option)g(disables)g(the)g(in)m(terpretation)h(of)f
(these)g(escap)s(e)g(c)m(harac-)630 2311 y(ters,)42 b(ev)m(en)f(on)e
-(systems)h(where)f(they)h(are)g(in)m(terpreted)f(b)m(y)h(default.)68
-b(The)39 b Fs(xpg_echo)630 2421 y Ft(shell)d(option)i(ma)m(y)h(b)s(e)e
-(used)h(to)h(dynamically)d(determine)h(whether)h(or)g(not)g
+(systems)h(where)f(they)h(are)g(in)m(terpreted)g(b)m(y)g(default.)69
+b(The)39 b Fs(xpg_echo)630 2421 y Ft(shell)f(option)h(ma)m(y)g(b)s(e)e
+(used)h(to)h(dynamically)g(determine)f(whether)g(or)g(not)g
Fs(echo)f Ft(ex-)630 2531 y(pands)30 b(these)h(escap)s(e)h(c)m
-(haracters)g(b)m(y)f(default.)42 b Fs(echo)30 b Ft(in)m(terprets)h(the)
-g(follo)m(wing)e(escap)s(e)630 2640 y(sequences:)630
-2809 y Fs(\\a)384 b Ft(alert)30 b(\(b)s(ell\))630 2979
+(haracters)g(b)m(y)f(default.)43 b Fs(echo)30 b Ft(in)m(terprets)i(the)
+f(follo)m(wing)h(escap)s(e)630 2640 y(sequences:)630
+2809 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 2979
y Fs(\\b)384 b Ft(bac)m(kspace)630 3148 y Fs(\\c)g Ft(suppress)28
-b(trailing)h(newline)630 3318 y Fs(\\e)384 b Ft(escap)s(e)630
+b(trailing)k(newline)630 3318 y Fs(\\e)384 b Ft(escap)s(e)630
3487 y Fs(\\f)g Ft(form)30 b(feed)630 3656 y Fs(\\n)384
-b Ft(new)30 b(line)630 3826 y Fs(\\r)384 b Ft(carriage)31
-b(return)630 3995 y Fs(\\t)384 b Ft(horizon)m(tal)30
-b(tab)630 4164 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)630
+b Ft(new)30 b(line)630 3826 y Fs(\\r)384 b Ft(carriage)32
+b(return)630 3995 y Fs(\\t)384 b Ft(horizon)m(tal)32
+b(tab)630 4164 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630
4334 y Fs(\\\\)384 b Ft(bac)m(kslash)630 4503 y Fs(\\0)p
-Fj(nnn)240 b Ft(the)32 b(eigh)m(t-bit)g(c)m(haracter)i(whose)e(v)-5
-b(alue)32 b(is)f(the)h(o)s(ctal)h(v)-5 b(alue)31 b Fq(nnn)g
-Ft(\(zero)i(to)1110 4613 y(three)e(o)s(ctal)f(digits\))630
-4782 y Fs(\\)p Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)f(c)m(haracter)i
-(whose)e(v)-5 b(alue)34 b(is)g(the)g(o)s(ctal)h(v)-5
-b(alue)34 b Fq(nnn)f Ft(\(one)i(to)1110 4892 y(three)c(o)s(ctal)f
-(digits\))630 5061 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)f(c)
-m(haracter)i(whose)e(v)-5 b(alue)38 b(is)h(the)g(hexadecimal)g(v)-5
-b(alue)39 b Fq(HH)1110 5171 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
-(digits\))150 5340 y Fs(enable)p eop
+Fj(nnn)240 b Ft(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 Fq(nnn)f
+Ft(\(zero)i(to)1110 4613 y(three)e(o)s(ctal)g(digits\))630
+4782 y Fs(\\)p Fj(nnn)288 b Ft(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 Fq(nnn)e Ft(\(one)i(to)1110 4892 y(three)c(o)s(ctal)g
+(digits\))630 5061 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)h(c)
+m(haracter)g(whose)e(v)-5 b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5
+b(alue)40 b Fq(HH)1110 5171 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
+(digits\))150 5340 y Fs(enable)p eop end
%%Page: 43 49
-43 48 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(43)870 299 y Fs(enable)46
+TeXDict begin 43 48 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(43)870 299 y Fs(enable)46
b([-n])h([-p])f([-f)h Fj(filename)11 b Fs(])45 b([-ads])h([)p
-Fj(name)57 b Fs(...)o(])630 429 y Ft(Enable)35 b(and)g(disable)f
-(builtin)f(shell)h(commands.)56 b(Disabling)34 b(a)j(builtin)32
-b(allo)m(ws)j(a)h(disk)630 539 y(command)e(whic)m(h)f(has)h(the)g(same)
-h(name)f(as)h(a)f(shell)f(builtin)d(to)35 b(b)s(e)f(executed)h(without)
-630 649 y(sp)s(ecifying)25 b(a)i(full)e(pathname,)i(ev)m(en)h(though)f
-(the)g(shell)e(normally)g(searc)m(hes)j(for)f(builtins)630
-758 y(b)s(efore)32 b(disk)e(commands.)46 b(If)31 b(`)p
-Fs(-n)p Ft(')h(is)f(used,)h(the)g Fq(name)5 b Ft(s)32
-b(b)s(ecome)h(disabled.)43 b(Otherwise)630 868 y Fq(name)5
-b Ft(s)44 b(are)h(enabled.)81 b(F)-8 b(or)45 b(example,)j(to)d(use)f
-(the)g Fs(test)f Ft(binary)g(found)g(via)g Fs($PATH)630
-977 y Ft(instead)30 b(of)g(the)h(shell)d(builtin)f(v)m(ersion,)j(t)m
-(yp)s(e)h(`)p Fs(enable)e(-n)h(test)p Ft('.)630 1108
-y(If)42 b(the)h(`)p Fs(-p)p Ft(')f(option)g(is)f(supplied,)i(or)f(no)h
-Fq(name)k Ft(argumen)m(ts)c(app)s(ear,)i(a)e(list)e(of)i(shell)630
-1217 y(builtins)34 b(is)j(prin)m(ted.)62 b(With)37 b(no)g(other)h
-(argumen)m(ts,)j(the)d(list)e(consists)h(of)h(all)f(enabled)630
-1327 y(shell)31 b(builtins.)43 b(The)32 b(`)p Fs(-a)p
-Ft(')h(option)f(means)g(to)i(list)d(eac)m(h)j(builtin)29
-b(with)i(an)h(indication)f(of)630 1437 y(whether)f(or)g(not)h(it)f(is)f
-(enabled.)630 1567 y(The)40 b(`)p Fs(-f)p Ft(')g(option)f(means)h(to)h
-(load)f(the)g(new)f(builtin)e(command)j Fq(name)45 b
-Ft(from)40 b(shared)630 1677 y(ob)5 b(ject)27 b Fq(\014lename)p
-Ft(,)f(on)g(systems)g(that)h(supp)s(ort)d(dynamic)h(loading.)38
-b(The)26 b(`)p Fs(-d)p Ft(')g(option)g(will)630 1786
-y(delete)31 b(a)f(builtin)d(loaded)j(with)f(`)p Fs(-f)p
-Ft('.)630 1917 y(If)i(there)g(are)g(no)g(options,)g(a)g(list)f(of)h
-(the)g(shell)e(builtins)f(is)i(displa)m(y)m(ed.)41 b(The)31
-b(`)p Fs(-s)p Ft(')f(option)630 2026 y(restricts)e Fs(enable)f
-Ft(to)i(the)f Fl(posix)g Ft(sp)s(ecial)f(builtins.)37
-b(If)27 b(`)p Fs(-s)p Ft(')i(is)e(used)h(with)f(`)p Fs(-f)p
-Ft(',)i(the)f(new)630 2136 y(builtin)f(b)s(ecomes)k(a)f(sp)s(ecial)f
-(builtin)e(\(see)32 b(Section)e(4.4)h([Sp)s(ecial)e(Builtins],)f(page)j
-(53\).)630 2266 y(The)26 b(return)f(status)h(is)f(zero)i(unless)d(a)j
-Fq(name)k Ft(is)25 b(not)h(a)h(shell)d(builtin)f(or)j(there)g(is)f(an)h
-(error)630 2376 y(loading)j(a)i(new)f(builtin)d(from)j(a)g(shared)g(ob)
-5 b(ject.)150 2527 y Fs(help)870 2658 y(help)47 b([-s])f([)p
-Fj(pattern)11 b Fs(])630 2788 y Ft(Displa)m(y)38 b(helpful)e
-(information)h(ab)s(out)i(builtin)c(commands.)66 b(If)38
-b Fq(pattern)h Ft(is)f(sp)s(eci\014ed,)630 2898 y Fs(help)28
-b Ft(giv)m(es)h(detailed)f(help)f(on)i(all)f(commands)g(matc)m(hing)h
-Fq(pattern)p Ft(,)h(otherwise)e(a)h(list)f(of)630 3007
-y(the)36 b(builtins)c(is)j(prin)m(ted.)55 b(The)35 b(`)p
-Fs(-s)p Ft(')h(option)f(restricts)g(the)h(information)e(displa)m(y)m
-(ed)g(to)630 3117 y(a)e(short)g(usage)h(synopsis.)43
-b(The)32 b(return)f(status)h(is)f(zero)i(unless)d(no)i(command)g(matc)m
+Fj(name)57 b Fs(...)o(])630 429 y Ft(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 539 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
+649 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
+758 y(b)s(efore)32 b(disk)f(commands.)46 b(If)31 b(`)p
+Fs(-n)p Ft(')h(is)g(used,)g(the)g Fq(name)5 b Ft(s)32
+b(b)s(ecome)h(disabled.)45 b(Otherwise)630 868 y Fq(name)5
+b Ft(s)44 b(are)h(enabled.)82 b(F)-8 b(or)45 b(example,)k(to)c(use)f
+(the)g Fs(test)f Ft(binary)h(found)f(via)h Fs($PATH)630
+977 y Ft(instead)31 b(of)f(the)h(shell)f(builtin)g(v)m(ersion,)h(t)m
+(yp)s(e)g(`)p Fs(enable)e(-n)h(test)p Ft('.)630 1108
+y(If)42 b(the)h(`)p Fs(-p)p Ft(')f(option)h(is)f(supplied,)j(or)d(no)h
+Fq(name)k Ft(argumen)m(ts)c(app)s(ear,)i(a)e(list)g(of)g(shell)630
+1217 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
+1327 y(shell)33 b(builtins.)46 b(The)32 b(`)p Fs(-a)p
+Ft(')h(option)g(means)f(to)i(list)f(eac)m(h)h(builtin)e(with)g(an)g
+(indication)i(of)630 1437 y(whether)c(or)g(not)h(it)g(is)f(enabled.)630
+1567 y(The)40 b(`)p Fs(-f)p Ft(')g(option)g(means)g(to)h(load)g(the)f
+(new)f(builtin)h(command)g Fq(name)45 b Ft(from)40 b(shared)630
+1677 y(ob)5 b(ject)27 b Fq(\014lename)p Ft(,)g(on)f(systems)g(that)h
+(supp)s(ort)d(dynamic)i(loading.)40 b(The)26 b(`)p Fs(-d)p
+Ft(')g(option)h(will)630 1786 y(delete)32 b(a)e(builtin)g(loaded)h
+(with)f(`)p Fs(-f)p Ft('.)630 1917 y(If)h(there)g(are)g(no)g(options,)h
+(a)f(list)h(of)f(the)g(shell)g(builtins)g(is)g(displa)m(y)m(ed.)43
+b(The)31 b(`)p Fs(-s)p Ft(')f(option)630 2026 y(restricts)f
+Fs(enable)e Ft(to)i(the)f Fl(posix)g Ft(sp)s(ecial)h(builtins.)40
+b(If)27 b(`)p Fs(-s)p Ft(')i(is)f(used)g(with)g(`)p Fs(-f)p
+Ft(',)h(the)f(new)630 2136 y(builtin)i(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
+(53\).)630 2266 y(The)26 b(return)f(status)h(is)g(zero)h(unless)e(a)i
+Fq(name)k Ft(is)26 b(not)g(a)h(shell)f(builtin)g(or)g(there)g(is)g(an)g
+(error)630 2376 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g
+(ob)5 b(ject.)150 2527 y Fs(help)870 2658 y(help)47 b([-s])f([)p
+Fj(pattern)11 b Fs(])630 2788 y Ft(Displa)m(y)40 b(helpful)e
+(information)h(ab)s(out)g(builtin)f(commands.)66 b(If)38
+b Fq(pattern)h Ft(is)g(sp)s(eci\014ed,)630 2898 y Fs(help)28
+b Ft(giv)m(es)i(detailed)g(help)e(on)h(all)h(commands)e(matc)m(hing)i
+Fq(pattern)p Ft(,)g(otherwise)f(a)g(list)h(of)630 3007
+y(the)36 b(builtins)f(is)h(prin)m(ted.)56 b(The)35 b(`)p
+Fs(-s)p Ft(')h(option)g(restricts)g(the)g(information)g(displa)m(y)m
+(ed)g(to)630 3117 y(a)c(short)g(usage)h(synopsis.)44
+b(The)32 b(return)f(status)h(is)g(zero)h(unless)e(no)h(command)g(matc)m
(hes)630 3226 y Fq(pattern)p Ft(.)150 3378 y Fs(let)870
3508 y(let)47 b Fj(expression)55 b Fs([)p Fj(expression)11
-b Fs(])630 3639 y Ft(The)41 b Fs(let)g Ft(builtin)d(allo)m(ws)j
-(arithmetic)f(to)j(b)s(e)d(p)s(erformed)g(on)i(shell)e(v)-5
-b(ariables.)72 b(Eac)m(h)630 3748 y Fq(expression)30
-b Ft(is)g(ev)-5 b(aluated)31 b(according)f(to)i(the)f(rules)f(giv)m(en)
-h(b)s(elo)m(w)f(in)f(Section)i(6.5)h([Shell)630 3858
-y(Arithmetic],)49 b(page)d(70.)87 b(If)45 b(the)g(last)g
-Fq(expression)g Ft(ev)-5 b(aluates)46 b(to)g(0,)k Fs(let)44
-b Ft(returns)g(1;)630 3968 y(otherwise)30 b(0)h(is)e(returned.)150
+b Fs(])630 3639 y Ft(The)41 b Fs(let)g Ft(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 3748 y Fq(expression)31
+b Ft(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 3858
+y(Arithmetic],)51 b(page)46 b(70.)87 b(If)45 b(the)g(last)h
+Fq(expression)g Ft(ev)-5 b(aluates)47 b(to)f(0,)k Fs(let)44
+b Ft(returns)g(1;)630 3968 y(otherwise)31 b(0)g(is)f(returned.)150
4119 y Fs(local)870 4249 y(local)46 b([)p Fj(option)11
b Fs(])45 b Fj(name)11 b Fs([=)p Fj(value)g Fs(])44 b(...)630
-4380 y Ft(F)-8 b(or)27 b(eac)m(h)g(argumen)m(t,)g(a)f(lo)s(cal)f(v)-5
-b(ariable)25 b(named)g Fq(name)31 b Ft(is)25 b(created,)j(and)d
-(assigned)g Fq(v)-5 b(alue)p Ft(.)630 4489 y(The)37 b
-Fq(option)g Ft(can)g(b)s(e)g(an)m(y)h(of)f(the)h(options)f(accepted)h
+4380 y Ft(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 Fq(name)31 b Ft(is)26 b(created,)i(and)d
+(assigned)h Fq(v)-5 b(alue)p Ft(.)630 4489 y(The)37 b
+Fq(option)h Ft(can)f(b)s(e)g(an)m(y)h(of)f(the)h(options)g(accepted)g
(b)m(y)g Fs(declare)p Ft(.)59 b Fs(local)36 b Ft(can)i(only)630
-4599 y(b)s(e)j(used)h(within)d(a)k(function;)k(it)41
-b(mak)m(es)i(the)f(v)-5 b(ariable)41 b Fq(name)48 b Ft(ha)m(v)m(e)43
-b(a)f(visible)e(scop)s(e)630 4709 y(restricted)e(to)h(that)g(function)e
-(and)g(its)h(c)m(hildren.)62 b(The)38 b(return)f(status)h(is)g(zero)h
-(unless)630 4818 y Fs(local)g Ft(is)g(used)h(outside)f(a)i(function,)g
-(an)f(in)m(v)-5 b(alid)38 b Fq(name)46 b Ft(is)39 b(supplied,)h(or)g
-Fq(name)45 b Ft(is)40 b(a)630 4928 y(readonly)29 b(v)-5
+4599 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 Fq(name)48 b Ft(ha)m(v)m(e)43
+b(a)f(visible)h(scop)s(e)630 4709 y(restricted)c(to)g(that)g(function)f
+(and)f(its)i(c)m(hildren.)64 b(The)38 b(return)f(status)h(is)h(zero)g
+(unless)630 4818 y Fs(local)g Ft(is)h(used)g(outside)g(a)h(function,)h
+(an)e(in)m(v)-5 b(alid)41 b Fq(name)46 b Ft(is)40 b(supplied,)i(or)e
+Fq(name)45 b Ft(is)c(a)630 4928 y(readonly)30 b(v)-5
b(ariable.)150 5079 y Fs(logout)870 5210 y(logout)46
-b([)p Fj(n)11 b Fs(])630 5340 y Ft(Exit)30 b(a)h(login)e(shell,)g
-(returning)f(a)j(status)g(of)f Fq(n)g Ft(to)h(the)g(shell's)d(paren)m
-(t.)p eop
+b([)p Fj(n)11 b Fs(])630 5340 y Ft(Exit)31 b(a)g(login)g(shell,)g
+(returning)e(a)i(status)g(of)f Fq(n)g Ft(to)h(the)g(shell's)f(paren)m
+(t.)p eop end
%%Page: 44 50
-44 49 bop 150 -116 a Ft(44)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(printf)870 445 y(printf)46 b Fj(format)57 b
-Fs([)p Fj(arguments)11 b Fs(])630 591 y Ft(W)-8 b(rite)26
-b(the)h(formatted)f Fq(argumen)m(ts)k Ft(to)d(the)f(standard)f(output)h
-(under)e(the)i(con)m(trol)h(of)f(the)630 701 y Fq(format)p
-Ft(.)41 b(The)28 b Fq(format)j Ft(is)d(a)h(c)m(haracter)i(string)c
-(whic)m(h)h(con)m(tains)h(three)g(t)m(yp)s(es)g(of)g(ob)5
-b(jects:)630 810 y(plain)26 b(c)m(haracters,)31 b(whic)m(h)c(are)i
-(simply)d(copied)i(to)i(standard)d(output,)i(c)m(haracter)h(escap)s(e)
-630 920 y(sequences,)g(whic)m(h)e(are)h(con)m(v)m(erted)i(and)d(copied)
-h(to)g(the)h(standard)e(output,)h(and)g(format)630 1029
-y(sp)s(eci\014cations,)37 b(eac)m(h)g(of)g(whic)m(h)e(causes)h(prin)m
-(ting)e(of)j(the)f(next)h(successiv)m(e)f Fq(argumen)m(t)p
-Ft(.)630 1139 y(In)31 b(addition)f(to)j(the)e(standard)g
+TeXDict begin 44 49 bop 150 -116 a Ft(44)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(printf)870 445 y(printf)46
+b Fj(format)57 b Fs([)p Fj(arguments)11 b Fs(])630 591
+y Ft(W)-8 b(rite)27 b(the)g(formatted)f Fq(argumen)m(ts)k
+Ft(to)d(the)f(standard)f(output)h(under)e(the)i(con)m(trol)i(of)e(the)
+630 701 y Fq(format)p Ft(.)41 b(The)28 b Fq(format)j
+Ft(is)e(a)g(c)m(haracter)i(string)d(whic)m(h)h(con)m(tains)h(three)f(t)
+m(yp)s(es)g(of)g(ob)5 b(jects:)630 810 y(plain)28 b(c)m(haracters,)j
+(whic)m(h)d(are)h(simply)f(copied)h(to)h(standard)d(output,)i(c)m
+(haracter)h(escap)s(e)630 920 y(sequences,)g(whic)m(h)f(are)g(con)m(v)m
+(erted)i(and)d(copied)i(to)f(the)h(standard)e(output,)h(and)g(format)
+630 1029 y(sp)s(eci\014cations,)39 b(eac)m(h)e(of)g(whic)m(h)f(causes)g
+(prin)m(ting)g(of)h(the)f(next)h(successiv)m(e)g Fq(argumen)m(t)p
+Ft(.)630 1139 y(In)31 b(addition)h(to)h(the)e(standard)g
Fs(printf\(1\))f Ft(formats,)i(`)p Fs(\045b)p Ft(')g(causes)g
-Fs(printf)e Ft(to)j(expand)630 1249 y(bac)m(kslash)38
-b(escap)s(e)h(sequences)f(in)g(the)g(corresp)s(onding)e
-Fq(argumen)m(t)p Ft(,)41 b(\(except)f(that)f(`)p Fs(\\c)p
-Ft(')630 1358 y(terminates)k(output,)k(bac)m(kslashes)c(in)f(`)p
-Fs(\\')p Ft(',)47 b(`)p Fs(\\")p Ft(',)g(and)c(`)p Fs(\\?)p
-Ft(')g(are)h(not)g(remo)m(v)m(ed,)k(and)630 1468 y(o)s(ctal)24
-b(escap)s(es)g(b)s(eginning)d(with)h(`)p Fs(\\0)p Ft(')i(ma)m(y)g(con)m
-(tain)g(up)f(to)h(four)f(digits\),)h(and)f(`)p Fs(\045q)p
+Fs(printf)e Ft(to)j(expand)630 1249 y(bac)m(kslash)39
+b(escap)s(e)g(sequences)f(in)h(the)f(corresp)s(onding)f
+Fq(argumen)m(t)p Ft(,)k(\(except)f(that)f(`)p Fs(\\c)p
+Ft(')630 1358 y(terminates)44 b(output,)j(bac)m(kslashes)d(in)f(`)p
+Fs(\\')p Ft(',)k(`)p Fs(\\")p Ft(',)g(and)c(`)p Fs(\\?)p
+Ft(')g(are)h(not)g(remo)m(v)m(ed,)k(and)630 1468 y(o)s(ctal)25
+b(escap)s(es)f(b)s(eginning)f(with)g(`)p Fs(\\0)p Ft(')h(ma)m(y)g(con)m
+(tain)h(up)e(to)h(four)f(digits\),)j(and)d(`)p Fs(\045q)p
Ft(')h(causes)630 1577 y Fs(printf)31 b Ft(to)i(output)f(the)h(corresp)
-s(onding)e Fq(argumen)m(t)k Ft(in)c(a)i(format)g(that)g(can)g(b)s(e)f
-(reused)630 1687 y(as)f(shell)d(input.)630 1833 y(The)j
-Fq(format)i Ft(is)e(reused)f(as)i(necessary)f(to)i(consume)e(all)f(of)h
+s(onding)f Fq(argumen)m(t)j Ft(in)d(a)h(format)g(that)g(can)g(b)s(e)f
+(reused)630 1687 y(as)f(shell)f(input.)630 1833 y(The)h
+Fq(format)i Ft(is)f(reused)e(as)i(necessary)f(to)i(consume)e(all)h(of)f
(the)h Fq(argumen)m(ts)p Ft(.)44 b(If)30 b(the)i Fq(for-)630
-1943 y(mat)c Ft(requires)d(more)h Fq(argumen)m(ts)k Ft(than)25
-b(are)i(supplied,)c(the)j(extra)h(format)f(sp)s(eci\014cations)630
-2052 y(b)s(eha)m(v)m(e)j(as)g(if)e(a)i(zero)g(v)-5 b(alue)28
-b(or)h(n)m(ull)d(string,)i(as)h(appropriate,)f(had)g(b)s(een)g
-(supplied.)36 b(The)630 2162 y(return)29 b(v)-5 b(alue)30
-b(is)g(zero)h(on)f(success,)h(non-zero)g(on)f(failure.)150
+1943 y(mat)c Ft(requires)e(more)g Fq(argumen)m(ts)k Ft(than)25
+b(are)i(supplied,)e(the)h(extra)h(format)f(sp)s(eci\014cations)630
+2052 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 2162 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
2345 y Fs(read)870 2491 y(read)47 b([-ers])f([-a)h Fj(aname)11
b Fs(])45 b([-d)i Fj(delim)11 b Fs(])46 b([-n)h Fj(nchars)11
b Fs(])45 b([-p)i Fj(prompt)11 b Fs(])45 b([-t)i Fj(time-)870
2600 y(out)11 b Fs(])46 b([-u)h Fj(fd)11 b Fs(])46 b([)p
-Fj(name)57 b Fs(...])630 2746 y Ft(One)26 b(line)f(is)h(read)g(from)h
-(the)f(standard)g(input,)g(or)h(from)f(the)h(\014le)e(descriptor)h
-Fq(fd)j Ft(supplied)630 2856 y(as)37 b(an)g(argumen)m(t)h(to)f(the)h(`)
-p Fs(-u)p Ft(')e(option,)j(and)d(the)i(\014rst)e(w)m(ord)g(is)g
-(assigned)h(to)g(the)h(\014rst)630 2966 y Fq(name)p Ft(,)29
+Fj(name)57 b Fs(...])630 2746 y Ft(One)26 b(line)h(is)g(read)f(from)h
+(the)f(standard)g(input,)h(or)g(from)f(the)h(\014le)f(descriptor)h
+Fq(fd)i Ft(supplied)630 2856 y(as)37 b(an)g(argumen)m(t)h(to)f(the)h(`)
+p Fs(-u)p Ft(')e(option,)k(and)c(the)i(\014rst)e(w)m(ord)g(is)h
+(assigned)h(to)f(the)h(\014rst)630 2966 y Fq(name)p Ft(,)29
b(the)f(second)h(w)m(ord)e(to)i(the)g(second)f Fq(name)p
-Ft(,)h(and)e(so)i(on,)g(with)e(lefto)m(v)m(er)i(w)m(ords)f(and)630
-3075 y(their)f(in)m(terv)m(ening)g(separators)i(assigned)e(to)i(the)f
-(last)g Fq(name)p Ft(.)40 b(If)27 b(there)i(are)f(few)m(er)g(w)m(ords)
-630 3185 y(read)44 b(from)f(the)g(input)f(stream)i(than)g(names,)j(the)
-c(remaining)f(names)i(are)g(assigned)630 3294 y(empt)m(y)31
-b(v)-5 b(alues.)40 b(The)30 b(c)m(haracters)i(in)d(the)i(v)-5
-b(alue)30 b(of)h(the)f Fs(IFS)g Ft(v)-5 b(ariable)29
-b(are)i(used)f(to)h(split)630 3404 y(the)37 b(line)f(in)m(to)h(w)m
-(ords.)61 b(The)36 b(bac)m(kslash)h(c)m(haracter)i(`)p
+Ft(,)h(and)e(so)i(on,)g(with)f(lefto)m(v)m(er)i(w)m(ords)e(and)630
+3075 y(their)g(in)m(terv)m(ening)h(separators)g(assigned)f(to)h(the)f
+(last)h Fq(name)p Ft(.)40 b(If)27 b(there)i(are)f(few)m(er)g(w)m(ords)
+630 3185 y(read)44 b(from)f(the)g(input)g(stream)h(than)g(names,)j(the)
+c(remaining)h(names)g(are)g(assigned)630 3294 y(empt)m(y)31
+b(v)-5 b(alues.)41 b(The)30 b(c)m(haracters)i(in)e(the)h(v)-5
+b(alue)31 b(of)g(the)f Fs(IFS)g Ft(v)-5 b(ariable)31
+b(are)g(used)f(to)h(split)630 3404 y(the)37 b(line)h(in)m(to)g(w)m
+(ords.)61 b(The)36 b(bac)m(kslash)i(c)m(haracter)h(`)p
Fs(\\)p Ft(')e(ma)m(y)h(b)s(e)f(used)f(to)i(remo)m(v)m(e)h(an)m(y)630
-3513 y(sp)s(ecial)f(meaning)h(for)g(the)g(next)h(c)m(haracter)h(read)e
-(and)g(for)g(line)f(con)m(tin)m(uation.)67 b(If)39 b(no)630
-3623 y(names)28 b(are)h(supplied,)d(the)i(line)f(read)i(is)e(assigned)h
-(to)h(the)f(v)-5 b(ariable)27 b Fs(REPLY)p Ft(.)39 b(The)28
-b(return)630 3733 y(co)s(de)i(is)e(zero,)j(unless)d(end-of-\014le)h(is)
-f(encoun)m(tered,)i Fs(read)f Ft(times)g(out,)h(or)f(an)h(in)m(v)-5
-b(alid)27 b(\014le)630 3842 y(descriptor)34 b(is)h(supplied)d(as)k(the)
-f(argumen)m(t)h(to)g(`)p Fs(-u)p Ft('.)56 b(Options,)36
-b(if)e(supplied,)g(ha)m(v)m(e)j(the)630 3952 y(follo)m(wing)29
-b(meanings:)630 4134 y Fs(-a)h Fj(aname)114 b Ft(The)34
-b(w)m(ords)f(are)i(assigned)e(to)i(sequen)m(tial)f(indices)e(of)i(the)g
+3513 y(sp)s(ecial)h(meaning)g(for)f(the)g(next)h(c)m(haracter)h(read)e
+(and)g(for)g(line)h(con)m(tin)m(uation.)69 b(If)39 b(no)630
+3623 y(names)28 b(are)h(supplied,)f(the)g(line)h(read)g(is)f(assigned)h
+(to)g(the)f(v)-5 b(ariable)29 b Fs(REPLY)p Ft(.)39 b(The)28
+b(return)630 3733 y(co)s(de)i(is)f(zero,)i(unless)e(end-of-\014le)h(is)
+f(encoun)m(tered,)h Fs(read)f Ft(times)h(out,)g(or)f(an)h(in)m(v)-5
+b(alid)30 b(\014le)630 3842 y(descriptor)35 b(is)h(supplied)e(as)i(the)
+f(argumen)m(t)h(to)g(`)p Fs(-u)p Ft('.)56 b(Options,)37
+b(if)e(supplied,)h(ha)m(v)m(e)h(the)630 3952 y(follo)m(wing)32
+b(meanings:)630 4134 y Fs(-a)e Fj(aname)114 b Ft(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 4244 y Fq(aname)p Ft(,)29
-b(starting)g(at)g(0.)40 b(All)27 b(elemen)m(ts)i(are)f(remo)m(v)m(ed)i
-(from)d Fq(aname)34 b Ft(b)s(efore)1110 4354 y(the)d(assignmen)m(t.)40
+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 Fq(aname)34 b Ft(b)s(efore)1110 4354 y(the)d(assignmen)m(t.)41
b(Other)30 b Fq(name)36 b Ft(argumen)m(ts)30 b(are)h(ignored.)630
4536 y Fs(-d)f Fj(delim)114 b Ft(The)41 b(\014rst)h(c)m(haracter)h(of)f
-Fq(delim)e Ft(is)h(used)h(to)g(terminate)g(the)g(input)e(line,)1110
+Fq(delim)g Ft(is)g(used)g(to)g(terminate)h(the)f(input)f(line,)1110
4646 y(rather)30 b(than)g(newline.)630 4829 y Fs(-e)384
-b Ft(Readline)26 b(\(see)j(Chapter)e(8)h([Command)f(Line)f(Editing],)h
-(page)h(83\))h(is)e(used)1110 4938 y(to)k(obtain)f(the)h(line.)630
+b Ft(Readline)28 b(\(see)h(Chapter)e(8)h([Command)f(Line)g(Editing],)i
+(page)f(83\))h(is)f(used)1110 4938 y(to)j(obtain)g(the)g(line.)630
5121 y Fs(-n)f Fj(nchars)1110 5230 y Fs(read)38 b Ft(returns)f(after)j
-(reading)e Fq(nc)m(hars)k Ft(c)m(haracters)e(rather)f(than)g(w)m
-(aiting)1110 5340 y(for)30 b(a)h(complete)g(line)d(of)j(input.)p
-eop
+(reading)f Fq(nc)m(hars)j Ft(c)m(haracters)e(rather)f(than)g(w)m
+(aiting)1110 5340 y(for)30 b(a)h(complete)h(line)e(of)h(input.)p
+eop end
%%Page: 45 51
-45 50 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(45)630 299 y Fs(-p)30 b Fj(prompt)1110
-408 y Ft(Displa)m(y)36 b Fq(prompt)p Ft(,)i(without)d(a)i(trailing)e
-(newline,)i(b)s(efore)f(attempting)h(to)1110 518 y(read)g(an)m(y)h
-(input.)59 b(The)37 b(prompt)g(is)f(displa)m(y)m(ed)g(only)g(if)g
-(input)g(is)g(coming)1110 628 y(from)30 b(a)h(terminal.)630
-794 y Fs(-r)384 b Ft(If)21 b(this)g(option)g(is)f(giv)m(en,)k(bac)m
-(kslash)d(do)s(es)g(not)h(act)h(as)f(an)f(escap)s(e)h(c)m(haracter.)
-1110 904 y(The)30 b(bac)m(kslash)h(is)f(considered)g(to)i(b)s(e)e(part)
-h(of)g(the)g(line.)41 b(In)30 b(particular,)g(a)1110
-1013 y(bac)m(kslash-newline)e(pair)h(ma)m(y)i(not)g(b)s(e)f(used)f(as)i
-(a)g(line)d(con)m(tin)m(uation.)630 1180 y Fs(-s)384
-b Ft(Silen)m(t)26 b(mo)s(de.)40 b(If)27 b(input)e(is)i(coming)g(from)g
-(a)h(terminal,)f(c)m(haracters)i(are)f(not)1110 1289
+TeXDict begin 45 50 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(45)630 299 y Fs(-p)30
+b Fj(prompt)1110 408 y Ft(Displa)m(y)38 b Fq(prompt)p
+Ft(,)g(without)e(a)h(trailing)h(newline,)h(b)s(efore)d(attempting)i(to)
+1110 518 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 628 y(from)30
+b(a)h(terminal.)630 794 y Fs(-r)384 b Ft(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 904 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
+1013 y(bac)m(kslash-newline)f(pair)f(ma)m(y)h(not)g(b)s(e)f(used)f(as)i
+(a)g(line)f(con)m(tin)m(uation.)630 1180 y Fs(-s)384
+b Ft(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 1289
y(ec)m(ho)s(ed.)630 1456 y Fs(-t)i Fj(timeout)1110 1565
-y Ft(Cause)42 b Fs(read)g Ft(to)h(time)g(out)g(and)f(return)f(failure)g
-(if)h(a)h(complete)g(line)e(of)1110 1675 y(input)25 b(is)h(not)i(read)f
-(within)d Fq(timeout)29 b Ft(seconds.)40 b(This)25 b(option)i(has)f(no)
-h(e\013ect)1110 1784 y(if)i Fs(read)h Ft(is)f(not)i(reading)e(input)f
-(from)i(the)h(terminal)e(or)h(a)h(pip)s(e.)630 1951 y
-Fs(-u)f Fj(fd)258 b Ft(Read)31 b(input)d(from)i(\014le)f(descriptor)h
+y Ft(Cause)42 b Fs(read)g Ft(to)h(time)h(out)f(and)f(return)f(failure)i
+(if)g(a)g(complete)h(line)f(of)1110 1675 y(input)26 b(is)h(not)h(read)f
+(within)f Fq(timeout)k Ft(seconds.)40 b(This)26 b(option)i(has)e(no)h
+(e\013ect)1110 1784 y(if)j Fs(read)g Ft(is)g(not)h(reading)f(input)f
+(from)h(the)h(terminal)g(or)f(a)h(pip)s(e.)630 1951 y
+Fs(-u)f Fj(fd)258 b Ft(Read)31 b(input)e(from)h(\014le)g(descriptor)h
Fq(fd)p Ft(.)150 2117 y Fs(shopt)870 2255 y(shopt)46
b([-pqsu])g([-o])h([)p Fj(optname)56 b Fs(...)o(])630
-2393 y Ft(T)-8 b(oggle)46 b(the)e(v)-5 b(alues)44 b(of)h(v)-5
-b(ariables)43 b(con)m(trolling)h(optional)g(shell)e(b)s(eha)m(vior.)83
-b(With)44 b(no)630 2503 y(options,)31 b(or)g(with)f(the)h(`)p
-Fs(-p)p Ft(')g(option,)g(a)h(list)d(of)j(all)e(settable)h(options)g(is)
-f(displa)m(y)m(ed,)g(with)630 2612 y(an)k(indication)f(of)i(whether)f
-(or)g(not)h(eac)m(h)h(is)d(set.)54 b(The)34 b(`)p Fs(-p)p
-Ft(')h(option)f(causes)h(output)f(to)630 2722 y(b)s(e)i(displa)m(y)m
-(ed)f(in)f(a)j(form)f(that)h(ma)m(y)g(b)s(e)e(reused)h(as)g(input.)57
-b(Other)36 b(options)f(ha)m(v)m(e)j(the)630 2832 y(follo)m(wing)29
-b(meanings:)630 2998 y Fs(-s)384 b Ft(Enable)29 b(\(set\))j(eac)m(h)f
-Fq(optname)p Ft(.)630 3164 y Fs(-u)384 b Ft(Disable)29
-b(\(unset\))i(eac)m(h)h Fq(optname)p Ft(.)630 3331 y
-Fs(-q)384 b Ft(Suppresses)28 b(normal)g(output;)i(the)g(return)e
-(status)i(indicates)f(whether)g(the)1110 3440 y Fq(optname)37
-b Ft(is)30 b(set)i(or)f(unset.)43 b(If)31 b(m)m(ultiple)e
+2393 y Ft(T)-8 b(oggle)47 b(the)d(v)-5 b(alues)45 b(of)g(v)-5
+b(ariables)45 b(con)m(trolling)i(optional)f(shell)e(b)s(eha)m(vior.)84
+b(With)45 b(no)630 2503 y(options,)32 b(or)f(with)g(the)g(`)p
+Fs(-p)p Ft(')g(option,)h(a)g(list)f(of)h(all)g(settable)g(options)g(is)
+f(displa)m(y)m(ed,)h(with)630 2612 y(an)i(indication)i(of)f(whether)f
+(or)g(not)h(eac)m(h)h(is)e(set.)54 b(The)34 b(`)p Fs(-p)p
+Ft(')h(option)g(causes)g(output)f(to)630 2722 y(b)s(e)i(displa)m(y)m
+(ed)h(in)e(a)i(form)f(that)h(ma)m(y)g(b)s(e)e(reused)h(as)g(input.)58
+b(Other)36 b(options)g(ha)m(v)m(e)i(the)630 2832 y(follo)m(wing)32
+b(meanings:)630 2998 y Fs(-s)384 b Ft(Enable)30 b(\(set\))i(eac)m(h)f
+Fq(optname)p Ft(.)630 3164 y Fs(-u)384 b Ft(Disable)31
+b(\(unset\))g(eac)m(h)h Fq(optname)p Ft(.)630 3331 y
+Fs(-q)384 b Ft(Suppresses)28 b(normal)h(output;)h(the)g(return)e
+(status)i(indicates)h(whether)e(the)1110 3440 y Fq(optname)37
+b Ft(is)31 b(set)h(or)f(unset.)43 b(If)31 b(m)m(ultiple)h
Fq(optname)37 b Ft(argumen)m(ts)31 b(are)h(giv)m(en)1110
-3550 y(with)42 b(`)p Fs(-q)p Ft(',)k(the)d(return)f(status)h(is)f(zero)
-i(if)e(all)f Fq(optnames)47 b Ft(are)d(enabled;)1110
-3660 y(non-zero)31 b(otherwise.)630 3826 y Fs(-o)384
-b Ft(Restricts)41 b(the)h(v)-5 b(alues)41 b(of)g Fq(optname)47
-b Ft(to)42 b(b)s(e)f(those)h(de\014ned)e(for)h(the)h(`)p
-Fs(-o)p Ft(')1110 3936 y(option)20 b(to)i(the)f Fs(set)f
-Ft(builtin)d(\(see)22 b(Section)e(4.3)i([The)e(Set)h(Builtin],)g(page)g
-(50\).)630 4102 y(If)29 b(either)h(`)p Fs(-s)p Ft(')g(or)g(`)p
-Fs(-u)p Ft(')f(is)g(used)h(with)e(no)i Fq(optname)35
-b Ft(argumen)m(ts,)c(the)f(displa)m(y)e(is)h(limited)630
-4212 y(to)i(those)g(options)f(whic)m(h)f(are)i(set)f(or)h(unset,)f
-(resp)s(ectiv)m(ely)-8 b(.)630 4350 y(Unless)29 b(otherwise)h(noted,)h
-(the)g Fs(shopt)d Ft(options)i(are)h(disabled)d(\(o\013)7
-b(\))32 b(b)m(y)e(default.)630 4488 y(The)d(return)f(status)i(when)f
-(listing)e(options)i(is)f(zero)j(if)d(all)h Fq(optnames)k
-Ft(are)d(enabled,)f(non-)630 4597 y(zero)40 b(otherwise.)65
-b(When)39 b(setting)g(or)g(unsetting)f(options,)i(the)f(return)f
-(status)h(is)f(zero)630 4707 y(unless)29 b(an)h Fq(optname)36
-b Ft(is)29 b(not)i(a)g(v)-5 b(alid)28 b(shell)h(option.)630
-4845 y(The)h(list)f(of)h Fs(shopt)f Ft(options)h(is:)630
-5011 y Fs(cdable_vars)1110 5121 y Ft(If)k(this)g(is)g(set,)j(an)e
-(argumen)m(t)g(to)h(the)f Fs(cd)f Ft(builtin)e(command)i(that)i(is)e
-(not)1110 5230 y(a)d(directory)f(is)g(assumed)g(to)h(b)s(e)f(the)h
-(name)f(of)h(a)g(v)-5 b(ariable)29 b(whose)i(v)-5 b(alue)30
-b(is)1110 5340 y(the)h(directory)e(to)j(c)m(hange)f(to.)p
-eop
+3550 y(with)43 b(`)p Fs(-q)p Ft(',)j(the)d(return)f(status)h(is)g(zero)
+h(if)f(all)g Fq(optnames)k Ft(are)d(enabled;)1110 3660
+y(non-zero)31 b(otherwise.)630 3826 y Fs(-o)384 b Ft(Restricts)42
+b(the)g(v)-5 b(alues)42 b(of)f Fq(optname)47 b Ft(to)42
+b(b)s(e)f(those)h(de\014ned)e(for)h(the)h(`)p Fs(-o)p
+Ft(')1110 3936 y(option)21 b(to)h(the)f Fs(set)f Ft(builtin)g(\(see)i
+(Section)f(4.3)h([The)e(Set)h(Builtin],)j(page)d(50\).)630
+4102 y(If)29 b(either)i(`)p Fs(-s)p Ft(')f(or)g(`)p Fs(-u)p
+Ft(')f(is)h(used)g(with)f(no)h Fq(optname)35 b Ft(argumen)m(ts,)c(the)f
+(displa)m(y)g(is)g(limited)630 4212 y(to)h(those)g(options)g(whic)m(h)f
+(are)h(set)f(or)h(unset,)f(resp)s(ectiv)m(ely)-8 b(.)630
+4350 y(Unless)30 b(otherwise)h(noted,)g(the)g Fs(shopt)d
+Ft(options)j(are)g(disabled)f(\(o\013)7 b(\))32 b(b)m(y)e(default.)630
+4488 y(The)d(return)f(status)i(when)f(listing)h(options)g(is)f(zero)i
+(if)e(all)i Fq(optnames)i Ft(are)d(enabled,)g(non-)630
+4597 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 4707
+y(unless)30 b(an)g Fq(optname)36 b Ft(is)30 b(not)h(a)g(v)-5
+b(alid)30 b(shell)h(option.)630 4845 y(The)f(list)h(of)f
+Fs(shopt)f Ft(options)i(is:)630 5011 y Fs(cdable_vars)1110
+5121 y Ft(If)j(this)h(is)g(set,)i(an)e(argumen)m(t)g(to)h(the)f
+Fs(cd)f Ft(builtin)h(command)f(that)i(is)f(not)1110 5230
+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 5340
+y(the)g(directory)f(to)i(c)m(hange)f(to.)p eop end
%%Page: 46 52
-46 51 bop 150 -116 a Ft(46)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y Fs(cdspell)144 b Ft(If)27 b(set,)h(minor)e(errors)g(in)g(the)h
-(sp)s(elling)e(of)i(a)g(directory)g(comp)s(onen)m(t)g(in)f(a)i
-Fs(cd)1110 408 y Ft(command)i(will)e(b)s(e)i(corrected.)43
-b(The)30 b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h(transp)s(osed)1110
-518 y(c)m(haracters,)46 b(a)c(missing)d(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 628 y(correction)24 b(is)e(found,)h(the)h(corrected)g
-(path)f(is)f(prin)m(ted,)h(and)g(the)g(command)1110 737
-y(pro)s(ceeds.)40 b(This)29 b(option)h(is)f(only)h(used)f(b)m(y)h(in)m
-(teractiv)m(e)i(shells.)630 894 y Fs(checkhash)1110 1004
-y Ft(If)d(this)g(is)g(set,)h(Bash)g(c)m(hec)m(ks)h(that)g(a)f(command)f
-(found)g(in)f(the)i(hash)f(table)1110 1114 y(exists)j(b)s(efore)g
-(trying)g(to)i(execute)g(it.)47 b(If)32 b(a)h(hashed)e(command)i(no)f
-(longer)1110 1223 y(exists,)e(a)h(normal)e(path)h(searc)m(h)h(is)f(p)s
-(erformed.)630 1380 y Fs(checkwinsize)1110 1490 y Ft(If)41
-b(set,)k(Bash)c(c)m(hec)m(ks)i(the)f(windo)m(w)d(size)j(after)g(eac)m
-(h)g(command)f(and,)j(if)1110 1600 y(necessary)-8 b(,)31
-b(up)s(dates)f(the)g(v)-5 b(alues)30 b(of)h Fs(LINES)e
-Ft(and)g Fs(COLUMNS)p Ft(.)630 1757 y Fs(cmdhist)144
-b Ft(If)33 b(set,)j(Bash)e(attempts)h(to)g(sa)m(v)m(e)g(all)e(lines)f
-(of)i(a)h(m)m(ultiple-line)30 b(command)1110 1866 y(in)g(the)h(same)g
-(history)f(en)m(try)-8 b(.)42 b(This)29 b(allo)m(ws)h(easy)i
-(re-editing)e(of)h(m)m(ulti-line)1110 1976 y(commands.)630
-2133 y Fs(dotglob)144 b Ft(If)27 b(set,)i(Bash)f(includes)e
-(\014lenames)h(b)s(eginning)e(with)h(a)i(`.')41 b(in)26
-b(the)i(results)f(of)1110 2243 y(\014lename)j(expansion.)630
-2400 y Fs(execfail)96 b Ft(If)24 b(this)g(is)f(set,)k(a)e(non-in)m
-(teractiv)m(e)g(shell)e(will)e(not)k(exit)g(if)e(it)h(cannot)i(execute)
-1110 2510 y(the)i(\014le)f(sp)s(eci\014ed)g(as)h(an)g(argumen)m(t)g(to)
-h(the)f Fs(exec)f Ft(builtin)e(command.)39 b(An)1110
-2619 y(in)m(teractiv)m(e)31 b(shell)e(do)s(es)h(not)g(exit)h(if)e
-Fs(exec)g Ft(fails.)630 2777 y Fs(expand_aliases)1110
-2886 y Ft(If)j(set,)h(aliases)e(are)i(expanded)e(as)h(describ)s(ed)e(b)
-s(elo)m(w)h(under)g(Aliases,)g(Sec-)1110 2996 y(tion)37
-b(6.6)i([Aliases],)h(page)f(71.)64 b(This)36 b(option)h(is)g(enabled)g
-(b)m(y)h(default)f(for)1110 3105 y(in)m(teractiv)m(e)31
+TeXDict begin 46 51 bop 150 -116 a Ft(46)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y Fs(cdspell)144 b Ft(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 Fs(cd)1110 408 y Ft(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 518 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 628 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
+737 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 894 y Fs(checkhash)1110
+1004 y Ft(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 1114
+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 1223
+y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)630
+1380 y Fs(checkwinsize)1110 1490 y Ft(If)41 b(set,)k(Bash)c(c)m(hec)m
+(ks)i(the)f(windo)m(w)e(size)j(after)f(eac)m(h)g(command)f(and,)j(if)
+1110 1600 y(necessary)-8 b(,)31 b(up)s(dates)f(the)g(v)-5
+b(alues)31 b(of)g Fs(LINES)e Ft(and)g Fs(COLUMNS)p Ft(.)630
+1757 y Fs(cmdhist)144 b Ft(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
+1866 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
+1976 y(commands.)630 2133 y Fs(dotglob)144 b Ft(If)27
+b(set,)i(Bash)f(includes)g(\014lenames)g(b)s(eginning)f(with)g(a)h(`.')
+41 b(in)27 b(the)h(results)g(of)1110 2243 y(\014lename)j(expansion.)630
+2400 y Fs(execfail)96 b Ft(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 2510 y(the)i(\014le)g(sp)s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to)
+h(the)f Fs(exec)f Ft(builtin)h(command.)39 b(An)1110
+2619 y(in)m(teractiv)m(e)33 b(shell)e(do)s(es)f(not)g(exit)i(if)e
+Fs(exec)f Ft(fails.)630 2777 y Fs(expand_aliases)1110
+2886 y Ft(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 2996 y(tion)38
+b(6.6)h([Aliases],)j(page)d(71.)64 b(This)37 b(option)h(is)g(enabled)g
+(b)m(y)g(default)g(for)1110 3105 y(in)m(teractiv)m(e)33
b(shells.)630 3263 y Fs(extdebug)96 b Ft(If)30 b(set,)h(b)s(eha)m(vior)
-f(in)m(tended)f(for)h(use)g(b)m(y)g(debuggers)g(is)g(enabled:)1159
-3396 y(1.)61 b(The)32 b(`)p Fs(-F)p Ft(')g(option)g(to)h(the)g
-Fs(declare)d Ft(builtin)f(\(see)34 b(Section)e(4.2)i([Bash)1290
-3506 y(Builtins],)26 b(page)j(39\))g(displa)m(ys)d(the)i(source)h
-(\014le)e(name)h(and)f(line)f(n)m(um-)1290 3615 y(b)s(er)j(corresp)s
-(onding)f(to)j(eac)m(h)g(function)e(name)h(supplied)d(as)k(an)f(argu-)
+g(in)m(tended)f(for)g(use)g(b)m(y)g(debuggers)g(is)h(enabled:)1159
+3396 y(1.)61 b(The)32 b(`)p Fs(-F)p Ft(')g(option)h(to)g(the)g
+Fs(declare)d Ft(builtin)i(\(see)i(Section)f(4.2)h([Bash)1290
+3506 y(Builtins],)29 b(page)g(39\))g(displa)m(ys)f(the)g(source)h
+(\014le)f(name)g(and)f(line)h(n)m(um-)1290 3615 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 3725 y(men)m(t.)1159 3858 y(2.)61 b(If)20 b(the)h(command)g(run)e
(b)m(y)i(the)f Fs(DEBUG)g Ft(trap)g(returns)g(a)h(non-zero)g(v)-5
-b(alue,)1290 3968 y(the)31 b(next)f(command)g(is)g(skipp)s(ed)e(and)h
+b(alue,)1290 3968 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g
(not)i(executed.)1159 4101 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m
-(y)i(the)f Fs(DEBUG)f Ft(trap)h(returns)f(a)i(v)-5 b(alue)37
-b(of)g(2,)1290 4211 y(and)c(the)g(shell)f(is)g(executing)i(in)e(a)i
-(subroutine)d(\(a)j(shell)e(function)g(or)1290 4320 y(a)i(shell)f
-(script)g(executed)i(b)m(y)f(the)g Fs(.)g Ft(or)g Fs(source)e
-Ft(builtins\),)g(a)j(call)e(to)1290 4430 y Fs(return)c
-Ft(is)g(sim)m(ulated.)630 4587 y Fs(extglob)144 b Ft(If)26
-b(set,)i(the)f(extended)f(pattern)h(matc)m(hing)f(features)h(describ)s
-(ed)d(ab)s(o)m(v)m(e)k(\(see)1110 4697 y(Section)i(3.5.8.1)j([P)m
-(attern)f(Matc)m(hing],)f(page)g(23\))h(are)f(enabled.)630
+(y)i(the)f Fs(DEBUG)f Ft(trap)h(returns)f(a)i(v)-5 b(alue)38
+b(of)f(2,)1290 4211 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 4320 y(a)h(shell)h
+(script)f(executed)h(b)m(y)f(the)g Fs(.)g Ft(or)g Fs(source)e
+Ft(builtins\),)j(a)g(call)g(to)1290 4430 y Fs(return)29
+b Ft(is)h(sim)m(ulated.)630 4587 y Fs(extglob)144 b Ft(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 4697 y(Section)j(3.5.8.1)i([P)m
+(attern)f(Matc)m(hing],)g(page)f(23\))h(are)f(enabled.)630
4854 y Fs(extquote)96 b Ft(If)49 b(set,)54 b Fs($')p
Fj(string)11 b Fs(')46 b Ft(and)j Fs($")p Fj(string)11
-b Fs(")46 b Ft(quoting)j(is)f(p)s(erformed)f(within)1110
-4964 y Fs(${)p Fj(parameter)11 b Fs(})30 b Ft(expansions)i(enclosed)h
-(in)g(double)f(quotes.)51 b(This)31 b(option)1110 5073
-y(is)e(enabled)h(b)m(y)g(default.)630 5230 y Fs(failglob)96
-b Ft(If)30 b(set,)g(patterns)g(whic)m(h)f(fail)g(to)i(matc)m(h)g
-(\014lenames)e(during)e(pathname)j(ex-)1110 5340 y(pansion)f(result)g
-(in)g(an)h(expansion)g(error.)p eop
+b Fs(")46 b Ft(quoting)k(is)f(p)s(erformed)e(within)1110
+4964 y Fs(${)p Fj(parameter)11 b Fs(})30 b Ft(expansions)j(enclosed)h
+(in)g(double)f(quotes.)51 b(This)32 b(option)1110 5073
+y(is)e(enabled)h(b)m(y)f(default.)630 5230 y Fs(failglob)96
+b Ft(If)30 b(set,)g(patterns)g(whic)m(h)g(fail)h(to)g(matc)m(h)g
+(\014lenames)f(during)e(pathname)i(ex-)1110 5340 y(pansion)g(result)g
+(in)g(an)g(expansion)h(error.)p eop end
%%Page: 47 53
-47 52 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(47)630 299 y Fs(force_fignore)1110
-408 y Ft(If)43 b(set,)k(the)d(su\016xes)f(sp)s(eci\014ed)e(b)m(y)j(the)
-f Fs(FIGNORE)f Ft(shell)f(v)-5 b(ariable)42 b(cause)1110
-518 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)g(when)g(p)s(erforming)e(w)m
-(ord)i(completion)g(ev)m(en)h(if)f(the)1110 628 y(ignored)36
-b(w)m(ords)h(are)g(the)h(only)e(p)s(ossible)f(completions.)60
-b(See)37 b(Section)g(5.2)1110 737 y([Bash)24 b(V)-8 b(ariables],)25
-b(page)g(55,)h(for)d(a)h(description)e(of)i Fs(FIGNORE)p
-Ft(.)37 b(This)21 b(option)1110 847 y(is)29 b(enabled)h(b)m(y)g
+TeXDict begin 47 52 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(47)630 299 y Fs(force_fignore)
+1110 408 y Ft(If)43 b(set,)k(the)d(su\016xes)f(sp)s(eci\014ed)f(b)m(y)i
+(the)f Fs(FIGNORE)f Ft(shell)h(v)-5 b(ariable)44 b(cause)1110
+518 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 628 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 737 y([Bash)24 b(V)-8 b(ariables],)27
+b(page)e(55,)h(for)d(a)h(description)g(of)g Fs(FIGNORE)p
+Ft(.)37 b(This)22 b(option)1110 847 y(is)30 b(enabled)h(b)m(y)f
(default.)630 1011 y Fs(gnu_errfmt)1110 1121 y Ft(If)35
-b(set,)j(shell)c(error)i(messages)g(are)h(written)d(in)h(the)h
+b(set,)j(shell)e(error)g(messages)g(are)h(written)e(in)h(the)g
(standard)f Fl(gnu)g Ft(error)1110 1230 y(message)c(format.)630
-1395 y Fs(histappend)1110 1504 y Ft(If)c(set,)j(the)e(history)f(list)f
-(is)h(app)s(ended)f(to)j(the)f(\014le)f(named)g(b)m(y)h(the)g(v)-5
-b(alue)28 b(of)1110 1614 y(the)e Fs(HISTFILE)d Ft(v)-5
-b(ariable)24 b(when)g(the)h(shell)f(exits,)i(rather)f(than)h(o)m(v)m
+1395 y Fs(histappend)1110 1504 y Ft(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 1614 y(the)d Fs(HISTFILE)d Ft(v)-5
+b(ariable)26 b(when)e(the)h(shell)h(exits,)h(rather)e(than)h(o)m(v)m
(erwriting)1110 1724 y(the)31 b(\014le.)630 1888 y Fs(histreedit)1110
-1998 y Ft(If)i(set,)h(and)f(Readline)f(is)g(b)s(eing)g(used,)h(a)g
-(user)g(is)f(giv)m(en)h(the)h(opp)s(ortunit)m(y)1110
-2107 y(to)d(re-edit)f(a)h(failed)e(history)g(substitution.)630
-2271 y Fs(histverify)1110 2381 y Ft(If)35 b(set,)i(and)e(Readline)f(is)
-g(b)s(eing)g(used,)i(the)f(results)f(of)h(history)g(substitu-)1110
-2491 y(tion)h(are)h(not)g(immediately)e(passed)h(to)h(the)g(shell)e
-(parser.)59 b(Instead,)38 b(the)1110 2600 y(resulting)g(line)f(is)i
-(loaded)g(in)m(to)g(the)h(Readline)e(editing)g(bu\013er,)j(allo)m(wing)
+1998 y Ft(If)i(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g
+(user)g(is)g(giv)m(en)h(the)g(opp)s(ortunit)m(y)1110
+2107 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630
+2271 y Fs(histverify)1110 2381 y Ft(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
+2491 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 2600 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 2710 y(further)29 b(mo)s(di\014cation.)630 2874
-y Fs(hostcomplete)1110 2984 y Ft(If)38 b(set,)j(and)c(Readline)g(is)g
-(b)s(eing)g(used,)i(Bash)g(will)c(attempt)k(to)g(p)s(erform)1110
-3093 y(hostname)d(completion)f(when)g(a)h(w)m(ord)f(con)m(taining)g(a)h
-(`)p Fs(@)p Ft(')g(is)f(b)s(eing)f(com-)1110 3203 y(pleted)40
-b(\(see)h(Section)f(8.4.6)i([Commands)e(F)-8 b(or)41
-b(Completion],)g(page)g(99\).)1110 3313 y(This)29 b(option)g(is)h
-(enabled)f(b)m(y)h(default.)630 3477 y Fs(huponexit)1110
-3587 y Ft(If)i(set,)i(Bash)f(will)e(send)g Fs(SIGHUP)h
-Ft(to)h(all)f(jobs)g(when)g(an)g(in)m(teractiv)m(e)i(login)1110
-3696 y(shell)29 b(exits)h(\(see)h(Section)f(3.7.6)i([Signals],)e(page)h
+y Fs(hostcomplete)1110 2984 y Ft(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
+3093 y(hostname)d(completion)h(when)e(a)h(w)m(ord)f(con)m(taining)i(a)f
+(`)p Fs(@)p Ft(')g(is)g(b)s(eing)f(com-)1110 3203 y(pleted)41
+b(\(see)g(Section)g(8.4.6)h([Commands)e(F)-8 b(or)41
+b(Completion],)i(page)e(99\).)1110 3313 y(This)30 b(option)g(is)h
+(enabled)f(b)m(y)g(default.)630 3477 y Fs(huponexit)1110
+3587 y Ft(If)i(set,)i(Bash)f(will)h(send)d Fs(SIGHUP)h
+Ft(to)h(all)h(jobs)e(when)g(an)g(in)m(teractiv)m(e)k(login)1110
+3696 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g(page)f
(31\).)630 3861 y Fs(interactive_comments)1110 3970 y
-Ft(Allo)m(w)25 b(a)i(w)m(ord)e(b)s(eginning)e(with)i(`)p
-Fs(#)p Ft(')h(to)h(cause)f(that)h(w)m(ord)f(and)f(all)g(remain-)1110
-4080 y(ing)40 b(c)m(haracters)j(on)e(that)h(line)e(to)i(b)s(e)f
-(ignored)f(in)g(an)h(in)m(teractiv)m(e)h(shell.)1110
-4189 y(This)29 b(option)g(is)h(enabled)f(b)m(y)h(default.)630
-4354 y Fs(lithist)144 b Ft(If)22 b(enabled,)h(and)e(the)h
-Fs(cmdhist)e Ft(option)i(is)f(enabled,)i(m)m(ulti-line)c(commands)1110
-4463 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)f(with)f(em)m(b)s
-(edded)h(newlines)f(rather)i(than)f(using)1110 4573 y(semicolon)j
-(separators)h(where)e(p)s(ossible.)630 4737 y Fs(login_shell)1110
-4847 y Ft(The)35 b(shell)f(sets)i(this)e(option)h(if)g(it)g(is)f
-(started)i(as)g(a)g(login)e(shell)g(\(see)i(Sec-)1110
-4956 y(tion)28 b(6.1)h([In)m(v)m(oking)g(Bash],)g(page)g(63\).)41
-b(The)28 b(v)-5 b(alue)28 b(ma)m(y)h(not)f(b)s(e)g(c)m(hanged.)630
-5121 y Fs(mailwarn)96 b Ft(If)34 b(set,)i(and)e(a)h(\014le)f(that)h
-(Bash)f(is)g(c)m(hec)m(king)h(for)g(mail)e(has)h(b)s(een)g(accessed)
-1110 5230 y(since)23 b(the)i(last)f(time)f(it)h(w)m(as)g(c)m(hec)m(k)m
+Ft(Allo)m(w)c(a)g(w)m(ord)e(b)s(eginning)g(with)h(`)p
+Fs(#)p Ft(')g(to)h(cause)f(that)h(w)m(ord)f(and)f(all)i(remain-)1110
+4080 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
+4189 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630
+4354 y Fs(lithist)144 b Ft(If)22 b(enabled,)i(and)d(the)h
+Fs(cmdhist)e Ft(option)j(is)f(enabled,)i(m)m(ulti-line)f(commands)1110
+4463 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 4573 y(semicolon)32
+b(separators)f(where)e(p)s(ossible.)630 4737 y Fs(login_shell)1110
+4847 y Ft(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
+4956 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(63\).)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
+5121 y Fs(mailwarn)96 b Ft(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 5230 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 Fs("The)k(mail)h(in)f Fj(mail-)1110
-5340 y(file)40 b Fs(has)29 b(been)g(read")g Ft(is)h(displa)m(y)m(ed.)p
-eop
+5340 y(file)40 b Fs(has)29 b(been)g(read")g Ft(is)i(displa)m(y)m(ed.)p
+eop end
%%Page: 48 54
-48 53 bop 150 -116 a Ft(48)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y Fs(no_empty_cmd_completion)1110 408 y Ft(If)f(set,)g(and)g
-(Readline)e(is)i(b)s(eing)e(used,)i(Bash)g(will)d(not)j(attempt)i(to)e
-(searc)m(h)1110 518 y(the)25 b Fs(PATH)f Ft(for)h(p)s(ossible)d
-(completions)j(when)f(completion)g(is)g(attempted)i(on)1110
-628 y(an)k(empt)m(y)h(line.)630 779 y Fs(nocaseglob)1110
-889 y Ft(If)38 b(set,)k(Bash)d(matc)m(hes)g(\014lenames)f(in)f(a)i
-(case-insensitiv)m(e)g(fashion)e(when)1110 999 y(p)s(erforming)28
-b(\014lename)i(expansion.)630 1150 y Fs(nullglob)96 b
-Ft(If)23 b(set,)j(Bash)e(allo)m(ws)e(\014lename)h(patterns)h(whic)m(h)e
-(matc)m(h)i(no)g(\014les)e(to)j(expand)1110 1260 y(to)31
-b(a)g(n)m(ull)d(string,)i(rather)g(than)g(themselv)m(es.)630
-1412 y Fs(progcomp)96 b Ft(If)25 b(set,)i(the)f(programmable)f
-(completion)f(facilities)g(\(see)j(Section)e(8.6)i([Pro-)1110
-1521 y(grammable)44 b(Completion],)j(page)e(103\))h(are)f(enabled.)81
-b(This)43 b(option)h(is)1110 1631 y(enabled)29 b(b)m(y)i(default.)630
-1783 y Fs(promptvars)1110 1892 y Ft(If)24 b(set,)i(prompt)d(strings)g
-(undergo)g(parameter)i(expansion,)f(command)g(sub-)1110
-2002 y(stitution,)32 b(arithmetic)f(expansion,)h(and)f(quote)i(remo)m
-(v)-5 b(al)32 b(after)h(b)s(eing)d(ex-)1110 2111 y(panded)39
-b(as)i(describ)s(ed)d(b)s(elo)m(w)i(\(see)h(Section)f(6.9)h([Prin)m
-(ting)e(a)i(Prompt],)1110 2221 y(page)31 b(75\).)42 b(This)29
-b(option)g(is)h(enabled)f(b)m(y)h(default.)630 2373 y
-Fs(restricted_shell)1110 2482 y Ft(The)40 b(shell)f(sets)i(this)f
-(option)g(if)g(it)h(is)e(started)j(in)d(restricted)i(mo)s(de)f(\(see)
-1110 2592 y(Section)35 b(6.10)h([The)f(Restricted)f(Shell],)h(page)g
-(76\).)56 b(The)34 b(v)-5 b(alue)34 b(ma)m(y)i(not)1110
-2701 y(b)s(e)c(c)m(hanged.)49 b(This)31 b(is)h(not)i(reset)f(when)f
-(the)h(startup)g(\014les)e(are)j(executed,)1110 2811
-y(allo)m(wing)h(the)h(startup)f(\014les)g(to)h(disco)m(v)m(er)g
-(whether)g(or)f(not)i(a)f(shell)e(is)h(re-)1110 2921
-y(stricted.)630 3072 y Fs(shift_verbose)1110 3182 y Ft(If)h(this)f(is)g
-(set,)k(the)d Fs(shift)f Ft(builtin)e(prin)m(ts)h(an)i(error)g(message)
-i(when)d(the)1110 3292 y(shift)29 b(coun)m(t)i(exceeds)g(the)g(n)m(um)m
-(b)s(er)e(of)h(p)s(ositional)f(parameters.)630 3443 y
+TeXDict begin 48 53 bop 150 -116 a Ft(48)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y Fs(no_empty_cmd_completion)1110
+408 y Ft(If)f(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 518 y(the)25
+b Fs(PATH)f Ft(for)h(p)s(ossible)f(completions)j(when)d(completion)i
+(is)f(attempted)h(on)1110 628 y(an)k(empt)m(y)h(line.)630
+779 y Fs(nocaseglob)1110 889 y Ft(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
+999 y(p)s(erforming)29 b(\014lename)i(expansion.)630
+1150 y Fs(nullglob)96 b Ft(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 1260 y(to)31 b(a)g(n)m(ull)f(string,)h(rather)f(than)g
+(themselv)m(es.)630 1412 y Fs(progcomp)96 b Ft(If)25
+b(set,)i(the)f(programmable)g(completion)g(facilities)i(\(see)f
+(Section)f(8.6)h([Pro-)1110 1521 y(grammable)45 b(Completion],)k(page)c
+(103\))h(are)f(enabled.)82 b(This)44 b(option)h(is)1110
+1631 y(enabled)30 b(b)m(y)h(default.)630 1783 y Fs(promptvars)1110
+1892 y Ft(If)24 b(set,)i(prompt)d(strings)h(undergo)f(parameter)i
+(expansion,)g(command)f(sub-)1110 2002 y(stitution,)34
+b(arithmetic)f(expansion,)g(and)e(quote)i(remo)m(v)-5
+b(al)33 b(after)g(b)s(eing)e(ex-)1110 2111 y(panded)39
+b(as)i(describ)s(ed)e(b)s(elo)m(w)i(\(see)g(Section)g(6.9)g([Prin)m
+(ting)g(a)g(Prompt],)1110 2221 y(page)31 b(75\).)42 b(This)30
+b(option)g(is)h(enabled)f(b)m(y)g(default.)630 2373 y
+Fs(restricted_shell)1110 2482 y Ft(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 2592 y(Section)c(6.10)g([The)f(Restricted)g(Shell],)i(page)e
+(76\).)56 b(The)34 b(v)-5 b(alue)35 b(ma)m(y)h(not)1110
+2701 y(b)s(e)c(c)m(hanged.)49 b(This)32 b(is)h(not)h(reset)f(when)f
+(the)h(startup)g(\014les)f(are)i(executed,)1110 2811
+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 2921
+y(stricted.)630 3072 y Fs(shift_verbose)1110 3182 y Ft(If)g(this)g(is)g
+(set,)j(the)d Fs(shift)f Ft(builtin)h(prin)m(ts)f(an)h(error)g(message)
+i(when)d(the)1110 3292 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 3443 y
Fs(sourcepath)1110 3553 y Ft(If)22 b(set,)j(the)e Fs(source)e
-Ft(builtin)e(uses)j(the)h(v)-5 b(alue)22 b(of)h Fs(PATH)e
-Ft(to)j(\014nd)d(the)h(directory)1110 3662 y(con)m(taining)27
-b(the)g(\014le)g(supplied)d(as)j(an)g(argumen)m(t.)40
-b(This)26 b(option)h(is)f(enabled)1110 3772 y(b)m(y)k(default.)630
+Ft(builtin)h(uses)g(the)h(v)-5 b(alue)23 b(of)g Fs(PATH)e
+Ft(to)j(\014nd)d(the)h(directory)1110 3662 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 3772 y(b)m(y)j(default.)630
3924 y Fs(xpg_echo)96 b Ft(If)31 b(set,)h(the)g Fs(echo)e
-Ft(builtin)e(expands)i(bac)m(kslash-escap)s(e)i(sequences)g(b)m(y)f
+Ft(builtin)h(expands)f(bac)m(kslash-escap)s(e)j(sequences)f(b)m(y)f
(de-)1110 4033 y(fault.)630 4185 y(The)c(return)f(status)i(when)f
-(listing)e(options)i(is)f(zero)j(if)d(all)h Fq(optnames)k
-Ft(are)d(enabled,)f(non-)630 4295 y(zero)40 b(otherwise.)65
-b(When)39 b(setting)g(or)g(unsetting)f(options,)i(the)f(return)f
-(status)h(is)f(zero)630 4404 y(unless)29 b(an)h Fq(optname)36
-b Ft(is)29 b(not)i(a)g(v)-5 b(alid)28 b(shell)h(option.)150
+(listing)h(options)g(is)f(zero)i(if)e(all)i Fq(optnames)i
+Ft(are)d(enabled,)g(non-)630 4295 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 4404 y(unless)30 b(an)g Fq(optname)36
+b Ft(is)30 b(not)h(a)g(v)-5 b(alid)30 b(shell)h(option.)150
4556 y Fs(source)870 4687 y(source)46 b Fj(filename)630
-4817 y Ft(A)30 b(synon)m(ym)g(for)g Fs(.)g Ft(\(see)i(Section)e(4.1)h
-([Bourne)g(Shell)d(Builtins],)g(page)j(33\).)150 4969
+4817 y Ft(A)30 b(synon)m(ym)g(for)g Fs(.)g Ft(\(see)i(Section)f(4.1)g
+([Bourne)g(Shell)f(Builtins],)h(page)g(33\).)150 4969
y Fs(type)870 5100 y(type)47 b([-afptP])e([)p Fj(name)57
b Fs(...)o(])630 5230 y Ft(F)-8 b(or)42 b(eac)m(h)g Fq(name)p
-Ft(,)i(indicate)c(ho)m(w)i(it)e(w)m(ould)g(b)s(e)h(in)m(terpreted)f(if)
-g(used)g(as)i(a)f(command)630 5340 y(name.)p eop
+Ft(,)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 5340 y(name.)p eop end
%%Page: 49 55
-49 54 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(49)630 299 y(If)38 b(the)g(`)p
-Fs(-t)p Ft(')g(option)f(is)g(used,)j Fs(type)d Ft(prin)m(ts)f(a)j
-(single)d(w)m(ord)i(whic)m(h)f(is)g(one)h(of)h(`)p Fs(alias)p
-Ft(',)630 408 y(`)p Fs(function)p Ft(',)32 b(`)p Fs(builtin)p
-Ft(',)g(`)p Fs(file)p Ft(')g(or)h(`)p Fs(keyword)p Ft(',)f(if)g
-Fq(name)38 b Ft(is)32 b(an)g(alias,)h(shell)e(function,)630
-518 y(shell)i(builtin,)f(disk)i(\014le,)h(or)f(shell)f(reserv)m(ed)i(w)
-m(ord,)h(resp)s(ectiv)m(ely)-8 b(.)53 b(If)34 b(the)h
-Fq(name)40 b Ft(is)34 b(not)630 628 y(found,)29 b(then)h(nothing)g(is)f
-(prin)m(ted,)g(and)h Fs(type)f Ft(returns)g(a)i(failure)e(status.)630
-763 y(If)39 b(the)g(`)p Fs(-p)p Ft(')g(option)g(is)f(used,)j
-Fs(type)d Ft(either)g(returns)g(the)i(name)f(of)g(the)g(disk)f(\014le)g
-(that)630 873 y(w)m(ould)29 b(b)s(e)h(executed,)h(or)g(nothing)e(if)g
-(`)p Fs(-t)p Ft(')i(w)m(ould)e(not)h(return)g(`)p Fs(file)p
-Ft('.)630 1008 y(The)23 b(`)p Fs(-P)p Ft(')h(option)f(forces)h(a)g
-(path)g(searc)m(h)g(for)g(eac)m(h)g Fq(name)p Ft(,)i(ev)m(en)e(if)f(`)p
-Fs(-t)p Ft(')h(w)m(ould)e(not)i(return)630 1118 y(`)p
-Fs(file)p Ft('.)630 1253 y(If)34 b(a)i(command)e(is)g(hashed,)h(`)p
-Fs(-p)p Ft(')g(and)f(`)p Fs(-P)p Ft(')h(prin)m(t)e(the)i(hashed)f(v)-5
-b(alue,)36 b(not)f(necessarily)630 1363 y(the)c(\014le)e(that)i(app)s
-(ears)f(\014rst)f(in)g Fs($PATH)p Ft(.)630 1499 y(If)36
-b(the)h(`)p Fs(-a)p Ft(')g(option)f(is)g(used,)h Fs(type)f
-Ft(returns)f(all)h(of)h(the)g(places)f(that)h(con)m(tain)g(an)g(exe-)
-630 1608 y(cutable)c(named)g Fq(\014le)p Ft(.)49 b(This)32
-b(includes)f(aliases)i(and)g(functions,)g(if)f(and)h(only)g(if)f(the)i
-(`)p Fs(-p)p Ft(')630 1718 y(option)c(is)f(not)i(also)f(used.)630
-1853 y(If)c(the)h(`)p Fs(-f)p Ft(')g(option)f(is)g(used,)h
-Fs(type)e Ft(do)s(es)i(not)g(attempt)g(to)h(\014nd)d(shell)g
-(functions,)h(as)h(with)630 1963 y(the)k Fs(command)d
-Ft(builtin.)630 2098 y(The)35 b(return)g(status)h(is)f(zero)h(if)f(an)m
-(y)h(of)g(the)g Fq(names)k Ft(are)c(found,)g(non-zero)g(if)f(none)h
+TeXDict begin 49 54 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(49)630 299 y(If)38
+b(the)g(`)p Fs(-t)p Ft(')g(option)g(is)g(used,)i Fs(type)d
+Ft(prin)m(ts)g(a)i(single)f(w)m(ord)g(whic)m(h)g(is)g(one)g(of)h(`)p
+Fs(alias)p Ft(',)630 408 y(`)p Fs(function)p Ft(',)32
+b(`)p Fs(builtin)p Ft(',)g(`)p Fs(file)p Ft(')g(or)h(`)p
+Fs(keyword)p Ft(',)f(if)h Fq(name)38 b Ft(is)33 b(an)f(alias,)j(shell)e
+(function,)630 518 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 Fq(name)40 b Ft(is)35 b(not)630 628 y(found,)29
+b(then)h(nothing)h(is)f(prin)m(ted,)g(and)g Fs(type)f
+Ft(returns)g(a)i(failure)g(status.)630 763 y(If)39 b(the)g(`)p
+Fs(-p)p Ft(')g(option)h(is)f(used,)i Fs(type)d Ft(either)h(returns)f
+(the)i(name)f(of)g(the)g(disk)g(\014le)g(that)630 873
+y(w)m(ould)30 b(b)s(e)g(executed,)h(or)g(nothing)f(if)g(`)p
+Fs(-t)p Ft(')h(w)m(ould)f(not)g(return)g(`)p Fs(file)p
+Ft('.)630 1008 y(The)23 b(`)p Fs(-P)p Ft(')h(option)g(forces)g(a)g
+(path)g(searc)m(h)g(for)g(eac)m(h)g Fq(name)p Ft(,)i(ev)m(en)e(if)g(`)p
+Fs(-t)p Ft(')g(w)m(ould)f(not)h(return)630 1118 y(`)p
+Fs(file)p Ft('.)630 1253 y(If)34 b(a)i(command)e(is)h(hashed,)g(`)p
+Fs(-p)p Ft(')g(and)f(`)p Fs(-P)p Ft(')h(prin)m(t)f(the)h(hashed)f(v)-5
+b(alue,)37 b(not)e(necessarily)630 1363 y(the)c(\014le)f(that)h(app)s
+(ears)f(\014rst)f(in)h Fs($PATH)p Ft(.)630 1499 y(If)36
+b(the)h(`)p Fs(-a)p Ft(')g(option)g(is)g(used,)g Fs(type)f
+Ft(returns)f(all)j(of)f(the)g(places)g(that)g(con)m(tain)h(an)f(exe-)
+630 1608 y(cutable)d(named)f Fq(\014le)p Ft(.)50 b(This)33
+b(includes)g(aliases)i(and)e(functions,)h(if)f(and)g(only)h(if)f(the)h
+(`)p Fs(-p)p Ft(')630 1718 y(option)d(is)f(not)h(also)g(used.)630
+1853 y(If)26 b(the)h(`)p Fs(-f)p Ft(')g(option)g(is)g(used,)g
+Fs(type)e Ft(do)s(es)i(not)g(attempt)g(to)h(\014nd)d(shell)i
+(functions,)g(as)g(with)630 1963 y(the)k Fs(command)d
+Ft(builtin.)630 2098 y(The)35 b(return)g(status)h(is)g(zero)g(if)g(an)m
+(y)g(of)g(the)g Fq(names)k Ft(are)c(found,)g(non-zero)g(if)g(none)g
(are)630 2208 y(found.)150 2370 y Fs(typeset)870 2505
y(typeset)46 b([-afFrxi])f([-p])i([)p Fj(name)11 b Fs([=)p
Fj(value)g Fs(])43 b(...)o(])630 2641 y Ft(The)29 b Fs(typeset)f
-Ft(command)h(is)f(supplied)f(for)i(compatibilit)m(y)f(with)g(the)i
-(Korn)e(shell;)h(ho)m(w-)630 2750 y(ev)m(er,)i(it)f(has)g(b)s(een)g
-(deprecated)h(in)e(fa)m(v)m(or)j(of)e(the)h Fs(declare)d
-Ft(builtin)f(command.)150 2912 y Fs(ulimit)870 3047 y(ulimit)46
+Ft(command)h(is)g(supplied)g(for)g(compatibilit)m(y)j(with)d(the)h
+(Korn)e(shell;)j(ho)m(w-)630 2750 y(ev)m(er,)g(it)g(has)f(b)s(een)g
+(deprecated)h(in)f(fa)m(v)m(or)i(of)e(the)h Fs(declare)d
+Ft(builtin)i(command.)150 2912 y Fs(ulimit)870 3047 y(ulimit)46
b([-acdflmnpstuvSH])d([)p Fj(limit)11 b Fs(])630 3183
-y(ulimit)25 b Ft(pro)m(vides)g(con)m(trol)i(o)m(v)m(er)h(the)f
-(resources)f(a)m(v)-5 b(ailable)26 b(to)h(pro)s(cesses)f(started)h(b)m
-(y)g(the)630 3292 y(shell,)g(on)h(systems)g(that)h(allo)m(w)f(suc)m(h)g
-(con)m(trol.)40 b(If)28 b(an)g(option)g(is)f(giv)m(en,)i(it)e(is)h(in)m
-(terpreted)630 3402 y(as)j(follo)m(ws:)630 3563 y Fs(-S)384
-b Ft(Change)30 b(and)g(rep)s(ort)g(the)g(soft)h(limit)d(asso)s(ciated)j
-(with)e(a)i(resource.)630 3725 y Fs(-H)384 b Ft(Change)30
-b(and)g(rep)s(ort)g(the)g(hard)g(limit)e(asso)s(ciated)j(with)e(a)i
-(resource.)630 3886 y Fs(-a)384 b Ft(All)29 b(curren)m(t)h(limits)e
-(are)j(rep)s(orted.)630 4048 y Fs(-c)384 b Ft(The)30
-b(maxim)m(um)f(size)h(of)h(core)g(\014les)e(created.)630
-4209 y Fs(-d)384 b Ft(The)30 b(maxim)m(um)f(size)h(of)h(a)g(pro)s
+y(ulimit)25 b Ft(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 3292 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 3402 y(as)i(follo)m(ws:)630 3563 y Fs(-S)384
+b Ft(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 3725 y Fs(-H)384 b Ft(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 3886 y Fs(-a)384 b Ft(All)31 b(curren)m(t)f(limits)h
+(are)g(rep)s(orted.)630 4048 y Fs(-c)384 b Ft(The)30
+b(maxim)m(um)g(size)h(of)g(core)g(\014les)f(created.)630
+4209 y Fs(-d)384 b Ft(The)30 b(maxim)m(um)g(size)h(of)g(a)g(pro)s
(cess's)f(data)h(segmen)m(t.)630 4371 y Fs(-f)384 b Ft(The)30
-b(maxim)m(um)f(size)h(of)h(\014les)e(created)j(b)m(y)e(the)g(shell.)630
-4532 y Fs(-l)384 b Ft(The)30 b(maxim)m(um)f(size)h(that)h(ma)m(y)g(b)s
-(e)f(lo)s(c)m(k)m(ed)h(in)m(to)f(memory)-8 b(.)630 4694
-y Fs(-m)384 b Ft(The)30 b(maxim)m(um)f(residen)m(t)h(set)h(size.)630
-4855 y Fs(-n)384 b Ft(The)30 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i(op)s
-(en)e(\014le)h(descriptors.)630 5017 y Fs(-p)384 b Ft(The)30
-b(pip)s(e)e(bu\013er)i(size.)630 5178 y Fs(-s)384 b Ft(The)30
-b(maxim)m(um)f(stac)m(k)j(size.)630 5340 y Fs(-t)384
-b Ft(The)30 b(maxim)m(um)f(amoun)m(t)i(of)f(cpu)g(time)g(in)f(seconds.)
-p eop
+b(maxim)m(um)g(size)h(of)g(\014les)f(created)i(b)m(y)e(the)g(shell.)630
+4532 y Fs(-l)384 b Ft(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 4694
+y Fs(-m)384 b Ft(The)30 b(maxim)m(um)g(residen)m(t)h(set)g(size.)630
+4855 y Fs(-n)384 b Ft(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(op)s
+(en)e(\014le)i(descriptors.)630 5017 y Fs(-p)384 b Ft(The)30
+b(pip)s(e)f(bu\013er)h(size.)630 5178 y Fs(-s)384 b Ft(The)30
+b(maxim)m(um)g(stac)m(k)i(size.)630 5340 y Fs(-t)384
+b Ft(The)30 b(maxim)m(um)g(amoun)m(t)h(of)f(cpu)g(time)h(in)f(seconds.)
+p eop end
%%Page: 50 56
-50 55 bop 150 -116 a Ft(50)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y Fs(-u)384 b Ft(The)30 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i(pro)s
-(cesses)f(a)m(v)-5 b(ailable)30 b(to)h(a)f(single)g(user.)630
-458 y Fs(-v)384 b Ft(The)29 b(maxim)m(um)g(amoun)m(t)h(of)g(virtual)e
-(memory)i(a)m(v)-5 b(ailable)29 b(to)h(the)g(pro)s(cess.)630
-617 y(If)j Fq(limit)g Ft(is)g(giv)m(en,)h(it)f(is)g(the)h(new)f(v)-5
-b(alue)33 b(of)g(the)h(sp)s(eci\014ed)e(resource;)j(the)f(sp)s(ecial)e
-Fq(limit)630 727 y Ft(v)-5 b(alues)26 b Fs(hard)p Ft(,)h
+TeXDict begin 50 55 bop 150 -116 a Ft(50)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y Fs(-u)384 b Ft(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 458 y Fs(-v)384
+b Ft(The)29 b(maxim)m(um)h(amoun)m(t)g(of)g(virtual)g(memory)g(a)m(v)-5
+b(ailable)32 b(to)e(the)g(pro)s(cess.)630 617 y(If)j
+Fq(limit)j Ft(is)e(giv)m(en,)h(it)f(is)g(the)g(new)f(v)-5
+b(alue)34 b(of)f(the)h(sp)s(eci\014ed)f(resource;)i(the)f(sp)s(ecial)g
+Fq(limit)630 727 y Ft(v)-5 b(alues)27 b Fs(hard)p Ft(,)g
Fs(soft)p Ft(,)g(and)g Fs(unlimited)d Ft(stand)j(for)g(the)g(curren)m
-(t)g(hard)f(limit,)g(the)h(curren)m(t)630 836 y(soft)35
-b(limit,)f(and)h(no)f(limit,)g(resp)s(ectiv)m(ely)-8
-b(.)54 b(Otherwise,)35 b(the)g(curren)m(t)g(v)-5 b(alue)34
-b(of)h(the)h(soft)630 946 y(limit)i(for)i(the)h(sp)s(eci\014ed)e
-(resource)i(is)e(prin)m(ted,)j(unless)d(the)h(`)p Fs(-H)p
-Ft(')h(option)e(is)h(supplied.)630 1056 y(When)29 b(setting)g(new)f
-(limits,)f(if)h(neither)g(`)p Fs(-H)p Ft(')g(nor)h(`)p
-Fs(-S)p Ft(')f(is)g(supplied,)f(b)s(oth)h(the)h(hard)f(and)630
-1165 y(soft)37 b(limits)d(are)j(set.)60 b(If)36 b(no)g(option)g(is)g
-(giv)m(en,)i(then)e(`)p Fs(-f)p Ft(')h(is)e(assumed.)59
-b(V)-8 b(alues)36 b(are)h(in)630 1275 y(1024-b)m(yte)27
-b(incremen)m(ts,)f(except)f(for)f(`)p Fs(-t)p Ft(',)i(whic)m(h)d(is)h
-(in)f(seconds,)j(`)p Fs(-p)p Ft(',)g(whic)m(h)d(is)g(in)h(units)630
-1384 y(of)31 b(512-b)m(yte)h(blo)s(c)m(ks,)e(and)g(`)p
-Fs(-n)p Ft(')g(and)g(`)p Fs(-u)p Ft(',)h(whic)m(h)e(are)h(unscaled)g(v)
--5 b(alues.)630 1519 y(The)34 b(return)g(status)h(is)e(zero)j(unless)d
-(an)h(in)m(v)-5 b(alid)33 b(option)h(or)g(argumen)m(t)i(is)d(supplied,)
-g(or)630 1628 y(an)d(error)g(o)s(ccurs)g(while)f(setting)h(a)h(new)f
+(t)g(hard)f(limit,)j(the)e(curren)m(t)630 836 y(soft)35
+b(limit,)i(and)e(no)f(limit,)j(resp)s(ectiv)m(ely)-8
+b(.)56 b(Otherwise,)36 b(the)f(curren)m(t)g(v)-5 b(alue)35
+b(of)g(the)h(soft)630 946 y(limit)41 b(for)f(the)h(sp)s(eci\014ed)f
+(resource)h(is)f(prin)m(ted,)j(unless)d(the)g(`)p Fs(-H)p
+Ft(')h(option)f(is)h(supplied.)630 1056 y(When)29 b(setting)h(new)e
+(limits,)i(if)f(neither)g(`)p Fs(-H)p Ft(')f(nor)h(`)p
+Fs(-S)p Ft(')f(is)h(supplied,)g(b)s(oth)f(the)h(hard)f(and)630
+1165 y(soft)37 b(limits)g(are)g(set.)60 b(If)36 b(no)g(option)h(is)g
+(giv)m(en,)i(then)d(`)p Fs(-f)p Ft(')h(is)f(assumed.)59
+b(V)-8 b(alues)37 b(are)g(in)630 1275 y(1024-b)m(yte)27
+b(incremen)m(ts,)g(except)e(for)f(`)p Fs(-t)p Ft(',)i(whic)m(h)e(is)h
+(in)f(seconds,)i(`)p Fs(-p)p Ft(',)g(whic)m(h)e(is)g(in)h(units)630
+1384 y(of)31 b(512-b)m(yte)h(blo)s(c)m(ks,)f(and)f(`)p
+Fs(-n)p Ft(')g(and)g(`)p Fs(-u)p Ft(',)h(whic)m(h)f(are)g(unscaled)h(v)
+-5 b(alues.)630 1519 y(The)34 b(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 1628 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f
(limit.)150 1787 y Fs(unalias)870 1922 y(unalias)46 b([-a])g([)p
Fj(name)57 b Fs(...)47 b(])630 2056 y Ft(Remo)m(v)m(e)39
-b(eac)m(h)f Fq(name)k Ft(from)36 b(the)h(list)f(of)h(aliases.)59
-b(If)36 b(`)p Fs(-a)p Ft(')h(is)f(supplied,)g(all)f(aliases)i(are)630
-2166 y(remo)m(v)m(ed.)42 b(Aliases)29 b(are)i(describ)s(ed)d(in)h
-(Section)i(6.6)g([Aliases],)f(page)h(71.)150 2423 y Fr(4.3)68
-b(The)45 b(Set)g(Builtin)275 2667 y Ft(This)28 b(builtin)f(is)i(so)i
-(complicated)f(that)h(it)f(deserv)m(es)h(its)f(o)m(wn)g(section.)150
+b(eac)m(h)f Fq(name)k Ft(from)36 b(the)h(list)h(of)f(aliases.)61
+b(If)36 b(`)p Fs(-a)p Ft(')h(is)g(supplied,)h(all)f(aliases)i(are)630
+2166 y(remo)m(v)m(ed.)j(Aliases)31 b(are)g(describ)s(ed)e(in)h(Section)
+i(6.6)f([Aliases],)h(page)f(71.)150 2423 y Fr(4.3)68
+b(The)45 b(Set)g(Builtin)275 2667 y Ft(This)29 b(builtin)h(is)g(so)h
+(complicated)h(that)f(it)g(deserv)m(es)g(its)g(o)m(wn)f(section.)150
2826 y Fs(set)870 2960 y(set)47 b([--abefhkmnptuvxBCHP])42
b([-o)47 b Fj(option)11 b Fs(])45 b([)p Fj(argument)56
-b Fs(...)o(])630 3095 y Ft(If)31 b(no)h(options)g(or)f(argumen)m(ts)i
-(are)f(supplied,)d Fs(set)i Ft(displa)m(ys)f(the)i(names)g(and)g(v)-5
-b(alues)31 b(of)630 3204 y(all)39 b(shell)f(v)-5 b(ariables)38
-b(and)h(functions,)i(sorted)f(according)f(to)i(the)f(curren)m(t)f(lo)s
-(cale,)j(in)d(a)630 3314 y(format)31 b(that)g(ma)m(y)g(b)s(e)e(reused)h
-(as)h(input.)630 3448 y(When)e(options)f(are)h(supplied,)d(they)j(set)h
-(or)f(unset)f(shell)f(attributes.)40 b(Options,)28 b(if)g(sp)s(ec-)630
-3558 y(i\014ed,)h(ha)m(v)m(e)j(the)e(follo)m(wing)f(meanings:)630
-3717 y Fs(-a)384 b Ft(Mark)32 b(v)-5 b(ariables)31 b(and)g(function)g
-(whic)m(h)g(are)h(mo)s(di\014ed)e(or)i(created)h(for)f(ex-)1110
-3827 y(p)s(ort)e(to)h(the)f(en)m(vironmen)m(t)g(of)h(subsequen)m(t)f
-(commands.)630 3986 y Fs(-b)384 b Ft(Cause)44 b(the)h(status)g(of)f
-(terminated)g(bac)m(kground)h(jobs)f(to)h(b)s(e)f(rep)s(orted)1110
-4095 y(immediately)-8 b(,)27 b(rather)g(than)f(b)s(efore)h(prin)m(ting)
-e(the)i(next)g(primary)f(prompt.)630 4255 y Fs(-e)384
-b Ft(Exit)36 b(immediately)f(if)g(a)i(simple)d(command)i(\(see)i
-(Section)e(3.2.1)i([Simple)1110 4364 y(Commands],)31
-b(page)i(8\))f(exits)f(with)g(a)h(non-zero)g(status,)g(unless)e(the)i
-(com-)1110 4474 y(mand)f(that)h(fails)f(is)g(part)g(of)h(the)g(command)
-g(list)e(immediately)g(follo)m(wing)1110 4583 y(a)41
-b Fs(while)d Ft(or)j Fs(until)e Ft(k)m(eyw)m(ord,)k(part)d(of)g(the)h
-(test)g(in)e(an)h Fs(if)g Ft(statemen)m(t,)1110 4693
-y(part)33 b(of)h(a)g Fs(&&)f Ft(or)g Fs(||)g Ft(list,)g(or)g(if)g(the)g
-(command's)h(return)e(status)i(is)e(b)s(eing)1110 4802
-y(in)m(v)m(erted)e(using)e Fs(!)p Ft(.)40 b(A)30 b(trap)f(on)h
-Fs(ERR)p Ft(,)f(if)g(set,)h(is)f(executed)i(b)s(efore)e(the)h(shell)
-1110 4912 y(exits.)630 5071 y Fs(-f)384 b Ft(Disable)29
-b(\014le)h(name)g(generation)h(\(globbing\).)630 5230
-y Fs(-h)384 b Ft(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)g(up)f(for)1110
-5340 y(execution.)41 b(This)28 b(option)i(is)g(enabled)f(b)m(y)h
-(default.)p eop
+b Fs(...)o(])630 3095 y Ft(If)31 b(no)h(options)h(or)e(argumen)m(ts)i
+(are)f(supplied,)f Fs(set)g Ft(displa)m(ys)h(the)g(names)g(and)g(v)-5
+b(alues)32 b(of)630 3204 y(all)41 b(shell)f(v)-5 b(ariables)40
+b(and)f(functions,)j(sorted)e(according)g(to)h(the)f(curren)m(t)f(lo)s
+(cale,)44 b(in)c(a)630 3314 y(format)31 b(that)g(ma)m(y)g(b)s(e)e
+(reused)h(as)h(input.)630 3448 y(When)e(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 3558 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i
+(meanings:)630 3717 y Fs(-a)384 b Ft(Mark)32 b(v)-5 b(ariables)33
+b(and)e(function)h(whic)m(h)g(are)g(mo)s(di\014ed)f(or)h(created)h(for)
+f(ex-)1110 3827 y(p)s(ort)e(to)h(the)f(en)m(vironmen)m(t)h(of)g
+(subsequen)m(t)f(commands.)630 3986 y Fs(-b)384 b Ft(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 4095 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
+4255 y Fs(-e)384 b Ft(Exit)37 b(immediately)h(if)e(a)h(simple)f
+(command)g(\(see)i(Section)f(3.2.1)h([Simple)1110 4364
+y(Commands],)31 b(page)i(8\))f(exits)g(with)g(a)g(non-zero)g(status,)g
+(unless)f(the)h(com-)1110 4474 y(mand)f(that)h(fails)h(is)f(part)f(of)h
+(the)g(command)g(list)g(immediately)h(follo)m(wing)1110
+4583 y(a)41 b Fs(while)d Ft(or)j Fs(until)e Ft(k)m(eyw)m(ord,)k(part)d
+(of)g(the)h(test)g(in)f(an)g Fs(if)g Ft(statemen)m(t,)1110
+4693 y(part)33 b(of)h(a)g Fs(&&)f Ft(or)g Fs(||)g Ft(list,)i(or)e(if)h
+(the)f(command's)h(return)e(status)i(is)f(b)s(eing)1110
+4802 y(in)m(v)m(erted)e(using)e Fs(!)p Ft(.)40 b(A)30
+b(trap)f(on)h Fs(ERR)p Ft(,)f(if)h(set,)g(is)g(executed)h(b)s(efore)e
+(the)h(shell)1110 4912 y(exits.)630 5071 y Fs(-f)384
+b Ft(Disable)31 b(\014le)g(name)f(generation)i(\(globbing\).)630
+5230 y Fs(-h)384 b Ft(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
+5340 y(execution.)42 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g
+(default.)p eop end
%%Page: 51 57
-51 56 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(51)630 299 y Fs(-k)384 b
-Ft(All)32 b(argumen)m(ts)i(in)e(the)i(form)f(of)g(assignmen)m(t)g
-(statemen)m(ts)j(are)d(placed)g(in)1110 408 y(the)38
-b(en)m(vironmen)m(t)f(for)h(a)g(command,)h(not)f(just)f(those)i(that)f
-(precede)g(the)1110 518 y(command)30 b(name.)630 677
-y Fs(-m)384 b Ft(Job)30 b(con)m(trol)h(is)e(enabled)h(\(see)h(Chapter)f
-(7)g([Job)h(Con)m(trol],)f(page)h(79\).)630 837 y Fs(-n)384
-b Ft(Read)21 b(commands)f(but)g(do)h(not)g(execute)h(them;)i(this)c(ma)
-m(y)h(b)s(e)f(used)g(to)h(c)m(hec)m(k)1110 946 y(a)42
-b(script)f(for)h(syn)m(tax)g(errors.)75 b(This)40 b(option)h(is)g
-(ignored)g(b)m(y)h(in)m(teractiv)m(e)1110 1056 y(shells.)630
-1215 y Fs(-o)30 b Fj(option-name)1110 1325 y Ft(Set)h(the)f(option)g
-(corresp)s(onding)e(to)j Fq(option-name)5 b Ft(:)1110
-1484 y Fs(allexport)1590 1594 y Ft(Same)30 b(as)h Fs(-a)p
-Ft(.)1110 1753 y Fs(braceexpand)1590 1863 y Ft(Same)f(as)h
-Fs(-B)p Ft(.)1110 2022 y Fs(emacs)240 b Ft(Use)25 b(an)f
-Fs(emacs)p Ft(-st)m(yle)g(line)e(editing)h(in)m(terface)i(\(see)h
-(Chapter)e(8)1590 2132 y([Command)30 b(Line)f(Editing],)g(page)i(83\).)
-1110 2291 y Fs(errexit)144 b Ft(Same)30 b(as)h Fs(-e)p
-Ft(.)1110 2451 y Fs(errtrace)96 b Ft(Same)30 b(as)h Fs(-E)p
-Ft(.)1110 2610 y Fs(functrace)1590 2720 y Ft(Same)f(as)h
-Fs(-T)p Ft(.)1110 2879 y Fs(hashall)144 b Ft(Same)30
-b(as)h Fs(-h)p Ft(.)1110 3039 y Fs(histexpand)1590 3148
-y Ft(Same)f(as)h Fs(-H)p Ft(.)1110 3308 y Fs(history)144
-b Ft(Enable)38 b(command)h(history)-8 b(,)41 b(as)e(describ)s(ed)e(in)h
-(Section)h(9.1)1590 3417 y([Bash)e(History)f(F)-8 b(acilities],)37
-b(page)g(109.)60 b(This)35 b(option)h(is)f(on)1590 3527
-y(b)m(y)30 b(default)g(in)f(in)m(teractiv)m(e)i(shells.)1110
-3686 y Fs(ignoreeof)1590 3796 y Ft(An)f(in)m(teractiv)m(e)h(shell)e
-(will)f(not)i(exit)g(up)s(on)f(reading)h(EOF.)1110 3955
+TeXDict begin 51 56 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(51)630 299 y Fs(-k)384
+b Ft(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 408 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
+518 y(command)30 b(name.)630 677 y Fs(-m)384 b Ft(Job)30
+b(con)m(trol)i(is)e(enabled)h(\(see)g(Chapter)f(7)g([Job)h(Con)m
+(trol],)g(page)g(79\).)630 837 y Fs(-n)384 b Ft(Read)21
+b(commands)f(but)g(do)h(not)g(execute)h(them;)i(this)d(ma)m(y)g(b)s(e)f
+(used)g(to)h(c)m(hec)m(k)1110 946 y(a)42 b(script)g(for)g(syn)m(tax)g
+(errors.)75 b(This)41 b(option)h(is)g(ignored)g(b)m(y)g(in)m(teractiv)m
+(e)1110 1056 y(shells.)630 1215 y Fs(-o)30 b Fj(option-name)1110
+1325 y Ft(Set)h(the)f(option)h(corresp)s(onding)e(to)i
+Fq(option-name)5 b Ft(:)1110 1484 y Fs(allexport)1590
+1594 y Ft(Same)30 b(as)h Fs(-a)p Ft(.)1110 1753 y Fs(braceexpand)1590
+1863 y Ft(Same)f(as)h Fs(-B)p Ft(.)1110 2022 y Fs(emacs)240
+b Ft(Use)25 b(an)f Fs(emacs)p Ft(-st)m(yle)h(line)f(editing)h(in)m
+(terface)h(\(see)g(Chapter)e(8)1590 2132 y([Command)30
+b(Line)g(Editing],)h(page)g(83\).)1110 2291 y Fs(errexit)144
+b Ft(Same)30 b(as)h Fs(-e)p Ft(.)1110 2451 y Fs(errtrace)96
+b Ft(Same)30 b(as)h Fs(-E)p Ft(.)1110 2610 y Fs(functrace)1590
+2720 y Ft(Same)f(as)h Fs(-T)p Ft(.)1110 2879 y Fs(hashall)144
+b Ft(Same)30 b(as)h Fs(-h)p Ft(.)1110 3039 y Fs(histexpand)1590
+3148 y Ft(Same)f(as)h Fs(-H)p Ft(.)1110 3308 y Fs(history)144
+b Ft(Enable)39 b(command)g(history)-8 b(,)42 b(as)d(describ)s(ed)f(in)h
+(Section)h(9.1)1590 3417 y([Bash)d(History)g(F)-8 b(acilities],)41
+b(page)c(109.)60 b(This)36 b(option)h(is)f(on)1590 3527
+y(b)m(y)30 b(default)h(in)f(in)m(teractiv)m(e)j(shells.)1110
+3686 y Fs(ignoreeof)1590 3796 y Ft(An)d(in)m(teractiv)m(e)j(shell)e
+(will)g(not)f(exit)h(up)s(on)e(reading)i(EOF.)1110 3955
y Fs(keyword)144 b Ft(Same)30 b(as)h Fs(-k)p Ft(.)1110
4115 y Fs(monitor)144 b Ft(Same)30 b(as)h Fs(-m)p Ft(.)1110
4274 y Fs(noclobber)1590 4384 y Ft(Same)f(as)h Fs(-C)p
Ft(.)1110 4543 y Fs(noexec)192 b Ft(Same)30 b(as)h Fs(-n)p
Ft(.)1110 4702 y Fs(noglob)192 b Ft(Same)30 b(as)h Fs(-f)p
-Ft(.)1110 4862 y Fs(nolog)240 b Ft(Curren)m(tly)29 b(ignored.)1110
+Ft(.)1110 4862 y Fs(nolog)240 b Ft(Curren)m(tly)30 b(ignored.)1110
5021 y Fs(notify)192 b Ft(Same)30 b(as)h Fs(-b)p Ft(.)1110
5181 y Fs(nounset)144 b Ft(Same)30 b(as)h Fs(-u)p Ft(.)1110
5340 y Fs(onecmd)192 b Ft(Same)30 b(as)h Fs(-t)p Ft(.)p
-eop
+eop end
%%Page: 52 58
-52 57 bop 150 -116 a Ft(52)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110
-299 y Fs(physical)96 b Ft(Same)30 b(as)h Fs(-P)p Ft(.)1110
-448 y Fs(pipefail)96 b Ft(If)44 b(set,)k(the)d(return)e(v)-5
-b(alue)44 b(of)g(a)h(pip)s(eline)40 b(is)k(the)g(v)-5
-b(alue)44 b(of)1590 557 y(the)33 b(last)g(\(righ)m(tmost\))h(command)f
-(to)h(exit)f(with)f(a)h(non-zero)1590 667 y(status,)28
-b(or)f(zero)g(if)e(all)h(commands)g(in)f(the)i(pip)s(eline)c(exit)k
-(suc-)1590 776 y(cessfully)-8 b(.)39 b(This)29 b(option)h(is)f
-(disabled)f(b)m(y)j(default.)1110 925 y Fs(posix)240
-b Ft(Change)36 b(the)g(b)s(eha)m(vior)f(of)h(Bash)g(where)f(the)h
-(default)f(op)s(er-)1590 1035 y(ation)c(di\013ers)e(from)h(the)h
-Fl(posix)f Ft(1003.2)k(standard)c(to)h(matc)m(h)1590
-1144 y(the)44 b(standard)f(\(see)h(Section)g(6.11)h([Bash)f(POSIX)e(Mo)
-s(de],)1590 1254 y(page)35 b(76\).)55 b(This)33 b(is)g(in)m(tended)h
-(to)h(mak)m(e)h(Bash)e(b)s(eha)m(v)m(e)i(as)f(a)1590
-1363 y(strict)30 b(sup)s(erset)f(of)i(that)g(standard.)1110
+TeXDict begin 52 57 bop 150 -116 a Ft(52)2572 b(Bash)31
+b(Reference)g(Man)m(ual)1110 299 y Fs(physical)96 b Ft(Same)30
+b(as)h Fs(-P)p Ft(.)1110 448 y Fs(pipefail)96 b Ft(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 557 y(the)33 b(last)h(\(righ)m(tmost\))
+h(command)e(to)h(exit)g(with)f(a)g(non-zero)1590 667
+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 776 y(cessfully)-8 b(.)41 b(This)30
+b(option)h(is)f(disabled)g(b)m(y)h(default.)1110 925
+y Fs(posix)240 b Ft(Change)36 b(the)g(b)s(eha)m(vior)g(of)g(Bash)g
+(where)f(the)h(default)g(op)s(er-)1590 1035 y(ation)c(di\013ers)e(from)
+g(the)h Fl(posix)f Ft(1003.2)k(standard)c(to)h(matc)m(h)1590
+1144 y(the)44 b(standard)f(\(see)h(Section)h(6.11)g([Bash)f(POSIX)e(Mo)
+s(de],)1590 1254 y(page)35 b(76\).)55 b(This)34 b(is)g(in)m(tended)h
+(to)g(mak)m(e)h(Bash)e(b)s(eha)m(v)m(e)i(as)f(a)1590
+1363 y(strict)c(sup)s(erset)e(of)i(that)g(standard.)1110
1512 y Fs(privileged)1590 1622 y Ft(Same)f(as)h Fs(-p)p
Ft(.)1110 1771 y Fs(verbose)144 b Ft(Same)30 b(as)h Fs(-v)p
Ft(.)1110 1919 y Fs(vi)384 b Ft(Use)31 b(a)g Fs(vi)p
-Ft(-st)m(yle)f(line)f(editing)g(in)m(terface.)1110 2068
+Ft(-st)m(yle)g(line)g(editing)g(in)m(terface.)1110 2068
y Fs(xtrace)192 b Ft(Same)30 b(as)h Fs(-x)p Ft(.)630
-2217 y Fs(-p)384 b Ft(T)-8 b(urn)33 b(on)h(privileged)e(mo)s(de.)51
-b(In)34 b(this)f(mo)s(de,)i(the)f Fs($BASH_ENV)e Ft(and)h
-Fs($ENV)1110 2326 y Ft(\014les)j(are)i(not)g(pro)s(cessed,)h(shell)d
-(functions)g(are)i(not)f(inherited)f(from)h(the)1110
-2436 y(en)m(vironmen)m(t,)e(and)e(the)h Fs(SHELLOPTS)e
-Ft(v)-5 b(ariable,)33 b(if)g(it)h(app)s(ears)f(in)g(the)h(en-)1110
-2545 y(vironmen)m(t,)c(is)f(ignored.)40 b(If)29 b(the)i(shell)d(is)h
-(started)i(with)e(the)h(e\013ectiv)m(e)i(user)1110 2655
-y(\(group\))e(id)f(not)h(equal)g(to)g(the)g(real)g(user)f(\(group\))i
-(id,)e(and)g(the)h Fs(-p)f Ft(option)1110 2765 y(is)39
-b(not)h(supplied,)g(these)g(actions)h(are)f(tak)m(en)h(and)f(the)g
-(e\013ectiv)m(e)i(user)d(id)1110 2874 y(is)c(set)i(to)h(the)e(real)g
-(user)g(id.)57 b(If)36 b(the)h Fs(-p)f Ft(option)f(is)h(supplied)d(at)k
-(startup,)1110 2984 y(the)29 b(e\013ectiv)m(e)i(user)e(id)f(is)g(not)i
-(reset.)40 b(T)-8 b(urning)28 b(this)g(option)g(o\013)i(causes)g(the)
-1110 3093 y(e\013ectiv)m(e)d(user)e(and)g(group)g(ids)g(to)h(b)s(e)f
-(set)h(to)h(the)f(real)f(user)g(and)g(group)g(ids.)630
-3242 y Fs(-t)384 b Ft(Exit)30 b(after)h(reading)e(and)h(executing)g
-(one)h(command.)630 3391 y Fs(-u)384 b Ft(T)-8 b(reat)38
-b(unset)e(v)-5 b(ariables)35 b(as)j(an)e(error)h(when)e(p)s(erforming)g
-(parameter)i(ex-)1110 3500 y(pansion.)57 b(An)36 b(error)f(message)j
-(will)33 b(b)s(e)j(written)f(to)i(the)g(standard)e(error,)1110
-3610 y(and)30 b(a)h(non-in)m(teractiv)m(e)g(shell)d(will)g(exit.)630
-3759 y Fs(-v)384 b Ft(Prin)m(t)29 b(shell)g(input)f(lines)h(as)i(they)f
-(are)h(read.)630 3907 y Fs(-x)384 b Ft(Prin)m(t)81 b(a)i(trace)h(of)e
-(simple)e(commands,)96 b Fs(\\)p Ft(fBfor)p Fs(\\)p Ft(fP)81
+2217 y Fs(-p)384 b Ft(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 Fs($BASH_ENV)e Ft(and)h
+Fs($ENV)1110 2326 y Ft(\014les)k(are)h(not)g(pro)s(cessed,)h(shell)f
+(functions)f(are)h(not)f(inherited)h(from)f(the)1110
+2436 y(en)m(vironmen)m(t,)f(and)d(the)h Fs(SHELLOPTS)e
+Ft(v)-5 b(ariable,)35 b(if)f(it)h(app)s(ears)e(in)h(the)g(en-)1110
+2545 y(vironmen)m(t,)d(is)f(ignored.)41 b(If)29 b(the)i(shell)f(is)g
+(started)h(with)f(the)g(e\013ectiv)m(e)j(user)1110 2655
+y(\(group\))d(id)g(not)g(equal)h(to)f(the)g(real)h(user)e(\(group\))i
+(id,)f(and)f(the)h Fs(-p)f Ft(option)1110 2765 y(is)40
+b(not)g(supplied,)i(these)e(actions)i(are)e(tak)m(en)h(and)f(the)g
+(e\013ectiv)m(e)j(user)c(id)1110 2874 y(is)d(set)h(to)h(the)e(real)h
+(user)f(id.)58 b(If)36 b(the)h Fs(-p)f Ft(option)g(is)h(supplied)e(at)i
+(startup,)1110 2984 y(the)29 b(e\013ectiv)m(e)j(user)d(id)g(is)g(not)h
+(reset.)40 b(T)-8 b(urning)29 b(this)g(option)g(o\013)h(causes)g(the)
+1110 3093 y(e\013ectiv)m(e)e(user)d(and)g(group)g(ids)h(to)g(b)s(e)f
+(set)h(to)h(the)f(real)g(user)f(and)g(group)g(ids.)630
+3242 y Fs(-t)384 b Ft(Exit)31 b(after)g(reading)f(and)g(executing)h
+(one)g(command.)630 3391 y Fs(-u)384 b Ft(T)-8 b(reat)38
+b(unset)e(v)-5 b(ariables)37 b(as)h(an)e(error)h(when)e(p)s(erforming)h
+(parameter)h(ex-)1110 3500 y(pansion.)58 b(An)36 b(error)f(message)j
+(will)e(b)s(e)g(written)g(to)h(the)g(standard)e(error,)1110
+3610 y(and)30 b(a)h(non-in)m(teractiv)m(e)i(shell)d(will)h(exit.)630
+3759 y Fs(-v)384 b Ft(Prin)m(t)30 b(shell)h(input)e(lines)i(as)g(they)f
+(are)h(read.)630 3907 y Fs(-x)384 b Ft(Prin)m(t)82 b(a)h(trace)h(of)e
+(simple)g(commands,)96 b Fs(\\)p Ft(fBfor)p Fs(\\)p Ft(fP)81
b(commands,)1110 4017 y Fs(\\)p Ft(fBcase)p Fs(\\)p Ft(fP)50
-b(commands,)55 b Fs(\\)p Ft(fBselect)p Fs(\\)p Ft(fP)50
-b(commands,)55 b(and)50 b(arithmetic)1110 4127 y Fs(\\)p
-Ft(fBfor)p Fs(\\)p Ft(fP)31 b(commands)g(and)g(their)g(argumen)m(ts)h
-(or)f(asso)s(ciated)h(w)m(ord)f(lists)1110 4236 y(after)k(they)g(are)g
-(expanded)f(and)h(b)s(efore)f(they)h(are)g(executed.)55
-b(The)34 b(v)-5 b(alue)1110 4346 y(of)34 b(the)g Fs(PS4)f
-Ft(v)-5 b(ariable)33 b(is)g(expanded)h(and)f(the)h(resultan)m(t)g(v)-5
-b(alue)33 b(is)g(prin)m(ted)1110 4455 y(b)s(efore)d(the)h(command)f
-(and)f(its)h(expanded)g(argumen)m(ts.)630 4604 y Fs(-B)384
-b Ft(The)41 b(shell)e(will)f(p)s(erform)i(brace)h(expansion)f(\(see)i
-(Section)f(3.5.1)h([Brace)1110 4714 y(Expansion],)29
-b(page)i(17\).)42 b(This)29 b(option)h(is)f(on)h(b)m(y)h(default.)630
-4862 y Fs(-C)384 b Ft(Prev)m(en)m(t)25 b(output)e(redirection)f(using)g
-(`)p Fs(>)p Ft(',)j(`)p Fs(>&)p Ft(',)g(and)e(`)p Fs(<>)p
-Ft(')g(from)h(o)m(v)m(erwriting)1110 4972 y(existing)29
-b(\014les.)630 5121 y Fs(-E)384 b Ft(If)39 b(set,)j(an)m(y)e(trap)f(on)
-g Fs(ERR)g Ft(is)f(inherited)f(b)m(y)i(shell)f(functions,)i(command)
-1110 5230 y(substitutions,)33 b(and)g(commands)g(executed)i(in)e(a)h
-(subshell)d(en)m(vironmen)m(t.)1110 5340 y(The)f Fs(ERR)f
-Ft(trap)i(is)e(normally)g(not)h(inherited)e(in)h(suc)m(h)h(cases.)p
-eop
+b(commands,)55 b Fs(\\)p Ft(fBselect)p Fs(\\)p Ft(fP)c(commands,)k(and)
+50 b(arithmetic)1110 4127 y Fs(\\)p Ft(fBfor)p Fs(\\)p
+Ft(fP)31 b(commands)g(and)g(their)h(argumen)m(ts)g(or)f(asso)s(ciated)i
+(w)m(ord)e(lists)1110 4236 y(after)k(they)g(are)g(expanded)f(and)h(b)s
+(efore)f(they)h(are)g(executed.)55 b(The)34 b(v)-5 b(alue)1110
+4346 y(of)34 b(the)g Fs(PS4)f Ft(v)-5 b(ariable)35 b(is)f(expanded)g
+(and)f(the)h(resultan)m(t)h(v)-5 b(alue)34 b(is)g(prin)m(ted)1110
+4455 y(b)s(efore)c(the)h(command)f(and)f(its)i(expanded)f(argumen)m
+(ts.)630 4604 y Fs(-B)384 b Ft(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
+4714 y(Expansion],)30 b(page)h(17\).)42 b(This)30 b(option)h(is)f(on)g
+(b)m(y)h(default.)630 4862 y Fs(-C)384 b Ft(Prev)m(en)m(t)25
+b(output)e(redirection)h(using)f(`)p Fs(>)p Ft(',)i(`)p
+Fs(>&)p Ft(',)g(and)e(`)p Fs(<>)p Ft(')g(from)h(o)m(v)m(erwriting)1110
+4972 y(existing)31 b(\014les.)630 5121 y Fs(-E)384 b
+Ft(If)39 b(set,)j(an)m(y)e(trap)f(on)g Fs(ERR)g Ft(is)g(inherited)g(b)m
+(y)g(shell)h(functions,)h(command)1110 5230 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 Fs(ERR)f Ft(trap)i(is)f(normally)h(not)f(inherited)g
+(in)g(suc)m(h)g(cases.)p eop end
%%Page: 53 59
-53 58 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28
-b(Builtin)g(Commands)2069 b(53)630 299 y Fs(-H)384 b
-Ft(Enable)37 b(`)p Fs(!)p Ft(')i(st)m(yle)g(history)e(substitution)f
-(\(see)j(Section)g(9.3)g([History)f(In-)1110 408 y(teraction],)g(page)e
-(111\).)57 b(This)33 b(option)i(is)f(on)h(b)m(y)h(default)e(for)h(in)m
+TeXDict begin 53 58 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(Shell)30 b(Builtin)h(Commands)2069 b(53)630 299 y Fs(-H)384
+b Ft(Enable)38 b(`)p Fs(!)p Ft(')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
+(111\).)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 682 y Fs(-P)384
-b Ft(If)43 b(set,)k(do)c(not)g(follo)m(w)f(sym)m(b)s(olic)g(links)e
-(when)i(p)s(erforming)f(commands)1110 792 y(suc)m(h)29
-b(as)h Fs(cd)f Ft(whic)m(h)f(c)m(hange)i(the)g(curren)m(t)f(directory)
--8 b(.)41 b(The)28 b(ph)m(ysical)h(direc-)1110 902 y(tory)34
-b(is)f(used)g(instead.)51 b(By)34 b(default,)g(Bash)g(follo)m(ws)f(the)
-h(logical)f(c)m(hain)h(of)1110 1011 y(directories)i(when)f(p)s
-(erforming)g(commands)h(whic)m(h)f(c)m(hange)j(the)f(curren)m(t)1110
-1121 y(directory)-8 b(.)1110 1258 y(F)g(or)31 b(example,)f(if)f(`)p
-Fs(/usr/sys)p Ft(')f(is)h(a)h(sym)m(b)s(olic)f(link)f(to)i(`)p
+b Ft(If)43 b(set,)k(do)c(not)g(follo)m(w)h(sym)m(b)s(olic)g(links)e
+(when)g(p)s(erforming)g(commands)1110 792 y(suc)m(h)29
+b(as)h Fs(cd)f Ft(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 902 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 1011 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
+1121 y(directory)-8 b(.)1110 1258 y(F)g(or)31 b(example,)g(if)f(`)p
+Fs(/usr/sys)p Ft(')e(is)i(a)g(sym)m(b)s(olic)h(link)f(to)g(`)p
Fs(/usr/local/sys)p Ft(')1110 1367 y(then:)1350 1504
y Fs($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 1614 y(/usr/sys)1350
1723 y($)g(cd)h(..;)f(pwd)1350 1833 y(/usr)1110 1970
-y Ft(If)30 b Fs(set)f(-P)h Ft(is)g(on,)g(then:)1350 2107
+y Ft(If)30 b Fs(set)f(-P)h Ft(is)h(on,)f(then:)1350 2107
y Fs($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 2216 y(/usr/local/sys)
1350 2326 y($)g(cd)h(..;)f(pwd)1350 2436 y(/usr/local)630
2600 y(-T)384 b Ft(If)31 b(set,)h(an)m(y)f(trap)g(on)g
-Fs(DEBUG)e Ft(is)h(inherited)f(b)m(y)i(shell)e(functions,)h(command)
-1110 2710 y(substitutions,)j(and)g(commands)g(executed)i(in)e(a)h
-(subshell)d(en)m(vironmen)m(t.)1110 2819 y(The)f Fs(DEBUG)f
-Ft(trap)h(is)f(normally)g(not)i(inherited)d(in)h(suc)m(h)h(cases.)630
-2983 y Fs(--)384 b Ft(If)31 b(no)h(argumen)m(ts)f(follo)m(w)g(this)g
-(option,)g(then)g(the)h(p)s(ositional)e(parameters)1110
-3093 y(are)k(unset.)49 b(Otherwise,)33 b(the)h(p)s(ositional)d
-(parameters)j(are)g(set)g(to)g(the)g Fq(ar-)1110 3203
-y(gumen)m(ts)p Ft(,)d(ev)m(en)g(if)e(some)i(of)g(them)f(b)s(egin)f
-(with)g(a)i(`)p Fs(-)p Ft('.)630 3367 y Fs(-)432 b Ft(Signal)43
-b(the)i(end)f(of)h(options,)j(cause)d(all)f(remaining)e
-Fq(argumen)m(ts)49 b Ft(to)d(b)s(e)1110 3477 y(assigned)37
-b(to)i(the)f(p)s(ositional)e(parameters.)65 b(The)37
+Fs(DEBUG)e Ft(is)i(inherited)g(b)m(y)g(shell)g(functions,)g(command)
+1110 2710 y(substitutions,)k(and)e(commands)g(executed)i(in)f(a)g
+(subshell)f(en)m(vironmen)m(t.)1110 2819 y(The)d Fs(DEBUG)f
+Ft(trap)h(is)g(normally)h(not)g(inherited)f(in)g(suc)m(h)g(cases.)630
+2983 y Fs(--)384 b Ft(If)31 b(no)h(argumen)m(ts)f(follo)m(w)i(this)f
+(option,)g(then)f(the)h(p)s(ositional)h(parameters)1110
+3093 y(are)h(unset.)49 b(Otherwise,)34 b(the)g(p)s(ositional)g
+(parameters)g(are)g(set)g(to)g(the)g Fq(ar-)1110 3203
+y(gumen)m(ts)p Ft(,)d(ev)m(en)g(if)f(some)h(of)g(them)f(b)s(egin)g
+(with)g(a)h(`)p Fs(-)p Ft('.)630 3367 y Fs(-)432 b Ft(Signal)45
+b(the)g(end)f(of)h(options,)k(cause)c(all)h(remaining)e
+Fq(argumen)m(ts)49 b Ft(to)d(b)s(e)1110 3477 y(assigned)38
+b(to)h(the)f(p)s(ositional)h(parameters.)65 b(The)37
b(`)p Fs(-x)p Ft(')h(and)g(`)p Fs(-v)p Ft(')g(options)1110
3586 y(are)25 b(turned)e(o\013.)40 b(If)24 b(there)h(are)g(no)f
-(argumen)m(ts,)i(the)f(p)s(ositional)e(parameters)1110
-3696 y(remain)29 b(unc)m(hanged.)630 3860 y(Using)d(`)p
-Fs(+)p Ft(')i(rather)f(than)g(`)p Fs(-)p Ft(')g(causes)h(these)f
-(options)g(to)h(b)s(e)e(turned)g(o\013.)40 b(The)27 b(options)g(can)630
-3970 y(also)35 b(b)s(e)g(used)f(up)s(on)g(in)m(v)m(o)s(cation)h(of)g
-(the)g(shell.)54 b(The)34 b(curren)m(t)h(set)h(of)f(options)g(ma)m(y)h
-(b)s(e)630 4079 y(found)29 b(in)g Fs($-)p Ft(.)630 4216
-y(The)43 b(remaining)f(N)h Fq(argumen)m(ts)48 b Ft(are)c(p)s(ositional)
-d(parameters)j(and)f(are)h(assigned,)i(in)630 4326 y(order,)30
+(argumen)m(ts,)i(the)f(p)s(ositional)h(parameters)1110
+3696 y(remain)k(unc)m(hanged.)630 3860 y(Using)d(`)p
+Fs(+)p Ft(')h(rather)f(than)g(`)p Fs(-)p Ft(')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
+3970 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 4079 y(found)29 b(in)h Fs($-)p Ft(.)630 4216
+y(The)43 b(remaining)h(N)f Fq(argumen)m(ts)48 b Ft(are)c(p)s(ositional)
+g(parameters)g(and)f(are)h(assigned,)j(in)630 4326 y(order,)30
b(to)h Fs($1)p Ft(,)f Fs($2)p Ft(,)36 b(.)22 b(.)g(.)42
-b Fs($N)p Ft(.)e(The)30 b(sp)s(ecial)f(parameter)i Fs(#)f
-Ft(is)f(set)i(to)g(N.)630 4463 y(The)f(return)f(status)i(is)e(alw)m(a)m
-(ys)i(zero)g(unless)e(an)h(in)m(v)-5 b(alid)28 b(option)i(is)f
+b Fs($N)p Ft(.)e(The)30 b(sp)s(ecial)h(parameter)g Fs(#)f
+Ft(is)g(set)h(to)g(N.)630 4463 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 4732 y Fr(4.4)68 b(Sp)t(ecial)45 b(Builtins)275
-4981 y Ft(F)-8 b(or)25 b(historical)e(reasons,)j(the)e
-Fl(posix)g Ft(1003.2)j(standard)d(has)g(classi\014ed)f(sev)m(eral)i
-(builtin)c(commands)150 5091 y(as)37 b Fm(sp)-5 b(e)g(cial)p
-Ft(.)60 b(When)36 b(Bash)h(is)f(executing)g(in)f Fl(posix)h
-Ft(mo)s(de,)i(the)f(sp)s(ecial)e(builtins)d(di\013er)k(from)g(other)150
-5201 y(builtin)27 b(commands)j(in)f(three)i(resp)s(ects:)199
-5340 y(1.)61 b(Sp)s(ecial)29 b(builtins)d(are)31 b(found)e(b)s(efore)h
-(shell)f(functions)g(during)f(command)i(lo)s(okup.)p
-eop
+4981 y Ft(F)-8 b(or)25 b(historical)h(reasons,)g(the)e
+Fl(posix)g Ft(1003.2)j(standard)d(has)g(classi\014ed)h(sev)m(eral)h
+(builtin)e(commands)150 5091 y(as)37 b Fm(sp)-5 b(e)g(cial)p
+Ft(.)60 b(When)36 b(Bash)h(is)g(executing)g(in)f Fl(posix)g
+Ft(mo)s(de,)i(the)f(sp)s(ecial)g(builtins)e(di\013er)i(from)f(other)150
+5201 y(builtin)30 b(commands)g(in)g(three)h(resp)s(ects:)199
+5340 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.)p
+eop end
%%Page: 54 60
-54 59 bop 150 -116 a Ft(54)2572 b(Bash)31 b(Reference)g(Man)m(ual)199
-299 y(2.)61 b(If)30 b(a)h(sp)s(ecial)e(builtin)e(returns)i(an)h(error)g
-(status,)h(a)g(non-in)m(teractiv)m(e)g(shell)d(exits.)199
-433 y(3.)61 b(Assignmen)m(t)29 b(statemen)m(ts)i(preceding)e(the)g
-(command)g(sta)m(y)i(in)d(e\013ect)j(in)d(the)i(shell)d(en)m(vironmen)m
-(t)330 543 y(after)k(the)f(command)h(completes.)275 702
-y(When)36 b(Bash)g(is)g(not)g(executing)h(in)e Fl(posix)g
-Ft(mo)s(de,)j(these)f(builtins)c(b)s(eha)m(v)m(e)k(no)f(di\013eren)m
-(tly)f(than)150 812 y(the)c(rest)f(of)h(the)f(Bash)h(builtin)26
-b(commands.)41 b(The)30 b(Bash)g Fl(posix)g Ft(mo)s(de)g(is)f(describ)s
-(ed)f(in)h(Section)h(6.11)150 922 y([Bash)h(POSIX)e(Mo)s(de],)i(page)g
-(76.)275 1056 y(These)f(are)g(the)h Fl(posix)f Ft(sp)s(ecial)f
-(builtins:)390 1191 y Fs(break)46 b(:)i(.)f(continue)f(eval)g(exec)h
-(exit)g(export)f(readonly)f(return)h(set)390 1300 y(shift)g(trap)h
-(unset)p eop
+TeXDict begin 54 59 bop 150 -116 a Ft(54)2572 b(Bash)31
+b(Reference)g(Man)m(ual)199 299 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 433 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 543 y(after)i(the)f(command)h
+(completes.)275 702 y(When)36 b(Bash)g(is)h(not)f(executing)i(in)e
+Fl(posix)f Ft(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 812 y(the)31 b(rest)f(of)h(the)f(Bash)h
+(builtin)e(commands.)41 b(The)30 b(Bash)g Fl(posix)g
+Ft(mo)s(de)g(is)g(describ)s(ed)f(in)h(Section)h(6.11)150
+922 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(76.)275 1056
+y(These)f(are)g(the)h Fl(posix)f Ft(sp)s(ecial)h(builtins:)390
+1191 y Fs(break)46 b(:)i(.)f(continue)f(eval)g(exec)h(exit)g(export)f
+(readonly)f(return)h(set)390 1300 y(shift)g(trap)h(unset)p
+eop end
%%Page: 55 61
-55 60 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28
-b(V)-8 b(ariables)2457 b(55)150 299 y Fo(5)80 b(Shell)55
-b(V)-13 b(ariables)275 525 y Ft(This)35 b(c)m(hapter)j(describ)s(es)d
-(the)i(shell)e(v)-5 b(ariables)36 b(that)i(Bash)f(uses.)61
-b(Bash)37 b(automatically)g(assigns)150 635 y(default)30
-b(v)-5 b(alues)29 b(to)i(a)g(n)m(um)m(b)s(er)e(of)i(v)-5
+TeXDict begin 55 60 bop 150 -116 a Ft(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(55)150 299 y Fo(5)80
+b(Shell)53 b(V)-13 b(ariables)275 525 y Ft(This)36 b(c)m(hapter)i
+(describ)s(es)e(the)h(shell)g(v)-5 b(ariables)38 b(that)g(Bash)f(uses.)
+61 b(Bash)37 b(automatically)j(assigns)150 635 y(default)31
+b(v)-5 b(alues)30 b(to)h(a)g(n)m(um)m(b)s(er)e(of)i(v)-5
b(ariables.)150 887 y Fr(5.1)68 b(Bourne)45 b(Shell)g(V)-11
-b(ariables)275 1130 y Ft(Bash)36 b(uses)g(certain)g(shell)e(v)-5
-b(ariables)35 b(in)g(the)i(same)g(w)m(a)m(y)g(as)f(the)h(Bourne)f
-(shell.)57 b(In)35 b(some)i(cases,)150 1240 y(Bash)31
-b(assigns)e(a)i(default)e(v)-5 b(alue)30 b(to)h(the)g(v)-5
-b(ariable.)150 1396 y Fs(CDPATH)192 b Ft(A)39 b(colon-separated)h(list)
-d(of)i(directories)f(used)h(as)g(a)g(searc)m(h)h(path)e(for)h(the)g
+b(ariables)275 1130 y Ft(Bash)36 b(uses)g(certain)h(shell)f(v)-5
+b(ariables)37 b(in)f(the)h(same)g(w)m(a)m(y)g(as)f(the)h(Bourne)f
+(shell.)59 b(In)35 b(some)i(cases,)150 1240 y(Bash)31
+b(assigns)f(a)h(default)f(v)-5 b(alue)31 b(to)g(the)g(v)-5
+b(ariable.)150 1396 y Fs(CDPATH)192 b Ft(A)39 b(colon-separated)i(list)
+e(of)g(directories)h(used)f(as)g(a)g(searc)m(h)h(path)e(for)h(the)g
Fs(cd)f Ft(builtin)630 1505 y(command.)150 1662 y Fs(HOME)288
-b Ft(The)23 b(curren)m(t)h(user's)f(home)g(directory;)j(the)e(default)f
-(for)g(the)h Fs(cd)f Ft(builtin)d(command.)38 b(The)630
-1771 y(v)-5 b(alue)36 b(of)g(this)f(v)-5 b(ariable)35
-b(is)h(also)g(used)f(b)m(y)h(tilde)f(expansion)g(\(see)j(Section)e
-(3.5.2)i([Tilde)630 1881 y(Expansion],)29 b(page)i(18\).)150
-2037 y Fs(IFS)336 b Ft(A)25 b(list)g(of)g(c)m(haracters)i(that)f
-(separate)g(\014elds;)g(used)f(when)f(the)i(shell)d(splits)h(w)m(ords)g
+b Ft(The)23 b(curren)m(t)h(user's)f(home)g(directory;)k(the)d(default)g
+(for)f(the)h Fs(cd)f Ft(builtin)g(command.)38 b(The)630
+1771 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 1881 y(Expansion],)30 b(page)h(18\).)150
+2037 y Fs(IFS)336 b Ft(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 2147 y(of)31 b(expansion.)150 2303 y Fs(MAIL)288
-b Ft(If)26 b(this)e(parameter)j(is)e(set)h(to)h(a)g(\014lename)e(and)g
-(the)h Fs(MAILPATH)e Ft(v)-5 b(ariable)25 b(is)g(not)h(set,)i(Bash)630
-2413 y(informs)h(the)h(user)g(of)g(the)h(arriv)-5 b(al)29
-b(of)h(mail)f(in)g(the)i(sp)s(eci\014ed)e(\014le.)150
-2569 y Fs(MAILPATH)96 b Ft(A)33 b(colon-separated)h(list)e(of)h
-(\014lenames)g(whic)m(h)f(the)h(shell)e(p)s(erio)s(dically)f(c)m(hec)m
-(ks)k(for)f(new)630 2678 y(mail.)58 b(Eac)m(h)37 b(list)e(en)m(try)i
-(can)g(sp)s(ecify)e(the)i(message)h(that)f(is)f(prin)m(ted)f(when)g
-(new)h(mail)630 2788 y(arriv)m(es)28 b(in)g(the)h(mail)e(\014le)h(b)m
-(y)h(separating)f(the)h(\014le)f(name)h(from)f(the)h(message)h(with)d
-(a)j(`)p Fs(?)p Ft('.)630 2898 y(When)i(used)f(in)g(the)h(text)i(of)e
+b Ft(If)26 b(this)f(parameter)i(is)f(set)g(to)h(a)g(\014lename)f(and)f
+(the)h Fs(MAILPATH)e Ft(v)-5 b(ariable)27 b(is)f(not)g(set,)i(Bash)630
+2413 y(informs)i(the)g(user)g(of)g(the)h(arriv)-5 b(al)31
+b(of)f(mail)h(in)f(the)h(sp)s(eci\014ed)f(\014le.)150
+2569 y Fs(MAILPATH)96 b Ft(A)33 b(colon-separated)i(list)f(of)f
+(\014lenames)h(whic)m(h)f(the)g(shell)g(p)s(erio)s(dically)h(c)m(hec)m
+(ks)g(for)f(new)630 2678 y(mail.)60 b(Eac)m(h)37 b(list)g(en)m(try)g
+(can)g(sp)s(ecify)f(the)h(message)h(that)f(is)g(prin)m(ted)f(when)f
+(new)h(mail)630 2788 y(arriv)m(es)29 b(in)g(the)g(mail)g(\014le)g(b)m
+(y)g(separating)g(the)g(\014le)g(name)g(from)f(the)h(message)h(with)e
+(a)i(`)p Fs(?)p Ft('.)630 2898 y(When)i(used)f(in)h(the)g(text)i(of)e
(the)g(message,)i Fs($_)e Ft(expands)f(to)i(the)f(name)g(of)h(the)f
-(curren)m(t)630 3007 y(mail)d(\014le.)150 3163 y Fs(OPTARG)192
-b Ft(The)30 b(v)-5 b(alue)30 b(of)g(the)h(last)f(option)g(argumen)m(t)h
+(curren)m(t)630 3007 y(mail)f(\014le.)150 3163 y Fs(OPTARG)192
+b Ft(The)30 b(v)-5 b(alue)31 b(of)f(the)h(last)g(option)g(argumen)m(t)g
(pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f Ft(builtin.)150
-3320 y Fs(OPTIND)192 b Ft(The)30 b(index)f(of)h(the)h(last)f(option)g
-(argumen)m(t)h(pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f
-Ft(builtin.)150 3476 y Fs(PATH)288 b Ft(A)32 b(colon-separated)h(list)e
-(of)h(directories)f(in)f(whic)m(h)h(the)h(shell)e(lo)s(oks)i(for)g
-(commands.)45 b(A)630 3586 y(zero-length)d(\(n)m(ull\))f(directory)g
-(name)h(in)f(the)h(v)-5 b(alue)41 b(of)h Fs(PATH)f Ft(indicates)g(the)h
-(curren)m(t)630 3695 y(directory)-8 b(.)48 b(A)33 b(n)m(ull)d
-(directory)j(name)f(ma)m(y)i(app)s(ear)e(as)h(t)m(w)m(o)h(adjacen)m(t)g
-(colons,)f(or)g(as)g(an)630 3805 y(initial)28 b(or)i(trailing)e(colon.)
-150 3961 y Fs(PS1)336 b Ft(The)35 b(primary)e(prompt)i(string.)54
-b(The)35 b(default)g(v)-5 b(alue)34 b(is)h(`)p Fs(\\s-\\v\\$)28
-b Ft('.)56 b(See)36 b(Section)f(6.9)630 4071 y([Prin)m(ting)26
-b(a)i(Prompt],)g(page)h(75,)g(for)e(the)h(complete)g(list)f(of)g(escap)
+3320 y Fs(OPTIND)192 b Ft(The)30 b(index)g(of)g(the)h(last)g(option)g
+(argumen)m(t)g(pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f
+Ft(builtin.)150 3476 y Fs(PATH)288 b Ft(A)32 b(colon-separated)i(list)f
+(of)f(directories)h(in)e(whic)m(h)h(the)g(shell)g(lo)s(oks)h(for)f
+(commands.)45 b(A)630 3586 y(zero-length)e(\(n)m(ull\))g(directory)f
+(name)g(in)g(the)g(v)-5 b(alue)42 b(of)g Fs(PATH)f Ft(indicates)i(the)f
+(curren)m(t)630 3695 y(directory)-8 b(.)49 b(A)33 b(n)m(ull)f
+(directory)i(name)e(ma)m(y)i(app)s(ear)e(as)h(t)m(w)m(o)h(adjacen)m(t)g
+(colons,)g(or)f(as)g(an)630 3805 y(initial)f(or)e(trailing)h(colon.)150
+3961 y Fs(PS1)336 b Ft(The)35 b(primary)f(prompt)h(string.)55
+b(The)35 b(default)h(v)-5 b(alue)35 b(is)h(`)p Fs(\\s-\\v\\$)28
+b Ft('.)56 b(See)36 b(Section)g(6.9)630 4071 y([Prin)m(ting)28
+b(a)g(Prompt],)g(page)h(75,)g(for)e(the)h(complete)h(list)g(of)e(escap)
s(e)h(sequences)g(that)h(are)630 4180 y(expanded)h(b)s(efore)g
-Fs(PS1)f Ft(is)g(displa)m(y)m(ed.)150 4336 y Fs(PS2)336
-b Ft(The)30 b(secondary)g(prompt)g(string.)40 b(The)29
-b(default)h(v)-5 b(alue)30 b(is)f(`)p Fs(>)h Ft('.)150
+Fs(PS1)f Ft(is)h(displa)m(y)m(ed.)150 4336 y Fs(PS2)336
+b Ft(The)30 b(secondary)g(prompt)g(string.)41 b(The)29
+b(default)i(v)-5 b(alue)31 b(is)f(`)p Fs(>)g Ft('.)150
4589 y Fr(5.2)68 b(Bash)45 b(V)-11 b(ariables)275 4832
-y Ft(These)36 b(v)-5 b(ariables)36 b(are)i(set)f(or)h(used)e(b)m(y)h
-(Bash,)i(but)d(other)i(shells)d(do)i(not)g(normally)f(treat)i(them)150
+y Ft(These)36 b(v)-5 b(ariables)38 b(are)g(set)f(or)h(used)e(b)m(y)h
+(Bash,)i(but)d(other)i(shells)f(do)g(not)g(normally)h(treat)g(them)150
4941 y(sp)s(ecially)-8 b(.)275 5074 y(A)24 b(few)g(v)-5
-b(ariables)22 b(used)i(b)m(y)f(Bash)i(are)f(describ)s(ed)e(in)h
-(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)23
-b(for)h(con)m(trolling)150 5184 y(the)31 b(job)f(con)m(trol)g
-(facilities)f(\(see)i(Section)f(7.3)i([Job)e(Con)m(trol)g(V)-8
-b(ariables],)30 b(page)i(82\).)150 5340 y Fs(BASH)288
-b Ft(The)30 b(full)e(pathname)i(used)g(to)h(execute)h(the)e(curren)m(t)
-g(instance)g(of)h(Bash.)p eop
+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 5184 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(82\).)150 5340 y Fs(BASH)288
+b Ft(The)30 b(full)g(pathname)g(used)g(to)h(execute)h(the)e(curren)m(t)
+g(instance)h(of)g(Bash.)p eop end
%%Page: 56 62
-56 61 bop 150 -116 a Ft(56)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(BASH_ARGC)630 408 y Ft(An)f(arra)m(y)h(v)-5
-b(ariable)29 b(whose)h(v)-5 b(alues)30 b(are)h(the)f(n)m(um)m(b)s(er)f
-(of)i(parameters)g(in)e(eac)m(h)i(frame)g(of)630 518
-y(the)26 b(curren)m(t)f(bash)g(execution)h(call)f(stac)m(k.)41
-b(The)25 b(n)m(um)m(b)s(er)g(of)h(parameters)g(to)g(the)g(curren)m(t)
-630 628 y(subroutine)h(\(shell)h(function)h(or)g(script)f(executed)j
-(with)d Fs(.)h Ft(or)h Fs(source)p Ft(\))e(is)g(at)i(the)g(top)g(of)630
-737 y(the)h(stac)m(k.)42 b(When)30 b(a)g(subroutine)f(is)g(executed,)i
-(the)g(n)m(um)m(b)s(er)e(of)h(parameters)h(passed)f(is)630
-847 y(pushed)f(on)m(to)i Fs(BASH_ARGC)p Ft(.)150 1017
-y Fs(BASH_ARGV)630 1127 y Ft(An)24 b(arra)m(y)g(v)-5
-b(ariable)23 b(con)m(taining)h(all)f(of)h(the)h(parameters)f(in)f(the)h
-(curren)m(t)g(bash)g(execution)630 1236 y(call)33 b(stac)m(k.)53
-b(The)34 b(\014nal)f(parameter)h(of)g(the)g(last)g(subroutine)e(call)h
-(is)g(at)i(the)f(top)h(of)f(the)630 1346 y(stac)m(k;)28
-b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)e(call)h(is)g(at)i
-(the)f(b)s(ottom.)39 b(When)24 b(a)g(subroutine)630 1456
-y(is)29 b(executed,)j(the)e(parameters)h(supplied)c(are)k(pushed)e(on)m
-(to)i Fs(BASH_ARGV)p Ft(.)150 1626 y Fs(BASH_COMMAND)630
-1736 y Ft(The)39 b(command)h(curren)m(tly)f(b)s(eing)f(executed)j(or)e
-(ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)38 b(the)630
-1845 y(shell)f(is)h(executing)g(a)h(command)g(as)g(the)f(result)g(of)h
-(a)g(trap,)i(in)c(whic)m(h)g(case)j(it)e(is)g(the)630
-1955 y(command)30 b(executing)h(at)g(the)f(time)g(of)h(the)g(trap.)150
-2125 y Fs(BASH_ENV)96 b Ft(If)28 b(this)f(v)-5 b(ariable)28
-b(is)f(set)i(when)f(Bash)g(is)g(in)m(v)m(ok)m(ed)h(to)g(execute)h(a)e
-(shell)f(script,)h(its)g(v)-5 b(alue)28 b(is)630 2235
-y(expanded)33 b(and)h(used)g(as)g(the)h(name)f(of)g(a)h(startup)f
-(\014le)f(to)i(read)f(b)s(efore)g(executing)h(the)630
-2345 y(script.)40 b(See)30 b(Section)g(6.2)i([Bash)f(Startup)e(Files],)
-h(page)h(65.)150 2515 y Fs(BASH_EXECUTION_STRING)630
-2625 y Ft(The)f(command)g(argumen)m(t)h(to)g(the)g(`)p
-Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)g(option.)150 2795
-y Fs(BASH_LINENO)630 2905 y Ft(An)38 b(arra)m(y)h(v)-5
-b(ariable)37 b(whose)i(mem)m(b)s(ers)e(are)i(the)g(line)e(n)m(um)m(b)s
-(ers)g(in)g(source)i(\014les)e(corre-)630 3014 y(sp)s(onding)h(to)j
+TeXDict begin 56 61 bop 150 -116 a Ft(56)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(BASH_ARGC)630 408
+y Ft(An)f(arra)m(y)h(v)-5 b(ariable)31 b(whose)f(v)-5
+b(alues)31 b(are)g(the)f(n)m(um)m(b)s(er)f(of)i(parameters)g(in)f(eac)m
+(h)h(frame)g(of)630 518 y(the)26 b(curren)m(t)f(bash)g(execution)i
+(call)g(stac)m(k.)41 b(The)25 b(n)m(um)m(b)s(er)g(of)h(parameters)g(to)
+g(the)g(curren)m(t)630 628 y(subroutine)i(\(shell)i(function)g(or)f
+(script)g(executed)i(with)e Fs(.)g Ft(or)h Fs(source)p
+Ft(\))e(is)h(at)h(the)g(top)g(of)630 737 y(the)h(stac)m(k.)42
+b(When)30 b(a)g(subroutine)g(is)g(executed,)h(the)g(n)m(um)m(b)s(er)e
+(of)h(parameters)h(passed)f(is)630 847 y(pushed)f(on)m(to)i
+Fs(BASH_ARGC)p Ft(.)150 1017 y Fs(BASH_ARGV)630 1127
+y Ft(An)24 b(arra)m(y)g(v)-5 b(ariable)25 b(con)m(taining)h(all)f(of)f
+(the)h(parameters)f(in)g(the)g(curren)m(t)g(bash)g(execution)630
+1236 y(call)35 b(stac)m(k.)53 b(The)34 b(\014nal)g(parameter)g(of)g
+(the)g(last)h(subroutine)e(call)i(is)f(at)h(the)f(top)h(of)f(the)630
+1346 y(stac)m(k;)28 b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)i
+(call)f(is)f(at)h(the)f(b)s(ottom.)39 b(When)24 b(a)g(subroutine)630
+1456 y(is)30 b(executed,)i(the)e(parameters)h(supplied)e(are)i(pushed)e
+(on)m(to)i Fs(BASH_ARGV)p Ft(.)150 1626 y Fs(BASH_COMMAND)630
+1736 y Ft(The)39 b(command)h(curren)m(tly)g(b)s(eing)f(executed)i(or)e
+(ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)39 b(the)630
+1845 y(shell)g(is)g(executing)g(a)g(command)g(as)g(the)f(result)h(of)g
+(a)g(trap,)i(in)d(whic)m(h)g(case)i(it)f(is)g(the)630
+1955 y(command)30 b(executing)i(at)f(the)f(time)h(of)g(the)g(trap.)150
+2125 y Fs(BASH_ENV)96 b Ft(If)28 b(this)g(v)-5 b(ariable)30
+b(is)e(set)h(when)f(Bash)g(is)h(in)m(v)m(ok)m(ed)h(to)f(execute)h(a)e
+(shell)h(script,)g(its)g(v)-5 b(alue)29 b(is)630 2235
+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 2345 y(script.)41
+b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(65.)150
+2515 y Fs(BASH_EXECUTION_STRING)630 2625 y Ft(The)f(command)g(argumen)m
+(t)h(to)g(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)i(option.)150
+2795 y Fs(BASH_LINENO)630 2905 y Ft(An)38 b(arra)m(y)h(v)-5
+b(ariable)39 b(whose)g(mem)m(b)s(ers)e(are)i(the)g(line)g(n)m(um)m(b)s
+(ers)e(in)h(source)h(\014les)f(corre-)630 3014 y(sp)s(onding)h(to)i
(eac)m(h)g(mem)m(b)s(er)e(of)i Fq(FUNCNAME)p Ft(.)g Fs
-(${BASH_LINENO[$i]})35 b Ft(is)k(the)i(line)630 3124
-y(n)m(um)m(b)s(er)34 b(in)f(the)i(source)g(\014le)f(where)g
-Fs(${FUNCNAME[$i)27 b(+)j(1]})k Ft(w)m(as)h(called.)54
-b(The)34 b(corre-)630 3233 y(sp)s(onding)d(source)j(\014le)f(name)h(is)
-f Fs(${BASH_SOURCE[$i)26 b(+)k(1]})p Ft(.)50 b(Use)35
-b Fs(LINENO)d Ft(to)i(obtain)630 3343 y(the)d(curren)m(t)f(line)e(n)m
+(${BASH_LINENO[$i]})35 b Ft(is)40 b(the)h(line)630 3124
+y(n)m(um)m(b)s(er)34 b(in)g(the)h(source)g(\014le)g(where)f
+Fs(${FUNCNAME[$i)27 b(+)j(1]})k Ft(w)m(as)h(called.)56
+b(The)34 b(corre-)630 3233 y(sp)s(onding)e(source)i(\014le)g(name)g(is)
+g Fs(${BASH_SOURCE[$i)26 b(+)k(1]})p Ft(.)50 b(Use)35
+b Fs(LINENO)d Ft(to)i(obtain)630 3343 y(the)d(curren)m(t)f(line)g(n)m
(um)m(b)s(er.)150 3513 y Fs(BASH_REMATCH)630 3623 y Ft(An)43
-b(arra)m(y)i(v)-5 b(ariable)42 b(whose)i(mem)m(b)s(ers)f(are)h
-(assigned)f(b)m(y)g(the)h(`)p Fs(=~)p Ft(')g(binary)e(op)s(erator)630
-3733 y(to)37 b(the)f Fs([[)g Ft(conditional)f(command)h(\(see)h
-(Section)f(3.2.4.2)j([Conditional)34 b(Constructs],)630
-3842 y(page)h(10\).)52 b(The)33 b(elemen)m(t)i(with)d(index)g(0)j(is)e
-(the)h(p)s(ortion)e(of)i(the)g(string)f(matc)m(hing)h(the)630
-3952 y(en)m(tire)28 b(regular)f(expression.)39 b(The)27
-b(elemen)m(t)i(with)d(index)h Fq(n)g Ft(is)g(the)h(p)s(ortion)f(of)h
-(the)g(string)630 4061 y(matc)m(hing)i(the)h Fq(n)p Ft(th)f(paren)m
-(thesized)g(sub)s(expression.)38 b(This)28 b(v)-5 b(ariable)29
-b(is)h(read-only)-8 b(.)150 4232 y Fs(BASH_SOURCE)630
-4341 y Ft(An)24 b(arra)m(y)h(v)-5 b(ariable)24 b(whose)g(mem)m(b)s(ers)
-g(are)h(the)g(source)f(\014lenames)g(corresp)s(onding)e(to)k(the)630
-4451 y(elemen)m(ts)31 b(in)e(the)h Fs(FUNCNAME)e Ft(arra)m(y)j(v)-5
+b(arra)m(y)i(v)-5 b(ariable)44 b(whose)g(mem)m(b)s(ers)f(are)h
+(assigned)g(b)m(y)f(the)h(`)p Fs(=~)p Ft(')g(binary)f(op)s(erator)630
+3733 y(to)37 b(the)f Fs([[)g Ft(conditional)i(command)e(\(see)h
+(Section)g(3.2.4.2)i([Conditional)e(Constructs],)630
+3842 y(page)e(10\).)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
+3952 y(en)m(tire)29 b(regular)f(expression.)40 b(The)27
+b(elemen)m(t)j(with)d(index)h Fq(n)f Ft(is)h(the)g(p)s(ortion)g(of)g
+(the)g(string)630 4061 y(matc)m(hing)j(the)g Fq(n)p Ft(th)f(paren)m
+(thesized)h(sub)s(expression.)39 b(This)29 b(v)-5 b(ariable)31
+b(is)g(read-only)-8 b(.)150 4232 y Fs(BASH_SOURCE)630
+4341 y Ft(An)24 b(arra)m(y)h(v)-5 b(ariable)26 b(whose)e(mem)m(b)s(ers)
+g(are)h(the)g(source)f(\014lenames)h(corresp)s(onding)e(to)j(the)630
+4451 y(elemen)m(ts)32 b(in)e(the)g Fs(FUNCNAME)e Ft(arra)m(y)j(v)-5
b(ariable.)150 4622 y Fs(BASH_SUBSHELL)630 4731 y Ft(Incremen)m(ted)34
-b(b)m(y)h(one)f(eac)m(h)i(time)e(a)g(subshell)e(or)i(subshell)d(en)m
-(vironmen)m(t)j(is)f(spa)m(wned.)630 4841 y(The)d(initial)d(v)-5
-b(alue)30 b(is)g(0.)150 5011 y Fs(BASH_VERSINFO)630 5121
-y Ft(A)36 b(readonly)f(arra)m(y)h(v)-5 b(ariable)35 b(\(see)h(Section)g
-(6.7)h([Arra)m(ys],)h(page)e(72\))h(whose)f(mem)m(b)s(ers)630
-5230 y(hold)31 b(v)m(ersion)h(information)e(for)i(this)f(instance)h(of)
-h(Bash.)46 b(The)32 b(v)-5 b(alues)31 b(assigned)h(to)h(the)630
+b(b)m(y)h(one)f(eac)m(h)i(time)f(a)f(subshell)g(or)g(subshell)f(en)m
+(vironmen)m(t)i(is)f(spa)m(wned.)630 4841 y(The)c(initial)h(v)-5
+b(alue)31 b(is)g(0.)150 5011 y Fs(BASH_VERSINFO)630 5121
+y Ft(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(72\))h(whose)f(mem)m(b)s(ers)630
+5230 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
5340 y(arra)m(y)e(mem)m(b)s(ers)e(are)i(as)g(follo)m(ws:)p
-eop
+eop end
%%Page: 57 63
-57 62 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28
-b(V)-8 b(ariables)2457 b(57)630 299 y Fs(BASH_VERSINFO[0])1110
-408 y Ft(The)30 b(ma)5 b(jor)30 b(v)m(ersion)g(n)m(um)m(b)s(er)f(\(the)
-i Fq(release)5 b Ft(\).)630 582 y Fs(BASH_VERSINFO[1])1110
-692 y Ft(The)30 b(minor)f(v)m(ersion)h(n)m(um)m(b)s(er)f(\(the)i
+TeXDict begin 57 62 bop 150 -116 a Ft(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(57)630 299 y Fs(BASH_VERSINFO[0])
+1110 408 y Ft(The)30 b(ma)5 b(jor)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e
+(\(the)i Fq(release)5 b Ft(\).)630 582 y Fs(BASH_VERSINFO[1])1110
+692 y Ft(The)30 b(minor)g(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i
Fq(v)m(ersion)p Ft(\).)630 865 y Fs(BASH_VERSINFO[2])1110
975 y Ft(The)f(patc)m(h)h(lev)m(el.)630 1148 y Fs(BASH_VERSINFO[3])1110
-1258 y Ft(The)f(build)d(v)m(ersion.)630 1431 y Fs(BASH_VERSINFO[4])1110
-1541 y Ft(The)j(release)h(status)f(\(e.g.,)j Fq(b)s(eta1)7
+1258 y Ft(The)f(build)f(v)m(ersion.)630 1431 y Fs(BASH_VERSINFO[4])1110
+1541 y Ft(The)h(release)i(status)e(\(e.g.,)j Fq(b)s(eta1)7
b Ft(\).)630 1714 y Fs(BASH_VERSINFO[5])1110 1824 y Ft(The)30
-b(v)-5 b(alue)30 b(of)g Fs(MACHTYPE)p Ft(.)150 1998 y
-Fs(BASH_VERSION)630 2107 y Ft(The)g(v)m(ersion)g(n)m(um)m(b)s(er)f(of)h
-(the)h(curren)m(t)f(instance)g(of)h(Bash.)150 2281 y
+b(v)-5 b(alue)31 b(of)f Fs(MACHTYPE)p Ft(.)150 1998 y
+Fs(BASH_VERSION)630 2107 y Ft(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 2281 y
Fs(COLUMNS)144 b Ft(Used)36 b(b)m(y)h(the)f Fs(select)f
-Ft(builtin)e(command)k(to)g(determine)e(the)i(terminal)e(width)g(when)
-630 2390 y(prin)m(ting)28 b(selection)i(lists.)40 b(Automatically)30
-b(set)h(up)s(on)d(receipt)j(of)f(a)h Fs(SIGWINCH)p Ft(.)150
-2564 y Fs(COMP_CWORD)630 2673 y Ft(An)38 b(index)f(in)m(to)h
-Fs(${COMP_WORDS})d Ft(of)k(the)g(w)m(ord)f(con)m(taining)g(the)g
-(curren)m(t)g(cursor)g(p)s(o-)630 2783 y(sition.)70 b(This)39
-b(v)-5 b(ariable)39 b(is)g(a)m(v)-5 b(ailable)40 b(only)g(in)f(shell)g
-(functions)g(in)m(v)m(ok)m(ed)i(b)m(y)f(the)h(pro-)630
-2892 y(grammable)35 b(completion)f(facilities)g(\(see)i(Section)f(8.6)h
-([Programmable)f(Completion],)630 3002 y(page)c(103\).)150
+Ft(builtin)h(command)h(to)g(determine)f(the)h(terminal)g(width)f(when)
+630 2390 y(prin)m(ting)30 b(selection)i(lists.)42 b(Automatically)33
+b(set)e(up)s(on)d(receipt)k(of)e(a)h Fs(SIGWINCH)p Ft(.)150
+2564 y Fs(COMP_CWORD)630 2673 y Ft(An)38 b(index)g(in)m(to)h
+Fs(${COMP_WORDS})c Ft(of)k(the)g(w)m(ord)f(con)m(taining)i(the)e
+(curren)m(t)g(cursor)g(p)s(o-)630 2783 y(sition.)72 b(This)40
+b(v)-5 b(ariable)41 b(is)f(a)m(v)-5 b(ailable)43 b(only)e(in)f(shell)h
+(functions)f(in)m(v)m(ok)m(ed)i(b)m(y)e(the)h(pro-)630
+2892 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g
+([Programmable)g(Completion],)630 3002 y(page)31 b(103\).)150
3176 y Fs(COMP_LINE)630 3285 y Ft(The)38 b(curren)m(t)h(command)f
-(line.)64 b(This)36 b(v)-5 b(ariable)38 b(is)g(a)m(v)-5
-b(ailable)38 b(only)f(in)h(shell)e(functions)630 3395
-y(and)25 b(external)g(commands)g(in)m(v)m(ok)m(ed)g(b)m(y)g(the)h
-(programmable)e(completion)h(facilities)e(\(see)630 3504
-y(Section)30 b(8.6)i([Programmable)e(Completion],)f(page)i(103\).)150
-3678 y Fs(COMP_POINT)630 3787 y Ft(The)25 b(index)f(of)i(the)g(curren)m
-(t)f(cursor)g(p)s(osition)f(relativ)m(e)i(to)g(the)g(b)s(eginning)d(of)
-i(the)h(curren)m(t)630 3897 y(command.)40 b(If)27 b(the)h(curren)m(t)g
-(cursor)g(p)s(osition)e(is)h(at)h(the)g(end)g(of)g(the)g(curren)m(t)g
-(command,)630 4007 y(the)i(v)-5 b(alue)29 b(of)h(this)f(v)-5
-b(ariable)29 b(is)g(equal)g(to)i Fs(${#COMP_LINE})p Ft(.)37
-b(This)28 b(v)-5 b(ariable)29 b(is)g(a)m(v)-5 b(ailable)630
-4116 y(only)35 b(in)f(shell)g(functions)g(and)h(external)g(commands)h
-(in)m(v)m(ok)m(ed)g(b)m(y)f(the)h(programmable)630 4226
-y(completion)30 b(facilities)e(\(see)k(Section)e(8.6)h([Programmable)f
-(Completion],)g(page)h(103\).)150 4399 y Fs(COMP_WORDBREAKS)630
-4509 y Ft(The)e(set)i(of)e(c)m(haracters)j(that)e(the)g(Readline)e
-(library)g(treats)i(as)g(w)m(ord)g(separators)g(when)630
-4619 y(p)s(erforming)h(w)m(ord)i(completion.)49 b(If)33
-b Fs(COMP_WORDBREAKS)c Ft(is)k(unset,)h(it)e(loses)i(its)e(sp)s(ecial)
-630 4728 y(prop)s(erties,)d(ev)m(en)i(if)e(it)h(is)g(subsequen)m(tly)f
-(reset.)150 4902 y Fs(COMP_WORDS)630 5011 y Ft(An)36
-b(arra)m(y)g(v)-5 b(ariable)35 b(consisting)g(of)h(the)g(individual)31
-b(w)m(ords)36 b(in)e(the)i(curren)m(t)g(command)630 5121
-y(line.)86 b(This)44 b(v)-5 b(ariable)45 b(is)g(a)m(v)-5
-b(ailable)45 b(only)g(in)g(shell)f(functions)h(in)m(v)m(ok)m(ed)h(b)m
-(y)g(the)g(pro-)630 5230 y(grammable)35 b(completion)f(facilities)g
-(\(see)i(Section)f(8.6)h([Programmable)f(Completion],)630
-5340 y(page)c(103\).)p eop
+(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 3395
+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 3504
+y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(103\).)150
+3678 y Fs(COMP_POINT)630 3787 y Ft(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 3897 y(command.)40 b(If)27 b(the)h(curren)m(t)g
+(cursor)g(p)s(osition)g(is)g(at)g(the)g(end)g(of)g(the)g(curren)m(t)g
+(command,)630 4007 y(the)i(v)-5 b(alue)30 b(of)g(this)g(v)-5
+b(ariable)31 b(is)f(equal)g(to)h Fs(${#COMP_LINE})p Ft(.)37
+b(This)29 b(v)-5 b(ariable)31 b(is)f(a)m(v)-5 b(ailable)630
+4116 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 4226
+y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g
+(Completion],)h(page)f(103\).)150 4399 y Fs(COMP_WORDBREAKS)630
+4509 y Ft(The)e(set)i(of)e(c)m(haracters)j(that)e(the)g(Readline)g
+(library)g(treats)g(as)g(w)m(ord)g(separators)g(when)630
+4619 y(p)s(erforming)i(w)m(ord)h(completion.)51 b(If)33
+b Fs(COMP_WORDBREAKS)c Ft(is)34 b(unset,)g(it)f(loses)i(its)e(sp)s
+(ecial)630 4728 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g(subsequen)m
+(tly)f(reset.)150 4902 y Fs(COMP_WORDS)630 5011 y Ft(An)36
+b(arra)m(y)g(v)-5 b(ariable)37 b(consisting)g(of)f(the)g(individual)f
+(w)m(ords)h(in)f(the)h(curren)m(t)g(command)630 5121
+y(line.)88 b(This)45 b(v)-5 b(ariable)47 b(is)f(a)m(v)-5
+b(ailable)48 b(only)e(in)g(shell)g(functions)g(in)m(v)m(ok)m(ed)h(b)m
+(y)f(the)g(pro-)630 5230 y(grammable)36 b(completion)g(facilities)i
+(\(see)e(Section)g(8.6)g([Programmable)g(Completion],)630
+5340 y(page)31 b(103\).)p eop end
%%Page: 58 64
-58 63 bop 150 -116 a Ft(58)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(COMPREPLY)630 408 y Ft(An)37 b(arra)m(y)h(v)-5
-b(ariable)36 b(from)h(whic)m(h)f(Bash)h(reads)g(the)h(p)s(ossible)c
-(completions)j(generated)630 518 y(b)m(y)c(a)g(shell)f(function)g(in)m
-(v)m(ok)m(ed)h(b)m(y)g(the)g(programmable)g(completion)f(facilit)m(y)g
-(\(see)i(Sec-)630 628 y(tion)c(8.6)h([Programmable)f(Completion],)g
-(page)h(103\).)150 774 y Fs(DIRSTACK)96 b Ft(An)26 b(arra)m(y)h(v)-5
-b(ariable)26 b(con)m(taining)g(the)h(curren)m(t)f(con)m(ten)m(ts)j(of)e
-(the)f(directory)h(stac)m(k.)41 b(Direc-)630 883 y(tories)32
-b(app)s(ear)g(in)f(the)i(stac)m(k)h(in)d(the)i(order)f(they)h(are)g
-(displa)m(y)m(ed)e(b)m(y)h(the)h Fs(dirs)e Ft(builtin.)630
-993 y(Assigning)d(to)j(mem)m(b)s(ers)f(of)g(this)f(arra)m(y)h(v)-5
-b(ariable)29 b(ma)m(y)i(b)s(e)e(used)h(to)h(mo)s(dify)d(directories)630
-1103 y(already)40 b(in)f(the)i(stac)m(k,)k(but)40 b(the)h
-Fs(pushd)e Ft(and)h Fs(popd)f Ft(builtins)e(m)m(ust)k(b)s(e)e(used)h
-(to)i(add)630 1212 y(and)37 b(remo)m(v)m(e)h(directories.)61
-b(Assignmen)m(t)36 b(to)i(this)e(v)-5 b(ariable)36 b(will)f(not)i(c)m
+TeXDict begin 58 63 bop 150 -116 a Ft(58)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(COMPREPLY)630 408
+y Ft(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
+518 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
+628 y(tion)d(8.6)g([Programmable)g(Completion],)h(page)f(103\).)150
+774 y Fs(DIRSTACK)96 b Ft(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 883 y(tories)33
+b(app)s(ear)f(in)g(the)h(stac)m(k)h(in)e(the)h(order)f(they)h(are)g
+(displa)m(y)m(ed)g(b)m(y)f(the)h Fs(dirs)e Ft(builtin.)630
+993 y(Assigning)f(to)h(mem)m(b)s(ers)f(of)g(this)g(arra)m(y)g(v)-5
+b(ariable)31 b(ma)m(y)g(b)s(e)e(used)h(to)h(mo)s(dify)e(directories)630
+1103 y(already)41 b(in)f(the)h(stac)m(k,)k(but)40 b(the)h
+Fs(pushd)e Ft(and)h Fs(popd)f Ft(builtins)h(m)m(ust)h(b)s(e)e(used)h
+(to)i(add)630 1212 y(and)37 b(remo)m(v)m(e)h(directories.)63
+b(Assignmen)m(t)37 b(to)h(this)f(v)-5 b(ariable)38 b(will)g(not)f(c)m
(hange)i(the)e(cur-)630 1322 y(ren)m(t)c(directory)-8
-b(.)46 b(If)32 b Fs(DIRSTACK)e Ft(is)h(unset,)h(it)g(loses)g(its)g(sp)s
-(ecial)f(prop)s(erties,)g(ev)m(en)i(if)e(it)h(is)630
+b(.)47 b(If)32 b Fs(DIRSTACK)e Ft(is)i(unset,)g(it)h(loses)g(its)g(sp)s
+(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)630
1431 y(subsequen)m(tly)d(reset.)150 1577 y Fs(EMACS)240
-b Ft(If)31 b(Bash)h(\014nds)d(this)i(v)-5 b(ariable)30
-b(in)g(the)i(en)m(vironmen)m(t)f(when)f(the)i(shell)d(starts)j(with)e
-(v)-5 b(alue)630 1687 y(`)p Fs(t)p Ft(',)38 b(it)d(assumes)h(that)g
-(the)h(shell)d(is)h(running)e(in)i(an)h(emacs)g(shell)f(bu\013er)g(and)
-g(disables)630 1797 y(line)29 b(editing.)150 1943 y Fs(EUID)288
-b Ft(The)30 b(n)m(umeric)f(e\013ectiv)m(e)j(user)e(id)f(of)h(the)h
-(curren)m(t)f(user.)40 b(This)29 b(v)-5 b(ariable)29
-b(is)g(readonly)-8 b(.)150 2089 y Fs(FCEDIT)192 b Ft(The)30
-b(editor)g(used)f(as)i(a)g(default)e(b)m(y)i(the)f(`)p
-Fs(-e)p Ft(')g(option)g(to)h(the)g Fs(fc)f Ft(builtin)d(command.)150
-2235 y Fs(FIGNORE)144 b Ft(A)35 b(colon-separated)h(list)e(of)i
-(su\016xes)e(to)i(ignore)f(when)f(p)s(erforming)f(\014lename)i(comple-)
-630 2345 y(tion.)j(A)25 b(\014le)f(name)h(whose)f(su\016x)g(matc)m(hes)
-i(one)f(of)g(the)g(en)m(tries)f(in)g Fs(FIGNORE)e Ft(is)i(excluded)630
-2454 y(from)30 b(the)g(list)f(of)i(matc)m(hed)g(\014le)f(names.)40
-b(A)31 b(sample)e(v)-5 b(alue)30 b(is)g(`)p Fs(.o:~)p
+b Ft(If)31 b(Bash)h(\014nds)d(this)j(v)-5 b(ariable)32
+b(in)f(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)f(starts)h(with)f
+(v)-5 b(alue)630 1687 y(`)p Fs(t)p Ft(',)38 b(it)e(assumes)g(that)g
+(the)h(shell)f(is)g(running)e(in)i(an)g(emacs)g(shell)h(bu\013er)e(and)
+g(disables)630 1797 y(line)c(editing.)150 1943 y Fs(EUID)288
+b Ft(The)30 b(n)m(umeric)g(e\013ectiv)m(e)j(user)d(id)g(of)g(the)h
+(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31
+b(is)f(readonly)-8 b(.)150 2089 y Fs(FCEDIT)192 b Ft(The)30
+b(editor)h(used)e(as)i(a)g(default)f(b)m(y)h(the)f(`)p
+Fs(-e)p Ft(')g(option)h(to)g(the)g Fs(fc)f Ft(builtin)g(command.)150
+2235 y Fs(FIGNORE)144 b Ft(A)35 b(colon-separated)i(list)f(of)g
+(su\016xes)e(to)i(ignore)g(when)e(p)s(erforming)g(\014lename)i(comple-)
+630 2345 y(tion.)j(A)25 b(\014le)g(name)g(whose)f(su\016x)g(matc)m(hes)
+i(one)f(of)g(the)g(en)m(tries)g(in)g Fs(FIGNORE)d Ft(is)j(excluded)630
+2454 y(from)30 b(the)g(list)h(of)g(matc)m(hed)g(\014le)g(names.)40
+b(A)31 b(sample)f(v)-5 b(alue)31 b(is)g(`)p Fs(.o:~)p
Ft(')150 2600 y Fs(FUNCNAME)96 b Ft(An)35 b(arra)m(y)i(v)-5
-b(ariable)34 b(con)m(taining)h(the)h(names)g(of)g(all)e(shell)g
-(functions)h(curren)m(tly)f(in)h(the)630 2710 y(execution)g(call)g
-(stac)m(k.)57 b(The)34 b(elemen)m(t)i(with)e(index)g(0)i(is)e(the)h
-(name)h(of)f(an)m(y)h(curren)m(tly-)630 2819 y(executing)h(shell)e
-(function.)57 b(The)37 b(b)s(ottom-most)g(elemen)m(t)g(is)f
-Fs(")p Ft(main)p Fs(")p Ft(.)57 b(This)35 b(v)-5 b(ariable)630
-2929 y(exists)32 b(only)g(when)g(a)h(shell)e(function)g(is)h
-(executing.)48 b(Assignmen)m(ts)32 b(to)h Fs(FUNCNAME)e
+b(ariable)36 b(con)m(taining)h(the)f(names)g(of)g(all)g(shell)g
+(functions)g(curren)m(tly)f(in)h(the)630 2710 y(execution)g(call)h
+(stac)m(k.)57 b(The)34 b(elemen)m(t)j(with)e(index)g(0)h(is)f(the)g
+(name)h(of)f(an)m(y)h(curren)m(tly-)630 2819 y(executing)i(shell)f
+(function.)58 b(The)37 b(b)s(ottom-most)g(elemen)m(t)h(is)f
+Fs(")p Ft(main)p Fs(")p Ft(.)58 b(This)36 b(v)-5 b(ariable)630
+2929 y(exists)33 b(only)g(when)f(a)h(shell)g(function)f(is)h
+(executing.)49 b(Assignmen)m(ts)33 b(to)g Fs(FUNCNAME)e
Ft(ha)m(v)m(e)630 3039 y(no)36 b(e\013ect)h(and)e(return)f(an)i(error)f
-(status.)57 b(If)36 b Fs(FUNCNAME)d Ft(is)i(unset,)i(it)e(loses)g(its)g
-(sp)s(ecial)630 3148 y(prop)s(erties,)29 b(ev)m(en)i(if)e(it)h(is)g
+(status.)57 b(If)36 b Fs(FUNCNAME)d Ft(is)j(unset,)h(it)f(loses)g(its)g
+(sp)s(ecial)630 3148 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g
(subsequen)m(tly)f(reset.)150 3294 y Fs(GLOBIGNORE)630
-3404 y Ft(A)38 b(colon-separated)h(list)e(of)h(patterns)g(de\014ning)e
-(the)i(set)g(of)h(\014lenames)e(to)h(b)s(e)g(ignored)630
-3513 y(b)m(y)31 b(\014lename)f(expansion.)42 b(If)31
-b(a)h(\014lename)e(matc)m(hed)i(b)m(y)f(a)g(\014lename)g(expansion)f
-(pattern)630 3623 y(also)i(matc)m(hes)h(one)f(of)g(the)g(patterns)g(in)
-e Fs(GLOBIGNORE)p Ft(,)g(it)h(is)g(remo)m(v)m(ed)i(from)e(the)h(list)f
+3404 y Ft(A)38 b(colon-separated)i(list)f(of)f(patterns)g(de\014ning)f
+(the)h(set)g(of)h(\014lenames)f(to)g(b)s(e)g(ignored)630
+3513 y(b)m(y)31 b(\014lename)g(expansion.)43 b(If)31
+b(a)h(\014lename)f(matc)m(hed)h(b)m(y)f(a)g(\014lename)h(expansion)f
+(pattern)630 3623 y(also)i(matc)m(hes)g(one)f(of)g(the)g(patterns)g(in)
+f Fs(GLOBIGNORE)p Ft(,)f(it)i(is)g(remo)m(v)m(ed)h(from)e(the)h(list)h
(of)630 3733 y(matc)m(hes.)150 3879 y Fs(GROUPS)192 b
-Ft(An)36 b(arra)m(y)g(v)-5 b(ariable)35 b(con)m(taining)g(the)h(list)f
-(of)h(groups)g(of)g(whic)m(h)e(the)j(curren)m(t)e(user)h(is)f(a)630
-3988 y(mem)m(b)s(er.)47 b(Assignmen)m(ts)32 b(to)h Fs(GROUPS)e
+Ft(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(con)m(taining)g(the)f(list)h
+(of)f(groups)g(of)g(whic)m(h)f(the)i(curren)m(t)e(user)h(is)g(a)630
+3988 y(mem)m(b)s(er.)47 b(Assignmen)m(ts)33 b(to)g Fs(GROUPS)e
Ft(ha)m(v)m(e)j(no)f(e\013ect)h(and)e(return)g(an)g(error)g(status.)48
-b(If)630 4098 y Fs(GROUPS)29 b Ft(is)g(unset,)h(it)g(loses)g(its)g(sp)s
-(ecial)f(prop)s(erties,)g(ev)m(en)i(if)e(it)h(is)g(subsequen)m(tly)f
-(reset.)150 4244 y Fs(histchars)630 4354 y Ft(Up)d(to)g(three)g(c)m
-(haracters)i(whic)m(h)c(con)m(trol)j(history)d(expansion,)i(quic)m(k)g
-(substitution,)f(and)630 4463 y(tok)m(enization)k(\(see)h(Section)e
-(9.3)i([History)e(In)m(teraction],)i(page)g(111\).)41
-b(The)29 b(\014rst)e(c)m(harac-)630 4573 y(ter)j(is)e(the)h
-Fq(history)f(expansion)g Ft(c)m(haracter,)k(that)e(is,)e(the)i(c)m
-(haracter)h(whic)m(h)c(signi\014es)h(the)630 4682 y(start)d(of)f(a)h
-(history)e(expansion,)i(normally)d(`)p Fs(!)p Ft('.)39
-b(The)24 b(second)g(c)m(haracter)i(is)d(the)h(c)m(haracter)630
-4792 y(whic)m(h)35 b(signi\014es)f(`quic)m(k)i(substitution')e(when)h
+b(If)630 4098 y Fs(GROUPS)29 b Ft(is)h(unset,)g(it)h(loses)g(its)g(sp)s
+(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f
+(reset.)150 4244 y Fs(histchars)630 4354 y Ft(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 4463 y(tok)m(enization)k(\(see)f(Section)f
+(9.3)h([History)f(In)m(teraction],)i(page)f(111\).)41
+b(The)29 b(\014rst)e(c)m(harac-)630 4573 y(ter)j(is)f(the)g
+Fq(history)g(expansion)g Ft(c)m(haracter,)j(that)e(is,)f(the)h(c)m
+(haracter)h(whic)m(h)d(signi\014es)i(the)630 4682 y(start)25
+b(of)f(a)h(history)f(expansion,)i(normally)e(`)p Fs(!)p
+Ft('.)39 b(The)24 b(second)g(c)m(haracter)i(is)e(the)g(c)m(haracter)630
+4792 y(whic)m(h)36 b(signi\014es)g(`quic)m(k)h(substitution')f(when)f
(seen)h(as)g(the)g(\014rst)f(c)m(haracter)j(on)e(a)g(line,)630
-4902 y(normally)25 b(`)p Fs(^)p Ft('.)39 b(The)26 b(optional)g(third)e
-(c)m(haracter)k(is)d(the)i(c)m(haracter)h(whic)m(h)d(indicates)g(that)
-630 5011 y(the)34 b(remainder)e(of)i(the)g(line)e(is)g(a)i(commen)m(t)h
+4902 y(normally)27 b(`)p Fs(^)p Ft('.)39 b(The)26 b(optional)i(third)d
+(c)m(haracter)j(is)e(the)h(c)m(haracter)h(whic)m(h)e(indicates)h(that)
+630 5011 y(the)34 b(remainder)f(of)h(the)g(line)g(is)f(a)h(commen)m(t)h
(when)e(found)f(as)i(the)g(\014rst)f(c)m(haracter)i(of)f(a)630
-5121 y(w)m(ord,)i(usually)d(`)p Fs(#)p Ft('.)55 b(The)34
-b(history)g(commen)m(t)i(c)m(haracter)h(causes)e(history)f
-(substitution)630 5230 y(to)27 b(b)s(e)f(skipp)s(ed)e(for)j(the)f
-(remaining)f(w)m(ords)h(on)h(the)f(line.)38 b(It)27 b(do)s(es)f(not)h
-(necessarily)e(cause)630 5340 y(the)31 b(shell)d(parser)i(to)h(treat)g
-(the)g(rest)g(of)f(the)h(line)d(as)j(a)g(commen)m(t.)p
-eop
+5121 y(w)m(ord,)i(usually)f(`)p Fs(#)p Ft('.)55 b(The)34
+b(history)h(commen)m(t)h(c)m(haracter)h(causes)e(history)g
+(substitution)630 5230 y(to)27 b(b)s(e)f(skipp)s(ed)f(for)i(the)f
+(remaining)h(w)m(ords)f(on)h(the)f(line.)40 b(It)27 b(do)s(es)f(not)h
+(necessarily)g(cause)630 5340 y(the)k(shell)f(parser)g(to)h(treat)g
+(the)g(rest)g(of)f(the)h(line)f(as)h(a)g(commen)m(t.)p
+eop end
%%Page: 59 65
-59 64 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28
-b(V)-8 b(ariables)2457 b(59)150 299 y Fs(HISTCMD)144
-b Ft(The)35 b(history)g(n)m(um)m(b)s(er,)h(or)f(index)f(in)h(the)h
-(history)e(list,)i(of)g(the)g(curren)m(t)f(command.)56
-b(If)630 408 y Fs(HISTCMD)28 b Ft(is)g(unset,)i(it)f(loses)h(its)f(sp)s
-(ecial)f(prop)s(erties,)h(ev)m(en)h(if)f(it)g(is)g(subsequen)m(tly)f
-(reset.)150 578 y Fs(HISTCONTROL)630 688 y Ft(A)40 b(colon-separated)h
-(list)e(of)h(v)-5 b(alues)39 b(con)m(trolling)g(ho)m(w)h(commands)g
-(are)h(sa)m(v)m(ed)g(on)f(the)630 797 y(history)28 b(list.)39
-b(If)28 b(the)h(list)f(of)h(v)-5 b(alues)28 b(includes)e(`)p
-Fs(ignorespace)p Ft(',)h(lines)g(whic)m(h)h(b)s(egin)f(with)630
-907 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g(sa)m(v)m(ed)g(in)f(the)
-h(history)e(list.)64 b(A)39 b(v)-5 b(alue)38 b(of)h(`)p
-Fs(ignoredups)p Ft(')630 1017 y(causes)34 b(lines)f(whic)m(h)g(matc)m
-(h)i(the)f(previous)e(history)h(en)m(try)i(to)g(not)f(b)s(e)f(sa)m(v)m
+TeXDict begin 59 64 bop 150 -116 a Ft(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(59)150 299 y Fs(HISTCMD)144
+b Ft(The)35 b(history)h(n)m(um)m(b)s(er,)g(or)f(index)g(in)h(the)g
+(history)f(list,)j(of)e(the)g(curren)m(t)f(command.)56
+b(If)630 408 y Fs(HISTCMD)28 b Ft(is)h(unset,)h(it)g(loses)h(its)f(sp)s
+(ecial)g(prop)s(erties,)g(ev)m(en)g(if)g(it)g(is)g(subsequen)m(tly)f
+(reset.)150 578 y Fs(HISTCONTROL)630 688 y Ft(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 797 y(history)29 b(list.)41
+b(If)28 b(the)h(list)h(of)f(v)-5 b(alues)29 b(includes)f(`)p
+Fs(ignorespace)p Ft(',)f(lines)i(whic)m(h)g(b)s(egin)f(with)630
+907 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g(sa)m(v)m(ed)g(in)g(the)
+g(history)f(list.)66 b(A)39 b(v)-5 b(alue)39 b(of)g(`)p
+Fs(ignoredups)p Ft(')630 1017 y(causes)34 b(lines)h(whic)m(h)f(matc)m
+(h)h(the)f(previous)f(history)h(en)m(try)h(to)g(not)f(b)s(e)f(sa)m(v)m
(ed.)53 b(A)34 b(v)-5 b(alue)630 1126 y(of)32 b(`)p Fs(ignoreboth)p
-Ft(')d(is)i(shorthand)f(for)i(`)p Fs(ignorespace)p Ft(')d(and)i(`)p
-Fs(ignoredups)p Ft('.)42 b(A)32 b(v)-5 b(alue)31 b(of)630
-1236 y(`)p Fs(erasedups)p Ft(')g(causes)i(all)f(previous)g(lines)f
-(matc)m(hing)i(the)g(curren)m(t)g(line)e(to)j(b)s(e)e(remo)m(v)m(ed)630
-1345 y(from)42 b(the)h(history)e(list)h(b)s(efore)g(that)h(line)e(is)h
-(sa)m(v)m(ed.)78 b(An)m(y)43 b(v)-5 b(alue)42 b(not)h(in)e(the)i(ab)s
-(o)m(v)m(e)630 1455 y(list)33 b(is)h(ignored.)52 b(If)34
-b Fs(HISTCONTROL)e Ft(is)h(unset,)j(or)e(do)s(es)h(not)g(include)d(a)j
-(v)-5 b(alid)33 b(v)-5 b(alue,)35 b(all)630 1564 y(lines)28
-b(read)i(b)m(y)g(the)g(shell)e(parser)i(are)g(sa)m(v)m(ed)h(on)f(the)g
-(history)f(list,)g(sub)5 b(ject)30 b(to)g(the)g(v)-5
+Ft(')d(is)j(shorthand)e(for)i(`)p Fs(ignorespace)p Ft(')d(and)i(`)p
+Fs(ignoredups)p Ft('.)42 b(A)32 b(v)-5 b(alue)32 b(of)630
+1236 y(`)p Fs(erasedups)p Ft(')f(causes)i(all)h(previous)f(lines)g
+(matc)m(hing)h(the)f(curren)m(t)g(line)g(to)h(b)s(e)e(remo)m(v)m(ed)630
+1345 y(from)42 b(the)h(history)f(list)i(b)s(efore)e(that)h(line)g(is)g
+(sa)m(v)m(ed.)78 b(An)m(y)43 b(v)-5 b(alue)43 b(not)g(in)f(the)h(ab)s
+(o)m(v)m(e)630 1455 y(list)35 b(is)g(ignored.)53 b(If)34
+b Fs(HISTCONTROL)e Ft(is)i(unset,)i(or)e(do)s(es)h(not)g(include)f(a)h
+(v)-5 b(alid)35 b(v)-5 b(alue,)36 b(all)630 1564 y(lines)30
+b(read)g(b)m(y)g(the)g(shell)g(parser)g(are)g(sa)m(v)m(ed)h(on)f(the)g
+(history)g(list,)h(sub)5 b(ject)30 b(to)g(the)g(v)-5
b(alue)630 1674 y(of)42 b Fs(HISTIGNORE)p Ft(.)73 b(The)42
-b(second)g(and)g(subsequen)m(t)f(lines)f(of)j(a)f(m)m(ulti-line)d(comp)
+b(second)g(and)g(subsequen)m(t)f(lines)h(of)h(a)f(m)m(ulti-line)h(comp)
s(ound)630 1784 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added)
-f(to)h(the)g(history)f(regardless)g(of)h(the)f(v)-5 b(alue)630
+f(to)h(the)g(history)g(regardless)g(of)g(the)f(v)-5 b(alue)630
1893 y(of)31 b Fs(HISTCONTROL)p Ft(.)150 2063 y Fs(HISTFILE)96
-b Ft(The)27 b(name)h(of)g(the)g(\014le)f(to)i(whic)m(h)e(the)h(command)
-f(history)g(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)g(v)-5
-b(alue)630 2172 y(is)29 b(`)p Fs(~/.bash_history)p Ft('.)150
-2342 y Fs(HISTFILESIZE)630 2452 y Ft(The)d(maxim)m(um)e(n)m(um)m(b)s
-(er)h(of)h(lines)f(con)m(tained)h(in)f(the)h(history)f(\014le.)38
-b(When)26 b(this)f(v)-5 b(ariable)630 2561 y(is)24 b(assigned)h(a)h(v)
--5 b(alue,)26 b(the)g(history)e(\014le)h(is)f(truncated,)j(if)d
-(necessary)-8 b(,)28 b(to)e(con)m(tain)f(no)h(more)630
-2671 y(than)34 b(that)h(n)m(um)m(b)s(er)d(of)j(lines.)50
-b(The)34 b(history)f(\014le)g(is)g(also)h(truncated)g(to)h(this)e(size)
-h(after)630 2781 y(writing)28 b(it)i(when)g(an)g(in)m(teractiv)m(e)h
-(shell)e(exits.)40 b(The)30 b(default)g(v)-5 b(alue)30
-b(is)f(500.)150 2950 y Fs(HISTIGNORE)630 3060 y Ft(A)k(colon-separated)
-g(list)e(of)i(patterns)f(used)g(to)h(decide)f(whic)m(h)f(command)h
-(lines)f(should)630 3169 y(b)s(e)h(sa)m(v)m(ed)h(on)g(the)f(history)g
-(list.)45 b(Eac)m(h)33 b(pattern)g(is)e(anc)m(hored)i(at)g(the)f(b)s
-(eginning)e(of)j(the)630 3279 y(line)41 b(and)g(m)m(ust)h(matc)m(h)h
-(the)g(complete)g(line)d(\(no)j(implicit)c(`)p Fs(*)p
-Ft(')j(is)f(app)s(ended\).)75 b(Eac)m(h)630 3389 y(pattern)42
-b(is)f(tested)h(against)g(the)g(line)e(after)i(the)g(c)m(hec)m(ks)h(sp)
-s(eci\014ed)d(b)m(y)i Fs(HISTCONTROL)630 3498 y Ft(are)37
-b(applied.)57 b(In)36 b(addition)f(to)i(the)g(normal)f(shell)e(pattern)
-j(matc)m(hing)g(c)m(haracters,)j(`)p Fs(&)p Ft(')630
-3608 y(matc)m(hes)d(the)f(previous)f(history)g(line.)55
-b(`)p Fs(&)p Ft(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed)h(using)f(a)h(bac)m
-(kslash;)j(the)630 3717 y(bac)m(kslash)33 b(is)g(remo)m(v)m(ed)i(b)s
-(efore)e(attempting)h(a)h(matc)m(h.)51 b(The)34 b(second)f(and)h
-(subsequen)m(t)630 3827 y(lines)c(of)j(a)g(m)m(ulti-line)c(comp)s(ound)
-i(command)h(are)h(not)f(tested,)i(and)e(are)g(added)g(to)h(the)630
-3937 y(history)c(regardless)h(of)h(the)f(v)-5 b(alue)30
-b(of)h Fs(HISTIGNORE)p Ft(.)630 4076 y Fs(HISTIGNORE)20
-b Ft(subsumes)g(the)j(function)e(of)i Fs(HISTCONTROL)p
-Ft(.)35 b(A)23 b(pattern)f(of)h(`)p Fs(&)p Ft(')g(is)e(iden)m(tical)630
-4186 y(to)26 b Fs(ignoredups)p Ft(,)e(and)h(a)h(pattern)g(of)f(`)p
-Fs([)31 b(]*)p Ft(')25 b(is)g(iden)m(tical)f(to)i Fs(ignorespace)p
+b Ft(The)27 b(name)h(of)g(the)g(\014le)g(to)h(whic)m(h)f(the)g(command)
+f(history)h(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)h(v)-5
+b(alue)630 2172 y(is)30 b(`)p Fs(~/.bash_history)p Ft('.)150
+2342 y Fs(HISTFILESIZE)630 2452 y Ft(The)c(maxim)m(um)f(n)m(um)m(b)s
+(er)g(of)h(lines)h(con)m(tained)g(in)f(the)g(history)g(\014le.)39
+b(When)26 b(this)g(v)-5 b(ariable)630 2561 y(is)25 b(assigned)h(a)g(v)
+-5 b(alue,)27 b(the)f(history)f(\014le)h(is)f(truncated,)i(if)e
+(necessary)-8 b(,)28 b(to)e(con)m(tain)g(no)g(more)630
+2671 y(than)34 b(that)h(n)m(um)m(b)s(er)d(of)j(lines.)52
+b(The)34 b(history)g(\014le)g(is)g(also)h(truncated)f(to)h(this)f(size)
+h(after)630 2781 y(writing)30 b(it)h(when)f(an)g(in)m(teractiv)m(e)j
+(shell)e(exits.)41 b(The)30 b(default)h(v)-5 b(alue)31
+b(is)f(500.)150 2950 y Fs(HISTIGNORE)630 3060 y Ft(A)j(colon-separated)
+h(list)f(of)g(patterns)f(used)g(to)h(decide)g(whic)m(h)f(command)g
+(lines)h(should)630 3169 y(b)s(e)f(sa)m(v)m(ed)h(on)g(the)f(history)h
+(list.)47 b(Eac)m(h)33 b(pattern)g(is)f(anc)m(hored)h(at)g(the)f(b)s
+(eginning)g(of)h(the)630 3279 y(line)43 b(and)e(m)m(ust)h(matc)m(h)h
+(the)g(complete)h(line)e(\(no)h(implicit)g(`)p Fs(*)p
+Ft(')f(is)g(app)s(ended\).)75 b(Eac)m(h)630 3389 y(pattern)42
+b(is)g(tested)g(against)h(the)f(line)g(after)g(the)g(c)m(hec)m(ks)h(sp)
+s(eci\014ed)e(b)m(y)h Fs(HISTCONTROL)630 3498 y Ft(are)37
+b(applied.)59 b(In)36 b(addition)h(to)g(the)g(normal)g(shell)f(pattern)
+h(matc)m(hing)h(c)m(haracters,)i(`)p Fs(&)p Ft(')630
+3608 y(matc)m(hes)d(the)f(previous)g(history)g(line.)57
+b(`)p Fs(&)p Ft(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed)h(using)g(a)g(bac)m
+(kslash;)k(the)630 3717 y(bac)m(kslash)34 b(is)g(remo)m(v)m(ed)h(b)s
+(efore)e(attempting)i(a)g(matc)m(h.)51 b(The)34 b(second)f(and)h
+(subsequen)m(t)630 3827 y(lines)e(of)h(a)g(m)m(ulti-line)g(comp)s(ound)
+e(command)h(are)h(not)f(tested,)i(and)e(are)g(added)g(to)h(the)630
+3937 y(history)d(regardless)h(of)g(the)f(v)-5 b(alue)31
+b(of)g Fs(HISTIGNORE)p Ft(.)630 4076 y Fs(HISTIGNORE)20
+b Ft(subsumes)g(the)j(function)f(of)h Fs(HISTCONTROL)p
+Ft(.)35 b(A)23 b(pattern)f(of)h(`)p Fs(&)p Ft(')g(is)f(iden)m(tical)630
+4186 y(to)k Fs(ignoredups)p Ft(,)e(and)h(a)h(pattern)g(of)f(`)p
+Fs([)31 b(]*)p Ft(')25 b(is)h(iden)m(tical)h(to)f Fs(ignorespace)p
Ft(.)36 b(Com)m(bining)630 4295 y(these)30 b(t)m(w)m(o)h(patterns,)f
-(separating)f(them)h(with)e(a)i(colon,)g(pro)m(vides)e(the)i
-(functionalit)m(y)e(of)630 4405 y Fs(ignoreboth)p Ft(.)150
-4575 y Fs(HISTSIZE)96 b Ft(The)42 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i
-(commands)e(to)j(remem)m(b)s(er)d(on)h(the)h(history)e(list.)75
-b(The)630 4684 y(default)30 b(v)-5 b(alue)29 b(is)h(500.)150
-4854 y Fs(HISTTIMEFORMAT)630 4963 y Ft(If)44 b(this)f(v)-5
-b(ariable)43 b(is)g(set)h(and)g(not)g(n)m(ull,)i(its)e(v)-5
-b(alue)43 b(is)g(used)h(as)g(a)h(format)f(string)f(for)630
-5073 y Fq(strftime)c Ft(to)c(prin)m(t)e(the)i(time)f(stamp)g(asso)s
-(ciated)h(with)f(eac)m(h)h(history)f(en)m(try)g(displa)m(y)m(ed)630
-5183 y(b)m(y)g(the)f Fs(history)f Ft(builtin.)47 b(If)33
-b(this)g(v)-5 b(ariable)32 b(is)h(set,)i(time)e(stamps)h(are)g(written)
-e(to)j(the)630 5292 y(history)29 b(\014le)h(so)g(they)h(ma)m(y)g(b)s(e)
-f(preserv)m(ed)g(across)h(shell)d(sessions.)p eop
+(separating)g(them)g(with)f(a)h(colon,)h(pro)m(vides)e(the)h
+(functionalit)m(y)h(of)630 4405 y Fs(ignoreboth)p Ft(.)150
+4575 y Fs(HISTSIZE)96 b Ft(The)42 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i
+(commands)e(to)j(remem)m(b)s(er)d(on)h(the)h(history)f(list.)77
+b(The)630 4684 y(default)31 b(v)-5 b(alue)30 b(is)h(500.)150
+4854 y Fs(HISTTIMEFORMAT)630 4963 y Ft(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
+5073 y Fq(strftime)c Ft(to)35 b(prin)m(t)f(the)h(time)g(stamp)f(asso)s
+(ciated)i(with)f(eac)m(h)g(history)g(en)m(try)f(displa)m(y)m(ed)630
+5183 y(b)m(y)g(the)f Fs(history)f Ft(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 5292 y(history)30 b(\014le)h(so)f(they)h(ma)m(y)g(b)s(e)
+f(preserv)m(ed)g(across)h(shell)f(sessions.)p eop end
%%Page: 60 66
-60 65 bop 150 -116 a Ft(60)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(HOSTFILE)96 b Ft(Con)m(tains)38 b(the)g(name)g(of)h(a)g
-(\014le)e(in)g(the)h(same)h(format)g(as)f(`)p Fs(/etc/hosts)p
-Ft(')e(that)j(should)630 408 y(b)s(e)i(read)h(when)f(the)i(shell)d
-(needs)h(to)i(complete)g(a)f(hostname.)76 b(The)42 b(list)e(of)i(p)s
-(ossible)630 518 y(hostname)26 b(completions)e(ma)m(y)j(b)s(e)d(c)m
-(hanged)j(while)c(the)j(shell)e(is)g(running;)h(the)h(next)f(time)630
-628 y(hostname)37 b(completion)g(is)f(attempted)i(after)g(the)f(v)-5
-b(alue)36 b(is)h(c)m(hanged,)i(Bash)e(adds)g(the)630
-737 y(con)m(ten)m(ts)27 b(of)f(the)g(new)f(\014le)g(to)i(the)f
-(existing)e(list.)38 b(If)25 b Fs(HOSTFILE)f Ft(is)h(set,)i(but)e(has)h
-(no)f(v)-5 b(alue,)630 847 y(Bash)41 b(attempts)g(to)g(read)f(`)p
-Fs(/etc/hosts)p Ft(')f(to)i(obtain)f(the)g(list)f(of)i(p)s(ossible)d
+TeXDict begin 60 65 bop 150 -116 a Ft(60)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(HOSTFILE)96 b Ft(Con)m(tains)39
+b(the)f(name)g(of)h(a)g(\014le)f(in)g(the)g(same)h(format)g(as)f(`)p
+Fs(/etc/hosts)p Ft(')e(that)j(should)630 408 y(b)s(e)i(read)h(when)f
+(the)i(shell)f(needs)f(to)i(complete)h(a)e(hostname.)76
+b(The)42 b(list)g(of)g(p)s(ossible)630 518 y(hostname)26
+b(completions)g(ma)m(y)h(b)s(e)d(c)m(hanged)j(while)e(the)h(shell)g(is)
+f(running;)h(the)g(next)f(time)630 628 y(hostname)37
+b(completion)i(is)e(attempted)h(after)g(the)f(v)-5 b(alue)37
+b(is)h(c)m(hanged,)h(Bash)e(adds)g(the)630 737 y(con)m(ten)m(ts)27
+b(of)f(the)g(new)f(\014le)h(to)h(the)f(existing)g(list.)40
+b(If)25 b Fs(HOSTFILE)f Ft(is)i(set,)h(but)e(has)h(no)f(v)-5
+b(alue,)630 847 y(Bash)41 b(attempts)g(to)g(read)f(`)p
+Fs(/etc/hosts)p Ft(')f(to)i(obtain)g(the)f(list)h(of)g(p)s(ossible)f
(hostname)630 956 y(completions.)i(When)30 b Fs(HOSTFILE)e
-Ft(is)i(unset,)g(the)g(hostname)h(list)e(is)g(cleared.)150
+Ft(is)j(unset,)f(the)g(hostname)h(list)g(is)f(cleared.)150
1125 y Fs(HOSTNAME)96 b Ft(The)30 b(name)g(of)h(the)f(curren)m(t)h
-(host.)150 1294 y Fs(HOSTTYPE)96 b Ft(A)30 b(string)g(describing)e(the)
-i(mac)m(hine)g(Bash)h(is)e(running)f(on.)150 1462 y Fs(IGNOREEOF)630
-1572 y Ft(Con)m(trols)e(the)i(action)f(of)g(the)g(shell)e(on)i(receipt)
-g(of)g(an)g Fs(EOF)f Ft(c)m(haracter)i(as)g(the)f(sole)g(input.)630
-1681 y(If)j(set,)i(the)f(v)-5 b(alue)31 b(denotes)g(the)g(n)m(um)m(b)s
-(er)f(of)h(consecutiv)m(e)h Fs(EOF)e Ft(c)m(haracters)i(that)f(can)h(b)
+(host.)150 1294 y Fs(HOSTTYPE)96 b Ft(A)30 b(string)h(describing)f(the)
+g(mac)m(hine)h(Bash)g(is)f(running)f(on.)150 1462 y Fs(IGNOREEOF)630
+1572 y Ft(Con)m(trols)e(the)h(action)g(of)f(the)g(shell)g(on)g(receipt)
+h(of)f(an)g Fs(EOF)f Ft(c)m(haracter)i(as)g(the)f(sole)h(input.)630
+1681 y(If)i(set,)i(the)f(v)-5 b(alue)32 b(denotes)f(the)g(n)m(um)m(b)s
+(er)f(of)h(consecutiv)m(e)i Fs(EOF)d Ft(c)m(haracters)i(that)f(can)h(b)
s(e)630 1791 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i(on)f(an)f
-(input)f(line)g(b)s(efore)h(the)h(shell)e(will)f(exit.)69
-b(If)39 b(the)630 1901 y(v)-5 b(ariable)36 b(exists)g(but)g(do)s(es)g
-(not)h(ha)m(v)m(e)h(a)g(n)m(umeric)d(v)-5 b(alue)36 b(\(or)i(has)e(no)h
-(v)-5 b(alue\))36 b(then)h(the)630 2010 y(default)30
-b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)29 b(do)s(es)i(not)g
-(exist,)g(then)f Fs(EOF)g Ft(signi\014es)f(the)i(end)f(of)h(input)630
-2120 y(to)g(the)g(shell.)39 b(This)28 b(is)i(only)f(in)g(e\013ect)j
-(for)e(in)m(teractiv)m(e)h(shells.)150 2288 y Fs(INPUTRC)144
-b Ft(The)68 b(name)h(of)f(the)h(Readline)e(initialization)f(\014le,)77
-b(o)m(v)m(erriding)67 b(the)i(default)f(of)630 2398 y(`)p
+(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70
+b(If)39 b(the)630 1901 y(v)-5 b(ariable)38 b(exists)f(but)f(do)s(es)g
+(not)h(ha)m(v)m(e)h(a)g(n)m(umeric)e(v)-5 b(alue)37 b(\(or)h(has)e(no)h
+(v)-5 b(alue\))37 b(then)g(the)630 2010 y(default)31
+b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)31 b(do)s(es)g(not)g
+(exist,)h(then)e Fs(EOF)g Ft(signi\014es)h(the)g(end)f(of)h(input)630
+2120 y(to)g(the)g(shell.)41 b(This)29 b(is)i(only)f(in)g(e\013ect)i
+(for)e(in)m(teractiv)m(e)j(shells.)150 2288 y Fs(INPUTRC)144
+b Ft(The)68 b(name)h(of)f(the)h(Readline)g(initialization)j(\014le,)78
+b(o)m(v)m(erriding)69 b(the)g(default)g(of)630 2398 y(`)p
Fs(~/.inputrc)p Ft('.)150 2567 y Fs(LANG)288 b Ft(Used)28
-b(to)h(determine)e(the)h(lo)s(cale)f(category)j(for)e(an)m(y)h
-(category)h(not)e(sp)s(eci\014cally)d(selected)630 2676
-y(with)k(a)i(v)-5 b(ariable)29 b(starting)h(with)f Fs(LC_)p
-Ft(.)150 2845 y Fs(LC_ALL)192 b Ft(This)27 b(v)-5 b(ariable)27
-b(o)m(v)m(errides)i(the)g(v)-5 b(alue)28 b(of)h Fs(LANG)f
-Ft(and)g(an)m(y)h(other)g Fs(LC_)f Ft(v)-5 b(ariable)27
-b(sp)s(ecifying)630 2954 y(a)k(lo)s(cale)f(category)-8
-b(.)150 3123 y Fs(LC_COLLATE)630 3232 y Ft(This)36 b(v)-5
-b(ariable)36 b(determines)h(the)h(collation)f(order)g(used)g(when)f
-(sorting)h(the)h(results)f(of)630 3342 y(\014lename)e(expansion,)i(and)
-f(determines)f(the)i(b)s(eha)m(vior)e(of)h(range)h(expressions,)g
-(equiv-)630 3452 y(alence)e(classes,)h(and)f(collating)f(sequences)h
-(within)d(\014lename)i(expansion)g(and)g(pattern)630
-3561 y(matc)m(hing)c(\(see)i(Section)e(3.5.8)i([Filename)e(Expansion],)
-f(page)i(22\).)150 3730 y Fs(LC_CTYPE)96 b Ft(This)35
-b(v)-5 b(ariable)35 b(determines)g(the)i(in)m(terpretation)f(of)h(c)m
-(haracters)h(and)e(the)g(b)s(eha)m(vior)g(of)630 3839
-y(c)m(haracter)46 b(classes)f(within)d(\014lename)i(expansion)g(and)g
-(pattern)h(matc)m(hing)g(\(see)g(Sec-)630 3949 y(tion)30
-b(3.5.8)i([Filename)e(Expansion],)f(page)i(22\).)150
-4118 y Fs(LC_MESSAGES)630 4227 y Ft(This)24 b(v)-5 b(ariable)25
-b(determines)g(the)h(lo)s(cale)g(used)f(to)i(translate)f(double-quoted)
+b(to)h(determine)f(the)g(lo)s(cale)h(category)h(for)e(an)m(y)h
+(category)h(not)e(sp)s(eci\014cally)g(selected)630 2676
+y(with)i(a)h(v)-5 b(ariable)31 b(starting)g(with)f Fs(LC_)p
+Ft(.)150 2845 y Fs(LC_ALL)192 b Ft(This)28 b(v)-5 b(ariable)29
+b(o)m(v)m(errides)h(the)f(v)-5 b(alue)29 b(of)g Fs(LANG)f
+Ft(and)g(an)m(y)h(other)g Fs(LC_)f Ft(v)-5 b(ariable)29
+b(sp)s(ecifying)630 2954 y(a)i(lo)s(cale)h(category)-8
+b(.)150 3123 y Fs(LC_COLLATE)630 3232 y Ft(This)37 b(v)-5
+b(ariable)38 b(determines)g(the)g(collation)i(order)d(used)g(when)f
+(sorting)i(the)g(results)g(of)630 3342 y(\014lename)e(expansion,)i(and)
+e(determines)g(the)h(b)s(eha)m(vior)f(of)g(range)h(expressions,)h
+(equiv-)630 3452 y(alence)e(classes,)h(and)e(collating)i(sequences)e
+(within)f(\014lename)h(expansion)g(and)f(pattern)630
+3561 y(matc)m(hing)d(\(see)h(Section)f(3.5.8)h([Filename)g(Expansion],)
+e(page)h(22\).)150 3730 y Fs(LC_CTYPE)96 b Ft(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 3839
+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 3949 y(tion)31
+b(3.5.8)h([Filename)g(Expansion],)e(page)h(22\).)150
+4118 y Fs(LC_MESSAGES)630 4227 y Ft(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 4337 y(ceded)31 b(b)m(y)f(a)h(`)p
-Fs($)p Ft(')f(\(see)h(Section)g(3.1.2.5)h([Lo)s(cale)f(T)-8
-b(ranslation],)30 b(page)h(7\).)150 4505 y Fs(LC_NUMERIC)630
-4615 y Ft(This)e(v)-5 b(ariable)29 b(determines)g(the)i(lo)s(cale)f
-(category)i(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150
-4784 y Fs(LINENO)192 b Ft(The)30 b(line)f(n)m(um)m(b)s(er)g(in)g(the)h
-(script)g(or)g(shell)e(function)i(curren)m(tly)f(executing.)150
+Fs($)p Ft(')f(\(see)h(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8
+b(ranslation],)32 b(page)f(7\).)150 4505 y Fs(LC_NUMERIC)630
+4615 y Ft(This)f(v)-5 b(ariable)31 b(determines)f(the)h(lo)s(cale)h
+(category)g(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150
+4784 y Fs(LINENO)192 b Ft(The)30 b(line)h(n)m(um)m(b)s(er)e(in)h(the)g
+(script)h(or)f(shell)g(function)h(curren)m(tly)f(executing.)150
4952 y Fs(LINES)240 b Ft(Used)25 b(b)m(y)g(the)g Fs(select)e
-Ft(builtin)f(command)j(to)h(determine)e(the)h(column)f(length)g(for)h
-(prin)m(t-)630 5062 y(ing)30 b(selection)g(lists.)39
-b(Automatically)30 b(set)h(up)s(on)e(receipt)h(of)g(a)h
+Ft(builtin)i(command)g(to)h(determine)f(the)g(column)g(length)g(for)g
+(prin)m(t-)630 5062 y(ing)31 b(selection)h(lists.)41
+b(Automatically)33 b(set)e(up)s(on)e(receipt)i(of)f(a)h
Fs(SIGWINCH)p Ft(.)150 5230 y Fs(MACHTYPE)96 b Ft(A)26
-b(string)f(that)i(fully)d(describ)s(es)g(the)i(system)g(t)m(yp)s(e)h
-(on)f(whic)m(h)e(Bash)j(is)e(executing,)i(in)e(the)630
-5340 y(standard)30 b Fl(gnu)g Fq(cpu-compan)m(y-system)h
-Ft(format.)p eop
+b(string)g(that)h(fully)f(describ)s(es)f(the)h(system)g(t)m(yp)s(e)h
+(on)f(whic)m(h)f(Bash)i(is)f(executing,)i(in)e(the)630
+5340 y(standard)k Fl(gnu)g Fq(cpu-compan)m(y-system)h
+Ft(format.)p eop end
%%Page: 61 67
-61 66 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28
-b(V)-8 b(ariables)2457 b(61)150 299 y Fs(MAILCHECK)630
-408 y Ft(Ho)m(w)28 b(often)g(\(in)f(seconds\))h(that)g(the)f(shell)f
-(should)g(c)m(hec)m(k)j(for)e(mail)f(in)g(the)i(\014les)f(sp)s
-(eci\014ed)630 518 y(in)i(the)i Fs(MAILPATH)e Ft(or)i
-Fs(MAIL)e Ft(v)-5 b(ariables.)41 b(The)30 b(default)g(is)f(60)j
-(seconds.)42 b(When)30 b(it)g(is)g(time)630 628 y(to)37
-b(c)m(hec)m(k)h(for)e(mail,)h(the)g(shell)d(do)s(es)i(so)h(b)s(efore)f
-(displa)m(ying)e(the)i(primary)f(prompt.)57 b(If)630
-737 y(this)36 b(v)-5 b(ariable)36 b(is)g(unset,)i(or)f(set)h(to)g(a)f
-(v)-5 b(alue)37 b(that)g(is)f(not)i(a)f(n)m(um)m(b)s(er)f(greater)i
-(than)f(or)630 847 y(equal)30 b(to)h(zero,)g(the)g(shell)e(disables)f
+TeXDict begin 61 66 bop 150 -116 a Ft(Chapter)30 b(5:)41
+b(Shell)30 b(V)-8 b(ariables)2459 b(61)150 299 y Fs(MAILCHECK)630
+408 y Ft(Ho)m(w)28 b(often)g(\(in)g(seconds\))g(that)g(the)f(shell)h
+(should)f(c)m(hec)m(k)i(for)e(mail)h(in)f(the)h(\014les)g(sp)s
+(eci\014ed)630 518 y(in)i(the)h Fs(MAILPATH)e Ft(or)i
+Fs(MAIL)e Ft(v)-5 b(ariables.)43 b(The)30 b(default)h(is)f(60)i
+(seconds.)42 b(When)30 b(it)h(is)g(time)630 628 y(to)37
+b(c)m(hec)m(k)h(for)e(mail,)j(the)e(shell)f(do)s(es)g(so)h(b)s(efore)f
+(displa)m(ying)h(the)f(primary)g(prompt.)57 b(If)630
+737 y(this)37 b(v)-5 b(ariable)38 b(is)f(unset,)h(or)f(set)h(to)g(a)f
+(v)-5 b(alue)38 b(that)f(is)g(not)h(a)f(n)m(um)m(b)s(er)f(greater)i
+(than)f(or)630 847 y(equal)31 b(to)g(zero,)g(the)g(shell)g(disables)f
(mail)h(c)m(hec)m(king.)150 1011 y Fs(OLDPWD)192 b Ft(The)30
-b(previous)f(w)m(orking)g(directory)h(as)h(set)g(b)m(y)f(the)h
+b(previous)g(w)m(orking)g(directory)h(as)g(set)g(b)m(y)f(the)h
Fs(cd)e Ft(builtin.)150 1176 y Fs(OPTERR)192 b Ft(If)35
-b(set)i(to)f(the)h(v)-5 b(alue)35 b(1,)j(Bash)e(displa)m(ys)e(error)h
+b(set)i(to)f(the)h(v)-5 b(alue)36 b(1,)i(Bash)e(displa)m(ys)g(error)f
(messages)i(generated)g(b)m(y)f(the)g Fs(getopts)630
-1285 y Ft(builtin)27 b(command.)150 1450 y Fs(OSTYPE)192
-b Ft(A)30 b(string)g(describing)e(the)i(op)s(erating)g(system)h(Bash)f
-(is)g(running)d(on.)150 1614 y Fs(PIPESTATUS)630 1724
-y Ft(An)c(arra)m(y)h(v)-5 b(ariable)22 b(\(see)j(Section)e(6.7)i([Arra)
-m(ys],)g(page)f(72\))h(con)m(taining)e(a)h(list)e(of)i(exit)f(sta-)630
-1833 y(tus)i(v)-5 b(alues)26 b(from)f(the)h(pro)s(cesses)g(in)e(the)i
-(most-recen)m(tly-executed)i(foreground)d(pip)s(eline)630
-1943 y(\(whic)m(h)k(ma)m(y)i(con)m(tain)g(only)f(a)g(single)f
+1285 y Ft(builtin)30 b(command.)150 1450 y Fs(OSTYPE)192
+b Ft(A)30 b(string)h(describing)f(the)g(op)s(erating)h(system)g(Bash)f
+(is)h(running)d(on.)150 1614 y Fs(PIPESTATUS)630 1724
+y Ft(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(72\))h(con)m(taining)g(a)f(list)g(of)g(exit)g
+(sta-)630 1833 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
+1943 y(\(whic)m(h)30 b(ma)m(y)h(con)m(tain)h(only)f(a)f(single)h
(command\).)150 2107 y Fs(POSIXLY_CORRECT)630 2217 y
-Ft(If)j(this)g(v)-5 b(ariable)32 b(is)g(in)f(the)i(en)m(vironmen)m(t)g
-(when)e Fs(bash)h Ft(starts,)i(the)f(shell)e(en)m(ters)j
-Fl(posix)630 2326 y Ft(mo)s(de)22 b(\(see)h(Section)f(6.11)i([Bash)e
-(POSIX)f(Mo)s(de],)k(page)e(76\))g(b)s(efore)f(reading)f(the)h(startup)
-630 2436 y(\014les,)31 b(as)g(if)g(the)g(`)p Fs(--posix)p
-Ft(')f(in)m(v)m(o)s(cation)h(option)g(had)g(b)s(een)g(supplied.)40
-b(If)31 b(it)g(is)f(set)i(while)630 2545 y(the)f(shell)d(is)i(running,)
-d Fs(bash)j Ft(enables)f Fl(posix)h Ft(mo)s(de,)g(as)h(if)e(the)i
+Ft(If)h(this)h(v)-5 b(ariable)34 b(is)f(in)f(the)h(en)m(vironmen)m(t)h
+(when)d Fs(bash)h Ft(starts,)i(the)f(shell)g(en)m(ters)h
+Fl(posix)630 2326 y Ft(mo)s(de)22 b(\(see)h(Section)g(6.11)h([Bash)e
+(POSIX)f(Mo)s(de],)k(page)e(76\))g(b)s(efore)f(reading)g(the)g(startup)
+630 2436 y(\014les,)32 b(as)f(if)h(the)f(`)p Fs(--posix)p
+Ft(')f(in)m(v)m(o)s(cation)j(option)f(had)f(b)s(een)g(supplied.)42
+b(If)31 b(it)h(is)f(set)h(while)630 2545 y(the)f(shell)f(is)h(running,)
+d Fs(bash)i Ft(enables)g Fl(posix)g Ft(mo)s(de,)g(as)h(if)f(the)h
(command)870 2682 y Fs(set)47 b(-o)g(posix)630 2819 y
Ft(had)30 b(b)s(een)f(executed.)150 2984 y Fs(PPID)288
-b Ft(The)30 b(pro)s(cess)g Fl(id)g Ft(of)h(the)f(shell's)f(paren)m(t)i
-(pro)s(cess.)40 b(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8
+b Ft(The)30 b(pro)s(cess)g Fl(id)g Ft(of)h(the)f(shell's)h(paren)m(t)g
+(pro)s(cess.)40 b(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8
b(.)150 3148 y Fs(PROMPT_COMMAND)630 3258 y Ft(If)32
-b(set,)h(the)f(v)-5 b(alue)32 b(is)f(in)m(terpreted)g(as)h(a)h(command)
-f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)e(of)630
-3367 y(eac)m(h)i(primary)c(prompt)h(\()p Fs($PS1)p Ft(\).)150
-3532 y Fs(PS3)336 b Ft(The)34 b(v)-5 b(alue)34 b(of)g(this)f(v)-5
-b(ariable)33 b(is)h(used)f(as)i(the)f(prompt)g(for)g(the)g
-Fs(select)f Ft(command.)52 b(If)630 3641 y(this)29 b(v)-5
-b(ariable)29 b(is)h(not)g(set,)i(the)e Fs(select)f Ft(command)h
-(prompts)f(with)g(`)p Fs(#?)h Ft(')150 3806 y Fs(PS4)336
-b Ft(The)33 b(v)-5 b(alue)33 b(is)g(the)h(prompt)f(prin)m(ted)f(b)s
-(efore)h(the)h(command)f(line)f(is)h(ec)m(ho)s(ed)h(when)f(the)630
-3915 y(`)p Fs(-x)p Ft(')23 b(option)g(is)g(set)h(\(see)g(Section)g(4.3)
-g([The)f(Set)h(Builtin],)f(page)h(50\).)40 b(The)23 b(\014rst)f(c)m
-(haracter)630 4025 y(of)34 b Fs(PS4)g Ft(is)f(replicated)h(m)m(ultiple)
-e(times,)j(as)f(necessary)-8 b(,)37 b(to)e(indicate)e(m)m(ultiple)f
-(lev)m(els)i(of)630 4134 y(indirection.)k(The)30 b(default)g(is)f(`)p
-Fs(+)h Ft('.)150 4299 y Fs(PWD)336 b Ft(The)30 b(curren)m(t)g(w)m
-(orking)g(directory)g(as)g(set)h(b)m(y)f(the)h Fs(cd)f
+b(set,)h(the)f(v)-5 b(alue)33 b(is)f(in)m(terpreted)g(as)g(a)h(command)
+f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)g(of)630
+3367 y(eac)m(h)g(primary)d(prompt)g(\()p Fs($PS1)p Ft(\).)150
+3532 y Fs(PS3)336 b Ft(The)34 b(v)-5 b(alue)35 b(of)f(this)g(v)-5
+b(ariable)35 b(is)g(used)e(as)i(the)f(prompt)g(for)g(the)g
+Fs(select)f Ft(command.)52 b(If)630 3641 y(this)30 b(v)-5
+b(ariable)31 b(is)g(not)f(set,)i(the)e Fs(select)f Ft(command)h
+(prompts)f(with)h(`)p Fs(#?)g Ft(')150 3806 y Fs(PS4)336
+b Ft(The)33 b(v)-5 b(alue)34 b(is)g(the)g(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)630
+3915 y(`)p Fs(-x)p Ft(')23 b(option)h(is)g(set)g(\(see)g(Section)h(4.3)
+f([The)f(Set)h(Builtin],)i(page)e(50\).)40 b(The)23 b(\014rst)f(c)m
+(haracter)630 4025 y(of)34 b Fs(PS4)g Ft(is)g(replicated)i(m)m(ultiple)
+f(times,)h(as)e(necessary)-8 b(,)37 b(to)e(indicate)g(m)m(ultiple)g
+(lev)m(els)h(of)630 4134 y(indirection.)41 b(The)30 b(default)h(is)f(`)
+p Fs(+)g Ft('.)150 4299 y Fs(PWD)336 b Ft(The)30 b(curren)m(t)g(w)m
+(orking)h(directory)g(as)f(set)h(b)m(y)f(the)h Fs(cd)f
Ft(builtin.)150 4463 y Fs(RANDOM)192 b Ft(Eac)m(h)30
-b(time)f(this)f(parameter)h(is)f(referenced,)i(a)f(random)g(in)m(teger)
-g(b)s(et)m(w)m(een)h(0)f(and)g(32767)630 4573 y(is)h(generated.)43
-b(Assigning)29 b(a)i(v)-5 b(alue)30 b(to)h(this)f(v)-5
-b(ariable)29 b(seeds)i(the)g(random)f(n)m(um)m(b)s(er)f(gen-)630
-4682 y(erator.)150 4847 y Fs(REPLY)240 b Ft(The)30 b(default)f(v)-5
-b(ariable)30 b(for)g(the)g Fs(read)g Ft(builtin.)150
-5011 y Fs(SECONDS)144 b Ft(This)39 b(v)-5 b(ariable)39
-b(expands)h(to)h(the)g(n)m(um)m(b)s(er)e(of)i(seconds)g(since)f(the)g
-(shell)f(w)m(as)i(started.)630 5121 y(Assignmen)m(t)h(to)h(this)f(v)-5
-b(ariable)41 b(resets)i(the)g(coun)m(t)g(to)g(the)g(v)-5
-b(alue)42 b(assigned,)j(and)d(the)630 5230 y(expanded)35
-b(v)-5 b(alue)35 b(b)s(ecomes)i(the)f(v)-5 b(alue)35
-b(assigned)g(plus)f(the)i(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630
-5340 y(the)31 b(assignmen)m(t.)p eop
+b(time)g(this)f(parameter)g(is)g(referenced,)h(a)f(random)g(in)m(teger)
+h(b)s(et)m(w)m(een)g(0)f(and)g(32767)630 4573 y(is)i(generated.)43
+b(Assigning)31 b(a)g(v)-5 b(alue)31 b(to)g(this)g(v)-5
+b(ariable)31 b(seeds)g(the)g(random)f(n)m(um)m(b)s(er)f(gen-)630
+4682 y(erator.)150 4847 y Fs(REPLY)240 b Ft(The)30 b(default)g(v)-5
+b(ariable)32 b(for)e(the)g Fs(read)g Ft(builtin.)150
+5011 y Fs(SECONDS)144 b Ft(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 5121 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 5230 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
+5340 y(the)31 b(assignmen)m(t.)p eop end
%%Page: 62 68
-62 67 bop 150 -116 a Ft(62)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(SHELL)240 b Ft(The)29 b(full)f(pathname)i(to)h(the)f(shell)e
-(is)h(k)m(ept)h(in)f(this)g(en)m(vironmen)m(t)g(v)-5
-b(ariable.)40 b(If)29 b(it)h(is)f(not)630 408 y(set)36
-b(when)f(the)h(shell)e(starts,)k(Bash)e(assigns)g(to)g(it)g(the)g(full)
-d(pathname)j(of)g(the)g(curren)m(t)630 518 y(user's)30
-b(login)f(shell.)150 666 y Fs(SHELLOPTS)630 775 y Ft(A)i
-(colon-separated)g(list)e(of)i(enabled)e(shell)g(options.)40
-b(Eac)m(h)31 b(w)m(ord)f(in)f(the)i(list)e(is)h(a)h(v)-5
+TeXDict begin 62 67 bop 150 -116 a Ft(62)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(SHELL)240 b Ft(The)29
+b(full)h(pathname)g(to)h(the)f(shell)g(is)g(k)m(ept)g(in)g(this)g(en)m
+(vironmen)m(t)g(v)-5 b(ariable.)42 b(If)29 b(it)i(is)f(not)630
+408 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 518
+y(user's)30 b(login)h(shell.)150 666 y Fs(SHELLOPTS)630
+775 y Ft(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 885 y(argumen)m(t)29 b(for)g(the)g(`)p Fs(-o)p
-Ft(')g(option)f(to)i(the)f Fs(set)f Ft(builtin)e(command)j(\(see)g
-(Section)g(4.3)h([The)630 994 y(Set)f(Builtin],)e(page)i(50\).)42
-b(The)28 b(options)g(app)s(earing)f(in)g Fs(SHELLOPTS)f
+Ft(')g(option)g(to)h(the)f Fs(set)f Ft(builtin)h(command)g(\(see)g
+(Section)h(4.3)g([The)630 994 y(Set)f(Builtin],)h(page)f(50\).)42
+b(The)28 b(options)h(app)s(earing)f(in)g Fs(SHELLOPTS)e
Ft(are)j(those)h(rep)s(orted)630 1104 y(as)g(`)p Fs(on)p
-Ft(')f(b)m(y)h(`)p Fs(set)g(-o)p Ft('.)40 b(If)29 b(this)g(v)-5
-b(ariable)28 b(is)h(in)f(the)i(en)m(vironmen)m(t)f(when)g(Bash)h
-(starts)g(up,)630 1213 y(eac)m(h)41 b(shell)c(option)i(in)f(the)i(list)
-e(will)e(b)s(e)j(enabled)g(b)s(efore)g(reading)f(an)m(y)i(startup)f
-(\014les.)630 1323 y(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8
+Ft(')f(b)m(y)h(`)p Fs(set)g(-o)p Ft('.)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 1213 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 1323 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8
b(.)150 1471 y Fs(SHLVL)240 b Ft(Incremen)m(ted)21 b(b)m(y)g(one)g(eac)
-m(h)h(time)e(a)i(new)e(instance)g(of)h(Bash)g(is)f(started.)38
-b(This)19 b(is)h(in)m(tended)630 1580 y(to)31 b(b)s(e)f(a)h(coun)m(t)g
-(of)f(ho)m(w)h(deeply)e(y)m(our)h(Bash)h(shells)d(are)j(nested.)150
-1728 y Fs(TIMEFORMAT)630 1837 y Ft(The)f(v)-5 b(alue)31
-b(of)g(this)f(parameter)h(is)f(used)g(as)h(a)g(format)h(string)e(sp)s
-(ecifying)e(ho)m(w)j(the)g(tim-)630 1947 y(ing)36 b(information)e(for)j
-(pip)s(elines)c(pre\014xed)i(with)g(the)i Fs(time)e Ft(reserv)m(ed)i(w)
-m(ord)f(should)f(b)s(e)630 2056 y(displa)m(y)m(ed.)j(The)27
-b(`)p Fs(\045)p Ft(')h(c)m(haracter)h(in)m(tro)s(duces)d(an)i(escap)s
-(e)g(sequence)g(that)g(is)e(expanded)h(to)630 2166 y(a)37
-b(time)f(v)-5 b(alue)35 b(or)i(other)f(information.)57
-b(The)36 b(escap)s(e)g(sequences)h(and)e(their)h(meanings)630
-2276 y(are)31 b(as)f(follo)m(ws;)g(the)h(braces)f(denote)h(optional)f
-(p)s(ortions.)630 2423 y Fs(\045\045)384 b Ft(A)30 b(literal)f(`)p
+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 1580 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
+1728 y Fs(TIMEFORMAT)630 1837 y Ft(The)f(v)-5 b(alue)32
+b(of)f(this)g(parameter)g(is)g(used)f(as)h(a)g(format)h(string)f(sp)s
+(ecifying)f(ho)m(w)h(the)g(tim-)630 1947 y(ing)37 b(information)f(for)h
+(pip)s(elines)f(pre\014xed)f(with)h(the)h Fs(time)e Ft(reserv)m(ed)i(w)
+m(ord)f(should)g(b)s(e)630 2056 y(displa)m(y)m(ed.)k(The)27
+b(`)p Fs(\045)p Ft(')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 2166 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
+2276 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h
+(p)s(ortions.)630 2423 y Fs(\045\045)384 b Ft(A)30 b(literal)i(`)p
Fs(\045)p Ft('.)630 2570 y Fs(\045[)p Fj(p)11 b Fs(][l]R)85
-b Ft(The)30 b(elapsed)g(time)g(in)f(seconds.)630 2718
+b Ft(The)30 b(elapsed)h(time)g(in)f(seconds.)630 2718
y Fs(\045[)p Fj(p)11 b Fs(][l]U)85 b Ft(The)30 b(n)m(um)m(b)s(er)f(of)h
-(CPU)g(seconds)h(sp)s(en)m(t)f(in)f(user)g(mo)s(de.)630
+(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(user)f(mo)s(de.)630
2865 y Fs(\045[)p Fj(p)11 b Fs(][l]S)85 b Ft(The)30 b(n)m(um)m(b)s(er)f
-(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)f(system)h(mo)s(de.)630
+(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(system)g(mo)s(de.)630
3013 y Fs(\045P)384 b Ft(The)30 b(CPU)g(p)s(ercen)m(tage,)i(computed)e
(as)h(\(\045U)f Fs(+)g Ft(\045S\))g(/)h(\045R.)630 3160
-y(The)23 b(optional)h Fq(p)i Ft(is)d(a)h(digit)f(sp)s(ecifying)e(the)j
-(precision,)g(the)g(n)m(um)m(b)s(er)f(of)h(fractional)f(digits)630
-3270 y(after)36 b(a)f(decimal)g(p)s(oin)m(t.)54 b(A)35
-b(v)-5 b(alue)35 b(of)g(0)h(causes)g(no)f(decimal)f(p)s(oin)m(t)g(or)i
-(fraction)f(to)h(b)s(e)630 3379 y(output.)48 b(A)m(t)34
-b(most)f(three)g(places)g(after)g(the)g(decimal)f(p)s(oin)m(t)g(ma)m(y)
-i(b)s(e)e(sp)s(eci\014ed;)h(v)-5 b(alues)630 3489 y(of)31
+y(The)23 b(optional)j Fq(p)g Ft(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
+3270 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 3379 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 3489 y(of)31
b Fq(p)h Ft(greater)g(than)e(3)h(are)f(c)m(hanged)h(to)g(3.)42
-b(If)29 b Fq(p)k Ft(is)c(not)i(sp)s(eci\014ed,)e(the)i(v)-5
-b(alue)29 b(3)i(is)f(used.)630 3618 y(The)54 b(optional)f
-Fs(l)h Ft(sp)s(eci\014es)f(a)i(longer)e(format,)61 b(including)51
-b(min)m(utes,)60 b(of)54 b(the)g(form)630 3727 y Fq(MM)10
+b(If)29 b Fq(p)k Ft(is)d(not)h(sp)s(eci\014ed,)f(the)h(v)-5
+b(alue)30 b(3)h(is)g(used.)630 3618 y(The)54 b(optional)h
+Fs(l)f Ft(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 3727 y Fq(MM)10
b Ft(m)p Fq(SS)p Ft(.)p Fq(FF)d Ft(s.)103 b(The)50 b(v)-5
-b(alue)51 b(of)g Fq(p)j Ft(determines)c(whether)g(or)h(not)h(the)f
-(fraction)g(is)630 3837 y(included.)630 3965 y(If)30
-b(this)f(v)-5 b(ariable)29 b(is)h(not)g(set,)i(Bash)e(acts)h(as)g(if)e
-(it)h(had)g(the)h(v)-5 b(alue)870 4094 y Fs
+b(alue)52 b(of)f Fq(p)j Ft(determines)d(whether)f(or)h(not)h(the)f
+(fraction)h(is)630 3837 y(included.)630 3965 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 4094 y Fs
($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630
-4222 y Ft(If)37 b(the)g(v)-5 b(alue)37 b(is)f(n)m(ull,)h(no)h(timing)d
-(information)h(is)g(displa)m(y)m(ed.)60 b(A)37 b(trailing)f(newline)f
-(is)630 4332 y(added)30 b(when)f(the)i(format)f(string)g(is)f(displa)m
+4222 y Ft(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 4332 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m
(y)m(ed.)150 4479 y Fs(TMOUT)240 b Ft(If)22 b(set)h(to)g(a)g(v)-5
-b(alue)22 b(greater)i(than)e(zero,)j Fs(TMOUT)d Ft(is)f(treated)j(as)e
-(the)h(default)f(timeout)g(for)h(the)630 4589 y Fs(read)31
-b Ft(builtin)e(\(see)k(Section)e(4.2)j([Bash)e(Builtins],)e(page)j
+b(alue)23 b(greater)h(than)e(zero,)j Fs(TMOUT)d Ft(is)g(treated)i(as)e
+(the)h(default)g(timeout)g(for)g(the)630 4589 y Fs(read)31
+b Ft(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g
(39\).)47 b(The)32 b Fs(select)e Ft(command)630 4699
-y(\(see)f(Section)g(3.2.4.2)h([Conditional)d(Constructs],)h(page)i
-(10\))f(terminates)f(if)g(input)e(do)s(es)630 4808 y(not)31
-b(arriv)m(e)f(after)h Fs(TMOUT)e Ft(seconds)h(when)f(input)g(is)g
-(coming)h(from)g(a)h(terminal.)630 4937 y(In)d(an)h(in)m(terativ)m(e)g
-(shell,)e(the)i(v)-5 b(alue)29 b(is)e(in)m(terpreted)h(as)h(the)g(n)m
-(um)m(b)s(er)f(of)h(seconds)f(to)i(w)m(ait)630 5046 y(for)i(input)e
-(after)j(issuing)d(the)i(primary)f(prompt)g(when)g(the)i(shell)d(is)i
-(in)m(teractiv)m(e.)47 b(Bash)630 5156 y(terminates)30
-b(after)h(that)g(n)m(um)m(b)s(er)e(of)i(seconds)f(if)f(input)g(do)s(es)
-h(not)g(arriv)m(e.)150 5303 y Fs(UID)336 b Ft(The)30
-b(n)m(umeric)f(real)h(user)g(id)f(of)h(the)h(curren)m(t)f(user.)40
-b(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8 b(.)p
-eop
+y(\(see)f(Section)h(3.2.4.2)g([Conditional)g(Constructs],)e(page)i
+(10\))f(terminates)g(if)g(input)e(do)s(es)630 4808 y(not)k(arriv)m(e)g
+(after)g Fs(TMOUT)e Ft(seconds)h(when)f(input)h(is)g(coming)h(from)f(a)
+h(terminal.)630 4937 y(In)d(an)h(in)m(terativ)m(e)i(shell,)e(the)g(v)-5
+b(alue)30 b(is)e(in)m(terpreted)h(as)g(the)g(n)m(um)m(b)s(er)f(of)h
+(seconds)f(to)i(w)m(ait)630 5046 y(for)i(input)f(after)i(issuing)f(the)
+g(primary)g(prompt)f(when)g(the)i(shell)f(is)h(in)m(teractiv)m(e.)49
+b(Bash)630 5156 y(terminates)31 b(after)g(that)g(n)m(um)m(b)s(er)e(of)i
+(seconds)f(if)g(input)g(do)s(es)g(not)g(arriv)m(e.)150
+5303 y Fs(UID)336 b Ft(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: 63 69
-63 68 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(63)150 299 y Fo(6)80 b(Bash)54
-b(F)-13 b(eatures)275 537 y Ft(This)28 b(section)j(describ)s(es)d
-(features)j(unique)d(to)k(Bash.)150 798 y Fr(6.1)68 b(In)l(v)l(oking)46
-b(Bash)390 1017 y Fs(bash)h([long-opt])e([-ir])h
+TeXDict begin 63 68 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(63)150 299 y Fo(6)80
+b(Bash)54 b(F)-13 b(eatures)275 537 y Ft(This)29 b(section)j(describ)s
+(es)d(features)i(unique)e(to)j(Bash.)150 798 y Fr(6.1)68
+b(In)l(v)l(oking)46 b(Bash)390 1017 y Fs(bash)h([long-opt])e([-ir])h
([-abefhkmnptuvxdBCDHP])c([-o)47 b Fj(option)11 b Fs(])45
b([-O)i Fj(shopt_option)11 b Fs(])44 b([)p Fj(ar-)390
1127 y(gument)57 b Fs(...)o(])390 1236 y(bash)47 b([long-opt])e
y(bash)47 b([long-opt])e(-s)i([-abefhkmnptuvxdBCDHP])42
b([-o)k Fj(option)11 b Fs(])46 b([-O)h Fj(shopt_option)11
b Fs(])43 b([)p Fj(ar-)390 1565 y(gument)57 b Fs(...)o(])275
-1701 y Ft(In)28 b(addition)g(to)i(the)f(single-c)m(haracter)h(shell)e
-(command-line)g(options)h(\(see)h(Section)f(4.3)i([The)e(Set)150
-1810 y(Builtin],)24 b(page)h(50\),)i(there)e(are)g(sev)m(eral)g(m)m
-(ulti-c)m(haracter)g(options)f(that)h(y)m(ou)g(can)g(use.)38
+1701 y Ft(In)28 b(addition)i(to)g(the)f(single-c)m(haracter)j(shell)e
+(command-line)g(options)g(\(see)g(Section)g(4.3)h([The)e(Set)150
+1810 y(Builtin],)e(page)e(50\),)i(there)e(are)g(sev)m(eral)h(m)m
+(ulti-c)m(haracter)h(options)e(that)g(y)m(ou)g(can)g(use.)38
b(These)25 b(options)150 1920 y(m)m(ust)30 b(app)s(ear)g(on)g(the)h
-(command)f(line)f(b)s(efore)h(the)g(single-c)m(haracter)h(options)f(to)
-h(b)s(e)f(recognized.)150 2081 y Fs(--debugger)630 2191
-y Ft(Arrange)j(for)g(the)g(debugger)g(pro\014le)f(to)i(b)s(e)e
-(executed)i(b)s(efore)f(the)g(shell)e(starts.)49 b(T)-8
-b(urns)630 2301 y(on)40 b(extended)g(debugging)f(mo)s(de)h(\(see)h
-(Section)e(4.2)i([Bash)g(Builtins],)f(page)h(39)g(for)f(a)630
-2410 y(description)g(of)i(the)f Fs(extdebug)f Ft(option)h(to)h(the)g
-Fs(shopt)f Ft(builtin\))d(and)j(shell)f(function)630
-2520 y(tracing)35 b(\(see)h(Section)f(4.3)i([The)e(Set)g(Builtin],)g
-(page)h(50)g(for)f(a)g(description)f(of)h(the)h Fs(-o)630
+(command)f(line)h(b)s(efore)f(the)g(single-c)m(haracter)j(options)e(to)
+g(b)s(e)f(recognized.)150 2081 y Fs(--debugger)630 2191
+y Ft(Arrange)j(for)g(the)g(debugger)g(pro\014le)g(to)h(b)s(e)e
+(executed)i(b)s(efore)f(the)g(shell)g(starts.)49 b(T)-8
+b(urns)630 2301 y(on)40 b(extended)g(debugging)g(mo)s(de)g(\(see)h
+(Section)f(4.2)h([Bash)g(Builtins],)i(page)e(39)g(for)f(a)630
+2410 y(description)i(of)g(the)f Fs(extdebug)f Ft(option)i(to)g(the)g
+Fs(shopt)f Ft(builtin\))g(and)g(shell)h(function)630
+2520 y(tracing)36 b(\(see)g(Section)g(4.3)h([The)e(Set)g(Builtin],)j
+(page)e(50)g(for)f(a)g(description)h(of)f(the)h Fs(-o)630
2629 y(functrace)28 b Ft(option\).)150 2790 y Fs(--dump-po-strings)630
-2900 y Ft(A)37 b(list)e(of)h(all)g(double-quoted)f(strings)g(preceded)h
-(b)m(y)h(`)p Fs($)p Ft(')f(is)g(prin)m(ted)f(on)h(the)h(standard)630
-3009 y(ouput)27 b(in)g(the)h Fl(gnu)g Fs(gettext)d Ft(PO)j(\(p)s
-(ortable)f(ob)5 b(ject\))29 b(\014le)e(format.)41 b(Equiv)-5
-b(alen)m(t)26 b(to)j(`)p Fs(-D)p Ft(')630 3119 y(except)i(for)f(the)h
+2900 y Ft(A)37 b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g
+(b)m(y)h(`)p Fs($)p Ft(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630
+3009 y(ouput)27 b(in)h(the)g Fl(gnu)g Fs(gettext)d Ft(PO)j(\(p)s
+(ortable)g(ob)5 b(ject\))29 b(\014le)f(format.)41 b(Equiv)-5
+b(alen)m(t)28 b(to)h(`)p Fs(-D)p Ft(')630 3119 y(except)i(for)f(the)h
(output)f(format.)150 3280 y Fs(--dump-strings)630 3389
-y Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p Fs(-D)p Ft('.)150
-3550 y Fs(--help)192 b Ft(Displa)m(y)30 b(a)g(usage)h(message)h(on)e
-(standard)g(output)g(and)f(exit)i(sucessfully)-8 b(.)150
+y Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-D)p Ft('.)150
+3550 y Fs(--help)192 b Ft(Displa)m(y)32 b(a)e(usage)h(message)h(on)e
+(standard)g(output)g(and)f(exit)j(sucessfully)-8 b(.)150
3711 y Fs(--init-file)27 b Fj(filename)150 3820 y Fs(--rcfile)h
Fj(filename)630 3930 y Ft(Execute)42 b(commands)f(from)f
-Fq(\014lename)46 b Ft(\(instead)41 b(of)g(`)p Fs(~/.bashrc)p
-Ft('\))e(in)h(an)h(in)m(teractiv)m(e)630 4039 y(shell.)150
-4200 y Fs(--login)144 b Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p
+Fq(\014lename)47 b Ft(\(instead)42 b(of)f(`)p Fs(~/.bashrc)p
+Ft('\))e(in)i(an)g(in)m(teractiv)m(e)630 4039 y(shell.)150
+4200 y Fs(--login)144 b Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p
Fs(-l)p Ft('.)150 4361 y Fs(--noediting)630 4471 y Ft(Do)h(not)e(use)h
-(the)g Fl(gnu)f Ft(Readline)g(library)e(\(see)j(Chapter)g(8)g([Command)
-f(Line)f(Editing],)630 4580 y(page)i(83\))h(to)f(read)f(command)g
-(lines)f(when)g(the)i(shell)d(is)i(in)m(teractiv)m(e.)150
-4741 y Fs(--noprofile)630 4850 y Ft(Don't)i(load)e(the)h(system-wide)f
-(startup)g(\014le)f(`)p Fs(/etc/profile)p Ft(')f(or)j(an)m(y)g(of)g
-(the)f(p)s(ersonal)630 4960 y(initialization)24 b(\014les)i(`)p
-Fs(~/.bash_profile)p Ft(',)f(`)p Fs(~/.bash_login)p Ft(',)g(or)i(`)p
-Fs(~/.profile)p Ft(')e(when)630 5070 y(Bash)31 b(is)e(in)m(v)m(ok)m(ed)
-i(as)f(a)h(login)e(shell.)150 5230 y Fs(--norc)192 b
-Ft(Don't)31 b(read)g(the)f(`)p Fs(~/.bashrc)p Ft(')f(initialization)e
-(\014le)i(in)g(an)i(in)m(teractiv)m(e)g(shell.)39 b(This)29
-b(is)g(on)630 5340 y(b)m(y)h(default)g(if)f(the)i(shell)d(is)i(in)m(v)m
-(ok)m(ed)h(as)f Fs(sh)p Ft(.)p eop
+(the)g Fl(gnu)f Ft(Readline)i(library)e(\(see)h(Chapter)g(8)g([Command)
+f(Line)g(Editing],)630 4580 y(page)h(83\))h(to)f(read)f(command)g
+(lines)h(when)e(the)i(shell)f(is)h(in)m(teractiv)m(e.)150
+4741 y Fs(--noprofile)630 4850 y Ft(Don't)h(load)f(the)g(system-wide)g
+(startup)f(\014le)g(`)p Fs(/etc/profile)p Ft(')e(or)j(an)m(y)g(of)g
+(the)f(p)s(ersonal)630 4960 y(initialization)g(\014les)d(`)p
+Fs(~/.bash_profile)p Ft(',)e(`)p Fs(~/.bash_login)p Ft(',)g(or)i(`)p
+Fs(~/.profile)p Ft(')e(when)630 5070 y(Bash)31 b(is)f(in)m(v)m(ok)m(ed)
+i(as)e(a)h(login)g(shell.)150 5230 y Fs(--norc)192 b
+Ft(Don't)31 b(read)g(the)f(`)p Fs(~/.bashrc)p Ft(')f(initialization)k
+(\014le)d(in)g(an)h(in)m(teractiv)m(e)i(shell.)41 b(This)30
+b(is)g(on)630 5340 y(b)m(y)g(default)h(if)f(the)h(shell)f(is)h(in)m(v)m
+(ok)m(ed)h(as)e Fs(sh)p Ft(.)p eop end
%%Page: 64 70
-64 69 bop 150 -116 a Ft(64)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(--posix)144 b Ft(Change)24 b(the)h(b)s(eha)m(vior)e(of)h(Bash)
-h(where)e(the)i(default)e(op)s(eration)h(di\013ers)f(from)g(the)i
-Fl(posix)630 408 y Ft(1003.2)31 b(standard)d(to)i(matc)m(h)f(the)g
-(standard.)40 b(This)27 b(is)g(in)m(tended)h(to)i(mak)m(e)f(Bash)g(b)s
-(eha)m(v)m(e)630 518 y(as)39 b(a)f(strict)g(sup)s(erset)g(of)g(that)h
-(standard.)64 b(See)38 b(Section)g(6.11)i([Bash)f(POSIX)e(Mo)s(de],)630
-628 y(page)31 b(76,)h(for)e(a)g(description)f(of)h(the)h(Bash)g
+TeXDict begin 64 69 bop 150 -116 a Ft(64)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(--posix)144 b Ft(Change)24
+b(the)h(b)s(eha)m(vior)f(of)g(Bash)h(where)e(the)i(default)f(op)s
+(eration)h(di\013ers)f(from)f(the)i Fl(posix)630 408
+y Ft(1003.2)31 b(standard)d(to)i(matc)m(h)f(the)g(standard.)40
+b(This)28 b(is)g(in)m(tended)h(to)h(mak)m(e)f(Bash)g(b)s(eha)m(v)m(e)
+630 518 y(as)39 b(a)f(strict)h(sup)s(erset)f(of)g(that)h(standard.)64
+b(See)38 b(Section)h(6.11)h([Bash)f(POSIX)e(Mo)s(de],)630
+628 y(page)31 b(76,)h(for)e(a)g(description)h(of)f(the)h(Bash)g
Fl(posix)e Ft(mo)s(de.)150 787 y Fs(--restricted)630
-897 y Ft(Mak)m(e)54 b(the)e(shell)e(a)j(restricted)f(shell)e(\(see)j
-(Section)f(6.10)i([The)d(Restricted)i(Shell],)630 1006
+897 y Ft(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 1006
y(page)31 b(76\).)150 1166 y Fs(--verbose)630 1275 y
-Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p Fs(-v)p Ft('.)41
-b(Prin)m(t)29 b(shell)g(input)f(lines)h(as)i(they're)f(read.)150
-1435 y Fs(--version)630 1544 y Ft(Sho)m(w)e(v)m(ersion)f(information)f
-(for)i(this)f(instance)h(of)g(Bash)g(on)g(the)g(standard)f(output)h
-(and)630 1654 y(exit)i(successfully)-8 b(.)275 1813 y(There)28
-b(are)i(sev)m(eral)f(single-c)m(haracter)h(options)e(that)i(ma)m(y)g(b)
-s(e)e(supplied)e(at)k(in)m(v)m(o)s(cation)f(whic)m(h)f(are)150
-1923 y(not)j(a)m(v)-5 b(ailable)29 b(with)g(the)i Fs(set)e
+Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-v)p Ft('.)41
+b(Prin)m(t)30 b(shell)h(input)e(lines)i(as)g(they're)f(read.)150
+1435 y Fs(--version)630 1544 y Ft(Sho)m(w)e(v)m(ersion)g(information)g
+(for)g(this)g(instance)h(of)f(Bash)g(on)g(the)g(standard)f(output)h
+(and)630 1654 y(exit)j(successfully)-8 b(.)275 1813 y(There)28
+b(are)i(sev)m(eral)g(single-c)m(haracter)i(options)d(that)h(ma)m(y)g(b)
+s(e)e(supplied)g(at)i(in)m(v)m(o)s(cation)h(whic)m(h)e(are)150
+1923 y(not)i(a)m(v)-5 b(ailable)32 b(with)e(the)h Fs(set)e
Ft(builtin.)150 2082 y Fs(-c)h Fj(string)630 2192 y Ft(Read)23
-b(and)f(execute)i(commands)f(from)f Fq(string)30 b Ft(after)23
-b(pro)s(cessing)e(the)i(options,)h(then)f(exit.)630 2301
-y(An)m(y)37 b(remaining)d(argumen)m(ts)j(are)g(assigned)f(to)h(the)g(p)
-s(ositional)d(parameters,)39 b(starting)630 2411 y(with)29
+b(and)f(execute)i(commands)f(from)f Fq(string)31 b Ft(after)23
+b(pro)s(cessing)f(the)h(options,)i(then)e(exit.)630 2301
+y(An)m(y)37 b(remaining)f(argumen)m(ts)h(are)g(assigned)g(to)g(the)g(p)
+s(ositional)g(parameters,)i(starting)630 2411 y(with)30
b Fs($0)p Ft(.)150 2570 y Fs(-i)384 b Ft(F)-8 b(orce)22
-b(the)g(shell)d(to)i(run)f(in)m(teractiv)m(ely)-8 b(.)38
-b(In)m(teractiv)m(e)22 b(shells)d(are)j(describ)s(ed)c(in)i(Section)h
-(6.3)630 2680 y([In)m(teractiv)m(e)32 b(Shells],)d(page)i(67.)150
-2839 y Fs(-l)384 b Ft(Mak)m(e)33 b(this)d(shell)g(act)i(as)g(if)e(it)h
-(had)g(b)s(een)f(directly)g(in)m(v)m(ok)m(ed)i(b)m(y)g(login.)42
-b(When)31 b(the)h(shell)630 2949 y(is)k(in)m(teractiv)m(e,)41
-b(this)36 b(is)g(equiv)-5 b(alen)m(t)37 b(to)h(starting)g(a)f(login)g
-(shell)e(with)h(`)p Fs(exec)30 b(-l)g(bash)p Ft('.)630
-3059 y(When)h(the)g(shell)f(is)g(not)h(in)m(teractiv)m(e,)i(the)e
-(login)f(shell)g(startup)h(\014les)f(will)e(b)s(e)j(executed.)630
+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 2680 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(67.)150
+2839 y Fs(-l)384 b Ft(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 2949 y(is)37 b(in)m(teractiv)m(e,)43
+b(this)37 b(is)g(equiv)-5 b(alen)m(t)39 b(to)f(starting)h(a)e(login)i
+(shell)e(with)g(`)p Fs(exec)30 b(-l)g(bash)p Ft('.)630
+3059 y(When)h(the)g(shell)h(is)f(not)g(in)m(teractiv)m(e,)k(the)c
+(login)h(shell)g(startup)f(\014les)g(will)g(b)s(e)g(executed.)630
3168 y(`)p Fs(exec)e(bash)h(-l)p Ft(')43 b(or)h(`)p Fs(exec)29
-b(bash)g(--login)p Ft(')42 b(will)f(replace)j(the)g(curren)m(t)f(shell)
-f(with)h(a)630 3278 y(Bash)26 b(login)e(shell.)37 b(See)26
-b(Section)f(6.2)i([Bash)e(Startup)g(Files],)h(page)g(65,)i(for)d(a)h
-(description)630 3387 y(of)31 b(the)f(sp)s(ecial)f(b)s(eha)m(vior)h(of)
-g(a)h(login)e(shell.)150 3547 y Fs(-r)384 b Ft(Mak)m(e)54
-b(the)e(shell)e(a)j(restricted)f(shell)e(\(see)j(Section)f(6.10)i([The)
-d(Restricted)i(Shell],)630 3656 y(page)31 b(76\).)150
-3816 y Fs(-s)384 b Ft(If)24 b(this)g(option)h(is)f(presen)m(t,)i(or)f
-(if)f(no)g(argumen)m(ts)i(remain)d(after)j(option)e(pro)s(cessing,)h
-(then)630 3925 y(commands)j(are)h(read)g(from)f(the)h(standard)f
-(input.)38 b(This)27 b(option)h(allo)m(ws)g(the)h(p)s(ositional)630
-4035 y(parameters)i(to)g(b)s(e)f(set)g(when)g(in)m(v)m(oking)f(an)i(in)
-m(teractiv)m(e)g(shell.)150 4194 y Fs(-D)384 b Ft(A)37
-b(list)e(of)h(all)g(double-quoted)f(strings)g(preceded)h(b)m(y)h(`)p
-Fs($)p Ft(')f(is)g(prin)m(ted)f(on)h(the)h(standard)630
-4304 y(ouput.)71 b(These)40 b(are)h(the)g(strings)f(that)h(are)g(sub)5
-b(ject)41 b(to)g(language)g(translation)f(when)630 4413
-y(the)d(curren)m(t)g(lo)s(cale)f(is)g(not)h Fs(C)g Ft(or)f
-Fs(POSIX)g Ft(\(see)h(Section)g(3.1.2.5)i([Lo)s(cale)f(T)-8
-b(ranslation],)630 4523 y(page)31 b(7\).)42 b(This)28
-b(implies)g(the)i(`)p Fs(-n)p Ft(')h(option;)f(no)g(commands)g(will)e
-(b)s(e)h(executed.)150 4682 y Fs([-+]O)g([)p Fj(shopt_option)11
-b Fs(])630 4792 y Fq(shopt)p 854 4792 28 4 v 40 w(option)43
-b Ft(is)g(one)i(of)f(the)g(shell)f(options)g(accepted)i(b)m(y)f(the)h
-Fs(shopt)d Ft(builtin)f(\(see)630 4902 y(Chapter)29 b(4)i([Shell)d
-(Builtin)f(Commands],)j(page)g(33\).)42 b(If)30 b Fq(shopt)p
-2856 4902 V 39 w(option)g Ft(is)f(presen)m(t,)h(`)p Fs(-O)p
-Ft(')630 5011 y(sets)39 b(the)f(v)-5 b(alue)38 b(of)g(that)h(option;)j
-(`)p Fs(+O)p Ft(')c(unsets)g(it.)64 b(If)38 b Fq(shopt)p
-2803 5011 V 39 w(option)g Ft(is)f(not)i(supplied,)630
-5121 y(the)28 b(names)f(and)h(v)-5 b(alues)27 b(of)g(the)h(shell)e
-(options)h(accepted)i(b)m(y)f Fs(shopt)e Ft(are)i(prin)m(ted)e(on)i
+b(bash)g(--login)p Ft(')42 b(will)i(replace)h(the)f(curren)m(t)f(shell)
+h(with)g(a)630 3278 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(65,)i(for)d(a)h
+(description)630 3387 y(of)31 b(the)f(sp)s(ecial)h(b)s(eha)m(vior)g(of)
+f(a)h(login)g(shell.)150 3547 y Fs(-r)384 b Ft(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 3656 y(page)31 b(76\).)150
+3816 y Fs(-s)384 b Ft(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 3925 y(commands)i(are)h(read)g(from)f(the)h(standard)f
+(input.)39 b(This)28 b(option)h(allo)m(ws)h(the)f(p)s(ositional)630
+4035 y(parameters)i(to)g(b)s(e)f(set)g(when)g(in)m(v)m(oking)h(an)g(in)
+m(teractiv)m(e)i(shell.)150 4194 y Fs(-D)384 b Ft(A)37
+b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g(b)m(y)h(`)p
+Fs($)p Ft(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630
+4304 y(ouput.)71 b(These)40 b(are)h(the)g(strings)g(that)g(are)g(sub)5
+b(ject)41 b(to)g(language)h(translation)g(when)630 4413
+y(the)37 b(curren)m(t)g(lo)s(cale)h(is)f(not)g Fs(C)g
+Ft(or)f Fs(POSIX)g Ft(\(see)h(Section)h(3.1.2.5)h([Lo)s(cale)g(T)-8
+b(ranslation],)630 4523 y(page)31 b(7\).)42 b(This)29
+b(implies)i(the)f(`)p Fs(-n)p Ft(')h(option;)g(no)f(commands)g(will)h
+(b)s(e)e(executed.)150 4682 y Fs([-+]O)g([)p Fj(shopt_option)11
+b Fs(])630 4792 y Fq(shopt)p 854 4792 28 4 v 40 w(option)44
+b Ft(is)g(one)h(of)f(the)g(shell)h(options)f(accepted)h(b)m(y)f(the)h
+Fs(shopt)d Ft(builtin)i(\(see)630 4902 y(Chapter)29 b(4)i([Shell)f
+(Builtin)g(Commands],)g(page)g(33\).)42 b(If)30 b Fq(shopt)p
+2856 4902 V 39 w(option)h Ft(is)f(presen)m(t,)g(`)p Fs(-O)p
+Ft(')630 5011 y(sets)39 b(the)f(v)-5 b(alue)39 b(of)f(that)h(option;)k
+(`)p Fs(+O)p Ft(')38 b(unsets)g(it.)65 b(If)38 b Fq(shopt)p
+2803 5011 V 39 w(option)h Ft(is)f(not)h(supplied,)630
+5121 y(the)28 b(names)f(and)h(v)-5 b(alues)28 b(of)f(the)h(shell)g
+(options)g(accepted)h(b)m(y)f Fs(shopt)e Ft(are)i(prin)m(ted)f(on)h
(the)630 5230 y(standard)33 b(output.)50 b(If)33 b(the)h(in)m(v)m(o)s
-(cation)g(option)f(is)g(`)p Fs(+O)p Ft(',)h(the)g(output)f(is)g(displa)
-m(y)m(ed)f(in)h(a)630 5340 y(format)e(that)g(ma)m(y)g(b)s(e)e(reused)h
-(as)h(input.)p eop
+(cation)i(option)e(is)g(`)p Fs(+O)p Ft(',)g(the)g(output)f(is)h(displa)
+m(y)m(ed)g(in)g(a)630 5340 y(format)d(that)g(ma)m(y)g(b)s(e)e(reused)h
+(as)h(input.)p eop end
%%Page: 65 71
-65 70 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(65)150 299 y Fs(--)384 b Ft(A)38
-b Fs(--)g Ft(signals)e(the)j(end)e(of)i(options)e(and)h(disables)e
-(further)h(option)g(pro)s(cessing.)63 b(An)m(y)630 408
-y(argumen)m(ts)31 b(after)g(the)f Fs(--)g Ft(are)h(treated)g(as)g
-(\014lenames)e(and)h(argumen)m(ts.)275 575 y(A)d Fm(lo)-5
-b(gin)35 b Ft(shell)25 b(is)h(one)i(whose)f(\014rst)f(c)m(haracter)j
-(of)e(argumen)m(t)h(zero)f(is)g(`)p Fs(-)p Ft(',)h(or)f(one)g(in)m(v)m
-(ok)m(ed)h(with)e(the)150 685 y(`)p Fs(--login)p Ft(')j(option.)275
-825 y(An)24 b Fm(inter)-5 b(active)33 b Ft(shell)23 b(is)h(one)h
-(started)g(without)f(non-option)h(argumen)m(ts,)h(unless)e(`)p
-Fs(-s)p Ft(')g(is)g(sp)s(eci\014ed,)150 934 y(without)42
-b(sp)s(ecifying)e(the)k(`)p Fs(-c)p Ft(')e(option,)k(and)c(whose)h
-(input)e(and)h(output)g(are)h(b)s(oth)g(connected)g(to)150
-1044 y(terminals)20 b(\(as)j(determined)e(b)m(y)h Fs(isatty\(3\))p
-Ft(\),)f(or)i(one)f(started)g(with)f(the)h(`)p Fs(-i)p
-Ft(')g(option.)38 b(See)22 b(Section)g(6.3)150 1153 y([In)m(teractiv)m
-(e)32 b(Shells],)d(page)i(67,)g(for)f(more)h(information.)275
-1293 y(If)38 b(argumen)m(ts)h(remain)f(after)h(option)g(pro)s(cessing,)
-h(and)e(neither)g(the)h(`)p Fs(-c)p Ft(')f(nor)h(the)g(`)p
-Fs(-s)p Ft(')f(option)150 1403 y(has)33 b(b)s(een)g(supplied,)f(the)i
-(\014rst)e(argumen)m(t)j(is)d(assumed)h(to)h(b)s(e)f(the)h(name)g(of)g
-(a)g(\014le)f(con)m(taining)g(shell)150 1512 y(commands)d(\(see)g
-(Section)g(3.8)h([Shell)d(Scripts],)h(page)i(31\).)41
-b(When)30 b(Bash)g(is)f(in)m(v)m(ok)m(ed)i(in)d(this)h(fashion,)150
-1622 y Fs($0)37 b Ft(is)f(set)i(to)h(the)e(name)h(of)f(the)h(\014le,)h
-(and)d(the)i(p)s(ositional)d(parameters)j(are)g(set)g(to)g(the)g
-(remaining)150 1731 y(argumen)m(ts.)h(Bash)26 b(reads)f(and)g(executes)
-h(commands)f(from)g(this)f(\014le,)i(then)f(exits.)39
-b(Bash's)25 b(exit)h(status)150 1841 y(is)f(the)i(exit)g(status)f(of)h
-(the)g(last)f(command)g(executed)h(in)f(the)g(script.)39
-b(If)26 b(no)g(commands)g(are)h(executed,)150 1951 y(the)k(exit)f
-(status)h(is)e(0.)150 2221 y Fr(6.2)68 b(Bash)45 b(Startup)g(Files)275
-2470 y Ft(This)35 b(section)j(describs)e(ho)m(w)h(Bash)h(executes)h
-(its)e(startup)g(\014les.)61 b(If)37 b(an)m(y)h(of)g(the)g(\014les)e
+TeXDict begin 65 70 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(65)150 299 y Fs(--)384
+b Ft(A)38 b Fs(--)g Ft(signals)g(the)h(end)e(of)i(options)f(and)g
+(disables)g(further)f(option)h(pro)s(cessing.)64 b(An)m(y)630
+408 y(argumen)m(ts)31 b(after)g(the)f Fs(--)g Ft(are)h(treated)g(as)g
+(\014lenames)f(and)g(argumen)m(ts.)275 575 y(A)d Fm(lo)-5
+b(gin)35 b Ft(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 Fs(-)p Ft(',)g(or)f(one)g(in)m(v)m
+(ok)m(ed)i(with)e(the)150 685 y(`)p Fs(--login)p Ft(')i(option.)275
+825 y(An)24 b Fm(inter)-5 b(active)33 b Ft(shell)25 b(is)g(one)g
+(started)g(without)g(non-option)h(argumen)m(ts,)g(unless)f(`)p
+Fs(-s)p Ft(')f(is)h(sp)s(eci\014ed,)150 934 y(without)43
+b(sp)s(ecifying)f(the)i(`)p Fs(-c)p Ft(')e(option,)47
+b(and)42 b(whose)h(input)f(and)g(output)g(are)h(b)s(oth)g(connected)g
+(to)150 1044 y(terminals)22 b(\(as)h(determined)f(b)m(y)g
+Fs(isatty\(3\))p Ft(\),)f(or)i(one)f(started)g(with)g(the)g(`)p
+Fs(-i)p Ft(')g(option.)39 b(See)22 b(Section)h(6.3)150
+1153 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(67,)g(for)f(more)h
+(information.)275 1293 y(If)38 b(argumen)m(ts)h(remain)g(after)g
+(option)h(pro)s(cessing,)h(and)d(neither)h(the)g(`)p
+Fs(-c)p Ft(')f(nor)h(the)g(`)p Fs(-s)p Ft(')f(option)150
+1403 y(has)33 b(b)s(een)g(supplied,)h(the)g(\014rst)e(argumen)m(t)j(is)
+e(assumed)g(to)h(b)s(e)f(the)h(name)g(of)g(a)g(\014le)g(con)m(taining)h
+(shell)150 1512 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f
+(Scripts],)g(page)h(31\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i
+(in)d(this)h(fashion,)150 1622 y Fs($0)37 b Ft(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 1731 y(argumen)m(ts.)h(Bash)26
+b(reads)f(and)g(executes)h(commands)f(from)g(this)g(\014le,)i(then)e
+(exits.)40 b(Bash's)25 b(exit)i(status)150 1841 y(is)f(the)h(exit)h
+(status)e(of)h(the)g(last)g(command)f(executed)h(in)g(the)f(script.)40
+b(If)26 b(no)g(commands)g(are)h(executed,)150 1951 y(the)k(exit)g
+(status)g(is)f(0.)150 2221 y Fr(6.2)68 b(Bash)45 b(Startup)g(Files)275
+2470 y Ft(This)36 b(section)j(describs)e(ho)m(w)g(Bash)h(executes)h
+(its)f(startup)f(\014les.)62 b(If)37 b(an)m(y)h(of)g(the)g(\014les)f
(exist)i(but)150 2579 y(cannot)26 b(b)s(e)e(read,)i(Bash)f(rep)s(orts)g
-(an)g(error.)38 b(Tildes)23 b(are)j(expanded)e(in)f(\014le)i(names)g
-(as)g(describ)s(ed)e(ab)s(o)m(v)m(e)150 2689 y(under)29
-b(Tilde)f(Expansion)h(\(see)i(Section)f(3.5.2)j([Tilde)28
-b(Expansion],)h(page)j(18\).)275 2828 y(In)m(teractiv)m(e)f(shells)e
-(are)i(describ)s(ed)d(in)h(Section)h(6.3)i([In)m(teractiv)m(e)g
-(Shells],)c(page)j(67.)150 3063 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(`)p
-Fi(--login)p Fk(')275 3312 y Ft(When)e(Bash)g(is)g(in)m(v)m(ok)m(ed)h
-(as)f(an)g(in)m(teractiv)m(e)i(login)d(shell,)i(or)f(as)h(a)g(non-in)m
-(teractiv)m(e)g(shell)d(with)150 3422 y(the)f(`)p Fs(--login)p
-Ft(')d(option,)k(it)d(\014rst)h(reads)g(and)g(executes)i(commands)e
-(from)f(the)i(\014le)f(`)p Fs(/etc/profile)p Ft(',)150
-3531 y(if)27 b(that)i(\014le)e(exists.)40 b(After)28
-b(reading)g(that)g(\014le,)g(it)g(lo)s(oks)g(for)g(`)p
-Fs(~/.bash_profile)p Ft(',)d(`)p Fs(~/.bash_login)p Ft(',)150
-3641 y(and)j(`)p Fs(~/.profile)p Ft(',)f(in)h(that)h(order,)g(and)f
-(reads)g(and)h(executes)h(commands)e(from)g(the)h(\014rst)f(one)h(that)
-150 3750 y(exists)h(and)f(is)g(readable.)40 b(The)30
-b(`)p Fs(--noprofile)p Ft(')d(option)j(ma)m(y)g(b)s(e)g(used)f(when)g
-(the)h(shell)f(is)g(started)h(to)150 3860 y(inhibit)d(this)i(b)s(eha)m
-(vior.)275 3999 y(When)72 b(a)i(login)e(shell)f(exits,)84
-b(Bash)73 b(reads)g(and)g(executes)h(commands)f(from)g(the)g(\014le)150
-4109 y(`)p Fs(~/.bash_logout)p Ft(',)27 b(if)j(it)f(exists.)150
-4343 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f
-(non-login)k(shell)275 4592 y Ft(When)35 b(an)g(in)m(teractiv)m(e)h
-(shell)e(that)h(is)g(not)g(a)h(login)e(shell)g(is)g(started,)j(Bash)f
-(reads)f(and)g(executes)150 4702 y(commands)24 b(from)f(`)p
-Fs(~/.bashrc)p Ft(',)h(if)f(that)h(\014le)f(exists.)39
-b(This)22 b(ma)m(y)j(b)s(e)e(inhibited)d(b)m(y)k(using)f(the)h(`)p
-Fs(--norc)p Ft(')150 4812 y(option.)51 b(The)33 b(`)p
-Fs(--rcfile)28 b Fj(file)11 b Ft(')33 b(option)g(will)e(force)k(Bash)f
-(to)h(read)e(and)h(execute)h(commands)e(from)150 4921
-y Fq(\014le)i Ft(instead)29 b(of)i(`)p Fs(~/.bashrc)p
-Ft('.)275 5061 y(So,)f(t)m(ypically)-8 b(,)30 b(y)m(our)g(`)p
-Fs(~/.bash_profile)p Ft(')d(con)m(tains)k(the)f(line)390
-5200 y Fs(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g(~/.bashrc;)e(fi)
-150 5340 y Ft(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h(login-sp)s
-(eci\014c)d(initializations.)p eop
+(an)g(error.)38 b(Tildes)25 b(are)h(expanded)e(in)g(\014le)i(names)f
+(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)150 2689 y(under)29
+b(Tilde)h(Expansion)g(\(see)h(Section)g(3.5.2)i([Tilde)d(Expansion],)g
+(page)i(18\).)275 2828 y(In)m(teractiv)m(e)g(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(67.)
+150 3063 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(`)p Fi(--login)p Fk(')275
+3312 y Ft(When)e(Bash)g(is)h(in)m(v)m(ok)m(ed)h(as)e(an)g(in)m
+(teractiv)m(e)k(login)d(shell,)i(or)d(as)h(a)g(non-in)m(teractiv)m(e)i
+(shell)d(with)150 3422 y(the)d(`)p Fs(--login)p Ft(')d(option,)37
+b(it)d(\014rst)g(reads)g(and)g(executes)i(commands)e(from)f(the)i
+(\014le)g(`)p Fs(/etc/profile)p Ft(',)150 3531 y(if)28
+b(that)h(\014le)f(exists.)41 b(After)28 b(reading)h(that)f(\014le,)h
+(it)g(lo)s(oks)g(for)f(`)p Fs(~/.bash_profile)p Ft(',)d(`)p
+Fs(~/.bash_login)p Ft(',)150 3641 y(and)j(`)p Fs(~/.profile)p
+Ft(',)f(in)i(that)g(order,)g(and)f(reads)g(and)h(executes)h(commands)e
+(from)g(the)h(\014rst)f(one)h(that)150 3750 y(exists)i(and)e(is)h
+(readable.)41 b(The)30 b(`)p Fs(--noprofile)p Ft(')d(option)k(ma)m(y)f
+(b)s(e)g(used)f(when)g(the)h(shell)h(is)f(started)g(to)150
+3860 y(inhibit)g(this)g(b)s(eha)m(vior.)275 3999 y(When)72
+b(a)i(login)g(shell)f(exits,)85 b(Bash)73 b(reads)g(and)g(executes)h
+(commands)f(from)g(the)g(\014le)150 4109 y(`)p Fs(~/.bash_logout)p
+Ft(',)27 b(if)k(it)f(exists.)150 4343 y Fk(In)m(v)m(ok)m(ed)40
+b(as)h(an)f(in)m(teractiv)m(e)f(non-login)k(shell)275
+4592 y Ft(When)35 b(an)g(in)m(teractiv)m(e)j(shell)e(that)f(is)h(not)f
+(a)h(login)g(shell)g(is)f(started,)i(Bash)f(reads)f(and)g(executes)150
+4702 y(commands)24 b(from)f(`)p Fs(~/.bashrc)p Ft(',)h(if)g(that)g
+(\014le)g(exists.)40 b(This)23 b(ma)m(y)i(b)s(e)e(inhibited)g(b)m(y)h
+(using)g(the)g(`)p Fs(--norc)p Ft(')150 4812 y(option.)52
+b(The)33 b(`)p Fs(--rcfile)28 b Fj(file)11 b Ft(')33
+b(option)h(will)g(force)h(Bash)f(to)h(read)e(and)h(execute)h(commands)e
+(from)150 4921 y Fq(\014le)j Ft(instead)30 b(of)h(`)p
+Fs(~/.bashrc)p Ft('.)275 5061 y(So,)f(t)m(ypically)-8
+b(,)33 b(y)m(our)d(`)p Fs(~/.bash_profile)p Ft(')d(con)m(tains)32
+b(the)e(line)390 5200 y Fs(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g
+(~/.bashrc;)e(fi)150 5340 y Ft(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h
+(login-sp)s(eci\014c)g(initializations.)p eop end
%%Page: 66 72
-66 71 bop 150 -116 a Ft(66)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fk(In)m(v)m(ok)m(ed)40 b(non-in)m(teractiv)m(ely)275
-571 y Ft(When)24 b(Bash)h(is)f(started)h(non-in)m(teractiv)m(ely)-8
-b(,)26 b(to)g(run)d(a)i(shell)e(script,)i(for)g(example,)h(it)e(lo)s
-(oks)g(for)h(the)150 680 y(v)-5 b(ariable)33 b Fs(BASH_ENV)f
-Ft(in)h(the)i(en)m(vironmen)m(t,)g(expands)f(its)f(v)-5
-b(alue)34 b(if)g(it)g(app)s(ears)f(there,)j(and)e(uses)g(the)150
-790 y(expanded)c(v)-5 b(alue)29 b(as)i(the)g(name)f(of)h(a)f(\014le)g
-(to)h(read)f(and)g(execute.)42 b(Bash)31 b(b)s(eha)m(v)m(es)g(as)g(if)e
-(the)h(follo)m(wing)150 900 y(command)g(w)m(ere)h(executed:)390
-1062 y Fs(if)47 b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c
-(fi)150 1224 y Ft(but)30 b(the)g(v)-5 b(alue)30 b(of)h(the)f
-Fs(PATH)f Ft(v)-5 b(ariable)30 b(is)f(not)i(used)e(to)i(searc)m(h)g
-(for)f(the)h(\014le)e(name.)275 1387 y(As)38 b(noted)h(ab)s(o)m(v)m(e,)
-j(if)37 b(a)i(non-in)m(teractiv)m(e)g(shell)e(is)h(in)m(v)m(ok)m(ed)h
-(with)e(the)h(`)p Fs(--login)p Ft(')g(option,)i(Bash)150
+TeXDict begin 66 71 bop 150 -116 a Ft(66)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fk(In)m(v)m(ok)m(ed)40
+b(non-in)m(teractiv)m(ely)275 571 y Ft(When)24 b(Bash)h(is)g(started)g
+(non-in)m(teractiv)m(ely)-8 b(,)29 b(to)d(run)d(a)i(shell)g(script,)h
+(for)f(example,)i(it)e(lo)s(oks)g(for)g(the)150 680 y(v)-5
+b(ariable)35 b Fs(BASH_ENV)d Ft(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)150 790 y(expanded)c(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
+900 y(command)g(w)m(ere)h(executed:)390 1062 y Fs(if)47
+b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c(fi)150
+1224 y Ft(but)30 b(the)g(v)-5 b(alue)31 b(of)g(the)f
+Fs(PATH)f Ft(v)-5 b(ariable)32 b(is)e(not)h(used)e(to)i(searc)m(h)g
+(for)f(the)h(\014le)f(name.)275 1387 y(As)38 b(noted)h(ab)s(o)m(v)m(e,)
+j(if)c(a)h(non-in)m(teractiv)m(e)i(shell)e(is)g(in)m(v)m(ok)m(ed)h
+(with)e(the)g(`)p Fs(--login)p Ft(')g(option,)j(Bash)150
1496 y(attempts)31 b(to)g(read)g(and)e(execute)j(commands)e(from)g(the)
-h(login)e(shell)g(startup)g(\014les.)150 1776 y Fk(In)m(v)m(ok)m(ed)40
-b(with)g(name)g Fi(sh)275 2048 y Ft(If)29 b(Bash)g(is)g(in)m(v)m(ok)m
-(ed)h(with)e(the)i(name)f Fs(sh)p Ft(,)g(it)h(tries)e(to)j(mimic)d(the)
-h(startup)g(b)s(eha)m(vior)g(of)h(historical)150 2158
-y(v)m(ersions)g(of)g Fs(sh)g Ft(as)h(closely)f(as)g(p)s(ossible,)e
-(while)h(conforming)g(to)i(the)g Fl(posix)e Ft(standard)h(as)h(w)m
-(ell.)275 2320 y(When)50 b(in)m(v)m(ok)m(ed)i(as)g(an)f(in)m(teractiv)m
-(e)h(login)e(shell,)55 b(or)c(as)g(a)h(non-in)m(teractiv)m(e)f(shell)f
-(with)g(the)150 2430 y(`)p Fs(--login)p Ft(')39 b(option,)j(it)e
-(\014rst)f(attempts)i(to)g(read)f(and)g(execute)h(commands)f(from)g(`)p
-Fs(/etc/profile)p Ft(')150 2539 y(and)d(`)p Fs(~/.profile)p
-Ft(',)g(in)f(that)i(order.)62 b(The)37 b(`)p Fs(--noprofile)p
-Ft(')e(option)i(ma)m(y)h(b)s(e)f(used)g(to)h(inhibit)c(this)150
-2649 y(b)s(eha)m(vior.)81 b(When)44 b(in)m(v)m(ok)m(ed)g(as)h(an)f(in)m
-(teractiv)m(e)h(shell)d(with)h(the)h(name)g Fs(sh)p Ft(,)j(Bash)d(lo)s
-(oks)g(for)g(the)150 2759 y(v)-5 b(ariable)35 b Fs(ENV)p
-Ft(,)i(expands)e(its)h(v)-5 b(alue)35 b(if)g(it)h(is)f(de\014ned,)i
-(and)e(uses)h(the)g(expanded)g(v)-5 b(alue)35 b(as)i(the)f(name)150
-2868 y(of)i(a)h(\014le)f(to)h(read)f(and)g(execute.)66
-b(Since)37 b(a)i(shell)d(in)m(v)m(ok)m(ed)j(as)g Fs(sh)e
-Ft(do)s(es)h(not)h(attempt)g(to)g(read)g(and)150 2978
-y(execute)i(commands)e(from)g(an)m(y)h(other)g(startup)f(\014les,)i
-(the)f(`)p Fs(--rcfile)p Ft(')d(option)i(has)h(no)f(e\013ect.)70
-b(A)150 3087 y(non-in)m(teractiv)m(e)30 b(shell)d(in)m(v)m(ok)m(ed)i
-(with)f(the)h(name)g Fs(sh)f Ft(do)s(es)g(not)i(attempt)g(to)f(read)g
+h(login)g(shell)g(startup)e(\014les.)150 1776 y Fk(In)m(v)m(ok)m(ed)40
+b(with)g(name)h Fi(sh)275 2048 y Ft(If)29 b(Bash)g(is)h(in)m(v)m(ok)m
+(ed)h(with)e(the)h(name)f Fs(sh)p Ft(,)g(it)i(tries)e(to)i(mimic)f(the)
+f(startup)g(b)s(eha)m(vior)h(of)g(historical)150 2158
+y(v)m(ersions)h(of)f Fs(sh)g Ft(as)h(closely)h(as)e(p)s(ossible,)g
+(while)h(conforming)f(to)h(the)g Fl(posix)e Ft(standard)h(as)h(w)m
+(ell.)275 2320 y(When)50 b(in)m(v)m(ok)m(ed)j(as)f(an)f(in)m(teractiv)m
+(e)j(login)e(shell,)57 b(or)51 b(as)g(a)h(non-in)m(teractiv)m(e)h
+(shell)f(with)f(the)150 2430 y(`)p Fs(--login)p Ft(')39
+b(option,)k(it)e(\014rst)e(attempts)i(to)g(read)f(and)g(execute)h
+(commands)f(from)g(`)p Fs(/etc/profile)p Ft(')150 2539
+y(and)d(`)p Fs(~/.profile)p Ft(',)g(in)g(that)h(order.)62
+b(The)37 b(`)p Fs(--noprofile)p Ft(')e(option)j(ma)m(y)g(b)s(e)f(used)g
+(to)h(inhibit)f(this)150 2649 y(b)s(eha)m(vior.)82 b(When)44
+b(in)m(v)m(ok)m(ed)h(as)g(an)f(in)m(teractiv)m(e)j(shell)d(with)g(the)g
+(name)g Fs(sh)p Ft(,)j(Bash)d(lo)s(oks)h(for)f(the)150
+2759 y(v)-5 b(ariable)37 b Fs(ENV)p Ft(,)g(expands)e(its)i(v)-5
+b(alue)36 b(if)g(it)h(is)f(de\014ned,)h(and)e(uses)h(the)g(expanded)g
+(v)-5 b(alue)36 b(as)h(the)f(name)150 2868 y(of)i(a)h(\014le)g(to)g
+(read)f(and)g(execute.)66 b(Since)38 b(a)h(shell)f(in)m(v)m(ok)m(ed)i
+(as)f Fs(sh)e Ft(do)s(es)h(not)h(attempt)g(to)g(read)g(and)150
+2978 y(execute)i(commands)e(from)g(an)m(y)h(other)g(startup)f(\014les,)
+j(the)e(`)p Fs(--rcfile)p Ft(')d(option)j(has)g(no)f(e\013ect.)70
+b(A)150 3087 y(non-in)m(teractiv)m(e)32 b(shell)d(in)m(v)m(ok)m(ed)h
+(with)f(the)g(name)g Fs(sh)f Ft(do)s(es)g(not)i(attempt)g(to)f(read)g
(an)m(y)g(other)g(startup)150 3197 y(\014les.)275 3359
-y(When)h(in)m(v)m(ok)m(ed)g(as)h Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g
-Fl(posix)e Ft(mo)s(de)h(after)h(the)g(startup)f(\014les)f(are)i(read.)
+y(When)h(in)m(v)m(ok)m(ed)h(as)g Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g
+Fl(posix)e Ft(mo)s(de)h(after)h(the)g(startup)f(\014les)g(are)h(read.)
150 3639 y Fk(In)m(v)m(ok)m(ed)40 b(in)h Fh(posix)f Fk(mo)s(de)275
-3911 y Ft(When)d(Bash)g(is)f(started)i(in)e Fl(posix)g
-Ft(mo)s(de,)j(as)e(with)f(the)i(`)p Fs(--posix)p Ft(')d(command)i(line)
-f(option,)i(it)150 4021 y(follo)m(ws)26 b(the)i Fl(posix)e
-Ft(standard)h(for)g(startup)g(\014les.)38 b(In)27 b(this)f(mo)s(de,)h
-(in)m(teractiv)m(e)i(shells)c(expand)h(the)i Fs(ENV)150
-4131 y Ft(v)-5 b(ariable)34 b(and)h(commands)g(are)h(read)g(and)f
-(executed)h(from)f(the)h(\014le)f(whose)g(name)g(is)g(the)h(expanded)
-150 4240 y(v)-5 b(alue.)40 b(No)31 b(other)g(startup)f(\014les)f(are)i
-(read.)150 4520 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)g(shell)i
-(daemon)275 4792 y Ft(Bash)34 b(attempts)i(to)f(determine)f(when)f(it)h
-(is)g(b)s(eing)f(run)g(b)m(y)h(the)h(remote)h(shell)c(daemon,)k
-(usually)150 4902 y Fs(rshd)p Ft(.)60 b(If)36 b(Bash)h(determines)f(it)
-h(is)f(b)s(eing)g(run)f(b)m(y)i(rshd,)h(it)e(reads)h(and)f(executes)j
-(commands)d(from)150 5011 y(`)p Fs(~/.bashrc)p Ft(',)h(if)f(that)h
-(\014le)f(exists)h(and)f(is)g(readable.)61 b(It)37 b(will)d(not)j(do)g
-(this)f(if)g(in)m(v)m(ok)m(ed)h(as)h Fs(sh)p Ft(.)59
-b(The)150 5121 y(`)p Fs(--norc)p Ft(')34 b(option)h(ma)m(y)i(b)s(e)e
-(used)f(to)j(inhibit)32 b(this)i(b)s(eha)m(vior,)j(and)e(the)g(`)p
-Fs(--rcfile)p Ft(')f(option)h(ma)m(y)i(b)s(e)150 5230
-y(used)25 b(to)h(force)g(another)g(\014le)e(to)j(b)s(e)e(read,)h(but)f
-Fs(rshd)g Ft(do)s(es)g(not)g(generally)g(in)m(v)m(ok)m(e)i(the)e(shell)
-f(with)g(those)150 5340 y(options)30 b(or)g(allo)m(w)g(them)g(to)h(b)s
-(e)f(sp)s(eci\014ed.)p eop
+3911 y Ft(When)d(Bash)g(is)g(started)h(in)f Fl(posix)f
+Ft(mo)s(de,)j(as)e(with)g(the)h(`)p Fs(--posix)p Ft(')d(command)i(line)
+h(option,)h(it)150 4021 y(follo)m(ws)28 b(the)g Fl(posix)e
+Ft(standard)h(for)g(startup)g(\014les.)39 b(In)27 b(this)g(mo)s(de,)g
+(in)m(teractiv)m(e)k(shells)c(expand)f(the)i Fs(ENV)150
+4131 y Ft(v)-5 b(ariable)36 b(and)f(commands)g(are)h(read)g(and)f
+(executed)h(from)f(the)h(\014le)g(whose)f(name)g(is)h(the)g(expanded)
+150 4240 y(v)-5 b(alue.)41 b(No)31 b(other)g(startup)f(\014les)g(are)h
+(read.)150 4520 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)h(shell)h
+(daemon)275 4792 y Ft(Bash)34 b(attempts)i(to)f(determine)g(when)e(it)i
+(is)g(b)s(eing)f(run)f(b)m(y)h(the)h(remote)h(shell)e(daemon,)i
+(usually)150 4902 y Fs(rshd)p Ft(.)60 b(If)36 b(Bash)h(determines)g(it)
+h(is)f(b)s(eing)g(run)e(b)m(y)i(rshd,)h(it)f(reads)g(and)f(executes)j
+(commands)d(from)150 5011 y(`)p Fs(~/.bashrc)p Ft(',)h(if)g(that)g
+(\014le)g(exists)h(and)e(is)h(readable.)62 b(It)37 b(will)g(not)g(do)g
+(this)g(if)g(in)m(v)m(ok)m(ed)h(as)g Fs(sh)p Ft(.)59
+b(The)150 5121 y(`)p Fs(--norc)p Ft(')34 b(option)i(ma)m(y)h(b)s(e)e
+(used)f(to)j(inhibit)e(this)g(b)s(eha)m(vior,)j(and)d(the)g(`)p
+Fs(--rcfile)p Ft(')f(option)i(ma)m(y)h(b)s(e)150 5230
+y(used)25 b(to)h(force)g(another)g(\014le)f(to)i(b)s(e)e(read,)h(but)f
+Fs(rshd)g Ft(do)s(es)g(not)g(generally)i(in)m(v)m(ok)m(e)h(the)d(shell)
+h(with)f(those)150 5340 y(options)31 b(or)f(allo)m(w)i(them)e(to)h(b)s
+(e)f(sp)s(eci\014ed.)p eop end
%%Page: 67 73
-67 72 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(67)150 299 y Fk(In)m(v)m(ok)m(ed)40
+TeXDict begin 67 72 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(67)150 299 y Fk(In)m(v)m(ok)m(ed)40
b(with)g(unequal)h(e\013ectiv)m(e)e(and)i(real)g Fh(uid/gid)p
-Fk(s)275 538 y Ft(If)26 b(Bash)i(is)e(started)i(with)e(the)h
-(e\013ectiv)m(e)i(user)e(\(group\))g(id)f(not)i(equal)f(to)h(the)f
-(real)g(user)g(\(group\))g(id,)150 648 y(and)f(the)i
-Fs(-p)e Ft(option)g(is)g(not)i(supplied,)c(no)j(startup)g(\014les)f
-(are)h(read,)h(shell)d(functions)h(are)h(not)g(inherited)150
-757 y(from)g(the)h(en)m(vironmen)m(t,)g(the)g Fs(SHELLOPTS)d
-Ft(v)-5 b(ariable,)27 b(if)g(it)g(app)s(ears)g(in)f(the)i(en)m
-(vironmen)m(t,)g(is)f(ignored,)150 867 y(and)g(the)h(e\013ectiv)m(e)i
-(user)d(id)f(is)h(set)h(to)h(the)f(real)f(user)g(id.)39
-b(If)27 b(the)h Fs(-p)g Ft(option)f(is)g(supplied)d(at)29
-b(in)m(v)m(o)s(cation,)150 977 y(the)i(startup)f(b)s(eha)m(vior)f(is)g
-(the)i(same,)g(but)f(the)g(e\013ectiv)m(e)i(user)e(id)f(is)g(not)i
-(reset.)150 1220 y Fr(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)150
+Fk(s)275 538 y Ft(If)26 b(Bash)i(is)f(started)h(with)f(the)g
+(e\013ectiv)m(e)j(user)d(\(group\))g(id)g(not)h(equal)g(to)g(the)f
+(real)h(user)f(\(group\))g(id,)150 648 y(and)f(the)i
+Fs(-p)e Ft(option)h(is)g(not)h(supplied,)e(no)h(startup)g(\014les)g
+(are)g(read,)h(shell)f(functions)g(are)g(not)g(inherited)150
+757 y(from)g(the)h(en)m(vironmen)m(t,)h(the)f Fs(SHELLOPTS)d
+Ft(v)-5 b(ariable,)29 b(if)f(it)g(app)s(ears)f(in)g(the)h(en)m
+(vironmen)m(t,)h(is)f(ignored,)150 867 y(and)f(the)h(e\013ectiv)m(e)j
+(user)c(id)g(is)h(set)g(to)h(the)f(real)g(user)f(id.)40
+b(If)27 b(the)h Fs(-p)g Ft(option)g(is)g(supplied)e(at)j(in)m(v)m(o)s
+(cation,)150 977 y(the)i(startup)f(b)s(eha)m(vior)g(is)g(the)h(same,)g
+(but)f(the)g(e\013ectiv)m(e)j(user)d(id)g(is)g(not)h(reset.)150
+1220 y Fr(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)150
1540 y Fk(6.3.1)63 b(What)40 b(is)h(an)g(In)m(teractiv)m(e)e(Shell?)275
-1779 y Ft(An)25 b(in)m(teractiv)m(e)h(shell)d(is)i(one)g(started)h
-(without)f(non-option)f(argumen)m(ts,)j(unless)d(`)p
-Fs(-s)p Ft(')h(is)f(sp)s(eci\014ed,)150 1889 y(without)32
-b(sp)s(eci\014ying)e(the)j(`)p Fs(-c)p Ft(')f(option,)h(and)f(whose)h
-(input)d(and)j(error)f(output)g(are)h(b)s(oth)f(connected)150
-1998 y(to)f(terminals)e(\(as)i(determined)e(b)m(y)h Fs(isatty\(3\))p
-Ft(\),)f(or)h(one)h(started)f(with)f(the)i(`)p Fs(-i)p
-Ft(')f(option.)275 2128 y(An)g(in)m(teractiv)m(e)h(shell)d(generally)i
-(reads)g(from)g(and)g(writes)f(to)i(a)g(user's)f(terminal.)275
-2258 y(The)e(`)p Fs(-s)p Ft(')i(in)m(v)m(o)s(cation)f(option)g(ma)m(y)h
-(b)s(e)f(used)f(to)i(set)g(the)g(p)s(ositional)d(parameters)i(when)g
-(an)g(in)m(ter-)150 2367 y(activ)m(e)j(shell)c(is)i(started.)150
+1779 y Ft(An)25 b(in)m(teractiv)m(e)j(shell)d(is)h(one)f(started)h
+(without)g(non-option)f(argumen)m(ts,)i(unless)e(`)p
+Fs(-s)p Ft(')g(is)g(sp)s(eci\014ed,)150 1889 y(without)33
+b(sp)s(eci\014ying)f(the)h(`)p Fs(-c)p Ft(')f(option,)i(and)e(whose)h
+(input)e(and)i(error)f(output)g(are)h(b)s(oth)f(connected)150
+1998 y(to)f(terminals)g(\(as)g(determined)f(b)m(y)g Fs(isatty\(3\))p
+Ft(\),)f(or)h(one)h(started)f(with)g(the)h(`)p Fs(-i)p
+Ft(')f(option.)275 2128 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
+2258 y(The)e(`)p Fs(-s)p Ft(')i(in)m(v)m(o)s(cation)h(option)f(ma)m(y)g
+(b)s(e)f(used)f(to)i(set)g(the)g(p)s(ositional)g(parameters)f(when)g
+(an)g(in)m(ter-)150 2367 y(activ)m(e)k(shell)d(is)h(started.)150
2577 y Fk(6.3.2)63 b(Is)41 b(this)g(Shell)g(In)m(teractiv)m(e?)275
-2817 y Ft(T)-8 b(o)32 b(determine)f(within)f(a)i(startup)g(script)f
-(whether)h(or)g(not)g(Bash)g(is)f(running)f(in)m(teractiv)m(ely)-8
-b(,)33 b(test)150 2926 y(the)42 b(v)-5 b(alue)41 b(of)g(the)h(`)p
-Fs(-)p Ft(')g(sp)s(ecial)e(parameter.)75 b(It)41 b(con)m(tains)h
-Fs(i)f Ft(when)g(the)h(shell)d(is)i(in)m(teractiv)m(e.)75
+2817 y Ft(T)-8 b(o)32 b(determine)g(within)g(a)g(startup)g(script)g
+(whether)g(or)g(not)g(Bash)g(is)g(running)f(in)m(teractiv)m(ely)-8
+b(,)36 b(test)150 2926 y(the)42 b(v)-5 b(alue)42 b(of)f(the)h(`)p
+Fs(-)p Ft(')g(sp)s(ecial)g(parameter.)75 b(It)41 b(con)m(tains)i
+Fs(i)e Ft(when)g(the)h(shell)f(is)h(in)m(teractiv)m(e.)77
b(F)-8 b(or)150 3036 y(example:)390 3166 y Fs(case)47
b("$-")f(in)390 3275 y(*i*\))h(echo)f(This)h(shell)f(is)h(interactive)e
(;;)390 3385 y(*\))i(echo)g(This)f(shell)h(is)g(not)g(interactive)e(;;)
-390 3495 y(esac)275 3624 y Ft(Alternativ)m(ely)-8 b(,)25
-b(startup)e(scripts)g(ma)m(y)h(examine)f(the)h(v)-5 b(ariable)23
-b Fs(PS1)p Ft(;)i(it)f(is)e(unset)i(in)e(non-in)m(teractiv)m(e)150
-3734 y(shells,)29 b(and)g(set)i(in)e(in)m(teractiv)m(e)j(shells.)38
-b(Th)m(us:)390 3864 y Fs(if)47 b([)h(-z)f("$PS1")f(];)h(then)772
-3973 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390
+390 3495 y(esac)275 3624 y Ft(Alternativ)m(ely)-8 b(,)28
+b(startup)23 b(scripts)h(ma)m(y)g(examine)g(the)g(v)-5
+b(ariable)25 b Fs(PS1)p Ft(;)g(it)g(is)e(unset)h(in)f(non-in)m
+(teractiv)m(e)150 3734 y(shells,)31 b(and)e(set)i(in)f(in)m(teractiv)m
+(e)k(shells.)40 b(Th)m(us:)390 3864 y Fs(if)47 b([)h(-z)f("$PS1")f(];)h
+(then)772 3973 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390
4083 y(else)772 4193 y(echo)f(This)h(shell)f(is)i(interactive)390
4302 y(fi)150 4512 y Fk(6.3.3)63 b(In)m(teractiv)m(e)38
-b(Shell)k(Beha)m(vior)275 4752 y Ft(When)30 b(the)g(shell)f(is)g
-(running)f(in)m(teractiv)m(ely)-8 b(,)31 b(it)f(c)m(hanges)h(its)f(b)s
+b(Shell)k(Beha)m(vior)275 4752 y Ft(When)30 b(the)g(shell)h(is)f
+(running)f(in)m(teractiv)m(ely)-8 b(,)34 b(it)d(c)m(hanges)g(its)g(b)s
(eha)m(vior)g(in)f(sev)m(eral)h(w)m(a)m(ys.)199 4881
-y(1.)61 b(Startup)37 b(\014les)f(are)i(read)f(and)g(executed)h(as)f
-(describ)s(ed)f(in)g(Section)h(6.2)h([Bash)g(Startup)e(Files],)330
-4991 y(page)31 b(65.)199 5121 y(2.)61 b(Job)35 b(Con)m(trol)f(\(see)i
-(Chapter)f(7)g([Job)g(Con)m(trol],)h(page)g(79\))g(is)e(enabled)g(b)m
-(y)h(default.)54 b(When)34 b(job)330 5230 y(con)m(trol)g(is)f(in)f
-(e\013ect,)37 b(Bash)d(ignores)f(the)h(k)m(eyb)s(oard-generated)h(job)e
-(con)m(trol)h(signals)f Fs(SIGTTIN)p Ft(,)330 5340 y
-Fs(SIGTTOU)p Ft(,)c(and)g Fs(SIGTSTP)p Ft(.)p eop
+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
+4991 y(page)31 b(65.)199 5121 y(2.)61 b(Job)35 b(Con)m(trol)g(\(see)h
+(Chapter)f(7)g([Job)g(Con)m(trol],)i(page)f(79\))g(is)f(enabled)g(b)m
+(y)g(default.)55 b(When)34 b(job)330 5230 y(con)m(trol)h(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 Fs(SIGTTIN)p Ft(,)330 5340 y
+Fs(SIGTTOU)p Ft(,)29 b(and)g Fs(SIGTSTP)p Ft(.)p eop
+end
%%Page: 68 74
-68 73 bop 150 -116 a Ft(68)2572 b(Bash)31 b(Reference)g(Man)m(ual)199
-299 y(3.)61 b(Bash)39 b(expands)f(and)g(displa)m(ys)f
-Fs(PS1)h Ft(b)s(efore)h(reading)f(the)h(\014rst)f(line)f(of)i(a)g
-(command,)i(and)d(ex-)330 408 y(pands)30 b(and)g(displa)m(ys)f
-Fs(PS2)g Ft(b)s(efore)i(reading)f(the)h(second)f(and)h(subsequen)m(t)f
-(lines)f(of)i(a)g(m)m(ulti-line)330 518 y(command.)199
-669 y(4.)61 b(Bash)26 b(executes)i(the)e(v)-5 b(alue)26
-b(of)g(the)h Fs(PROMPT_COMMAND)22 b Ft(v)-5 b(ariable)25
-b(as)i(a)f(command)g(b)s(efore)g(prin)m(ting)330 779
-y(the)31 b(primary)d(prompt,)i Fs($PS1)f Ft(\(see)i(Section)f(5.2)i
-([Bash)f(V)-8 b(ariables],)30 b(page)h(55\).)199 930
-y(5.)61 b(Readline)28 b(\(see)j(Chapter)e(8)h([Command)e(Line)h
-(Editing],)f(page)i(83\))h(is)e(used)g(to)h(read)f(commands)330
+TeXDict begin 68 73 bop 150 -116 a Ft(68)2572 b(Bash)31
+b(Reference)g(Man)m(ual)199 299 y(3.)61 b(Bash)39 b(expands)f(and)g
+(displa)m(ys)h Fs(PS1)f Ft(b)s(efore)h(reading)g(the)g(\014rst)f(line)h
+(of)g(a)g(command,)i(and)d(ex-)330 408 y(pands)30 b(and)g(displa)m(ys)h
+Fs(PS2)e Ft(b)s(efore)i(reading)g(the)g(second)f(and)h(subsequen)m(t)f
+(lines)h(of)g(a)g(m)m(ulti-line)330 518 y(command.)199
+669 y(4.)61 b(Bash)26 b(executes)i(the)e(v)-5 b(alue)27
+b(of)f(the)h Fs(PROMPT_COMMAND)22 b Ft(v)-5 b(ariable)27
+b(as)g(a)f(command)g(b)s(efore)g(prin)m(ting)330 779
+y(the)31 b(primary)e(prompt,)h Fs($PS1)f Ft(\(see)i(Section)g(5.2)h
+([Bash)f(V)-8 b(ariables],)32 b(page)f(55\).)199 930
+y(5.)61 b(Readline)30 b(\(see)h(Chapter)e(8)h([Command)e(Line)i
+(Editing],)g(page)g(83\))h(is)f(used)f(to)h(read)f(commands)330
1039 y(from)h(the)g(user's)g(terminal.)199 1190 y(6.)61
-b(Bash)36 b(insp)s(ects)f(the)i(v)-5 b(alue)36 b(of)g(the)g
-Fs(ignoreeof)e Ft(option)i(to)h Fs(set)29 b(-o)36 b Ft(instead)g(of)g
-(exiting)g(imme-)330 1300 y(diately)f(when)g(it)h(receiv)m(es)h(an)f
-Fs(EOF)f Ft(on)h(its)f(standard)g(input)f(when)i(reading)f(a)h(command)
-g(\(see)330 1409 y(Section)30 b(4.3)i([The)e(Set)g(Builtin],)f(page)i
-(50\).)199 1560 y(7.)61 b(Command)43 b(history)g(\(see)i(Section)f(9.1)
-h([Bash)f(History)g(F)-8 b(acilities],)47 b(page)e(109\))h(and)d
-(history)330 1670 y(expansion)22 b(\(see)j(Section)e(9.3)i([History)e
-(In)m(teraction],)j(page)e(111\))h(are)f(enabled)f(b)m(y)g(default.)38
-b(Bash)330 1779 y(will)20 b(sa)m(v)m(e)25 b(the)e(command)f(history)g
-(to)i(the)f(\014le)f(named)g(b)m(y)h Fs($HISTFILE)d Ft(when)i(an)h(in)m
-(teractiv)m(e)h(shell)330 1889 y(exits.)199 2040 y(8.)61
-b(Alias)29 b(expansion)h(\(see)h(Section)f(6.6)h([Aliases],)g(page)g
-(71\))h(is)d(p)s(erformed)g(b)m(y)h(default.)199 2191
+b(Bash)36 b(insp)s(ects)g(the)h(v)-5 b(alue)37 b(of)f(the)g
+Fs(ignoreeof)e Ft(option)j(to)g Fs(set)29 b(-o)36 b Ft(instead)h(of)f
+(exiting)i(imme-)330 1300 y(diately)f(when)e(it)i(receiv)m(es)h(an)e
+Fs(EOF)f Ft(on)h(its)g(standard)f(input)g(when)h(reading)g(a)g(command)
+g(\(see)330 1409 y(Section)31 b(4.3)h([The)e(Set)g(Builtin],)i(page)f
+(50\).)199 1560 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(109\))h(and)d
+(history)330 1670 y(expansion)23 b(\(see)i(Section)f(9.3)h([History)f
+(In)m(teraction],)j(page)d(111\))h(are)f(enabled)g(b)m(y)f(default.)39
+b(Bash)330 1779 y(will)23 b(sa)m(v)m(e)i(the)e(command)f(history)h(to)h
+(the)f(\014le)g(named)f(b)m(y)h Fs($HISTFILE)d Ft(when)i(an)h(in)m
+(teractiv)m(e)j(shell)330 1889 y(exits.)199 2040 y(8.)61
+b(Alias)31 b(expansion)g(\(see)g(Section)g(6.6)g([Aliases],)i(page)e
+(71\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 2191
y(9.)61 b(In)24 b(the)g(absence)h(of)f(an)m(y)h(traps,)g(Bash)g
-(ignores)e Fs(SIGTERM)g Ft(\(see)i(Section)f(3.7.6)i([Signals],)e(page)
-h(31\).)154 2342 y(10.)61 b(In)26 b(the)h(absence)h(of)f(an)m(y)g
-(traps,)g Fs(SIGINT)e Ft(is)h(caugh)m(t)i(and)f(handled)d(\(\(see)29
-b(Section)d(3.7.6)j([Signals],)330 2451 y(page)i(31\).)42
-b Fs(SIGINT)29 b Ft(will)e(in)m(terrupt)i(some)i(shell)e(builtins.)154
-2602 y(11.)61 b(An)40 b(in)m(teractiv)m(e)h(login)e(shell)g(sends)g(a)i
-Fs(SIGHUP)d Ft(to)j(all)e(jobs)h(on)g(exit)g(if)g(the)g
-Fs(hupoxexit)e Ft(shell)330 2712 y(option)30 b(has)g(b)s(een)g(enabled)
-f(\(see)i(Section)f(3.7.6)j([Signals],)c(page)i(31\).)154
-2863 y(12.)61 b(The)31 b(`)p Fs(-n)p Ft(')g(in)m(v)m(o)s(cation)g
-(option)f(is)h(ignored,)f(and)h(`)p Fs(set)f(-n)p Ft(')g(has)h(no)g
-(e\013ect)i(\(see)f(Section)f(4.3)h([The)330 2972 y(Set)f(Builtin],)d
-(page)j(50\).)154 3123 y(13.)61 b(Bash)32 b(will)d(c)m(hec)m(k)34
-b(for)e(mail)e(p)s(erio)s(dically)-8 b(,)30 b(dep)s(ending)f(on)j(the)g
-(v)-5 b(alues)31 b(of)h(the)h Fs(MAIL)p Ft(,)e Fs(MAILPATH)p
-Ft(,)330 3233 y(and)f Fs(MAILCHECK)e Ft(shell)g(v)-5
-b(ariables)29 b(\(see)j(Section)e(5.2)h([Bash)g(V)-8
-b(ariables],)30 b(page)h(55\).)154 3384 y(14.)61 b(Expansion)31
-b(errors)i(due)f(to)i(references)f(to)h(un)m(b)s(ound)c(shell)h(v)-5
-b(ariables)32 b(after)i(`)p Fs(set)29 b(-u)p Ft(')k(has)g(b)s(een)330
-3494 y(enabled)c(will)f(not)j(cause)g(the)f(shell)f(to)i(exit)f(\(see)h
-(Section)g(4.3)g([The)f(Set)h(Builtin],)d(page)j(50\).)154
-3644 y(15.)61 b(The)48 b(shell)f(will)e(not)k(exit)f(on)h(expansion)e
-(errors)h(caused)g(b)m(y)h Fq(v)-5 b(ar)54 b Ft(b)s(eing)47
-b(unset)h(or)h(n)m(ull)d(in)330 3754 y Fs(${)p Fj(var)11
-b Fs(:?)p Fj(word)g Fs(})26 b Ft(expansions)j(\(see)i(Section)g(3.5.3)h
-([Shell)c(P)m(arameter)k(Expansion],)d(page)i(18\).)154
-3905 y(16.)61 b(Redirection)29 b(errors)h(encoun)m(tered)h(b)m(y)f
-(shell)f(builtins)e(will)g(not)k(cause)g(the)f(shell)f(to)i(exit.)154
-4056 y(17.)61 b(When)26 b(running)e(in)i Fl(posix)f Ft(mo)s(de,)j(a)f
-(sp)s(ecial)e(builtin)e(returning)i(an)h(error)h(status)g(will)d(not)i
-(cause)330 4166 y(the)31 b(shell)d(to)j(exit)g(\(see)g(Section)f(6.11)i
+(ignores)f Fs(SIGTERM)f Ft(\(see)i(Section)g(3.7.6)h([Signals],)g(page)
+f(31\).)154 2342 y(10.)61 b(In)26 b(the)h(absence)h(of)f(an)m(y)g
+(traps,)g Fs(SIGINT)e Ft(is)i(caugh)m(t)h(and)f(handled)e(\(\(see)k
+(Section)e(3.7.6)i([Signals],)330 2451 y(page)i(31\).)42
+b Fs(SIGINT)29 b Ft(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154
+2602 y(11.)61 b(An)40 b(in)m(teractiv)m(e)j(login)e(shell)g(sends)e(a)i
+Fs(SIGHUP)d Ft(to)j(all)g(jobs)f(on)g(exit)h(if)g(the)f
+Fs(hupoxexit)e Ft(shell)330 2712 y(option)31 b(has)f(b)s(een)g(enabled)
+g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(31\).)154
+2863 y(12.)61 b(The)31 b(`)p Fs(-n)p Ft(')g(in)m(v)m(o)s(cation)i
+(option)e(is)h(ignored,)f(and)g(`)p Fs(set)f(-n)p Ft(')g(has)h(no)g
+(e\013ect)i(\(see)f(Section)g(4.3)g([The)330 2972 y(Set)f(Builtin],)g
+(page)g(50\).)154 3123 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 Fs(MAIL)p Ft(,)e Fs(MAILPATH)p
+Ft(,)330 3233 y(and)f Fs(MAILCHECK)e Ft(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(55\).)154 3384 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 Fs(set)29 b(-u)p Ft(')k(has)g(b)s(een)330
+3494 y(enabled)d(will)h(not)g(cause)g(the)f(shell)h(to)g(exit)g(\(see)g
+(Section)h(4.3)f([The)f(Set)h(Builtin],)g(page)g(50\).)154
+3644 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 Fq(v)-5 b(ar)54 b Ft(b)s(eing)48
+b(unset)g(or)h(n)m(ull)f(in)330 3754 y Fs(${)p Fj(var)11
+b Fs(:?)p Fj(word)g Fs(})26 b Ft(expansions)k(\(see)h(Section)h(3.5.3)g
+([Shell)e(P)m(arameter)i(Expansion],)e(page)h(18\).)154
+3905 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
+4056 y(17.)61 b(When)26 b(running)f(in)i Fl(posix)e Ft(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 4166 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(76\).)154 4316 y(18.)61
-b(A)34 b(failed)e Fs(exec)h Ft(will)e(not)j(cause)g(the)g(shell)e(to)i
-(exit)g(\(see)g(Section)g(4.1)h([Bourne)f(Shell)d(Builtins],)330
-4426 y(page)g(33\).)154 4577 y(19.)61 b(P)m(arser)31
-b(syn)m(tax)f(errors)g(will)e(not)j(cause)g(the)f(shell)f(to)i(exit.)
-154 4728 y(20.)61 b(Simple)19 b(sp)s(elling)g(correction)i(for)h
-(directory)f(argumen)m(ts)g(to)i(the)e Fs(cd)g Ft(builtin)d(is)j
-(enabled)f(b)m(y)i(default)330 4838 y(\(see)38 b(the)e(description)f
-(of)i(the)f Fs(cdspell)f Ft(option)h(to)h(the)g Fs(shopt)e
-Ft(builtin)e(in)j(Section)g(4.2)i([Bash)330 4947 y(Builtins],)28
-b(page)j(39\).)154 5098 y(21.)61 b(The)42 b(shell)f(will)f(c)m(hec)m(k)
-k(the)f(v)-5 b(alue)42 b(of)g(the)h Fs(TMOUT)e Ft(v)-5
-b(ariable)42 b(and)g(exit)g(if)g(a)h(command)f(is)g(not)330
-5208 y(read)30 b(within)e(the)i(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h(of)i
-(seconds)f(after)g(prin)m(ting)e Fs($PS1)h Ft(\(see)i(Section)f(5.2)i
-([Bash)330 5317 y(V)-8 b(ariables],)30 b(page)h(55\).)p
-eop
+b(A)34 b(failed)g Fs(exec)f Ft(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
+4426 y(page)e(33\).)154 4577 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 4728 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 Fs(cd)g Ft(builtin)g(is)h
+(enabled)f(b)m(y)h(default)330 4838 y(\(see)38 b(the)e(description)h
+(of)g(the)f Fs(cdspell)f Ft(option)i(to)g(the)g Fs(shopt)e
+Ft(builtin)h(in)h(Section)g(4.2)h([Bash)330 4947 y(Builtins],)31
+b(page)g(39\).)154 5098 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 Fs(TMOUT)e Ft(v)-5
+b(ariable)44 b(and)e(exit)h(if)g(a)g(command)f(is)h(not)330
+5208 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 Fs($PS1)f Ft(\(see)i(Section)g(5.2)h
+([Bash)330 5317 y(V)-8 b(ariables],)32 b(page)f(55\).)p
+eop end
%%Page: 69 75
-69 74 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(69)150 299 y Fr(6.4)68 b(Bash)45
-b(Conditional)h(Expressions)275 548 y Ft(Conditional)35
-b(expressions)i(are)i(used)f(b)m(y)g(the)g Fs([[)g Ft(comp)s(ound)f
+TeXDict begin 69 74 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(69)150 299 y Fr(6.4)68
+b(Bash)45 b(Conditional)h(Expressions)275 548 y Ft(Conditional)38
+b(expressions)g(are)h(used)f(b)m(y)g(the)g Fs([[)g Ft(comp)s(ound)f
(command)h(and)g(the)g Fs(test)g Ft(and)f Fs([)150 657
-y Ft(builtin)27 b(commands.)275 796 y(Expressions)k(ma)m(y)i(b)s(e)g
-(unary)f(or)h(binary)-8 b(.)47 b(Unary)33 b(expressions)e(are)j(often)f
-(used)f(to)i(examine)f(the)150 906 y(status)26 b(of)g(a)h(\014le.)38
-b(There)26 b(are)g(string)f(op)s(erators)h(and)g(n)m(umeric)e
-(comparison)i(op)s(erators)g(as)g(w)m(ell.)38 b(If)26
-b(the)150 1016 y Fq(\014le)37 b Ft(argumen)m(t)d(to)f(one)h(of)f(the)g
-(primaries)e(is)h(of)h(the)g(form)g(`)p Fs(/dev/fd/)p
-Fj(N)11 b Ft(',)31 b(then)i(\014le)f(descriptor)g Fq(N)43
+y Ft(builtin)30 b(commands.)275 796 y(Expressions)i(ma)m(y)h(b)s(e)g
+(unary)f(or)h(binary)-8 b(.)48 b(Unary)33 b(expressions)f(are)i(often)f
+(used)f(to)i(examine)g(the)150 906 y(status)26 b(of)g(a)h(\014le.)39
+b(There)26 b(are)g(string)g(op)s(erators)g(and)g(n)m(umeric)f
+(comparison)i(op)s(erators)f(as)g(w)m(ell.)40 b(If)26
+b(the)150 1016 y Fq(\014le)38 b Ft(argumen)m(t)c(to)f(one)h(of)f(the)g
+(primaries)g(is)g(of)g(the)g(form)g(`)p Fs(/dev/fd/)p
+Fj(N)11 b Ft(',)31 b(then)i(\014le)g(descriptor)g Fq(N)43
b Ft(is)150 1125 y(c)m(hec)m(k)m(ed.)e(If)26 b(the)g
-Fq(\014le)k Ft(argumen)m(t)c(to)h(one)f(of)g(the)h(primaries)c(is)i
-(one)h(of)g(`)p Fs(/dev/stdin)p Ft(',)f(`)p Fs(/dev/stdout)p
-Ft(',)150 1235 y(or)30 b(`)p Fs(/dev/stderr)p Ft(',)e(\014le)i
-(descriptor)f(0,)i(1,)g(or)g(2,)g(resp)s(ectiv)m(ely)-8
-b(,)30 b(is)f(c)m(hec)m(k)m(ed.)150 1401 y Fs(-a)h Fj(file)162
-b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists.)150
-1565 y Fs(-b)30 b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f
-Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(blo)s(c)m(k)f(sp)s(ecial)f
-(\014le.)150 1729 y Fs(-c)h Fj(file)162 b Ft(T)-8 b(rue)30
-b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(c)m(haracter)h(sp)s
-(ecial)d(\014le.)150 1893 y Fs(-d)h Fj(file)162 b Ft(T)-8
-b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(directory)
+Fq(\014le)31 b Ft(argumen)m(t)26 b(to)h(one)f(of)g(the)h(primaries)e
+(is)h(one)g(of)g(`)p Fs(/dev/stdin)p Ft(',)f(`)p Fs(/dev/stdout)p
+Ft(',)150 1235 y(or)30 b(`)p Fs(/dev/stderr)p Ft(',)e(\014le)j
+(descriptor)f(0,)h(1,)g(or)g(2,)g(resp)s(ectiv)m(ely)-8
+b(,)32 b(is)e(c)m(hec)m(k)m(ed.)150 1401 y Fs(-a)g Fj(file)162
+b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists.)150
+1565 y Fs(-b)30 b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g
+Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(blo)s(c)m(k)g(sp)s(ecial)g
+(\014le.)150 1729 y Fs(-c)f Fj(file)162 b Ft(T)-8 b(rue)30
+b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(c)m(haracter)h(sp)s
+(ecial)f(\014le.)150 1893 y Fs(-d)f Fj(file)162 b Ft(T)-8
+b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(directory)
-8 b(.)150 2058 y Fs(-e)30 b Fj(file)162 b Ft(T)-8 b(rue)30
-b(if)f Fq(\014le)35 b Ft(exists.)150 2222 y Fs(-f)30
-b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35
-b Ft(exists)30 b(and)g(is)f(a)i(regular)e(\014le.)150
-2386 y Fs(-g)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f
-Fq(\014le)35 b Ft(exists)30 b(and)g(its)f(set-group-id)h(bit)g(is)f
-(set.)150 2550 y Fs(-h)h Fj(file)162 b Ft(T)-8 b(rue)30
-b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(sym)m(b)s(olic)e
-(link.)150 2714 y Fs(-k)h Fj(file)162 b Ft(T)-8 b(rue)30
-b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(its)f Fs(")p
-Ft(stic)m(ky)p Fs(")h Ft(bit)g(is)f(set.)150 2878 y Fs(-p)h
-Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b
-Ft(exists)30 b(and)g(is)f(a)i(named)f(pip)s(e)e(\(FIF)m(O\).)150
-3042 y Fs(-r)i Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f
-Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(readable.)150
-3206 y Fs(-s)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f
-Fq(\014le)35 b Ft(exists)30 b(and)g(has)g(a)g(size)h(greater)g(than)f
+b(if)g Fq(\014le)36 b Ft(exists.)150 2222 y Fs(-f)30
+b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36
+b Ft(exists)31 b(and)f(is)g(a)h(regular)f(\014le.)150
+2386 y Fs(-g)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g
+Fq(\014le)36 b Ft(exists)31 b(and)f(its)g(set-group-id)h(bit)g(is)f
+(set.)150 2550 y Fs(-h)g Fj(file)162 b Ft(T)-8 b(rue)30
+b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(sym)m(b)s(olic)g
+(link.)150 2714 y Fs(-k)f Fj(file)162 b Ft(T)-8 b(rue)30
+b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(its)g Fs(")p
+Ft(stic)m(ky)p Fs(")h Ft(bit)g(is)f(set.)150 2878 y Fs(-p)g
+Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b
+Ft(exists)31 b(and)f(is)g(a)h(named)f(pip)s(e)f(\(FIF)m(O\).)150
+3042 y Fs(-r)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g
+Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(readable.)150
+3206 y Fs(-s)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g
+Fq(\014le)36 b Ft(exists)31 b(and)f(has)g(a)g(size)i(greater)f(than)f
(zero.)150 3370 y Fs(-t)g Fj(fd)258 b Ft(T)-8 b(rue)30
-b(if)f(\014le)h(descriptor)f Fq(fd)k Ft(is)d(op)s(en)f(and)h(refers)g
+b(if)g(\014le)h(descriptor)f Fq(fd)j Ft(is)e(op)s(en)e(and)h(refers)g
(to)h(a)g(terminal.)150 3534 y Fs(-u)f Fj(file)162 b
-Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(its)f
-(set-user-id)h(bit)f(is)h(set.)150 3698 y Fs(-w)g Fj(file)162
-b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30
-b(and)g(is)f(writable.)150 3863 y Fs(-x)h Fj(file)162
-b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30
-b(and)g(is)f(executable.)150 4027 y Fs(-O)h Fj(file)162
-b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30
-b(and)g(is)f(o)m(wned)h(b)m(y)h(the)f(e\013ectiv)m(e)i(user)e(id.)150
-4191 y Fs(-G)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f
-Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(o)m(wned)h(b)m(y)h(the)f
-(e\013ectiv)m(e)i(group)e(id.)150 4355 y Fs(-L)g Fj(file)162
-b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30
-b(and)g(is)f(a)i(sym)m(b)s(olic)e(link.)150 4519 y Fs(-S)h
-Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b
-Ft(exists)30 b(and)g(is)f(a)i(so)s(c)m(k)m(et.)150 4683
-y Fs(-N)f Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35
-b Ft(exists)30 b(and)g(has)g(b)s(een)f(mo)s(di\014ed)g(since)g(it)h(w)m
-(as)h(last)f(read.)150 4847 y Fj(file1)39 b Fs(-nt)30
-b Fj(file2)630 4957 y Ft(T)-8 b(rue)23 b(if)g Fq(\014le1)31
-b Ft(is)23 b(new)m(er)h(\(according)g(to)h(mo)s(di\014cation)d(date\))j
-(than)f Fq(\014le2)p Ft(,)h(or)f(if)f Fq(\014le1)30 b
-Ft(exists)630 5066 y(and)g Fq(\014le2)37 b Ft(do)s(es)30
+Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(its)g
+(set-user-id)h(bit)f(is)h(set.)150 3698 y Fs(-w)f Fj(file)162
+b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31
+b(and)f(is)g(writable.)150 3863 y Fs(-x)g Fj(file)162
+b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31
+b(and)f(is)g(executable.)150 4027 y Fs(-O)g Fj(file)162
+b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(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
+4191 y Fs(-G)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g
+Fq(\014le)36 b Ft(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 4355 y Fs(-L)g Fj(file)162
+b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31
+b(and)f(is)g(a)h(sym)m(b)s(olic)g(link.)150 4519 y Fs(-S)f
+Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b
+Ft(exists)31 b(and)f(is)g(a)h(so)s(c)m(k)m(et.)150 4683
+y Fs(-N)f Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36
+b Ft(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 4847 y Fj(file1)39 b Fs(-nt)30
+b Fj(file2)630 4957 y Ft(T)-8 b(rue)23 b(if)h Fq(\014le1)32
+b Ft(is)24 b(new)m(er)g(\(according)h(to)g(mo)s(di\014cation)f(date\))h
+(than)f Fq(\014le2)p Ft(,)i(or)e(if)g Fq(\014le1)31 b
+Ft(exists)630 5066 y(and)f Fq(\014le2)38 b Ft(do)s(es)30
b(not.)150 5230 y Fj(file1)39 b Fs(-ot)30 b Fj(file2)630
-5340 y Ft(T)-8 b(rue)30 b(if)f Fq(\014le1)37 b Ft(is)30
-b(older)f(than)h Fq(\014le2)p Ft(,)h(or)f(if)f Fq(\014le2)37
-b Ft(exists)30 b(and)g Fq(\014le1)37 b Ft(do)s(es)30
-b(not.)p eop
+5340 y Ft(T)-8 b(rue)30 b(if)g Fq(\014le1)38 b Ft(is)31
+b(older)f(than)g Fq(\014le2)p Ft(,)i(or)e(if)g Fq(\014le2)38
+b Ft(exists)31 b(and)f Fq(\014le1)38 b Ft(do)s(es)30
+b(not.)p eop end
%%Page: 70 76
-70 75 bop 150 -116 a Ft(70)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fj(file1)39 b Fs(-ef)30 b Fj(file2)630 408 y Ft(T)-8
-b(rue)30 b(if)f Fq(\014le1)37 b Ft(and)30 b Fq(\014le2)37
-b Ft(refer)30 b(to)i(the)e(same)h(device)f(and)g(ino)s(de)f(n)m(um)m(b)
-s(ers.)150 570 y Fs(-o)h Fj(optname)630 679 y Ft(T)-8
-b(rue)41 b(if)f(shell)f(option)i Fq(optname)47 b Ft(is)40
-b(enabled.)72 b(The)41 b(list)f(of)h(options)f(app)s(ears)h(in)f(the)
-630 789 y(description)18 b(of)j(the)f(`)p Fs(-o)p Ft(')g(option)g(to)h
-(the)g Fs(set)e Ft(builtin)e(\(see)k(Section)f(4.3)h([The)g(Set)f
-(Builtin],)630 898 y(page)31 b(50\).)150 1060 y Fs(-z)f
-Fj(string)630 1169 y Ft(T)-8 b(rue)30 b(if)f(the)i(length)f(of)g
-Fq(string)37 b Ft(is)30 b(zero.)150 1330 y Fs(-n)g Fj(string)150
-1440 y(string)192 b Ft(T)-8 b(rue)30 b(if)f(the)i(length)f(of)g
-Fq(string)37 b Ft(is)30 b(non-zero.)150 1601 y Fj(string1)39
-b Fs(==)30 b Fj(string2)630 1711 y Ft(T)-8 b(rue)33 b(if)g(the)h
-(strings)e(are)i(equal.)50 b(`)p Fs(=)p Ft(')34 b(ma)m(y)g(b)s(e)f
-(used)g(in)f(place)i(of)f(`)p Fs(==)p Ft(')h(for)f(strict)h
-Fl(posix)630 1820 y Ft(compliance.)150 1981 y Fj(string1)39
-b Fs(!=)30 b Fj(string2)630 2091 y Ft(T)-8 b(rue)30 b(if)f(the)i
-(strings)e(are)i(not)f(equal.)150 2252 y Fj(string1)39
-b Fs(<)30 b Fj(string2)630 2362 y Ft(T)-8 b(rue)30 b(if)f
-Fq(string1)37 b Ft(sorts)31 b(b)s(efore)f Fq(string2)37
-b Ft(lexicographically)28 b(in)h(the)i(curren)m(t)f(lo)s(cale.)150
-2523 y Fj(string1)39 b Fs(>)30 b Fj(string2)630 2632
-y Ft(T)-8 b(rue)30 b(if)f Fq(string1)37 b Ft(sorts)31
-b(after)g Fq(string2)37 b Ft(lexicographically)28 b(in)h(the)h(curren)m
-(t)h(lo)s(cale.)150 2794 y Fj(arg1)40 b Fs(OP)29 b Fj(arg2)630
-2903 y Fs(OP)k Ft(is)g(one)h(of)h(`)p Fs(-eq)p Ft(',)f(`)p
-Fs(-ne)p Ft(',)h(`)p Fs(-lt)p Ft(',)g(`)p Fs(-le)p Ft(',)f(`)p
+TeXDict begin 70 75 bop 150 -116 a Ft(70)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fj(file1)39 b Fs(-ef)30
+b Fj(file2)630 408 y Ft(T)-8 b(rue)30 b(if)g Fq(\014le1)38
+b Ft(and)30 b Fq(\014le2)38 b Ft(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 570 y Fs(-o)g
+Fj(optname)630 679 y Ft(T)-8 b(rue)41 b(if)g(shell)g(option)h
+Fq(optname)47 b Ft(is)41 b(enabled.)73 b(The)41 b(list)h(of)f(options)g
+(app)s(ears)g(in)g(the)630 789 y(description)20 b(of)h(the)f(`)p
+Fs(-o)p Ft(')g(option)h(to)g(the)g Fs(set)e Ft(builtin)h(\(see)h
+(Section)g(4.3)g([The)g(Set)f(Builtin],)630 898 y(page)31
+b(50\).)150 1060 y Fs(-z)f Fj(string)630 1169 y Ft(T)-8
+b(rue)30 b(if)g(the)h(length)g(of)f Fq(string)38 b Ft(is)31
+b(zero.)150 1330 y Fs(-n)f Fj(string)150 1440 y(string)192
+b Ft(T)-8 b(rue)30 b(if)g(the)h(length)g(of)f Fq(string)38
+b Ft(is)31 b(non-zero.)150 1601 y Fj(string1)39 b Fs(==)30
+b Fj(string2)630 1711 y Ft(T)-8 b(rue)33 b(if)h(the)g(strings)f(are)h
+(equal.)51 b(`)p Fs(=)p Ft(')34 b(ma)m(y)g(b)s(e)f(used)g(in)g(place)i
+(of)e(`)p Fs(==)p Ft(')h(for)f(strict)i Fl(posix)630
+1820 y Ft(compliance.)150 1981 y Fj(string1)k Fs(!=)30
+b Fj(string2)630 2091 y Ft(T)-8 b(rue)30 b(if)g(the)h(strings)f(are)h
+(not)f(equal.)150 2252 y Fj(string1)39 b Fs(<)30 b Fj(string2)630
+2362 y Ft(T)-8 b(rue)30 b(if)g Fq(string1)38 b Ft(sorts)31
+b(b)s(efore)f Fq(string2)38 b Ft(lexicographically)33
+b(in)d(the)h(curren)m(t)f(lo)s(cale.)150 2523 y Fj(string1)39
+b Fs(>)30 b Fj(string2)630 2632 y Ft(T)-8 b(rue)30 b(if)g
+Fq(string1)38 b Ft(sorts)31 b(after)g Fq(string2)38 b
+Ft(lexicographically)33 b(in)d(the)g(curren)m(t)h(lo)s(cale.)150
+2794 y Fj(arg1)40 b Fs(OP)29 b Fj(arg2)630 2903 y Fs(OP)k
+Ft(is)h(one)g(of)h(`)p Fs(-eq)p Ft(',)f(`)p Fs(-ne)p
+Ft(',)h(`)p Fs(-lt)p Ft(',)g(`)p Fs(-le)p Ft(',)f(`)p
Fs(-gt)p Ft(',)h(or)f(`)p Fs(-ge)p Ft('.)51 b(These)34
-b(arithmetic)f(binary)630 3013 y(op)s(erators)j(return)e(true)i(if)e
-Fq(arg1)44 b Ft(is)35 b(equal)g(to,)j(not)e(equal)f(to,)j(less)d(than,)
-i(less)e(than)g(or)630 3122 y(equal)28 b(to,)h(greater)h(than,)e(or)g
-(greater)i(than)d(or)i(equal)e(to)i Fq(arg2)p Ft(,)h(resp)s(ectiv)m
-(ely)-8 b(.)40 b Fq(Arg1)c Ft(and)630 3232 y Fq(arg2)j
-Ft(ma)m(y)30 b(b)s(e)g(p)s(ositiv)m(e)g(or)g(negativ)m(e)i(in)m
+b(arithmetic)h(binary)630 3013 y(op)s(erators)h(return)e(true)i(if)f
+Fq(arg1)44 b Ft(is)36 b(equal)g(to,)i(not)e(equal)g(to,)i(less)e(than,)
+h(less)f(than)f(or)630 3122 y(equal)29 b(to,)g(greater)h(than,)e(or)g
+(greater)i(than)d(or)i(equal)f(to)h Fq(arg2)p Ft(,)h(resp)s(ectiv)m
+(ely)-8 b(.)42 b Fq(Arg1)36 b Ft(and)630 3232 y Fq(arg2)j
+Ft(ma)m(y)30 b(b)s(e)g(p)s(ositiv)m(e)i(or)e(negativ)m(e)j(in)m
(tegers.)150 3494 y Fr(6.5)68 b(Shell)45 b(Arithmetic)275
-3740 y Ft(The)34 b(shell)e(allo)m(ws)i(arithmetic)g(expressions)g(to)h
-(b)s(e)f(ev)-5 b(aluated,)36 b(as)f(one)g(of)g(the)f(shell)f
-(expansions)150 3849 y(or)d(b)m(y)h(the)f Fs(let)g Ft(and)f(the)i(`)p
-Fs(-i)p Ft(')f(option)g(to)h(the)g Fs(declare)d Ft(builtins.)275
-3985 y(Ev)-5 b(aluation)25 b(is)h(done)g(in)f(\014xed-width)g(in)m
-(tegers)i(with)e(no)i(c)m(hec)m(k)h(for)e(o)m(v)m(er\015o)m(w,)j
-(though)d(division)e(b)m(y)150 4095 y(0)j(is)f(trapp)s(ed)g(and)h
-(\015agged)g(as)h(an)f(error.)39 b(The)26 b(op)s(erators)h(and)g(their)
-f(precedence,)i(asso)s(ciativit)m(y)-8 b(,)29 b(and)150
-4205 y(v)-5 b(alues)34 b(are)i(the)f(same)g(as)h(in)d(the)i(C)g
-(language.)55 b(The)35 b(follo)m(wing)e(list)h(of)h(op)s(erators)g(is)f
-(group)s(ed)g(in)m(to)150 4314 y(lev)m(els)25 b(of)h(equal-precedence)h
-(op)s(erators.)39 b(The)25 b(lev)m(els)h(are)g(listed)f(in)f(order)i
-(of)g(decreasing)f(precedence.)150 4476 y Fj(id)11 b
-Fs(++)29 b Fj(id)p Fs(--)630 4586 y Ft(v)-5 b(ariable)29
-b(p)s(ost-incremen)m(t)h(and)g(p)s(ost-decremen)m(t)150
-4747 y Fs(++)p Fj(id)40 b Fs(--)p Fj(id)630 4857 y Ft(v)-5
-b(ariable)29 b(pre-incremen)m(t)h(and)g(pre-decremen)m(t)150
-5018 y Fs(-)g(+)354 b Ft(unary)29 b(min)m(us)g(and)h(plus)150
-5179 y Fs(!)g(~)354 b Ft(logical)30 b(and)g(bit)m(wise)f(negation)150
-5340 y Fs(**)384 b Ft(exp)s(onen)m(tiation)p eop
+3740 y Ft(The)34 b(shell)g(allo)m(ws)i(arithmetic)g(expressions)f(to)g
+(b)s(e)f(ev)-5 b(aluated,)37 b(as)e(one)g(of)g(the)f(shell)h
+(expansions)150 3849 y(or)30 b(b)m(y)h(the)f Fs(let)g
+Ft(and)f(the)i(`)p Fs(-i)p Ft(')f(option)h(to)g(the)g
+Fs(declare)d Ft(builtins.)275 3985 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
+4095 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 4205 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 4314 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
+4476 y Fj(id)11 b Fs(++)29 b Fj(id)p Fs(--)630 4586 y
+Ft(v)-5 b(ariable)31 b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen)m
+(t)150 4747 y Fs(++)p Fj(id)40 b Fs(--)p Fj(id)630 4857
+y Ft(v)-5 b(ariable)31 b(pre-incremen)m(t)g(and)f(pre-decremen)m(t)150
+5018 y Fs(-)g(+)354 b Ft(unary)29 b(min)m(us)h(and)g(plus)150
+5179 y Fs(!)g(~)354 b Ft(logical)33 b(and)d(bit)m(wise)h(negation)150
+5340 y Fs(**)384 b Ft(exp)s(onen)m(tiation)p eop end
%%Page: 71 77
-71 76 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(71)150 299 y Fs(*)30 b(/)g(\045)276
-b Ft(m)m(ultiplication,)28 b(division,)f(remainder)150
-464 y Fs(+)j(-)354 b Ft(addition,)29 b(subtraction)150
-630 y Fs(<<)h(>>)258 b Ft(left)30 b(and)g(righ)m(t)g(bit)m(wise)f
-(shifts)150 795 y Fs(<=)h(>=)g(<)g(>)102 b Ft(comparison)150
-961 y Fs(==)30 b(!=)258 b Ft(equalit)m(y)30 b(and)g(inequalit)m(y)150
-1126 y Fs(&)432 b Ft(bit)m(wise)29 b(AND)150 1292 y Fs(^)432
-b Ft(bit)m(wise)29 b(exclusiv)m(e)h(OR)150 1458 y Fs(|)432
-b Ft(bit)m(wise)29 b(OR)150 1623 y Fs(&&)384 b Ft(logical)30
-b(AND)150 1789 y Fs(||)384 b Ft(logical)30 b(OR)150 1954
-y Fs(expr)f(?)h(expr)f(:)h(expr)630 2064 y Ft(conditional)f(op)s
-(erator)150 2229 y Fs(=)h(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g
+TeXDict begin 71 76 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(71)150 299 y Fs(*)30
+b(/)g(\045)276 b Ft(m)m(ultiplication,)33 b(division,)d(remainder)150
+464 y Fs(+)g(-)354 b Ft(addition,)31 b(subtraction)150
+630 y Fs(<<)f(>>)258 b Ft(left)31 b(and)f(righ)m(t)h(bit)m(wise)g
+(shifts)150 795 y Fs(<=)f(>=)g(<)g(>)102 b Ft(comparison)150
+961 y Fs(==)30 b(!=)258 b Ft(equalit)m(y)32 b(and)e(inequalit)m(y)150
+1126 y Fs(&)432 b Ft(bit)m(wise)31 b(AND)150 1292 y Fs(^)432
+b Ft(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1458 y Fs(|)432
+b Ft(bit)m(wise)31 b(OR)150 1623 y Fs(&&)384 b Ft(logical)33
+b(AND)150 1789 y Fs(||)384 b Ft(logical)33 b(OR)150 1954
+y Fs(expr)c(?)h(expr)f(:)h(expr)630 2064 y Ft(conditional)i(op)s
+(erator)150 2229 y Fs(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g
(^=)f(|=)630 2339 y Ft(assignmen)m(t)150 2504 y Fs(expr1)g(,)h(expr2)
-630 2614 y Ft(comma)275 2782 y(Shell)36 b(v)-5 b(ariables)37
-b(are)i(allo)m(w)m(ed)g(as)g(op)s(erands;)i(parameter)e(expansion)f(is)
-f(p)s(erformed)h(b)s(efore)g(the)150 2892 y(expression)f(is)g(ev)-5
-b(aluated.)65 b(Within)36 b(an)j(expression,)g(shell)d(v)-5
-b(ariables)37 b(ma)m(y)i(also)f(b)s(e)g(referenced)g(b)m(y)150
-3002 y(name)31 b(without)e(using)g(the)i(parameter)g(expansion)e(syn)m
-(tax.)42 b(A)31 b(shell)d(v)-5 b(ariable)30 b(that)h(is)e(n)m(ull)g(or)
-h(unset)150 3111 y(ev)-5 b(aluates)40 b(to)g(0)g(when)e(referenced)h(b)
-m(y)g(name)h(without)e(using)g(the)h(parameter)h(expansion)e(syn)m
-(tax.)150 3221 y(The)d(v)-5 b(alue)36 b(of)g(a)h(v)-5
-b(ariable)34 b(is)h(ev)-5 b(aluated)37 b(as)f(an)g(arithmetic)f
-(expression)g(when)g(it)g(is)g(referenced,)j(or)150 3330
-y(when)31 b(a)i(v)-5 b(ariable)31 b(whic)m(h)g(has)h(b)s(een)f(giv)m
-(en)i(the)f Fq(in)m(teger)39 b Ft(attribute)32 b(using)f(`)p
-Fs(declare)e(-i)p Ft(')i(is)h(assigned)150 3440 y(a)37
-b(v)-5 b(alue.)57 b(A)36 b(n)m(ull)e(v)-5 b(alue)36 b(ev)-5
-b(aluates)37 b(to)g(0.)58 b(A)36 b(shell)f(v)-5 b(ariable)34
-b(need)i(not)h(ha)m(v)m(e)g(its)f(in)m(teger)g(attribute)150
-3550 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)f(an)h(expression.)275
-3690 y(Constan)m(ts)41 b(with)f(a)i(leading)d(0)j(are)g(in)m(terpreted)
-e(as)h(o)s(ctal)h(n)m(um)m(b)s(ers.)72 b(A)41 b(leading)f(`)p
-Fs(0x)p Ft(')h(or)g(`)p Fs(0X)p Ft(')150 3800 y(denotes)31
-b(hexadecimal.)41 b(Otherwise,)30 b(n)m(um)m(b)s(ers)f(tak)m(e)k(the)e
+630 2614 y Ft(comma)275 2782 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 2892 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
+3002 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 3111 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 3221 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 3330
+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 Fq(in)m(teger)40 b Ft(attribute)33 b(using)f(`)p
+Fs(declare)d(-i)p Ft(')i(is)i(assigned)150 3440 y(a)k(v)-5
+b(alue.)58 b(A)36 b(n)m(ull)g(v)-5 b(alue)37 b(ev)-5
+b(aluates)38 b(to)f(0.)58 b(A)36 b(shell)h(v)-5 b(ariable)36
+b(need)g(not)h(ha)m(v)m(e)g(its)g(in)m(teger)g(attribute)150
+3550 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)g(an)g(expression.)275
+3690 y(Constan)m(ts)41 b(with)g(a)h(leading)f(0)h(are)g(in)m(terpreted)
+f(as)g(o)s(ctal)i(n)m(um)m(b)s(ers.)72 b(A)41 b(leading)h(`)p
+Fs(0x)p Ft(')f(or)g(`)p Fs(0X)p Ft(')150 3800 y(denotes)31
+b(hexadecimal.)43 b(Otherwise,)31 b(n)m(um)m(b)s(ers)e(tak)m(e)k(the)e
(form)f([)p Fq(base)5 b Fs(#)p Ft(])p Fq(n)p Ft(,)31
-b(where)f Fq(base)36 b Ft(is)30 b(a)h(decimal)150 3909
+b(where)f Fq(base)36 b Ft(is)31 b(a)g(decimal)150 3909
y(n)m(um)m(b)s(er)26 b(b)s(et)m(w)m(een)i(2)f(and)g(64)h(represen)m
-(ting)f(the)g(arithmetic)f(base,)j(and)d Fq(n)h Ft(is)f(a)i(n)m(um)m(b)
-s(er)e(in)g(that)i(base.)150 4019 y(If)39 b Fq(base)5
-b Fs(#)40 b Ft(is)f(omitted,)j(then)e(base)g(10)g(is)f(used.)68
-b(The)39 b(digits)g(greater)i(than)e(9)h(are)g(represen)m(ted)g(b)m(y)
-150 4129 y(the)34 b(lo)m(w)m(ercase)g(letters,)h(the)e(upp)s(ercase)g
-(letters,)h(`)p Fs(@)p Ft(',)h(and)e(`)p Fs(_)p Ft(',)h(in)e(that)i
-(order.)50 b(If)32 b Fq(base)39 b Ft(is)33 b(less)f(than)150
-4238 y(or)38 b(equal)f(to)i(36,)h(lo)m(w)m(ercase)g(and)d(upp)s(ercase)
-g(letters)h(ma)m(y)g(b)s(e)f(used)g(in)m(terc)m(hangably)g(to)i
+(ting)g(the)f(arithmetic)h(base,)h(and)d Fq(n)h Ft(is)g(a)h(n)m(um)m(b)
+s(er)e(in)h(that)h(base.)150 4019 y(If)39 b Fq(base)5
+b Fs(#)40 b Ft(is)g(omitted,)j(then)d(base)g(10)g(is)g(used.)68
+b(The)39 b(digits)i(greater)g(than)e(9)h(are)g(represen)m(ted)g(b)m(y)
+150 4129 y(the)34 b(lo)m(w)m(ercase)h(letters,)h(the)d(upp)s(ercase)g
+(letters,)i(`)p Fs(@)p Ft(',)g(and)e(`)p Fs(_)p Ft(',)h(in)f(that)h
+(order.)50 b(If)32 b Fq(base)39 b Ft(is)34 b(less)f(than)150
+4238 y(or)38 b(equal)g(to)h(36,)h(lo)m(w)m(ercase)h(and)c(upp)s(ercase)
+g(letters)i(ma)m(y)f(b)s(e)f(used)g(in)m(terc)m(hangably)i(to)g
(represen)m(t)150 4348 y(n)m(um)m(b)s(ers)29 b(b)s(et)m(w)m(een)i(10)g
-(and)f(35.)275 4488 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)45
-b(in)f(order)g(of)h(precedence.)85 b(Sub-expressions)43
-b(in)g(paren)m(theses)j(are)150 4598 y(ev)-5 b(aluated)31
-b(\014rst)e(and)h(ma)m(y)h(o)m(v)m(erride)f(the)h(precedence)g(rules)e
+(and)f(35.)275 4488 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 4598 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 4871 y Fr(6.6)68 b(Aliases)275 5121
-y Fq(Aliases)32 b Ft(allo)m(w)d(a)i(string)d(to)j(b)s(e)e(substituted)f
-(for)i(a)g(w)m(ord)f(when)g(it)g(is)g(used)g(as)h(the)g(\014rst)f(w)m
-(ord)h(of)g(a)150 5230 y(simple)g(command.)45 b(The)31
-b(shell)g(main)m(tains)f(a)j(list)d(of)i(aliases)g(that)g(ma)m(y)h(b)s
-(e)e(set)h(and)g(unset)f(with)g(the)150 5340 y Fs(alias)e
-Ft(and)h Fs(unalias)e Ft(builtin)f(commands.)p eop
+y Fq(Aliases)34 b Ft(allo)m(w)d(a)g(string)e(to)i(b)s(e)e(substituted)g
+(for)h(a)g(w)m(ord)f(when)g(it)h(is)g(used)f(as)h(the)g(\014rst)f(w)m
+(ord)h(of)g(a)150 5230 y(simple)i(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 5340 y Fs(alias)d
+Ft(and)h Fs(unalias)e Ft(builtin)i(commands.)p eop end
%%Page: 72 78
-72 77 bop 150 -116 a Ft(72)2572 b(Bash)31 b(Reference)g(Man)m(ual)275
-299 y(The)e(\014rst)f(w)m(ord)i(of)f(eac)m(h)i(simple)d(command,)i(if)e
-(unquoted,)h(is)g(c)m(hec)m(k)m(ed)i(to)g(see)f(if)f(it)g(has)g(an)g
-(alias.)150 408 y(If)24 b(so,)i(that)g(w)m(ord)e(is)g(replaced)g(b)m(y)
-g(the)h(text)h(of)e(the)h(alias.)38 b(The)24 b(c)m(haracters)i(`)p
-Fs(/)p Ft(',)h(`)p Fs($)p Ft(',)f(`)p Fs(`)p Ft(',)g(`)p
-Fs(=)p Ft(')f(and)f(an)m(y)h(of)150 518 y(the)e(shell)e(metac)m
-(haracters)k(or)e(quoting)f(c)m(haracters)i(listed)e(ab)s(o)m(v)m(e)i
-(ma)m(y)f(not)g(app)s(ear)f(in)g(an)h(alias)f(name.)150
-628 y(The)g(replacemen)m(t)g(text)h(ma)m(y)g(con)m(tain)g(an)m(y)f(v)-5
-b(alid)21 b(shell)f(input,)i(including)d(shell)h(metac)m(haracters.)40
-b(The)150 737 y(\014rst)35 b(w)m(ord)g(of)h(the)g(replacemen)m(t)h
-(text)f(is)f(tested)i(for)e(aliases,)i(but)e(a)h(w)m(ord)g(that)g(is)f
-(iden)m(tical)g(to)h(an)150 847 y(alias)30 b(b)s(eing)g(expanded)g(is)g
-(not)h(expanded)f(a)h(second)g(time.)42 b(This)29 b(means)i(that)g(one)
-g(ma)m(y)h(alias)e Fs(ls)g Ft(to)150 956 y Fs("ls)f(-F")p
-Ft(,)36 b(for)f(instance,)h(and)e(Bash)h(do)s(es)g(not)g(try)g(to)g
-(recursiv)m(ely)f(expand)g(the)h(replacemen)m(t)h(text.)150
-1066 y(If)31 b(the)h(last)g(c)m(haracter)h(of)f(the)g(alias)f(v)-5
-b(alue)31 b(is)g(a)h(space)g(or)g(tab)g(c)m(haracter,)i(then)d(the)h
-(next)g(command)150 1176 y(w)m(ord)e(follo)m(wing)f(the)h(alias)g(is)f
-(also)i(c)m(hec)m(k)m(ed)h(for)e(alias)g(expansion.)275
-1325 y(Aliases)d(are)h(created)i(and)d(listed)g(with)g(the)h
-Fs(alias)f Ft(command,)h(and)g(remo)m(v)m(ed)h(with)e(the)h
+TeXDict begin 72 77 bop 150 -116 a Ft(72)2572 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 y(The)e(\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 408 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 Fs(/)p Ft(',)h(`)p Fs($)p
+Ft(',)f(`)p Fs(`)p Ft(',)g(`)p Fs(=)p Ft(')f(and)f(an)m(y)h(of)150
+518 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 628 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 737 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 847 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 Fs(ls)e
+Ft(to)150 956 y Fs("ls)f(-F")p Ft(,)36 b(for)f(instance,)i(and)d(Bash)h
+(do)s(es)g(not)g(try)g(to)g(recursiv)m(ely)h(expand)e(the)h(replacemen)
+m(t)i(text.)150 1066 y(If)31 b(the)h(last)h(c)m(haracter)g(of)f(the)g
+(alias)h(v)-5 b(alue)32 b(is)g(a)g(space)g(or)g(tab)g(c)m(haracter,)i
+(then)d(the)h(next)g(command)150 1176 y(w)m(ord)e(follo)m(wing)i(the)e
+(alias)i(is)e(also)i(c)m(hec)m(k)m(ed)g(for)e(alias)i(expansion.)275
+1325 y(Aliases)d(are)f(created)i(and)d(listed)i(with)f(the)g
+Fs(alias)f Ft(command,)h(and)g(remo)m(v)m(ed)h(with)f(the)g
Fs(unalias)150 1434 y Ft(command.)275 1583 y(There)44
-b(is)g(no)h(mec)m(hanism)f(for)g(using)g(argumen)m(ts)h(in)e(the)i
-(replacemen)m(t)h(text,)j(as)d(in)d Fs(csh)p Ft(.)83
-b(If)150 1693 y(argumen)m(ts)37 b(are)h(needed,)g(a)g(shell)d(function)
-g(should)g(b)s(e)i(used)f(\(see)i(Section)f(3.3)h([Shell)d(F)-8
-b(unctions],)150 1802 y(page)31 b(13\).)275 1951 y(Aliases)g(are)j(not)
-e(expanded)g(when)g(the)h(shell)e(is)h(not)h(in)m(teractiv)m(e,)h
-(unless)d(the)i Fs(expand_aliases)150 2061 y Ft(shell)c(option)g(is)h
-(set)h(using)e Fs(shopt)g Ft(\(see)i(Section)f(4.2)i([Bash)e
-(Builtins],)e(page)k(39\).)275 2210 y(The)38 b(rules)g(concerning)h
-(the)g(de\014nition)e(and)i(use)g(of)g(aliases)g(are)g(somewhat)h
-(confusing.)66 b(Bash)150 2320 y(alw)m(a)m(ys)41 b(reads)g(at)h(least)f
-(one)g(complete)h(line)d(of)i(input)e(b)s(efore)i(executing)g(an)m(y)g
-(of)g(the)g(commands)150 2429 y(on)h(that)h(line.)75
-b(Aliases)42 b(are)g(expanded)g(when)f(a)i(command)f(is)f(read,)46
-b(not)c(when)g(it)f(is)h(executed.)150 2539 y(Therefore,)g(an)e(alias)f
-(de\014nition)e(app)s(earing)i(on)g(the)h(same)h(line)d(as)i(another)g
-(command)f(do)s(es)h(not)150 2648 y(tak)m(e)31 b(e\013ect)f(un)m(til)e
-(the)h(next)g(line)f(of)h(input)e(is)h(read.)41 b(The)28
-b(commands)h(follo)m(wing)f(the)h(alias)f(de\014nition)150
-2758 y(on)f(that)h(line)d(are)j(not)f(a\013ected)i(b)m(y)e(the)g(new)g
-(alias.)39 b(This)25 b(b)s(eha)m(vior)h(is)g(also)h(an)g(issue)f(when)g
-(functions)150 2868 y(are)d(executed.)39 b(Aliases)22
-b(are)h(expanded)f(when)f(a)i(function)f(de\014nition)e(is)i(read,)i
-(not)f(when)e(the)i(function)150 2977 y(is)h(executed,)k(b)s(ecause)d
-(a)h(function)e(de\014nition)e(is)j(itself)f(a)h(comp)s(ound)f
-(command.)39 b(As)25 b(a)h(consequence,)150 3087 y(aliases)34
-b(de\014ned)f(in)g(a)h(function)f(are)i(not)f(a)m(v)-5
-b(ailable)34 b(un)m(til)e(after)j(that)g(function)e(is)g(executed.)53
-b(T)-8 b(o)35 b(b)s(e)150 3196 y(safe,)41 b(alw)m(a)m(ys)e(put)e(alias)
-h(de\014nitions)e(on)i(a)h(separate)g(line,)g(and)f(do)g(not)g(use)g
-Fs(alias)f Ft(in)g(comp)s(ound)150 3306 y(commands.)275
-3455 y(F)-8 b(or)31 b(almost)f(ev)m(ery)h(purp)s(ose,)e(shell)g
-(functions)g(are)h(preferred)g(o)m(v)m(er)h(aliases.)150
-3749 y Fr(6.7)68 b(Arra)l(ys)275 4007 y Ft(Bash)33 b(pro)m(vides)f
-(one-dimensional)f(arra)m(y)i(v)-5 b(ariables.)48 b(An)m(y)33
-b(v)-5 b(ariable)32 b(ma)m(y)h(b)s(e)g(used)f(as)h(an)g(arra)m(y;)150
-4117 y(the)c Fs(declare)d Ft(builtin)f(will)h(explicitly)g(declare)j
-(an)f(arra)m(y)-8 b(.)41 b(There)28 b(is)g(no)g(maxim)m(um)g(limit)e
-(on)i(the)h(size)150 4227 y(of)d(an)g(arra)m(y)-8 b(,)27
-b(nor)f(an)m(y)g(requiremen)m(t)f(that)h(mem)m(b)s(ers)f(b)s(e)g
-(indexed)f(or)i(assigned)f(con)m(tiguously)-8 b(.)39
+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 Fs(csh)p Ft(.)83
+b(If)150 1693 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 1802 y(page)31 b(13\).)275 1951 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 Fs(expand_aliases)150 2061 y Ft(shell)e(option)f(is)h
+(set)g(using)f Fs(shopt)f Ft(\(see)i(Section)g(4.2)h([Bash)e
+(Builtins],)h(page)h(39\).)275 2210 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 2320 y(alw)m(a)m(ys)42 b(reads)f(at)h(least)g
+(one)f(complete)i(line)e(of)g(input)f(b)s(efore)h(executing)h(an)m(y)f
+(of)g(the)g(commands)150 2429 y(on)h(that)h(line.)77
+b(Aliases)44 b(are)e(expanded)g(when)f(a)i(command)f(is)g(read,)k(not)c
+(when)g(it)g(is)h(executed.)150 2539 y(Therefore,)f(an)e(alias)h
+(de\014nition)e(app)s(earing)h(on)f(the)h(same)h(line)f(as)g(another)g
+(command)f(do)s(es)h(not)150 2648 y(tak)m(e)31 b(e\013ect)f(un)m(til)g
+(the)f(next)g(line)h(of)f(input)f(is)h(read.)41 b(The)28
+b(commands)h(follo)m(wing)i(the)e(alias)h(de\014nition)150
+2758 y(on)d(that)h(line)f(are)h(not)f(a\013ected)i(b)m(y)e(the)g(new)g
+(alias.)41 b(This)26 b(b)s(eha)m(vior)h(is)g(also)h(an)f(issue)g(when)f
+(functions)150 2868 y(are)d(executed.)39 b(Aliases)24
+b(are)f(expanded)f(when)f(a)i(function)g(de\014nition)f(is)h(read,)h
+(not)f(when)e(the)i(function)150 2977 y(is)i(executed,)j(b)s(ecause)d
+(a)h(function)f(de\014nition)f(is)i(itself)g(a)f(comp)s(ound)f
+(command.)39 b(As)25 b(a)h(consequence,)150 3087 y(aliases)36
+b(de\014ned)d(in)h(a)g(function)g(are)h(not)f(a)m(v)-5
+b(ailable)37 b(un)m(til)d(after)h(that)g(function)f(is)g(executed.)53
+b(T)-8 b(o)35 b(b)s(e)150 3196 y(safe,)41 b(alw)m(a)m(ys)f(put)d(alias)
+j(de\014nitions)e(on)g(a)h(separate)g(line,)i(and)d(do)g(not)g(use)g
+Fs(alias)f Ft(in)h(comp)s(ound)150 3306 y(commands.)275
+3455 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
+3749 y Fr(6.7)68 b(Arra)l(ys)275 4007 y Ft(Bash)33 b(pro)m(vides)g
+(one-dimensional)h(arra)m(y)f(v)-5 b(ariables.)50 b(An)m(y)33
+b(v)-5 b(ariable)34 b(ma)m(y)f(b)s(e)g(used)f(as)h(an)g(arra)m(y;)150
+4117 y(the)c Fs(declare)d Ft(builtin)i(will)h(explicitly)h(declare)g
+(an)e(arra)m(y)-8 b(.)41 b(There)28 b(is)h(no)f(maxim)m(um)h(limit)g
+(on)f(the)h(size)150 4227 y(of)d(an)g(arra)m(y)-8 b(,)27
+b(nor)f(an)m(y)g(requiremen)m(t)g(that)g(mem)m(b)s(ers)f(b)s(e)g
+(indexed)g(or)h(assigned)g(con)m(tiguously)-8 b(.)41
b(Arra)m(ys)150 4336 y(are)31 b(zero-based.)275 4485
-y(An)f(arra)m(y)g(is)g(created)h(automatically)f(if)g(an)m(y)h(v)-5
-b(ariable)29 b(is)g(assigned)h(to)h(using)e(the)h(syn)m(tax)390
+y(An)f(arra)m(y)g(is)h(created)g(automatically)i(if)e(an)m(y)g(v)-5
+b(ariable)31 b(is)f(assigned)h(to)g(using)f(the)g(syn)m(tax)390
4634 y Fs(name[)p Fj(subscript)11 b Fs(]=)p Fj(value)150
-4783 y Ft(The)25 b Fq(subscript)f Ft(is)h(treated)h(as)f(an)g
-(arithmetic)f(expression)g(that)i(m)m(ust)f(ev)-5 b(aluate)26
-b(to)f(a)h(n)m(um)m(b)s(er)e(greater)150 4893 y(than)30
-b(or)g(equal)g(to)h(zero.)42 b(T)-8 b(o)31 b(explicitly)d(declare)i(an)
-g(arra)m(y)-8 b(,)32 b(use)390 5042 y Fs(declare)46 b(-a)h
+4783 y Ft(The)25 b Fq(subscript)g Ft(is)h(treated)g(as)f(an)g
+(arithmetic)h(expression)f(that)h(m)m(ust)f(ev)-5 b(aluate)27
+b(to)e(a)h(n)m(um)m(b)s(er)e(greater)150 4893 y(than)30
+b(or)g(equal)h(to)g(zero.)42 b(T)-8 b(o)31 b(explicitly)h(declare)f(an)
+f(arra)m(y)-8 b(,)32 b(use)390 5042 y Fs(declare)46 b(-a)h
Fj(name)150 5191 y Ft(The)30 b(syn)m(tax)390 5340 y Fs(declare)46
b(-a)h Fj(name)11 b Fs([)p Fj(subscript)g Fs(])p eop
+end
%%Page: 73 79
-73 78 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(73)150 299 y(is)28 b(also)i(accepted;)h(the)f
-Fq(subscript)f Ft(is)f(ignored.)40 b(A)m(ttributes)29
-b(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g(arra)m(y)h(v)-5
-b(ariable)150 408 y(using)39 b(the)i Fs(declare)d Ft(and)i
-Fs(readonly)f Ft(builtins.)67 b(Eac)m(h)42 b(attribute)e(applies)f(to)i
-(all)f(mem)m(b)s(ers)f(of)i(an)150 518 y(arra)m(y)-8
-b(.)275 663 y(Arra)m(ys)30 b(are)h(assigned)e(to)i(using)e(comp)s(ound)
-g(assignmen)m(ts)h(of)h(the)f(form)390 809 y Fs(name=\(value)p
-Fj(1)55 b Fs(...)47 b(value)p Fj(n)11 b Fs(\))150 954
-y Ft(where)37 b(eac)m(h)h Fq(v)-5 b(alue)42 b Ft(is)37
-b(of)g(the)h(form)e Fs([[)p Fj(subscript)11 b Fs(]=])p
-Fq(string)p Ft(.)57 b(If)36 b(the)i(optional)e(subscript)f(is)i(sup-)
-150 1064 y(plied,)42 b(that)g(index)e(is)g(assigned)h(to;)47
-b(otherwise)41 b(the)g(index)f(of)i(the)f(elemen)m(t)h(assigned)e(is)h
-(the)g(last)150 1173 y(index)33 b(assigned)h(to)h(b)m(y)f(the)h
-(statemen)m(t)h(plus)c(one.)54 b(Indexing)32 b(starts)j(at)g(zero.)54
-b(This)33 b(syn)m(tax)i(is)e(also)150 1283 y(accepted)i(b)m(y)f(the)g
-Fs(declare)e Ft(builtin.)47 b(Individual)30 b(arra)m(y)k(elemen)m(ts)g
-(ma)m(y)h(b)s(e)e(assigned)g(to)h(using)f(the)150 1392
-y Fs(name[)p Fq(subscript)r Fs(]=)p Fq(v)-5 b(alue)31
-b Ft(syn)m(tax)g(in)m(tro)s(duced)e(ab)s(o)m(v)m(e.)275
-1538 y(An)m(y)k(elemen)m(t)h(of)g(an)f(arra)m(y)h(ma)m(y)g(b)s(e)f
-(referenced)g(using)f Fs(${name[)p Fq(subscript)r Fs(]})p
-Ft(.)45 b(The)33 b(braces)h(are)150 1647 y(required)27
-b(to)k(a)m(v)m(oid)e(con\015icts)g(with)f(the)i(shell's)d(\014lename)i
-(expansion)f(op)s(erators.)41 b(If)28 b(the)i Fq(subscript)f
-Ft(is)150 1757 y(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)f(the)h(w)m
-(ord)f(expands)f(to)i(all)e(mem)m(b)s(ers)g(of)i(the)f(arra)m(y)h
-Fq(name)p Ft(.)40 b(These)29 b(subscripts)e(di\013er)h(only)150
-1866 y(when)36 b(the)g(w)m(ord)g(app)s(ears)g(within)e(double)h
-(quotes.)60 b(If)36 b(the)h(w)m(ord)f(is)f(double-quoted,)j
-Fs(${name[*]})150 1976 y Ft(expands)20 b(to)h(a)g(single)e(w)m(ord)h
-(with)g(the)h(v)-5 b(alue)20 b(of)g(eac)m(h)i(arra)m(y)f(mem)m(b)s(er)f
+TeXDict begin 73 78 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(73)150 299 y(is)29
+b(also)i(accepted;)g(the)f Fq(subscript)g Ft(is)f(ignored.)41
+b(A)m(ttributes)30 b(ma)m(y)g(b)s(e)e(sp)s(eci\014ed)h(for)g(an)g(arra)
+m(y)h(v)-5 b(ariable)150 408 y(using)40 b(the)h Fs(declare)d
+Ft(and)i Fs(readonly)f Ft(builtins.)70 b(Eac)m(h)42 b(attribute)f
+(applies)g(to)g(all)h(mem)m(b)s(ers)d(of)i(an)150 518
+y(arra)m(y)-8 b(.)275 663 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
+809 y Fs(name=\(value)p Fj(1)55 b Fs(...)47 b(value)p
+Fj(n)11 b Fs(\))150 954 y Ft(where)37 b(eac)m(h)h Fq(v)-5
+b(alue)43 b Ft(is)38 b(of)f(the)h(form)e Fs([[)p Fj(subscript)11
+b Fs(]=])p Fq(string)p Ft(.)58 b(If)36 b(the)i(optional)g(subscript)e
+(is)i(sup-)150 1064 y(plied,)44 b(that)e(index)f(is)g(assigned)h(to;)47
+b(otherwise)42 b(the)f(index)g(of)h(the)f(elemen)m(t)i(assigned)e(is)h
+(the)f(last)150 1173 y(index)34 b(assigned)h(to)g(b)m(y)f(the)h
+(statemen)m(t)h(plus)d(one.)54 b(Indexing)33 b(starts)i(at)g(zero.)54
+b(This)34 b(syn)m(tax)h(is)f(also)150 1283 y(accepted)h(b)m(y)f(the)g
+Fs(declare)e Ft(builtin.)50 b(Individual)33 b(arra)m(y)h(elemen)m(ts)h
+(ma)m(y)g(b)s(e)e(assigned)h(to)g(using)g(the)150 1392
+y Fs(name[)p Fq(subscript)r Fs(]=)p Fq(v)-5 b(alue)33
+b Ft(syn)m(tax)e(in)m(tro)s(duced)f(ab)s(o)m(v)m(e.)275
+1538 y(An)m(y)j(elemen)m(t)i(of)f(an)f(arra)m(y)h(ma)m(y)g(b)s(e)f
+(referenced)g(using)g Fs(${name[)p Fq(subscript)r Fs(]})p
+Ft(.)46 b(The)33 b(braces)h(are)150 1647 y(required)28
+b(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 Fq(subscript)g
+Ft(is)150 1757 y(`)p Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)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
+Fq(name)p Ft(.)40 b(These)29 b(subscripts)f(di\013er)h(only)150
+1866 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
+Fs(${name[*]})150 1976 y Ft(expands)20 b(to)h(a)g(single)g(w)m(ord)f
+(with)h(the)g(v)-5 b(alue)21 b(of)f(eac)m(h)i(arra)m(y)f(mem)m(b)s(er)f
(separated)h(b)m(y)g(the)f(\014rst)g(c)m(haracter)150
-2086 y(of)38 b(the)g Fs(IFS)f Ft(v)-5 b(ariable,)39 b(and)e
-Fs(${name[@]})e Ft(expands)i(eac)m(h)i(elemen)m(t)f(of)g
+2086 y(of)38 b(the)g Fs(IFS)f Ft(v)-5 b(ariable,)41 b(and)c
+Fs(${name[@]})e Ft(expands)i(eac)m(h)i(elemen)m(t)g(of)f
Fq(name)43 b Ft(to)c(a)f(separate)h(w)m(ord.)150 2195
y(When)33 b(there)g(are)g(no)g(arra)m(y)g(mem)m(b)s(ers,)g
-Fs(${name[@]})d Ft(expands)i(to)i(nothing.)47 b(This)31
-b(is)h(analogous)h(to)150 2305 y(the)i(expansion)f(of)i(the)f(sp)s
-(ecial)f(parameters)h(`)p Fs(@)p Ft(')h(and)e(`)p Fs(*)p
-Ft('.)55 b Fs(${#name[)p Fq(subscript)r Fs(]})31 b Ft(expands)j(to)i
-(the)150 2414 y(length)k(of)g Fs(${name[)p Fq(subscript)r
-Fs(]})p Ft(.)66 b(If)40 b Fq(subscript)g Ft(is)g(`)p
-Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)i(the)e(expansion)e(is)g(the)i(n)m
-(um)m(b)s(er)e(of)150 2524 y(elemen)m(ts)e(in)e(the)i(arra)m(y)-8
-b(.)60 b(Referencing)36 b(an)g(arra)m(y)i(v)-5 b(ariable)35
-b(without)g(a)i(subscript)e(is)g(equiv)-5 b(alen)m(t)36
-b(to)150 2634 y(referencing)30 b(elemen)m(t)g(zero.)275
-2779 y(The)i Fs(unset)g Ft(builtin)e(is)i(used)h(to)h(destro)m(y)g
+Fs(${name[@]})d Ft(expands)i(to)i(nothing.)48 b(This)32
+b(is)h(analogous)h(to)150 2305 y(the)h(expansion)g(of)h(the)f(sp)s
+(ecial)h(parameters)f(`)p Fs(@)p Ft(')h(and)e(`)p Fs(*)p
+Ft('.)55 b Fs(${#name[)p Fq(subscript)r Fs(]})32 b Ft(expands)i(to)i
+(the)150 2414 y(length)41 b(of)f Fs(${name[)p Fq(subscript)r
+Fs(]})p Ft(.)67 b(If)40 b Fq(subscript)h Ft(is)g(`)p
+Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)i(the)e(expansion)f(is)g(the)h(n)m
+(um)m(b)s(er)e(of)150 2524 y(elemen)m(ts)f(in)e(the)h(arra)m(y)-8
+b(.)60 b(Referencing)37 b(an)f(arra)m(y)i(v)-5 b(ariable)37
+b(without)f(a)h(subscript)f(is)g(equiv)-5 b(alen)m(t)38
+b(to)150 2634 y(referencing)31 b(elemen)m(t)g(zero.)275
+2779 y(The)h Fs(unset)g Ft(builtin)h(is)g(used)g(to)h(destro)m(y)g
(arra)m(ys.)50 b Fs(unset)31 b Fq(name)5 b Ft([)p Fq(subscript)r
-Ft(])32 b(destro)m(ys)i(the)f(arra)m(y)150 2888 y(elemen)m(t)c(at)h
-(index)d Fq(subscript)p Ft(.)38 b Fs(unset)27 b Fq(name)p
-Ft(,)j(where)e Fq(name)34 b Ft(is)27 b(an)i(arra)m(y)-8
-b(,)30 b(remo)m(v)m(es)g(the)f(en)m(tire)g(arra)m(y)-8
-b(.)150 2998 y(A)30 b(subscript)f(of)h(`)p Fs(*)p Ft(')h(or)f(`)p
-Fs(@)p Ft(')h(also)f(remo)m(v)m(es)i(the)e(en)m(tire)h(arra)m(y)-8
+Ft(])33 b(destro)m(ys)h(the)f(arra)m(y)150 2888 y(elemen)m(t)d(at)g
+(index)e Fq(subscript)p Ft(.)39 b Fs(unset)27 b Fq(name)p
+Ft(,)j(where)e Fq(name)34 b Ft(is)28 b(an)h(arra)m(y)-8
+b(,)30 b(remo)m(v)m(es)g(the)f(en)m(tire)h(arra)m(y)-8
+b(.)150 2998 y(A)30 b(subscript)g(of)g(`)p Fs(*)p Ft(')h(or)f(`)p
+Fs(@)p Ft(')h(also)g(remo)m(v)m(es)h(the)e(en)m(tire)i(arra)m(y)-8
b(.)275 3143 y(The)22 b Fs(declare)p Ft(,)h Fs(local)p
-Ft(,)g(and)g Fs(readonly)e Ft(builtins)e(eac)m(h)25 b(accept)f(a)g(`)p
-Fs(-a)p Ft(')f(option)f(to)i(sp)s(ecify)e(an)h(arra)m(y)-8
-b(.)150 3253 y(The)24 b Fs(read)g Ft(builtin)e(accepts)k(a)f(`)p
-Fs(-a)p Ft(')g(option)g(to)g(assign)g(a)g(list)f(of)h(w)m(ords)f(read)h
+Ft(,)g(and)g Fs(readonly)e Ft(builtins)h(eac)m(h)j(accept)f(a)g(`)p
+Fs(-a)p Ft(')f(option)g(to)h(sp)s(ecify)f(an)g(arra)m(y)-8
+b(.)150 3253 y(The)24 b Fs(read)g Ft(builtin)h(accepts)h(a)f(`)p
+Fs(-a)p Ft(')g(option)h(to)f(assign)h(a)f(list)h(of)f(w)m(ords)f(read)h
(from)g(the)g(standard)f(input)150 3363 y(to)37 b(an)f(arra)m(y)-8
-b(,)39 b(and)c(can)h(read)g(v)-5 b(alues)36 b(from)f(the)i(standard)e
-(input)f(in)m(to)i(individual)c(arra)m(y)k(elemen)m(ts.)150
-3472 y(The)30 b Fs(set)f Ft(and)h Fs(declare)e Ft(builtins)f(displa)m
-(y)h(arra)m(y)j(v)-5 b(alues)30 b(in)f(a)h(w)m(a)m(y)h(that)g(allo)m
-(ws)f(them)g(to)h(b)s(e)f(reused)150 3582 y(as)h(input.)150
+b(,)39 b(and)c(can)h(read)g(v)-5 b(alues)37 b(from)e(the)i(standard)e
+(input)g(in)m(to)i(individual)f(arra)m(y)g(elemen)m(ts.)150
+3472 y(The)30 b Fs(set)f Ft(and)h Fs(declare)e Ft(builtins)i(displa)m
+(y)g(arra)m(y)h(v)-5 b(alues)31 b(in)f(a)g(w)m(a)m(y)h(that)g(allo)m
+(ws)h(them)e(to)h(b)s(e)f(reused)150 3582 y(as)h(input.)150
3866 y Fr(6.8)68 b(The)45 b(Directory)g(Stac)l(k)275
-4121 y Ft(The)26 b(directory)f(stac)m(k)j(is)e(a)h(list)e(of)i(recen)m
-(tly-visited)e(directories.)39 b(The)26 b Fs(pushd)f
-Ft(builtin)e(adds)j(direc-)150 4231 y(tories)e(to)g(the)h(stac)m(k)g
-(as)f(it)g(c)m(hanges)g(the)h(curren)m(t)e(directory)-8
-b(,)26 b(and)d(the)h Fs(popd)f Ft(builtin)d(remo)m(v)m(es)26
-b(sp)s(eci\014ed)150 4340 y(directories)h(from)h(the)h(stac)m(k)h(and)d
-(c)m(hanges)j(the)e(curren)m(t)g(directory)g(to)h(the)g(directory)e
-(remo)m(v)m(ed.)41 b(The)150 4450 y Fs(dirs)29 b Ft(builtin)e(displa)m
-(ys)i(the)h(con)m(ten)m(ts)i(of)f(the)f(directory)g(stac)m(k.)275
-4595 y(The)35 b(con)m(ten)m(ts)i(of)f(the)h(directory)e(stac)m(k)i(are)
-f(also)g(visible)e(as)i(the)g(v)-5 b(alue)35 b(of)h(the)g
+4121 y Ft(The)26 b(directory)g(stac)m(k)i(is)f(a)g(list)g(of)g(recen)m
+(tly-visited)h(directories.)41 b(The)26 b Fs(pushd)f
+Ft(builtin)h(adds)g(direc-)150 4231 y(tories)f(to)f(the)h(stac)m(k)g
+(as)f(it)h(c)m(hanges)f(the)h(curren)m(t)e(directory)-8
+b(,)27 b(and)c(the)h Fs(popd)f Ft(builtin)g(remo)m(v)m(es)j(sp)s
+(eci\014ed)150 4340 y(directories)j(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 4450 y Fs(dirs)29 b Ft(builtin)h(displa)m(ys)h
+(the)f(con)m(ten)m(ts)i(of)f(the)f(directory)h(stac)m(k.)275
+4595 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
Fs(DIRSTACK)e Ft(shell)150 4705 y(v)-5 b(ariable.)150
4951 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150
5200 y Fs(dirs)870 5340 y(dirs)47 b([+)p Fj(N)57 b Fs(|)48
-b(-)p Fj(N)11 b Fs(])46 b([-clpv])p eop
+b(-)p Fj(N)11 b Fs(])46 b([-clpv])p eop end
%%Page: 74 80
-74 79 bop 150 -116 a Ft(74)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(Displa)m(y)i(the)h(list)e(of)i(curren)m(tly)f(remem)m(b)s(ered)g
-(directories.)49 b(Directories)34 b(are)g(added)f(to)630
-408 y(the)28 b(list)f(with)g(the)h Fs(pushd)f Ft(command;)i(the)f
-Fs(popd)f Ft(command)h(remo)m(v)m(es)h(directories)e(from)630
-518 y(the)k(list.)630 670 y Fs(+)p Fj(N)384 b Ft(Displa)m(ys)21
-b(the)h Fq(N)10 b Ft(th)21 b(directory)g(\(coun)m(ting)h(from)f(the)h
-(left)f(of)h(the)g(list)e(prin)m(ted)1110 780 y(b)m(y)30
-b Fs(dirs)f Ft(when)h(in)m(v)m(ok)m(ed)h(without)e(options\),)h
-(starting)g(with)g(zero.)630 932 y Fs(-)p Fj(N)384 b
-Ft(Displa)m(ys)45 b(the)i Fq(N)10 b Ft(th)46 b(directory)g(\(coun)m
-(ting)g(from)g(the)g(righ)m(t)g(of)h(the)f(list)1110
-1042 y(prin)m(ted)24 b(b)m(y)h Fs(dirs)g Ft(when)f(in)m(v)m(ok)m(ed)i
-(without)f(options\),)h(starting)g(with)e(zero.)630 1194
-y Fs(-c)384 b Ft(Clears)30 b(the)g(directory)g(stac)m(k)i(b)m(y)e
-(deleting)f(all)h(of)g(the)h(elemen)m(ts.)630 1347 y
-Fs(-l)384 b Ft(Pro)s(duces)30 b(a)i(longer)f(listing;)f(the)i(default)e
-(listing)g(format)h(uses)g(a)h(tilde)e(to)1110 1456 y(denote)h(the)f
-(home)h(directory)-8 b(.)630 1609 y Fs(-p)384 b Ft(Causes)30
-b Fs(dirs)f Ft(to)i(prin)m(t)e(the)i(directory)f(stac)m(k)i(with)d(one)
-h(en)m(try)h(p)s(er)e(line.)630 1761 y Fs(-v)384 b Ft(Causes)36
-b Fs(dirs)f Ft(to)i(prin)m(t)e(the)h(directory)g(stac)m(k)i(with)d(one)
-i(en)m(try)f(p)s(er)f(line,)1110 1871 y(pre\014xing)29
-b(eac)m(h)i(en)m(try)g(with)e(its)h(index)e(in)i(the)g(stac)m(k.)150
-2023 y Fs(popd)870 2154 y(popd)47 b([+)p Fj(N)57 b Fs(|)48
-b(-)p Fj(N)11 b Fs(])46 b([-n])630 2285 y Ft(Remo)m(v)m(e)26
-b(the)e(top)g(en)m(try)h(from)e(the)h(directory)g(stac)m(k,)j(and)c
-Fs(cd)h Ft(to)h(the)f(new)f(top)i(directory)-8 b(.)630
-2395 y(When)32 b(no)g(argumen)m(ts)h(are)g(giv)m(en,)g
-Fs(popd)e Ft(remo)m(v)m(es)j(the)f(top)f(directory)g(from)g(the)g(stac)
-m(k)630 2504 y(and)f(p)s(erforms)e(a)j Fs(cd)f Ft(to)h(the)f(new)g(top)
-h(directory)-8 b(.)43 b(The)31 b(elemen)m(ts)h(are)f(n)m(um)m(b)s(ered)
-f(from)630 2614 y(0)d(starting)f(at)h(the)g(\014rst)f(directory)g
-(listed)f(with)g Fs(dirs)p Ft(;)i(i.e.,)h Fs(popd)d Ft(is)h(equiv)-5
-b(alen)m(t)26 b(to)h Fs(popd)630 2724 y(+0)p Ft(.)630
-2876 y Fs(+)p Fj(N)384 b Ft(Remo)m(v)m(es)22 b(the)f
-Fq(N)10 b Ft(th)20 b(directory)f(\(coun)m(ting)i(from)f(the)g(left)g
-(of)h(the)f(list)f(prin)m(ted)1110 2986 y(b)m(y)30 b
-Fs(dirs)p Ft(\),)g(starting)g(with)f(zero.)630 3138 y
-Fs(-)p Fj(N)384 b Ft(Remo)m(v)m(es)46 b(the)g Fq(N)10
-b Ft(th)44 b(directory)g(\(coun)m(ting)h(from)g(the)g(righ)m(t)f(of)h
-(the)g(list)1110 3248 y(prin)m(ted)29 b(b)m(y)h Fs(dirs)p
-Ft(\),)g(starting)g(with)f(zero.)630 3400 y Fs(-n)384
-b Ft(Suppresses)27 b(the)j(normal)f(c)m(hange)h(of)g(directory)f(when)f
-(remo)m(ving)i(directo-)1110 3510 y(ries)f(from)h(the)h(stac)m(k,)h(so)
-f(that)g(only)e(the)i(stac)m(k)g(is)f(manipulated.)150
-3684 y Fs(pushd)870 3815 y(pushd)46 b([)p Fj(dir)58 b
-Fs(|)47 b(+)p Fj(N)58 b Fs(|)47 b Fj(-N)11 b Fs(])47
-b([-n])630 3946 y Ft(Sa)m(v)m(e)30 b(the)e(curren)m(t)g(directory)g(on)
-g(the)h(top)f(of)h(the)f(directory)g(stac)m(k)i(and)e(then)g
-Fs(cd)f Ft(to)i Fq(dir)p Ft(.)630 4055 y(With)h(no)g(argumen)m(ts,)h
-Fs(pushd)e Ft(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h(directories.)630
-4208 y Fs(+)p Fj(N)384 b Ft(Brings)28 b(the)g Fq(N)10
-b Ft(th)29 b(directory)f(\(coun)m(ting)h(from)f(the)g(left)h(of)f(the)h
-(list)e(prin)m(ted)1110 4317 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)g
-(with)f(zero\))j(to)f(the)f(top)g(of)h(the)f(list)f(b)m(y)h(rotating)h
-(the)1110 4427 y(stac)m(k.)630 4579 y Fs(-)p Fj(N)384
-b Ft(Brings)22 b(the)h Fq(N)10 b Ft(th)23 b(directory)g(\(coun)m(ting)g
-(from)f(the)i(righ)m(t)e(of)h(the)h(list)d(prin)m(ted)1110
-4689 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)g(with)f(zero\))j(to)f(the)
-f(top)g(of)h(the)f(list)f(b)m(y)h(rotating)h(the)1110
-4798 y(stac)m(k.)630 4951 y Fs(-n)384 b Ft(Suppresses)26
-b(the)i(normal)g(c)m(hange)h(of)f(directory)g(when)f(adding)g
-(directories)1110 5060 y(to)k(the)g(stac)m(k,)h(so)e(that)h(only)f(the)
-g(stac)m(k)i(is)e(manipulated.)630 5213 y Fj(dir)336
-b Ft(Mak)m(es)36 b(the)f(curren)m(t)g(w)m(orking)f(directory)g(b)s(e)g
-(the)h(top)g(of)g(the)g(stac)m(k,)j(and)1110 5322 y(then)30
-b(executes)i(the)e(equiv)-5 b(alen)m(t)30 b(of)h(`)p
-Fs(cd)f Fq(dir)7 b Ft('.)38 b Fs(cd)p Ft(s)30 b(to)h
-Fq(dir)p Ft(.)p eop
+TeXDict begin 74 79 bop 150 -116 a Ft(74)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(Displa)m(y)k(the)f(list)g(of)g
+(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 b(Directories)36
+b(are)e(added)f(to)630 408 y(the)28 b(list)h(with)f(the)g
+Fs(pushd)f Ft(command;)i(the)f Fs(popd)f Ft(command)h(remo)m(v)m(es)h
+(directories)g(from)630 518 y(the)i(list.)630 670 y Fs(+)p
+Fj(N)384 b Ft(Displa)m(ys)23 b(the)f Fq(N)10 b Ft(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 780 y(b)m(y)30 b Fs(dirs)f Ft(when)h(in)m(v)m(ok)m(ed)
+i(without)e(options\),)h(starting)g(with)g(zero.)630
+932 y Fs(-)p Fj(N)384 b Ft(Displa)m(ys)47 b(the)g Fq(N)10
+b Ft(th)46 b(directory)h(\(coun)m(ting)g(from)f(the)g(righ)m(t)h(of)g
+(the)f(list)1110 1042 y(prin)m(ted)25 b(b)m(y)g Fs(dirs)g
+Ft(when)f(in)m(v)m(ok)m(ed)j(without)f(options\),)h(starting)g(with)e
+(zero.)630 1194 y Fs(-c)384 b Ft(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
+1347 y Fs(-l)384 b Ft(Pro)s(duces)30 b(a)i(longer)g(listing;)h(the)f
+(default)f(listing)i(format)e(uses)g(a)h(tilde)g(to)1110
+1456 y(denote)f(the)f(home)h(directory)-8 b(.)630 1609
+y Fs(-p)384 b Ft(Causes)30 b Fs(dirs)f Ft(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
+1761 y Fs(-v)384 b Ft(Causes)36 b Fs(dirs)f Ft(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
+1871 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.)150 2023 y Fs(popd)870 2154 y(popd)47
+b([+)p Fj(N)57 b Fs(|)48 b(-)p Fj(N)11 b Fs(])46 b([-n])630
+2285 y Ft(Remo)m(v)m(e)26 b(the)e(top)g(en)m(try)h(from)e(the)h
+(directory)h(stac)m(k,)i(and)c Fs(cd)h Ft(to)h(the)f(new)f(top)i
+(directory)-8 b(.)630 2395 y(When)32 b(no)g(argumen)m(ts)h(are)g(giv)m
+(en,)h Fs(popd)d Ft(remo)m(v)m(es)j(the)f(top)f(directory)h(from)f(the)
+g(stac)m(k)630 2504 y(and)f(p)s(erforms)e(a)j Fs(cd)f
+Ft(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 2614
+y(0)d(starting)g(at)g(the)g(\014rst)f(directory)h(listed)g(with)f
+Fs(dirs)p Ft(;)h(i.e.,)i Fs(popd)c Ft(is)i(equiv)-5 b(alen)m(t)28
+b(to)f Fs(popd)630 2724 y(+0)p Ft(.)630 2876 y Fs(+)p
+Fj(N)384 b Ft(Remo)m(v)m(es)22 b(the)f Fq(N)10 b Ft(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 2986 y(b)m(y)30 b Fs(dirs)p Ft(\),)g(starting)h(with)f
+(zero.)630 3138 y Fs(-)p Fj(N)384 b Ft(Remo)m(v)m(es)46
+b(the)g Fq(N)10 b Ft(th)44 b(directory)h(\(coun)m(ting)h(from)f(the)g
+(righ)m(t)g(of)g(the)g(list)1110 3248 y(prin)m(ted)30
+b(b)m(y)g Fs(dirs)p Ft(\),)g(starting)h(with)f(zero.)630
+3400 y Fs(-n)384 b Ft(Suppresses)27 b(the)j(normal)g(c)m(hange)g(of)g
+(directory)g(when)e(remo)m(ving)j(directo-)1110 3510
+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.)150 3684 y Fs(pushd)870 3815 y(pushd)46
+b([)p Fj(dir)58 b Fs(|)47 b(+)p Fj(N)58 b Fs(|)47 b Fj(-N)11
+b Fs(])47 b([-n])630 3946 y Ft(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 Fs(cd)f Ft(to)i Fq(dir)p Ft(.)630 4055 y(With)i(no)f(argumen)m
+(ts,)h Fs(pushd)e Ft(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h
+(directories.)630 4208 y Fs(+)p Fj(N)384 b Ft(Brings)29
+b(the)f Fq(N)10 b Ft(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 4317 y(b)m(y)34
+b Fs(dirs)p Ft(,)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 4427 y(stac)m(k.)630
+4579 y Fs(-)p Fj(N)384 b Ft(Brings)23 b(the)g Fq(N)10
+b Ft(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 4689 y(b)m(y)34 b Fs(dirs)p
+Ft(,)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 4798 y(stac)m(k.)630 4951 y
+Fs(-n)384 b Ft(Suppresses)26 b(the)i(normal)h(c)m(hange)g(of)f
+(directory)h(when)e(adding)h(directories)1110 5060 y(to)j(the)g(stac)m
+(k,)h(so)e(that)h(only)g(the)f(stac)m(k)i(is)f(manipulated.)630
+5213 y Fj(dir)336 b Ft(Mak)m(es)36 b(the)f(curren)m(t)g(w)m(orking)g
+(directory)g(b)s(e)f(the)h(top)g(of)g(the)g(stac)m(k,)j(and)1110
+5322 y(then)30 b(executes)i(the)e(equiv)-5 b(alen)m(t)32
+b(of)f(`)p Fs(cd)f Fq(dir)7 b Ft('.)39 b Fs(cd)p Ft(s)30
+b(to)h Fq(dir)p Ft(.)p eop end
%%Page: 75 81
-75 80 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(75)150 299 y Fr(6.9)68 b(Con)l(trolling)47
-b(the)e(Prompt)275 544 y Ft(The)c(v)-5 b(alue)42 b(of)g(the)h(v)-5
-b(ariable)41 b Fs(PROMPT_COMMAND)d Ft(is)j(examined)g(just)h(b)s(efore)
-g(Bash)g(prin)m(ts)f(eac)m(h)150 653 y(primary)f(prompt.)73
-b(If)41 b Fs(PROMPT_COMMAND)d Ft(is)i(set)i(and)f(has)h(a)g(non-n)m
-(ull)d(v)-5 b(alue,)44 b(then)d(the)h(v)-5 b(alue)41
-b(is)150 763 y(executed)31 b(just)f(as)h(if)e(it)h(had)g(b)s(een)f(t)m
-(yp)s(ed)h(on)h(the)f(command)g(line.)275 898 y(In)d(addition,)h(the)h
-(follo)m(wing)e(table)h(describ)s(es)f(the)i(sp)s(ecial)e(c)m
-(haracters)j(whic)m(h)e(can)g(app)s(ear)g(in)g(the)150
-1008 y(prompt)h(v)-5 b(ariables:)150 1168 y Fs(\\a)384
-b Ft(A)30 b(b)s(ell)f(c)m(haracter.)150 1328 y Fs(\\d)384
-b Ft(The)30 b(date,)h(in)e Fs(")p Ft(W)-8 b(eekda)m(y)32
-b(Mon)m(th)f(Date)p Fs(")h Ft(format)f(\(e.g.,)h Fs(")p
-Ft(T)-8 b(ue)30 b(Ma)m(y)h(26)p Fs(")p Ft(\).)150 1488
-y Fs(\\D{)p Fj(format)11 b Fs(})630 1598 y Ft(The)27
-b Fq(format)i Ft(is)e(passed)f(to)i Fs(strftime)p Ft(\(3\))f(and)f(the)
-i(result)e(is)g(inserted)g(in)m(to)h(the)h(prompt)630
-1708 y(string;)41 b(an)e(empt)m(y)f Fq(format)j Ft(results)c(in)g(a)i
-(lo)s(cale-sp)s(eci\014c)e(time)h(represen)m(tation.)64
+TeXDict begin 75 80 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(75)150 299 y Fr(6.9)68
+b(Con)l(trolling)47 b(the)e(Prompt)275 544 y Ft(The)c(v)-5
+b(alue)43 b(of)f(the)h(v)-5 b(ariable)43 b Fs(PROMPT_COMMAND)38
+b Ft(is)k(examined)g(just)g(b)s(efore)g(Bash)g(prin)m(ts)g(eac)m(h)150
+653 y(primary)f(prompt.)73 b(If)41 b Fs(PROMPT_COMMAND)d
+Ft(is)j(set)h(and)f(has)h(a)g(non-n)m(ull)f(v)-5 b(alue,)45
+b(then)c(the)h(v)-5 b(alue)42 b(is)150 763 y(executed)31
+b(just)f(as)h(if)f(it)h(had)f(b)s(een)f(t)m(yp)s(ed)h(on)h(the)f
+(command)g(line.)275 898 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 1008 y(prompt)g(v)-5 b(ariables:)150
+1168 y Fs(\\a)384 b Ft(A)30 b(b)s(ell)h(c)m(haracter.)150
+1328 y Fs(\\d)384 b Ft(The)30 b(date,)h(in)f Fs(")p Ft(W)-8
+b(eekda)m(y)32 b(Mon)m(th)f(Date)p Fs(")h Ft(format)f(\(e.g.,)h
+Fs(")p Ft(T)-8 b(ue)30 b(Ma)m(y)h(26)p Fs(")p Ft(\).)150
+1488 y Fs(\\D{)p Fj(format)11 b Fs(})630 1598 y Ft(The)27
+b Fq(format)i Ft(is)f(passed)e(to)i Fs(strftime)p Ft(\(3\))f(and)f(the)
+i(result)f(is)g(inserted)g(in)m(to)h(the)g(prompt)630
+1708 y(string;)42 b(an)d(empt)m(y)f Fq(format)j Ft(results)d(in)g(a)h
+(lo)s(cale-sp)s(eci\014c)h(time)f(represen)m(tation.)65
b(The)630 1817 y(braces)31 b(are)f(required.)150 1977
y Fs(\\e)384 b Ft(An)30 b(escap)s(e)h(c)m(haracter.)150
2137 y Fs(\\h)384 b Ft(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e
(`.'.)150 2298 y Fs(\\H)384 b Ft(The)30 b(hostname.)150
2458 y Fs(\\j)384 b Ft(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m
-(tly)g(managed)h(b)m(y)f(the)g(shell.)150 2618 y Fs(\\l)384
-b Ft(The)30 b(basename)h(of)f(the)h(shell's)d(terminal)h(device)h
+(tly)h(managed)g(b)m(y)f(the)g(shell.)150 2618 y Fs(\\l)384
+b Ft(The)30 b(basename)h(of)f(the)h(shell's)f(terminal)h(device)g
(name.)150 2778 y Fs(\\n)384 b Ft(A)30 b(newline.)150
-2938 y Fs(\\r)384 b Ft(A)30 b(carriage)h(return.)150
-3098 y Fs(\\s)384 b Ft(The)22 b(name)g(of)h(the)f(shell,)g(the)h
-(basename)f(of)h Fs($0)f Ft(\(the)g(p)s(ortion)f(follo)m(wing)g(the)i
-(\014nal)d(slash\).)150 3258 y Fs(\\t)384 b Ft(The)30
-b(time,)g(in)f(24-hour)i(HH:MM:SS)g(format.)150 3418
-y Fs(\\T)384 b Ft(The)30 b(time,)g(in)f(12-hour)i(HH:MM:SS)g(format.)
-150 3579 y Fs(\\@)384 b Ft(The)30 b(time,)g(in)f(12-hour)i(am/pm)f
-(format.)150 3739 y Fs(\\A)384 b Ft(The)30 b(time,)g(in)f(24-hour)i
+2938 y Fs(\\r)384 b Ft(A)30 b(carriage)i(return.)150
+3098 y Fs(\\s)384 b Ft(The)22 b(name)g(of)h(the)f(shell,)i(the)f
+(basename)f(of)h Fs($0)f Ft(\(the)g(p)s(ortion)g(follo)m(wing)i(the)f
+(\014nal)e(slash\).)150 3258 y Fs(\\t)384 b Ft(The)30
+b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 3418
+y Fs(\\T)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.)
+150 3579 y Fs(\\@)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(am/pm)f
+(format.)150 3739 y Fs(\\A)384 b Ft(The)30 b(time,)h(in)f(24-hour)h
(HH:MM)g(format.)150 3899 y Fs(\\u)384 b Ft(The)30 b(username)g(of)g
(the)h(curren)m(t)f(user.)150 4059 y Fs(\\v)384 b Ft(The)30
-b(v)m(ersion)g(of)g(Bash)h(\(e.g.,)h(2.00\))150 4219
-y Fs(\\V)384 b Ft(The)30 b(release)h(of)f(Bash,)h(v)m(ersion)f
-Fs(+)g Ft(patc)m(hlev)m(el)g(\(e.g.,)j(2.00.0\))150 4379
-y Fs(\\w)384 b Ft(The)30 b(curren)m(t)g(w)m(orking)g(directory)-8
-b(,)30 b(with)f Fs($HOME)g Ft(abbreviated)h(with)f(a)i(tilde.)150
+b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150 4219
+y Fs(\\V)384 b Ft(The)30 b(release)i(of)e(Bash,)h(v)m(ersion)g
+Fs(+)f Ft(patc)m(hlev)m(el)i(\(e.g.,)h(2.00.0\))150 4379
+y Fs(\\w)384 b Ft(The)30 b(curren)m(t)g(w)m(orking)h(directory)-8
+b(,)31 b(with)f Fs($HOME)f Ft(abbreviated)i(with)f(a)h(tilde.)150
4539 y Fs(\\W)384 b Ft(The)30 b(basename)h(of)f Fs($PWD)p
-Ft(,)g(with)f Fs($HOME)g Ft(abbreviated)g(with)g(a)i(tilde.)150
-4699 y Fs(\\!)384 b Ft(The)30 b(history)f(n)m(um)m(b)s(er)g(of)i(this)e
+Ft(,)g(with)g Fs($HOME)f Ft(abbreviated)h(with)g(a)h(tilde.)150
+4699 y Fs(\\!)384 b Ft(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i(this)f
(command.)150 4860 y Fs(\\#)384 b Ft(The)30 b(command)g(n)m(um)m(b)s
-(er)f(of)i(this)e(command.)150 5020 y Fs(\\$)384 b Ft(If)30
-b(the)g(e\013ectiv)m(e)i(uid)d(is)g(0,)i Fs(#)p Ft(,)g(otherwise)f
+(er)f(of)i(this)f(command.)150 5020 y Fs(\\$)384 b Ft(If)30
+b(the)g(e\013ectiv)m(e)j(uid)d(is)g(0,)h Fs(#)p Ft(,)g(otherwise)g
Fs($)p Ft(.)150 5180 y Fs(\\)p Fj(nnn)288 b Ft(The)30
-b(c)m(haracter)i(whose)e(ASCI)s(I)f(co)s(de)h(is)g(the)g(o)s(ctal)h(v)
--5 b(alue)30 b Fq(nnn)p Ft(.)150 5340 y Fs(\\\\)384 b
-Ft(A)30 b(bac)m(kslash.)p eop
+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 Fq(nnn)p Ft(.)150 5340 y Fs(\\\\)384 b
+Ft(A)30 b(bac)m(kslash.)p eop end
%%Page: 76 82
-76 81 bop 150 -116 a Ft(76)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fs(\\[)384 b Ft(Begin)37 b(a)g(sequence)g(of)g(non-prin)m(ting)e
-(c)m(haracters.)61 b(This)35 b(could)h(b)s(e)h(used)f(to)h(em)m(b)s(ed)
-g(a)630 408 y(terminal)29 b(con)m(trol)i(sequence)f(in)m(to)h(the)f
-(prompt.)150 568 y Fs(\\])384 b Ft(End)29 b(a)i(sequence)g(of)f
-(non-prin)m(ting)e(c)m(haracters.)275 728 y(The)d(command)h(n)m(um)m(b)
-s(er)f(and)h(the)g(history)f(n)m(um)m(b)s(er)g(are)i(usually)d
-(di\013eren)m(t:)38 b(the)26 b(history)f(n)m(um)m(b)s(er)150
-838 y(of)i(a)f(command)h(is)e(its)h(p)s(osition)e(in)h(the)i(history)e
-(list,)h(whic)m(h)g(ma)m(y)h(include)d(commands)i(restored)g(from)150
-947 y(the)39 b(history)g(\014le)f(\(see)i(Section)f(9.1)i([Bash)e
-(History)g(F)-8 b(acilities],)41 b(page)f(109\),)j(while)38
-b(the)h(command)150 1057 y(n)m(um)m(b)s(er)j(is)g(the)i(p)s(osition)d
-(in)h(the)h(sequence)h(of)f(commands)g(executed)h(during)d(the)j
-(curren)m(t)f(shell)150 1167 y(session.)275 1302 y(After)35
-b(the)g(string)f(is)g(deco)s(ded,)i(it)e(is)g(expanded)g(via)h
-(parameter)g(expansion,)h(command)e(substi-)150 1411
-y(tution,)j(arithmetic)e(expansion,)h(and)f(quote)h(remo)m(v)-5
-b(al,)38 b(sub)5 b(ject)35 b(to)i(the)f(v)-5 b(alue)35
-b(of)h(the)g Fs(promptvars)150 1521 y Ft(shell)29 b(option)g(\(see)j
-(Section)e(4.2)h([Bash)g(Builtins],)d(page)j(39\).)150
+TeXDict begin 76 81 bop 150 -116 a Ft(76)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(\\[)384 b Ft(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
+408 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.)150
+568 y Fs(\\])384 b Ft(End)29 b(a)i(sequence)g(of)f(non-prin)m(ting)g(c)
+m(haracters.)275 728 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 838 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 947 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(109\),)j(while)d(the)f(command)150
+1057 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
+1167 y(session.)275 1302 y(After)35 b(the)g(string)g(is)g(deco)s(ded,)h
+(it)f(is)g(expanded)f(via)i(parameter)f(expansion,)i(command)d(substi-)
+150 1411 y(tution,)k(arithmetic)f(expansion,)g(and)e(quote)h(remo)m(v)
+-5 b(al,)39 b(sub)5 b(ject)35 b(to)i(the)f(v)-5 b(alue)36
+b(of)g(the)g Fs(promptvars)150 1521 y Ft(shell)31 b(option)f(\(see)i
+(Section)f(4.2)g([Bash)g(Builtins],)g(page)g(39\).)150
1779 y Fr(6.10)68 b(The)45 b(Restricted)h(Shell)275 2024
-y Ft(If)26 b(Bash)h(is)e(started)i(with)f(the)h(name)f
+y Ft(If)26 b(Bash)h(is)f(started)h(with)g(the)g(name)f
Fs(rbash)p Ft(,)h(or)f(the)h(`)p Fs(--restricted)p Ft(')d(or)j(`)p
-Fs(-r)p Ft(')f(option)g(is)g(supplied)150 2133 y(at)32
-b(in)m(v)m(o)s(cation,)g(the)f(shell)e(b)s(ecomes)j(restricted.)43
-b(A)31 b(restricted)g(shell)e(is)h(used)h(to)h(set)f(up)f(an)i(en)m
-(viron-)150 2243 y(men)m(t)26 b(more)f(con)m(trolled)g(than)g(the)h
-(standard)e(shell.)38 b(A)25 b(restricted)g(shell)f(b)s(eha)m(v)m(es)i
-(iden)m(tically)d(to)j Fs(bash)150 2352 y Ft(with)j(the)i(exception)f
-(that)h(the)g(follo)m(wing)e(are)h(disallo)m(w)m(ed)f(or)i(not)f(p)s
-(erformed:)225 2487 y Fp(\017)60 b Ft(Changing)29 b(directories)g(with)
-h(the)g Fs(cd)g Ft(builtin.)225 2622 y Fp(\017)60 b Ft(Setting)30
-b(or)g(unsetting)g(the)h(v)-5 b(alues)29 b(of)i(the)f
+Fs(-r)p Ft(')f(option)h(is)g(supplied)150 2133 y(at)32
+b(in)m(v)m(o)s(cation,)i(the)d(shell)g(b)s(ecomes)h(restricted.)44
+b(A)31 b(restricted)h(shell)f(is)g(used)g(to)h(set)f(up)f(an)i(en)m
+(viron-)150 2243 y(men)m(t)26 b(more)f(con)m(trolled)i(than)e(the)h
+(standard)e(shell.)40 b(A)25 b(restricted)h(shell)g(b)s(eha)m(v)m(es)g
+(iden)m(tically)h(to)f Fs(bash)150 2352 y Ft(with)k(the)h(exception)g
+(that)g(the)g(follo)m(wing)h(are)e(disallo)m(w)m(ed)i(or)f(not)f(p)s
+(erformed:)225 2487 y Fp(\017)60 b Ft(Changing)30 b(directories)h(with)
+g(the)f Fs(cd)g Ft(builtin.)225 2622 y Fp(\017)60 b Ft(Setting)31
+b(or)f(unsetting)h(the)g(v)-5 b(alues)30 b(of)h(the)f
Fs(SHELL)p Ft(,)g Fs(PATH)p Ft(,)f Fs(ENV)p Ft(,)h(or)g
Fs(BASH_ENV)e Ft(v)-5 b(ariables.)225 2757 y Fp(\017)60
-b Ft(Sp)s(ecifying)28 b(command)i(names)g(con)m(taining)g(slashes.)225
-2891 y Fp(\017)60 b Ft(Sp)s(ecifying)28 b(a)j(\014lename)e(con)m
-(taining)h(a)h(slash)e(as)i(an)f(argumen)m(t)h(to)g(the)f
-Fs(.)h Ft(builtin)26 b(command.)225 3026 y Fp(\017)60
-b Ft(Sp)s(ecifying)26 b(a)k(\014lename)e(con)m(taining)g(a)i(slash)d
-(as)i(an)g(argumen)m(t)h(to)f(the)g(`)p Fs(-p)p Ft(')g(option)f(to)i
-(the)f Fs(hash)330 3136 y Ft(builtin)e(command.)225 3270
-y Fp(\017)60 b Ft(Imp)s(orting)29 b(function)g(de\014nitions)f(from)h
-(the)i(shell)e(en)m(vironmen)m(t)h(at)h(startup.)225
-3405 y Fp(\017)60 b Ft(P)m(arsing)30 b(the)g(v)-5 b(alue)30
-b(of)h Fs(SHELLOPTS)d Ft(from)h(the)i(shell)e(en)m(vironmen)m(t)h(at)h
-(startup.)225 3540 y Fp(\017)60 b Ft(Redirecting)29 b(output)h(using)f
-(the)i(`)p Fs(>)p Ft(',)g(`)p Fs(>|)p Ft(',)f(`)p Fs(<>)p
-Ft(',)h(`)p Fs(>&)p Ft(',)f(`)p Fs(&>)p Ft(',)h(and)e(`)p
-Fs(>>)p Ft(')i(redirection)e(op)s(erators.)225 3675 y
-Fp(\017)60 b Ft(Using)30 b(the)g Fs(exec)f Ft(builtin)e(to)k(replace)g
-(the)f(shell)f(with)g(another)i(command.)225 3809 y Fp(\017)60
-b Ft(Adding)39 b(or)i(deleting)f(builtin)d(commands)k(with)e(the)i(`)p
-Fs(-f)p Ft(')g(and)f(`)p Fs(-d)p Ft(')h(options)f(to)i(the)f
+b Ft(Sp)s(ecifying)30 b(command)g(names)g(con)m(taining)i(slashes.)225
+2891 y Fp(\017)60 b Ft(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
+Fs(.)h Ft(builtin)e(command.)225 3026 y Fp(\017)60 b
+Ft(Sp)s(ecifying)28 b(a)i(\014lename)f(con)m(taining)h(a)g(slash)e(as)h
+(an)g(argumen)m(t)h(to)f(the)g(`)p Fs(-p)p Ft(')g(option)g(to)h(the)f
+Fs(hash)330 3136 y Ft(builtin)h(command.)225 3270 y Fp(\017)60
+b Ft(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 3405 y Fp(\017)60
+b Ft(P)m(arsing)31 b(the)f(v)-5 b(alue)31 b(of)g Fs(SHELLOPTS)d
+Ft(from)h(the)i(shell)g(en)m(vironmen)m(t)g(at)g(startup.)225
+3540 y Fp(\017)60 b Ft(Redirecting)31 b(output)f(using)g(the)h(`)p
+Fs(>)p Ft(',)g(`)p Fs(>|)p Ft(',)f(`)p Fs(<>)p Ft(',)h(`)p
+Fs(>&)p Ft(',)f(`)p Fs(&>)p Ft(',)h(and)e(`)p Fs(>>)p
+Ft(')i(redirection)g(op)s(erators.)225 3675 y Fp(\017)60
+b Ft(Using)31 b(the)f Fs(exec)f Ft(builtin)h(to)h(replace)h(the)e
+(shell)h(with)f(another)h(command.)225 3809 y Fp(\017)60
+b Ft(Adding)40 b(or)h(deleting)h(builtin)e(commands)h(with)f(the)h(`)p
+Fs(-f)p Ft(')g(and)f(`)p Fs(-d)p Ft(')h(options)g(to)h(the)f
Fs(enable)330 3919 y Ft(builtin.)225 4054 y Fp(\017)60
-b Ft(Using)30 b(the)g Fs(enable)f Ft(builtin)e(command)j(to)h(enable)f
-(disabled)e(shell)g(builtins.)225 4188 y Fp(\017)60 b
-Ft(Sp)s(ecifying)28 b(the)i(`)p Fs(-p)p Ft(')h(option)f(to)h(the)f
+b Ft(Using)31 b(the)f Fs(enable)f Ft(builtin)h(command)g(to)h(enable)g
+(disabled)f(shell)g(builtins.)225 4188 y Fp(\017)60 b
+Ft(Sp)s(ecifying)30 b(the)g(`)p Fs(-p)p Ft(')h(option)g(to)g(the)f
Fs(command)f Ft(builtin.)225 4323 y Fp(\017)60 b Ft(T)-8
-b(urning)28 b(o\013)j(restricted)f(mo)s(de)g(with)f(`)p
-Fs(set)h(+r)p Ft(')g(or)g(`)p Fs(set)g(+o)g(restricted)p
-Ft('.)275 4483 y(These)g(restrictions)f(are)i(enforced)f(after)h(an)m
-(y)g(startup)f(\014les)f(are)i(read.)275 4618 y(When)j(a)i(command)e
-(that)i(is)e(found)g(to)h(b)s(e)g(a)g(shell)e(script)h(is)g(executed)i
-(\(see)g(Section)f(3.8)h([Shell)150 4727 y(Scripts],)24
-b(page)f(31\),)j Fs(rbash)c Ft(turns)g(o\013)i(an)m(y)f(restrictions)f
-(in)g(the)h(shell)f(spa)m(wned)g(to)i(execute)g(the)g(script.)150
+b(urning)29 b(o\013)i(restricted)g(mo)s(de)f(with)g(`)p
+Fs(set)g(+r)p Ft(')g(or)g(`)p Fs(set)g(+o)g(restricted)p
+Ft('.)275 4483 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m
+(y)g(startup)f(\014les)g(are)h(read.)275 4618 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 4727 y(Scripts],)25
+b(page)e(31\),)j Fs(rbash)c Ft(turns)g(o\013)i(an)m(y)f(restrictions)h
+(in)f(the)g(shell)h(spa)m(wned)e(to)i(execute)g(the)g(script.)150
4986 y Fr(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)275 5230
-y Ft(Starting)20 b(Bash)h(with)e(the)i(`)p Fs(--posix)p
-Ft(')e(command-line)h(option)g(or)h(executing)g(`)p Fs(set)30
-b(-o)f(posix)p Ft(')20 b(while)150 5340 y(Bash)33 b(is)e(running)f
-(will)g(cause)j(Bash)f(to)i(conform)e(more)h(closely)f(to)h(the)g
-Fl(posix)e Ft(1003.2)k(standard)d(b)m(y)p eop
+y Ft(Starting)21 b(Bash)g(with)f(the)h(`)p Fs(--posix)p
+Ft(')e(command-line)j(option)f(or)g(executing)h(`)p Fs(set)30
+b(-o)f(posix)p Ft(')20 b(while)150 5340 y(Bash)33 b(is)f(running)f
+(will)i(cause)g(Bash)f(to)i(conform)e(more)h(closely)h(to)f(the)g
+Fl(posix)e Ft(1003.2)k(standard)d(b)m(y)p eop end
%%Page: 77 83
-77 82 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30
-b(F)-8 b(eatures)2484 b(77)150 299 y(c)m(hanging)37 b(the)g(b)s(eha)m
-(vior)f(to)h(matc)m(h)h(that)f(sp)s(eci\014ed)f(b)m(y)g
-Fl(posix)g Ft(in)g(areas)h(where)g(the)g(Bash)g(default)150
-408 y(di\013ers.)275 554 y(When)30 b(in)m(v)m(ok)m(ed)g(as)h
+TeXDict begin 77 82 bop 150 -116 a Ft(Chapter)30 b(6:)41
+b(Bash)30 b(F)-8 b(eatures)2484 b(77)150 299 y(c)m(hanging)38
+b(the)f(b)s(eha)m(vior)g(to)g(matc)m(h)h(that)f(sp)s(eci\014ed)g(b)m(y)
+f Fl(posix)g Ft(in)h(areas)g(where)g(the)g(Bash)g(default)150
+408 y(di\013ers.)275 554 y(When)30 b(in)m(v)m(ok)m(ed)h(as)g
Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g Fl(posix)e Ft(mo)s(de)h(after)h
-(reading)f(the)g(startup)g(\014les.)275 700 y(The)f(follo)m(wing)g
-(list)g(is)h(what's)g(c)m(hanged)h(when)e(`)p Fl(posix)h
-Ft(mo)s(de')h(is)e(in)g(e\013ect:)199 846 y(1.)61 b(When)28
-b(a)i(command)e(in)f(the)i(hash)f(table)h(no)f(longer)g(exists,)h(Bash)
-g(will)d(re-searc)m(h)k Fs($PATH)d Ft(to)i(\014nd)330
-955 y(the)i(new)e(lo)s(cation.)41 b(This)28 b(is)i(also)g(a)m(v)-5
-b(ailable)30 b(with)f(`)p Fs(shopt)g(-s)h(checkhash)p
-Ft('.)199 1095 y(2.)61 b(The)42 b(message)h(prin)m(ted)d(b)m(y)i(the)g
-(job)g(con)m(trol)h(co)s(de)f(and)f(builtins)e(when)i(a)h(job)g(exits)g
-(with)f(a)330 1205 y(non-zero)31 b(status)g(is)e(`Done\(status\)'.)199
-1345 y(3.)61 b(The)40 b(message)h(prin)m(ted)e(b)m(y)h(the)h(job)f(con)
-m(trol)g(co)s(de)h(and)f(builtins)c(when)k(a)g(job)g(is)g(stopp)s(ed)f
-(is)330 1455 y(`Stopp)s(ed\()p Fq(signame)5 b Ft(\)',)30
-b(where)g Fq(signame)35 b Ft(is,)30 b(for)g(example,)g
+(reading)g(the)f(startup)g(\014les.)275 700 y(The)f(follo)m(wing)j
+(list)f(is)g(what's)f(c)m(hanged)h(when)e(`)p Fl(posix)h
+Ft(mo)s(de')h(is)f(in)g(e\013ect:)199 846 y(1.)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 Fs($PATH)d Ft(to)i(\014nd)330
+955 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 Fs(shopt)f(-s)h(checkhash)p
+Ft('.)199 1095 y(2.)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 1205 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)199
+1345 y(3.)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 1455 y(`Stopp)s(ed\()p Fq(signame)5 b Ft(\)',)31
+b(where)f Fq(signame)36 b Ft(is,)31 b(for)f(example,)h
Fs(SIGTSTP)p Ft(.)199 1595 y(4.)61 b(Reserv)m(ed)31 b(w)m(ords)f(ma)m
(y)h(not)f(b)s(e)g(aliased.)199 1735 y(5.)61 b(The)39
-b Fl(posix)f Ft(1003.2)k Fs(PS1)d Ft(and)f Fs(PS2)h Ft(expansions)f(of)
-h(`)p Fs(!)p Ft(')h(to)g(the)f(history)f(n)m(um)m(b)s(er)g(and)h(`)p
-Fs(!!)p Ft(')g(to)330 1844 y(`)p Fs(!)p Ft(')c(are)h(enabled,)g(and)f
-(parameter)g(expansion)g(is)f(p)s(erformed)g(on)h(the)h(v)-5
-b(alues)34 b(of)i Fs(PS1)e Ft(and)h Fs(PS2)330 1954 y
-Ft(regardless)30 b(of)g(the)h(setting)f(of)h(the)f Fs(promptvars)e
+b Fl(posix)f Ft(1003.2)k Fs(PS1)d Ft(and)f Fs(PS2)h Ft(expansions)g(of)
+g(`)p Fs(!)p Ft(')h(to)g(the)f(history)g(n)m(um)m(b)s(er)f(and)h(`)p
+Fs(!!)p Ft(')g(to)330 1844 y(`)p Fs(!)p Ft(')c(are)h(enabled,)h(and)e
+(parameter)g(expansion)h(is)f(p)s(erformed)f(on)h(the)h(v)-5
+b(alues)35 b(of)h Fs(PS1)e Ft(and)h Fs(PS2)330 1954 y
+Ft(regardless)c(of)f(the)h(setting)g(of)g(the)f Fs(promptvars)e
Ft(option.)199 2094 y(6.)61 b(The)30 b Fl(posix)g Ft(1003.2)i(startup)e
-(\014les)g(are)g(executed)i(\()p Fs($ENV)p Ft(\))e(rather)g(than)g(the)
-g(normal)g(Bash)g(\014les.)199 2234 y(7.)61 b(Tilde)28
-b(expansion)h(is)f(only)h(p)s(erformed)g(on)h(assignmen)m(ts)f
-(preceding)g(a)h(command)g(name,)g(rather)330 2344 y(than)g(on)g(all)g
-(assignmen)m(t)g(statemen)m(ts)i(on)e(the)h(line.)199
-2484 y(8.)61 b(The)30 b(default)f(history)h(\014le)f(is)h(`)p
-Fs(~/.sh_history)p Ft(')d(\(this)j(is)f(the)h(default)g(v)-5
-b(alue)30 b(of)g Fs($HISTFILE)p Ft(\).)199 2624 y(9.)61
+(\014les)h(are)f(executed)i(\()p Fs($ENV)p Ft(\))e(rather)g(than)g(the)
+g(normal)h(Bash)f(\014les.)199 2234 y(7.)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 2344 y(than)g(on)g(all)i
+(assignmen)m(t)f(statemen)m(ts)h(on)e(the)h(line.)199
+2484 y(8.)61 b(The)30 b(default)g(history)h(\014le)f(is)h(`)p
+Fs(~/.sh_history)p Ft(')c(\(this)k(is)f(the)g(default)h(v)-5
+b(alue)31 b(of)f Fs($HISTFILE)p Ft(\).)199 2624 y(9.)61
b(The)23 b(output)f(of)i(`)p Fs(kill)29 b(-l)p Ft(')23
-b(prin)m(ts)e(all)h(the)i(signal)d(names)i(on)g(a)h(single)e(line,)h
-(separated)g(b)m(y)g(spaces,)330 2733 y(without)29 b(the)i(`)p
+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 2733 y(without)30 b(the)h(`)p
Fs(SIG)p Ft(')f(pre\014x.)154 2874 y(10.)61 b(The)30
-b Fs(kill)f Ft(builtin)e(do)s(es)j(not)h(accept)h(signal)d(names)h
-(with)f(a)i(`)p Fs(SIG)p Ft(')f(pre\014x.)154 3014 y(11.)61
-b(Non-in)m(teractiv)m(e)32 b(shells)c(exit)i(if)g Fq(\014lename)k
-Ft(in)29 b Fs(.)h Fq(\014lename)35 b Ft(is)30 b(not)g(found.)154
-3154 y(12.)61 b(Non-in)m(teractiv)m(e)39 b(shells)d(exit)i(if)f(a)h
-(syn)m(tax)g(error)g(in)e(an)i(arithmetic)f(expansion)g(results)f(in)h
-(an)330 3263 y(in)m(v)-5 b(alid)28 b(expression.)154
-3403 y(13.)61 b(Redirection)23 b(op)s(erators)h(do)g(not)g(p)s(erform)f
-(\014lename)g(expansion)g(on)h(the)g(w)m(ord)f(in)g(the)h(redirection)
-330 3513 y(unless)29 b(the)h(shell)f(is)g(in)m(teractiv)m(e.)154
-3653 y(14.)61 b(Redirection)29 b(op)s(erators)i(do)f(not)h(p)s(erform)e
-(w)m(ord)h(splitting)e(on)i(the)h(w)m(ord)f(in)f(the)h(redirection.)154
-3793 y(15.)61 b(F)-8 b(unction)34 b(names)h(m)m(ust)f(b)s(e)g(v)-5
-b(alid)33 b(shell)f Fs(name)p Ft(s.)52 b(That)34 b(is,)h(they)g(ma)m(y)
-g(not)g(con)m(tain)f(c)m(haracters)330 3903 y(other)f(than)g(letters,)g
-(digits,)g(and)f(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)d(a)i
-(digit.)47 b(Declaring)330 4012 y(a)31 b(function)e(with)g(an)h(in)m(v)
--5 b(alid)28 b(name)j(causes)f(a)h(fatal)g(syn)m(tax)g(error)f(in)f
-(non-in)m(teractiv)m(e)i(shells.)154 4153 y(16.)61 b
-Fl(posix)23 b Ft(1003.2)j(`sp)s(ecial')c(builtins)e(are)k(found)e(b)s
-(efore)h(shell)f(functions)g(during)f(command)i(lo)s(okup.)154
-4293 y(17.)61 b(If)33 b(a)h Fl(posix)f Ft(1003.2)j(sp)s(ecial)c
-(builtin)f(returns)h(an)i(error)f(status,)i(a)f(non-in)m(teractiv)m(e)g
-(shell)e(exits.)330 4402 y(The)43 b(fatal)i(errors)e(are)h(those)h
-(listed)d(in)h(the)h(POSIX.2)g(standard,)j(and)c(include)f(things)h
-(lik)m(e)330 4512 y(passing)24 b(incorrect)i(options,)g(redirection)e
-(errors,)i(v)-5 b(ariable)24 b(assignmen)m(t)h(errors)g(for)g
-(assignmen)m(ts)330 4621 y(preceding)k(the)i(command)f(name,)h(and)e
-(so)i(on.)154 4762 y(18.)61 b(If)33 b(the)h Fs(cd)f Ft(builtin)e
-(\014nds)h(a)i(directory)f(to)i(c)m(hange)g(to)f(using)f
-Fs($CDPATH)p Ft(,)g(the)h(v)-5 b(alue)33 b(it)g(assigns)g(to)330
-4871 y(the)e Fs(PWD)e Ft(v)-5 b(ariable)29 b(do)s(es)h(not)h(con)m
-(tain)g(an)m(y)f(sym)m(b)s(olic)f(links,)f(as)j(if)e(`)p
-Fs(cd)h(-P)p Ft(')g(had)g(b)s(een)g(executed.)154 5011
-y(19.)61 b(If)34 b Fs(CDPATH)f Ft(is)g(set,)j(the)f Fs(cd)f
-Ft(builtin)d(will)g(not)k(implicitly)c(app)s(end)h(the)j(curren)m(t)f
-(directory)g(to)h(it.)330 5121 y(This)28 b(means)h(that)h
-Fs(cd)f Ft(will)e(fail)h(if)h(no)g(v)-5 b(alid)28 b(directory)h(name)g
+b Fs(kill)f Ft(builtin)h(do)s(es)g(not)h(accept)h(signal)f(names)f
+(with)g(a)h(`)p Fs(SIG)p Ft(')f(pre\014x.)154 3014 y(11.)61
+b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g Fq(\014lename)k
+Ft(in)30 b Fs(.)g Fq(\014lename)36 b Ft(is)31 b(not)f(found.)154
+3154 y(12.)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 3263 y(in)m(v)-5 b(alid)31 b(expression.)154
+3403 y(13.)61 b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f
+(\014lename)h(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g(redirection)
+330 3513 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154
+3653 y(14.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e
+(w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g(redirection.)154
+3793 y(15.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5
+b(alid)35 b(shell)f Fs(name)p Ft(s.)52 b(That)34 b(is,)i(they)f(ma)m(y)
+g(not)g(con)m(tain)g(c)m(haracters)330 3903 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 4012 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 4153 y(16.)61 b
+Fl(posix)23 b Ft(1003.2)j(`sp)s(ecial')e(builtins)f(are)h(found)e(b)s
+(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.)154
+4293 y(17.)61 b(If)33 b(a)h Fl(posix)f Ft(1003.2)j(sp)s(ecial)e
+(builtin)g(returns)e(an)i(error)f(status,)i(a)f(non-in)m(teractiv)m(e)i
+(shell)e(exits.)330 4402 y(The)43 b(fatal)j(errors)d(are)h(those)h
+(listed)f(in)g(the)g(POSIX.2)g(standard,)j(and)c(include)h(things)g
+(lik)m(e)330 4512 y(passing)25 b(incorrect)i(options,)g(redirection)f
+(errors,)g(v)-5 b(ariable)26 b(assignmen)m(t)g(errors)f(for)g
+(assignmen)m(ts)330 4621 y(preceding)30 b(the)h(command)f(name,)h(and)e
+(so)i(on.)154 4762 y(18.)61 b(If)33 b(the)h Fs(cd)f Ft(builtin)h
+(\014nds)e(a)i(directory)g(to)h(c)m(hange)g(to)f(using)g
+Fs($CDPATH)p Ft(,)f(the)h(v)-5 b(alue)34 b(it)g(assigns)g(to)330
+4871 y(the)d Fs(PWD)e Ft(v)-5 b(ariable)31 b(do)s(es)f(not)h(con)m
+(tain)h(an)m(y)e(sym)m(b)s(olic)h(links,)f(as)h(if)f(`)p
+Fs(cd)g(-P)p Ft(')g(had)g(b)s(een)g(executed.)154 5011
+y(19.)61 b(If)34 b Fs(CDPATH)f Ft(is)h(set,)i(the)f Fs(cd)f
+Ft(builtin)g(will)g(not)h(implicitly)h(app)s(end)c(the)j(curren)m(t)f
+(directory)h(to)g(it.)330 5121 y(This)29 b(means)g(that)h
+Fs(cd)f Ft(will)h(fail)g(if)g(no)f(v)-5 b(alid)30 b(directory)g(name)f
(can)h(b)s(e)f(constructed)h(from)f(an)m(y)h(of)330 5230
-y(the)i(en)m(tries)f(in)f Fs($CDPATH)p Ft(,)f(ev)m(en)j(if)f(the)g(a)h
-(directory)f(with)f(the)h(same)h(name)f(as)h(the)g(name)f(giv)m(en)330
-5340 y(as)g(an)f(argumen)m(t)h(to)g Fs(cd)f Ft(exists)g(in)f(the)h
-(curren)m(t)g(directory)-8 b(.)p eop
+y(the)i(en)m(tries)g(in)f Fs($CDPATH)p Ft(,)e(ev)m(en)j(if)g(the)f(a)h
+(directory)g(with)f(the)g(same)h(name)f(as)h(the)g(name)f(giv)m(en)330
+5340 y(as)g(an)f(argumen)m(t)h(to)g Fs(cd)f Ft(exists)h(in)f(the)g
+(curren)m(t)g(directory)-8 b(.)p eop end
%%Page: 78 84
-78 83 bop 150 -116 a Ft(78)2572 b(Bash)31 b(Reference)g(Man)m(ual)154
-299 y(20.)61 b(A)31 b(non-in)m(teractiv)m(e)h(shell)d(exits)i(with)e
-(an)i(error)g(status)g(if)f(a)h(v)-5 b(ariable)30 b(assignmen)m(t)h
-(error)f(o)s(ccurs)330 408 y(when)38 b(no)h(command)g(name)g(follo)m
-(ws)g(the)g(assignmen)m(t)g(statemen)m(ts.)69 b(A)39
-b(v)-5 b(ariable)38 b(assignmen)m(t)330 518 y(error)30
-b(o)s(ccurs,)g(for)g(example,)h(when)e(trying)h(to)h(assign)e(a)i(v)-5
-b(alue)30 b(to)h(a)g(readonly)e(v)-5 b(ariable.)154 653
-y(21.)61 b(A)43 b(non-in)m(teractiv)m(e)g(shell)e(exits)i(with)f(an)g
-(error)h(status)g(if)f(the)h(iteration)f(v)-5 b(ariable)42
-b(in)g(a)h Fs(for)330 762 y Ft(statemen)m(t)32 b(or)f(the)f(selection)g
-(v)-5 b(ariable)30 b(in)f(a)h Fs(select)f Ft(statemen)m(t)j(is)e(a)g
-(readonly)g(v)-5 b(ariable.)154 897 y(22.)61 b(Pro)s(cess)30
-b(substitution)e(is)i(not)g(a)m(v)-5 b(ailable.)154 1031
-y(23.)61 b(Assignmen)m(t)31 b(statemen)m(ts)h(preceding)e
-Fl(posix)h Ft(1003.2)i(sp)s(ecial)d(builtins)d(p)s(ersist)j(in)f(the)j
-(shell)d(en-)330 1141 y(vironmen)m(t)h(after)g(the)h(builtin)c
-(completes.)154 1275 y(24.)61 b(Assignmen)m(t)34 b(statemen)m(ts)i
-(preceding)e(shell)e(function)h(calls)h(p)s(ersist)f(in)g(the)i(shell)d
-(en)m(vironmen)m(t)330 1385 y(after)f(the)f(function)g(returns,)f(as)i
-(if)e(a)i Fl(posix)e Ft(sp)s(ecial)g(builtin)e(command)j(had)g(b)s(een)
-g(executed.)154 1519 y(25.)61 b(The)38 b Fs(export)f
-Ft(and)g Fs(readonly)f Ft(builtin)f(commands)j(displa)m(y)f(their)g
-(output)h(in)f(the)i(format)g(re-)330 1629 y(quired)29
-b(b)m(y)h Fl(posix)f Ft(1003.2.)154 1763 y(26.)61 b(The)30
-b Fs(trap)f Ft(builtin)e(displa)m(ys)h(signal)i(names)g(without)f(the)i
-(leading)e Fs(SIG)p Ft(.)154 1898 y(27.)61 b(The)24 b
-Fs(trap)g Ft(builtin)d(do)s(esn't)k(c)m(hec)m(k)h(the)f(\014rst)f
-(argumen)m(t)h(for)g(a)g(p)s(ossible)d(signal)i(sp)s(eci\014cation)g
-(and)330 2007 y(rev)m(ert)32 b(the)f(signal)f(handling)f(to)j(the)g
-(original)d(disp)s(osition)f(if)i(it)h(is.)43 b(If)30
-b(users)h(w)m(an)m(t)h(to)g(reset)g(the)330 2117 y(handler)j(for)h(a)i
-(giv)m(en)e(signal)g(to)h(the)g(original)e(disp)s(osition,)h(they)h
-(should)d(use)j(`)p Fs(-)p Ft(')g(as)g(the)g(\014rst)330
-2227 y(argumen)m(t.)154 2361 y(28.)61 b(The)21 b Fs(.)h
-Ft(and)f Fs(source)f Ft(builtins)e(do)j(not)h(searc)m(h)h(the)f(curren)
-m(t)f(directory)g(for)h(the)g(\014lename)e(argumen)m(t)330
-2471 y(if)29 b(it)h(is)g(not)g(found)f(b)m(y)i(searc)m(hing)f
-Fs(PATH)p Ft(.)154 2605 y(29.)61 b(Subshells)18 b(spa)m(wned)j(to)h
-(execute)g(command)g(substitutions)d(inherit)g(the)i(v)-5
-b(alue)21 b(of)h(the)f(`)p Fs(-e)p Ft(')g(option)330
-2715 y(from)34 b(the)h(paren)m(t)g(shell.)53 b(When)34
-b(not)i(in)d Fl(posix)h Ft(mo)s(de,)i(Bash)f(clears)g(the)g(`)p
-Fs(-e)p Ft(')f(option)h(in)e(suc)m(h)330 2824 y(subshells.)154
-2959 y(30.)61 b(Alias)29 b(expansion)h(is)f(alw)m(a)m(ys)i(enabled,)e
-(ev)m(en)j(in)d(non-in)m(teractiv)m(e)i(shells.)154 3093
-y(31.)61 b(When)43 b(the)g Fs(alias)f Ft(builtin)d(displa)m(ys)j(alias)
-g(de\014nitions,)i(it)e(do)s(es)h(not)g(displa)m(y)f(them)h(with)f(a)
-330 3203 y(leading)29 b(`)p Fs(alias)g Ft(')i(unless)e(the)h(`)p
-Fs(-p)p Ft(')g(option)g(is)g(supplied.)154 3337 y(32.)61
-b(When)40 b(the)g Fs(set)f Ft(builtin)e(is)i(in)m(v)m(ok)m(ed)h
-(without)f(options,)j(it)e(do)s(es)g(not)g(displa)m(y)e(shell)g
+TeXDict begin 78 83 bop 150 -116 a Ft(78)2572 b(Bash)31
+b(Reference)g(Man)m(ual)154 299 y(20.)61 b(A)31 b(non-in)m(teractiv)m
+(e)j(shell)d(exits)h(with)e(an)h(error)g(status)g(if)g(a)g(v)-5
+b(ariable)32 b(assignmen)m(t)g(error)e(o)s(ccurs)330
+408 y(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
+518 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 653 y(21.)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 Fs(for)330 762 y Ft(statemen)m(t)32
+b(or)f(the)f(selection)i(v)-5 b(ariable)32 b(in)e(a)g
+Fs(select)f Ft(statemen)m(t)j(is)f(a)f(readonly)h(v)-5
+b(ariable.)154 897 y(22.)61 b(Pro)s(cess)30 b(substitution)g(is)h(not)f
+(a)m(v)-5 b(ailable.)154 1031 y(23.)61 b(Assignmen)m(t)32
+b(statemen)m(ts)g(preceding)f Fl(posix)g Ft(1003.2)i(sp)s(ecial)f
+(builtins)e(p)s(ersist)h(in)f(the)i(shell)f(en-)330 1141
+y(vironmen)m(t)g(after)f(the)h(builtin)f(completes.)154
+1275 y(24.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f
+(function)g(calls)i(p)s(ersist)e(in)g(the)h(shell)f(en)m(vironmen)m(t)
+330 1385 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h
+Fl(posix)e Ft(sp)s(ecial)i(builtin)f(command)g(had)g(b)s(een)g
+(executed.)154 1519 y(25.)61 b(The)38 b Fs(export)f Ft(and)g
+Fs(readonly)f Ft(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in)
+g(the)h(format)g(re-)330 1629 y(quired)30 b(b)m(y)g Fl(posix)f
+Ft(1003.2.)154 1763 y(26.)61 b(The)30 b Fs(trap)f Ft(builtin)h(displa)m
+(ys)g(signal)i(names)e(without)g(the)h(leading)g Fs(SIG)p
+Ft(.)154 1898 y(27.)61 b(The)24 b Fs(trap)g Ft(builtin)g(do)s(esn't)h
+(c)m(hec)m(k)h(the)f(\014rst)f(argumen)m(t)h(for)g(a)g(p)s(ossible)f
+(signal)i(sp)s(eci\014cation)g(and)330 2007 y(rev)m(ert)32
+b(the)f(signal)h(handling)f(to)h(the)g(original)g(disp)s(osition)f(if)g
+(it)h(is.)44 b(If)30 b(users)h(w)m(an)m(t)h(to)g(reset)g(the)330
+2117 y(handler)k(for)g(a)i(giv)m(en)f(signal)h(to)f(the)g(original)h
+(disp)s(osition,)h(they)e(should)e(use)i(`)p Fs(-)p Ft(')g(as)g(the)g
+(\014rst)330 2227 y(argumen)m(t.)154 2361 y(28.)61 b(The)21
+b Fs(.)h Ft(and)f Fs(source)f Ft(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
+2471 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g
+Fs(PATH)p Ft(.)154 2605 y(29.)61 b(Subshells)20 b(spa)m(wned)h(to)h
+(execute)g(command)g(substitutions)f(inherit)g(the)g(v)-5
+b(alue)22 b(of)g(the)f(`)p Fs(-e)p Ft(')g(option)330
+2715 y(from)34 b(the)h(paren)m(t)g(shell.)55 b(When)34
+b(not)i(in)e Fl(posix)g Ft(mo)s(de,)i(Bash)f(clears)h(the)f(`)p
+Fs(-e)p Ft(')f(option)i(in)e(suc)m(h)330 2824 y(subshells.)154
+2959 y(30.)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.)154 3093
+y(31.)61 b(When)43 b(the)g Fs(alias)f Ft(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 3203 y(leading)31 b(`)p Fs(alias)e Ft(')i(unless)f(the)g(`)p
+Fs(-p)p Ft(')g(option)h(is)g(supplied.)154 3337 y(32.)61
+b(When)40 b(the)g Fs(set)f Ft(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 3447 y(names)30 b(and)g(de\014nitions.)154
-3582 y(33.)61 b(When)36 b(the)g Fs(set)g Ft(builtin)d(is)i(in)m(v)m(ok)
-m(ed)i(without)e(options,)i(it)f(displa)m(ys)e(v)-5 b(ariable)35
-b(v)-5 b(alues)36 b(without)330 3691 y(quotes,)26 b(unless)c(they)j
-(con)m(tain)f(shell)e(metac)m(haracters,)28 b(ev)m(en)d(if)e(the)h
-(result)f(con)m(tains)i(nonprin)m(ting)330 3801 y(c)m(haracters.)154
-3935 y(34.)61 b(When)35 b(the)g Fs(cd)f Ft(builtin)e(is)i(in)m(v)m(ok)m
-(ed)i(in)d Fq(logical)38 b Ft(mo)s(de,)e(and)f(the)g(pathname)g
-(constructed)g(from)330 4045 y Fs($PWD)i Ft(and)h(the)h(directory)e
-(name)i(supplied)c(as)k(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g
-(an)f(existing)330 4154 y(directory)-8 b(,)31 b Fs(cd)e
-Ft(will)f(fail)h(instead)h(of)g(falling)e(bac)m(k)k(to)f
-Fq(ph)m(ysical)h Ft(mo)s(de.)275 4314 y(There)d(is)h(other)g
-Fl(posix)g Ft(1003.2)j(b)s(eha)m(vior)c(that)i(Bash)g(do)s(es)f(not)h
-(implemen)m(t.)39 b(Sp)s(eci\014cally:)199 4448 y(1.)61
-b(Assignmen)m(t)25 b(statemen)m(ts)j(a\013ect)f(the)f(execution)f(en)m
-(vironmen)m(t)h(of)g(all)e(builtins,)f(not)j(just)f(sp)s(ecial)330
-4558 y(ones.)199 4692 y(2.)61 b(When)20 b(a)h(subshell)d(is)i(created)h
-(to)h(execute)g(a)f(shell)d(script)i(with)f(execute)j(p)s(ermission,)e
-(but)g(without)330 4802 y(a)35 b(leading)f(`)p Fs(#!)p
-Ft(',)i(Bash)g(sets)f Fs($0)f Ft(to)i(the)f(full)e(pathname)i(of)g(the)
-g(script)f(as)h(found)f(b)m(y)h(searc)m(hing)330 4912
+3582 y(33.)61 b(When)36 b(the)g Fs(set)g Ft(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 3691 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 3801 y(c)m(haracters.)154
+3935 y(34.)61 b(When)35 b(the)g Fs(cd)f Ft(builtin)h(is)g(in)m(v)m(ok)m
+(ed)i(in)d Fq(logical)41 b Ft(mo)s(de,)36 b(and)f(the)g(pathname)g
+(constructed)g(from)330 4045 y Fs($PWD)i Ft(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 4154 y(directory)-8 b(,)32 b Fs(cd)d
+Ft(will)i(fail)g(instead)g(of)f(falling)h(bac)m(k)h(to)f
+Fq(ph)m(ysical)j Ft(mo)s(de.)275 4314 y(There)29 b(is)i(other)f
+Fl(posix)g Ft(1003.2)j(b)s(eha)m(vior)d(that)h(Bash)g(do)s(es)f(not)h
+(implemen)m(t.)41 b(Sp)s(eci\014cally:)199 4448 y(1.)61
+b(Assignmen)m(t)26 b(statemen)m(ts)i(a\013ect)f(the)f(execution)g(en)m
+(vironmen)m(t)h(of)f(all)g(builtins,)g(not)g(just)f(sp)s(ecial)330
+4558 y(ones.)199 4692 y(2.)61 b(When)20 b(a)h(subshell)f(is)h(created)g
+(to)h(execute)g(a)f(shell)f(script)h(with)f(execute)i(p)s(ermission,)g
+(but)e(without)330 4802 y(a)35 b(leading)h(`)p Fs(#!)p
+Ft(',)g(Bash)g(sets)f Fs($0)f Ft(to)i(the)f(full)g(pathname)g(of)g(the)
+g(script)g(as)g(found)f(b)m(y)h(searc)m(hing)330 4912
y Fs($PATH)p Ft(,)29 b(rather)h(than)h(the)f(command)g(as)h(t)m(yp)s
(ed)f(b)m(y)g(the)h(user.)199 5046 y(3.)61 b(When)28
-b(using)e(`)p Fs(.)p Ft(')i(to)g(source)g(a)h(shell)d(script)g(found)h
-(in)f Fs($PATH)p Ft(,)i(bash)f(c)m(hec)m(ks)i(execute)g(p)s(ermission)
-330 5156 y(bits)g(rather)i(than)f(read)g(p)s(ermission)d(bits,)j(just)g
-(as)g(if)f(it)h(w)m(ere)h(searc)m(hing)f(for)h(a)f(command.)p
-eop
+b(using)f(`)p Fs(.)p Ft(')h(to)g(source)g(a)h(shell)f(script)f(found)g
+(in)g Fs($PATH)p Ft(,)h(bash)f(c)m(hec)m(ks)i(execute)g(p)s(ermission)
+330 5156 y(bits)h(rather)h(than)f(read)g(p)s(ermission)f(bits,)i(just)f
+(as)g(if)g(it)h(w)m(ere)g(searc)m(hing)g(for)g(a)f(command.)p
+eop end
%%Page: 79 85
-79 84 bop 150 -116 a Ft(Chapter)30 b(7:)41 b(Job)30 b(Con)m(trol)2570
-b(79)150 299 y Fo(7)80 b(Job)54 b(Con)l(trol)275 544
-y Ft(This)33 b(c)m(hapter)j(discusses)e(what)h(job)g(con)m(trol)h(is,)g
-(ho)m(w)f(it)g(w)m(orks,)i(and)e(ho)m(w)g(Bash)h(allo)m(ws)e(y)m(ou)i
-(to)150 653 y(access)c(its)d(facilities.)150 919 y Fr(7.1)68
-b(Job)45 b(Con)l(trol)h(Basics)275 1167 y Ft(Job)30 b(con)m(trol)i
-(refers)f(to)h(the)g(abilit)m(y)d(to)j(selectiv)m(ely)g(stop)f(\(susp)s
-(end\))f(the)h(execution)h(of)f(pro)s(cesses)150 1277
-y(and)24 b(con)m(tin)m(ue)h(\(resume\))g(their)f(execution)h(at)g(a)h
-(later)e(p)s(oin)m(t.)38 b(A)25 b(user)f(t)m(ypically)g(emplo)m(ys)g
-(this)g(facilit)m(y)150 1386 y(via)30 b(an)g(in)m(teractiv)m(e)h(in)m
-(terface)g(supplied)d(join)m(tly)h(b)m(y)h(the)h(system's)f(terminal)f
-(driv)m(er)g(and)h(Bash.)275 1524 y(The)23 b(shell)g(asso)s(ciates)i(a)
-g Fq(job)h Ft(with)d(eac)m(h)j(pip)s(eline.)35 b(It)25
-b(k)m(eeps)f(a)h(table)g(of)f(curren)m(tly)g(executing)g(jobs,)150
-1634 y(whic)m(h)32 b(ma)m(y)j(b)s(e)e(listed)f(with)g(the)i
+TeXDict begin 79 84 bop 150 -116 a Ft(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2571 b(79)150 299 y Fo(7)80 b(Job)54
+b(Con)l(trol)275 544 y Ft(This)34 b(c)m(hapter)i(discusses)f(what)g
+(job)g(con)m(trol)i(is,)g(ho)m(w)e(it)h(w)m(orks,)h(and)e(ho)m(w)g
+(Bash)h(allo)m(ws)g(y)m(ou)g(to)150 653 y(access)c(its)e(facilities.)
+150 919 y Fr(7.1)68 b(Job)45 b(Con)l(trol)h(Basics)275
+1167 y Ft(Job)30 b(con)m(trol)j(refers)e(to)h(the)g(abilit)m(y)g(to)g
+(selectiv)m(ely)j(stop)c(\(susp)s(end\))f(the)h(execution)i(of)e(pro)s
+(cesses)150 1277 y(and)24 b(con)m(tin)m(ue)i(\(resume\))f(their)g
+(execution)h(at)f(a)h(later)f(p)s(oin)m(t.)39 b(A)25
+b(user)f(t)m(ypically)j(emplo)m(ys)e(this)g(facilit)m(y)150
+1386 y(via)31 b(an)f(in)m(teractiv)m(e)j(in)m(terface)f(supplied)e
+(join)m(tly)h(b)m(y)f(the)h(system's)f(terminal)h(driv)m(er)f(and)g
+(Bash.)275 1524 y(The)23 b(shell)i(asso)s(ciates)h(a)f
+Fq(job)h Ft(with)e(eac)m(h)i(pip)s(eline.)38 b(It)25
+b(k)m(eeps)f(a)h(table)h(of)e(curren)m(tly)h(executing)g(jobs,)150
+1634 y(whic)m(h)33 b(ma)m(y)i(b)s(e)e(listed)h(with)f(the)h
Fs(jobs)f Ft(command.)50 b(When)33 b(Bash)h(starts)g(a)g(job)g(async)m
-(hronously)-8 b(,)33 b(it)150 1744 y(prin)m(ts)c(a)i(line)d(that)j(lo)s
-(oks)f(lik)m(e:)390 1882 y Fs([1])47 b(25647)150 2020
-y Ft(indicating)31 b(that)j(this)e(job)h(is)f(job)h(n)m(um)m(b)s(er)f
-(1)i(and)f(that)g(the)h(pro)s(cess)f Fl(id)g Ft(of)g(the)h(last)f(pro)s
-(cess)g(in)f(the)150 2129 y(pip)s(eline)39 b(asso)s(ciated)k(with)e
-(this)g(job)h(is)g(25647.)78 b(All)41 b(of)i(the)g(pro)s(cesses)f(in)f
-(a)i(single)e(pip)s(eline)e(are)150 2239 y(mem)m(b)s(ers)30
+(hronously)-8 b(,)34 b(it)150 1744 y(prin)m(ts)c(a)h(line)f(that)h(lo)s
+(oks)g(lik)m(e:)390 1882 y Fs([1])47 b(25647)150 2020
+y Ft(indicating)34 b(that)g(this)f(job)g(is)g(job)g(n)m(um)m(b)s(er)f
+(1)i(and)f(that)g(the)h(pro)s(cess)f Fl(id)g Ft(of)g(the)h(last)g(pro)s
+(cess)f(in)g(the)150 2129 y(pip)s(eline)42 b(asso)s(ciated)i(with)e
+(this)g(job)g(is)h(25647.)78 b(All)43 b(of)g(the)g(pro)s(cesses)f(in)g
+(a)h(single)g(pip)s(eline)f(are)150 2239 y(mem)m(b)s(ers)30
b(of)g(the)h(same)f(job.)41 b(Bash)30 b(uses)g(the)h
-Fq(job)h Ft(abstraction)e(as)h(the)g(basis)e(for)h(job)g(con)m(trol.)
-275 2377 y(T)-8 b(o)23 b(facilitate)g(the)g(implemen)m(tation)f(of)i
-(the)f(user)f(in)m(terface)i(to)g(job)f(con)m(trol,)i(the)e(op)s
-(erating)g(system)150 2486 y(main)m(tains)i(the)h(notion)g(of)g(a)g
-(curren)m(t)g(terminal)e(pro)s(cess)i(group)g Fl(id)p
-Ft(.)39 b(Mem)m(b)s(ers)26 b(of)g(this)f(pro)s(cess)g(group)150
+Fq(job)h Ft(abstraction)f(as)g(the)g(basis)f(for)g(job)g(con)m(trol.)
+275 2377 y(T)-8 b(o)23 b(facilitate)j(the)d(implemen)m(tation)i(of)f
+(the)f(user)f(in)m(terface)j(to)f(job)f(con)m(trol,)j(the)d(op)s
+(erating)h(system)150 2486 y(main)m(tains)j(the)f(notion)h(of)f(a)g
+(curren)m(t)g(terminal)g(pro)s(cess)g(group)g Fl(id)p
+Ft(.)39 b(Mem)m(b)s(ers)26 b(of)g(this)g(pro)s(cess)f(group)150
2596 y(\(pro)s(cesses)h(whose)g(pro)s(cess)g(group)g
-Fl(id)g Ft(is)g(equal)g(to)h(the)f(curren)m(t)g(terminal)f(pro)s(cess)h
+Fl(id)g Ft(is)h(equal)g(to)g(the)f(curren)m(t)g(terminal)h(pro)s(cess)f
(group)f Fl(id)p Ft(\))i(receiv)m(e)150 2706 y(k)m(eyb)s
-(oard-generated)22 b(signals)e(suc)m(h)g(as)h Fs(SIGINT)p
-Ft(.)36 b(These)21 b(pro)s(cesses)g(are)g(said)f(to)h(b)s(e)g(in)e(the)
-i(foreground.)150 2815 y(Bac)m(kground)38 b(pro)s(cesses)f(are)h(those)
-g(whose)f(pro)s(cess)g(group)g Fl(id)h Ft(di\013ers)e(from)h(the)g
-(terminal's;)j(suc)m(h)150 2925 y(pro)s(cesses)24 b(are)g(imm)m(une)f
-(to)h(k)m(eyb)s(oard-generated)h(signals.)38 b(Only)22
-b(foreground)h(pro)s(cesses)h(are)g(allo)m(w)m(ed)150
-3034 y(to)35 b(read)f(from)f(or)h(write)f(to)i(the)f(terminal.)50
-b(Bac)m(kground)34 b(pro)s(cesses)g(whic)m(h)f(attempt)i(to)g(read)e
-(from)150 3144 y(\(write)d(to\))h(the)g(terminal)e(are)i(sen)m(t)g(a)f
-Fs(SIGTTIN)f Ft(\()p Fs(SIGTTOU)p Ft(\))g(signal)g(b)m(y)h(the)h
-(terminal)e(driv)m(er,)g(whic)m(h,)150 3254 y(unless)g(caugh)m(t,)i
-(susp)s(ends)d(the)j(pro)s(cess.)275 3392 y(If)j(the)i(op)s(erating)f
-(system)g(on)h(whic)m(h)e(Bash)h(is)g(running)d(supp)s(orts)i(job)h
-(con)m(trol,)i(Bash)f(con)m(tains)150 3501 y(facilities)26
-b(to)j(use)f(it.)39 b(T)m(yping)27 b(the)h Fq(susp)s(end)h
-Ft(c)m(haracter)h(\(t)m(ypically)d(`)p Fs(^Z)p Ft(',)i(Con)m(trol-Z\))f
-(while)e(a)i(pro)s(cess)150 3611 y(is)41 b(running)f(causes)j(that)g
-(pro)s(cess)f(to)h(b)s(e)f(stopp)s(ed)f(and)h(returns)f(con)m(trol)i
-(to)g(Bash.)77 b(T)m(yping)41 b(the)150 3720 y Fq(dela)m(y)m(ed)k(susp)
-s(end)g Ft(c)m(haracter)h(\(t)m(ypically)d(`)p Fs(^Y)p
-Ft(',)48 b(Con)m(trol-Y\))d(causes)f(the)h(pro)s(cess)e(to)i(b)s(e)f
-(stopp)s(ed)150 3830 y(when)26 b(it)h(attempts)i(to)f(read)f(input)f
-(from)g(the)i(terminal,)f(and)g(con)m(trol)g(to)h(b)s(e)f(returned)f
-(to)j(Bash.)39 b(The)150 3940 y(user)e(then)g(manipulates)f(the)i
-(state)h(of)f(this)e(job,)k(using)c(the)i Fs(bg)f Ft(command)g(to)h
-(con)m(tin)m(ue)g(it)f(in)g(the)150 4049 y(bac)m(kground,)h(the)f
-Fs(fg)g Ft(command)f(to)i(con)m(tin)m(ue)f(it)f(in)f(the)i(foreground,)
-h(or)f(the)g Fs(kill)f Ft(command)g(to)150 4159 y(kill)24
-b(it.)39 b(A)27 b(`)p Fs(^Z)p Ft(')g(tak)m(es)h(e\013ect)g(immediately)
--8 b(,)26 b(and)g(has)h(the)f(additional)f(side)g(e\013ect)k(of)d
-(causing)g(p)s(ending)150 4268 y(output)k(and)g(t)m(yp)s(eahead)h(to)g
+(oard-generated)22 b(signals)g(suc)m(h)e(as)h Fs(SIGINT)p
+Ft(.)36 b(These)21 b(pro)s(cesses)g(are)g(said)g(to)g(b)s(e)g(in)f(the)
+h(foreground.)150 2815 y(Bac)m(kground)38 b(pro)s(cesses)f(are)h(those)
+g(whose)f(pro)s(cess)g(group)g Fl(id)h Ft(di\013ers)f(from)g(the)g
+(terminal's;)42 b(suc)m(h)150 2925 y(pro)s(cesses)24
+b(are)g(imm)m(une)g(to)g(k)m(eyb)s(oard-generated)h(signals.)40
+b(Only)23 b(foreground)g(pro)s(cesses)h(are)g(allo)m(w)m(ed)150
+3034 y(to)35 b(read)f(from)f(or)h(write)g(to)h(the)f(terminal.)52
+b(Bac)m(kground)34 b(pro)s(cesses)g(whic)m(h)g(attempt)h(to)g(read)e
+(from)150 3144 y(\(write)e(to\))g(the)g(terminal)g(are)g(sen)m(t)g(a)f
+Fs(SIGTTIN)f Ft(\()p Fs(SIGTTOU)p Ft(\))g(signal)i(b)m(y)f(the)h
+(terminal)g(driv)m(er,)f(whic)m(h,)150 3254 y(unless)g(caugh)m(t,)h
+(susp)s(ends)d(the)j(pro)s(cess.)275 3392 y(If)j(the)i(op)s(erating)g
+(system)f(on)h(whic)m(h)f(Bash)g(is)h(running)d(supp)s(orts)h(job)h
+(con)m(trol,)j(Bash)e(con)m(tains)150 3501 y(facilities)30
+b(to)f(use)f(it.)40 b(T)m(yping)28 b(the)g Fq(susp)s(end)h
+Ft(c)m(haracter)h(\(t)m(ypically)g(`)p Fs(^Z)p Ft(',)f(Con)m(trol-Z\))g
+(while)f(a)g(pro)s(cess)150 3611 y(is)42 b(running)f(causes)i(that)g
+(pro)s(cess)f(to)h(b)s(e)f(stopp)s(ed)f(and)h(returns)f(con)m(trol)j
+(to)f(Bash.)77 b(T)m(yping)42 b(the)150 3720 y Fq(dela)m(y)m(ed)k(susp)
+s(end)f Ft(c)m(haracter)h(\(t)m(ypically)g(`)p Fs(^Y)p
+Ft(',)i(Con)m(trol-Y\))e(causes)e(the)h(pro)s(cess)e(to)i(b)s(e)f
+(stopp)s(ed)150 3830 y(when)26 b(it)i(attempts)h(to)f(read)f(input)g
+(from)f(the)i(terminal,)h(and)e(con)m(trol)h(to)g(b)s(e)f(returned)f
+(to)j(Bash.)39 b(The)150 3940 y(user)e(then)g(manipulates)h(the)g
+(state)h(of)f(this)f(job,)j(using)d(the)h Fs(bg)f Ft(command)g(to)h
+(con)m(tin)m(ue)h(it)f(in)g(the)150 4049 y(bac)m(kground,)g(the)f
+Fs(fg)g Ft(command)f(to)i(con)m(tin)m(ue)g(it)f(in)f(the)h(foreground,)
+h(or)f(the)g Fs(kill)f Ft(command)g(to)150 4159 y(kill)27
+b(it.)40 b(A)27 b(`)p Fs(^Z)p Ft(')g(tak)m(es)h(e\013ect)g(immediately)
+-8 b(,)29 b(and)d(has)h(the)f(additional)i(side)e(e\013ect)j(of)d
+(causing)h(p)s(ending)150 4268 y(output)j(and)g(t)m(yp)s(eahead)h(to)g
(b)s(e)e(discarded.)275 4406 y(There)j(are)g(a)h(n)m(um)m(b)s(er)e(of)i
-(w)m(a)m(ys)g(to)h(refer)e(to)h(a)g(job)f(in)f(the)i(shell.)45
+(w)m(a)m(ys)g(to)h(refer)e(to)h(a)g(job)f(in)g(the)h(shell.)47
b(The)32 b(c)m(haracter)i(`)p Fs(\045)p Ft(')f(in)m(tro)s(duces)150
4516 y(a)e(job)f(name.)275 4654 y(Job)h(n)m(um)m(b)s(er)f
Fs(n)h Ft(ma)m(y)h(b)s(e)f(referred)g(to)h(as)g(`)p Fs(\045n)p
-Ft('.)44 b(The)31 b(sym)m(b)s(ols)f(`)p Fs(\045\045)p
-Ft(')i(and)f(`)p Fs(\045+)p Ft(')g(refer)h(to)g(the)g(shell's)150
-4764 y(notion)42 b(of)g(the)h(curren)m(t)f(job,)j(whic)m(h)c(is)g(the)h
-(last)h(job)e(stopp)s(ed)h(while)e(it)i(w)m(as)g(in)f(the)i(foreground)
-150 4873 y(or)36 b(started)h(in)e(the)h(bac)m(kground.)58
-b(The)36 b(previous)f(job)g(ma)m(y)i(b)s(e)f(referenced)g(using)f(`)p
-Fs(\045-)p Ft('.)58 b(In)35 b(output)150 4983 y(p)s(ertaining)24
-b(to)j(jobs)e(\(e.g.,)k(the)d(output)g(of)g(the)g Fs(jobs)f
-Ft(command\),)j(the)e(curren)m(t)g(job)g(is)f(alw)m(a)m(ys)h(\015agged)
-150 5092 y(with)j(a)i(`)p Fs(+)p Ft(',)g(and)e(the)i(previous)e(job)h
-(with)f(a)i(`)p Fs(-)p Ft('.)275 5230 y(A)38 b(job)g(ma)m(y)h(also)f(b)
-s(e)g(referred)f(to)j(using)c(a)j(pre\014x)e(of)i(the)f(name)h(used)e
-(to)i(start)g(it,)h(or)f(using)e(a)150 5340 y(substring)28
-b(that)j(app)s(ears)f(in)f(its)h(command)g(line.)39 b(F)-8
-b(or)31 b(example,)f(`)p Fs(\045ce)p Ft(')g(refers)g(to)h(a)g(stopp)s
-(ed)e Fs(ce)h Ft(job.)p eop
+Ft('.)44 b(The)31 b(sym)m(b)s(ols)g(`)p Fs(\045\045)p
+Ft(')h(and)f(`)p Fs(\045+)p Ft(')g(refer)h(to)g(the)g(shell's)150
+4764 y(notion)43 b(of)f(the)h(curren)m(t)f(job,)j(whic)m(h)d(is)g(the)g
+(last)i(job)d(stopp)s(ed)h(while)g(it)h(w)m(as)f(in)g(the)h(foreground)
+150 4873 y(or)36 b(started)h(in)f(the)g(bac)m(kground.)58
+b(The)36 b(previous)g(job)f(ma)m(y)i(b)s(e)f(referenced)g(using)g(`)p
+Fs(\045-)p Ft('.)58 b(In)35 b(output)150 4983 y(p)s(ertaining)26
+b(to)h(jobs)e(\(e.g.,)k(the)d(output)g(of)g(the)g Fs(jobs)f
+Ft(command\),)j(the)e(curren)m(t)g(job)g(is)g(alw)m(a)m(ys)h(\015agged)
+150 5092 y(with)j(a)h(`)p Fs(+)p Ft(',)g(and)e(the)i(previous)f(job)g
+(with)g(a)h(`)p Fs(-)p Ft('.)275 5230 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 5340 y(substring)29
+b(that)i(app)s(ears)f(in)g(its)h(command)f(line.)41 b(F)-8
+b(or)31 b(example,)g(`)p Fs(\045ce)p Ft(')f(refers)g(to)h(a)g(stopp)s
+(ed)e Fs(ce)h Ft(job.)p eop end
%%Page: 80 86
-80 85 bop 150 -116 a Ft(80)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y(Using)26 b(`)p Fs(\045?ce)p Ft(',)h(on)f(the)h(other)g(hand,)g
-(refers)f(to)h(an)m(y)g(job)g(con)m(taining)f(the)h(string)e(`)p
-Fs(ce)p Ft(')i(in)e(its)h(command)150 408 y(line.)39
-b(If)30 b(the)h(pre\014x)e(or)h(substring)e(matc)m(hes)k(more)e(than)h
-(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275 544
-y(Simply)e(naming)i(a)h(job)g(can)g(b)s(e)f(used)h(to)g(bring)e(it)i
-(in)m(to)g(the)g(foreground:)41 b(`)p Fs(\0451)p Ft(')31
-b(is)f(a)i(synon)m(ym)e(for)150 654 y(`)p Fs(fg)g(\0451)p
-Ft(',)i(bringing)d(job)i(1)g(from)g(the)h(bac)m(kground)f(in)m(to)h
-(the)f(foreground.)44 b(Similarly)-8 b(,)28 b(`)p Fs(\0451)i(&)p
-Ft(')i(resumes)150 763 y(job)e(1)h(in)e(the)h(bac)m(kground,)h(equiv)-5
-b(alen)m(t)30 b(to)h(`)p Fs(bg)f(\0451)p Ft(')275 899
-y(The)g(shell)g(learns)g(immediately)g(whenev)m(er)h(a)h(job)f(c)m
-(hanges)h(state.)45 b(Normally)-8 b(,)31 b(Bash)g(w)m(aits)h(un)m(til)
-150 1009 y(it)24 b(is)g(ab)s(out)g(to)i(prin)m(t)d(a)i(prompt)f(b)s
-(efore)g(rep)s(orting)g(c)m(hanges)h(in)f(a)h(job's)f(status)h(so)g(as)
+TeXDict begin 80 85 bop 150 -116 a Ft(80)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y(Using)c(`)p Fs(\045?ce)p
+Ft(',)g(on)f(the)h(other)g(hand,)g(refers)f(to)h(an)m(y)g(job)g(con)m
+(taining)h(the)f(string)f(`)p Fs(ce)p Ft(')h(in)f(its)h(command)150
+408 y(line.)41 b(If)30 b(the)h(pre\014x)e(or)h(substring)f(matc)m(hes)j
+(more)e(than)h(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275
+544 y(Simply)g(naming)h(a)g(job)g(can)g(b)s(e)f(used)h(to)g(bring)f(it)
+i(in)m(to)g(the)f(foreground:)41 b(`)p Fs(\0451)p Ft(')31
+b(is)g(a)h(synon)m(ym)e(for)150 654 y(`)p Fs(fg)g(\0451)p
+Ft(',)i(bringing)f(job)g(1)g(from)g(the)h(bac)m(kground)f(in)m(to)i
+(the)e(foreground.)44 b(Similarly)-8 b(,)32 b(`)p Fs(\0451)e(&)p
+Ft(')i(resumes)150 763 y(job)e(1)h(in)f(the)g(bac)m(kground,)h(equiv)-5
+b(alen)m(t)32 b(to)f(`)p Fs(bg)f(\0451)p Ft(')275 899
+y(The)g(shell)i(learns)f(immediately)i(whenev)m(er)e(a)h(job)f(c)m
+(hanges)h(state.)45 b(Normally)-8 b(,)33 b(Bash)e(w)m(aits)i(un)m(til)
+150 1009 y(it)25 b(is)g(ab)s(out)f(to)i(prin)m(t)e(a)h(prompt)f(b)s
+(efore)g(rep)s(orting)h(c)m(hanges)g(in)g(a)g(job's)f(status)h(so)g(as)
g(to)g(not)g(in)m(terrupt)150 1119 y(an)m(y)g(other)g(output.)39
-b(If)24 b(the)i(`)p Fs(-b)p Ft(')e(option)h(to)g(the)g
-Fs(set)f Ft(builtin)e(is)i(enabled,)h(Bash)g(rep)s(orts)f(suc)m(h)h(c)m
-(hanges)150 1228 y(immediately)j(\(see)i(Section)f(4.3)h([The)f(Set)h
-(Builtin],)d(page)j(50\).)42 b(An)m(y)29 b(trap)g(on)g
-Fs(SIGCHLD)f Ft(is)g(executed)150 1338 y(for)i(eac)m(h)i(c)m(hild)c
-(pro)s(cess)i(that)h(exits.)275 1474 y(If)k(an)h(attempt)h(to)g(exit)f
-(Bash)h(is)e(made)h(while)e(jobs)i(are)g(stopp)s(ed,)h(the)f(shell)f
-(prin)m(ts)f(a)j(message)150 1583 y(w)m(arning)25 b(that)i(there)f(are)
+b(If)24 b(the)i(`)p Fs(-b)p Ft(')e(option)i(to)f(the)g
+Fs(set)f Ft(builtin)h(is)g(enabled,)h(Bash)f(rep)s(orts)f(suc)m(h)h(c)m
+(hanges)150 1228 y(immediately)31 b(\(see)f(Section)g(4.3)g([The)f(Set)
+h(Builtin],)g(page)g(50\).)42 b(An)m(y)29 b(trap)g(on)g
+Fs(SIGCHLD)f Ft(is)h(executed)150 1338 y(for)h(eac)m(h)i(c)m(hild)e
+(pro)s(cess)g(that)h(exits.)275 1474 y(If)k(an)h(attempt)h(to)g(exit)g
+(Bash)g(is)f(made)g(while)g(jobs)g(are)g(stopp)s(ed,)h(the)f(shell)h
+(prin)m(ts)e(a)i(message)150 1583 y(w)m(arning)26 b(that)h(there)f(are)
g(stopp)s(ed)g(jobs.)38 b(The)26 b Fs(jobs)f Ft(command)h(ma)m(y)h
-(then)e(b)s(e)h(used)f(to)i(insp)s(ect)e(their)150 1693
-y(status.)57 b(If)35 b(a)h(second)g(attempt)g(to)h(exit)e(is)g(made)h
-(without)e(an)i(in)m(terv)m(ening)f(command,)h(Bash)g(do)s(es)150
-1802 y(not)31 b(prin)m(t)e(another)h(w)m(arning,)g(and)f(the)i(stopp)s
+(then)e(b)s(e)h(used)f(to)i(insp)s(ect)f(their)150 1693
+y(status.)57 b(If)35 b(a)h(second)g(attempt)g(to)h(exit)f(is)g(made)g
+(without)f(an)h(in)m(terv)m(ening)h(command,)f(Bash)g(do)s(es)150
+1802 y(not)31 b(prin)m(t)f(another)g(w)m(arning,)h(and)e(the)i(stopp)s
(ed)e(jobs)h(are)h(terminated.)150 2063 y Fr(7.2)68 b(Job)45
b(Con)l(trol)h(Builtins)150 2308 y Fs(bg)870 2443 y(bg)h([)p
Fj(jobspec)11 b Fs(])630 2578 y Ft(Resume)28 b(the)g(susp)s(ended)d
-(job)j Fq(jobsp)s(ec)k Ft(in)27 b(the)h(bac)m(kground,)h(as)f(if)f(it)g
-(had)g(b)s(een)g(started)630 2688 y(with)k(`)p Fs(&)p
-Ft('.)45 b(If)31 b Fq(jobsp)s(ec)37 b Ft(is)31 b(not)h(supplied,)d(the)
-j(curren)m(t)g(job)f(is)g(used.)45 b(The)31 b(return)g(status)630
-2797 y(is)h(zero)h(unless)e(it)h(is)g(run)f(when)h(job)g(con)m(trol)h
-(is)f(not)h(enabled,)g(or,)g(when)f(run)f(with)g(job)630
-2907 y(con)m(trol)37 b(enabled,)h(if)e Fq(jobsp)s(ec)42
+(job)j Fq(jobsp)s(ec)k Ft(in)c(the)g(bac)m(kground,)h(as)f(if)g(it)g
+(had)f(b)s(een)g(started)630 2688 y(with)32 b(`)p Fs(&)p
+Ft('.)45 b(If)31 b Fq(jobsp)s(ec)37 b Ft(is)32 b(not)g(supplied,)f(the)
+h(curren)m(t)g(job)f(is)h(used.)45 b(The)31 b(return)g(status)630
+2797 y(is)i(zero)g(unless)f(it)h(is)g(run)e(when)h(job)g(con)m(trol)i
+(is)f(not)g(enabled,)h(or,)f(when)f(run)f(with)h(job)630
+2907 y(con)m(trol)38 b(enabled,)h(if)e Fq(jobsp)s(ec)42
b Ft(w)m(as)37 b(not)h(found)d(or)i Fq(jobsp)s(ec)42
-b Ft(sp)s(eci\014es)36 b(a)h(job)g(that)h(w)m(as)630
-3017 y(started)31 b(without)e(job)h(con)m(trol.)150 3177
+b Ft(sp)s(eci\014es)37 b(a)g(job)g(that)h(w)m(as)630
+3017 y(started)31 b(without)f(job)g(con)m(trol.)150 3177
y Fs(fg)870 3312 y(fg)47 b([)p Fj(jobspec)11 b Fs(])630
3448 y Ft(Resume)43 b(the)g(job)g Fq(jobsp)s(ec)48 b
-Ft(in)42 b(the)h(foreground)g(and)f(mak)m(e)j(it)d(the)i(curren)m(t)f
-(job.)78 b(If)630 3557 y Fq(jobsp)s(ec)41 b Ft(is)36
-b(not)g(supplied,)f(the)h(curren)m(t)h(job)f(is)f(used.)58
-b(The)36 b(return)f(status)h(is)g(that)h(of)630 3667
-y(the)d(command)g(placed)g(in)m(to)g(the)g(foreground,)g(or)g(non-zero)
-h(if)e(run)g(when)g(job)g(con)m(trol)630 3776 y(is)h(disabled)f(or,)k
-(when)d(run)g(with)g(job)h(con)m(trol)g(enabled,)h Fq(jobsp)s(ec)k
-Ft(do)s(es)35 b(not)h(sp)s(ecify)e(a)630 3886 y(v)-5
-b(alid)29 b(job)h(or)g Fq(jobsp)s(ec)35 b Ft(sp)s(eci\014es)29
-b(a)i(job)f(that)h(w)m(as)g(started)g(without)e(job)h(con)m(trol.)150
-4047 y Fs(jobs)870 4182 y(jobs)47 b([-lnprs])e([)p Fj(jobspec)11
-b Fs(])870 4291 y(jobs)47 b(-x)g Fj(command)56 b Fs([)p
-Fj(arguments)11 b Fs(])630 4427 y Ft(The)30 b(\014rst)f(form)h(lists)f
-(the)i(activ)m(e)g(jobs.)41 b(The)30 b(options)f(ha)m(v)m(e)j(the)e
-(follo)m(wing)f(meanings:)630 4587 y Fs(-l)384 b Ft(List)30
-b(pro)s(cess)g Fl(id)p Ft(s)g(in)f(addition)g(to)i(the)f(normal)g
-(information.)630 4748 y Fs(-n)384 b Ft(Displa)m(y)24
-b(information)f(only)i(ab)s(out)f(jobs)h(that)g(ha)m(v)m(e)i(c)m
-(hanged)e(status)h(since)1110 4858 y(the)31 b(user)e(w)m(as)i(last)f
-(noti\014ed)f(of)i(their)e(status.)630 5018 y Fs(-p)384
-b Ft(List)30 b(only)f(the)i(pro)s(cess)f Fl(id)g Ft(of)h(the)f(job's)g
-(pro)s(cess)g(group)g(leader.)630 5179 y Fs(-r)384 b
-Ft(Restrict)30 b(output)g(to)i(running)27 b(jobs.)630
-5340 y Fs(-s)384 b Ft(Restrict)30 b(output)g(to)i(stopp)s(ed)d(jobs.)p
-eop
+Ft(in)43 b(the)g(foreground)g(and)f(mak)m(e)j(it)e(the)h(curren)m(t)f
+(job.)78 b(If)630 3557 y Fq(jobsp)s(ec)41 b Ft(is)c(not)f(supplied,)h
+(the)f(curren)m(t)h(job)f(is)g(used.)58 b(The)36 b(return)f(status)h
+(is)h(that)g(of)630 3667 y(the)d(command)g(placed)h(in)m(to)g(the)f
+(foreground,)g(or)g(non-zero)h(if)f(run)f(when)g(job)g(con)m(trol)630
+3776 y(is)i(disabled)g(or,)i(when)d(run)g(with)h(job)g(con)m(trol)h
+(enabled,)h Fq(jobsp)s(ec)j Ft(do)s(es)35 b(not)h(sp)s(ecify)f(a)630
+3886 y(v)-5 b(alid)31 b(job)f(or)g Fq(jobsp)s(ec)35 b
+Ft(sp)s(eci\014es)30 b(a)h(job)f(that)h(w)m(as)g(started)g(without)f
+(job)g(con)m(trol.)150 4047 y Fs(jobs)870 4182 y(jobs)47
+b([-lnprs])e([)p Fj(jobspec)11 b Fs(])870 4291 y(jobs)47
+b(-x)g Fj(command)56 b Fs([)p Fj(arguments)11 b Fs(])630
+4427 y Ft(The)30 b(\014rst)f(form)h(lists)h(the)g(activ)m(e)h(jobs.)41
+b(The)30 b(options)g(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630
+4587 y Fs(-l)384 b Ft(List)31 b(pro)s(cess)f Fl(id)p
+Ft(s)g(in)g(addition)h(to)g(the)f(normal)h(information.)630
+4748 y Fs(-n)384 b Ft(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
+4858 y(the)31 b(user)e(w)m(as)i(last)g(noti\014ed)f(of)h(their)f
+(status.)630 5018 y Fs(-p)384 b Ft(List)31 b(only)f(the)h(pro)s(cess)f
+Fl(id)g Ft(of)h(the)f(job's)g(pro)s(cess)g(group)g(leader.)630
+5179 y Fs(-r)384 b Ft(Restrict)31 b(output)f(to)i(running)c(jobs.)630
+5340 y Fs(-s)384 b Ft(Restrict)31 b(output)f(to)i(stopp)s(ed)d(jobs.)p
+eop end
%%Page: 81 87
-81 86 bop 150 -116 a Ft(Chapter)30 b(7:)41 b(Job)30 b(Con)m(trol)2570
-b(81)630 299 y(If)23 b Fq(jobsp)s(ec)28 b Ft(is)23 b(giv)m(en,)i
-(output)e(is)g(restricted)g(to)h(information)e(ab)s(out)h(that)h(job.)
-39 b(If)23 b Fq(jobsp)s(ec)630 408 y Ft(is)29 b(not)i(supplied,)c(the)k
-(status)g(of)f(all)f(jobs)h(is)g(listed.)630 552 y(If)h(the)g(`)p
-Fs(-x)p Ft(')g(option)g(is)f(supplied,)f Fs(jobs)h Ft(replaces)h(an)m
-(y)g Fq(jobsp)s(ec)37 b Ft(found)29 b(in)h Fq(command)35
-b Ft(or)630 662 y Fq(argumen)m(ts)41 b Ft(with)36 b(the)i(corresp)s
-(onding)d(pro)s(cess)i(group)f Fl(id)p Ft(,)k(and)c(executes)j
-Fq(command)p Ft(,)630 771 y(passing)29 b(it)h Fq(argumen)m(t)r
-Ft(s,)h(returning)e(its)g(exit)i(status.)150 949 y Fs(kill)870
-1093 y(kill)47 b([-s)g Fj(sigspec)11 b Fs(])45 b([-n)i
-Fj(signum)11 b Fs(])45 b([-)p Fj(sigspec)11 b Fs(])44
-b Fj(jobspec)57 b Fs(or)47 b Fj(pid)870 1202 y Fs(kill)g(-l)g([)p
-Fj(exit_status)11 b Fs(])630 1346 y Ft(Send)22 b(a)i(signal)e(sp)s
-(eci\014ed)g(b)m(y)h Fq(sigsp)s(ec)28 b Ft(or)c Fq(sign)m(um)e
-Ft(to)i(the)g(pro)s(cess)f(named)g(b)m(y)g(job)g(sp)s(eci\014-)630
-1456 y(cation)j Fq(jobsp)s(ec)k Ft(or)25 b(pro)s(cess)g
-Fl(id)h Fq(pid)p Ft(.)37 b Fq(sigsp)s(ec)30 b Ft(is)24
-b(either)h(a)h(case-insensitiv)m(e)f(signal)f(name)630
-1565 y(suc)m(h)30 b(as)h Fs(SIGINT)d Ft(\(with)i(or)g(without)g(the)g
-Fs(SIG)g Ft(pre\014x\))f(or)i(a)f(signal)f(n)m(um)m(b)s(er;)h
-Fq(sign)m(um)f Ft(is)630 1675 y(a)j(signal)e(n)m(um)m(b)s(er.)43
-b(If)31 b Fq(sigsp)s(ec)36 b Ft(and)31 b Fq(sign)m(um)f
-Ft(are)i(not)f(presen)m(t,)h Fs(SIGTERM)e Ft(is)g(used.)43
-b(The)630 1785 y(`)p Fs(-l)p Ft(')34 b(option)f(lists)g(the)h(signal)f
-(names.)51 b(If)33 b(an)m(y)i(argumen)m(ts)f(are)g(supplied)d(when)i(`)
-p Fs(-l)p Ft(')h(is)630 1894 y(giv)m(en,)d(the)h(names)e(of)i(the)f
-(signals)e(corresp)s(onding)g(to)j(the)f(argumen)m(ts)g(are)h(listed,)e
-(and)630 2004 y(the)e(return)f(status)h(is)f(zero.)41
-b Fq(exit)p 1797 2004 28 4 v 40 w(status)32 b Ft(is)27
-b(a)h(n)m(um)m(b)s(er)f(sp)s(ecifying)e(a)k(signal)d(n)m(um)m(b)s(er)h
-(or)630 2113 y(the)35 b(exit)g(status)g(of)g(a)g(pro)s(cess)g
-(terminated)f(b)m(y)h(a)g(signal.)53 b(The)34 b(return)g(status)h(is)f
-(zero)630 2223 y(if)c(at)i(least)f(one)h(signal)d(w)m(as)j
-(successfully)d(sen)m(t,)j(or)f(non-zero)h(if)e(an)h(error)f(o)s(ccurs)
-h(or)g(an)630 2333 y(in)m(v)-5 b(alid)28 b(option)i(is)f(encoun)m
-(tered.)150 2510 y Fs(wait)870 2654 y(wait)47 b([)p Fj(jobspec)56
-b Fs(or)47 b Fj(pid)11 b Fs(])630 2798 y Ft(W)-8 b(ait)44
-b(un)m(til)d(the)i(c)m(hild)f(pro)s(cess)g(sp)s(eci\014ed)g(b)m(y)h
-(pro)s(cess)f Fl(id)i Fq(pid)g Ft(or)f(job)g(sp)s(eci\014cation)630
-2907 y Fq(jobsp)s(ec)d Ft(exits)34 b(and)g(return)g(the)g(exit)h
-(status)g(of)g(the)g(last)f(command)g(w)m(aited)h(for.)53
-b(If)35 b(a)630 3017 y(job)g(sp)s(ec)f(is)g(giv)m(en,)i(all)e(pro)s
-(cesses)h(in)e(the)i(job)g(are)g(w)m(aited)g(for.)54
-b(If)35 b(no)f(argumen)m(ts)i(are)630 3127 y(giv)m(en,)c(all)e(curren)m
-(tly)g(activ)m(e)i(c)m(hild)e(pro)s(cesses)h(are)g(w)m(aited)g(for,)h
-(and)e(the)i(return)e(status)630 3236 y(is)g(zero.)44
-b(If)30 b(neither)g Fq(jobsp)s(ec)36 b Ft(nor)31 b Fq(pid)h
-Ft(sp)s(eci\014es)e(an)h(activ)m(e)h(c)m(hild)e(pro)s(cess)g(of)h(the)g
-(shell,)630 3346 y(the)g(return)e(status)i(is)e(127.)150
+TeXDict begin 81 86 bop 150 -116 a Ft(Chapter)30 b(7:)41
+b(Job)30 b(Con)m(trol)2571 b(81)630 299 y(If)23 b Fq(jobsp)s(ec)28
+b Ft(is)c(giv)m(en,)i(output)d(is)h(restricted)g(to)g(information)g(ab)
+s(out)f(that)h(job.)39 b(If)23 b Fq(jobsp)s(ec)630 408
+y Ft(is)30 b(not)h(supplied,)e(the)i(status)g(of)f(all)h(jobs)f(is)h
+(listed.)630 552 y(If)g(the)g(`)p Fs(-x)p Ft(')g(option)h(is)f
+(supplied,)g Fs(jobs)f Ft(replaces)i(an)m(y)f Fq(jobsp)s(ec)37
+b Ft(found)29 b(in)i Fq(command)k Ft(or)630 662 y Fq(argumen)m(ts)41
+b Ft(with)c(the)h(corresp)s(onding)e(pro)s(cess)h(group)f
+Fl(id)p Ft(,)k(and)c(executes)j Fq(command)p Ft(,)630
+771 y(passing)30 b(it)h Fq(argumen)m(t)r Ft(s,)g(returning)f(its)g
+(exit)i(status.)150 949 y Fs(kill)870 1093 y(kill)47
+b([-s)g Fj(sigspec)11 b Fs(])45 b([-n)i Fj(signum)11
+b Fs(])45 b([-)p Fj(sigspec)11 b Fs(])44 b Fj(jobspec)57
+b Fs(or)47 b Fj(pid)870 1202 y Fs(kill)g(-l)g([)p Fj(exit_status)11
+b Fs(])630 1346 y Ft(Send)22 b(a)i(signal)g(sp)s(eci\014ed)f(b)m(y)g
+Fq(sigsp)s(ec)29 b Ft(or)24 b Fq(sign)m(um)f Ft(to)h(the)g(pro)s(cess)f
+(named)g(b)m(y)g(job)g(sp)s(eci\014-)630 1456 y(cation)k
+Fq(jobsp)s(ec)j Ft(or)25 b(pro)s(cess)g Fl(id)h Fq(pid)p
+Ft(.)38 b Fq(sigsp)s(ec)31 b Ft(is)25 b(either)h(a)g(case-insensitiv)m
+(e)i(signal)e(name)630 1565 y(suc)m(h)k(as)h Fs(SIGINT)d
+Ft(\(with)j(or)f(without)h(the)f Fs(SIG)g Ft(pre\014x\))f(or)i(a)f
+(signal)h(n)m(um)m(b)s(er;)f Fq(sign)m(um)g Ft(is)630
+1675 y(a)i(signal)g(n)m(um)m(b)s(er.)43 b(If)31 b Fq(sigsp)s(ec)37
+b Ft(and)31 b Fq(sign)m(um)g Ft(are)h(not)f(presen)m(t,)h
+Fs(SIGTERM)e Ft(is)h(used.)43 b(The)630 1785 y(`)p Fs(-l)p
+Ft(')34 b(option)g(lists)h(the)f(signal)h(names.)51 b(If)33
+b(an)m(y)i(argumen)m(ts)f(are)g(supplied)f(when)g(`)p
+Fs(-l)p Ft(')h(is)630 1894 y(giv)m(en,)e(the)g(names)e(of)i(the)f
+(signals)g(corresp)s(onding)f(to)i(the)f(argumen)m(ts)g(are)h(listed,)g
+(and)630 2004 y(the)c(return)f(status)h(is)g(zero.)41
+b Fq(exit)p 1796 2004 28 4 v 41 w(status)32 b Ft(is)c(a)g(n)m(um)m(b)s
+(er)f(sp)s(ecifying)g(a)i(signal)f(n)m(um)m(b)s(er)f(or)630
+2113 y(the)35 b(exit)h(status)f(of)g(a)g(pro)s(cess)g(terminated)g(b)m
+(y)g(a)g(signal.)55 b(The)34 b(return)g(status)h(is)g(zero)630
+2223 y(if)c(at)h(least)g(one)g(signal)f(w)m(as)h(successfully)f(sen)m
+(t,)h(or)f(non-zero)h(if)f(an)g(error)f(o)s(ccurs)h(or)g(an)630
+2333 y(in)m(v)-5 b(alid)31 b(option)g(is)f(encoun)m(tered.)150
+2510 y Fs(wait)870 2654 y(wait)47 b([)p Fj(jobspec)56
+b Fs(or)47 b Fj(pid)11 b Fs(])630 2798 y Ft(W)-8 b(ait)45
+b(un)m(til)e(the)g(c)m(hild)h(pro)s(cess)e(sp)s(eci\014ed)h(b)m(y)g
+(pro)s(cess)f Fl(id)i Fq(pid)h Ft(or)e(job)g(sp)s(eci\014cation)630
+2907 y Fq(jobsp)s(ec)d Ft(exits)35 b(and)f(return)g(the)g(exit)i
+(status)f(of)g(the)g(last)g(command)f(w)m(aited)i(for.)53
+b(If)35 b(a)630 3017 y(job)g(sp)s(ec)f(is)h(giv)m(en,)i(all)f(pro)s
+(cesses)f(in)f(the)h(job)g(are)g(w)m(aited)h(for.)54
+b(If)35 b(no)f(argumen)m(ts)i(are)630 3127 y(giv)m(en,)d(all)f(curren)m
+(tly)f(activ)m(e)i(c)m(hild)f(pro)s(cesses)f(are)g(w)m(aited)h(for,)g
+(and)e(the)i(return)e(status)630 3236 y(is)h(zero.)44
+b(If)30 b(neither)h Fq(jobsp)s(ec)36 b Ft(nor)31 b Fq(pid)i
+Ft(sp)s(eci\014es)e(an)g(activ)m(e)i(c)m(hild)f(pro)s(cess)e(of)h(the)g
+(shell,)630 3346 y(the)g(return)e(status)i(is)f(127.)150
3524 y Fs(disown)870 3667 y(disown)46 b([-ar])g([-h])h([)p
-Fj(jobspec)56 b Fs(...)o(])630 3811 y Ft(Without)31 b(options,)g(eac)m
-(h)i Fq(jobsp)s(ec)j Ft(is)31 b(remo)m(v)m(ed)h(from)f(the)h(table)f
-(of)h(activ)m(e)g(jobs.)44 b(If)31 b(the)630 3921 y(`)p
-Fs(-h)p Ft(')36 b(option)g(is)g(giv)m(en,)i(the)f(job)f(is)g(not)g
-(remo)m(v)m(ed)i(from)e(the)h(table,)h(but)e(is)f(mark)m(ed)i(so)630
-4030 y(that)d Fs(SIGHUP)d Ft(is)i(not)g(sen)m(t)h(to)g(the)f(job)g(if)f
-(the)i(shell)d(receiv)m(es)j(a)g Fs(SIGHUP)p Ft(.)47
+Fj(jobspec)56 b Fs(...)o(])630 3811 y Ft(Without)32 b(options,)g(eac)m
+(h)h Fq(jobsp)s(ec)j Ft(is)c(remo)m(v)m(ed)g(from)f(the)h(table)g(of)g
+(activ)m(e)h(jobs.)44 b(If)31 b(the)630 3921 y(`)p Fs(-h)p
+Ft(')36 b(option)h(is)g(giv)m(en,)i(the)e(job)f(is)h(not)f(remo)m(v)m
+(ed)i(from)e(the)h(table,)i(but)d(is)g(mark)m(ed)h(so)630
+4030 y(that)d Fs(SIGHUP)d Ft(is)j(not)f(sen)m(t)h(to)g(the)f(job)g(if)g
+(the)h(shell)f(receiv)m(es)i(a)f Fs(SIGHUP)p Ft(.)47
b(If)33 b Fq(jobsp)s(ec)38 b Ft(is)630 4140 y(not)32
-b(presen)m(t,)f(and)g(neither)g(the)g(`)p Fs(-a)p Ft(')g(nor)g(`)p
-Fs(-r)p Ft(')g(option)g(is)g(supplied,)d(the)k(curren)m(t)f(job)g(is)
+b(presen)m(t,)f(and)g(neither)h(the)f(`)p Fs(-a)p Ft(')g(nor)g(`)p
+Fs(-r)p Ft(')g(option)h(is)g(supplied,)e(the)i(curren)m(t)f(job)g(is)
630 4249 y(used.)58 b(If)36 b(no)g Fq(jobsp)s(ec)41 b
-Ft(is)35 b(supplied,)g(the)i(`)p Fs(-a)p Ft(')f(option)g(means)g(to)h
+Ft(is)36 b(supplied,)h(the)g(`)p Fs(-a)p Ft(')f(option)h(means)f(to)h
(remo)m(v)m(e)h(or)e(mark)g(all)630 4359 y(jobs;)28 b(the)f(`)p
-Fs(-r)p Ft(')g(option)f(without)g(a)h Fq(jobsp)s(ec)32
-b Ft(argumen)m(t)27 b(restricts)g(op)s(eration)f(to)i(running)630
+Fs(-r)p Ft(')g(option)g(without)g(a)g Fq(jobsp)s(ec)32
+b Ft(argumen)m(t)27 b(restricts)h(op)s(eration)f(to)h(running)630
4468 y(jobs.)150 4646 y Fs(suspend)870 4790 y(suspend)46
-b([-f])630 4934 y Ft(Susp)s(end)28 b(the)i(execution)h(of)g(this)e
-(shell)f(un)m(til)h(it)h(receiv)m(es)h(a)g Fs(SIGCONT)e
-Ft(signal.)39 b(The)30 b(`)p Fs(-f)p Ft(')630 5043 y(option)g(means)g
-(to)h(susp)s(end)d(ev)m(en)j(if)f(the)g(shell)f(is)g(a)i(login)e
-(shell.)275 5230 y(When)h(job)f(con)m(trol)i(is)e(not)i(activ)m(e,)h
-(the)e Fs(kill)f Ft(and)h Fs(wait)f Ft(builtins)d(do)k(not)h(accept)h
+b([-f])630 4934 y Ft(Susp)s(end)28 b(the)i(execution)i(of)f(this)f
+(shell)g(un)m(til)h(it)g(receiv)m(es)h(a)f Fs(SIGCONT)e
+Ft(signal.)41 b(The)30 b(`)p Fs(-f)p Ft(')630 5043 y(option)h(means)f
+(to)h(susp)s(end)d(ev)m(en)j(if)g(the)f(shell)h(is)f(a)h(login)g
+(shell.)275 5230 y(When)f(job)f(con)m(trol)j(is)e(not)h(activ)m(e,)i
+(the)d Fs(kill)f Ft(and)h Fs(wait)f Ft(builtins)g(do)h(not)h(accept)h
Fq(jobsp)s(ec)j Ft(argu-)150 5340 y(men)m(ts.)41 b(They)30
-b(m)m(ust)g(b)s(e)g(supplied)d(pro)s(cess)j Fl(id)p Ft(s.)p
-eop
+b(m)m(ust)g(b)s(e)g(supplied)f(pro)s(cess)h Fl(id)p Ft(s.)p
+eop end
%%Page: 82 88
-82 87 bop 150 -116 a Ft(82)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fr(7.3)68 b(Job)45 b(Con)l(trol)h(V)-11 b(ariables)150
-543 y Fs(auto_resume)630 653 y Ft(This)30 b(v)-5 b(ariable)30
-b(con)m(trols)h(ho)m(w)h(the)f(shell)f(in)m(teracts)i(with)e(the)i
-(user)e(and)h(job)g(con)m(trol.)44 b(If)630 762 y(this)27
-b(v)-5 b(ariable)28 b(exists)g(then)g(single)f(w)m(ord)h(simple)f
-(commands)h(without)f(redirections)h(are)630 872 y(treated)j(as)g
-(candidates)e(for)h(resumption)f(of)h(an)g(existing)f(job.)41
-b(There)29 b(is)g(no)i(am)m(biguit)m(y)630 981 y(allo)m(w)m(ed;)d(if)e
-(there)h(is)f(more)h(than)f(one)h(job)g(b)s(eginning)d(with)h(the)i
-(string)f(t)m(yp)s(ed,)h(then)g(the)630 1091 y(most)j(recen)m(tly)g
-(accessed)g(job)f(will)e(b)s(e)i(selected.)41 b(The)29
-b(name)g(of)h(a)g(stopp)s(ed)e(job,)i(in)e(this)630 1200
-y(con)m(text,)i(is)d(the)h(command)g(line)e(used)h(to)h(start)g(it.)40
-b(If)27 b(this)g(v)-5 b(ariable)26 b(is)h(set)h(to)h(the)e(v)-5
-b(alue)630 1310 y(`)p Fs(exact)p Ft(',)33 b(the)g(string)f(supplied)e
-(m)m(ust)j(matc)m(h)g(the)h(name)f(of)g(a)g(stopp)s(ed)f(job)h
-(exactly;)i(if)630 1420 y(set)29 b(to)h(`)p Fs(substring)p
-Ft(',)d(the)i(string)f(supplied)d(needs)k(to)g(matc)m(h)h(a)f
-(substring)e(of)i(the)g(name)630 1529 y(of)38 b(a)f(stopp)s(ed)g(job.)
-62 b(The)37 b(`)p Fs(substring)p Ft(')e(v)-5 b(alue)37
-b(pro)m(vides)f(functionalit)m(y)g(analogous)i(to)630
-1639 y(the)g(`)p Fs(\045?)p Ft(')f(job)h Fl(id)f Ft(\(see)i(Section)e
-(7.1)i([Job)f(Con)m(trol)f(Basics],)j(page)e(79\).)64
+TeXDict begin 82 87 bop 150 -116 a Ft(82)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(7.3)68 b(Job)45
+b(Con)l(trol)h(V)-11 b(ariables)150 543 y Fs(auto_resume)630
+653 y Ft(This)31 b(v)-5 b(ariable)32 b(con)m(trols)g(ho)m(w)g(the)f
+(shell)h(in)m(teracts)h(with)e(the)h(user)e(and)h(job)g(con)m(trol.)45
+b(If)630 762 y(this)28 b(v)-5 b(ariable)30 b(exists)f(then)f(single)h
+(w)m(ord)f(simple)h(commands)f(without)g(redirections)i(are)630
+872 y(treated)h(as)g(candidates)f(for)g(resumption)g(of)g(an)g
+(existing)h(job.)41 b(There)29 b(is)h(no)h(am)m(biguit)m(y)630
+981 y(allo)m(w)m(ed;)f(if)d(there)g(is)g(more)g(than)f(one)h(job)g(b)s
+(eginning)f(with)g(the)h(string)g(t)m(yp)s(ed,)g(then)g(the)630
+1091 y(most)j(recen)m(tly)h(accessed)f(job)f(will)h(b)s(e)f(selected.)
+42 b(The)29 b(name)g(of)h(a)g(stopp)s(ed)e(job,)i(in)f(this)630
+1200 y(con)m(text,)h(is)e(the)g(command)g(line)g(used)f(to)h(start)g
+(it.)41 b(If)27 b(this)h(v)-5 b(ariable)28 b(is)g(set)g(to)h(the)e(v)-5
+b(alue)630 1310 y(`)p Fs(exact)p Ft(',)33 b(the)g(string)g(supplied)f
+(m)m(ust)h(matc)m(h)g(the)h(name)f(of)g(a)g(stopp)s(ed)f(job)h
+(exactly;)j(if)630 1420 y(set)29 b(to)h(`)p Fs(substring)p
+Ft(',)d(the)i(string)g(supplied)e(needs)i(to)g(matc)m(h)h(a)f
+(substring)f(of)h(the)g(name)630 1529 y(of)38 b(a)f(stopp)s(ed)g(job.)
+62 b(The)37 b(`)p Fs(substring)p Ft(')e(v)-5 b(alue)38
+b(pro)m(vides)f(functionalit)m(y)i(analogous)g(to)630
+1639 y(the)f(`)p Fs(\045?)p Ft(')f(job)h Fl(id)f Ft(\(see)i(Section)f
+(7.1)h([Job)f(Con)m(trol)g(Basics],)j(page)d(79\).)64
b(If)37 b(set)h(to)h(an)m(y)630 1748 y(other)32 b(v)-5
-b(alue,)31 b(the)h(supplied)c(string)j(m)m(ust)g(b)s(e)g(a)h(pre\014x)f
+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 1858
-y(pro)m(vides)d(functionalit)m(y)g(analogous)i(to)g(the)g(`)p
-Fs(\045)p Ft(')f(job)g Fl(id)p Ft(.)p eop
+y(pro)m(vides)e(functionalit)m(y)i(analogous)g(to)f(the)g(`)p
+Fs(\045)p Ft(')f(job)g Fl(id)p Ft(.)p eop end
%%Page: 83 89
-83 88 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(83)150 299 y Fo(8)80 b(Command)52
-b(Line)i(Editing)275 539 y Ft(This)38 b(c)m(hapter)i(describ)s(es)f
-(the)h(basic)f(features)h(of)h(the)f Fl(gnu)f Ft(command)h(line)e
-(editing)h(in)m(terface.)150 648 y(Command)25 b(line)f(editing)g(is)h
-(pro)m(vided)f(b)m(y)i(the)g(Readline)e(library)-8 b(,)25
-b(whic)m(h)g(is)g(used)g(b)m(y)g(sev)m(eral)h(di\013eren)m(t)150
-758 y(programs,)k(including)d(Bash.)150 1020 y Fr(8.1)68
+TeXDict begin 83 88 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(83)150 299 y Fo(8)80
+b(Command)54 b(Line)f(Editing)275 539 y Ft(This)39 b(c)m(hapter)h
+(describ)s(es)g(the)g(basic)g(features)g(of)h(the)f Fl(gnu)f
+Ft(command)h(line)g(editing)h(in)m(terface.)150 648 y(Command)25
+b(line)h(editing)g(is)g(pro)m(vided)f(b)m(y)h(the)g(Readline)g(library)
+-8 b(,)27 b(whic)m(h)f(is)g(used)f(b)m(y)g(sev)m(eral)i(di\013eren)m(t)
+150 758 y(programs,)j(including)g(Bash.)150 1020 y Fr(8.1)68
b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)275 1266
-y Ft(The)29 b(follo)m(wing)g(paragraphs)h(describ)s(e)f(the)h(notation)
-h(used)e(to)j(represen)m(t)e(k)m(eystrok)m(es.)275 1402
-y(The)i(text)j Fj(C-k)d Ft(is)h(read)g(as)h(`Con)m(trol-K')f(and)g
-(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)3663
+y Ft(The)29 b(follo)m(wing)j(paragraphs)e(describ)s(e)g(the)g(notation)
+i(used)d(to)j(represen)m(t)e(k)m(eystrok)m(es.)275 1402
+y(The)i(text)j Fj(C-k)d Ft(is)i(read)f(as)h(`Con)m(trol-K')g(and)f
+(describ)s(es)g(the)g(c)m(haracter)i(pro)s(duced)d(when)g(the)3663
1399 y Fg(h)p 3687 1346 38 4 v 3687 1402 a Ff(k)p 3687
-1417 V 3720 1399 a Fg(i)150 1512 y Ft(k)m(ey)f(is)f(pressed)f(while)f
-(the)j(Con)m(trol)f(k)m(ey)h(is)f(depressed.)275 1648
-y(The)h(text)i Fj(M-k)e Ft(is)g(read)g(as)i(`Meta-K')g(and)f(describ)s
-(es)e(the)i(c)m(haracter)h(pro)s(duced)e(when)f(the)i(Meta)150
-1757 y(k)m(ey)d(\(if)f(y)m(ou)h(ha)m(v)m(e)g(one\))g(is)f(depressed,)g
+1417 V 3720 1399 a Fg(i)150 1512 y Ft(k)m(ey)f(is)g(pressed)e(while)h
+(the)h(Con)m(trol)g(k)m(ey)g(is)g(depressed.)275 1648
+y(The)g(text)i Fj(M-k)e Ft(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s
+(es)f(the)h(c)m(haracter)h(pro)s(duced)e(when)f(the)i(Meta)150
+1757 y(k)m(ey)d(\(if)g(y)m(ou)g(ha)m(v)m(e)g(one\))g(is)g(depressed,)f
(and)f(the)1859 1754 y Fg(h)p 1883 1701 V 1883 1757 a
-Ff(k)p 1883 1773 V 1916 1754 a Fg(i)1974 1757 y Ft(k)m(ey)j(is)d
-(pressed.)39 b(The)28 b(Meta)i(k)m(ey)f(is)f(lab)s(eled)3558
+Ff(k)p 1883 1773 V 1916 1754 a Fg(i)1974 1757 y Ft(k)m(ey)j(is)e
+(pressed.)39 b(The)28 b(Meta)i(k)m(ey)f(is)g(lab)s(eled)3558
1754 y Fg(h)p 3582 1701 143 4 v 3582 1757 a Ff(AL)-6
b(T)p 3582 1773 V 3720 1754 a Fg(i)150 1867 y Ft(on)26
-b(man)m(y)g(k)m(eyb)s(oards.)39 b(On)26 b(k)m(eyb)s(oards)g(with)f(t)m
-(w)m(o)i(k)m(eys)g(lab)s(eled)2425 1864 y Fg(h)p 2450
+b(man)m(y)g(k)m(eyb)s(oards.)39 b(On)26 b(k)m(eyb)s(oards)g(with)g(t)m
+(w)m(o)h(k)m(eys)g(lab)s(eled)2425 1864 y Fg(h)p 2450
1811 V 2450 1867 a Ff(AL)-6 b(T)p 2450 1882 V 2587 1864
-a Fg(i)2643 1867 y Ft(\(usually)25 b(to)i(either)e(side)g(of)i(the)150
+a Fg(i)2643 1867 y Ft(\(usually)27 b(to)g(either)f(side)g(of)h(the)150
1977 y(space)32 b(bar\),)g(the)775 1974 y Fg(h)p 799
1921 V 799 1977 a Ff(AL)-6 b(T)p 799 1992 V 937 1974
-a Fg(i)998 1977 y Ft(on)32 b(the)f(left)g(side)g(is)f(generally)h(set)g
+a Fg(i)998 1977 y Ft(on)32 b(the)f(left)h(side)g(is)f(generally)i(set)e
(to)i(w)m(ork)e(as)h(a)f(Meta)i(k)m(ey)-8 b(.)45 b(The)3393
1974 y Fg(h)p 3417 1921 V 3417 1977 a Ff(AL)-6 b(T)p
3417 1992 V 3555 1974 a Fg(i)3616 1977 y Ft(k)m(ey)150
-2086 y(on)33 b(the)h(righ)m(t)f(ma)m(y)h(also)f(b)s(e)g(con\014gured)f
+2086 y(on)33 b(the)h(righ)m(t)g(ma)m(y)g(also)g(b)s(e)f(con\014gured)f
(to)i(w)m(ork)g(as)g(a)f(Meta)i(k)m(ey)f(or)g(ma)m(y)g(b)s(e)e
-(con\014gured)h(as)h(some)150 2196 y(other)d(mo)s(di\014er,)d(suc)m(h)i
-(as)h(a)g(Comp)s(ose)f(k)m(ey)h(for)f(t)m(yping)g(accen)m(ted)i(c)m
+(con\014gured)h(as)h(some)150 2196 y(other)d(mo)s(di\014er,)e(suc)m(h)h
+(as)h(a)g(Comp)s(ose)f(k)m(ey)h(for)f(t)m(yping)h(accen)m(ted)h(c)m
(haracters.)275 2332 y(If)21 b(y)m(ou)h(do)g(not)g(ha)m(v)m(e)h(a)f
(Meta)h(or)1388 2329 y Fg(h)p 1412 2276 V 1412 2332 a
Ff(AL)-6 b(T)p 1412 2348 V 1550 2329 a Fg(i)1601 2332
-y Ft(k)m(ey)e(,)25 b(or)d(another)g(k)m(ey)h(w)m(orking)e(as)h(a)g
+y Ft(k)m(ey)e(,)25 b(or)d(another)g(k)m(ey)h(w)m(orking)f(as)g(a)g
(Meta)h(k)m(ey)-8 b(,)25 b(the)d(iden)m(tical)150 2442
y(k)m(eystrok)m(e)i(can)f(b)s(e)f(generated)i(b)m(y)e(t)m(yping)1619
2439 y Fg(h)p 1643 2386 139 4 v 1643 2442 a Ff(ESC)p
1643 2457 V 1777 2439 a Fg(i)1829 2442 y Fm(\014rst)p
Ft(,)j(and)d(then)g(t)m(yping)2678 2439 y Fg(h)p 2703
2386 38 4 v 2703 2442 a Ff(k)p 2703 2457 V 2736 2439
-a Fg(i)2765 2442 y Ft(.)38 b(Either)22 b(pro)s(cess)g(is)f(kno)m(wn)150
-2551 y(as)31 b Fq(metafying)38 b Ft(the)850 2548 y Fg(h)p
+a Fg(i)2765 2442 y Ft(.)38 b(Either)23 b(pro)s(cess)f(is)g(kno)m(wn)150
+2551 y(as)31 b Fq(metafying)39 b Ft(the)850 2548 y Fg(h)p
874 2495 V 874 2551 a Ff(k)p 874 2567 V 907 2548 a Fg(i)968
2551 y Ft(k)m(ey)-8 b(.)275 2688 y(The)39 b(text)j Fj(M-C-k)d
-Ft(is)g(read)h(as)h(`Meta-Con)m(trol-k')i(and)c(describ)s(es)g(the)h(c)
-m(haracter)i(pro)s(duced)d(b)m(y)150 2797 y Fq(metafying)f
-Fj(C-k)p Ft(.)275 2934 y(In)e(addition,)h(sev)m(eral)g(k)m(eys)g(ha)m
-(v)m(e)h(their)e(o)m(wn)h(names.)60 b(Sp)s(eci\014cally)-8
+Ft(is)h(read)g(as)h(`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g
+(c)m(haracter)i(pro)s(duced)d(b)m(y)150 2797 y Fq(metafying)g
+Fj(C-k)p Ft(.)275 2934 y(In)d(addition,)j(sev)m(eral)f(k)m(eys)f(ha)m
+(v)m(e)h(their)f(o)m(wn)g(names.)60 b(Sp)s(eci\014cally)-8
b(,)2768 2931 y Fg(h)p 2792 2878 146 4 v 2792 2934 a
Ff(DEL)p 2792 2949 V 2934 2931 a Fg(i)2964 2934 y Ft(,)3028
2931 y Fg(h)p 3052 2878 139 4 v 3052 2934 a Ff(ESC)p
174 2987 151 4 v 174 3043 a Ff(RET)p 174 3059 V 321 3040
a Fg(i)351 3043 y Ft(,)47 b(and)612 3040 y Fg(h)p 637
2987 148 4 v 637 3043 a Ff(T)-6 b(AB)p 637 3059 V 780
-3040 a Fg(i)853 3043 y Ft(all)43 b(stand)g(for)g(themselv)m(es)h(when)e
-(seen)i(in)e(this)g(text,)48 b(or)43 b(in)f(an)i(init)d(\014le)i(\(see)
-150 3153 y(Section)36 b(8.3)h([Readline)e(Init)g(File],)i(page)g(86\).)
-59 b(If)36 b(y)m(our)g(k)m(eyb)s(oard)g(lac)m(ks)g(a)2897
+3040 a Fg(i)853 3043 y Ft(all)45 b(stand)e(for)g(themselv)m(es)i(when)d
+(seen)i(in)f(this)g(text,)48 b(or)43 b(in)g(an)h(init)f(\014le)h(\(see)
+150 3153 y(Section)37 b(8.3)g([Readline)g(Init)f(File],)j(page)e(86\).)
+59 b(If)36 b(y)m(our)g(k)m(eyb)s(oard)g(lac)m(ks)h(a)2897
3150 y Fg(h)p 2921 3097 144 4 v 2921 3153 a Ff(LFD)p
2921 3168 V 3061 3150 a Fg(i)3127 3153 y Ft(k)m(ey)-8
b(,)39 b(t)m(yping)3604 3150 y Fg(h)p 3628 3097 97 4
v 3628 3153 a Ff(C-j)p 3628 3168 V 3720 3150 a Fg(i)150
-3262 y Ft(will)27 b(pro)s(duce)h(the)i(desired)e(c)m(haracter.)42
+3262 y Ft(will)30 b(pro)s(duce)e(the)i(desired)f(c)m(haracter.)42
b(The)1748 3259 y Fg(h)p 1772 3206 151 4 v 1772 3262
a Ff(RET)p 1772 3278 V 1919 3259 a Fg(i)1978 3262 y Ft(k)m(ey)30
b(ma)m(y)g(b)s(e)f(lab)s(eled)2770 3259 y Fg(h)p 2794
3206 172 4 v 3201 3262 a Ff(En)n(ter)p 3201 3278 V 3368
3259 a Fg(i)3427 3262 y Ft(on)h(some)150 3372 y(k)m(eyb)s(oards.)150
3634 y Fr(8.2)68 b(Readline)47 b(In)l(teraction)275 3880
-y Ft(Often)24 b(during)f(an)i(in)m(teractiv)m(e)h(session)f(y)m(ou)g(t)
-m(yp)s(e)h(in)e(a)h(long)g(line)e(of)j(text,)h(only)e(to)g(notice)h
-(that)g(the)150 3989 y(\014rst)32 b(w)m(ord)g(on)g(the)g(line)f(is)h
-(missp)s(elled.)43 b(The)32 b(Readline)f(library)f(giv)m(es)i(y)m(ou)h
-(a)g(set)g(of)f(commands)g(for)150 4099 y(manipulating)27
-b(the)j(text)h(as)f(y)m(ou)g(t)m(yp)s(e)g(it)f(in,)g(allo)m(wing)f(y)m
-(ou)i(to)h(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)
-150 4209 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)28
-b(of)g(the)h(line.)38 b(Using)27 b(these)i(editing)e(commands,)h(y)m
-(ou)h(mo)m(v)m(e)g(the)g(cursor)150 4318 y(to)35 b(the)f(place)h(that)f
-(needs)g(correction,)i(and)e(delete)g(or)g(insert)g(the)g(text)h(of)g
-(the)f(corrections.)53 b(Then,)150 4428 y(when)30 b(y)m(ou)i(are)f
-(satis\014ed)f(with)g(the)h(line,)f(y)m(ou)i(simply)c(press)2320
+y Ft(Often)24 b(during)g(an)h(in)m(teractiv)m(e)j(session)e(y)m(ou)f(t)
+m(yp)s(e)h(in)f(a)g(long)h(line)f(of)h(text,)h(only)f(to)f(notice)i
+(that)f(the)150 3989 y(\014rst)32 b(w)m(ord)g(on)g(the)g(line)h(is)g
+(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g
+(a)g(set)g(of)f(commands)g(for)150 4099 y(manipulating)e(the)g(text)h
+(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h
+(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150
+4209 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29
+b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m
+(ou)h(mo)m(v)m(e)g(the)g(cursor)150 4318 y(to)35 b(the)f(place)i(that)e
+(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g
+(the)f(corrections.)54 b(Then,)150 4428 y(when)30 b(y)m(ou)i(are)f
+(satis\014ed)g(with)g(the)g(line,)h(y)m(ou)g(simply)e(press)2320
4425 y Fg(h)p 2344 4372 151 4 v 2344 4428 a Ff(RET)p
2344 4443 V 2491 4425 a Fg(i)2520 4428 y Ft(.)43 b(Y)-8
b(ou)32 b(do)f(not)g(ha)m(v)m(e)i(to)e(b)s(e)g(at)h(the)150
-4537 y(end)j(of)h(the)g(line)e(to)j(press)1126 4534 y
+4537 y(end)j(of)h(the)g(line)g(to)h(press)1126 4534 y
Fg(h)p 1150 4481 V 1150 4537 a Ff(RET)p 1150 4553 V 1297
-4534 a Fg(i)1327 4537 y Ft(;)h(the)e(en)m(tire)g(line)e(is)h(accepted)i
-(regardless)e(of)h(the)g(lo)s(cation)g(of)g(the)150 4647
-y(cursor)30 b(within)e(the)i(line.)150 4875 y Fk(8.2.1)63
+4534 a Fg(i)1327 4537 y Ft(;)h(the)e(en)m(tire)h(line)f(is)g(accepted)h
+(regardless)f(of)g(the)g(lo)s(cation)i(of)e(the)150 4647
+y(cursor)30 b(within)g(the)g(line.)150 4875 y Fk(8.2.1)63
b(Readline)40 b(Bare)h(Essen)m(tials)275 5121 y Ft(In)22
-b(order)g(to)i(en)m(ter)g(c)m(haracters)g(in)m(to)f(the)h(line,)f
-(simply)d(t)m(yp)s(e)k(them.)38 b(The)22 b(t)m(yp)s(ed)h(c)m(haracter)i
+b(order)g(to)i(en)m(ter)g(c)m(haracters)g(in)m(to)g(the)g(line,)h
+(simply)d(t)m(yp)s(e)i(them.)38 b(The)22 b(t)m(yp)s(ed)h(c)m(haracter)i
(app)s(ears)150 5230 y(where)32 b(the)h(cursor)e(w)m(as,)j(and)e(then)g
-(the)h(cursor)e(mo)m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)46
-b(If)32 b(y)m(ou)h(mist)m(yp)s(e)f(a)150 5340 y(c)m(haracter,)g(y)m(ou)
+(the)h(cursor)e(mo)m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47
+b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 5340 y(c)m(haracter,)f(y)m(ou)
f(can)g(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)
-f(delete)i(the)g(mist)m(yp)s(ed)d(c)m(haracter.)p eop
+f(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)p eop
+end
%%Page: 84 90
-84 89 bop 150 -116 a Ft(84)2572 b(Bash)31 b(Reference)g(Man)m(ual)275
-299 y(Sometimes)f(y)m(ou)h(ma)m(y)h(mist)m(yp)s(e)d(a)j(c)m(haracter,)g
-(and)e(not)i(notice)f(the)g(error)f(un)m(til)f(y)m(ou)i(ha)m(v)m(e)h(t)
-m(yp)s(ed)150 408 y(sev)m(eral)d(other)g(c)m(haracters.)42
-b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h
-Fj(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)h(and)150
-518 y(then)g(correct)i(y)m(our)e(mistak)m(e.)41 b(Afterw)m(ards,)31
-b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)f
-(with)f Fj(C-f)p Ft(.)275 679 y(When)j(y)m(ou)h(add)f(text)h(in)e(the)i
-(middle)d(of)j(a)g(line,)f(y)m(ou)g(will)e(notice)j(that)g(c)m
+TeXDict begin 84 89 bop 150 -116 a Ft(84)2572 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 y(Sometimes)g(y)m(ou)g(ma)m(y)h(mist)m
+(yp)s(e)e(a)i(c)m(haracter,)g(and)e(not)i(notice)g(the)f(error)f(un)m
+(til)h(y)m(ou)g(ha)m(v)m(e)h(t)m(yp)s(ed)150 408 y(sev)m(eral)e(other)f
+(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h
+Fj(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150
+518 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31
+b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g
+(with)f Fj(C-f)p Ft(.)275 679 y(When)i(y)m(ou)h(add)f(text)h(in)f(the)h
+(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m
(haracters)h(to)g(the)e(righ)m(t)150 789 y(of)d(the)g(cursor)f(are)h
(`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h
-(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)39 b(Lik)m(ewise,)150
-898 y(when)e(y)m(ou)g(delete)h(text)h(b)s(ehind)34 b(the)k(cursor,)h(c)
-m(haracters)g(to)f(the)g(righ)m(t)f(of)h(the)g(cursor)e(are)i(`pulled)
-150 1008 y(bac)m(k')24 b(to)f(\014ll)e(in)g(the)i(blank)e(space)j
-(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)23 b(of)g(the)g(text.)39
-b(A)23 b(list)e(of)i(the)g(bare)f(essen)m(tials)150 1117
-y(for)30 b(editing)f(the)i(text)g(of)g(an)f(input)e(line)h(follo)m(ws.)
+(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150
+898 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m
+(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)
+150 1008 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i
+(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39
+b(A)23 b(list)g(of)g(the)g(bare)f(essen)m(tials)150 1117
+y(for)30 b(editing)h(the)g(text)g(of)g(an)f(input)f(line)i(follo)m(ws.)
150 1317 y Fj(C-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m
(haracter.)150 1502 y Fj(C-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(one)
h(c)m(haracter.)150 1685 y Fg(h)p 174 1632 146 4 v 174
1688 a Ff(DEL)p 174 1704 V 316 1685 a Fg(i)376 1688 y
Ft(or)487 1685 y Fg(h)p 512 1632 317 4 v 512 1688 a Ff(Bac)n(kspace)p
-512 1704 V 824 1685 a Fg(i)630 1798 y Ft(Delete)h(the)e(c)m(haracter)i
-(to)f(the)g(left)f(of)g(the)h(cursor.)150 1984 y Fj(C-d)336
-b Ft(Delete)32 b(the)e(c)m(haracter)i(underneath)d(the)i(cursor.)150
-2170 y(Prin)m(ting)e(c)m(haracters)630 2279 y(Insert)h(the)g(c)m
-(haracter)i(in)m(to)f(the)f(line)f(at)i(the)g(cursor.)150
-2465 y Fj(C-_)e Ft(or)i Fj(C-x)e(C-u)630 2575 y Ft(Undo)k(the)h(last)f
-(editing)f(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)f(the)h(w)m(a)
+512 1704 V 824 1685 a Fg(i)630 1798 y Ft(Delete)i(the)d(c)m(haracter)i
+(to)f(the)g(left)g(of)f(the)h(cursor.)150 1984 y Fj(C-d)336
+b Ft(Delete)33 b(the)d(c)m(haracter)i(underneath)d(the)i(cursor.)150
+2170 y(Prin)m(ting)g(c)m(haracters)630 2279 y(Insert)f(the)g(c)m
+(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g(cursor.)150
+2465 y Fj(C-_)e Ft(or)i Fj(C-x)e(C-u)630 2575 y Ft(Undo)k(the)h(last)g
+(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)
m(y)i(bac)m(k)f(to)g(an)g(empt)m(y)630 2684 y(line.)150
-2883 y(\(Dep)s(ending)f(on)h(y)m(our)g(con\014guration,)g(the)1726
+2883 y(\(Dep)s(ending)g(on)g(y)m(our)g(con\014guration,)h(the)1726
2880 y Fg(h)p 1750 2827 V 1750 2883 a Ff(Bac)n(kspace)p
-1750 2899 V 2063 2880 a Fg(i)2127 2883 y Ft(k)m(ey)h(b)s(e)e(set)h(to)h
-(delete)f(the)g(c)m(haracter)i(to)f(the)150 2993 y(left)e(of)g(the)g
+1750 2899 V 2063 2880 a Fg(i)2127 2883 y Ft(k)m(ey)g(b)s(e)e(set)h(to)h
+(delete)g(the)f(c)m(haracter)i(to)f(the)150 2993 y(left)f(of)f(the)g
(cursor)f(and)h(the)1192 2990 y Fg(h)p 1216 2937 146
4 v 1216 2993 a Ff(DEL)p 1216 3008 V 1358 2990 a Fg(i)1421
-2993 y Ft(k)m(ey)g(set)h(to)g(delete)f(the)g(c)m(haracter)i(underneath)
+2993 y Ft(k)m(ey)g(set)h(to)g(delete)g(the)f(c)m(haracter)i(underneath)
c(the)i(cursor,)h(lik)m(e)150 3103 y Fj(C-d)p Ft(,)c(rather)g(than)g
-(the)h(c)m(haracter)h(to)f(the)f(left)g(of)h(the)f(cursor.\))150
-3380 y Fk(8.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)g(Commands)275
-3650 y Ft(The)25 b(ab)s(o)m(v)m(e)i(table)f(describ)s(es)f(the)h(most)h
-(basic)e(k)m(eystrok)m(es)j(that)f(y)m(ou)f(need)g(in)f(order)g(to)i
-(do)f(editing)150 3760 y(of)g(the)f(input)f(line.)37
-b(F)-8 b(or)27 b(y)m(our)e(con)m(v)m(enience,)j(man)m(y)d(other)h
-(commands)f(ha)m(v)m(e)i(b)s(een)e(added)g(in)f(addition)150
+(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g(the)f(cursor.\))150
+3380 y Fk(8.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)275
+3650 y Ft(The)25 b(ab)s(o)m(v)m(e)i(table)g(describ)s(es)f(the)g(most)h
+(basic)f(k)m(eystrok)m(es)i(that)f(y)m(ou)f(need)g(in)g(order)f(to)i
+(do)f(editing)150 3760 y(of)g(the)f(input)g(line.)39
+b(F)-8 b(or)27 b(y)m(our)e(con)m(v)m(enience,)k(man)m(y)c(other)h
+(commands)f(ha)m(v)m(e)i(b)s(een)e(added)g(in)g(addition)150
3869 y(to)33 b Fj(C-b)p Ft(,)e Fj(C-f)p Ft(,)h Fj(C-d)p
Ft(,)g(and)1043 3866 y Fg(h)p 1067 3813 V 1067 3869 a
Ff(DEL)p 1067 3885 V 1209 3866 a Fg(i)1239 3869 y Ft(.)45
-b(Here)33 b(are)f(some)g(commands)g(for)g(mo)m(ving)g(more)g(rapidly)d
-(ab)s(out)j(the)150 3979 y(line.)150 4178 y Fj(C-a)336
+b(Here)33 b(are)f(some)g(commands)g(for)g(mo)m(ving)h(more)f(rapidly)f
+(ab)s(out)h(the)150 3979 y(line.)150 4178 y Fj(C-a)336
b Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150
4364 y Fj(C-e)336 b Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h
(line.)150 4550 y Fj(M-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m
-(ord,)f(where)g(a)h(w)m(ord)f(is)f(comp)s(osed)h(of)h(letters)g(and)e
+(ord,)f(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d
(digits.)150 4736 y Fj(M-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)
-g(w)m(ord.)150 4922 y Fj(C-l)336 b Ft(Clear)30 b(the)g(screen,)h
-(reprin)m(ting)d(the)j(curren)m(t)f(line)f(at)i(the)f(top.)275
-5121 y(Notice)25 b(ho)m(w)g Fj(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h
-(c)m(haracter,)j(while)23 b Fj(M-f)g Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h
-(w)m(ord.)39 b(It)24 b(is)g(a)h(lo)s(ose)150 5230 y(con)m(v)m(en)m
-(tion)31 b(that)g(con)m(trol)f(k)m(eystrok)m(es)i(op)s(erate)e(on)g(c)m
-(haracters)h(while)d(meta)j(k)m(eystrok)m(es)h(op)s(erate)e(on)150
-5340 y(w)m(ords.)p eop
+g(w)m(ord.)150 4922 y Fj(C-l)336 b Ft(Clear)31 b(the)f(screen,)h
+(reprin)m(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275
+5121 y(Notice)c(ho)m(w)f Fj(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m
+(haracter,)j(while)d Fj(M-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m
+(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 5230 y(con)m(v)m(en)m(tion)32
+b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m
+(haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150
+5340 y(w)m(ords.)p eop end
%%Page: 85 91
-85 90 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(85)150 299 y Fk(8.2.3)63 b(Readline)40
-b(Killing)i(Commands)275 566 y Fq(Killing)f Ft(text)e(means)e(to)h
-(delete)f(the)h(text)g(from)f(the)g(line,)h(but)f(to)h(sa)m(v)m(e)h(it)
-d(a)m(w)m(a)m(y)k(for)d(later)g(use,)150 675 y(usually)32
-b(b)m(y)i Fq(y)m(anking)41 b Ft(\(re-inserting\))33 b(it)h(bac)m(k)h
-(in)m(to)f(the)g(line.)50 b(\(`Cut')35 b(and)e(`paste')i(are)g(more)f
-(recen)m(t)150 785 y(jargon)d(for)f(`kill')e(and)i(`y)m(ank'.\))275
-942 y(If)f(the)i(description)d(for)i(a)h(command)f(sa)m(ys)g(that)h(it)
-f(`kills')e(text,)k(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)
-150 1052 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)e(a)i(di\013eren)m(t)f
-(\(or)h(the)f(same\))h(place)g(later.)275 1209 y(When)23
-b(y)m(ou)g(use)g(a)h(kill)d(command,)j(the)g(text)g(is)e(sa)m(v)m(ed)j
-(in)d(a)h Fq(kill-ring)p Ft(.)35 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h
-(consecutiv)m(e)150 1318 y(kills)28 b(sa)m(v)m(e)33 b(all)d(of)h(the)g
-(killed)e(text)j(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)e
-(bac)m(k,)i(y)m(ou)g(get)g(it)e(all.)41 b(The)150 1428
-y(kill)30 b(ring)h(is)g(not)i(line)e(sp)s(eci\014c;)h(the)h(text)g
-(that)g(y)m(ou)g(killed)c(on)k(a)f(previously)e(t)m(yp)s(ed)j(line)d
-(is)i(a)m(v)-5 b(ailable)150 1537 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac)
-m(k)g(later,)g(when)e(y)m(ou)i(are)g(t)m(yping)e(another)i(line.)275
-1695 y(Here)f(is)g(the)g(list)f(of)i(commands)f(for)g(killing)d(text.)
-150 1888 y Fj(C-k)336 b Ft(Kill)28 b(the)i(text)i(from)e(the)g(curren)m
-(t)g(cursor)g(p)s(osition)f(to)i(the)f(end)g(of)g(the)h(line.)150
-2070 y Fj(M-d)336 b Ft(Kill)24 b(from)i(the)g(cursor)g(to)h(the)f(end)g
-(of)h(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)d(b)s(et)m(w)m(een)i(w)m
-(ords,)g(to)g(the)630 2180 y(end)j(of)g(the)h(next)f(w)m(ord.)41
-b(W)-8 b(ord)30 b(b)s(oundaries)e(are)j(the)g(same)f(as)h(those)g(used)
+TeXDict begin 85 90 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(85)150 299 y Fk(8.2.3)63
+b(Readline)40 b(Killing)i(Commands)275 566 y Fq(Killing)j
+Ft(text)39 b(means)e(to)h(delete)g(the)g(text)g(from)f(the)g(line,)j
+(but)d(to)h(sa)m(v)m(e)h(it)e(a)m(w)m(a)m(y)j(for)d(later)h(use,)150
+675 y(usually)c(b)m(y)g Fq(y)m(anking)42 b Ft(\(re-inserting\))35
+b(it)g(bac)m(k)g(in)m(to)g(the)f(line.)52 b(\(`Cut')35
+b(and)e(`paste')i(are)g(more)f(recen)m(t)150 785 y(jargon)d(for)f
+(`kill')h(and)f(`y)m(ank'.\))275 942 y(If)f(the)i(description)f(for)g
+(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g(text,)h(then)e(y)m(ou)g
+(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 1052 y(can)g(get)g(the)g(text)g
+(bac)m(k)g(in)f(a)h(di\013eren)m(t)g(\(or)g(the)f(same\))h(place)h
+(later.)275 1209 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g
+(text)g(is)f(sa)m(v)m(ed)i(in)e(a)g Fq(kill-ring)p Ft(.)39
+b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h(consecutiv)m(e)150
+1318 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g(killed)h(text)g
+(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f(bac)m(k,)h(y)m
+(ou)g(get)g(it)f(all.)43 b(The)150 1428 y(kill)33 b(ring)f(is)g(not)h
+(line)g(sp)s(eci\014c;)g(the)g(text)g(that)g(y)m(ou)g(killed)f(on)h(a)f
+(previously)g(t)m(yp)s(ed)h(line)f(is)h(a)m(v)-5 b(ailable)150
+1537 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac)m(k)g(later,)h(when)d(y)m(ou)
+i(are)g(t)m(yping)f(another)h(line.)275 1695 y(Here)f(is)h(the)f(list)h
+(of)g(commands)f(for)g(killing)h(text.)150 1888 y Fj(C-k)336
+b Ft(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s
+(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 2070
+y Fj(M-d)336 b Ft(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h
+(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,)
+g(to)g(the)630 2180 y(end)j(of)g(the)h(next)f(w)m(ord.)41
+b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used)
f(b)m(y)g Fj(M-f)p Ft(.)150 2362 y Fj(M-)246 2359 y Fg(h)p
270 2306 146 4 v 270 2362 a Ff(DEL)p 270 2377 V 411 2359
-a Fg(i)630 2362 y Ft(Kill)e(from)i(the)h(cursor)f(the)g(start)h(of)g
-(the)g(curren)m(t)f(w)m(ord,)h(or,)f(if)g(b)s(et)m(w)m(een)h(w)m(ords,)
-f(to)i(the)630 2471 y(start)39 b(of)f(the)h(previous)e(w)m(ord.)64
-b(W)-8 b(ord)39 b(b)s(oundaries)d(are)j(the)f(same)h(as)g(those)f(used)
+a Fg(i)630 2362 y Ft(Kill)h(from)f(the)h(cursor)f(the)g(start)h(of)g
+(the)g(curren)m(t)f(w)m(ord,)h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)
+f(to)i(the)630 2471 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64
+b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)
g(b)m(y)630 2581 y Fj(M-b)p Ft(.)150 2763 y Fj(C-w)336
-b Ft(Kill)29 b(from)h(the)i(cursor)e(to)i(the)g(previous)d(whitespace.)
-43 b(This)30 b(is)g(di\013eren)m(t)h(than)g Fj(M-)3555
+b Ft(Kill)32 b(from)e(the)i(cursor)e(to)i(the)g(previous)e(whitespace.)
+44 b(This)31 b(is)g(di\013eren)m(t)h(than)f Fj(M-)3555
2760 y Fg(h)p 3578 2707 V 3578 2763 a Ff(DEL)p 3578 2778
V 3720 2760 a Fg(i)630 2872 y Ft(b)s(ecause)f(the)h(w)m(ord)f(b)s
-(oundaries)e(di\013er.)275 3066 y(Here)42 b(is)e(ho)m(w)i(to)g
-Fq(y)m(ank)47 b Ft(the)42 b(text)g(bac)m(k)h(in)m(to)e(the)h(line.)72
-b(Y)-8 b(anking)42 b(means)f(to)h(cop)m(y)h(the)e(most-)150
-3175 y(recen)m(tly-killed)29 b(text)i(from)f(the)g(kill)f(bu\013er.)150
-3369 y Fj(C-y)336 b Ft(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)g
-(killed)d(text)j(bac)m(k)g(in)m(to)g(the)f(bu\013er)g(at)h(the)f
-(cursor.)150 3551 y Fj(M-y)336 b Ft(Rotate)36 b(the)f(kill-ring,)e(and)
-h(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)e(do)i
-(this)e(if)h(the)h(prior)630 3660 y(command)30 b(is)g
-Fj(C-y)f Ft(or)h Fj(M-y)p Ft(.)150 3930 y Fk(8.2.4)63
+(oundaries)f(di\013er.)275 3066 y(Here)42 b(is)f(ho)m(w)h(to)g
+Fq(y)m(ank)47 b Ft(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74
+b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150
+3175 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150
+3369 y Fj(C-y)336 b Ft(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h
+(killed)f(text)g(bac)m(k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f
+(cursor.)150 3551 y Fj(M-y)336 b Ft(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 3660 y(command)30 b(is)h
+Fj(C-y)e Ft(or)h Fj(M-y)p Ft(.)150 3930 y Fk(8.2.4)63
b(Readline)40 b(Argumen)m(ts)275 4197 y Ft(Y)-8 b(ou)29
-b(can)h(pass)f(n)m(umeric)f(argumen)m(ts)h(to)h(Readline)e(commands.)40
-b(Sometimes)29 b(the)g(argumen)m(t)h(acts)150 4306 y(as)40
-b(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)e(it)h(is)f(the)h
-Fm(sign)47 b Ft(of)41 b(the)f(argumen)m(t)g(that)h(is)e(signi\014can)m
-(t.)69 b(If)40 b(y)m(ou)150 4416 y(pass)33 b(a)h(negativ)m(e)h(argumen)
-m(t)f(to)g(a)g(command)f(whic)m(h)f(normally)g(acts)i(in)e(a)i(forw)m
-(ard)f(direction,)g(that)150 4525 y(command)i(will)e(act)j(in)e(a)i
-(bac)m(kw)m(ard)f(direction.)55 b(F)-8 b(or)36 b(example,)g(to)g(kill)d
-(text)j(bac)m(k)g(to)g(the)g(start)g(of)150 4635 y(the)31
-b(line,)e(y)m(ou)h(migh)m(t)g(t)m(yp)s(e)h(`)p Fs(M--)f(C-k)p
-Ft('.)275 4792 y(The)d(general)h(w)m(a)m(y)i(to)e(pass)g(n)m(umeric)f
-(argumen)m(ts)i(to)g(a)f(command)g(is)f(to)i(t)m(yp)s(e)f(meta)i
-(digits)c(b)s(efore)150 4902 y(the)31 b(command.)42 b(If)30
-b(the)h(\014rst)f(`digit')g(t)m(yp)s(ed)h(is)f(a)h(min)m(us)e(sign)h
-(\(`)p Fs(-)p Ft('\),)i(then)f(the)g(sign)e(of)i(the)g(argumen)m(t)150
-5011 y(will)36 b(b)s(e)h(negativ)m(e.)65 b(Once)38 b(y)m(ou)h(ha)m(v)m
-(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)e(to)h(get)i(the)e(argumen)m(t)h
-(started,)i(y)m(ou)150 5121 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)e
-(of)i(the)g(digits,)f(and)h(then)f(the)h(command.)40
-b(F)-8 b(or)30 b(example,)f(to)g(giv)m(e)h(the)f Fj(C-d)150
-5230 y Ft(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)e
-(t)m(yp)s(e)i(`)p Fs(M-1)29 b(0)h(C-d)p Ft(',)39 b(whic)m(h)d(will)f
-(delete)j(the)f(next)h(ten)150 5340 y(c)m(haracters)32
-b(on)e(the)h(input)d(line.)p eop
+b(can)h(pass)f(n)m(umeric)g(argumen)m(ts)g(to)h(Readline)g(commands.)40
+b(Sometimes)30 b(the)f(argumen)m(t)h(acts)150 4306 y(as)40
+b(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g
+Fm(sign)47 b Ft(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m
+(t.)71 b(If)40 b(y)m(ou)150 4416 y(pass)33 b(a)h(negativ)m(e)i(argumen)
+m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m
+(ard)f(direction,)i(that)150 4525 y(command)g(will)h(act)g(in)f(a)h
+(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g
+(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 4635 y(the)31
+b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fs(M--)f(C-k)p
+Ft('.)275 4792 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g
+(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i
+(digits)e(b)s(efore)150 4902 y(the)j(command.)42 b(If)30
+b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h
+(\(`)p Fs(-)p Ft('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150
+5011 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m
+(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h
+(started,)i(y)m(ou)150 5121 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f
+(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40
+b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fj(C-d)150
+5230 y Ft(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f
+(t)m(yp)s(e)h(`)p Fs(M-1)29 b(0)h(C-d)p Ft(',)39 b(whic)m(h)e(will)h
+(delete)h(the)e(next)h(ten)150 5340 y(c)m(haracters)32
+b(on)e(the)h(input)e(line.)p eop end
%%Page: 86 92
-86 91 bop 150 -116 a Ft(86)2572 b(Bash)31 b(Reference)g(Man)m(ual)150
-299 y Fk(8.2.5)63 b(Searc)m(hing)40 b(for)h(Commands)f(in)h(the)g
-(History)275 548 y Ft(Readline)21 b(pro)m(vides)h(commands)g(for)h
-(searc)m(hing)g(through)f(the)h(command)g(history)e(\(see)j(Section)f
-(9.1)150 657 y([Bash)37 b(History)g(F)-8 b(acilities],)38
-b(page)f(109\))i(for)d(lines)f(con)m(taining)i(a)g(sp)s(eci\014ed)e
-(string.)59 b(There)36 b(are)i(t)m(w)m(o)150 767 y(searc)m(h)31
-b(mo)s(des:)40 b Fq(incremen)m(tal)33 b Ft(and)d Fq(non-incremen)m(tal)
-p Ft(.)275 906 y(Incremen)m(tal)25 b(searc)m(hes)i(b)s(egin)d(b)s
-(efore)h(the)h(user)f(has)h(\014nished)d(t)m(yping)i(the)h(searc)m(h)g
-(string.)38 b(As)26 b(eac)m(h)150 1015 y(c)m(haracter)37
-b(of)e(the)h(searc)m(h)g(string)e(is)h(t)m(yp)s(ed,)h(Readline)e
-(displa)m(ys)g(the)h(next)h(en)m(try)g(from)e(the)i(history)150
-1125 y(matc)m(hing)24 b(the)g(string)f(t)m(yp)s(ed)h(so)g(far.)39
-b(An)23 b(incremen)m(tal)h(searc)m(h)g(requires)f(only)g(as)h(man)m(y)g
-(c)m(haracters)i(as)150 1235 y(needed)i(to)i(\014nd)d(the)i(desired)e
-(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m
-(ard)f(in)e(the)i(history)f(for)g(a)i(particular)150
-1344 y(string,)f(t)m(yp)s(e)g Fj(C-r)p Ft(.)40 b(T)m(yping)28
-b Fj(C-s)h Ft(searc)m(hes)h(forw)m(ard)f(through)g(the)g(history)-8
-b(.)40 b(The)29 b(c)m(haracters)i(presen)m(t)150 1454
-y(in)37 b(the)h(v)-5 b(alue)37 b(of)h(the)g Fs(isearch-terminators)33
-b Ft(v)-5 b(ariable)37 b(are)h(used)f(to)i(terminate)f(an)g(incremen)m
-(tal)150 1563 y(searc)m(h.)63 b(If)38 b(that)g(v)-5 b(ariable)36
-b(has)i(not)g(b)s(een)f(assigned)g(a)h(v)-5 b(alue,)39
-b(the)2578 1560 y Fg(h)p 2602 1507 139 4 v 2602 1563
-a Ff(ESC)p 2602 1579 V 2736 1560 a Fg(i)2804 1563 y Ft(and)e
-Fj(C-J)f Ft(c)m(haracters)k(will)150 1673 y(terminate)i(an)h(incremen)m
-(tal)e(searc)m(h.)78 b Fj(C-g)41 b Ft(will)f(ab)s(ort)i(an)g(incremen)m
-(tal)g(searc)m(h)h(and)f(restore)h(the)150 1782 y(original)27
-b(line.)39 b(When)28 b(the)h(searc)m(h)h(is)e(terminated,)h(the)g
-(history)f(en)m(try)h(con)m(taining)f(the)h(searc)m(h)h(string)150
-1892 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 2031
-y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)f(en)m(tries)g(in)e(the)i
-(history)f(list,)g(t)m(yp)s(e)i Fj(C-r)e Ft(or)h Fj(C-s)f
-Ft(as)h(appropriate.)42 b(This)150 2141 y(will)23 b(searc)m(h)k(bac)m
-(kw)m(ard)g(or)f(forw)m(ard)g(in)e(the)j(history)e(for)h(the)g(next)g
-(en)m(try)h(matc)m(hing)f(the)g(searc)m(h)h(string)150
+TeXDict begin 86 91 bop 150 -116 a Ft(86)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fk(8.2.5)63 b(Searc)m(hing)40
+b(for)i(Commands)g(in)f(the)g(History)275 548 y Ft(Readline)23
+b(pro)m(vides)g(commands)f(for)h(searc)m(hing)h(through)e(the)h
+(command)g(history)f(\(see)i(Section)g(9.1)150 657 y([Bash)37
+b(History)h(F)-8 b(acilities],)42 b(page)37 b(109\))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 767 y(searc)m(h)31 b(mo)s(des:)40
+b Fq(incremen)m(tal)35 b Ft(and)30 b Fq(non-incremen)m(tal)p
+Ft(.)275 906 y(Incremen)m(tal)c(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 1015 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)
+g(string)f(is)h(t)m(yp)s(ed,)g(Readline)g(displa)m(ys)g(the)f(next)h
+(en)m(try)g(from)e(the)i(history)150 1125 y(matc)m(hing)25
+b(the)f(string)g(t)m(yp)s(ed)g(so)g(far.)39 b(An)23 b(incremen)m(tal)j
+(searc)m(h)e(requires)g(only)g(as)g(man)m(y)g(c)m(haracters)i(as)150
+1235 y(needed)i(to)i(\014nd)d(the)i(desired)f(history)h(en)m(try)-8
+b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)
+g(for)f(a)i(particular)150 1344 y(string,)g(t)m(yp)s(e)f
+Fj(C-r)p Ft(.)40 b(T)m(yping)29 b Fj(C-s)g Ft(searc)m(hes)h(forw)m(ard)
+f(through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m
+(t)150 1454 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g
+Fs(isearch-terminators)33 b Ft(v)-5 b(ariable)39 b(are)f(used)f(to)i
+(terminate)g(an)f(incremen)m(tal)150 1563 y(searc)m(h.)63
+b(If)38 b(that)g(v)-5 b(ariable)38 b(has)g(not)g(b)s(een)f(assigned)h
+(a)g(v)-5 b(alue,)40 b(the)2578 1560 y Fg(h)p 2602 1507
+139 4 v 2602 1563 a Ff(ESC)p 2602 1579 V 2736 1560 a
+Fg(i)2804 1563 y Ft(and)d Fj(C-J)f Ft(c)m(haracters)k(will)150
+1673 y(terminate)j(an)g(incremen)m(tal)g(searc)m(h.)78
+b Fj(C-g)41 b Ft(will)i(ab)s(ort)f(an)g(incremen)m(tal)i(searc)m(h)f
+(and)f(restore)h(the)150 1782 y(original)30 b(line.)41
+b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f(history)g(en)m
+(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 1892
+y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 2031 y(T)-8
+b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h
+(history)g(list,)h(t)m(yp)s(e)g Fj(C-r)e Ft(or)h Fj(C-s)f
+Ft(as)h(appropriate.)43 b(This)150 2141 y(will)26 b(searc)m(h)h(bac)m
+(kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g
+(en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150
2250 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i
-(sequence)f(b)s(ound)e(to)i(a)g(Readline)f(command)g(will)e(terminate)j
+(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h
(the)150 2360 y(searc)m(h)22 b(and)e(execute)j(that)e(command.)38
-b(F)-8 b(or)22 b(instance,)g(a)2127 2357 y Fg(h)p 2151
+b(F)-8 b(or)22 b(instance,)h(a)2127 2357 y Fg(h)p 2151
2304 151 4 v 2151 2360 a Ff(RET)p 2151 2375 V 2298 2357
-a Fg(i)2349 2360 y Ft(will)c(terminate)j(the)g(searc)m(h)h(and)e
-(accept)150 2469 y(the)30 b(line,)e(thereb)m(y)h(executing)h(the)f
-(command)g(from)g(the)h(history)e(list.)39 b(A)29 b(mo)m(v)m(emen)m(t)j
-(command)d(will)150 2579 y(terminate)h(the)h(searc)m(h,)g(mak)m(e)h
-(the)e(last)g(line)f(found)g(the)i(curren)m(t)f(line,)f(and)h(b)s(egin)
-f(editing.)275 2718 y(Readline)k(remem)m(b)s(ers)h(the)h(last)g
-(incremen)m(tal)f(searc)m(h)h(string.)53 b(If)34 b(t)m(w)m(o)j
+a Fg(i)2349 2360 y Ft(will)e(terminate)h(the)f(searc)m(h)h(and)e
+(accept)150 2469 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e
+(command)g(from)g(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j
+(command)d(will)150 2579 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h
+(the)e(last)h(line)g(found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)
+g(editing.)275 2718 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h
+(incremen)m(tal)g(searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j
Fj(C-r)p Ft(s)c(are)i(t)m(yp)s(ed)g(without)150 2828
-y(an)m(y)i(in)m(terv)m(ening)e(c)m(haracters)j(de\014ning)d(a)i(new)f
-(searc)m(h)h(string,)g(an)m(y)g(remem)m(b)s(ered)e(searc)m(h)i(string)f
-(is)150 2937 y(used.)275 3076 y(Non-incremen)m(tal)46
-b(searc)m(hes)i(read)e(the)h(en)m(tire)g(searc)m(h)g(string)f(b)s
-(efore)g(starting)g(to)i(searc)m(h)f(for)150 3186 y(matc)m(hing)c
-(history)e(lines.)76 b(The)42 b(searc)m(h)h(string)f(ma)m(y)h(b)s(e)f
+y(an)m(y)i(in)m(terv)m(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f
+(searc)m(h)h(string,)h(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g
+(is)150 2937 y(used.)275 3076 y(Non-incremen)m(tal)48
+b(searc)m(hes)g(read)e(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s
+(efore)f(starting)h(to)h(searc)m(h)f(for)150 3186 y(matc)m(hing)d
+(history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f
(t)m(yp)s(ed)g(b)m(y)g(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150
3295 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150
3564 y Fr(8.3)68 b(Readline)47 b(Init)e(File)275 3813
-y Ft(Although)f(the)h(Readline)f(library)e(comes)k(with)e(a)i(set)f(of)
-g(Emacs-lik)m(e)g(k)m(eybindings)e(installed)150 3922
-y(b)m(y)f(default,)h(it)f(is)e(p)s(ossible)f(to)k(use)e(a)h(di\013eren)
-m(t)f(set)h(of)g(k)m(eybindings.)72 b(An)m(y)42 b(user)f(can)h
-(customize)150 4032 y(programs)32 b(that)h(use)f(Readline)f(b)m(y)i
-(putting)e(commands)h(in)f(an)h Fq(inputrc)k Ft(\014le,)d(con)m(v)m(en)
-m(tionally)f(in)f(his)150 4142 y(home)e(directory)-8
-b(.)40 b(The)28 b(name)g(of)h(this)f(\014le)f(is)h(tak)m(en)i(from)e
-(the)h(v)-5 b(alue)28 b(of)h(the)f(shell)f(v)-5 b(ariable)28
-b Fs(INPUTRC)p Ft(.)150 4251 y(If)i(that)h(v)-5 b(ariable)29
-b(is)g(unset,)i(the)f(default)g(is)f(`)p Fs(~/.inputrc)p
-Ft('.)275 4390 y(When)g(a)h(program)f(whic)m(h)g(uses)g(the)h(Readline)
-e(library)f(starts)j(up,)f(the)h(init)e(\014le)g(is)h(read,)h(and)f
-(the)150 4500 y(k)m(ey)i(bindings)c(are)k(set.)275 4639
-y(In)26 b(addition,)g(the)h Fs(C-x)i(C-r)d Ft(command)h(re-reads)g
-(this)e(init)g(\014le,)i(th)m(us)g(incorp)s(orating)e(an)m(y)i(c)m
-(hanges)150 4748 y(that)k(y)m(ou)g(migh)m(t)f(ha)m(v)m(e)h(made)g(to)g
+y Ft(Although)g(the)g(Readline)h(library)e(comes)i(with)f(a)h(set)f(of)
+g(Emacs-lik)m(e)i(k)m(eybindings)e(installed)150 3922
+y(b)m(y)d(default,)i(it)f(is)e(p)s(ossible)g(to)i(use)e(a)h(di\013eren)
+m(t)g(set)g(of)g(k)m(eybindings.)74 b(An)m(y)42 b(user)f(can)h
+(customize)150 4032 y(programs)32 b(that)h(use)f(Readline)h(b)m(y)g
+(putting)f(commands)g(in)g(an)g Fq(inputrc)37 b Ft(\014le,)d(con)m(v)m
+(en)m(tionally)h(in)d(his)150 4142 y(home)d(directory)-8
+b(.)41 b(The)28 b(name)g(of)h(this)g(\014le)f(is)h(tak)m(en)h(from)e
+(the)h(v)-5 b(alue)29 b(of)g(the)f(shell)h(v)-5 b(ariable)30
+b Fs(INPUTRC)p Ft(.)150 4251 y(If)g(that)h(v)-5 b(ariable)31
+b(is)f(unset,)h(the)f(default)h(is)f(`)p Fs(~/.inputrc)p
+Ft('.)275 4390 y(When)f(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 4500 y(k)m(ey)i(bindings)e(are)i(set.)275 4639
+y(In)26 b(addition,)i(the)f Fs(C-x)i(C-r)d Ft(command)h(re-reads)g
+(this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m
+(hanges)150 4748 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g
(it.)150 4982 y Fk(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)275
-5230 y Ft(There)33 b(are)h(only)f(a)h(few)f(basic)g(constructs)h(allo)m
-(w)m(ed)f(in)g(the)h(Readline)e(init)g(\014le.)50 b(Blank)33
-b(lines)f(are)150 5340 y(ignored.)71 b(Lines)40 b(b)s(eginning)e(with)i
-(a)h(`)p Fs(#)p Ft(')g(are)h(commen)m(ts.)73 b(Lines)40
-b(b)s(eginning)e(with)h(a)j(`)p Fs($)p Ft(')f(indicate)p
-eop
+5230 y Ft(There)33 b(are)h(only)g(a)g(few)f(basic)h(constructs)g(allo)m
+(w)m(ed)h(in)f(the)g(Readline)g(init)g(\014le.)51 b(Blank)34
+b(lines)g(are)150 5340 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h
+(a)g(`)p Fs(#)p Ft(')g(are)h(commen)m(ts.)73 b(Lines)41
+b(b)s(eginning)f(with)g(a)i(`)p Fs($)p Ft(')f(indicate)p
+eop end
%%Page: 87 93
-87 92 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(87)150 299 y(conditional)40 b(constructs)h
-(\(see)i(Section)e(8.3.2)i([Conditional)c(Init)h(Constructs],)k(page)f
-(91\).)74 b(Other)150 408 y(lines)29 b(denote)i(v)-5
-b(ariable)29 b(settings)h(and)g(k)m(ey)h(bindings.)150
-562 y(V)-8 b(ariable)30 b(Settings)630 671 y(Y)-8 b(ou)41
-b(can)g(mo)s(dify)d(the)j(run-time)e(b)s(eha)m(vior)g(of)i(Readline)e
-(b)m(y)h(altering)f(the)i(v)-5 b(alues)40 b(of)630 781
-y(v)-5 b(ariables)32 b(in)g(Readline)h(using)f(the)h
-Fs(set)g Ft(command)g(within)e(the)j(init)e(\014le.)49
-b(The)33 b(syn)m(tax)630 891 y(is)c(simple:)870 1022
+TeXDict begin 87 92 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(87)150 299 y(conditional)43
+b(constructs)e(\(see)i(Section)f(8.3.2)h([Conditional)f(Init)f
+(Constructs],)j(page)f(91\).)74 b(Other)150 408 y(lines)31
+b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150
+562 y(V)-8 b(ariable)32 b(Settings)630 671 y(Y)-8 b(ou)41
+b(can)g(mo)s(dify)e(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g
+(b)m(y)f(altering)h(the)g(v)-5 b(alues)41 b(of)630 781
+y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g
+Fs(set)g Ft(command)g(within)g(the)h(init)g(\014le.)50
+b(The)33 b(syn)m(tax)630 891 y(is)d(simple:)870 1022
y Fs(set)47 b Fj(variable)56 b(value)630 1154 y Ft(Here,)29
-b(for)e(example,)g(is)g(ho)m(w)g(to)h(c)m(hange)g(from)f(the)g(default)
-g(Emacs-lik)m(e)g(k)m(ey)h(binding)c(to)630 1263 y(use)30
-b Fs(vi)g Ft(line)f(editing)g(commands:)870 1395 y Fs(set)47
-b(editing-mode)d(vi)630 1526 y Ft(V)-8 b(ariable)34 b(names)h(and)g(v)
--5 b(alues,)35 b(where)g(appropriate,)g(are)h(recognized)f(without)f
-(regard)630 1636 y(to)d(case.)630 1767 y(The)37 b Fs(bind)30
-b(-V)37 b Ft(command)g(lists)g(the)h(curren)m(t)f(Readline)g(v)-5
-b(ariable)36 b(names)i(and)f(v)-5 b(alues.)630 1877 y(See)31
-b(Section)f(4.2)h([Bash)g(Builtins],)d(page)j(39.)630
-2008 y(A)f(great)i(deal)e(of)h(run-time)e(b)s(eha)m(vior)g(is)g(c)m
-(hangeable)j(with)d(the)h(follo)m(wing)f(v)-5 b(ariables.)630
-2162 y Fs(bell-style)1110 2271 y Ft(Con)m(trols)43 b(what)h(happ)s(ens)
-e(when)h(Readline)g(w)m(an)m(ts)h(to)h(ring)d(the)i(termi-)1110
-2381 y(nal)36 b(b)s(ell.)59 b(If)37 b(set)h(to)g(`)p
-Fs(none)p Ft(',)g(Readline)e(nev)m(er)i(rings)d(the)j(b)s(ell.)59
+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 1263 y(use)k
+Fs(vi)g Ft(line)h(editing)g(commands:)870 1395 y Fs(set)47
+b(editing-mode)d(vi)630 1526 y Ft(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 1636 y(to)c(case.)630 1767 y(The)37 b Fs(bind)30
+b(-V)37 b Ft(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 1877 y(See)31
+b(Section)g(4.2)g([Bash)g(Builtins],)g(page)g(39.)630
+2008 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
+2162 y Fs(bell-style)1110 2271 y Ft(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
+2381 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p
+Fs(none)p Ft(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61
b(If)36 b(set)i(to)1110 2491 y(`)p Fs(visible)p Ft(',)32
-b(Readline)g(uses)h(a)g(visible)d(b)s(ell)h(if)h(one)h(is)f(a)m(v)-5
-b(ailable.)48 b(If)33 b(set)g(to)1110 2600 y(`)p Fs(audible)p
-Ft(')j(\(the)i(default\),)h(Readline)d(attempts)i(to)h(ring)d(the)h
+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 2600 y(`)p Fs(audible)p
+Ft(')j(\(the)i(default\),)i(Readline)e(attempts)g(to)h(ring)e(the)g
(terminal's)1110 2710 y(b)s(ell.)630 2863 y Fs(comment-begin)1110
-2973 y Ft(The)29 b(string)f(to)i(insert)e(at)i(the)f(b)s(eginning)e(of)
-i(the)h(line)d(when)h(the)i Fs(insert-)1110 3082 y(comment)e
-Ft(command)j(is)e(executed.)42 b(The)29 b(default)h(v)-5
-b(alue)30 b(is)f Fs("#")p Ft(.)630 3236 y Fs(completion-ignore-case)
-1110 3345 y Ft(If)e(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)e(p)s
-(erforms)g(\014lename)g(matc)m(hing)i(and)f(completion)1110
-3455 y(in)i(a)i(case-insensitiv)m(e)f(fashion.)39 b(The)30
-b(default)g(v)-5 b(alue)29 b(is)h(`)p Fs(off)p Ft('.)630
-3608 y Fs(completion-query-items)1110 3718 y Ft(The)c(n)m(um)m(b)s(er)f
-(of)h(p)s(ossible)e(completions)h(that)i(determines)e(when)g(the)i
-(user)1110 3828 y(is)h(ask)m(ed)i(whether)f(the)h(list)e(of)h(p)s
-(ossibilities)c(should)i(b)s(e)i(displa)m(y)m(ed.)39
-b(If)29 b(the)1110 3937 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)d
-(completions)i(is)g(greater)i(than)e(this)g(v)-5 b(alue,)27
-b(Readline)1110 4047 y(will)d(ask)j(the)f(user)g(whether)g(or)g(not)h
-(he)f(wishes)f(to)j(view)d(them;)j(otherwise,)1110 4156
-y(they)d(are)f(simply)e(listed.)38 b(This)22 b(v)-5 b(ariable)23
-b(m)m(ust)i(b)s(e)e(set)i(to)g(an)g(in)m(teger)f(v)-5
-b(alue)1110 4266 y(greater)32 b(than)e(or)g(equal)g(to)h(0.)41
-b(The)30 b(default)g(limit)e(is)h Fs(100)p Ft(.)630 4419
+2973 y Ft(The)29 b(string)g(to)h(insert)f(at)h(the)f(b)s(eginning)g(of)
+g(the)h(line)f(when)f(the)i Fs(insert-)1110 3082 y(comment)e
+Ft(command)j(is)f(executed.)42 b(The)29 b(default)i(v)-5
+b(alue)31 b(is)f Fs("#")p Ft(.)630 3236 y Fs(completion-ignore-case)
+1110 3345 y Ft(If)d(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)g(p)s
+(erforms)e(\014lename)h(matc)m(hing)i(and)e(completion)1110
+3455 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 Fs(off)p Ft('.)630
+3608 y Fs(completion-query-items)1110 3718 y Ft(The)26
+b(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 3828 y(is)i(ask)m(ed)h(whether)f(the)h(list)g
+(of)f(p)s(ossibilities)h(should)e(b)s(e)h(displa)m(y)m(ed.)41
+b(If)29 b(the)1110 3937 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)f
+(completions)i(is)f(greater)h(than)e(this)h(v)-5 b(alue,)28
+b(Readline)1110 4047 y(will)f(ask)g(the)f(user)g(whether)g(or)g(not)h
+(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 4156
+y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25
+b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5
+b(alue)1110 4266 y(greater)32 b(than)e(or)g(equal)h(to)g(0.)41
+b(The)30 b(default)h(limit)g(is)f Fs(100)p Ft(.)630 4419
y Fs(convert-meta)1110 4529 y Ft(If)22 b(set)g(to)h(`)p
-Fs(on)p Ft(',)h(Readline)d(will)e(con)m(v)m(ert)24 b(c)m(haracters)f
-(with)e(the)h(eigh)m(th)g(bit)f(set)1110 4639 y(to)h(an)f
-Fl(asci)r(i)g Ft(k)m(ey)h(sequence)g(b)m(y)f(stripping)d(the)k(eigh)m
-(th)f(bit)f(and)h(pre\014xing)e(an)1110 4745 y Fg(h)p
-1134 4692 139 4 v 1134 4748 a Ff(ESC)p 1134 4764 V 1268
-4745 a Fg(i)1332 4748 y Ft(c)m(haracter,)36 b(con)m(v)m(erting)f(them)f
-(to)g(a)h(meta-pre\014xed)f(k)m(ey)g(sequence.)1110 4858
-y(The)c(default)f(v)-5 b(alue)30 b(is)g(`)p Fs(on)p Ft('.)630
-5011 y Fs(disable-completion)1110 5121 y Ft(If)36 b(set)h(to)h(`)p
-Fs(On)p Ft(',)g(Readline)d(will)f(inhibit)f(w)m(ord)k(completion.)58
-b(Completion)1110 5230 y(c)m(haracters)28 b(will)23 b(b)s(e)i(inserted)
-g(in)m(to)h(the)h(line)d(as)i(if)f(they)i(had)e(b)s(een)g(mapp)s(ed)
-1110 5340 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30
-b(default)f(is)h(`)p Fs(off)p Ft('.)p eop
+Fs(on)p Ft(',)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 4639 y(to)g(an)f Fl(asci)r(i)g
+Ft(k)m(ey)h(sequence)g(b)m(y)f(stripping)f(the)i(eigh)m(th)g(bit)f(and)
+g(pre\014xing)f(an)1110 4745 y Fg(h)p 1134 4692 139 4
+v 1134 4748 a Ff(ESC)p 1134 4764 V 1268 4745 a Fg(i)1332
+4748 y Ft(c)m(haracter,)36 b(con)m(v)m(erting)g(them)e(to)g(a)h
+(meta-pre\014xed)f(k)m(ey)g(sequence.)1110 4858 y(The)c(default)g(v)-5
+b(alue)31 b(is)g(`)p Fs(on)p Ft('.)630 5011 y Fs(disable-completion)
+1110 5121 y Ft(If)36 b(set)h(to)h(`)p Fs(On)p Ft(',)g(Readline)f(will)g
+(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110
+5230 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
+5340 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30 b(default)g(is)h(`)p
+Fs(off)p Ft('.)p eop end
%%Page: 88 94
-88 93 bop 150 -116 a Ft(88)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y Fs(editing-mode)1110 408 y Ft(The)d Fs(editing-mode)e
-Ft(v)-5 b(ariable)27 b(con)m(trols)i(whic)m(h)e(default)h(set)i(of)e(k)
-m(ey)i(bind-)1110 518 y(ings)24 b(is)g(used.)38 b(By)26
-b(default,)f(Readline)f(starts)h(up)f(in)g(Emacs)h(editing)f(mo)s(de,)
-1110 628 y(where)29 b(the)g(k)m(eystrok)m(es)i(are)e(most)h(similar)c
-(to)k(Emacs.)40 b(This)28 b(v)-5 b(ariable)28 b(can)1110
-737 y(b)s(e)i(set)h(to)g(either)f(`)p Fs(emacs)p Ft(')f(or)h(`)p
-Fs(vi)p Ft('.)630 934 y Fs(enable-keypad)1110 1044 y
-Ft(When)23 b(set)h(to)g(`)p Fs(on)p Ft(',)h(Readline)d(will)f(try)i(to)
-h(enable)f(the)g(application)f(k)m(eypad)1110 1154 y(when)k(it)g(is)f
-(called.)39 b(Some)27 b(systems)f(need)h(this)e(to)i(enable)f(the)h
-(arro)m(w)g(k)m(eys.)1110 1263 y(The)j(default)f(is)h(`)p
-Fs(off)p Ft('.)630 1461 y Fs(expand-tilde)1110 1570 y
-Ft(If)d(set)h(to)h(`)p Fs(on)p Ft(',)f(tilde)e(expansion)h(is)f(p)s
-(erformed)g(when)h(Readline)f(attempts)1110 1680 y(w)m(ord)k
-(completion.)40 b(The)30 b(default)f(is)h(`)p Fs(off)p
-Ft('.)1110 1833 y(If)f(set)i(to)f(`)p Fs(on)p Ft(',)g(the)g(history)f
-(co)s(de)h(attempts)g(to)h(place)e(p)s(oin)m(t)g(at)i(the)f(same)1110
-1943 y(lo)s(cation)j(on)g(eac)m(h)i(history)d(line)g(retriev)m(ed)h
-(with)f Fs(previous-history)d Ft(or)1110 2052 y Fs(next-history)p
+TeXDict begin 88 93 bop 150 -116 a Ft(88)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y Fs(editing-mode)1110
+408 y Ft(The)d Fs(editing-mode)e Ft(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
+518 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 628 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 737 y(b)s(e)g(set)h(to)g
+(either)g(`)p Fs(emacs)p Ft(')e(or)h(`)p Fs(vi)p Ft('.)630
+934 y Fs(enable-keypad)1110 1044 y Ft(When)23 b(set)h(to)g(`)p
+Fs(on)p Ft(',)h(Readline)f(will)g(try)f(to)h(enable)g(the)f
+(application)i(k)m(eypad)1110 1154 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 1263 y(The)j(default)g(is)h(`)p Fs(off)p Ft('.)630
+1461 y Fs(expand-tilde)1110 1570 y Ft(If)c(set)h(to)h(`)p
+Fs(on)p Ft(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h
+(Readline)h(attempts)1110 1680 y(w)m(ord)i(completion.)42
+b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)1110 1833
+y(If)e(set)i(to)f(`)p Fs(on)p Ft(',)g(the)g(history)g(co)s(de)g
+(attempts)g(to)h(place)f(p)s(oin)m(t)g(at)h(the)f(same)1110
+1943 y(lo)s(cation)35 b(on)e(eac)m(h)i(history)e(line)h(retriev)m(ed)g
+(with)f Fs(previous-history)c Ft(or)1110 2052 y Fs(next-history)p
Ft(.)630 2250 y Fs(horizontal-scroll-mode)1110 2359 y
-Ft(This)34 b(v)-5 b(ariable)35 b(can)h(b)s(e)f(set)h(to)h(either)e(`)p
-Fs(on)p Ft(')h(or)g(`)p Fs(off)p Ft('.)57 b(Setting)35
-b(it)g(to)i(`)p Fs(on)p Ft(')1110 2469 y(means)26 b(that)h(the)f(text)h
-(of)g(the)f(lines)e(b)s(eing)h(edited)h(will)d(scroll)i(horizon)m
-(tally)1110 2578 y(on)32 b(a)g(single)e(screen)i(line)e(when)g(they)i
-(are)g(longer)g(than)f(the)h(width)e(of)i(the)1110 2688
-y(screen,)27 b(instead)f(of)g(wrapping)e(on)m(to)j(a)f(new)g(screen)g
-(line.)37 b(By)27 b(default,)f(this)1110 2798 y(v)-5
-b(ariable)29 b(is)h(set)g(to)i(`)p Fs(off)p Ft('.)630
+Ft(This)35 b(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f(`)p
+Fs(on)p Ft(')g(or)g(`)p Fs(off)p Ft('.)57 b(Setting)36
+b(it)g(to)h(`)p Fs(on)p Ft(')1110 2469 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 2578 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 2688
+y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g
+(line.)39 b(By)27 b(default,)g(this)1110 2798 y(v)-5
+b(ariable)31 b(is)g(set)f(to)i(`)p Fs(off)p Ft('.)630
2995 y Fs(input-meta)1110 3104 y Ft(If)f(set)g(to)h(`)p
-Fs(on)p Ft(',)g(Readline)e(will)e(enable)j(eigh)m(t-bit)g(input)e(\(it)
-i(will)d(not)k(clear)1110 3214 y(the)40 b(eigh)m(th)f(bit)g(in)f(the)i
-(c)m(haracters)h(it)e(reads\),)k(regardless)38 b(of)i(what)g(the)1110
-3324 y(terminal)e(claims)h(it)h(can)g(supp)s(ort.)68
-b(The)39 b(default)g(v)-5 b(alue)39 b(is)g(`)p Fs(off)p
-Ft('.)69 b(The)1110 3433 y(name)30 b Fs(meta-flag)e Ft(is)i(a)g(synon)m
-(ym)g(for)g(this)g(v)-5 b(ariable.)630 3630 y Fs(isearch-terminators)
-1110 3740 y Ft(The)51 b(string)g(of)h(c)m(haracters)h(that)f(should)d
-(terminate)j(an)g(incremen)m(tal)1110 3850 y(searc)m(h)25
-b(without)f(subsequen)m(tly)g(executing)h(the)g(c)m(haracter)h(as)f(a)g
-(command)1110 3959 y(\(see)42 b(Section)e(8.2.5)j([Searc)m(hing],)h
-(page)d(86\).)73 b(If)41 b(this)f(v)-5 b(ariable)39 b(has)i(not)1110
-4069 y(b)s(een)31 b(giv)m(en)g(a)h(v)-5 b(alue,)31 b(the)h(c)m
+Fs(on)p Ft(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it)
+i(will)f(not)h(clear)1110 3214 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
+3324 y(terminal)g(claims)h(it)g(can)f(supp)s(ort.)68
+b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fs(off)p
+Ft('.)69 b(The)1110 3433 y(name)30 b Fs(meta-flag)e Ft(is)j(a)f(synon)m
+(ym)g(for)g(this)h(v)-5 b(ariable.)630 3630 y Fs(isearch-terminators)
+1110 3740 y Ft(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e
+(terminate)j(an)f(incremen)m(tal)1110 3850 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 3959 y(\(see)42 b(Section)f(8.2.5)i([Searc)m(hing],)i
+(page)c(86\).)73 b(If)41 b(this)g(v)-5 b(ariable)41 b(has)g(not)1110
+4069 y(b)s(een)31 b(giv)m(en)h(a)g(v)-5 b(alue,)32 b(the)g(c)m
(haracters)2494 4066 y Fg(h)p 2518 4013 139 4 v 2518
4069 a Ff(ESC)p 2518 4084 V 2652 4066 a Fg(i)2713 4069
-y Ft(and)f Fj(C-J)g Ft(will)e(terminate)i(an)1110 4178
-y(incremen)m(tal)f(searc)m(h.)630 4376 y Fs(keymap)192
-b Ft(Sets)39 b(Readline's)e(idea)i(of)g(the)g(curren)m(t)f(k)m(eymap)h
-(for)g(k)m(ey)g(binding)d(com-)1110 4485 y(mands.)81
-b(Acceptable)46 b Fs(keymap)c Ft(names)i(are)h Fs(emacs)p
+y Ft(and)f Fj(C-J)g Ft(will)h(terminate)g(an)1110 4178
+y(incremen)m(tal)g(searc)m(h.)630 4376 y Fs(keymap)192
+b Ft(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h
+(for)g(k)m(ey)g(binding)f(com-)1110 4485 y(mands.)81
+b(Acceptable)47 b Fs(keymap)42 b Ft(names)i(are)h Fs(emacs)p
Ft(,)i Fs(emacs-standard)p Ft(,)1110 4595 y Fs(emacs-meta)p
Ft(,)99 b Fs(emacs-ctlx)p Ft(,)f Fs(vi)p Ft(,)j Fs(vi-move)p
Ft(,)f Fs(vi-command)p Ft(,)f(and)1110 4704 y Fs(vi-insert)p
-Ft(.)64 b Fs(vi)38 b Ft(is)g(equiv)-5 b(alen)m(t)39 b(to)g
-Fs(vi-command)p Ft(;)i Fs(emacs)c Ft(is)h(equiv)-5 b(alen)m(t)1110
-4814 y(to)33 b Fs(emacs-standard)p Ft(.)41 b(The)31 b(default)g(v)-5
-b(alue)31 b(is)g Fs(emacs)p Ft(.)44 b(The)31 b(v)-5 b(alue)32
-b(of)g(the)1110 4924 y Fs(editing-mode)27 b Ft(v)-5 b(ariable)29
-b(also)i(a\013ects)g(the)g(default)e(k)m(eymap.)630 5121
+Ft(.)64 b Fs(vi)38 b Ft(is)h(equiv)-5 b(alen)m(t)41 b(to)e
+Fs(vi-command)p Ft(;)i Fs(emacs)c Ft(is)i(equiv)-5 b(alen)m(t)1110
+4814 y(to)33 b Fs(emacs-standard)p Ft(.)41 b(The)31 b(default)h(v)-5
+b(alue)32 b(is)g Fs(emacs)p Ft(.)44 b(The)31 b(v)-5 b(alue)33
+b(of)f(the)1110 4924 y Fs(editing-mode)27 b Ft(v)-5 b(ariable)31
+b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 5121
y Fs(mark-directories)1110 5230 y Ft(If)38 b(set)g(to)h(`)p
-Fs(on)p Ft(',)i(completed)d(directory)f(names)h(ha)m(v)m(e)i(a)e(slash)
-f(app)s(ended.)1110 5340 y(The)30 b(default)f(is)h(`)p
-Fs(on)p Ft('.)p eop
+Fs(on)p Ft(',)i(completed)e(directory)f(names)g(ha)m(v)m(e)i(a)e(slash)
+g(app)s(ended.)1110 5340 y(The)30 b(default)g(is)h(`)p
+Fs(on)p Ft('.)p eop end
%%Page: 89 95
-89 94 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(89)630 299 y Fs(mark-modified-lines)1110
-408 y Ft(This)34 b(v)-5 b(ariable,)36 b(when)f(set)h(to)h(`)p
-Fs(on)p Ft(',)g(causes)g(Readline)d(to)j(displa)m(y)d(an)h(as-)1110
-518 y(terisk)e(\(`)p Fs(*)p Ft('\))i(at)f(the)g(start)g(of)g(history)f
-(lines)f(whic)m(h)g(ha)m(v)m(e)j(b)s(een)e(mo)s(di\014ed.)1110
-628 y(This)c(v)-5 b(ariable)29 b(is)g(`)p Fs(off)p Ft(')h(b)m(y)g
-(default.)630 786 y Fs(mark-symlinked-directori)o(es)1110
-896 y Ft(If)44 b(set)h(to)h(`)p Fs(on)p Ft(',)i(completed)d(names)g
-(whic)m(h)e(are)i(sym)m(b)s(olic)e(links)g(to)i(di-)1110
-1005 y(rectories)i(ha)m(v)m(e)g(a)g(slash)e(app)s(ended)f(\(sub)5
-b(ject)47 b(to)g(the)f(v)-5 b(alue)46 b(of)g Fs(mark-)1110
-1115 y(directories)p Ft(\).)38 b(The)30 b(default)f(is)h(`)p
-Fs(off)p Ft('.)630 1273 y Fs(match-hidden-files)1110
-1383 y Ft(This)20 b(v)-5 b(ariable,)23 b(when)f(set)g(to)h(`)p
-Fs(on)p Ft(',)h(causes)f(Readline)e(to)i(matc)m(h)g(\014les)e(whose)
-1110 1492 y(names)44 b(b)s(egin)f(with)g(a)h(`)p Fs(.)p
-Ft(')g(\(hidden)e(\014les\))i(when)f(p)s(erforming)f(\014lename)1110
-1602 y(completion,)i(unless)c(the)h(leading)f(`)p Fs(.)p
-Ft(')i(is)f(supplied)d(b)m(y)j(the)h(user)f(in)f(the)1110
-1711 y(\014lename)30 b(to)h(b)s(e)e(completed.)41 b(This)29
-b(v)-5 b(ariable)29 b(is)g(`)p Fs(on)p Ft(')i(b)m(y)f(default.)630
+TeXDict begin 89 94 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(89)630 299 y Fs
+(mark-modified-lines)1110 408 y Ft(This)35 b(v)-5 b(ariable,)38
+b(when)d(set)h(to)h(`)p Fs(on)p Ft(',)g(causes)g(Readline)f(to)h
+(displa)m(y)f(an)f(as-)1110 518 y(terisk)f(\(`)p Fs(*)p
+Ft('\))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 628 y(This)d(v)-5
+b(ariable)31 b(is)f(`)p Fs(off)p Ft(')g(b)m(y)g(default.)630
+786 y Fs(mark-symlinked-directori)o(es)1110 896 y Ft(If)44
+b(set)h(to)h(`)p Fs(on)p Ft(',)i(completed)e(names)f(whic)m(h)f(are)h
+(sym)m(b)s(olic)g(links)g(to)g(di-)1110 1005 y(rectories)j(ha)m(v)m(e)f
+(a)g(slash)f(app)s(ended)e(\(sub)5 b(ject)47 b(to)g(the)f(v)-5
+b(alue)47 b(of)f Fs(mark-)1110 1115 y(directories)p Ft(\).)38
+b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 1273
+y Fs(match-hidden-files)1110 1383 y Ft(This)21 b(v)-5
+b(ariable,)25 b(when)d(set)g(to)h(`)p Fs(on)p Ft(',)h(causes)f
+(Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 1492
+y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fs(.)p Ft(')g(\(hidden)f
+(\014les\))i(when)e(p)s(erforming)g(\014lename)1110 1602
+y(completion,)j(unless)41 b(the)g(leading)h(`)p Fs(.)p
+Ft(')g(is)g(supplied)e(b)m(y)h(the)h(user)f(in)g(the)1110
+1711 y(\014lename)31 b(to)g(b)s(e)e(completed.)42 b(This)30
+b(v)-5 b(ariable)31 b(is)f(`)p Fs(on)p Ft(')h(b)m(y)f(default.)630
1870 y Fs(output-meta)1110 1979 y Ft(If)35 b(set)h(to)g(`)p
-Fs(on)p Ft(',)h(Readline)d(will)f(displa)m(y)g(c)m(haracters)k(with)d
-(the)i(eigh)m(th)f(bit)1110 2089 y(set)i(directly)e(rather)h(than)g(as)
+Fs(on)p Ft(',)h(Readline)f(will)g(displa)m(y)f(c)m(haracters)i(with)e
+(the)h(eigh)m(th)g(bit)1110 2089 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
-2198 y(default)30 b(is)f(`)p Fs(off)p Ft('.)630 2357
-y Fs(page-completions)1110 2466 y Ft(If)k(set)i(to)f(`)p
-Fs(on)p Ft(',)h(Readline)e(uses)g(an)h(in)m(ternal)f
-Fs(more)p Ft(-lik)m(e)f(pager)i(to)h(displa)m(y)1110
-2576 y(a)e(screenful)e(of)h(p)s(ossible)e(completions)i(at)h(a)g(time.)
-46 b(This)30 b(v)-5 b(ariable)32 b(is)f(`)p Fs(on)p Ft(')1110
-2685 y(b)m(y)f(default.)630 2844 y Fs(print-completions-horizo)o(ntal)o
-(ly)1110 2953 y Ft(If)23 b(set)i(to)g(`)p Fs(on)p Ft(',)g(Readline)e
-(will)e(displa)m(y)h(completions)h(with)g(matc)m(hes)i(sorted)1110
-3063 y(horizon)m(tally)42 b(in)g(alphab)s(etical)g(order,)47
-b(rather)c(than)g(do)m(wn)g(the)h(screen.)1110 3173 y(The)30
-b(default)f(is)h(`)p Fs(off)p Ft('.)630 3331 y Fs
-(show-all-if-ambiguous)1110 3440 y Ft(This)e(alters)i(the)g(default)f
-(b)s(eha)m(vior)g(of)h(the)h(completion)e(functions.)39
-b(If)29 b(set)1110 3550 y(to)f(`)p Fs(on)p Ft(',)g(w)m(ords)f(whic)m(h)
-f(ha)m(v)m(e)j(more)f(than)f(one)h(p)s(ossible)d(completion)h(cause)
-1110 3660 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)f(immediately)h
-(instead)g(of)h(ringing)e(the)i(b)s(ell.)1110 3769 y(The)30
-b(default)f(v)-5 b(alue)30 b(is)g(`)p Fs(off)p Ft('.)630
-3927 y Fs(show-all-if-unmodified)1110 4037 y Ft(This)37
-b(alters)h(the)h(default)f(b)s(eha)m(vior)g(of)g(the)h(completion)f
-(functions)f(in)h(a)1110 4147 y(fashion)24 b(similar)f(to)j
-Fq(sho)m(w-all-if-am)m(biguous)p Ft(.)37 b(If)25 b(set)h(to)h(`)p
-Fs(on)p Ft(',)f(w)m(ords)f(whic)m(h)1110 4256 y(ha)m(v)m(e)32
-b(more)f(than)f(one)i(p)s(ossible)c(completion)i(without)g(an)m(y)h(p)s
-(ossible)d(par-)1110 4366 y(tial)41 b(completion)h(\(the)h(p)s(ossible)
-d(completions)h(don't)h(share)g(a)h(common)1110 4475
-y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)e
-(immediately)h(instead)g(of)i(ring-)1110 4585 y(ing)f(the)g(b)s(ell.)39
-b(The)30 b(default)f(v)-5 b(alue)30 b(is)f(`)p Fs(off)p
-Ft('.)630 4743 y Fs(visible-stats)1110 4853 y Ft(If)i(set)i(to)f(`)p
-Fs(on)p Ft(',)h(a)f(c)m(haracter)i(denoting)d(a)h(\014le's)f(t)m(yp)s
-(e)h(is)f(app)s(ended)f(to)j(the)1110 4963 y(\014lename)d(when)f
-(listing)f(p)s(ossible)g(completions.)40 b(The)30 b(default)f(is)h(`)p
-Fs(off)p Ft('.)150 5121 y(Key)g(Bindings)630 5230 y(The)41
-b(syn)m(tax)i(for)f(con)m(trolling)e(k)m(ey)j(bindings)c(in)i(the)h
-(init)e(\014le)h(is)g(simple.)73 b(First)42 b(y)m(ou)630
+2198 y(default)31 b(is)f(`)p Fs(off)p Ft('.)630 2357
+y Fs(page-completions)1110 2466 y Ft(If)j(set)i(to)f(`)p
+Fs(on)p Ft(',)h(Readline)g(uses)e(an)h(in)m(ternal)h
+Fs(more)p Ft(-lik)m(e)f(pager)g(to)h(displa)m(y)1110
+2576 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 Fs(on)p Ft(')1110
+2685 y(b)m(y)e(default.)630 2844 y Fs(print-completions-horizo)o(ntal)o
+(ly)1110 2953 y Ft(If)23 b(set)i(to)g(`)p Fs(on)p Ft(',)g(Readline)g
+(will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110
+3063 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 3173 y(The)30 b(default)g(is)h(`)p
+Fs(off)p Ft('.)630 3331 y Fs(show-all-if-ambiguous)1110
+3440 y Ft(This)e(alters)i(the)f(default)g(b)s(eha)m(vior)g(of)g(the)h
+(completion)g(functions.)40 b(If)29 b(set)1110 3550 y(to)f(`)p
+Fs(on)p Ft(',)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 3660 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 3769 y(The)30 b(default)g(v)-5
+b(alue)31 b(is)g(`)p Fs(off)p Ft('.)630 3927 y Fs
+(show-all-if-unmodified)1110 4037 y Ft(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 4147 y(fashion)25 b(similar)h(to)g Fq(sho)m(w-all-if-am)m(biguous)
+p Ft(.)41 b(If)25 b(set)h(to)h(`)p Fs(on)p Ft(',)f(w)m(ords)f(whic)m(h)
+1110 4256 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
+4366 y(tial)43 b(completion)h(\(the)f(p)s(ossible)f(completions)h
+(don't)f(share)g(a)h(common)1110 4475 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 4585 y(ing)g(the)f(b)s(ell.)41
+b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fs(off)p
+Ft('.)630 4743 y Fs(visible-stats)1110 4853 y Ft(If)h(set)i(to)f(`)p
+Fs(on)p Ft(',)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 4963 y(\014lename)e(when)e
+(listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p
+Fs(off)p Ft('.)150 5121 y(Key)f(Bindings)630 5230 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
5340 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)p
-eop
+eop end
%%Page: 90 96
-90 95 bop 150 -116 a Ft(90)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(sections)36 b(con)m(tain)g(tables)g(of)g(the)g(command)f(name,)j
-(the)e(default)f(k)m(eybinding,)g(if)g(an)m(y)-8 b(,)630
-408 y(and)30 b(a)h(short)f(description)e(of)j(what)f(the)g(command)h
-(do)s(es.)630 543 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g(the)
-g(command,)h(simply)d(place)i(on)f(a)i(line)d(in)h(the)h(init)630
-653 y(\014le)d(the)h(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)e(to)i
-(bind)e(the)i(command)f(to,)i(a)f(colon,)h(and)e(then)630
+TeXDict begin 90 95 bop 150 -116 a Ft(90)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 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 408 y(and)30 b(a)h(short)f(description)g(of)h(what)f
+(the)g(command)h(do)s(es.)630 543 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 653 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
762 y(the)f(name)g(of)g(the)g(command.)46 b(The)31 b(name)h(of)g(the)g
-(k)m(ey)h(can)f(b)s(e)f(expressed)h(in)e(di\013eren)m(t)630
-872 y(w)m(a)m(ys,)h(dep)s(ending)d(on)j(what)f(y)m(ou)h(\014nd)d(most)j
-(comfortable.)630 1006 y(In)k(addition)f(to)j(command)f(names,)i
-(readline)c(allo)m(ws)h(k)m(eys)i(to)g(b)s(e)e(b)s(ound)f(to)j(a)f
-(string)630 1116 y(that)31 b(is)e(inserted)h(when)f(the)i(k)m(ey)g(is)e
-(pressed)h(\(a)h Fq(macro)5 b Ft(\).)630 1250 y(The)42
-b Fs(bind)30 b(-p)42 b Ft(command)h(displa)m(ys)e(Readline)g(function)h
-(names)h(and)f(bindings)e(in)i(a)630 1360 y(format)37
-b(that)h(can)f(put)f(directly)g(in)m(to)h(an)g(initialization)d
-(\014le.)59 b(See)38 b(Section)e(4.2)j([Bash)630 1469
-y(Builtins],)28 b(page)j(39.)630 1629 y Fq(k)m(eyname)5
-b Ft(:)42 b Fq(function-name)34 b Ft(or)d Fq(macro)1110
-1738 y(k)m(eyname)k Ft(is)28 b(the)g(name)h(of)g(a)g(k)m(ey)h(sp)s
-(elled)c(out)j(in)f(English.)37 b(F)-8 b(or)30 b(example:)1350
+(k)m(ey)h(can)f(b)s(e)f(expressed)h(in)f(di\013eren)m(t)630
+872 y(w)m(a)m(ys,)g(dep)s(ending)e(on)i(what)f(y)m(ou)h(\014nd)d(most)j
+(comfortable.)630 1006 y(In)k(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 1116 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f
+(pressed)g(\(a)h Fq(macro)5 b Ft(\).)630 1250 y(The)42
+b Fs(bind)30 b(-p)42 b Ft(command)h(displa)m(ys)g(Readline)g(function)g
+(names)g(and)f(bindings)g(in)h(a)630 1360 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 1469
+y(Builtins],)31 b(page)g(39.)630 1629 y Fq(k)m(eyname)5
+b Ft(:)42 b Fq(function-name)35 b Ft(or)c Fq(macro)1110
+1738 y(k)m(eyname)k Ft(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
1873 y Fs(Control-u:)45 b(universal-argument)1350 1983
y(Meta-Rubout:)f(backward-kill-word)1350 2092 y(Control-o:)h(">)i
-(output")1110 2227 y Ft(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)g
-Fj(C-u)e Ft(is)g(b)s(ound)e(to)k(the)e(function)g Fs(universal-)1110
-2336 y(argument)p Ft(,)g Fj(M-DEL)e Ft(is)h(b)s(ound)f(to)i(the)g
-(function)f Fs(backward-kill-word)p Ft(,)1110 2446 y(and)h
-Fj(C-o)g Ft(is)g(b)s(ound)f(to)j(run)d(the)j(macro)f(expressed)g(on)f
-(the)i(righ)m(t)e(hand)1110 2555 y(side)29 b(\(that)j(is,)d(to)i
-(insert)f(the)g(text)i(`)p Fs(>)e(output)p Ft(')f(in)m(to)h(the)h
-(line\).)1110 2690 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)e(c)m
-(haracter)k(names)e(are)g(recognized)g(while)e(pro-)1110
-2800 y(cessing)23 b(this)g(k)m(ey)h(binding)d(syn)m(tax:)37
+(output")1110 2227 y Ft(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)h
+Fj(C-u)d Ft(is)h(b)s(ound)d(to)k(the)e(function)h Fs(universal-)1110
+2336 y(argument)p Ft(,)f Fj(M-DEL)e Ft(is)i(b)s(ound)e(to)i(the)g
+(function)g Fs(backward-kill-word)p Ft(,)1110 2446 y(and)g
+Fj(C-o)g Ft(is)h(b)s(ound)e(to)j(run)d(the)j(macro)f(expressed)g(on)f
+(the)i(righ)m(t)f(hand)1110 2555 y(side)30 b(\(that)i(is,)e(to)h
+(insert)g(the)f(text)i(`)p Fs(>)e(output)p Ft(')f(in)m(to)i(the)g
+(line\).)1110 2690 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)g(c)m
+(haracter)i(names)e(are)g(recognized)h(while)f(pro-)1110
+2800 y(cessing)24 b(this)g(k)m(ey)g(binding)f(syn)m(tax:)37
b Fq(DEL)p Ft(,)24 b Fq(ESC)p Ft(,)f Fq(ESCAPE)p Ft(,)g
Fq(LFD)p Ft(,)h Fq(NEW-)1110 2909 y(LINE)p Ft(,)30 b
Fq(RET)p Ft(,)g Fq(RETURN)p Ft(,)h Fq(R)m(UBOUT)p Ft(,)g
Fq(SP)-8 b(A)m(CE)p Ft(,)30 b Fq(SPC)p Ft(,)g(and)f Fq(T)-8
b(AB)p Ft(.)630 3068 y Fs(")p Fq(k)m(eyseq)r Fs(")p Ft(:)41
-b Fq(function-name)35 b Ft(or)30 b Fq(macro)1110 3178
-y(k)m(eyseq)k Ft(di\013ers)c(from)g Fq(k)m(eyname)37
-b Ft(ab)s(o)m(v)m(e)32 b(in)e(that)i(strings)e(denoting)g(an)h(en-)1110
-3288 y(tire)i(k)m(ey)i(sequence)f(can)g(b)s(e)f(sp)s(eci\014ed,)g(b)m
-(y)g(placing)g(the)h(k)m(ey)g(sequence)g(in)1110 3397
-y(double)28 b(quotes.)41 b(Some)29 b Fl(gnu)h Ft(Emacs)f(st)m(yle)h(k)m
-(ey)g(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 3507
-y(in)j(the)i(follo)m(wing)f(example,)h(but)f(the)h(sp)s(ecial)f(c)m
-(haracter)i(names)f(are)g(not)1110 3616 y(recognized.)1350
+b Fq(function-name)36 b Ft(or)30 b Fq(macro)1110 3178
+y(k)m(eyseq)k Ft(di\013ers)d(from)f Fq(k)m(eyname)37
+b Ft(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f(denoting)g(an)g(en-)1110
+3288 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 3397
+y(double)29 b(quotes.)41 b(Some)29 b Fl(gnu)h Ft(Emacs)f(st)m(yle)i(k)m
+(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 3507
+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 3616 y(recognized.)1350
3751 y Fs("\\C-u":)46 b(universal-argument)1350 3861
y("\\C-x\\C-r":)f(re-read-init-file)1350 3970 y("\\e[11~":)g("Function)
-h(Key)g(1")1110 4105 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)73
-b Fj(C-u)64 b Ft(is)f(again)i(b)s(ound)d(to)k(the)e(function)1110
-4214 y Fs(universal-argument)39 b Ft(\(just)k(as)h(it)f(w)m(as)h(in)f
-(the)g(\014rst)g(example\),)48 b(`)p Fj(C-x)1110 4324
-y(C-r)p Ft(')41 b(is)f(b)s(ound)f(to)j(the)f(function)f
-Fs(re-read-init-file)p Ft(,)f(and)i(`)3462 4321 y Fg(h)p
+h(Key)g(1")1110 4105 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74
+b Fj(C-u)64 b Ft(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110
+4214 y Fs(universal-argument)39 b Ft(\(just)k(as)h(it)g(w)m(as)g(in)g
+(the)f(\014rst)g(example\),)49 b(`)p Fj(C-x)1110 4324
+y(C-r)p Ft(')41 b(is)g(b)s(ound)e(to)j(the)f(function)g
+Fs(re-read-init-file)p Ft(,)e(and)i(`)3462 4321 y Fg(h)p
3486 4268 139 4 v 3486 4324 a Ff(ESC)p 3486 4339 V 3620
4321 a Fg(i)31 b(h)p 3705 4268 20 4 v 3705 4324 a Ff([)p
3705 4340 V 3720 4321 a Fg(i)1110 4430 y(h)p 1134 4377
36 4 v 1134 4433 a Ff(1)p 1134 4449 V 1165 4430 a Fg(i)f(h)p
1250 4377 V 1250 4433 a Ff(1)p 1250 4449 V 1281 4430
a Fg(i)g(h)p 1365 4377 48 4 v 1365 4433 a Fs(~)p 1365
-4449 V 1409 4430 a Fg(i)1438 4433 y Ft(')h(is)e(b)s(ound)g(to)i(insert)
-e(the)i(text)g(`)p Fs(Function)d(Key)i(1)p Ft('.)630
-4593 y(The)f(follo)m(wing)f Fl(gnu)i Ft(Emacs)g(st)m(yle)g(escap)s(e)g
-(sequences)g(are)g(a)m(v)-5 b(ailable)29 b(when)g(sp)s(ecifying)630
-4702 y(k)m(ey)i(sequences:)630 4862 y Fj(\\C-)336 b Ft(con)m(trol)31
+4449 V 1409 4430 a Fg(i)1438 4433 y Ft(')h(is)f(b)s(ound)f(to)i(insert)
+f(the)h(text)g(`)p Fs(Function)d(Key)i(1)p Ft('.)630
+4593 y(The)f(follo)m(wing)i Fl(gnu)f Ft(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
+4702 y(k)m(ey)i(sequences:)630 4862 y Fj(\\C-)336 b Ft(con)m(trol)32
b(pre\014x)630 5021 y Fj(\\M-)336 b Ft(meta)31 b(pre\014x)630
5181 y Fj(\\e)384 b Ft(an)30 b(escap)s(e)h(c)m(haracter)630
-5340 y Fj(\\\\)384 b Ft(bac)m(kslash)p eop
+5340 y Fj(\\\\)384 b Ft(bac)m(kslash)p eop end
%%Page: 91 97
-91 96 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(91)630 299 y Fj(\\)p Fs(")1110
-296 y Fg(h)p 1134 243 48 4 v 1134 299 a Fs(")p 1134 314
-V 1178 296 a Fg(i)1208 299 y Ft(,)30 b(a)h(double)e(quotation)h(mark)
-630 460 y Fj(\\')1110 457 y Fg(h)p 1134 403 20 4 v 1134
-460 a Ff(')p 1134 475 V 1150 457 a Fg(i)1179 460 y Ft(,)h(a)g(single)e
-(quote)i(or)f(ap)s(ostrophe)630 620 y(In)d(addition)f(to)i(the)g
-Fl(gnu)f Ft(Emacs)h(st)m(yle)g(escap)s(e)g(sequences,)h(a)f(second)f
-(set)h(of)g(bac)m(kslash)630 730 y(escap)s(es)j(is)e(a)m(v)-5
-b(ailable:)630 890 y Fs(\\a)384 b Ft(alert)30 b(\(b)s(ell\))630
-1051 y Fs(\\b)384 b Ft(bac)m(kspace)630 1212 y Fs(\\d)g
-Ft(delete)630 1372 y Fs(\\f)g Ft(form)30 b(feed)630 1533
-y Fs(\\n)384 b Ft(newline)630 1694 y Fs(\\r)g Ft(carriage)31
-b(return)630 1854 y Fs(\\t)384 b Ft(horizon)m(tal)30
-b(tab)630 2015 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)630
-2176 y Fs(\\)p Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)f(c)m(haracter)i
-(whose)e(v)-5 b(alue)34 b(is)g(the)g(o)s(ctal)h(v)-5
-b(alue)34 b Fq(nnn)f Ft(\(one)i(to)1110 2285 y(three)c(digits\))630
-2446 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)f(c)m(haracter)i
-(whose)e(v)-5 b(alue)38 b(is)h(the)g(hexadecimal)g(v)-5
-b(alue)39 b Fq(HH)1110 2555 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
-(digits\))630 2716 y(When)37 b(en)m(tering)g(the)h(text)g(of)g(a)g
-(macro,)i(single)c(or)h(double)f(quotes)i(m)m(ust)f(b)s(e)g(used)f(to)
-630 2826 y(indicate)21 b(a)g(macro)h(de\014nition.)36
-b(Unquoted)21 b(text)i(is)d(assumed)h(to)h(b)s(e)f(a)h(function)e
-(name.)38 b(In)630 2935 y(the)22 b(macro)f(b)s(o)s(dy)-8
-b(,)23 b(the)e(bac)m(kslash)g(escap)s(es)h(describ)s(ed)d(ab)s(o)m(v)m
-(e)k(are)e(expanded.)37 b(Bac)m(kslash)630 3045 y(will)g(quote)k(an)m
-(y)f(other)g(c)m(haracter)i(in)c(the)j(macro)f(text,)k(including)36
-b(`)p Fs(")p Ft(')k(and)g(`)p Fs(')p Ft('.)69 b(F)-8
-b(or)630 3154 y(example,)27 b(the)f(follo)m(wing)e(binding)e(will)h
-(mak)m(e)k(`)p Fj(C-x)j Fs(\\)p Ft(')c(insert)e(a)i(single)f(`)p
-Fs(\\)p Ft(')h(in)m(to)f(the)h(line:)870 3290 y Fs("\\C-x\\\\":)45
+TeXDict begin 91 96 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(91)630 299 y Fj(\\)p
+Fs(")1110 296 y Fg(h)p 1134 243 48 4 v 1134 299 a Fs(")p
+1134 314 V 1178 296 a Fg(i)1208 299 y Ft(,)30 b(a)h(double)f(quotation)
+h(mark)630 460 y Fj(\\')1110 457 y Fg(h)p 1134 403 20
+4 v 1134 460 a Ff(')p 1134 475 V 1150 457 a Fg(i)1179
+460 y Ft(,)g(a)g(single)g(quote)g(or)f(ap)s(ostrophe)630
+620 y(In)d(addition)h(to)g(the)g Fl(gnu)f Ft(Emacs)h(st)m(yle)h(escap)s
+(e)f(sequences,)h(a)f(second)f(set)h(of)g(bac)m(kslash)630
+730 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 890 y
+Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 1051 y Fs(\\b)384
+b Ft(bac)m(kspace)630 1212 y Fs(\\d)g Ft(delete)630 1372
+y Fs(\\f)g Ft(form)30 b(feed)630 1533 y Fs(\\n)384 b
+Ft(newline)630 1694 y Fs(\\r)g Ft(carriage)32 b(return)630
+1854 y Fs(\\t)384 b Ft(horizon)m(tal)32 b(tab)630 2015
+y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 2176 y Fs(\\)p
+Fj(nnn)288 b Ft(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 Fq(nnn)e
+Ft(\(one)i(to)1110 2285 y(three)c(digits\))630 2446 y
+Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e
+(v)-5 b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5 b(alue)40
+b Fq(HH)1110 2555 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630
+2716 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
+2826 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 2935 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 3045 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 Fs(")p Ft(')h(and)g(`)p Fs(')p Ft('.)69 b(F)-8
+b(or)630 3154 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i
+(mak)m(e)h(`)p Fj(C-x)j Fs(\\)p Ft(')c(insert)f(a)h(single)h(`)p
+Fs(\\)p Ft(')f(in)m(to)g(the)g(line:)870 3290 y Fs("\\C-x\\\\":)45
b("\\\\")150 3516 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs)
-275 3762 y Ft(Readline)34 b(implemen)m(ts)f(a)j(facilit)m(y)f(similar)d
-(in)i(spirit)f(to)j(the)g(conditional)e(compilation)g(features)150
-3871 y(of)h(the)f(C)g(prepro)s(cessor)g(whic)m(h)f(allo)m(ws)h(k)m(ey)h
-(bindings)c(and)j(v)-5 b(ariable)33 b(settings)i(to)g(b)s(e)f(p)s
-(erformed)f(as)150 3981 y(the)e(result)e(of)h(tests.)42
-b(There)30 b(are)h(four)e(parser)h(directiv)m(es)g(used.)150
-4142 y Fs($if)336 b Ft(The)31 b Fs($if)f Ft(construct)i(allo)m(ws)f
-(bindings)d(to)k(b)s(e)e(made)i(based)f(on)g(the)g(editing)f(mo)s(de,)i
-(the)630 4252 y(terminal)37 b(b)s(eing)f(used,)k(or)e(the)g
-(application)e(using)h(Readline.)62 b(The)38 b(text)h(of)f(the)g(test)
-630 4361 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)e(no)h(c)m
-(haracters)i(are)f(required)d(to)j(isolate)g(it.)630
+275 3762 y Ft(Readline)36 b(implemen)m(ts)f(a)h(facilit)m(y)i(similar)d
+(in)g(spirit)g(to)h(the)g(conditional)h(compilation)g(features)150
+3871 y(of)e(the)f(C)g(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)f
+(bindings)e(and)h(v)-5 b(ariable)35 b(settings)h(to)f(b)s(e)f(p)s
+(erformed)f(as)150 3981 y(the)e(result)f(of)g(tests.)42
+b(There)30 b(are)h(four)e(parser)h(directiv)m(es)i(used.)150
+4142 y Fs($if)336 b Ft(The)31 b Fs($if)f Ft(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 4252 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g
+(application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test)
+630 4361 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m
+(haracters)i(are)f(required)e(to)i(isolate)i(it.)630
4522 y Fs(mode)288 b Ft(The)20 b Fs(mode=)g Ft(form)g(of)h(the)g
-Fs($if)f Ft(directiv)m(e)h(is)f(used)g(to)h(test)h(whether)e(Readline)
-1110 4631 y(is)28 b(in)h Fs(emacs)f Ft(or)h Fs(vi)g Ft(mo)s(de.)40
-b(This)28 b(ma)m(y)i(b)s(e)e(used)h(in)f(conjunction)h(with)f(the)1110
-4741 y(`)p Fs(set)i(keymap)p Ft(')c(command,)i(for)f(instance,)h(to)g
-(set)g(bindings)d(in)h(the)i Fs(emacs-)1110 4851 y(standard)23
-b Ft(and)h Fs(emacs-ctlx)f Ft(k)m(eymaps)i(only)f(if)g(Readline)g(is)g
-(starting)h(out)1110 4960 y(in)k Fs(emacs)g Ft(mo)s(de.)630
+Fs($if)f Ft(directiv)m(e)j(is)e(used)f(to)h(test)h(whether)e(Readline)
+1110 4631 y(is)29 b(in)h Fs(emacs)e Ft(or)h Fs(vi)g Ft(mo)s(de.)40
+b(This)29 b(ma)m(y)h(b)s(e)e(used)h(in)g(conjunction)h(with)f(the)1110
+4741 y(`)p Fs(set)h(keymap)p Ft(')c(command,)i(for)f(instance,)i(to)f
+(set)g(bindings)f(in)g(the)h Fs(emacs-)1110 4851 y(standard)23
+b Ft(and)h Fs(emacs-ctlx)f Ft(k)m(eymaps)i(only)g(if)g(Readline)h(is)f
+(starting)h(out)1110 4960 y(in)k Fs(emacs)f Ft(mo)s(de.)630
5121 y Fs(term)288 b Ft(The)26 b Fs(term=)g Ft(form)g(ma)m(y)i(b)s(e)e
-(used)g(to)i(include)d(terminal-sp)s(eci\014c)f(k)m(ey)k(bind-)1110
-5230 y(ings,)37 b(p)s(erhaps)d(to)j(bind)d(the)i(k)m(ey)h(sequences)f
-(output)g(b)m(y)g(the)g(terminal's)1110 5340 y(function)23
-b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)e(side)g(of)h
-(the)g(`)p Fs(=)p Ft(')g(is)f(tested)i(against)p eop
+(used)g(to)i(include)f(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110
+5230 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 5340 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 Fs(=)p Ft(')g(is)g(tested)h(against)p eop
+end
%%Page: 92 98
-92 97 bop 150 -116 a Ft(92)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110
-299 y(b)s(oth)e(the)h(full)e(name)i(of)g(the)g(terminal)f(and)g(the)i
-(p)s(ortion)d(of)i(the)g(terminal)1110 408 y(name)k(b)s(efore)f(the)g
-(\014rst)g(`)p Fs(-)p Ft('.)50 b(This)32 b(allo)m(ws)h
-Fs(sun)g Ft(to)h(matc)m(h)g(b)s(oth)f Fs(sun)g Ft(and)1110
-518 y Fs(sun-cmd)p Ft(,)c(for)h(instance.)630 677 y Fs(application)1110
-787 y Ft(The)21 b Fq(application)g Ft(construct)h(is)f(used)g(to)i
-(include)d(application-sp)s(eci\014c)f(set-)1110 897
-y(tings.)38 b(Eac)m(h)26 b(program)e(using)f(the)i(Readline)e(library)g
-(sets)i(the)g Fq(application)1110 1006 y(name)p Ft(,)g(and)e(y)m(ou)g
-(can)h(test)g(for)f(a)g(particular)f(v)-5 b(alue.)38
-b(This)21 b(could)h(b)s(e)h(used)f(to)1110 1116 y(bind)31
-b(k)m(ey)i(sequences)g(to)h(functions)d(useful)g(for)i(a)g(sp)s
-(eci\014c)e(program.)48 b(F)-8 b(or)1110 1225 y(instance,)34
-b(the)f(follo)m(wing)e(command)i(adds)f(a)i(k)m(ey)f(sequence)h(that)f
-(quotes)1110 1335 y(the)e(curren)m(t)f(or)g(previous)f(w)m(ord)h(in)f
-(Bash:)1350 1469 y Fs($if)47 b(Bash)1350 1579 y(#)g(Quote)g(the)g
-(current)f(or)h(previous)e(word)1350 1689 y("\\C-xq":)h
-("\\eb\\"\\ef\\"")1350 1798 y($endif)150 1958 y($endif)192
-b Ft(This)28 b(command,)j(as)f(seen)h(in)e(the)h(previous)f(example,)h
-(terminates)g(an)h Fs($if)e Ft(command.)150 2117 y Fs($else)240
-b Ft(Commands)29 b(in)g(this)h(branc)m(h)f(of)i(the)f
-Fs($if)g Ft(directiv)m(e)g(are)h(executed)g(if)e(the)i(test)g(fails.)
-150 2276 y Fs($include)96 b Ft(This)42 b(directiv)m(e)h(tak)m(es)i(a)e
-(single)g(\014lename)f(as)i(an)f(argumen)m(t)h(and)f(reads)g(commands)
-630 2386 y(and)38 b(bindings)d(from)j(that)i(\014le.)64
-b(F)-8 b(or)39 b(example,)i(the)e(follo)m(wing)e(directiv)m(e)h(reads)g
+TeXDict begin 92 97 bop 150 -116 a Ft(92)2572 b(Bash)31
+b(Reference)g(Man)m(ual)1110 299 y(b)s(oth)e(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
+408 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fs(-)p Ft('.)50
+b(This)33 b(allo)m(ws)i Fs(sun)e Ft(to)h(matc)m(h)g(b)s(oth)f
+Fs(sun)g Ft(and)1110 518 y Fs(sun-cmd)p Ft(,)c(for)h(instance.)630
+677 y Fs(application)1110 787 y Ft(The)21 b Fq(application)j
+Ft(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h
+(set-)1110 897 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h
+(Readline)g(library)g(sets)g(the)g Fq(application)1110
+1006 y(name)p Ft(,)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
+1116 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 1225
+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 1335 y(the)e(curren)m(t)f(or)g(previous)
+g(w)m(ord)g(in)g(Bash:)1350 1469 y Fs($if)47 b(Bash)1350
+1579 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350
+1689 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 1798 y($endif)150
+1958 y($endif)192 b Ft(This)29 b(command,)i(as)f(seen)h(in)f(the)g
+(previous)g(example,)h(terminates)g(an)g Fs($if)e Ft(command.)150
+2117 y Fs($else)240 b Ft(Commands)29 b(in)h(this)h(branc)m(h)e(of)i
+(the)f Fs($if)g Ft(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g
+(fails.)150 2276 y Fs($include)96 b Ft(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 2386 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 2496 y(`)p Fs(/etc/inputrc)p Ft(':)870 2630
y Fs($include)46 b(/etc/inputrc)150 2854 y Fk(8.3.3)63
-b(Sample)40 b(Init)h(File)275 3098 y Ft(Here)31 b(is)e(an)h(example)h
-(of)f(an)g Fq(inputrc)k Ft(\014le.)41 b(This)28 b(illustrates)h(k)m(ey)
-i(binding,)d(v)-5 b(ariable)29 b(assignmen)m(t,)150 3208
-y(and)h(conditional)e(syn)m(tax.)p eop
+b(Sample)41 b(Init)g(File)275 3098 y Ft(Here)31 b(is)f(an)g(example)i
+(of)e(an)g Fq(inputrc)35 b Ft(\014le.)42 b(This)29 b(illustrates)j(k)m
+(ey)f(binding,)f(v)-5 b(ariable)31 b(assignmen)m(t,)150
+3208 y(and)f(conditional)h(syn)m(tax.)p eop end
%%Page: 93 99
-93 98 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(93)390 408 y Fs(#)47 b(This)g(file)g(controls)e
-(the)i(behaviour)e(of)j(line)e(input)h(editing)e(for)390
-518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h(Readline)f(library.)93
-b(Existing)390 628 y(#)47 b(programs)f(include)g(FTP,)g(Bash,)h(and)g
-(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g(re-read)f(the)h(inputrc)f
-(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#')
-g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i
-(systemwide)e(bindings)h(and)h(variable)390 1285 y(#)g(assignments)e
-(from)i(/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390
-1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)
-390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390
+TeXDict begin 93 98 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(93)390 408 y Fs(#)47
+b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h
+(editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h
+(Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include)
+g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g
+(re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390
+956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390
+1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(systemwide)e(bindings)
+h(and)h(variable)390 1285 y(#)g(assignments)e(from)i(/etc/Inputrc)390
+1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724
+y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)390
+1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390
2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the)
h(function)f(name)g(is)h(ignored)390 2600 y(#)390 2710
y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390
(previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390
4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode)
390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390
-5340 y(#"\\M-\\C-[C":)g(forward-char)p eop
+5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end
%%Page: 94 100
-94 99 bop 150 -116 a Ft(94)2572 b(Bash)31 b(Reference)g(Man)m(ual)390
-299 y Fs(#"\\M-\\C-[A":)331 b(previous-history)390 408
-y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390
-847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93
-b(This)47 b(happens)f(to)h(be)g(the)g(default.)390 1176
-y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f(are)h(convenient)e
-(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390
-1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f
-("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833
-y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390
+TeXDict begin 94 99 bop 150 -116 a Ft(94)2572 b(Bash)31
+b(Reference)g(Man)m(ual)390 299 y Fs(#"\\M-\\C-[A":)331
+b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390
+628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066
+y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the)
+g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f
+(are)h(convenient)e(for)i(shell)f(interaction)390 1504
+y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724
+y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390
+1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390
1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390
2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390
2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g
5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f
(completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g
(he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f
-(completion-query-items)42 b(150)p eop
+(completion-query-items)42 b(150)p eop end
%%Page: 95 101
-95 100 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(95)390 299 y Fs(#)47 b(For)g(FTP)390
-408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390
+TeXDict begin 95 100 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(95)390 299 y Fs(#)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 1086 y Fr(8.4)68 b(Bindable)45 b(Readline)i(Commands)
-275 1323 y Ft(This)33 b(section)j(describ)s(es)e(Readline)g(commands)i
+275 1323 y Ft(This)34 b(section)j(describ)s(es)e(Readline)h(commands)g
(that)g(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)56
-b(Y)-8 b(ou)150 1433 y(can)29 b(list)e(y)m(our)i(k)m(ey)g(bindings)d(b)
-m(y)j(executing)f Fs(bind)i(-P)e Ft(or,)h(for)g(a)g(more)f(terse)i
-(format,)f(suitable)f(for)g(an)150 1543 y Fq(inputrc)33
-b Ft(\014le,)28 b Fs(bind)h(-p)p Ft(.)40 b(\(See)30 b(Section)e(4.2)i
-([Bash)g(Builtins],)d(page)j(39.\))41 b(Command)28 b(names)h(without)
-150 1652 y(an)h(accompan)m(ying)h(k)m(ey)g(sequence)g(are)g(un)m(b)s
-(ound)d(b)m(y)i(default.)275 1780 y(In)25 b(the)h(follo)m(wing)f
-(descriptions,)g Fq(p)s(oin)m(t)i Ft(refers)f(to)h(the)f(curren)m(t)g
-(cursor)g(p)s(osition,)f(and)h Fq(mark)31 b Ft(refers)150
-1890 y(to)40 b(a)f(cursor)f(p)s(osition)f(sa)m(v)m(ed)j(b)m(y)f(the)g
+b(Y)-8 b(ou)150 1433 y(can)29 b(list)g(y)m(our)g(k)m(ey)g(bindings)f(b)
+m(y)h(executing)g Fs(bind)h(-P)e Ft(or,)h(for)g(a)g(more)f(terse)i
+(format,)f(suitable)h(for)e(an)150 1543 y Fq(inputrc)34
+b Ft(\014le,)29 b Fs(bind)g(-p)p Ft(.)40 b(\(See)30 b(Section)f(4.2)h
+([Bash)g(Builtins],)g(page)g(39.\))41 b(Command)28 b(names)h(without)
+150 1652 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 1780 y(In)25 b(the)h(follo)m(wing)i
+(descriptions,)f Fq(p)s(oin)m(t)h Ft(refers)e(to)h(the)f(curren)m(t)g
+(cursor)g(p)s(osition,)h(and)f Fq(mark)31 b Ft(refers)150
+1890 y(to)40 b(a)f(cursor)f(p)s(osition)h(sa)m(v)m(ed)h(b)m(y)f(the)g
Fs(set-mark)d Ft(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f
-(p)s(oin)m(t)f(and)150 2000 y(mark)30 b(is)g(referred)f(to)i(as)g(the)f
-Fq(region)p Ft(.)150 2205 y Fk(8.4.1)63 b(Commands)40
+(p)s(oin)m(t)g(and)150 2000 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f
+Fq(region)p Ft(.)150 2205 y Fk(8.4.1)63 b(Commands)42
b(F)-10 b(or)41 b(Mo)m(ving)150 2443 y Fs(beginning-of-line)26
b(\(C-a\))630 2553 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f
(curren)m(t)g(line.)150 2700 y Fs(end-of-line)d(\(C-e\))630
630 3322 y Ft(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150
3469 y Fs(forward-word)d(\(M-f\))630 3579 y Ft(Mo)m(v)m(e)32
b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41
-b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)h(and)630
-3689 y(digits.)150 3835 y Fs(backward-word)c(\(M-b\))630
+b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630
+3689 y(digits.)150 3835 y Fs(backward-word)27 b(\(M-b\))630
3945 y Ft(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g
-(curren)m(t)f(or)g(previous)f(w)m(ord.)50 b(W)-8 b(ords)34
-b(are)g(comp)s(osed)630 4055 y(of)d(letters)f(and)g(digits.)150
-4202 y Fs(clear-screen)d(\(C-l\))630 4311 y Ft(Clear)f(the)h(screen)f
-(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)g(lea)m(ving)g(the)h
-(curren)m(t)g(line)e(at)i(the)g(top)630 4421 y(of)k(the)f(screen.)150
+(curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34
+b(are)g(comp)s(osed)630 4055 y(of)d(letters)g(and)f(digits.)150
+4202 y Fs(clear-screen)d(\(C-l\))630 4311 y Ft(Clear)g(the)g(screen)f
+(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f
+(curren)m(t)g(line)g(at)g(the)g(top)630 4421 y(of)k(the)f(screen.)150
4568 y Fs(redraw-current-line)25 b(\(\))630 4677 y Ft(Refresh)30
-b(the)g(curren)m(t)h(line.)39 b(By)30 b(default,)g(this)f(is)h(un)m(b)s
-(ound.)150 4883 y Fk(8.4.2)63 b(Commands)40 b(F)-10 b(or)41
+b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s
+(ound.)150 4883 y Fk(8.4.2)63 b(Commands)42 b(F)-10 b(or)41
b(Manipulating)h(The)f(History)150 5121 y Fs(accept-line)27
-b(\(Newline)h(or)i(Return\))630 5230 y Ft(Accept)25 b(the)e(line)f
-(regardless)h(of)g(where)g(the)h(cursor)e(is.)38 b(If)23
-b(this)f(line)g(is)g(non-empt)m(y)-8 b(,)26 b(add)c(it)630
-5340 y(to)27 b(the)f(history)f(list)g(according)h(to)h(the)f(setting)h
-(of)f(the)g Fs(HISTCONTROL)d Ft(and)j Fs(HISTIGNORE)p
-eop
+b(\(Newline)h(or)i(Return\))630 5230 y Ft(Accept)25 b(the)e(line)h
+(regardless)g(of)f(where)g(the)h(cursor)e(is.)39 b(If)23
+b(this)g(line)h(is)f(non-empt)m(y)-8 b(,)26 b(add)c(it)630
+5340 y(to)27 b(the)f(history)g(list)h(according)g(to)g(the)f(setting)i
+(of)e(the)g Fs(HISTCONTROL)d Ft(and)j Fs(HISTIGNORE)p
+eop end
%%Page: 96 102
-96 101 bop 150 -116 a Ft(96)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(v)-5 b(ariables.)40 b(If)30 b(this)g(line)f(is)h(a)h(mo)s
-(di\014ed)d(history)i(line,)f(then)h(restore)i(the)f(history)e(line)g
-(to)630 408 y(its)h(original)e(state.)150 562 y Fs(previous-history)e
-(\(C-p\))630 672 y Ft(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g
-(history)g(list,)f(fetc)m(hing)h(the)h(previous)e(command.)150
-826 y Fs(next-history)e(\(C-n\))630 935 y Ft(Mo)m(v)m(e)32
-b(`forw)m(ard')f(through)e(the)i(history)e(list,)h(fetc)m(hing)g(the)h
-(next)f(command.)150 1089 y Fs(beginning-of-history)25
-b(\(M-<\))630 1199 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)e(in)
-i(the)g(history)-8 b(.)150 1352 y Fs(end-of-history)26
-b(\(M->\))630 1462 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h
-(input)d(history)-8 b(,)30 b(i.e.,)h(the)g(line)d(curren)m(tly)i(b)s
-(eing)f(en)m(tered.)150 1616 y Fs(reverse-search-history)24
-b(\(C-r\))630 1725 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)f(at)h
-(the)f(curren)m(t)g(line)e(and)i(mo)m(ving)g(`up')f(through)h(the)g
-(his-)630 1835 y(tory)g(as)f(necessary)-8 b(.)42 b(This)28
-b(is)i(an)g(incremen)m(tal)g(searc)m(h.)150 1989 y Fs
-(forward-search-history)24 b(\(C-s\))630 2098 y Ft(Searc)m(h)30
-b(forw)m(ard)f(starting)g(at)h(the)g(curren)m(t)f(line)f(and)h(mo)m
-(ving)g(`do)m(wn')g(through)g(the)h(the)630 2208 y(history)f(as)i
-(necessary)-8 b(.)41 b(This)29 b(is)g(an)i(incremen)m(tal)e(searc)m(h.)
-150 2362 y Fs(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24
-b(\(M-p\))630 2471 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)f(at)h
-(the)f(curren)m(t)g(line)e(and)i(mo)m(ving)g(`up')f(through)h(the)g
-(his-)630 2581 y(tory)36 b(as)g(necessary)h(using)d(a)j(non-incremen)m
-(tal)e(searc)m(h)h(for)g(a)g(string)f(supplied)e(b)m(y)j(the)630
+TeXDict begin 96 101 bop 150 -116 a Ft(96)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(v)-5 b(ariables.)42
+b(If)30 b(this)h(line)g(is)g(a)g(mo)s(di\014ed)e(history)i(line,)g
+(then)f(restore)i(the)f(history)f(line)h(to)630 408 y(its)g(original)g
+(state.)150 562 y Fs(previous-history)26 b(\(C-p\))630
+672 y Ft(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g
+(fetc)m(hing)g(the)g(previous)f(command.)150 826 y Fs(next-history)d
+(\(C-n\))630 935 y Ft(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i
+(history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150
+1089 y Fs(beginning-of-history)25 b(\(M-<\))630 1199
+y Ft(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8
+b(.)150 1352 y Fs(end-of-history)26 b(\(M->\))630 1462
+y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8
+b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150
+1616 y Fs(reverse-search-history)24 b(\(C-r\))630 1725
+y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g
+(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630
+1835 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m
+(tal)i(searc)m(h.)150 1989 y Fs(forward-search-history)24
+b(\(C-s\))630 2098 y Ft(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g
+(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the)
+h(the)630 2208 y(history)g(as)h(necessary)-8 b(.)41 b(This)30
+b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 2362 y Fs
+(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24
+b(\(M-p\))630 2471 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g
+(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g
+(his-)630 2581 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m
+(tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630
2690 y(user.)150 2844 y Fs(non-incremental-forward-)o(sear)o(ch-h)o
(ist)o(ory)24 b(\(M-n\))630 2954 y Ft(Searc)m(h)30 b(forw)m(ard)f
-(starting)g(at)h(the)g(curren)m(t)f(line)f(and)h(mo)m(ving)g(`do)m(wn')
-g(through)g(the)h(the)630 3063 y(history)c(as)g(necessary)i(using)d(a)i
-(non-incremen)m(tal)e(searc)m(h)j(for)e(a)h(string)f(supplied)d(b)m(y)k
+(starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')
+f(through)g(the)h(the)630 3063 y(history)d(as)f(necessary)i(using)e(a)h
+(non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i
(the)630 3173 y(user.)150 3327 y Fs(history-search-forward)d(\(\))630
-3436 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)e(for)h
-(the)h(string)e(of)i(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630
-3546 y(start)36 b(of)f(the)g(curren)m(t)g(line)e(and)i(the)g(p)s(oin)m
-(t.)54 b(This)33 b(is)i(a)g(non-incremen)m(tal)f(searc)m(h.)56
-b(By)630 3655 y(default,)30 b(this)f(command)h(is)g(un)m(b)s(ound.)150
+3436 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g
+(the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630
+3546 y(start)36 b(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m
+(t.)55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56
+b(By)630 3655 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150
3809 y Fs(history-search-backward)24 b(\(\))630 3919
-y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)f(for)h
-(the)f(string)g(of)h(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630
-4028 y(start)g(of)f(the)g(curren)m(t)g(line)e(and)i(the)g(p)s(oin)m(t.)
-54 b(This)33 b(is)i(a)g(non-incremen)m(tal)f(searc)m(h.)56
-b(By)630 4138 y(default,)30 b(this)f(command)h(is)g(un)m(b)s(ound.)150
-4292 y Fs(yank-nth-arg)d(\(M-C-y\))630 4401 y Ft(Insert)e(the)i
-(\014rst)e(argumen)m(t)h(to)h(the)f(previous)f(command)g(\(usually)f
-(the)i(second)g(w)m(ord)g(on)630 4511 y(the)k(previous)f(line\))f(at)j
-(p)s(oin)m(t.)39 b(With)30 b(an)g(argumen)m(t)g Fq(n)p
-Ft(,)g(insert)e(the)j Fq(n)p Ft(th)e(w)m(ord)g(from)h(the)630
-4621 y(previous)25 b(command)i(\(the)h(w)m(ords)e(in)g(the)h(previous)e
-(command)i(b)s(egin)e(with)h(w)m(ord)h(0\).)40 b(A)630
-4730 y(negativ)m(e)27 b(argumen)m(t)f(inserts)e(the)i
-Fq(n)p Ft(th)f(w)m(ord)g(from)g(the)h(end)f(of)h(the)g(previous)e
-(command.)150 4884 y Fs(yank-last-arg)j(\(M-.)i(or)h(M-_\))630
-4994 y Ft(Insert)k(last)h(argumen)m(t)h(to)g(the)f(previous)e(command)i
-(\(the)h(last)e(w)m(ord)h(of)g(the)g(previous)630 5103
-y(history)30 b(en)m(try\).)41 b(With)30 b(an)h(argumen)m(t,)g(b)s(eha)m
-(v)m(e)g(exactly)h(lik)m(e)e Fs(yank-nth-arg)p Ft(.)38
-b(Succes-)630 5213 y(siv)m(e)c(calls)g(to)h Fs(yank-last-arg)c
-Ft(mo)m(v)m(e)36 b(bac)m(k)g(through)d(the)i(history)f(list,)g
-(inserting)f(the)630 5322 y(last)d(argumen)m(t)h(of)g(eac)m(h)g(line)e
-(in)g(turn.)p eop
+y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g
+(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630
+4028 y(start)g(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m(t.)
+55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56
+b(By)630 4138 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150
+4292 y Fs(yank-nth-arg)c(\(M-C-y\))630 4401 y Ft(Insert)e(the)i
+(\014rst)e(argumen)m(t)h(to)h(the)f(previous)g(command)f(\(usually)h
+(the)g(second)g(w)m(ord)g(on)630 4511 y(the)k(previous)g(line\))g(at)h
+(p)s(oin)m(t.)40 b(With)31 b(an)f(argumen)m(t)g Fq(n)p
+Ft(,)g(insert)f(the)i Fq(n)p Ft(th)e(w)m(ord)g(from)h(the)630
+4621 y(previous)c(command)h(\(the)h(w)m(ords)e(in)h(the)g(previous)f
+(command)h(b)s(egin)f(with)h(w)m(ord)g(0\).)40 b(A)630
+4730 y(negativ)m(e)28 b(argumen)m(t)e(inserts)f(the)h
+Fq(n)p Ft(th)f(w)m(ord)g(from)g(the)h(end)f(of)h(the)g(previous)f
+(command.)150 4884 y Fs(yank-last-arg)i(\(M-.)i(or)h(M-_\))630
+4994 y Ft(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f(command)h
+(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 5103
+y(history)c(en)m(try\).)41 b(With)31 b(an)g(argumen)m(t,)g(b)s(eha)m(v)
+m(e)g(exactly)i(lik)m(e)f Fs(yank-nth-arg)p Ft(.)38 b(Succes-)630
+5213 y(siv)m(e)d(calls)h(to)f Fs(yank-last-arg)c Ft(mo)m(v)m(e)36
+b(bac)m(k)g(through)d(the)i(history)g(list,)h(inserting)f(the)630
+5322 y(last)c(argumen)m(t)g(of)g(eac)m(h)g(line)g(in)f(turn.)p
+eop end
%%Page: 97 103
-97 102 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(97)150 299 y Fk(8.4.3)63 b(Commands)40
-b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 549 y Fs(delete-char)27
-b(\(C-d\))630 659 y Ft(Delete)40 b(the)f(c)m(haracter)i(at)e(p)s(oin)m
-(t.)65 b(If)39 b(p)s(oin)m(t)e(is)h(at)i(the)f(b)s(eginning)d(of)j(the)
-g(line,)h(there)630 769 y(are)d(no)g(c)m(haracters)i(in)c(the)j(line,)f
-(and)f(the)h(last)g(c)m(haracter)i(t)m(yp)s(ed)e(w)m(as)g(not)g(b)s
-(ound)e(to)630 878 y Fs(delete-char)p Ft(,)28 b(then)i(return)f
-Fl(eof)p Ft(.)150 1050 y Fs(backward-delete-char)c(\(Rubout\))630
-1160 y Ft(Delete)31 b(the)g(c)m(haracter)g(b)s(ehind)d(the)i(cursor.)40
-b(A)30 b(n)m(umeric)f(argumen)m(t)i(means)f(to)h(kill)d(the)630
-1270 y(c)m(haracters)k(instead)d(of)i(deleting)e(them.)150
+TeXDict begin 97 102 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(97)150 299 y Fk(8.4.3)63
+b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150
+549 y Fs(delete-char)27 b(\(C-d\))630 659 y Ft(Delete)41
+b(the)e(c)m(haracter)i(at)e(p)s(oin)m(t.)66 b(If)39 b(p)s(oin)m(t)f(is)
+h(at)h(the)f(b)s(eginning)f(of)h(the)g(line,)j(there)630
+769 y(are)37 b(no)g(c)m(haracters)i(in)d(the)i(line,)h(and)d(the)h
+(last)h(c)m(haracter)h(t)m(yp)s(ed)e(w)m(as)g(not)g(b)s(ound)e(to)630
+878 y Fs(delete-char)p Ft(,)28 b(then)i(return)f Fl(eof)p
+Ft(.)150 1050 y Fs(backward-delete-char)c(\(Rubout\))630
+1160 y Ft(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
+1270 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150
1442 y Fs(forward-backward-delete-)o(char)24 b(\(\))630
-1551 y Ft(Delete)39 b(the)g(c)m(haracter)h(under)c(the)j(cursor,)h
-(unless)c(the)j(cursor)e(is)g(at)i(the)g(end)e(of)i(the)630
-1661 y(line,)31 b(in)f(whic)m(h)g(case)j(the)f(c)m(haracter)h(b)s
-(ehind)c(the)j(cursor)f(is)f(deleted.)45 b(By)32 b(default,)f(this)630
-1771 y(is)e(not)i(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150
+1551 y Ft(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
+1661 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
+1771 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150
1943 y Fs(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 2052
-y Ft(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)f
-(v)m(erbatim.)52 b(This)32 b(is)i(ho)m(w)g(to)h(insert)e(k)m(ey)630
-2162 y(sequences)e(lik)m(e)e Fj(C-q)p Ft(,)h(for)g(example.)150
+y Ft(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
+2162 y(sequences)d(lik)m(e)g Fj(C-q)p Ft(,)f(for)g(example.)150
2334 y Fs(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630
2444 y Ft(Insert)g(y)m(ourself.)150 2616 y Fs(transpose-chars)c
(\(C-t\))630 2725 y Ft(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 2835 y(mo)m(ving)j(the)h(cursor)f(forw)m(ard)g(as)g(w)m
-(ell.)55 b(If)35 b(the)h(insertion)e(p)s(oin)m(t)g(is)g(at)j(the)e(end)
-g(of)h(the)630 2945 y(line,)22 b(then)g(this)f(transp)s(oses)g(the)h
-(last)g(t)m(w)m(o)h(c)m(haracters)g(of)f(the)h(line.)36
-b(Negativ)m(e)24 b(argumen)m(ts)630 3054 y(ha)m(v)m(e)32
+(cursor,)630 2835 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 2945 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 3054 y(ha)m(v)m(e)32
b(no)e(e\013ect.)150 3226 y Fs(transpose-words)c(\(M-t\))630
-3336 y Ft(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)f(past)h
-(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)h(mo)m(ving)f(p)s(oin)m(t)f(past)
-h(that)630 3446 y(w)m(ord)c(as)h(w)m(ell.)39 b(If)27
-b(the)i(insertion)d(p)s(oin)m(t)i(is)f(at)i(the)g(end)e(of)i(the)f
-(line,)g(this)f(transp)s(oses)h(the)630 3555 y(last)i(t)m(w)m(o)i(w)m
+3336 y Ft(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 3446 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 3555 y(last)j(t)m(w)m(o)h(w)m
(ords)e(on)g(the)h(line.)150 3727 y Fs(upcase-word)c(\(M-u\))630
-3837 y Ft(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))f
-(w)m(ord.)45 b(With)31 b(a)h(negativ)m(e)i(argumen)m(t,)f(upp)s(er-)630
-3947 y(case)e(the)g(previous)e(w)m(ord,)h(but)g(do)g(not)h(mo)m(v)m(e)h
+3837 y Ft(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
+3947 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 4119 y Fs(downcase-word)d(\(M-l\))630
-4228 y Ft(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))f
-(w)m(ord.)37 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h(lo)m(w)m
-(ercase)630 4338 y(the)31 b(previous)d(w)m(ord,)j(but)e(do)i(not)f(mo)m
+4228 y Ft(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 4338 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 4510 y Fs(capitalize-word)26
-b(\(M-c\))630 4620 y Ft(Capitalize)20 b(the)i(curren)m(t)f(\(or)g
-(follo)m(wing\))f(w)m(ord.)38 b(With)20 b(a)i(negativ)m(e)g(argumen)m
-(t,)i(capitalize)630 4729 y(the)31 b(previous)d(w)m(ord,)j(but)e(do)i
-(not)f(mo)m(v)m(e)i(the)f(cursor.)150 4902 y Fs(overwrite-mode)26
-b(\(\))630 5011 y Ft(T)-8 b(oggle)34 b(o)m(v)m(erwrite)g(mo)s(de.)48
-b(With)32 b(an)h(explicit)e(p)s(ositiv)m(e)h(n)m(umeric)g(argumen)m(t,)
-i(switc)m(hes)630 5121 y(to)22 b(o)m(v)m(erwrite)h(mo)s(de.)37
-b(With)21 b(an)h(explicit)e(non-p)s(ositiv)m(e)g(n)m(umeric)h(argumen)m
-(t,)j(switc)m(hes)d(to)630 5230 y(insert)29 b(mo)s(de.)41
-b(This)29 b(command)i(a\013ects)h(only)d Fs(emacs)g Ft(mo)s(de;)i
+b(\(M-c\))630 4620 y Ft(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 4729 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f
+(mo)m(v)m(e)i(the)f(cursor.)150 4902 y Fs(overwrite-mode)26
+b(\(\))630 5011 y Ft(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48
+b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,)
+h(switc)m(hes)630 5121 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37
+b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m
+(t,)i(switc)m(hes)e(to)630 5230 y(insert)30 b(mo)s(de.)41
+b(This)30 b(command)h(a\013ects)h(only)e Fs(emacs)f Ft(mo)s(de;)i
Fs(vi)f Ft(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 5340
-y(di\013eren)m(tly)-8 b(.)40 b(Eac)m(h)31 b(call)f(to)h
-Fs(readline\(\))c Ft(starts)k(in)e(insert)g(mo)s(de.)p
-eop
+y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f
+Fs(readline\(\))c Ft(starts)k(in)f(insert)g(mo)s(de.)p
+eop end
%%Page: 98 104
-98 103 bop 150 -116 a Ft(98)2572 b(Bash)31 b(Reference)g(Man)m(ual)630
-299 y(In)d(o)m(v)m(erwrite)i(mo)s(de,)f(c)m(haracters)i(b)s(ound)c(to)j
-Fs(self-insert)c Ft(replace)j(the)h(text)g(at)g(p)s(oin)m(t)630
-408 y(rather)41 b(than)h(pushing)d(the)j(text)g(to)g(the)g(righ)m(t.)74
-b(Characters)42 b(b)s(ound)d(to)j Fs(backward-)630 518
-y(delete-char)27 b Ft(replace)k(the)f(c)m(haracter)i(b)s(efore)e(p)s
-(oin)m(t)g(with)f(a)h(space.)630 656 y(By)h(default,)e(this)h(command)g
-(is)f(un)m(b)s(ound.)150 896 y Fk(8.4.4)63 b(Killing)42
-b(And)e(Y)-10 b(anking)150 1144 y Fs(kill-line)28 b(\(C-k\))630
-1253 y Ft(Kill)g(the)i(text)i(from)e(p)s(oin)m(t)f(to)i(the)g(end)e(of)
-i(the)f(line.)150 1420 y Fs(backward-kill-line)25 b(\(C-x)30
-b(Rubout\))630 1530 y Ft(Kill)e(bac)m(kw)m(ard)j(to)g(the)f(b)s
-(eginning)e(of)i(the)h(line.)150 1697 y Fs(unix-line-discard)26
-b(\(C-u\))630 1807 y Ft(Kill)i(bac)m(kw)m(ard)j(from)e(the)i(cursor)f
-(to)h(the)f(b)s(eginning)e(of)j(the)f(curren)m(t)g(line.)150
-1974 y Fs(kill-whole-line)c(\(\))630 2083 y Ft(Kill)34
-b(all)h(c)m(haracters)j(on)f(the)f(curren)m(t)h(line,)f(no)h(matter)g
-(where)f(p)s(oin)m(t)g(is.)58 b(By)36 b(default,)630
-2193 y(this)29 b(is)h(un)m(b)s(ound.)150 2360 y Fs(kill-word)e(\(M-d\))
-630 2469 y Ft(Kill)f(from)i(p)s(oin)m(t)f(to)i(the)g(end)e(of)i(the)f
-(curren)m(t)h(w)m(ord,)f(or)g(if)g(b)s(et)m(w)m(een)h(w)m(ords,)f(to)h
+TeXDict begin 98 103 bop 150 -116 a Ft(98)2572 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y(In)d(o)m(v)m(erwrite)j(mo)s(de,)e(c)m
+(haracters)i(b)s(ound)c(to)j Fs(self-insert)c Ft(replace)k(the)g(text)g
+(at)g(p)s(oin)m(t)630 408 y(rather)41 b(than)h(pushing)e(the)i(text)g
+(to)g(the)g(righ)m(t.)75 b(Characters)42 b(b)s(ound)d(to)j
+Fs(backward-)630 518 y(delete-char)27 b Ft(replace)32
+b(the)e(c)m(haracter)i(b)s(efore)e(p)s(oin)m(t)h(with)f(a)g(space.)630
+656 y(By)h(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150
+896 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150
+1144 y Fs(kill-line)28 b(\(C-k\))630 1253 y Ft(Kill)j(the)f(text)i
+(from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150
+1420 y Fs(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630
+1530 y Ft(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s(eginning)g(of)g(the)h
+(line.)150 1697 y Fs(unix-line-discard)26 b(\(C-u\))630
+1807 y Ft(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 1974
+y Fs(kill-whole-line)c(\(\))630 2083 y Ft(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 2193 y(this)30
+b(is)h(un)m(b)s(ound.)150 2360 y Fs(kill-word)d(\(M-d\))630
+2469 y Ft(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 2579 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8
-b(ord)31 b(b)s(oundaries)d(are)i(the)h(same)g(as)f Fs(forward-word)p
+b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fs(forward-word)p
Ft(.)150 2746 y Fs(backward-kill-word)25 b(\(M-)1183
2743 y Fg(h)p 1207 2690 146 4 v 1207 2746 a Ff(DEL)p
1207 2761 V 1348 2743 a Fg(i)1378 2746 y Fs(\))630 2856
-y Ft(Kill)h(the)j(w)m(ord)g(b)s(ehind)d(p)s(oin)m(t.)39
-b(W)-8 b(ord)29 b(b)s(oundaries)e(are)i(the)g(same)g(as)g
+y Ft(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
Fs(backward-word)p Ft(.)150 3023 y Fs(unix-word-rubout)d(\(C-w\))630
-3132 y Ft(Kill)j(the)j(w)m(ord)f(b)s(ehind)e(p)s(oin)m(t,)i(using)f
-(white)h(space)h(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43
-b(The)31 b(killed)630 3242 y(text)g(is)f(sa)m(v)m(ed)h(on)g(the)f
+3132 y Ft(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 3242 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f
(kill-ring.)150 3409 y Fs(unix-filename-rubout)25 b(\(\))630
-3518 y Ft(Kill)34 b(the)i(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t,)j(using)e
-(white)g(space)i(and)f(the)g(slash)f(c)m(haracter)j(as)f(the)630
-3628 y(w)m(ord)30 b(b)s(oundaries.)38 b(The)30 b(killed)e(text)j(is)f
-(sa)m(v)m(ed)h(on)g(the)f(kill-ring.)150 3795 y Fs
-(delete-horizontal-space)24 b(\(\))630 3905 y Ft(Delete)32
-b(all)d(spaces)i(and)e(tabs)i(around)e(p)s(oin)m(t.)40
-b(By)31 b(default,)e(this)h(is)f(un)m(b)s(ound.)150 4072
-y Fs(kill-region)e(\(\))630 4181 y Ft(Kill)h(the)i(text)i(in)d(the)h
-(curren)m(t)h(region.)40 b(By)31 b(default,)e(this)h(command)g(is)f(un)
-m(b)s(ound.)150 4348 y Fs(copy-region-as-kill)c(\(\))630
-4458 y Ft(Cop)m(y)34 b(the)g(text)h(in)e(the)h(region)f(to)i(the)f
-(kill)e(bu\013er,)i(so)g(it)g(can)g(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)e
-(a)m(w)m(a)m(y)-8 b(.)630 4568 y(By)31 b(default,)e(this)h(command)g
-(is)f(un)m(b)s(ound.)150 4735 y Fs(copy-backward-word)c(\(\))630
-4844 y Ft(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)f(to)j
-(the)e(kill)e(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries)e(are)j
-(the)630 4954 y(same)31 b(as)f Fs(backward-word)p Ft(.)38
-b(By)30 b(default,)g(this)f(command)h(is)g(un)m(b)s(ound.)150
-5121 y Fs(copy-forward-word)c(\(\))630 5230 y Ft(Cop)m(y)31
-b(the)g(w)m(ord)g(follo)m(wing)e(p)s(oin)m(t)h(to)i(the)f(kill)e
-(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)d(are)k(the)630
+3518 y Ft(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
+3628 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 3795 y Fs
+(delete-horizontal-space)24 b(\(\))630 3905 y Ft(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 4072
+y Fs(kill-region)d(\(\))630 4181 y Ft(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 4348 y Fs(copy-region-as-kill)25 b(\(\))630
+4458 y Ft(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 4568 y(By)31 b(default,)f(this)h(command)f
+(is)g(un)m(b)s(ound.)150 4735 y Fs(copy-backward-word)25
+b(\(\))630 4844 y Ft(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 4954 y(same)31 b(as)f Fs(backward-word)p
+Ft(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150
+5121 y Fs(copy-forward-word)26 b(\(\))630 5230 y Ft(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
5340 y(same)f(as)f Fs(forward-word)p Ft(.)38 b(By)30
-b(default,)g(this)g(command)g(is)f(un)m(b)s(ound.)p eop
+b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)p eop
+end
%%Page: 99 105
-99 104 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2105 b(99)150 299 y Fs(yank)29 b(\(C-y\))630
-408 y Ft(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)e(ring)h(in)m(to)i
-(the)f(bu\013er)g(at)h(p)s(oin)m(t.)150 558 y Fs(yank-pop)d(\(M-y\))630
-667 y Ft(Rotate)36 b(the)f(kill-ring,)e(and)h(y)m(ank)h(the)f(new)g
-(top.)54 b(Y)-8 b(ou)35 b(can)g(only)e(do)i(this)e(if)h(the)h(prior)630
-777 y(command)30 b(is)g Fs(yank)f Ft(or)h Fs(yank-pop)p
-Ft(.)150 986 y Fk(8.4.5)63 b(Sp)s(ecifying)41 b(Numeric)f(Argumen)m(ts)
-150 1225 y Fs(digit-argument)26 b(\()p Fj(M-0)p Fs(,)j
-Fj(M-1)p Fs(,)h(...)f Fj(M--)p Fs(\))630 1335 y Ft(Add)d(this)g(digit)f
-(to)j(the)f(argumen)m(t)g(already)g(accum)m(ulating,)g(or)g(start)h(a)f
-(new)f(argumen)m(t.)630 1445 y Fj(M--)j Ft(starts)i(a)g(negativ)m(e)h
+TeXDict begin 99 104 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2107 b(99)150 299 y Fs(yank)29
+b(\(C-y\))630 408 y Ft(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
+558 y Fs(yank-pop)d(\(M-y\))630 667 y Ft(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 777 y(command)30 b(is)h
+Fs(yank)e Ft(or)h Fs(yank-pop)p Ft(.)150 986 y Fk(8.4.5)63
+b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m(ts)150 1225
+y Fs(digit-argument)26 b(\()p Fj(M-0)p Fs(,)j Fj(M-1)p
+Fs(,)h(...)f Fj(M--)p Fs(\))630 1335 y Ft(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 1445 y Fj(M--)j Ft(starts)i(a)g(negativ)m(e)i
(argumen)m(t.)150 1594 y Fs(universal-argument)25 b(\(\))630
-1704 y Ft(This)f(is)g(another)i(w)m(a)m(y)g(to)h(sp)s(ecify)d(an)h
-(argumen)m(t.)40 b(If)25 b(this)f(command)i(is)e(follo)m(w)m(ed)h(b)m
-(y)h(one)630 1813 y(or)k(more)f(digits,)g(optionally)f(with)g(a)i
-(leading)f(min)m(us)f(sign,)h(those)h(digits)e(de\014ne)h(the)h(ar-)630
-1923 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)f(follo)m(w)m(ed)g(b)
-m(y)h(digits,)g(executing)g Fs(universal-argument)630
-2032 y Ft(again)j(ends)f(the)h(n)m(umeric)e(argumen)m(t,)j(but)e(is)g
-(otherwise)g(ignored.)44 b(As)32 b(a)g(sp)s(ecial)f(case,)630
-2142 y(if)h(this)g(command)g(is)g(immediately)f(follo)m(w)m(ed)i(b)m(y)
-f(a)h(c)m(haracter)i(that)e(is)f(neither)g(a)h(digit)630
-2252 y(or)28 b(min)m(us)e(sign,)i(the)g(argumen)m(t)g(coun)m(t)h(for)e
-(the)i(next)f(command)f(is)g(m)m(ultiplied)e(b)m(y)i(four.)630
-2361 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)g(initially)d(one,)39
-b(so)f(executing)f(this)f(function)g(the)i(\014rst)e(time)630
+1704 y Ft(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 1813 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
+1923 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 Fs(universal-argument)630
+2032 y Ft(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
+2142 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
+2252 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e
+(the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630
+2361 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f
+(executing)g(this)f(function)g(the)h(\014rst)e(time)630
2471 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e
-(time)h(mak)m(es)g(the)g(argumen)m(t)g(coun)m(t)h(six-)630
-2580 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)f(this)f(is)g(not)i
+(time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630
+2580 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h
(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 2790 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 3029 y Fs(complete)28 b(\()610 3026
y Fg(h)p 634 2973 148 4 v 634 3029 a Ff(T)-6 b(AB)p 634
3044 V 778 3026 a Fg(i)808 3029 y Fs(\))630 3138 y Ft(A)m(ttempt)24
-b(to)f(p)s(erform)e(completion)h(on)h(the)g(text)g(b)s(efore)f(p)s(oin)
-m(t.)38 b(The)22 b(actual)h(completion)630 3248 y(p)s(erformed)33
-b(is)g(application-sp)s(eci\014c.)49 b(Bash)35 b(attempts)g(completion)
-e(treating)i(the)f(text)630 3357 y(as)39 b(a)h(v)-5 b(ariable)37
-b(\(if)i(the)g(text)h(b)s(egins)d(with)h(`)p Fs($)p Ft('\),)k(username)
-c(\(if)h(the)g(text)h(b)s(egins)d(with)630 3467 y(`)p
-Fs(~)p Ft('\),)31 b(hostname)f(\(if)f(the)h(text)h(b)s(egins)d(with)h
-(`)p Fs(@)p Ft('\),)i(or)f(command)f(\(including)e(aliases)j(and)630
-3577 y(functions\))k(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)d(completion)g(is)630
+b(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 3248 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 3357 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 Fs($)p Ft('\),)j(username)
+c(\(if)i(the)f(text)h(b)s(egins)e(with)630 3467 y(`)p
+Fs(~)p Ft('\),)31 b(hostname)f(\(if)g(the)g(text)h(b)s(egins)e(with)h
+(`)p Fs(@)p Ft('\),)h(or)f(command)f(\(including)h(aliases)i(and)630
+3577 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
3686 y(attempted.)150 3836 y Fs(possible-completions)25
-b(\(M-?\))630 3945 y Ft(List)30 b(the)g(p)s(ossible)e(completions)i(of)
-g(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)150 4095 y Fs
+b(\(M-?\))630 3945 y Ft(List)31 b(the)f(p)s(ossible)g(completions)i(of)
+e(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)150 4095 y Fs
(insert-completions)25 b(\(M-*\))630 4204 y Ft(Insert)30
-b(all)f(completions)h(of)h(the)g(text)g(b)s(efore)f(p)s(oin)m(t)g(that)
-h(w)m(ould)e(ha)m(v)m(e)j(b)s(een)e(generated)630 4314
+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 4314
y(b)m(y)g Fs(possible-completions)p Ft(.)150 4463 y Fs(menu-complete)d
-(\(\))630 4573 y Ft(Similar)21 b(to)j Fs(complete)p Ft(,)f(but)h
-(replaces)f(the)h(w)m(ord)g(to)g(b)s(e)f(completed)h(with)e(a)j(single)
-d(matc)m(h)630 4682 y(from)37 b(the)h(list)f(of)h(p)s(ossible)d
-(completions.)62 b(Rep)s(eated)39 b(execution)f(of)g
-Fs(menu-complete)630 4792 y Ft(steps)i(through)g(the)g(list)f(of)h(p)s
-(ossible)e(completions,)k(inserting)c(eac)m(h)k(matc)m(h)f(in)e(turn.)
-630 4902 y(A)m(t)f(the)f(end)f(of)h(the)g(list)e(of)i(completions,)g
-(the)g(b)s(ell)e(is)h(rung)g(\(sub)5 b(ject)36 b(to)i(the)f(setting)630
-5011 y(of)f Fs(bell-style)p Ft(\))e(and)h(the)h(original)f(text)i(is)e
+(\(\))630 4573 y Ft(Similar)d(to)g Fs(complete)p Ft(,)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 4682 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 Fs(menu-complete)630
+4792 y Ft(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
+4902 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
+5011 y(of)f Fs(bell-style)p Ft(\))e(and)h(the)h(original)i(text)f(is)f
(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fq(n)f Ft(mo)m(v)m(es)i
-Fq(n)630 5121 y Ft(p)s(ositions)c(forw)m(ard)h(in)f(the)i(list)f(of)g
-(matc)m(hes;)39 b(a)c(negativ)m(e)h(argumen)m(t)f(ma)m(y)g(b)s(e)f
+Fq(n)630 5121 y Ft(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 5230 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g
-(list.)63 b(This)37 b(command)h(is)f(in)m(tended)g(to)i(b)s(e)f(b)s
+(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 5337 y Fg(h)p 654 5284 V 654 5340 a Ff(T)-6
b(AB)p 654 5355 V 798 5337 a Fg(i)828 5340 y Ft(,)30
-b(but)g(is)f(un)m(b)s(ound)f(b)m(y)i(default.)p eop
+b(but)g(is)g(un)m(b)s(ound)e(b)m(y)i(default.)p eop end
%%Page: 100 106
-100 105 bop 150 -116 a Ft(100)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fs(delete-char-or-list)25 b(\(\))630 408 y
-Ft(Deletes)j(the)f(c)m(haracter)h(under)e(the)h(cursor)f(if)g(not)h(at)
-g(the)g(b)s(eginning)e(or)h(end)h(of)g(the)g(line)630
-518 y(\(lik)m(e)i Fs(delete-char)p Ft(\).)37 b(If)29
-b(at)h(the)f(end)f(of)i(the)f(line,)f(b)s(eha)m(v)m(es)i(iden)m
-(tically)d(to)i Fs(possible-)630 628 y(completions)p
-Ft(.)38 b(This)28 b(command)i(is)g(un)m(b)s(ound)e(b)m(y)i(default.)150
+TeXDict begin 100 105 bop 150 -116 a Ft(100)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(delete-char-or-list)25
+b(\(\))630 408 y Ft(Deletes)k(the)e(c)m(haracter)h(under)e(the)h
+(cursor)f(if)h(not)g(at)g(the)g(b)s(eginning)g(or)f(end)h(of)g(the)g
+(line)630 518 y(\(lik)m(e)k Fs(delete-char)p Ft(\).)37
+b(If)29 b(at)h(the)f(end)f(of)i(the)f(line,)h(b)s(eha)m(v)m(es)g(iden)m
+(tically)h(to)e Fs(possible-)630 628 y(completions)p
+Ft(.)38 b(This)29 b(command)h(is)h(un)m(b)s(ound)d(b)m(y)i(default.)150
789 y Fs(complete-filename)c(\(M-/\))630 899 y Ft(A)m(ttempt)32
-b(\014lename)d(completion)h(on)g(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)
+b(\014lename)e(completion)i(on)e(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)
150 1060 y Fs(possible-filename-comple)o(tion)o(s)24
-b(\(C-x)30 b(/\))630 1170 y Ft(List)e(the)h(p)s(ossible)d(completions)h
-(of)i(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)f(treating)h(it)f(as)h(a)f
+b(\(C-x)30 b(/\))630 1170 y Ft(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 1331 y Fs(complete-username)e(\(M-~\))630
-1441 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i(b)s(efore)e(p)
-s(oin)m(t,)f(treating)i(it)f(as)g(a)h(username.)150 1602
+1441 y Ft(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 1602
y Fs(possible-username-comple)o(tion)o(s)24 b(\(C-x)30
-b(~\))630 1712 y Ft(List)24 b(the)h(p)s(ossible)e(completions)h(of)h
-(the)g(text)h(b)s(efore)f(p)s(oin)m(t,)g(treating)g(it)g(as)g(a)g
+b(~\))630 1712 y Ft(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 1873 y Fs(complete-variable)h(\(M-$\))630
-1983 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i(b)s(efore)e(p)
-s(oin)m(t,)f(treating)i(it)f(as)g(a)h(shell)e(v)-5 b(ariable.)150
+1983 y Ft(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
2144 y Fs(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30
-b($\))630 2254 y Ft(List)41 b(the)h(p)s(ossible)e(completions)h(of)h
-(the)g(text)h(b)s(efore)e(p)s(oin)m(t,)k(treating)d(it)f(as)h(a)h
+b($\))630 2254 y Ft(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 2364 y(v)-5 b(ariable.)150 2525 y Fs(complete-hostname)26
-b(\(M-@\))630 2635 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i
-(b)s(efore)e(p)s(oin)m(t,)f(treating)i(it)f(as)g(a)h(hostname.)150
+b(\(M-@\))630 2635 y Ft(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
2796 y Fs(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30
-b(@\))630 2906 y Ft(List)24 b(the)h(p)s(ossible)d(completions)h(of)i
-(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)g(treating)g(it)f(as)g(a)h
+b(@\))630 2906 y Ft(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 3067 y Fs(complete-command)h(\(M-!\))630
-3177 y Ft(A)m(ttempt)32 b(completion)e(on)h(the)g(text)h(b)s(efore)e(p)
-s(oin)m(t,)g(treating)h(it)g(as)g(a)g(command)g(name.)630
-3286 y(Command)46 b(completion)g(attempts)i(to)f(matc)m(h)h(the)f(text)
-h(against)f(aliases,)k(reserv)m(ed)630 3396 y(w)m(ords,)36
-b(shell)e(functions,)i(shell)d(builtins,)h(and)h(\014nally)e
-(executable)j(\014lenames,)g(in)e(that)630 3505 y(order.)150
+3177 y Ft(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
+3286 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 3396 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 3505 y(order.)150
3667 y Fs(possible-command-complet)o(ions)24 b(\(C-x)29
-b(!\))630 3777 y Ft(List)c(the)i(p)s(ossible)d(completions)h(of)h(the)h
-(text)g(b)s(efore)f(p)s(oin)m(t,)g(treating)g(it)g(as)h(a)f(command)630
+b(!\))630 3777 y Ft(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
3886 y(name.)150 4048 y Fs(dynamic-complete-history)e(\(M-)1470
4045 y Fg(h)p 1493 3992 148 4 v 1493 4048 a Ff(T)-6 b(AB)p
1493 4063 V 1637 4045 a Fg(i)1667 4048 y Fs(\))630 4157
-y Ft(A)m(ttempt)31 b(completion)f(on)g(the)g(text)h(b)s(efore)f(p)s
-(oin)m(t,)f(comparing)h(the)g(text)h(against)g(lines)630
-4267 y(from)f(the)g(history)g(list)f(for)h(p)s(ossible)e(completion)i
+y Ft(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
+4267 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion)i
(matc)m(hes.)150 4428 y Fs(complete-into-braces)25 b(\(M-{\))630
-4538 y Ft(P)m(erform)f(\014lename)e(completion)h(and)h(insert)e(the)i
-(list)e(of)i(p)s(ossible)d(completions)i(enclosed)630
-4647 y(within)32 b(braces)j(so)f(the)h(list)e(is)h(a)m(v)-5
-b(ailable)34 b(to)h(the)g(shell)e(\(see)i(Section)g(3.5.1)h([Brace)g
-(Ex-)630 4757 y(pansion],)29 b(page)i(17\).)150 4985
+4538 y Ft(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
+4647 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 4757 y(pansion],)30 b(page)h(17\).)150 4985
y Fk(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 5230 y Fs(start-kbd-macro)
-26 b(\(C-x)j(\(\))630 5340 y Ft(Begin)h(sa)m(ving)h(the)f(c)m
-(haracters)i(t)m(yp)s(ed)e(in)m(to)g(the)h(curren)m(t)f(k)m(eyb)s(oard)
-g(macro.)p eop
+26 b(\(C-x)j(\(\))630 5340 y Ft(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.)p eop end
%%Page: 101 107
-101 106 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2060 b(101)150 299 y Fs(end-kbd-macro)27
-b(\(C-x)i(\)\))630 408 y Ft(Stop)e(sa)m(ving)g(the)h(c)m(haracters)g(t)
-m(yp)s(ed)f(in)m(to)h(the)f(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f
+TeXDict begin 101 106 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(101)150 299 y Fs(end-kbd-macro)27
+b(\(C-x)i(\)\))630 408 y Ft(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 518 y(de\014nition.)150 691 y Fs
(call-last-kbd-macro)c(\(C-x)k(e\))630 801 y Ft(Re-execute)37
-b(the)e(last)g(k)m(eyb)s(oard)g(macro)h(de\014ned,)f(b)m(y)h(making)e
-(the)h(c)m(haracters)i(in)d(the)630 911 y(macro)d(app)s(ear)f(as)g(if)g
-(t)m(yp)s(ed)g(at)h(the)f(k)m(eyb)s(oard.)150 1163 y
-Fk(8.4.8)63 b(Some)40 b(Miscellaneous)j(Commands)150
+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 911 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 1163 y
+Fk(8.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)150
1414 y Fs(re-read-init-file)26 b(\(C-x)j(C-r\))630 1524
-y Ft(Read)22 b(in)f(the)h(con)m(ten)m(ts)h(of)f(the)g
-Fq(inputrc)k Ft(\014le,)d(and)e(incorp)s(orate)g(an)m(y)i(bindings)18
-b(or)k(v)-5 b(ariable)630 1633 y(assignmen)m(ts)30 b(found)f(there.)150
+y Ft(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g
+Fq(inputrc)27 b Ft(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d
+(or)i(v)-5 b(ariable)630 1633 y(assignmen)m(ts)31 b(found)e(there.)150
1807 y Fs(abort)g(\(C-g\))630 1916 y Ft(Ab)s(ort)d(the)h(curren)m(t)f
-(editing)f(command)h(and)g(ring)g(the)g(terminal's)f(b)s(ell)g(\(sub)5
-b(ject)26 b(to)i(the)630 2026 y(setting)i(of)h Fs(bell-style)p
+(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 2026 y(setting)j(of)g Fs(bell-style)p
Ft(\).)150 2199 y Fs(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p
Fj(x)p Fs(,)g(...)o(\))630 2309 y Ft(If)e(the)h(meta\014ed)g(c)m
-(haracter)h Fq(x)34 b Ft(is)27 b(lo)m(w)m(ercase,)i(run)e(the)g
-(command)h(that)g(is)f(b)s(ound)e(to)k(the)630 2418 y(corresp)s(onding)
-f(upp)s(ercase)i(c)m(haracter.)150 2592 y Fs(prefix-meta)d(\()753
+(haracter)h Fq(x)34 b Ft(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g
+(command)h(that)g(is)g(b)s(ound)d(to)k(the)630 2418 y(corresp)s(onding)
+g(upp)s(ercase)h(c)m(haracter.)150 2592 y Fs(prefix-meta)d(\()753
2589 y Fg(h)p 777 2536 139 4 v 777 2592 a Ff(ESC)p 777
2607 V 911 2589 a Fg(i)941 2592 y Fs(\))630 2701 y Ft(Metafy)39
-b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)36
-b(is)g(for)i(k)m(eyb)s(oards)f(without)f(a)i(meta)g(k)m(ey)-8
-b(.)630 2811 y(T)m(yping)29 b(`)968 2808 y Fg(h)p 993
+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 2811 y(T)m(yping)30 b(`)968 2808 y Fg(h)p 993
2755 V 993 2811 a Ff(ESC)p 993 2826 V 1127 2808 a Fg(i)1187
-2811 y Fs(f)p Ft(')h(is)f(equiv)-5 b(alen)m(t)30 b(to)h(t)m(yping)f
-Fj(M-f)p Ft(.)150 2984 y Fs(undo)f(\(C-_)g(or)h(C-x)g(C-u\))630
-3094 y Ft(Incremen)m(tal)g(undo,)g(separately)g(remem)m(b)s(ered)g(for)
+2811 y Fs(f)p Ft(')g(is)g(equiv)-5 b(alen)m(t)32 b(to)f(t)m(yping)g
+Fj(M-f)p Ft(.)150 2984 y Fs(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630
+3094 y Ft(Incremen)m(tal)h(undo,)f(separately)h(remem)m(b)s(ered)f(for)
g(eac)m(h)i(line.)150 3267 y Fs(revert-line)27 b(\(M-r\))630
-3377 y Ft(Undo)33 b(all)f(c)m(hanges)i(made)f(to)h(this)e(line.)47
-b(This)31 b(is)h(lik)m(e)h(executing)g(the)g Fs(undo)f
-Ft(command)630 3487 y(enough)e(times)g(to)h(get)h(bac)m(k)f(to)g(the)f
+3377 y Ft(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 Fs(undo)f
+Ft(command)630 3487 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f
(b)s(eginning.)150 3660 y Fs(tilde-expand)d(\(M-&\))630
-3770 y Ft(P)m(erform)j(tilde)f(expansion)h(on)g(the)g(curren)m(t)h(w)m
+3770 y Ft(P)m(erform)j(tilde)h(expansion)g(on)f(the)g(curren)m(t)h(w)m
(ord.)150 3943 y Fs(set-mark)d(\(C-@\))630 4053 y Ft(Set)33
-b(the)g(mark)f(to)i(the)f(p)s(oin)m(t.)47 b(If)32 b(a)h(n)m(umeric)f
-(argumen)m(t)h(is)f(supplied,)e(the)j(mark)g(is)e(set)630
-4162 y(to)g(that)g(p)s(osition.)150 4336 y Fs(exchange-point-and-mark)
-24 b(\(C-x)29 b(C-x\))630 4445 y Ft(Sw)m(ap)i(the)g(p)s(oin)m(t)f(with)
-g(the)h(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)g(is)g
-(set)i(to)f(the)h(sa)m(v)m(ed)630 4555 y(p)s(osition,)d(and)g(the)i
-(old)f(cursor)f(p)s(osition)g(is)g(sa)m(v)m(ed)j(as)e(the)h(mark.)150
+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
+4162 y(to)f(that)g(p)s(osition.)150 4336 y Fs(exchange-point-and-mark)
+24 b(\(C-x)29 b(C-x\))630 4445 y Ft(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 4555 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
4728 y Fs(character-search)26 b(\(C-]\))630 4838 y Ft(A)f(c)m(haracter)
-h(is)e(read)h(and)f(p)s(oin)m(t)g(is)g(mo)m(v)m(ed)i(to)g(the)f(next)g
+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 4947 y(A)30
-b(negativ)m(e)i(coun)m(t)f(searc)m(hes)g(for)f(previous)f(o)s
+b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s
(ccurrences.)150 5121 y Fs(character-search-backwar)o(d)24
-b(\(M-C-]\))630 5230 y Ft(A)45 b(c)m(haracter)h(is)e(read)h(and)f(p)s
-(oin)m(t)g(is)g(mo)m(v)m(ed)i(to)f(the)g(previous)e(o)s(ccurrence)i(of)
-g(that)630 5340 y(c)m(haracter.)d(A)31 b(negativ)m(e)g(coun)m(t)g
+b(\(M-C-]\))630 5230 y Ft(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 5340 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.)p
-eop
+eop end
%%Page: 102 108
-102 107 bop 150 -116 a Ft(102)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fs(insert-comment)26 b(\(M-#\))630 408 y Ft(Without)35
-b(a)h(n)m(umeric)f(argumen)m(t,)i(the)f(v)-5 b(alue)35
-b(of)h(the)g Fs(comment-begin)c Ft(v)-5 b(ariable)34
-b(is)h(in-)630 518 y(serted)d(at)g(the)g(b)s(eginning)d(of)j(the)f
-(curren)m(t)h(line.)43 b(If)31 b(a)h(n)m(umeric)e(argumen)m(t)i(is)f
-(supplied,)630 628 y(this)k(command)i(acts)g(as)g(a)g(toggle:)54
-b(if)36 b(the)g(c)m(haracters)i(at)g(the)e(b)s(eginning)e(of)j(the)g
-(line)630 737 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)30
-b(of)g Fs(comment-begin)p Ft(,)e(the)i(v)-5 b(alue)30
-b(is)g(inserted,)g(otherwise)g(the)630 847 y(c)m(haracters)42
-b(in)c Fs(comment-begin)f Ft(are)j(deleted)g(from)g(the)g(b)s(eginning)
-e(of)i(the)g(line.)69 b(In)630 956 y(either)36 b(case,)k(the)e(line)d
-(is)h(accepted)j(as)e(if)f(a)h(newline)e(had)i(b)s(een)f(t)m(yp)s(ed.)
-60 b(The)37 b(default)630 1066 y(v)-5 b(alue)31 b(of)h
-Fs(comment-begin)c Ft(causes)k(this)e(command)i(to)g(mak)m(e)h(the)e
-(curren)m(t)h(line)e(a)i(shell)630 1176 y(commen)m(t.)40
-b(If)26 b(a)h(n)m(umeric)e(argumen)m(t)i(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)d(will)g(b)s(e)i(executed)h(b)m(y)f(the)h(shell.)150
-1443 y Fs(dump-functions)26 b(\(\))630 1553 y Ft(Prin)m(t)f(all)h(of)g
-(the)h(functions)e(and)h(their)f(k)m(ey)i(bindings)c(to)28
-b(the)e(Readline)f(output)h(stream.)630 1663 y(If)31
-b(a)h(n)m(umeric)f(argumen)m(t)h(is)f(supplied,)e(the)j(output)f(is)g
-(formatted)h(in)e(suc)m(h)i(a)g(w)m(a)m(y)g(that)630
-1772 y(it)e(can)h(b)s(e)e(made)i(part)f(of)g(an)h Fq(inputrc)j
-Ft(\014le.)40 b(This)28 b(command)i(is)g(un)m(b)s(ound)d(b)m(y)k
+TeXDict begin 102 107 bop 150 -116 a Ft(102)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(insert-comment)26
+b(\(M-#\))630 408 y Ft(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 Fs(comment-begin)c
+Ft(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
+Fs(comment-begin)p Ft(,)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 Fs(comment-begin)e
+Ft(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 Fs(comment-begin)c
+Ft(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 Fs(dump-functions)26 b(\(\))630
+1553 y Ft(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
+(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 Fq(inputrc)k
+Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k
(default.)150 1931 y Fs(dump-variables)26 b(\(\))630
-2040 y Ft(Prin)m(t)20 b(all)g(of)i(the)f(settable)h(v)-5
-b(ariables)20 b(and)h(their)f(v)-5 b(alues)21 b(to)h(the)f(Readline)f
-(output)h(stream.)630 2150 y(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)
-f(supplied,)e(the)j(output)f(is)g(formatted)h(in)e(suc)m(h)i(a)g(w)m(a)
-m(y)g(that)630 2259 y(it)e(can)h(b)s(e)e(made)i(part)f(of)g(an)h
-Fq(inputrc)j Ft(\014le.)40 b(This)28 b(command)i(is)g(un)m(b)s(ound)d
+2040 y Ft(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
+Fq(inputrc)k Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c
(b)m(y)k(default.)150 2418 y Fs(dump-macros)c(\(\))630
-2527 y Ft(Prin)m(t)33 b(all)f(of)i(the)g(Readline)e(k)m(ey)j(sequences)
-f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)f(they)630
-2637 y(output.)53 b(If)35 b(a)g(n)m(umeric)e(argumen)m(t)j(is)d
-(supplied,)g(the)i(output)g(is)e(formatted)j(in)d(suc)m(h)i(a)630
-2746 y(w)m(a)m(y)c(that)g(it)e(can)h(b)s(e)g(made)g(part)f(of)i(an)e
-Fq(inputrc)34 b Ft(\014le.)40 b(This)28 b(command)i(is)f(un)m(b)s(ound)
-e(b)m(y)630 2856 y(default.)150 3014 y Fs(glob-complete-word)e(\(M-g\))
-630 3124 y Ft(The)i(w)m(ord)h(b)s(efore)f(p)s(oin)m(t)g(is)g(treated)i
-(as)f(a)h(pattern)f(for)f(pathname)h(expansion,)f(with)g(an)630
-3233 y(asterisk)d(implicitly)d(app)s(ended.)37 b(This)22
-b(pattern)j(is)e(used)h(to)h(generate)h(a)e(list)f(of)i(matc)m(hing)630
-3343 y(\014le)k(names)i(for)f(p)s(ossible)e(completions.)150
-3501 y Fs(glob-expand-word)e(\(C-x)j(*\))630 3611 y Ft(The)40
-b(w)m(ord)g(b)s(efore)g(p)s(oin)m(t)g(is)g(treated)h(as)g(a)g(pattern)g
-(for)f(pathname)g(expansion,)j(and)630 3720 y(the)d(list)e(of)h(matc)m
-(hing)h(\014le)e(names)h(is)g(inserted,)h(replacing)f(the)g(w)m(ord.)67
-b(If)39 b(a)h(n)m(umeric)630 3830 y(argumen)m(t)31 b(is)e(supplied,)f
-(a)i(`)p Fs(*)p Ft(')h(is)e(app)s(ended)g(b)s(efore)h(pathname)g
+2527 y Ft(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
+(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
+Fq(inputrc)35 b Ft(\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 Fs(glob-complete-word)e(\(M-g\))
+630 3124 y Ft(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
+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 Fs(glob-expand-word)c(\(C-x)j(*\))630 3611 y Ft(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
+(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
+(a)g(`)p Fs(*)p Ft(')h(is)f(app)s(ended)f(b)s(efore)h(pathname)g
(expansion.)150 3988 y Fs(glob-list-expansions)25 b(\(C-x)k(g\))630
-4098 y Ft(The)k(list)f(of)h(expansions)f(that)i(w)m(ould)e(ha)m(v)m(e)i
+4098 y Ft(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 Fs(glob-expand-word)630
-4208 y Ft(is)g(displa)m(y)m(ed,)g(and)g(the)h(line)e(is)g(redra)m(wn.)
-50 b(If)33 b(a)h(n)m(umeric)f(argumen)m(t)h(is)e(supplied,)g(a)i(`)p
-Fs(*)p Ft(')630 4317 y(is)29 b(app)s(ended)g(b)s(efore)h(pathname)g
+4208 y Ft(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
+Fs(*)p Ft(')630 4317 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g
(expansion.)150 4475 y Fs(display-shell-version)25 b(\(C-x)k(C-v\))630
-4585 y Ft(Displa)m(y)h(v)m(ersion)f(information)g(ab)s(out)h(the)h
-(curren)m(t)f(instance)g(of)g(Bash.)150 4743 y Fs(shell-expand-line)c
-(\(M-C-e\))630 4853 y Ft(Expand)34 b(the)h(line)f(as)i(the)f(shell)f
-(do)s(es.)55 b(This)33 b(p)s(erforms)h(alias)g(and)h(history)f
-(expansion)630 4963 y(as)g(w)m(ell)e(as)i(all)f(of)g(the)h(shell)e(w)m
-(ord)h(expansions)f(\(see)j(Section)e(3.5)i([Shell)c(Expansions],)630
-5072 y(page)g(16\).)150 5230 y Fs(history-expand-line)25
-b(\(M-^\))630 5340 y Ft(P)m(erform)30 b(history)g(expansion)f(on)h(the)
-h(curren)m(t)f(line.)p eop
+4585 y Ft(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 Fs(shell-expand-line)c
+(\(M-C-e\))630 4853 y Ft(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(16\).)150 5230 y Fs(history-expand-line)25
+b(\(M-^\))630 5340 y Ft(P)m(erform)30 b(history)h(expansion)f(on)g(the)
+h(curren)m(t)f(line.)p eop end
%%Page: 103 109
-103 108 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2060 b(103)150 299 y Fs(magic-space)27
-b(\(\))630 408 y Ft(P)m(erform)c(history)f(expansion)g(on)h(the)g
-(curren)m(t)g(line)e(and)i(insert)f(a)h(space)h(\(see)g(Section)f(9.3)
-630 518 y([History)30 b(In)m(teraction],)i(page)f(111\).)150
-664 y Fs(alias-expand-line)26 b(\(\))630 774 y Ft(P)m(erform)i(alias)g
-(expansion)f(on)h(the)h(curren)m(t)f(line)f(\(see)i(Section)f(6.6)i
-([Aliases],)e(page)h(71\).)150 920 y Fs(history-and-alias-expand)o
-(-lin)o(e)24 b(\(\))630 1029 y Ft(P)m(erform)30 b(history)g(and)f
-(alias)h(expansion)f(on)h(the)h(curren)m(t)f(line.)150
+TeXDict begin 103 108 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(103)150 299 y Fs(magic-space)27
+b(\(\))630 408 y Ft(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(111\).)150
+664 y Fs(alias-expand-line)26 b(\(\))630 774 y Ft(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(71\).)150 920 y Fs(history-and-alias-expand)o
+(-lin)o(e)24 b(\(\))630 1029 y Ft(P)m(erform)30 b(history)h(and)e
+(alias)j(expansion)e(on)g(the)h(curren)m(t)f(line.)150
1176 y Fs(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630
1285 y Ft(A)g(synon)m(ym)g(for)g Fs(yank-last-arg)p Ft(.)150
1431 y Fs(operate-and-get-next)25 b(\(C-o\))630 1541
-y Ft(Accept)42 b(the)e(curren)m(t)h(line)d(for)j(execution)f(and)g
-(fetc)m(h)i(the)e(next)h(line)e(relativ)m(e)i(to)g(the)630
-1650 y(curren)m(t)30 b(line)f(from)h(the)g(history)g(for)g(editing.)39
-b(An)m(y)31 b(argumen)m(t)f(is)g(ignored.)150 1797 y
+y Ft(Accept)42 b(the)e(curren)m(t)h(line)f(for)h(execution)g(and)f
+(fetc)m(h)i(the)e(next)h(line)g(relativ)m(e)i(to)e(the)630
+1650 y(curren)m(t)30 b(line)h(from)f(the)g(history)h(for)f(editing.)41
+b(An)m(y)31 b(argumen)m(t)f(is)h(ignored.)150 1797 y
Fs(edit-and-execute-command)24 b(\(C-xC-e\))630 1906
-y Ft(In)m(v)m(ok)m(e)34 b(an)f(editor)f(on)h(the)g(curren)m(t)f
-(command)h(line,)f(and)g(execute)i(the)f(result)f(as)h(shell)630
-2016 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)g
-Fs($VISUAL)p Ft(,)g Fs($EDITOR)p Ft(,)h(and)d Fs(emacs)g
-Ft(as)h(the)630 2125 y(editor,)30 b(in)f(that)i(order.)150
+y Ft(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
+2016 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)h
+Fs($VISUAL)p Ft(,)f Fs($EDITOR)p Ft(,)h(and)d Fs(emacs)g
+Ft(as)h(the)630 2125 y(editor,)31 b(in)f(that)h(order.)150
2363 y Fr(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)275 2600
-y Ft(While)22 b(the)i(Readline)e(library)f(do)s(es)j(not)g(ha)m(v)m(e)g
-(a)h(full)c(set)j(of)g Fs(vi)f Ft(editing)f(functions,)i(it)f(do)s(es)h
-(con)m(tain)150 2710 y(enough)34 b(to)h(allo)m(w)e(simple)f(editing)h
-(of)h(the)g(line.)50 b(The)34 b(Readline)e Fs(vi)i Ft(mo)s(de)f(b)s
-(eha)m(v)m(es)i(as)f(sp)s(eci\014ed)e(in)150 2819 y(the)f
+y Ft(While)24 b(the)g(Readline)g(library)f(do)s(es)h(not)g(ha)m(v)m(e)g
+(a)h(full)e(set)h(of)g Fs(vi)f Ft(editing)h(functions,)h(it)f(do)s(es)g
+(con)m(tain)150 2710 y(enough)34 b(to)h(allo)m(w)g(simple)f(editing)h
+(of)f(the)g(line.)52 b(The)34 b(Readline)g Fs(vi)g Ft(mo)s(de)f(b)s
+(eha)m(v)m(es)i(as)f(sp)s(eci\014ed)f(in)150 2819 y(the)e
Fl(posix)e Ft(1003.2)k(standard.)275 2947 y(In)i(order)g(to)i(switc)m
-(h)e(in)m(teractiv)m(ely)h(b)s(et)m(w)m(een)g Fs(emacs)f
-Ft(and)g Fs(vi)g Ft(editing)f(mo)s(des,)j(use)f(the)g(`)p
+(h)f(in)m(teractiv)m(ely)j(b)s(et)m(w)m(een)d Fs(emacs)f
+Ft(and)g Fs(vi)g Ft(editing)h(mo)s(des,)h(use)f(the)g(`)p
Fs(set)30 b(-o)150 3057 y(emacs)p Ft(')21 b(and)g(`)p
-Fs(set)29 b(-o)h(vi)p Ft(')21 b(commands)h(\(see)g(Section)g(4.3)h
-([The)e(Set)h(Builtin],)g(page)g(50\).)39 b(The)21 b(Readline)150
-3166 y(default)30 b(is)f Fs(emacs)g Ft(mo)s(de.)275 3294
-y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)d(in)h Fs(vi)g
-Ft(mo)s(de,)h(y)m(ou)h(are)f(already)g(placed)f(in)g(`insertion')f(mo)s
-(de,)i(as)h(if)e(y)m(ou)150 3404 y(had)d(t)m(yp)s(ed)g(an)g(`)p
+Fs(set)29 b(-o)h(vi)p Ft(')21 b(commands)h(\(see)g(Section)h(4.3)g
+([The)e(Set)h(Builtin],)j(page)d(50\).)39 b(The)21 b(Readline)150
+3166 y(default)31 b(is)f Fs(emacs)f Ft(mo)s(de.)275 3294
+y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fs(vi)f
+Ft(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 3404 y(had)c(t)m(yp)s(ed)g(an)g(`)p
Fs(i)p Ft('.)39 b(Pressing)1215 3401 y Fg(h)p 1239 3348
139 4 v 1239 3404 a Ff(ESC)p 1239 3419 V 1373 3401 a
-Fg(i)1429 3404 y Ft(switc)m(hes)26 b(y)m(ou)h(in)m(to)f(`command')g(mo)
-s(de,)h(where)f(y)m(ou)h(can)f(edit)g(the)150 3513 y(text)35
-b(of)f(the)g(line)e(with)g(the)i(standard)f Fs(vi)g Ft(mo)m(v)m(emen)m
-(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)f(history)f(lines)g(with)150
-3623 y(`)p Fs(k)p Ft(')f(and)e(subsequen)m(t)h(lines)f(with)g(`)p
-Fs(j)p Ft(',)h(and)g(so)h(forth.)150 3861 y Fr(8.6)68
+Fg(i)1429 3404 y Ft(switc)m(hes)27 b(y)m(ou)g(in)m(to)g(`command')f(mo)
+s(de,)h(where)f(y)m(ou)h(can)f(edit)h(the)150 3513 y(text)35
+b(of)f(the)g(line)g(with)f(the)h(standard)f Fs(vi)g Ft(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
+3623 y(`)p Fs(k)p Ft(')d(and)e(subsequen)m(t)h(lines)h(with)f(`)p
+Fs(j)p Ft(',)g(and)g(so)h(forth.)150 3861 y Fr(8.6)68
b(Programmable)47 b(Completion)275 4098 y Ft(When)25
-b(w)m(ord)g(completion)g(is)g(attempted)h(for)g(an)f(argumen)m(t)h(to)h
-(a)f(command)f(for)h(whic)m(h)e(a)i(comple-)150 4208
-y(tion)e(sp)s(eci\014cation)f(\(a)j Fq(compsp)s(ec)6
-b Ft(\))24 b(has)g(b)s(een)g(de\014ned)g(using)f(the)h
-Fs(complete)f Ft(builtin)e(\(see)k(Section)g(8.7)150
-4317 y([Programmable)e(Completion)f(Builtins],)g(page)i(105\),)j(the)c
-(programmable)g(completion)f(facilities)g(are)150 4427
-y(in)m(v)m(ok)m(ed.)275 4555 y(First,)g(the)f(command)g(name)g(is)g
-(iden)m(ti\014ed.)35 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f
+b(w)m(ord)g(completion)i(is)f(attempted)g(for)g(an)f(argumen)m(t)h(to)h
+(a)f(command)f(for)h(whic)m(h)f(a)h(comple-)150 4208
+y(tion)f(sp)s(eci\014cation)g(\(a)h Fq(compsp)s(ec)6
+b Ft(\))24 b(has)g(b)s(een)g(de\014ned)g(using)g(the)g
+Fs(complete)f Ft(builtin)h(\(see)h(Section)h(8.7)150
+4317 y([Programmable)e(Completion)g(Builtins],)h(page)f(105\),)j(the)c
+(programmable)h(completion)g(facilities)i(are)150 4427
+y(in)m(v)m(ok)m(ed.)275 4555 y(First,)d(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 4664 y(the)44
-b(compsp)s(ec)g(is)f(used)g(to)h(generate)i(the)e(list)e(of)i(p)s
-(ossible)e(completions)h(for)g(the)h(w)m(ord.)81 b(If)44
-b(the)150 4774 y(command)33 b(w)m(ord)f(is)g(a)h(full)e(pathname,)j(a)f
-(compsp)s(ec)f(for)h(the)g(full)e(pathname)h(is)g(searc)m(hed)i(for)e
-(\014rst.)150 4883 y(If)f(no)h(compsp)s(ec)f(is)g(found)f(for)h(the)h
-(full)e(pathname,)i(an)f(attempt)i(is)e(made)g(to)i(\014nd)d(a)i
-(compsp)s(ec)f(for)150 4993 y(the)g(p)s(ortion)e(follo)m(wing)f(the)j
-(\014nal)e(slash.)275 5121 y(Once)34 b(a)g(compsp)s(ec)g(has)g(b)s(een)
-f(found,)h(it)g(is)f(used)g(to)i(generate)h(the)e(list)f(of)h(matc)m
-(hing)g(w)m(ords.)51 b(If)150 5230 y(a)37 b(compsp)s(ec)f(is)f(not)i
-(found,)f(the)h(default)e(Bash)i(completion)e(describ)s(ed)f(ab)s(o)m
-(v)m(e)k(\(see)f(Section)f(8.4.6)150 5340 y([Commands)30
-b(F)-8 b(or)31 b(Completion],)e(page)i(99\))h(is)d(p)s(erformed.)p
-eop
+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 4774 y(command)33 b(w)m(ord)f(is)h(a)g(full)g(pathname,)h(a)f
+(compsp)s(ec)f(for)h(the)g(full)g(pathname)f(is)h(searc)m(hed)h(for)e
+(\014rst.)150 4883 y(If)f(no)h(compsp)s(ec)f(is)h(found)e(for)h(the)h
+(full)g(pathname,)g(an)f(attempt)i(is)f(made)f(to)i(\014nd)d(a)i
+(compsp)s(ec)f(for)150 4993 y(the)g(p)s(ortion)f(follo)m(wing)h(the)g
+(\014nal)f(slash.)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(99\))h(is)e(p)s(erformed.)p
+eop end
%%Page: 104 110
-104 109 bop 150 -116 a Ft(104)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-275 299 y(First,)f(the)h(actions)f(sp)s(eci\014ed)f(b)m(y)i(the)f
-(compsp)s(ec)h(are)g(used.)40 b(Only)29 b(matc)m(hes)j(whic)m(h)d(are)i
-(pre\014xed)150 408 y(b)m(y)25 b(the)h(w)m(ord)f(b)s(eing)e(completed)j
-(are)f(returned.)38 b(When)25 b(the)h(`)p Fs(-f)p Ft(')f(or)g(`)p
-Fs(-d)p Ft(')g(option)g(is)f(used)h(for)g(\014lename)150
-518 y(or)30 b(directory)g(name)g(completion,)g(the)g(shell)f(v)-5
-b(ariable)29 b Fs(FIGNORE)f Ft(is)h(used)g(to)i(\014lter)f(the)g(matc)m
-(hes.)42 b(See)150 628 y(Section)30 b(5.2)i([Bash)e(V)-8
-b(ariables],)31 b(page)g(55,)g(for)f(a)h(description)e(of)h
-Fs(FIGNORE)p Ft(.)275 765 y(An)m(y)f(completions)f(sp)s(eci\014ed)g(b)m
-(y)h(a)h(\014lename)e(expansion)h(pattern)g(to)h(the)g(`)p
-Fs(-G)p Ft(')f(option)g(are)g(gener-)150 874 y(ated)h(next.)40
+TeXDict begin 104 109 bop 150 -116 a Ft(104)2527 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 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
+408 y(b)m(y)25 b(the)h(w)m(ord)f(b)s(eing)f(completed)j(are)e
+(returned.)38 b(When)25 b(the)h(`)p Fs(-f)p Ft(')f(or)g(`)p
+Fs(-d)p Ft(')g(option)h(is)f(used)g(for)g(\014lename)150
+518 y(or)30 b(directory)h(name)f(completion,)i(the)e(shell)h(v)-5
+b(ariable)31 b Fs(FIGNORE)d Ft(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(55,)g(for)f(a)h(description)g(of)f
+Fs(FIGNORE)p Ft(.)275 765 y(An)m(y)f(completions)h(sp)s(eci\014ed)f(b)m
+(y)g(a)h(\014lename)f(expansion)h(pattern)f(to)h(the)g(`)p
+Fs(-G)p Ft(')f(option)h(are)f(gener-)150 874 y(ated)h(next.)40
b(The)29 b(w)m(ords)g(generated)h(b)m(y)f(the)h(pattern)f(need)g(not)g
-(matc)m(h)i(the)e(w)m(ord)g(b)s(eing)f(completed.)150
-984 y(The)42 b Fs(GLOBIGNORE)d Ft(shell)i(v)-5 b(ariable)41
-b(is)g(not)i(used)e(to)i(\014lter)e(the)i(matc)m(hes,)j(but)c(the)g
-Fs(FIGNORE)f Ft(shell)150 1093 y(v)-5 b(ariable)29 b(is)h(used.)275
-1230 y(Next,)35 b(the)g(string)d(sp)s(eci\014ed)h(as)h(the)g(argumen)m
-(t)g(to)h(the)f(`)p Fs(-W)p Ft(')g(option)f(is)g(considered.)51
-b(The)33 b(string)150 1340 y(is)f(\014rst)f(split)g(using)g(the)i(c)m
-(haracters)h(in)d(the)i Fs(IFS)e Ft(sp)s(ecial)h(v)-5
-b(ariable)31 b(as)i(delimiters.)45 b(Shell)30 b(quoting)i(is)150
-1450 y(honored.)37 b(Eac)m(h)21 b(w)m(ord)g(is)f(then)g(expanded)g
-(using)g(brace)h(expansion,)h(tilde)d(expansion,)j(parameter)g(and)150
-1559 y(v)-5 b(ariable)24 b(expansion,)h(command)g(substitution,)f
-(arithmetic)g(expansion,)h(and)g(pathname)g(expansion,)150
-1669 y(as)j(describ)s(ed)d(ab)s(o)m(v)m(e)k(\(see)f(Section)g(3.5)g
-([Shell)e(Expansions],)g(page)j(16\).)41 b(The)27 b(results)f(are)i
-(split)d(using)150 1778 y(the)33 b(rules)f(describ)s(ed)e(ab)s(o)m(v)m
-(e)k(\(see)g(Section)f(3.5.7)i([W)-8 b(ord)33 b(Splitting],)f(page)h
-(22\).)50 b(The)32 b(results)g(of)h(the)150 1888 y(expansion)g(are)i
-(pre\014x-matc)m(hed)f(against)h(the)f(w)m(ord)g(b)s(eing)f(completed,)
-j(and)e(the)g(matc)m(hing)g(w)m(ords)150 1998 y(b)s(ecome)d(the)f(p)s
-(ossible)e(completions.)275 2134 y(After)h(these)g(matc)m(hes)i(ha)m(v)
-m(e)f(b)s(een)f(generated,)h(an)m(y)g(shell)d(function)h(or)h(command)g
-(sp)s(eci\014ed)e(with)150 2244 y(the)j(`)p Fs(-F)p Ft(')g(and)f(`)p
-Fs(-C)p Ft(')h(options)f(is)g(in)m(v)m(ok)m(ed.)40 b(When)30
-b(the)g(command)g(or)f(function)g(is)g(in)m(v)m(ok)m(ed,)h(the)g
+(matc)m(h)i(the)e(w)m(ord)g(b)s(eing)g(completed.)150
+984 y(The)42 b Fs(GLOBIGNORE)d Ft(shell)k(v)-5 b(ariable)43
+b(is)f(not)h(used)e(to)i(\014lter)f(the)h(matc)m(hes,)j(but)c(the)g
+Fs(FIGNORE)f Ft(shell)150 1093 y(v)-5 b(ariable)31 b(is)g(used.)275
+1230 y(Next,)k(the)g(string)e(sp)s(eci\014ed)h(as)g(the)g(argumen)m(t)g
+(to)h(the)f(`)p Fs(-W)p Ft(')g(option)g(is)g(considered.)52
+b(The)33 b(string)150 1340 y(is)g(\014rst)e(split)i(using)f(the)h(c)m
+(haracters)h(in)e(the)h Fs(IFS)e Ft(sp)s(ecial)j(v)-5
+b(ariable)33 b(as)g(delimiters.)48 b(Shell)32 b(quoting)h(is)150
+1450 y(honored.)k(Eac)m(h)21 b(w)m(ord)g(is)g(then)f(expanded)g(using)h
+(brace)g(expansion,)i(tilde)e(expansion,)i(parameter)f(and)150
+1559 y(v)-5 b(ariable)26 b(expansion,)g(command)f(substitution,)h
+(arithmetic)g(expansion,)g(and)f(pathname)g(expansion,)150
+1669 y(as)j(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)h(3.5)f
+([Shell)g(Expansions],)f(page)i(16\).)41 b(The)27 b(results)g(are)h
+(split)f(using)150 1778 y(the)33 b(rules)g(describ)s(ed)e(ab)s(o)m(v)m
+(e)j(\(see)g(Section)g(3.5.7)h([W)-8 b(ord)33 b(Splitting],)i(page)e
+(22\).)50 b(The)32 b(results)h(of)g(the)150 1888 y(expansion)h(are)h
+(pre\014x-matc)m(hed)f(against)i(the)e(w)m(ord)g(b)s(eing)g(completed,)
+j(and)d(the)g(matc)m(hing)h(w)m(ords)150 1998 y(b)s(ecome)c(the)f(p)s
+(ossible)g(completions.)275 2134 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 2244 y(the)i(`)p Fs(-F)p Ft(')g(and)f(`)p
+Fs(-C)p Ft(')h(options)g(is)g(in)m(v)m(ok)m(ed.)41 b(When)30
+b(the)g(command)g(or)f(function)h(is)g(in)m(v)m(ok)m(ed,)h(the)f
Fs(COMP_)150 2354 y(LINE)21 b Ft(and)h Fs(COMP_POINT)d
-Ft(v)-5 b(ariables)21 b(are)i(assigned)f(v)-5 b(alues)21
-b(as)i(describ)s(ed)d(ab)s(o)m(v)m(e)k(\(see)f(Section)f(5.2)i([Bash)
-150 2463 y(V)-8 b(ariables],)31 b(page)h(55\).)44 b(If)30
-b(a)i(shell)d(function)g(is)h(b)s(eing)g(in)m(v)m(ok)m(ed,)i(the)f
+Ft(v)-5 b(ariables)23 b(are)g(assigned)g(v)-5 b(alues)22
+b(as)h(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)g(5.2)h([Bash)
+150 2463 y(V)-8 b(ariables],)33 b(page)f(55\).)44 b(If)30
+b(a)i(shell)f(function)f(is)h(b)s(eing)g(in)m(v)m(ok)m(ed,)i(the)e
Fs(COMP_WORDS)d Ft(and)j Fs(COMP_CWORD)150 2573 y Ft(v)-5
-b(ariables)38 b(are)i(also)g(set.)68 b(When)40 b(the)f(function)g(or)g
-(command)g(is)g(in)m(v)m(ok)m(ed,)j(the)e(\014rst)f(argumen)m(t)h(is)
+b(ariables)40 b(are)g(also)h(set.)68 b(When)40 b(the)f(function)h(or)f
+(command)g(is)h(in)m(v)m(ok)m(ed,)j(the)d(\014rst)f(argumen)m(t)h(is)
150 2682 y(the)34 b(name)f(of)h(the)g(command)f(whose)g(argumen)m(ts)h
-(are)g(b)s(eing)e(completed,)j(the)e(second)h(argumen)m(t)g(is)150
-2792 y(the)h(w)m(ord)g(b)s(eing)f(completed,)i(and)f(the)g(third)e
-(argumen)m(t)j(is)e(the)h(w)m(ord)g(preceding)f(the)i(w)m(ord)e(b)s
-(eing)150 2902 y(completed)d(on)f(the)h(curren)m(t)g(command)f(line.)40
-b(No)31 b(\014ltering)e(of)i(the)g(generated)h(completions)e(against)
-150 3011 y(the)f(w)m(ord)g(b)s(eing)e(completed)i(is)f(p)s(erformed;)g
-(the)h(function)f(or)h(command)f(has)h(complete)g(freedom)g(in)150
-3121 y(generating)i(the)f(matc)m(hes.)275 3258 y(An)m(y)h(function)g
-(sp)s(eci\014ed)f(with)g(`)p Fs(-F)p Ft(')i(is)f(in)m(v)m(ok)m(ed)h
-(\014rst.)44 b(The)31 b(function)g(ma)m(y)h(use)g(an)m(y)g(of)g(the)g
-(shell)150 3367 y(facilities,)40 b(including)d(the)j
-Fs(compgen)d Ft(builtin)g(describ)s(ed)g(b)s(elo)m(w)i(\(see)i(Section)
-e(8.7)i([Programmable)150 3477 y(Completion)26 b(Builtins],)f(page)j
+(are)g(b)s(eing)f(completed,)j(the)d(second)h(argumen)m(t)g(is)150
+2792 y(the)h(w)m(ord)g(b)s(eing)g(completed,)i(and)e(the)g(third)f
+(argumen)m(t)i(is)f(the)g(w)m(ord)g(preceding)g(the)h(w)m(ord)e(b)s
+(eing)150 2902 y(completed)e(on)e(the)h(curren)m(t)g(command)f(line.)42
+b(No)31 b(\014ltering)g(of)g(the)g(generated)h(completions)g(against)
+150 3011 y(the)d(w)m(ord)g(b)s(eing)f(completed)i(is)f(p)s(erformed;)f
+(the)h(function)g(or)g(command)f(has)h(complete)h(freedom)f(in)150
+3121 y(generating)j(the)e(matc)m(hes.)275 3258 y(An)m(y)h(function)h
+(sp)s(eci\014ed)f(with)g(`)p Fs(-F)p Ft(')h(is)g(in)m(v)m(ok)m(ed)h
+(\014rst.)44 b(The)31 b(function)h(ma)m(y)g(use)g(an)m(y)g(of)g(the)g
+(shell)150 3367 y(facilities,)44 b(including)c(the)g
+Fs(compgen)d Ft(builtin)j(describ)s(ed)e(b)s(elo)m(w)i(\(see)h(Section)
+f(8.7)h([Programmable)150 3477 y(Completion)28 b(Builtins],)g(page)g
(105\),)i(to)e(generate)h(the)e(matc)m(hes.)41 b(It)27
-b(m)m(ust)g(put)g(the)g(p)s(ossible)e(comple-)150 3587
-y(tions)30 b(in)f(the)h Fs(COMPREPLY)e Ft(arra)m(y)j(v)-5
-b(ariable.)275 3724 y(Next,)23 b(an)m(y)e(command)f(sp)s(eci\014ed)f
-(with)g(the)i(`)p Fs(-C)p Ft(')f(option)g(is)g(in)m(v)m(ok)m(ed)h(in)e
-(an)h(en)m(vironmen)m(t)g(equiv)-5 b(alen)m(t)150 3833
-y(to)26 b(command)e(substitution.)37 b(It)25 b(should)e(prin)m(t)h(a)h
-(list)f(of)h(completions,)g(one)g(p)s(er)f(line,)h(to)h(the)f(standard)
-150 3943 y(output.)40 b(Bac)m(kslash)31 b(ma)m(y)g(b)s(e)f(used)g(to)h
-(escap)s(e)g(a)f(newline,)f(if)g(necessary)-8 b(.)275
-4080 y(After)42 b(all)e(of)i(the)g(p)s(ossible)e(completions)h(are)h
-(generated,)k(an)m(y)c(\014lter)f(sp)s(eci\014ed)f(with)h(the)h(`)p
-Fs(-X)p Ft(')150 4189 y(option)33 b(is)f(applied)f(to)j(the)f(list.)47
-b(The)33 b(\014lter)f(is)g(a)i(pattern)f(as)g(used)g(for)g(pathname)g
-(expansion;)g(a)h(`)p Fs(&)p Ft(')150 4299 y(in)k(the)h(pattern)g(is)f
-(replaced)g(with)g(the)h(text)h(of)f(the)g(w)m(ord)g(b)s(eing)e
-(completed.)67 b(A)39 b(literal)e(`)p Fs(&)p Ft(')i(ma)m(y)150
-4408 y(b)s(e)e(escap)s(ed)h(with)f(a)i(bac)m(kslash;)j(the)c(bac)m
-(kslash)g(is)f(remo)m(v)m(ed)i(b)s(efore)e(attempting)i(a)f(matc)m(h.)
-65 b(An)m(y)150 4518 y(completion)33 b(that)i(matc)m(hes)g(the)f
-(pattern)g(will)d(b)s(e)j(remo)m(v)m(ed)h(from)e(the)h(list.)51
-b(A)34 b(leading)e(`)p Fs(!)p Ft(')j(negates)150 4628
-y(the)c(pattern;)f(in)f(this)h(case)h(an)m(y)g(completion)e(not)i(matc)
-m(hing)g(the)f(pattern)h(will)c(b)s(e)j(remo)m(v)m(ed.)275
-4765 y(Finally)-8 b(,)30 b(an)m(y)i(pre\014x)f(and)g(su\016x)g(sp)s
-(eci\014ed)f(with)h(the)h(`)p Fs(-P)p Ft(')f(and)g(`)p
-Fs(-S)p Ft(')h(options)f(are)h(added)f(to)i(eac)m(h)150
-4874 y(mem)m(b)s(er)e(of)g(the)h(completion)f(list,)f(and)h(the)h
-(result)e(is)h(returned)f(to)i(the)g(Readline)e(completion)h(co)s(de)
-150 4984 y(as)g(the)f(list)f(of)i(p)s(ossible)d(completions.)275
-5121 y(If)22 b(the)i(previously-applied)19 b(actions)24
-b(do)f(not)h(generate)h(an)m(y)f(matc)m(hes,)i(and)d(the)g(`)p
-Fs(-o)30 b(dirnames)p Ft(')22 b(op-)150 5230 y(tion)28
-b(w)m(as)g(supplied)d(to)k Fs(complete)d Ft(when)h(the)h(compsp)s(ec)g
-(w)m(as)g(de\014ned,)g(directory)f(name)i(completion)150
-5340 y(is)g(attempted.)p eop
+b(m)m(ust)g(put)g(the)g(p)s(ossible)g(comple-)150 3587
+y(tions)k(in)f(the)g Fs(COMPREPLY)e Ft(arra)m(y)j(v)-5
+b(ariable.)275 3724 y(Next,)23 b(an)m(y)e(command)f(sp)s(eci\014ed)g
+(with)g(the)h(`)p Fs(-C)p Ft(')f(option)h(is)g(in)m(v)m(ok)m(ed)h(in)e
+(an)g(en)m(vironmen)m(t)h(equiv)-5 b(alen)m(t)150 3833
+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 3943 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
+4080 y(After)42 b(all)g(of)g(the)g(p)s(ossible)g(completions)h(are)f
+(generated,)k(an)m(y)c(\014lter)g(sp)s(eci\014ed)f(with)h(the)g(`)p
+Fs(-X)p Ft(')150 4189 y(option)34 b(is)f(applied)g(to)h(the)f(list.)49
+b(The)33 b(\014lter)g(is)g(a)h(pattern)f(as)g(used)g(for)g(pathname)g
+(expansion;)h(a)g(`)p Fs(&)p Ft(')150 4299 y(in)39 b(the)g(pattern)g
+(is)g(replaced)g(with)g(the)g(text)h(of)f(the)g(w)m(ord)g(b)s(eing)f
+(completed.)68 b(A)39 b(literal)h(`)p Fs(&)p Ft(')f(ma)m(y)150
+4408 y(b)s(e)e(escap)s(ed)h(with)g(a)h(bac)m(kslash;)k(the)38
+b(bac)m(kslash)h(is)f(remo)m(v)m(ed)h(b)s(efore)e(attempting)j(a)e
+(matc)m(h.)65 b(An)m(y)150 4518 y(completion)35 b(that)g(matc)m(hes)g
+(the)f(pattern)g(will)g(b)s(e)g(remo)m(v)m(ed)h(from)e(the)h(list.)53
+b(A)34 b(leading)g(`)p Fs(!)p Ft(')h(negates)150 4628
+y(the)c(pattern;)f(in)g(this)h(case)g(an)m(y)g(completion)g(not)g(matc)
+m(hing)h(the)e(pattern)h(will)f(b)s(e)g(remo)m(v)m(ed.)275
+4765 y(Finally)-8 b(,)33 b(an)m(y)f(pre\014x)f(and)g(su\016x)g(sp)s
+(eci\014ed)g(with)h(the)g(`)p Fs(-P)p Ft(')f(and)g(`)p
+Fs(-S)p Ft(')h(options)g(are)g(added)f(to)i(eac)m(h)150
+4874 y(mem)m(b)s(er)e(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 4984 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275
+5121 y(If)22 b(the)i(previously-applied)f(actions)i(do)e(not)h
+(generate)h(an)m(y)f(matc)m(hes,)i(and)d(the)g(`)p Fs(-o)30
+b(dirnames)p Ft(')22 b(op-)150 5230 y(tion)29 b(w)m(as)f(supplied)f(to)
+i Fs(complete)d Ft(when)h(the)h(compsp)s(ec)g(w)m(as)g(de\014ned,)g
+(directory)g(name)h(completion)150 5340 y(is)h(attempted.)p
+eop end
%%Page: 105 111
-105 110 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2060 b(105)275 299 y(If)30 b(the)i(`)p
-Fs(-o)e(plusdirs)p Ft(')f(option)i(w)m(as)g(supplied)d(to)k
+TeXDict begin 105 110 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(105)275 299 y(If)30
+b(the)i(`)p Fs(-o)e(plusdirs)p Ft(')f(option)j(w)m(as)f(supplied)f(to)i
Fs(complete)e Ft(when)g(the)h(compsp)s(ec)g(w)m(as)h(de\014ned,)150
-408 y(directory)j(name)g(completion)g(is)f(attempted)i(and)f(an)m(y)h
-(matc)m(hes)g(are)g(added)f(to)h(the)f(results)f(of)i(the)150
-518 y(other)31 b(actions.)275 659 y(By)g(default,)h(if)e(a)i(compsp)s
-(ec)f(is)g(found,)g(whatev)m(er)h(it)f(generates)i(is)d(returned)h(to)h
-(the)g(completion)150 769 y(co)s(de)21 b(as)g(the)g(full)e(set)i(of)g
-(p)s(ossible)d(completions.)37 b(The)20 b(default)g(Bash)h(completions)
-f(are)i(not)f(attempted,)150 879 y(and)k(the)h(Readline)e(default)h(of)
-h(\014lename)f(completion)g(is)g(disabled.)36 b(If)26
+408 y(directory)k(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
+518 y(other)31 b(actions.)275 659 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 769 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 879 y(and)k(the)h(Readline)g(default)g(of)
+g(\014lename)g(completion)h(is)f(disabled.)38 b(If)26
b(the)g(`)p Fs(-o)k(bashdefault)p Ft(')22 b(option)150
-988 y(w)m(as)i(supplied)c(to)25 b Fs(complete)c Ft(when)i(the)g(compsp)
-s(ec)h(w)m(as)g(de\014ned,)g(the)f(default)g(Bash)h(completions)f(are)
-150 1098 y(attempted)h(if)e(the)h(compsp)s(ec)g(generates)i(no)e(matc)m
+988 y(w)m(as)i(supplied)e(to)j Fs(complete)c Ft(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 1098 y(attempted)f(if)f(the)g(compsp)s(ec)g(generates)i(no)e(matc)m
(hes.)39 b(If)23 b(the)g(`)p Fs(-o)30 b(default)p Ft(')21
-b(option)i(w)m(as)g(supplied)d(to)150 1207 y Fs(complete)25
-b Ft(when)h(the)h(compsp)s(ec)f(w)m(as)i(de\014ned,)e(Readline's)g
-(default)g(completion)g(will)e(b)s(e)i(p)s(erformed)150
-1317 y(if)j(the)i(compsp)s(ec)f(\(and,)g(if)g(attempted,)h(the)g
-(default)e(Bash)i(completions\))f(generate)i(no)e(matc)m(hes.)275
-1458 y(When)20 b(a)i(compsp)s(ec)e(indicates)g(that)i(directory)f(name)
-g(completion)f(is)g(desired,)i(the)f(programmable)150
-1568 y(completion)29 b(functions)f(force)j(Readline)d(to)j(app)s(end)d
-(a)i(slash)f(to)h(completed)g(names)f(whic)m(h)g(are)h(sym-)150
-1678 y(b)s(olic)38 b(links)g(to)j(directories,)h(sub)5
-b(ject)40 b(to)h(the)f(v)-5 b(alue)40 b(of)g(the)g Fq(mark-directories)
-j Ft(Readline)c(v)-5 b(ariable,)150 1787 y(regardless)30
-b(of)g(the)h(setting)f(of)h(the)f Fq(mark-symlink)m(ed-directories)i
-Ft(Readline)d(v)-5 b(ariable.)150 2062 y Fr(8.7)68 b(Programmable)47
-b(Completion)f(Builtins)275 2313 y Ft(Tw)m(o)30 b(builtin)d(commands)j
-(are)h(a)m(v)-5 b(ailable)29 b(to)i(manipulate)e(the)i(programmable)e
-(completion)h(facil-)150 2423 y(ities.)150 2592 y Fs(compgen)870
-2730 y(compgen)46 b([)p Fj(option)11 b Fs(])45 b([)p
-Fj(word)11 b Fs(])630 2868 y Ft(Generate)27 b(p)s(ossible)c(completion)
-i(matc)m(hes)i(for)e Fq(w)m(ord)k Ft(according)d(to)g(the)g
-Fq(option)p Ft(s,)g(whic)m(h)630 2978 y(ma)m(y)i(b)s(e)f(an)m(y)h
-(option)f(accepted)i(b)m(y)e(the)h Fs(complete)d Ft(builtin)g(with)h
-(the)i(exception)f(of)h(`)p Fs(-p)p Ft(')630 3088 y(and)k(`)p
-Fs(-r)p Ft(',)i(and)e(write)g(the)h(matc)m(hes)h(to)g(the)f(standard)f
-(output.)48 b(When)33 b(using)e(the)i(`)p Fs(-F)p Ft(')630
-3197 y(or)28 b(`)p Fs(-C)p Ft(')g(options,)g(the)g(v)-5
-b(arious)28 b(shell)e(v)-5 b(ariables)27 b(set)h(b)m(y)g(the)g
-(programmable)g(completion)630 3307 y(facilities,)h(while)f(a)m(v)-5
-b(ailable,)30 b(will)e(not)j(ha)m(v)m(e)g(useful)e(v)-5
-b(alues.)630 3445 y(The)34 b(matc)m(hes)h(will)d(b)s(e)i(generated)h
-(in)e(the)i(same)g(w)m(a)m(y)g(as)g(if)e(the)i(programmable)e(com-)630
-3554 y(pletion)c(co)s(de)i(had)f(generated)i(them)e(directly)g(from)g
-(a)h(completion)f(sp)s(eci\014cation)f(with)630 3664
-y(the)g(same)h(\015ags.)40 b(If)29 b Fq(w)m(ord)j Ft(is)c(sp)s
-(eci\014ed,)g(only)g(those)i(completions)e(matc)m(hing)h
-Fq(w)m(ord)k Ft(will)630 3773 y(b)s(e)d(displa)m(y)m(ed.)630
-3911 y(The)24 b(return)g(v)-5 b(alue)24 b(is)g(true)g(unless)f(an)i(in)
-m(v)-5 b(alid)22 b(option)i(is)g(supplied,)e(or)j(no)g(matc)m(hes)g(w)m
+b(option)j(w)m(as)f(supplied)f(to)150 1207 y Fs(complete)j
+Ft(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
+1317 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
+1458 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
+1568 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
+1678 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 Fq(mark-directories)
+45 b Ft(Readline)c(v)-5 b(ariable,)150 1787 y(regardless)31
+b(of)f(the)h(setting)g(of)g(the)f Fq(mark-symlink)m(ed-directories)36
+b Ft(Readline)31 b(v)-5 b(ariable.)150 2062 y Fr(8.7)68
+b(Programmable)47 b(Completion)f(Builtins)275 2313 y
+Ft(Tw)m(o)30 b(builtin)g(commands)g(are)h(a)m(v)-5 b(ailable)32
+b(to)f(manipulate)g(the)g(programmable)f(completion)i(facil-)150
+2423 y(ities.)150 2592 y Fs(compgen)870 2730 y(compgen)46
+b([)p Fj(option)11 b Fs(])45 b([)p Fj(word)11 b Fs(])630
+2868 y Ft(Generate)27 b(p)s(ossible)e(completion)i(matc)m(hes)g(for)e
+Fq(w)m(ord)k Ft(according)e(to)f(the)g Fq(option)p Ft(s,)h(whic)m(h)630
+2978 y(ma)m(y)h(b)s(e)f(an)m(y)h(option)g(accepted)h(b)m(y)e(the)h
+Fs(complete)d Ft(builtin)j(with)f(the)h(exception)g(of)g(`)p
+Fs(-p)p Ft(')630 3088 y(and)k(`)p Fs(-r)p Ft(',)i(and)e(write)h(the)g
+(matc)m(hes)h(to)g(the)f(standard)f(output.)48 b(When)33
+b(using)f(the)h(`)p Fs(-F)p Ft(')630 3197 y(or)28 b(`)p
+Fs(-C)p Ft(')g(options,)h(the)f(v)-5 b(arious)29 b(shell)f(v)-5
+b(ariables)29 b(set)f(b)m(y)g(the)g(programmable)h(completion)630
+3307 y(facilities,)k(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 3445 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 3554 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 3664 y(the)e(same)h(\015ags.)40 b(If)29 b Fq(w)m(ord)j
+Ft(is)d(sp)s(eci\014ed,)g(only)g(those)h(completions)g(matc)m(hing)g
+Fq(w)m(ord)j Ft(will)630 3773 y(b)s(e)d(displa)m(y)m(ed.)630
+3911 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 4021 y(generated.)150 4187 y Fs(complete)870
4325 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)11
b Fs(])44 b([-A)j Fj(action)11 b Fs(])45 b([-G)i Fj(glob-)870
b Fs(])45 b([-X)i Fj(filterpat)11 b Fs(])45 b([-F)i Fj(function)11
b Fs(])870 4654 y([-C)47 b Fj(command)11 b Fs(])45 b
Fj(name)57 b Fs([)p Fj(name)g Fs(...)o(])870 4764 y(complete)46
-b(-pr)g([)p Fj(name)57 b Fs(...])630 4902 y Ft(Sp)s(ecify)32
-b(ho)m(w)i(argumen)m(ts)h(to)f(eac)m(h)i Fq(name)j Ft(should)32
-b(b)s(e)h(completed.)52 b(If)33 b(the)i(`)p Fs(-p)p Ft(')e(option)630
-5011 y(is)c(supplied,)d(or)k(if)f(no)g(options)g(are)h(supplied,)d
+b(-pr)g([)p Fj(name)57 b Fs(...])630 4902 y Ft(Sp)s(ecify)33
+b(ho)m(w)h(argumen)m(ts)h(to)f(eac)m(h)i Fq(name)j Ft(should)33
+b(b)s(e)g(completed.)53 b(If)33 b(the)i(`)p Fs(-p)p Ft(')e(option)630
+5011 y(is)d(supplied,)e(or)i(if)g(no)f(options)h(are)g(supplied,)f
(existing)h(completion)h(sp)s(eci\014cations)g(are)630
-5121 y(prin)m(ted)42 b(in)h(a)h(w)m(a)m(y)h(that)f(allo)m(ws)f(them)h
-(to)g(b)s(e)g(reused)f(as)h(input.)79 b(The)43 b(`)p
-Fs(-r)p Ft(')g(option)630 5230 y(remo)m(v)m(es)29 b(a)f(completion)f
-(sp)s(eci\014cation)f(for)i(eac)m(h)g Fq(name)p Ft(,)h(or,)f(if)f(no)g
-Fq(name)5 b Ft(s)28 b(are)g(supplied,)630 5340 y(all)h(completion)h(sp)
-s(eci\014cations.)p eop
+5121 y(prin)m(ted)43 b(in)h(a)g(w)m(a)m(y)h(that)f(allo)m(ws)h(them)f
+(to)g(b)s(e)g(reused)f(as)h(input.)80 b(The)43 b(`)p
+Fs(-r)p Ft(')g(option)630 5230 y(remo)m(v)m(es)29 b(a)f(completion)h
+(sp)s(eci\014cation)f(for)g(eac)m(h)g Fq(name)p Ft(,)h(or,)f(if)g(no)f
+Fq(name)5 b Ft(s)28 b(are)g(supplied,)630 5340 y(all)j(completion)h(sp)
+s(eci\014cations.)p eop end
%%Page: 106 112
-106 111 bop 150 -116 a Ft(106)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-630 299 y(The)e(pro)s(cess)g(of)h(applying)e(these)i(completion)e(sp)s
-(eci\014cations)h(when)f(w)m(ord)i(completion)630 408
-y(is)k(attempted)i(is)e(describ)s(ed)f(ab)s(o)m(v)m(e)k(\(see)f
-(Section)f(8.6)h([Programmable)f(Completion],)630 518
-y(page)c(103\).)630 652 y(Other)41 b(options,)k(if)40
-b(sp)s(eci\014ed,)j(ha)m(v)m(e)g(the)f(follo)m(wing)f(meanings.)74
-b(The)41 b(argumen)m(ts)h(to)630 762 y(the)e(`)p Fs(-G)p
-Ft(',)j(`)p Fs(-W)p Ft(',)g(and)d(`)p Fs(-X)p Ft(')g(options)f(\(and,)k
-(if)c(necessary)-8 b(,)44 b(the)c(`)p Fs(-P)p Ft(')h(and)e(`)p
-Fs(-S)p Ft(')h(options\))630 872 y(should)29 b(b)s(e)i(quoted)g(to)h
-(protect)g(them)f(from)g(expansion)f(b)s(efore)h(the)g
-Fs(complete)e Ft(builtin)630 981 y(is)g(in)m(v)m(ok)m(ed.)630
-1140 y Fs(-o)h Fj(comp-option)1110 1250 y Ft(The)c Fq(comp-option)h
-Ft(con)m(trols)g(sev)m(eral)h(asp)s(ects)f(of)g(the)g(compsp)s(ec's)g
-(b)s(eha)m(v-)1110 1359 y(ior)f(b)s(ey)m(ond)g(the)g(simple)f
-(generation)i(of)f(completions.)39 b Fq(comp-option)26
-b Ft(ma)m(y)1110 1469 y(b)s(e)k(one)g(of:)1110 1628 y
-Fs(bashdefault)1590 1738 y Ft(P)m(erform)d(the)h(rest)f(of)h(the)g
-(default)e(Bash)i(completions)e(if)h(the)1590 1847 y(compsp)s(ec)j
-(generates)i(no)e(matc)m(hes.)1110 2006 y Fs(default)144
-b Ft(Use)22 b(Readline's)e(default)h(\014lename)g(completion)f(if)h
-(the)h(comp-)1590 2116 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110
-2275 y Fs(dirnames)96 b Ft(P)m(erform)46 b(directory)f(name)i
-(completion)e(if)g(the)h(compsp)s(ec)1590 2385 y(generates)32
+TeXDict begin 106 111 bop 150 -116 a Ft(106)2527 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 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 408 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
+518 y(page)31 b(103\).)630 652 y(Other)41 b(options,)46
+b(if)41 b(sp)s(eci\014ed,)j(ha)m(v)m(e)f(the)f(follo)m(wing)i
+(meanings.)75 b(The)41 b(argumen)m(ts)h(to)630 762 y(the)e(`)p
+Fs(-G)p Ft(',)j(`)p Fs(-W)p Ft(',)g(and)d(`)p Fs(-X)p
+Ft(')g(options)g(\(and,)j(if)d(necessary)-8 b(,)44 b(the)c(`)p
+Fs(-P)p Ft(')h(and)e(`)p Fs(-S)p Ft(')h(options\))630
+872 y(should)30 b(b)s(e)h(quoted)g(to)h(protect)g(them)f(from)g
+(expansion)g(b)s(efore)g(the)g Fs(complete)e Ft(builtin)630
+981 y(is)h(in)m(v)m(ok)m(ed.)630 1140 y Fs(-o)g Fj(comp-option)1110
+1250 y Ft(The)c Fq(comp-option)i Ft(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
+1359 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h(generation)h(of)e
+(completions.)41 b Fq(comp-option)27 b Ft(ma)m(y)1110
+1469 y(b)s(e)j(one)g(of:)1110 1628 y Fs(bashdefault)1590
+1738 y Ft(P)m(erform)d(the)h(rest)f(of)h(the)g(default)f(Bash)h
+(completions)g(if)g(the)1590 1847 y(compsp)s(ec)i(generates)i(no)e
+(matc)m(hes.)1110 2006 y Fs(default)144 b Ft(Use)22 b(Readline's)g
+(default)g(\014lename)g(completion)g(if)g(the)g(comp-)1590
+2116 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110
+2275 y Fs(dirnames)96 b Ft(P)m(erform)46 b(directory)g(name)h
+(completion)g(if)f(the)g(compsp)s(ec)1590 2385 y(generates)32
b(no)e(matc)m(hes.)1110 2544 y Fs(filenames)1590 2653
-y Ft(T)-8 b(ell)38 b(Readline)f(that)j(the)f(compsp)s(ec)f(generates)j
-(\014lenames,)1590 2763 y(so)29 b(it)g(can)g(p)s(erform)f(an)m(y)h
-(\014lename-sp)s(eci\014c)f(pro)s(cessing)f(\(lik)m(e)1590
-2872 y(adding)h(a)i(slash)e(to)i(directory)f(names)g(or)g(suppressing)e
-(trail-)1590 2982 y(ing)37 b(spaces\).)66 b(This)36 b(option)i(is)f(in)
-m(tended)g(to)i(b)s(e)f(used)f(with)1590 3092 y(shell)29
-b(functions)g(sp)s(eci\014ed)f(with)h(`)p Fs(-F)p Ft('.)1110
-3251 y Fs(nospace)144 b Ft(T)-8 b(ell)38 b(Readline)g(not)i(to)g(app)s
-(end)d(a)j(space)g(\(the)f(default\))g(to)1590 3360 y(w)m(ords)30
-b(completed)g(at)h(the)g(end)f(of)g(the)h(line.)630 3519
-y Fs(-A)f Fj(action)1110 3629 y Ft(The)25 b Fq(action)g
-Ft(ma)m(y)h(b)s(e)e(one)h(of)h(the)f(follo)m(wing)f(to)h(generate)i(a)e
-(list)f(of)h(p)s(ossible)1110 3739 y(completions:)1110
-3898 y Fs(alias)240 b Ft(Alias)29 b(names.)41 b(Ma)m(y)31
-b(also)g(b)s(e)f(sp)s(eci\014ed)e(as)j(`)p Fs(-a)p Ft('.)1110
-4057 y Fs(arrayvar)96 b Ft(Arra)m(y)31 b(v)-5 b(ariable)29
-b(names.)1110 4216 y Fs(binding)144 b Ft(Readline)28
-b(k)m(ey)h(binding)d(names)j(\(see)h(Section)e(8.4)i([Bindable)1590
-4325 y(Readline)f(Commands],)h(page)h(95\).)1110 4484
-y Fs(builtin)144 b Ft(Names)21 b(of)g(shell)d(builtin)g(commands.)37
-b(Ma)m(y)21 b(also)g(b)s(e)f(sp)s(eci\014ed)1590 4594
+y Ft(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j
+(\014lenames,)1590 2763 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
+2872 y(adding)h(a)h(slash)f(to)h(directory)g(names)f(or)g(suppressing)f
+(trail-)1590 2982 y(ing)38 b(spaces\).)66 b(This)37 b(option)i(is)f(in)
+m(tended)g(to)h(b)s(e)f(used)f(with)1590 3092 y(shell)31
+b(functions)f(sp)s(eci\014ed)f(with)h(`)p Fs(-F)p Ft('.)1110
+3251 y Fs(nospace)144 b Ft(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 3360 y(w)m(ords)30
+b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)630 3519
+y Fs(-A)f Fj(action)1110 3629 y Ft(The)25 b Fq(action)h
+Ft(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 3739 y(completions:)1110
+3898 y Fs(alias)240 b Ft(Alias)31 b(names.)41 b(Ma)m(y)31
+b(also)h(b)s(e)e(sp)s(eci\014ed)f(as)i(`)p Fs(-a)p Ft('.)1110
+4057 y Fs(arrayvar)96 b Ft(Arra)m(y)31 b(v)-5 b(ariable)31
+b(names.)1110 4216 y Fs(binding)144 b Ft(Readline)30
+b(k)m(ey)f(binding)f(names)h(\(see)h(Section)f(8.4)h([Bindable)1590
+4325 y(Readline)h(Commands],)f(page)h(95\).)1110 4484
+y Fs(builtin)144 b Ft(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 4594
y(as)31 b(`)p Fs(-b)p Ft('.)1110 4753 y Fs(command)144
-b Ft(Command)29 b(names.)41 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s
-(eci\014ed)e(as)j(`)p Fs(-c)p Ft('.)1110 4912 y Fs(directory)1590
-5022 y Ft(Directory)g(names.)40 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s
-(eci\014ed)f(as)h(`)p Fs(-d)p Ft('.)1110 5181 y Fs(disabled)96
-b Ft(Names)31 b(of)g(disabled)d(shell)g(builtins.)1110
-5340 y Fs(enabled)144 b Ft(Names)31 b(of)g(enabled)e(shell)f(builtins.)
-p eop
+b Ft(Command)29 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s
+(eci\014ed)f(as)i(`)p Fs(-c)p Ft('.)1110 4912 y Fs(directory)1590
+5022 y Ft(Directory)h(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s
+(eci\014ed)g(as)g(`)p Fs(-d)p Ft('.)1110 5181 y Fs(disabled)96
+b Ft(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110
+5340 y Fs(enabled)144 b Ft(Names)31 b(of)g(enabled)f(shell)g(builtins.)
+p eop end
%%Page: 107 113
-107 112 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29
-b(Line)h(Editing)2060 b(107)1110 299 y Fs(export)192
-b Ft(Names)34 b(of)f(exp)s(orted)f(shell)f(v)-5 b(ariables.)47
-b(Ma)m(y)35 b(also)d(b)s(e)h(sp)s(eci-)1590 408 y(\014ed)d(as)g(`)p
-Fs(-e)p Ft('.)1110 558 y Fs(file)288 b Ft(File)30 b(names.)40
-b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e(as)j(`)p
+TeXDict begin 107 112 bop 150 -116 a Ft(Chapter)30 b(8:)41
+b(Command)29 b(Line)i(Editing)2062 b(107)1110 299 y Fs(export)192
+b Ft(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 408 y(\014ed)d(as)g(`)p
+Fs(-e)p Ft('.)1110 558 y Fs(file)288 b Ft(File)32 b(names.)40
+b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i(`)p
Fs(-f)p Ft('.)1110 708 y Fs(function)96 b Ft(Names)31
-b(of)g(shell)d(functions.)1110 858 y Fs(group)240 b Ft(Group)30
-b(names.)40 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)f(as)h(`)p
-Fs(-g)p Ft('.)1110 1008 y Fs(helptopic)1590 1118 y Ft(Help)36
-b(topics)g(as)h(accepted)h(b)m(y)e(the)h Fs(help)f Ft(builtin)d(\(see)k
-(Sec-)1590 1228 y(tion)30 b(4.2)h([Bash)g(Builtins],)d(page)j(39\).)
+b(of)g(shell)f(functions.)1110 858 y Fs(group)240 b Ft(Group)30
+b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)g(`)p
+Fs(-g)p Ft('.)1110 1008 y Fs(helptopic)1590 1118 y Ft(Help)37
+b(topics)g(as)g(accepted)h(b)m(y)e(the)h Fs(help)f Ft(builtin)g(\(see)h
+(Sec-)1590 1228 y(tion)31 b(4.2)g([Bash)g(Builtins],)g(page)g(39\).)
1110 1377 y Fs(hostname)96 b Ft(Hostnames,)89 b(as)76
-b(tak)m(en)h(from)f(the)g(\014le)g(sp)s(eci\014ed)e(b)m(y)1590
-1487 y(the)55 b Fs(HOSTFILE)e Ft(shell)h(v)-5 b(ariable)54
-b(\(see)i(Section)f(5.2)i([Bash)1590 1597 y(V)-8 b(ariables],)30
-b(page)h(55\).)1110 1747 y Fs(job)336 b Ft(Job)31 b(names,)h(if)f(job)g
-(con)m(trol)h(is)f(activ)m(e.)45 b(Ma)m(y)33 b(also)f(b)s(e)f(sp)s
+b(tak)m(en)h(from)f(the)g(\014le)h(sp)s(eci\014ed)e(b)m(y)1590
+1487 y(the)55 b Fs(HOSTFILE)e Ft(shell)j(v)-5 b(ariable)56
+b(\(see)g(Section)g(5.2)h([Bash)1590 1597 y(V)-8 b(ariables],)32
+b(page)f(55\).)1110 1747 y Fs(job)336 b Ft(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 1856 y(\014ed)f(as)g(`)p Fs(-j)p Ft('.)1110
-2006 y Fs(keyword)144 b Ft(Shell)28 b(reserv)m(ed)j(w)m(ords.)40
-b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e(as)j(`)p
+2006 y Fs(keyword)144 b Ft(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(`)p
Fs(-k)p Ft('.)1110 2156 y Fs(running)144 b Ft(Names)31
-b(of)g(running)c(jobs,)j(if)g(job)g(con)m(trol)g(is)g(activ)m(e.)1110
-2306 y Fs(service)144 b Ft(Service)30 b(names.)41 b(Ma)m(y)31
-b(also)f(b)s(e)g(sp)s(eci\014ed)f(as)h(`)p Fs(-s)p Ft('.)1110
-2456 y Fs(setopt)192 b Ft(V)-8 b(alid)32 b(argumen)m(ts)h(for)f(the)h
-(`)p Fs(-o)p Ft(')g(option)f(to)i(the)f Fs(set)e Ft(builtin)1590
-2566 y(\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)d(page)j(50\).)
-1110 2716 y Fs(shopt)240 b Ft(Shell)38 b(option)h(names)h(as)g
+b(of)g(running)d(jobs,)i(if)h(job)f(con)m(trol)h(is)g(activ)m(e.)1110
+2306 y Fs(service)144 b Ft(Service)31 b(names.)41 b(Ma)m(y)31
+b(also)g(b)s(e)f(sp)s(eci\014ed)g(as)g(`)p Fs(-s)p Ft('.)1110
+2456 y Fs(setopt)192 b Ft(V)-8 b(alid)34 b(argumen)m(ts)f(for)f(the)h
+(`)p Fs(-o)p Ft(')g(option)g(to)h(the)f Fs(set)e Ft(builtin)1590
+2566 y(\(see)g(Section)h(4.3)f([The)f(Set)h(Builtin],)g(page)g(50\).)
+1110 2716 y Fs(shopt)240 b Ft(Shell)40 b(option)g(names)g(as)g
(accepted)i(b)m(y)e(the)g Fs(shopt)e Ft(builtin)1590
-2825 y(\(see)31 b(Section)g(4.2)g([Bash)g(Builtins],)d(page)j(39\).)
-1110 2975 y Fs(signal)192 b Ft(Signal)29 b(names.)1110
-3125 y Fs(stopped)144 b Ft(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)f
-(job)h(con)m(trol)h(is)f(activ)m(e.)1110 3275 y Fs(user)288
-b Ft(User)30 b(names.)41 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e
-(as)j(`)p Fs(-u)p Ft('.)1110 3425 y Fs(variable)96 b
-Ft(Names)36 b(of)g(all)e(shell)g(v)-5 b(ariables.)54
-b(Ma)m(y)37 b(also)e(b)s(e)g(sp)s(eci\014ed)f(as)1590
-3535 y(`)p Fs(-v)p Ft('.)630 3685 y Fs(-G)c Fj(globpat)1110
-3794 y Ft(The)39 b(\014lename)g(expansion)g(pattern)h
-Fq(globpat)i Ft(is)d(expanded)g(to)h(generate)1110 3904
-y(the)31 b(p)s(ossible)c(completions.)630 4054 y Fs(-W)j
-Fj(wordlist)1110 4163 y Ft(The)24 b Fq(w)m(ordlist)i
-Ft(is)e(split)f(using)g(the)i(c)m(haracters)i(in)c(the)j
-Fs(IFS)e Ft(sp)s(ecial)f(v)-5 b(ariable)1110 4273 y(as)36
-b(delimiters,)f(and)h(eac)m(h)h(resultan)m(t)f(w)m(ord)f(is)g
-(expanded.)57 b(The)35 b(p)s(ossible)1110 4383 y(completions)29
-b(are)g(the)h(mem)m(b)s(ers)f(of)g(the)h(resultan)m(t)f(list)f(whic)m
-(h)g(matc)m(h)j(the)1110 4492 y(w)m(ord)f(b)s(eing)f(completed.)630
-4642 y Fs(-C)h Fj(command)1110 4752 y Fq(command)35 b
-Ft(is)d(executed)h(in)d(a)j(subshell)c(en)m(vironmen)m(t,)j(and)g(its)f
-(output)h(is)1110 4861 y(used)e(as)g(the)h(p)s(ossible)d(completions.)
-630 5011 y Fs(-F)i Fj(function)1110 5121 y Ft(The)25
-b(shell)g(function)f Fq(function)h Ft(is)g(executed)i(in)d(the)j
-(curren)m(t)e(shell)g(en)m(viron-)1110 5230 y(men)m(t.)40
-b(When)25 b(it)g(\014nishes,)f(the)i(p)s(ossible)d(completions)h(are)i
-(retriev)m(ed)f(from)1110 5340 y(the)31 b(v)-5 b(alue)29
-b(of)i(the)g Fs(COMPREPLY)c Ft(arra)m(y)k(v)-5 b(ariable.)p
-eop
+2825 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(39\).)
+1110 2975 y Fs(signal)192 b Ft(Signal)31 b(names.)1110
+3125 y Fs(stopped)144 b Ft(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 3275 y Fs(user)288
+b Ft(User)30 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f
+(as)i(`)p Fs(-u)p Ft('.)1110 3425 y Fs(variable)96 b
+Ft(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
+3535 y(`)p Fs(-v)p Ft('.)630 3685 y Fs(-G)30 b Fj(globpat)1110
+3794 y Ft(The)39 b(\014lename)h(expansion)g(pattern)g
+Fq(globpat)j Ft(is)d(expanded)f(to)h(generate)1110 3904
+y(the)31 b(p)s(ossible)e(completions.)630 4054 y Fs(-W)h
+Fj(wordlist)1110 4163 y Ft(The)24 b Fq(w)m(ordlist)k
+Ft(is)d(split)g(using)f(the)h(c)m(haracters)i(in)d(the)i
+Fs(IFS)e Ft(sp)s(ecial)h(v)-5 b(ariable)1110 4273 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 4383 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 4492 y(w)m(ord)f(b)s(eing)g(completed.)630
+4642 y Fs(-C)g Fj(command)1110 4752 y Fq(command)35 b
+Ft(is)e(executed)g(in)e(a)i(subshell)e(en)m(vironmen)m(t,)i(and)f(its)g
+(output)g(is)1110 4861 y(used)e(as)g(the)h(p)s(ossible)f(completions.)
+630 5011 y Fs(-F)g Fj(function)1110 5121 y Ft(The)25
+b(shell)i(function)e Fq(function)h Ft(is)g(executed)h(in)e(the)i
+(curren)m(t)e(shell)i(en)m(viron-)1110 5230 y(men)m(t.)40
+b(When)25 b(it)h(\014nishes,)f(the)h(p)s(ossible)f(completions)h(are)g
+(retriev)m(ed)g(from)1110 5340 y(the)31 b(v)-5 b(alue)30
+b(of)h(the)g Fs(COMPREPLY)c Ft(arra)m(y)k(v)-5 b(ariable.)p
+eop end
%%Page: 108 114
-108 113 bop 150 -116 a Ft(108)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-630 299 y Fs(-X)f Fj(filterpat)1110 408 y Fq(\014lterpat)c
-Ft(is)e(a)h(pattern)g(as)f(used)g(for)h(\014lename)f(expansion.)37
-b(It)25 b(is)f(applied)e(to)1110 518 y(the)30 b(list)d(of)j(p)s
-(ossible)d(completions)h(generated)j(b)m(y)e(the)g(preceding)g(options)
-1110 628 y(and)e(argumen)m(ts,)i(and)e(eac)m(h)i(completion)e(matc)m
-(hing)h Fq(\014lterpat)h Ft(is)e(remo)m(v)m(ed)1110 737
-y(from)j(the)h(list.)40 b(A)30 b(leading)g(`)p Fs(!)p
-Ft(')g(in)f Fq(\014lterpat)j Ft(negates)g(the)f(pattern;)g(in)e(this)
-1110 847 y(case,)j(an)m(y)e(completion)g(not)h(matc)m(hing)f
-Fq(\014lterpat)i Ft(is)d(remo)m(v)m(ed.)630 1006 y Fs(-P)h
-Fj(prefix)1110 1116 y Fq(pre\014x)39 b Ft(is)33 b(added)g(at)i(the)f(b)
-s(eginning)d(of)k(eac)m(h)g(p)s(ossible)c(completion)i(after)1110
-1225 y(all)c(other)i(options)f(ha)m(v)m(e)h(b)s(een)f(applied.)630
-1385 y Fs(-S)g Fj(suffix)1110 1494 y Fq(su\016x)c Ft(is)19
-b(app)s(ended)g(to)i(eac)m(h)h(p)s(ossible)c(completion)i(after)h(all)e
-(other)i(options)1110 1604 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630
-1763 y(The)35 b(return)g(v)-5 b(alue)36 b(is)f(true)g(unless)g(an)g(in)
-m(v)-5 b(alid)34 b(option)h(is)g(supplied,)f(an)i(option)g(other)630
+TeXDict begin 108 113 bop 150 -116 a Ft(108)2527 b(Bash)31
+b(Reference)g(Man)m(ual)630 299 y Fs(-X)f Fj(filterpat)1110
+408 y Fq(\014lterpat)d Ft(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
+518 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 628 y(and)d(argumen)m(ts,)i(and)e
+(eac)m(h)i(completion)g(matc)m(hing)g Fq(\014lterpat)h
+Ft(is)e(remo)m(v)m(ed)1110 737 y(from)i(the)h(list.)42
+b(A)30 b(leading)i(`)p Fs(!)p Ft(')e(in)g Fq(\014lterpat)j
+Ft(negates)f(the)f(pattern;)g(in)f(this)1110 847 y(case,)i(an)m(y)e
+(completion)i(not)f(matc)m(hing)g Fq(\014lterpat)i Ft(is)d(remo)m(v)m
+(ed.)630 1006 y Fs(-P)g Fj(prefix)1110 1116 y Fq(pre\014x)39
+b Ft(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 1225 y(all)c(other)g(options)g(ha)m
+(v)m(e)g(b)s(een)f(applied.)630 1385 y Fs(-S)g Fj(suffix)1110
+1494 y Fq(su\016x)c Ft(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
+1604 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 1763 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
1873 y(than)31 b(`)p Fs(-p)p Ft(')g(or)g(`)p Fs(-r)p
-Ft(')g(is)f(supplied)e(without)i(a)h Fq(name)37 b Ft(argumen)m(t,)32
-b(an)f(attempt)h(is)e(made)h(to)630 1983 y(remo)m(v)m(e)h(a)e
-(completion)g(sp)s(eci\014cation)f(for)h(a)h Fq(name)k
-Ft(for)30 b(whic)m(h)f(no)h(sp)s(eci\014cation)f(exists,)630
-2092 y(or)h(an)h(error)f(o)s(ccurs)g(adding)f(a)h(completion)g(sp)s
-(eci\014cation.)p eop
+Ft(')g(is)g(supplied)f(without)h(a)g Fq(name)37 b Ft(argumen)m(t,)32
+b(an)f(attempt)h(is)f(made)g(to)630 1983 y(remo)m(v)m(e)h(a)e
+(completion)i(sp)s(eci\014cation)f(for)f(a)h Fq(name)k
+Ft(for)30 b(whic)m(h)g(no)g(sp)s(eci\014cation)h(exists,)630
+2092 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s
+(eci\014cation.)p eop end
%%Page: 109 115
-109 114 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29
-b(History)h(In)m(teractiv)m(ely)1923 b(109)150 299 y
-Fo(9)80 b(Using)54 b(History)g(In)l(teractiv)l(ely)275
-562 y Ft(This)31 b(c)m(hapter)j(describ)s(es)d(ho)m(w)i(to)h(use)f(the)
-g Fl(gnu)g Ft(History)g(Library)e(in)m(teractiv)m(ely)-8
-b(,)34 b(from)f(a)h(user's)150 671 y(standp)s(oin)m(t.)75
-b(It)42 b(should)e(b)s(e)i(considered)f(a)h(user's)g(guide.)75
-b(F)-8 b(or)43 b(information)d(on)i(using)f(the)h Fl(gnu)150
-781 y Ft(History)30 b(Library)f(in)g(other)h(programs,)g(see)h(the)g
-Fl(gnu)f Ft(Readline)f(Library)g(Man)m(ual.)150 1062
+TeXDict begin 109 114 bop 150 -116 a Ft(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(109)150
+299 y Fo(9)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)275
+562 y Ft(This)32 b(c)m(hapter)i(describ)s(es)e(ho)m(w)h(to)h(use)f(the)
+g Fl(gnu)g Ft(History)h(Library)e(in)m(teractiv)m(ely)-8
+b(,)37 b(from)c(a)h(user's)150 671 y(standp)s(oin)m(t.)76
+b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76
+b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fl(gnu)150
+781 y Ft(History)31 b(Library)f(in)g(other)g(programs,)g(see)h(the)g
+Fl(gnu)f Ft(Readline)h(Library)f(Man)m(ual.)150 1062
y Fr(9.1)68 b(Bash)45 b(History)h(F)-11 b(acilities)275
-1316 y Ft(When)36 b(the)h(`)p Fs(-o)30 b(history)p Ft(')k(option)i(to)i
-(the)e Fs(set)g Ft(builtin)d(is)j(enabled)f(\(see)j(Section)e(4.3)h
-([The)g(Set)150 1425 y(Builtin],)29 b(page)j(50\),)h(the)e(shell)f(pro)
-m(vides)g(access)i(to)g(the)f Fq(command)g(history)p
-Ft(,)g(the)g(list)f(of)h(commands)150 1535 y(previously)f(t)m(yp)s(ed.)
-47 b(The)33 b(v)-5 b(alue)32 b(of)g(the)h Fs(HISTSIZE)e
-Ft(shell)f(v)-5 b(ariable)32 b(is)g(used)f(as)i(the)g(n)m(um)m(b)s(er)e
-(of)i(com-)150 1644 y(mands)i(to)i(sa)m(v)m(e)h(in)d(a)h(history)g
-(list.)56 b(The)36 b(text)h(of)g(the)f(last)g Fs($HISTSIZE)e
-Ft(commands)i(\(default)f(500\))150 1754 y(is)h(sa)m(v)m(ed.)61
-b(The)36 b(shell)f(stores)j(eac)m(h)g(command)e(in)g(the)h(history)f
-(list)f(prior)g(to)j(parameter)f(and)f(v)-5 b(ari-)150
-1864 y(able)32 b(expansion)g(but)g(after)h(history)e(expansion)h(is)g
-(p)s(erformed,)f(sub)5 b(ject)33 b(to)g(the)g(v)-5 b(alues)32
-b(of)h(the)g(shell)150 1973 y(v)-5 b(ariables)29 b Fs(HISTIGNORE)f
-Ft(and)h Fs(HISTCONTROL)p Ft(.)275 2117 y(When)g(the)g(shell)f(starts)i
-(up,)f(the)h(history)e(is)h(initialized)d(from)j(the)h(\014le)e(named)h
-(b)m(y)h(the)f Fs(HISTFILE)150 2227 y Ft(v)-5 b(ariable)19
-b(\(default)i(`)p Fs(~/.bash_history)p Ft('\).)34 b(The)20
-b(\014le)g(named)g(b)m(y)h(the)g(v)-5 b(alue)20 b(of)h
-Fs(HISTFILE)d Ft(is)i(truncated,)150 2336 y(if)41 b(necessary)-8
-b(,)45 b(to)e(con)m(tain)f(no)g(more)g(than)f(the)h(n)m(um)m(b)s(er)f
-(of)h(lines)e(sp)s(eci\014ed)g(b)m(y)i(the)g(v)-5 b(alue)41
-b(of)h(the)150 2446 y Fs(HISTFILESIZE)21 b Ft(v)-5 b(ariable.)38
-b(When)24 b(an)g(in)m(teractiv)m(e)h(shell)e(exits,)i(the)g(last)f
-Fs($HISTSIZE)e Ft(lines)h(are)h(copied)150 2556 y(from)29
-b(the)i(history)d(list)h(to)i(the)f(\014le)f(named)g(b)m(y)h
+1316 y Ft(When)36 b(the)h(`)p Fs(-o)30 b(history)p Ft(')k(option)j(to)h
+(the)e Fs(set)g Ft(builtin)g(is)h(enabled)f(\(see)i(Section)f(4.3)g
+([The)g(Set)150 1425 y(Builtin],)32 b(page)g(50\),)h(the)e(shell)h(pro)
+m(vides)f(access)h(to)g(the)f Fq(command)g(history)p
+Ft(,)h(the)f(list)h(of)f(commands)150 1535 y(previously)h(t)m(yp)s(ed.)
+47 b(The)33 b(v)-5 b(alue)33 b(of)f(the)h Fs(HISTSIZE)e
+Ft(shell)h(v)-5 b(ariable)34 b(is)f(used)e(as)i(the)g(n)m(um)m(b)s(er)e
+(of)i(com-)150 1644 y(mands)i(to)i(sa)m(v)m(e)h(in)e(a)g(history)h
+(list.)58 b(The)36 b(text)h(of)g(the)f(last)h Fs($HISTSIZE)d
+Ft(commands)i(\(default)g(500\))150 1754 y(is)h(sa)m(v)m(ed.)61
+b(The)36 b(shell)h(stores)h(eac)m(h)g(command)e(in)h(the)g(history)g
+(list)g(prior)f(to)i(parameter)f(and)f(v)-5 b(ari-)150
+1864 y(able)33 b(expansion)g(but)f(after)h(history)f(expansion)h(is)g
+(p)s(erformed,)e(sub)5 b(ject)33 b(to)g(the)g(v)-5 b(alues)33
+b(of)g(the)g(shell)150 1973 y(v)-5 b(ariables)31 b Fs(HISTIGNORE)d
+Ft(and)h Fs(HISTCONTROL)p Ft(.)275 2117 y(When)g(the)g(shell)h(starts)g
+(up,)f(the)h(history)f(is)h(initialized)h(from)e(the)h(\014le)f(named)g
+(b)m(y)h(the)f Fs(HISTFILE)150 2227 y Ft(v)-5 b(ariable)21
+b(\(default)h(`)p Fs(~/.bash_history)p Ft('\).)34 b(The)20
+b(\014le)h(named)f(b)m(y)h(the)g(v)-5 b(alue)21 b(of)g
+Fs(HISTFILE)d Ft(is)j(truncated,)150 2336 y(if)42 b(necessary)-8
+b(,)45 b(to)e(con)m(tain)g(no)f(more)g(than)f(the)h(n)m(um)m(b)s(er)f
+(of)h(lines)g(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alue)42
+b(of)g(the)150 2446 y Fs(HISTFILESIZE)21 b Ft(v)-5 b(ariable.)40
+b(When)24 b(an)g(in)m(teractiv)m(e)j(shell)e(exits,)h(the)f(last)g
+Fs($HISTSIZE)d Ft(lines)j(are)f(copied)150 2556 y(from)29
+b(the)i(history)e(list)i(to)g(the)f(\014le)g(named)f(b)m(y)h
Fs($HISTFILE)p Ft(.)38 b(If)30 b(the)g Fs(histappend)d
-Ft(shell)h(option)h(is)g(set)150 2665 y(\(see)22 b(Section)f(4.2)h
-([Bash)g(Builtins],)e(page)i(39\),)j(the)c(lines)e(are)j(app)s(ended)d
-(to)j(the)f(history)f(\014le,)j(otherwise)150 2775 y(the)32
-b(history)e(\014le)g(is)h(o)m(v)m(erwritten.)44 b(If)31
-b Fs(HISTFILE)e Ft(is)i(unset,)g(or)h(if)e(the)i(history)e(\014le)g(is)
-h(un)m(writable,)f(the)150 2884 y(history)36 b(is)h(not)g(sa)m(v)m(ed.)
-63 b(After)38 b(sa)m(ving)f(the)g(history)-8 b(,)39 b(the)f(history)e
-(\014le)g(is)h(truncated)g(to)h(con)m(tain)g(no)150 2994
-y(more)31 b(than)f Fs($HISTFILESIZE)c Ft(lines.)39 b(If)30
-b Fs(HISTFILESIZE)d Ft(is)j(not)g(set,)h(no)g(truncation)e(is)h(p)s
-(erformed.)275 3138 y(If)h(the)h Fs(HISTTIMEFORMAT)d
-Ft(is)i(set,)i(the)f(time)g(stamp)g(information)e(asso)s(ciated)j(with)
-e(eac)m(h)i(history)150 3247 y(en)m(try)e(is)e(written)g(to)j(the)e
-(history)f(\014le.)275 3392 y(The)19 b(builtin)e(command)j
-Fs(fc)g Ft(ma)m(y)h(b)s(e)f(used)f(to)i(list)e(or)i(edit)f(and)f
-(re-execute)j(a)f(p)s(ortion)e(of)h(the)h(history)150
-3501 y(list.)39 b(The)27 b Fs(history)f Ft(builtin)f(ma)m(y)k(b)s(e)e
-(used)g(to)i(displa)m(y)e(or)h(mo)s(dify)e(the)i(history)f(list)g(and)h
-(manipulate)150 3611 y(the)j(history)f(\014le.)41 b(When)31
-b(using)e(command-line)g(editing,)h(searc)m(h)h(commands)g(are)g(a)m(v)
--5 b(ailable)30 b(in)g(eac)m(h)150 3720 y(editing)43
-b(mo)s(de)i(that)g(pro)m(vide)f(access)i(to)f(the)g(history)e(list)h
-(\(see)h(Section)g(8.4.2)h([Commands)e(F)-8 b(or)150
-3830 y(History],)30 b(page)i(95\).)275 3974 y(The)47
-b(shell)g(allo)m(ws)h(con)m(trol)g(o)m(v)m(er)i(whic)m(h)d(commands)h
-(are)h(sa)m(v)m(ed)g(on)f(the)h(history)e(list.)93 b(The)150
+Ft(shell)j(option)g(is)g(set)150 2665 y(\(see)22 b(Section)g(4.2)g
+([Bash)g(Builtins],)h(page)f(39\),)j(the)c(lines)g(are)h(app)s(ended)d
+(to)j(the)f(history)g(\014le,)j(otherwise)150 2775 y(the)32
+b(history)f(\014le)g(is)h(o)m(v)m(erwritten.)45 b(If)31
+b Fs(HISTFILE)e Ft(is)j(unset,)f(or)h(if)f(the)h(history)f(\014le)g(is)
+h(un)m(writable,)g(the)150 2884 y(history)37 b(is)h(not)f(sa)m(v)m(ed.)
+63 b(After)38 b(sa)m(ving)g(the)f(history)-8 b(,)40 b(the)e(history)f
+(\014le)g(is)h(truncated)f(to)h(con)m(tain)h(no)150 2994
+y(more)31 b(than)f Fs($HISTFILESIZE)c Ft(lines.)41 b(If)30
+b Fs(HISTFILESIZE)d Ft(is)k(not)f(set,)h(no)g(truncation)f(is)h(p)s
+(erformed.)275 3138 y(If)g(the)h Fs(HISTTIMEFORMAT)d
+Ft(is)j(set,)h(the)f(time)h(stamp)f(information)g(asso)s(ciated)i(with)
+e(eac)m(h)h(history)150 3247 y(en)m(try)e(is)f(written)g(to)i(the)e
+(history)g(\014le.)275 3392 y(The)19 b(builtin)h(command)g
+Fs(fc)g Ft(ma)m(y)h(b)s(e)f(used)f(to)i(list)g(or)g(edit)g(and)e
+(re-execute)j(a)f(p)s(ortion)f(of)g(the)h(history)150
+3501 y(list.)41 b(The)27 b Fs(history)f Ft(builtin)i(ma)m(y)h(b)s(e)e
+(used)g(to)i(displa)m(y)g(or)f(mo)s(dify)f(the)h(history)g(list)h(and)f
+(manipulate)150 3611 y(the)j(history)g(\014le.)42 b(When)31
+b(using)f(command-line)h(editing,)h(searc)m(h)f(commands)g(are)g(a)m(v)
+-5 b(ailable)33 b(in)e(eac)m(h)150 3720 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
+3830 y(History],)31 b(page)h(95\).)275 3974 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
4084 y Fs(HISTCONTROL)25 b Ft(and)j Fs(HISTIGNORE)e Ft(v)-5
-b(ariables)27 b(ma)m(y)j(b)s(e)d(set)j(to)f(cause)g(the)g(shell)d(to)k
-(sa)m(v)m(e)g(only)e(a)h(subset)150 4193 y(of)e(the)g(commands)f(en)m
-(tered.)40 b(The)26 b Fs(cmdhist)f Ft(shell)g(option,)i(if)f(enabled,)g
-(causes)i(the)e(shell)f(to)j(attempt)150 4303 y(to)23
-b(sa)m(v)m(e)h(eac)m(h)f(line)e(of)h(a)h(m)m(ulti-line)c(command)j(in)f
-(the)i(same)f(history)f(en)m(try)-8 b(,)25 b(adding)c(semicolons)g
-(where)150 4412 y(necessary)37 b(to)f(preserv)m(e)h(syn)m(tactic)g
-(correctness.)58 b(The)36 b Fs(lithist)e Ft(shell)g(option)i(causes)h
-(the)f(shell)e(to)150 4522 y(sa)m(v)m(e)25 b(the)e(command)h(with)e(em)
-m(b)s(edded)g(newlines)f(instead)i(of)g(semicolons.)38
-b(The)23 b Fs(shopt)e Ft(builtin)f(is)j(used)150 4631
-y(to)31 b(set)g(these)g(options.)40 b(See)31 b(Section)f(4.2)h([Bash)g
-(Builtins],)d(page)j(39,)h(for)e(a)h(description)d(of)j
+b(ariables)29 b(ma)m(y)h(b)s(e)d(set)j(to)f(cause)g(the)g(shell)f(to)i
+(sa)m(v)m(e)g(only)f(a)g(subset)150 4193 y(of)e(the)g(commands)f(en)m
+(tered.)40 b(The)26 b Fs(cmdhist)f Ft(shell)i(option,)h(if)f(enabled,)g
+(causes)h(the)e(shell)h(to)h(attempt)150 4303 y(to)23
+b(sa)m(v)m(e)h(eac)m(h)f(line)g(of)f(a)h(m)m(ulti-line)g(command)f(in)g
+(the)h(same)f(history)g(en)m(try)-8 b(,)25 b(adding)d(semicolons)h
+(where)150 4412 y(necessary)37 b(to)f(preserv)m(e)h(syn)m(tactic)h
+(correctness.)58 b(The)36 b Fs(lithist)e Ft(shell)i(option)h(causes)g
+(the)f(shell)g(to)150 4522 y(sa)m(v)m(e)25 b(the)e(command)h(with)f(em)
+m(b)s(edded)f(newlines)h(instead)h(of)f(semicolons.)40
+b(The)23 b Fs(shopt)e Ft(builtin)i(is)h(used)150 4631
+y(to)31 b(set)g(these)g(options.)41 b(See)31 b(Section)g(4.2)g([Bash)g
+(Builtins],)g(page)g(39,)h(for)e(a)h(description)f(of)h
Fs(shopt)p Ft(.)150 4913 y Fr(9.2)68 b(Bash)45 b(History)h(Builtins)275
-5166 y Ft(Bash)30 b(pro)m(vides)f(t)m(w)m(o)j(builtin)27
-b(commands)j(whic)m(h)f(manipulate)g(the)h(history)g(list)f(and)h
-(history)f(\014le.)150 5340 y Fs(fc)p eop
+5166 y Ft(Bash)30 b(pro)m(vides)g(t)m(w)m(o)i(builtin)e(commands)g
+(whic)m(h)g(manipulate)h(the)f(history)h(list)g(and)f(history)g
+(\014le.)150 5340 y Fs(fc)p eop end
%%Page: 110 116
-110 115 bop 150 -116 a Ft(110)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-870 299 y Fs(fc)47 b([-e)g Fj(ename)11 b Fs(])46 b([-nlr])g([)p
-Fj(first)11 b Fs(])45 b([)p Fj(last)11 b Fs(])870 408
-y(fc)47 b(-s)g([)p Fj(pat)11 b Fs(=)p Fj(rep)g Fs(])45
-b([)p Fj(command)11 b Fs(])630 539 y Ft(Fix)40 b(Command.)68
-b(In)39 b(the)i(\014rst)e(form,)j(a)e(range)h(of)f(commands)g(from)f
-Fq(\014rst)i Ft(to)g Fq(last)h Ft(is)630 648 y(selected)34
-b(from)f(the)g(history)f(list.)48 b(Both)34 b Fq(\014rst)h
-Ft(and)e Fq(last)i Ft(ma)m(y)f(b)s(e)e(sp)s(eci\014ed)g(as)h(a)h
-(string)630 758 y(\(to)26 b(lo)s(cate)g(the)f(most)h(recen)m(t)g
-(command)e(b)s(eginning)f(with)h(that)h(string\))g(or)g(as)g(a)g(n)m
-(um)m(b)s(er)630 867 y(\(an)f(index)e(in)m(to)h(the)h(history)f(list,)g
-(where)g(a)h(negativ)m(e)h(n)m(um)m(b)s(er)d(is)h(used)g(as)g(an)h
-(o\013set)g(from)630 977 y(the)j(curren)m(t)f(command)h(n)m(um)m(b)s
-(er\).)39 b(If)26 b Fq(last)i Ft(is)e(not)h(sp)s(eci\014ed)e(it)h(is)g
-(set)h(to)h Fq(\014rst)p Ft(.)39 b(If)26 b Fq(\014rst)i
-Ft(is)630 1087 y(not)j(sp)s(eci\014ed)e(it)h(is)g(set)i(to)f(the)g
-(previous)e(command)i(for)f(editing)g(and)g Fp(\000)p
-Ft(16)h(for)g(listing.)630 1196 y(If)f(the)g(`)p Fs(-l)p
-Ft(')g(\015ag)h(is)e(giv)m(en,)h(the)h(commands)e(are)i(listed)e(on)h
-(standard)f(output.)40 b(The)30 b(`)p Fs(-n)p Ft(')630
+TeXDict begin 110 115 bop 150 -116 a Ft(110)2527 b(Bash)31
+b(Reference)g(Man)m(ual)870 299 y Fs(fc)47 b([-e)g Fj(ename)11
+b Fs(])46 b([-nlr])g([)p Fj(first)11 b Fs(])45 b([)p
+Fj(last)11 b Fs(])870 408 y(fc)47 b(-s)g([)p Fj(pat)11
+b Fs(=)p Fj(rep)g Fs(])45 b([)p Fj(command)11 b Fs(])630
+539 y Ft(Fix)41 b(Command.)68 b(In)39 b(the)i(\014rst)e(form,)j(a)e
+(range)h(of)f(commands)g(from)f Fq(\014rst)i Ft(to)g
+Fq(last)i Ft(is)630 648 y(selected)35 b(from)e(the)g(history)g(list.)50
+b(Both)34 b Fq(\014rst)h Ft(and)e Fq(last)j Ft(ma)m(y)e(b)s(e)e(sp)s
+(eci\014ed)h(as)g(a)h(string)630 758 y(\(to)26 b(lo)s(cate)h(the)e
+(most)h(recen)m(t)g(command)e(b)s(eginning)h(with)g(that)g(string\))h
+(or)f(as)g(a)g(n)m(um)m(b)s(er)630 867 y(\(an)f(index)f(in)m(to)h(the)g
+(history)g(list,)h(where)e(a)h(negativ)m(e)i(n)m(um)m(b)s(er)c(is)i
+(used)f(as)g(an)h(o\013set)g(from)630 977 y(the)j(curren)m(t)f(command)
+h(n)m(um)m(b)s(er\).)39 b(If)26 b Fq(last)j Ft(is)e(not)g(sp)s
+(eci\014ed)f(it)h(is)g(set)g(to)h Fq(\014rst)p Ft(.)39
+b(If)26 b Fq(\014rst)i Ft(is)630 1087 y(not)j(sp)s(eci\014ed)f(it)h(is)
+g(set)h(to)f(the)g(previous)f(command)h(for)f(editing)i(and)e
+Fp(\000)p Ft(16)h(for)g(listing.)630 1196 y(If)f(the)g(`)p
+Fs(-l)p Ft(')g(\015ag)h(is)f(giv)m(en,)h(the)g(commands)e(are)i(listed)
+g(on)f(standard)f(output.)40 b(The)30 b(`)p Fs(-n)p Ft(')630
1306 y(\015ag)i(suppresses)f(the)h(command)g(n)m(um)m(b)s(ers)e(when)i
-(listing.)43 b(The)32 b(`)p Fs(-r)p Ft(')g(\015ag)g(rev)m(erses)h(the)
-630 1415 y(order)g(of)g(the)h(listing.)47 b(Otherwise,)33
-b(the)g(editor)g(giv)m(en)g(b)m(y)g Fq(ename)39 b Ft(is)32
-b(in)m(v)m(ok)m(ed)i(on)f(a)h(\014le)630 1525 y(con)m(taining)g(those)h
-(commands.)52 b(If)33 b Fq(ename)40 b Ft(is)33 b(not)i(giv)m(en,)g(the)
-g(v)-5 b(alue)34 b(of)g(the)g(follo)m(wing)630 1634 y(v)-5
-b(ariable)31 b(expansion)f(is)h(used:)42 b Fs(${FCEDIT:-${EDITOR:-vi}})
-p Ft(.)d(This)30 b(sa)m(ys)i(to)g(use)g(the)630 1744
-y(v)-5 b(alue)33 b(of)g(the)h Fs(FCEDIT)e Ft(v)-5 b(ariable)32
-b(if)g(set,)j(or)f(the)f(v)-5 b(alue)33 b(of)h(the)f
-Fs(EDITOR)f Ft(v)-5 b(ariable)32 b(if)g(that)630 1854
-y(is)g(set,)j(or)e Fs(vi)g Ft(if)f(neither)g(is)g(set.)50
-b(When)33 b(editing)f(is)g(complete,)i(the)g(edited)e(commands)630
-1963 y(are)f(ec)m(ho)s(ed)g(and)f(executed.)630 2093
-y(In)k(the)g(second)g(form,)h Fq(command)j Ft(is)33 b(re-executed)j
-(after)f(eac)m(h)g(instance)f(of)g Fq(pat)j Ft(in)c(the)630
-2203 y(selected)e(command)f(is)f(replaced)h(b)m(y)h Fq(rep)p
-Ft(.)630 2333 y(A)g(useful)e(alias)h(to)i(use)e(with)g(the)h
-Fs(fc)f Ft(command)h(is)f Fs(r='fc)f(-s')p Ft(,)h(so)h(that)h(t)m
-(yping)e(`)p Fs(r)g(cc)p Ft(')630 2443 y(runs)35 b(the)h(last)g
-(command)g(b)s(eginning)e(with)h Fs(cc)g Ft(and)h(t)m(yping)f(`)p
-Fs(r)p Ft(')i(re-executes)h(the)e(last)630 2552 y(command)30
-b(\(see)h(Section)g(6.6)g([Aliases],)f(page)i(71\).)150
+(listing.)46 b(The)32 b(`)p Fs(-r)p Ft(')g(\015ag)g(rev)m(erses)h(the)
+630 1415 y(order)g(of)g(the)h(listing.)50 b(Otherwise,)34
+b(the)f(editor)h(giv)m(en)g(b)m(y)f Fq(ename)39 b Ft(is)33
+b(in)m(v)m(ok)m(ed)i(on)e(a)h(\014le)630 1525 y(con)m(taining)i(those)f
+(commands.)52 b(If)33 b Fq(ename)40 b Ft(is)34 b(not)h(giv)m(en,)h(the)
+f(v)-5 b(alue)35 b(of)f(the)g(follo)m(wing)630 1634 y(v)-5
+b(ariable)33 b(expansion)e(is)h(used:)42 b Fs(${FCEDIT:-${EDITOR:-vi}})
+p Ft(.)d(This)31 b(sa)m(ys)h(to)g(use)g(the)630 1744
+y(v)-5 b(alue)34 b(of)f(the)h Fs(FCEDIT)e Ft(v)-5 b(ariable)34
+b(if)f(set,)i(or)f(the)f(v)-5 b(alue)34 b(of)g(the)f
+Fs(EDITOR)f Ft(v)-5 b(ariable)34 b(if)f(that)630 1854
+y(is)g(set,)i(or)e Fs(vi)g Ft(if)g(neither)g(is)g(set.)50
+b(When)33 b(editing)h(is)f(complete,)i(the)f(edited)f(commands)630
+1963 y(are)e(ec)m(ho)s(ed)g(and)f(executed.)630 2093
+y(In)k(the)g(second)g(form,)h Fq(command)j Ft(is)c(re-executed)i(after)
+f(eac)m(h)g(instance)g(of)f Fq(pat)j Ft(in)d(the)630
+2203 y(selected)e(command)e(is)g(replaced)h(b)m(y)g Fq(rep)p
+Ft(.)630 2333 y(A)g(useful)f(alias)i(to)g(use)e(with)h(the)g
+Fs(fc)f Ft(command)h(is)g Fs(r='fc)e(-s')p Ft(,)h(so)h(that)h(t)m
+(yping)f(`)p Fs(r)f(cc)p Ft(')630 2443 y(runs)35 b(the)h(last)h
+(command)f(b)s(eginning)g(with)g Fs(cc)f Ft(and)h(t)m(yping)g(`)p
+Fs(r)p Ft(')h(re-executes)h(the)e(last)630 2552 y(command)30
+b(\(see)h(Section)h(6.6)f([Aliases],)h(page)g(71\).)150
2703 y Fs(history)870 2833 y(history)46 b([)p Fj(n)11
b Fs(])870 2943 y(history)46 b(-c)870 3052 y(history)g(-d)h
Fj(offset)870 3162 y Fs(history)f([-anrw])g([)p Fj(filename)11
b Fs(])870 3271 y(history)46 b(-ps)h Fj(arg)630 3402
-y Ft(With)25 b(no)h(options,)g(displa)m(y)e(the)i(history)f(list)f
-(with)g(line)g(n)m(um)m(b)s(ers.)38 b(Lines)25 b(pre\014xed)f(with)630
+y Ft(With)26 b(no)g(options,)h(displa)m(y)f(the)g(history)g(list)g
+(with)f(line)h(n)m(um)m(b)s(ers.)38 b(Lines)26 b(pre\014xed)e(with)630
3511 y(a)35 b(`)p Fs(*)p Ft(')g(ha)m(v)m(e)h(b)s(een)e(mo)s(di\014ed.)
-52 b(An)34 b(argumen)m(t)h(of)g Fq(n)f Ft(lists)g(only)g(the)h(last)f
-Fq(n)g Ft(lines.)52 b(If)35 b(the)630 3621 y(shell)28
-b(v)-5 b(ariable)29 b Fs(HISTTIMEFORMAT)d Ft(is)j(set)i(and)e(not)i(n)m
-(ull,)d(it)i(is)f(used)g(as)h(a)h(format)f(string)630
-3730 y(for)36 b Fq(strftime)k Ft(to)c(displa)m(y)e(the)i(time)g(stamp)g
-(asso)s(ciated)g(with)f(eac)m(h)i(displa)m(y)m(ed)d(history)630
-3840 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)e(blank)g(is)g
-(prin)m(ted)g(b)s(et)m(w)m(een)i(the)g(formatted)f(time)g(stamp)h(and)
-630 3950 y(the)e(history)e(line.)630 4080 y(Options,)g(if)h(supplied,)d
-(ha)m(v)m(e)k(the)g(follo)m(wing)e(meanings:)630 4230
-y Fs(-c)384 b Ft(Clear)22 b(the)h(history)f(list.)37
-b(This)21 b(ma)m(y)j(b)s(e)e(com)m(bined)g(with)f(the)i(other)h
-(options)1110 4340 y(to)31 b(replace)f(the)h(history)e(list)g
+53 b(An)34 b(argumen)m(t)h(of)g Fq(n)f Ft(lists)i(only)f(the)g(last)g
+Fq(n)f Ft(lines.)54 b(If)35 b(the)630 3621 y(shell)30
+b(v)-5 b(ariable)31 b Fs(HISTTIMEFORMAT)26 b Ft(is)k(set)h(and)e(not)i
+(n)m(ull,)f(it)h(is)f(used)f(as)h(a)h(format)f(string)630
+3730 y(for)36 b Fq(strftime)41 b Ft(to)36 b(displa)m(y)g(the)g(time)h
+(stamp)f(asso)s(ciated)h(with)f(eac)m(h)h(displa)m(y)m(ed)f(history)630
+3840 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)g(blank)f(is)g
+(prin)m(ted)g(b)s(et)m(w)m(een)h(the)g(formatted)f(time)h(stamp)g(and)
+630 3950 y(the)e(history)f(line.)630 4080 y(Options,)g(if)h(supplied,)e
+(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 4230
+y Fs(-c)384 b Ft(Clear)23 b(the)g(history)g(list.)39
+b(This)22 b(ma)m(y)i(b)s(e)e(com)m(bined)h(with)f(the)h(other)h
+(options)1110 4340 y(to)31 b(replace)g(the)g(history)f(list)h
(completely)-8 b(.)630 4491 y Fs(-d)30 b Fj(offset)1110
-4600 y Ft(Delete)24 b(the)g(history)e(en)m(try)i(at)g(p)s(osition)d
-Fq(o\013set)p Ft(.)39 b Fq(o\013set)27 b Ft(should)21
-b(b)s(e)i(sp)s(eci\014ed)1110 4710 y(as)31 b(it)f(app)s(ears)f(when)h
-(the)g(history)f(is)h(displa)m(y)m(ed.)630 4861 y Fs(-a)384
-b Ft(App)s(end)35 b(the)i(new)g(history)f(lines)f(\(history)h(lines)f
-(en)m(tered)j(since)e(the)h(b)s(e-)1110 4970 y(ginning)28
-b(of)j(the)f(curren)m(t)g(Bash)h(session\))f(to)h(the)g(history)e
-(\014le.)630 5121 y Fs(-n)384 b Ft(App)s(end)32 b(the)i(history)e
-(lines)g(not)i(already)f(read)h(from)f(the)h(history)e(\014le)h(to)1110
-5230 y(the)26 b(curren)m(t)f(history)f(list.)38 b(These)25
-b(are)h(lines)e(app)s(ended)g(to)i(the)f(history)g(\014le)1110
-5340 y(since)30 b(the)g(b)s(eginning)e(of)i(the)h(curren)m(t)f(Bash)h
-(session.)p eop
+4600 y Ft(Delete)25 b(the)f(history)f(en)m(try)h(at)g(p)s(osition)f
+Fq(o\013set)p Ft(.)39 b Fq(o\013set)27 b Ft(should)22
+b(b)s(e)h(sp)s(eci\014ed)1110 4710 y(as)31 b(it)g(app)s(ears)e(when)h
+(the)g(history)g(is)h(displa)m(y)m(ed.)630 4861 y Fs(-a)384
+b Ft(App)s(end)35 b(the)i(new)g(history)g(lines)g(\(history)g(lines)g
+(en)m(tered)h(since)f(the)g(b)s(e-)1110 4970 y(ginning)30
+b(of)h(the)f(curren)m(t)g(Bash)h(session\))g(to)g(the)g(history)f
+(\014le.)630 5121 y Fs(-n)384 b Ft(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
+5230 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
+5340 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f(Bash)h
+(session.)p eop end
%%Page: 111 117
-111 116 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29
-b(History)h(In)m(teractiv)m(ely)1923 b(111)630 299 y
-Fs(-r)384 b Ft(Read)26 b(the)h(curren)m(t)f(history)f(\014le)g(and)h
-(app)s(end)e(its)i(con)m(ten)m(ts)i(to)f(the)f(history)1110
-408 y(list.)630 571 y Fs(-w)384 b Ft(W)-8 b(rite)31 b(out)f(the)h
-(curren)m(t)f(history)f(to)j(the)e(history)f(\014le.)630
-734 y Fs(-p)384 b Ft(P)m(erform)31 b(history)e(substitution)g(on)h(the)
-h Fq(arg)8 b Ft(s)31 b(and)f(displa)m(y)f(the)h(result)g(on)1110
-843 y(the)e(standard)f(output,)i(without)e(storing)g(the)h(results)f
-(in)g(the)h(history)f(list.)630 1006 y Fs(-s)384 b Ft(The)30
+TeXDict begin 111 116 bop 150 -116 a Ft(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(111)630
+299 y Fs(-r)384 b Ft(Read)26 b(the)h(curren)m(t)f(history)g(\014le)g
+(and)g(app)s(end)e(its)j(con)m(ten)m(ts)h(to)f(the)f(history)1110
+408 y(list.)630 571 y Fs(-w)384 b Ft(W)-8 b(rite)32 b(out)e(the)h
+(curren)m(t)f(history)g(to)i(the)e(history)g(\014le.)630
+734 y Fs(-p)384 b Ft(P)m(erform)31 b(history)f(substitution)h(on)f(the)
+h Fq(arg)8 b Ft(s)31 b(and)f(displa)m(y)h(the)f(result)h(on)1110
+843 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g
+(in)g(the)g(history)g(list.)630 1006 y Fs(-s)384 b Ft(The)30
b Fq(arg)8 b Ft(s)30 b(are)h(added)f(to)h(the)f(end)g(of)h(the)f
-(history)g(list)f(as)h(a)h(single)e(en)m(try)-8 b(.)630
+(history)h(list)g(as)f(a)h(single)g(en)m(try)-8 b(.)630
1168 y(When)24 b(an)m(y)h(of)f(the)h(`)p Fs(-w)p Ft(',)h(`)p
Fs(-r)p Ft(',)f(`)p Fs(-a)p Ft(',)h(or)f(`)p Fs(-n)p
-Ft(')f(options)f(is)h(used,)h(if)e Fq(\014lename)29 b
-Ft(is)23 b(giv)m(en,)j(then)630 1278 y(it)31 b(is)g(used)g(as)h(the)f
-(history)g(\014le.)44 b(If)31 b(not,)h(then)g(the)f(v)-5
-b(alue)31 b(of)h(the)g Fs(HISTFILE)d Ft(v)-5 b(ariable)31
+Ft(')f(options)g(is)h(used,)g(if)f Fq(\014lename)30 b
+Ft(is)24 b(giv)m(en,)j(then)630 1278 y(it)32 b(is)g(used)f(as)h(the)f
+(history)h(\014le.)45 b(If)31 b(not,)h(then)g(the)f(v)-5
+b(alue)32 b(of)g(the)g Fs(HISTFILE)d Ft(v)-5 b(ariable)33
b(is)630 1388 y(used.)150 1653 y Fr(9.3)68 b(History)46
-b(Expansion)275 1900 y Ft(The)35 b(History)g(library)e(pro)m(vides)i(a)
-h(history)e(expansion)h(feature)h(that)g(is)f(similar)e(to)j(the)g
-(history)150 2010 y(expansion)21 b(pro)m(vided)f(b)m(y)i
-Fs(csh)p Ft(.)37 b(This)21 b(section)h(describ)s(es)e(the)i(syn)m(tax)h
-(used)e(to)h(manipulate)f(the)h(history)150 2120 y(information.)275
-2257 y(History)30 b(expansions)f(in)m(tro)s(duce)g(w)m(ords)h(from)g
-(the)h(history)e(list)g(in)m(to)h(the)h(input)e(stream,)i(making)150
-2367 y(it)f(easy)h(to)g(rep)s(eat)g(commands,)f(insert)f(the)i(argumen)
-m(ts)f(to)h(a)g(previous)e(command)h(in)m(to)h(the)f(curren)m(t)150
-2476 y(input)e(line,)h(or)i(\014x)f(errors)f(in)g(previous)g(commands)h
-(quic)m(kly)-8 b(.)275 2614 y(History)26 b(expansion)f(tak)m(es)j
-(place)e(in)f(t)m(w)m(o)j(parts.)39 b(The)26 b(\014rst)g(is)f(to)i
-(determine)f(whic)m(h)f(line)g(from)h(the)150 2724 y(history)h(list)f
-(should)g(b)s(e)h(used)g(during)f(substitution.)37 b(The)27
-b(second)h(is)f(to)i(select)f(p)s(ortions)e(of)i(that)h(line)150
-2833 y(for)d(inclusion)c(in)m(to)k(the)g(curren)m(t)f(one.)40
-b(The)25 b(line)f(selected)i(from)g(the)g(history)e(is)h(called)g(the)h
-Fq(ev)m(en)m(t)p Ft(,)j(and)150 2943 y(the)21 b(p)s(ortions)f(of)h
-(that)h(line)d(that)j(are)g(acted)g(up)s(on)e(are)h(called)f
-Fq(w)m(ords)p Ft(.)38 b(V)-8 b(arious)20 b Fq(mo)s(di\014ers)j
-Ft(are)f(a)m(v)-5 b(ailable)150 3052 y(to)35 b(manipulate)d(the)i
-(selected)h(w)m(ords.)51 b(The)33 b(line)f(is)h(brok)m(en)h(in)m(to)g
-(w)m(ords)f(in)g(the)h(same)h(fashion)d(that)150 3162
-y(Bash)j(do)s(es,)h(so)f(that)h(sev)m(eral)f(w)m(ords)f(surrounded)f(b)
-m(y)i(quotes)g(are)g(considered)f(one)h(w)m(ord.)54 b(History)150
-3272 y(expansions)33 b(are)h(in)m(tro)s(duced)e(b)m(y)i(the)g(app)s
-(earance)g(of)g(the)g(history)f(expansion)g(c)m(haracter,)j(whic)m(h)d
-(is)150 3381 y(`)p Fs(!)p Ft(')e(b)m(y)f(default.)40
-b(Only)28 b(`)p Fs(\\)p Ft(')j(and)f(`)p Fs(')p Ft(')g(ma)m(y)h(b)s(e)f
-(used)g(to)h(escap)s(e)g(the)f(history)f(expansion)h(c)m(haracter.)275
-3519 y(Sev)m(eral)39 b(shell)f(options)h(settable)h(with)e(the)i
-Fs(shopt)e Ft(builtin)e(\(see)k(Section)g(4.2)g([Bash)g(Builtins],)150
-3629 y(page)32 b(39\))h(ma)m(y)f(b)s(e)f(used)g(to)i(tailor)e(the)g(b)s
-(eha)m(vior)g(of)h(history)f(expansion.)43 b(If)31 b(the)h
-Fs(histverify)d Ft(shell)150 3738 y(option)38 b(is)f(enabled,)i(and)f
-(Readline)e(is)i(b)s(eing)e(used,)k(history)d(substitutions)f(are)i
-(not)h(immediately)150 3848 y(passed)30 b(to)h(the)g(shell)e(parser.)40
-b(Instead,)30 b(the)h(expanded)f(line)f(is)g(reloaded)h(in)m(to)h(the)f
-(Readline)f(editing)150 3957 y(bu\013er)g(for)i(further)e(mo)s
-(di\014cation.)39 b(If)30 b(Readline)f(is)g(b)s(eing)g(used,)h(and)g
-(the)g Fs(histreedit)e Ft(shell)g(option)150 4067 y(is)33
-b(enabled,)h(a)h(failed)e(history)g(expansion)g(will)e(b)s(e)j
-(reloaded)f(in)m(to)h(the)h(Readline)d(editing)h(bu\013er)g(for)150
-4176 y(correction.)73 b(The)41 b(`)p Fs(-p)p Ft(')g(option)f(to)i(the)f
-Fs(history)f Ft(builtin)d(command)k(ma)m(y)h(b)s(e)e(used)h(to)g(see)h
-(what)150 4286 y(a)c(history)f(expansion)f(will)f(do)i(b)s(efore)h
-(using)e(it.)62 b(The)37 b(`)p Fs(-s)p Ft(')g(option)g(to)i(the)f
-Fs(history)d Ft(builtin)f(ma)m(y)150 4396 y(b)s(e)f(used)h(to)g(add)g
-(commands)f(to)i(the)f(end)g(of)g(the)g(history)f(list)g(without)g
-(actually)h(executing)g(them,)150 4505 y(so)k(that)h(they)f(are)g(a)m
-(v)-5 b(ailable)37 b(for)h(subsequen)m(t)f(recall.)63
-b(This)36 b(is)h(most)h(useful)f(in)f(conjunction)h(with)150
-4615 y(Readline.)275 4753 y(The)29 b(shell)g(allo)m(ws)h(con)m(trol)h
-(of)f(the)h(v)-5 b(arious)29 b(c)m(haracters)j(used)e(b)m(y)g(the)h
-(history)e(expansion)h(mec)m(ha-)150 4862 y(nism)f(with)g(the)h
+b(Expansion)275 1900 y Ft(The)35 b(History)h(library)f(pro)m(vides)h(a)
+g(history)f(expansion)h(feature)g(that)g(is)g(similar)g(to)g(the)g
+(history)150 2010 y(expansion)22 b(pro)m(vided)f(b)m(y)h
+Fs(csh)p Ft(.)37 b(This)22 b(section)h(describ)s(es)e(the)h(syn)m(tax)h
+(used)e(to)h(manipulate)h(the)f(history)150 2120 y(information.)275
+2257 y(History)31 b(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
+2367 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
+2476 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g
+(quic)m(kly)-8 b(.)275 2614 y(History)27 b(expansion)f(tak)m(es)i
+(place)f(in)f(t)m(w)m(o)i(parts.)39 b(The)26 b(\014rst)g(is)g(to)h
+(determine)g(whic)m(h)f(line)h(from)f(the)150 2724 y(history)i(list)g
+(should)f(b)s(e)g(used)g(during)g(substitution.)39 b(The)27
+b(second)h(is)g(to)h(select)g(p)s(ortions)e(of)h(that)h(line)150
+2833 y(for)d(inclusion)f(in)m(to)i(the)f(curren)m(t)f(one.)40
+b(The)25 b(line)h(selected)h(from)f(the)g(history)f(is)h(called)h(the)f
+Fq(ev)m(en)m(t)p Ft(,)j(and)150 2943 y(the)21 b(p)s(ortions)g(of)g
+(that)h(line)f(that)h(are)g(acted)g(up)s(on)e(are)h(called)h
+Fq(w)m(ords)p Ft(.)38 b(V)-8 b(arious)21 b Fq(mo)s(di\014ers)j
+Ft(are)e(a)m(v)-5 b(ailable)150 3052 y(to)35 b(manipulate)f(the)g
+(selected)i(w)m(ords.)51 b(The)33 b(line)h(is)g(brok)m(en)g(in)m(to)h
+(w)m(ords)e(in)h(the)g(same)h(fashion)e(that)150 3162
+y(Bash)i(do)s(es,)h(so)f(that)h(sev)m(eral)g(w)m(ords)e(surrounded)f(b)
+m(y)i(quotes)g(are)g(considered)g(one)g(w)m(ord.)54 b(History)150
+3272 y(expansions)34 b(are)g(in)m(tro)s(duced)f(b)m(y)h(the)g(app)s
+(earance)g(of)g(the)g(history)g(expansion)g(c)m(haracter,)i(whic)m(h)e
+(is)150 3381 y(`)p Fs(!)p Ft(')d(b)m(y)f(default.)41
+b(Only)29 b(`)p Fs(\\)p Ft(')i(and)f(`)p Fs(')p Ft(')g(ma)m(y)h(b)s(e)f
+(used)g(to)h(escap)s(e)g(the)f(history)g(expansion)h(c)m(haracter.)275
+3519 y(Sev)m(eral)40 b(shell)g(options)g(settable)h(with)e(the)h
+Fs(shopt)e Ft(builtin)h(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)150
+3629 y(page)32 b(39\))h(ma)m(y)f(b)s(e)f(used)g(to)i(tailor)g(the)e(b)s
+(eha)m(vior)h(of)g(history)g(expansion.)44 b(If)31 b(the)h
+Fs(histverify)d Ft(shell)150 3738 y(option)39 b(is)f(enabled,)i(and)e
+(Readline)g(is)h(b)s(eing)e(used,)j(history)e(substitutions)g(are)g
+(not)h(immediately)150 3848 y(passed)30 b(to)h(the)g(shell)g(parser.)40
+b(Instead,)30 b(the)h(expanded)f(line)h(is)f(reloaded)h(in)m(to)h(the)e
+(Readline)h(editing)150 3957 y(bu\013er)e(for)i(further)e(mo)s
+(di\014cation.)41 b(If)30 b(Readline)h(is)f(b)s(eing)g(used,)g(and)g
+(the)g Fs(histreedit)e Ft(shell)i(option)150 4067 y(is)k(enabled,)h(a)g
+(failed)g(history)f(expansion)g(will)g(b)s(e)g(reloaded)g(in)m(to)h
+(the)g(Readline)f(editing)h(bu\013er)e(for)150 4176 y(correction.)74
+b(The)41 b(`)p Fs(-p)p Ft(')g(option)g(to)h(the)f Fs(history)f
+Ft(builtin)g(command)h(ma)m(y)h(b)s(e)e(used)h(to)g(see)h(what)150
+4286 y(a)c(history)g(expansion)f(will)h(do)f(b)s(efore)h(using)f(it.)63
+b(The)37 b(`)p Fs(-s)p Ft(')g(option)h(to)h(the)f Fs(history)d
+Ft(builtin)i(ma)m(y)150 4396 y(b)s(e)c(used)h(to)g(add)g(commands)f(to)
+i(the)f(end)g(of)g(the)g(history)g(list)h(without)f(actually)i
+(executing)f(them,)150 4505 y(so)j(that)h(they)f(are)g(a)m(v)-5
+b(ailable)40 b(for)e(subsequen)m(t)f(recall.)65 b(This)37
+b(is)h(most)g(useful)g(in)f(conjunction)h(with)150 4615
+y(Readline.)275 4753 y(The)29 b(shell)i(allo)m(ws)h(con)m(trol)g(of)e
+(the)h(v)-5 b(arious)30 b(c)m(haracters)i(used)e(b)m(y)g(the)h(history)
+f(expansion)h(mec)m(ha-)150 4862 y(nism)f(with)g(the)g
Fs(histchars)e Ft(v)-5 b(ariable.)150 5093 y Fk(9.3.1)63
b(Ev)m(en)m(t)39 b(Designators)275 5340 y Ft(An)30 b(ev)m(en)m(t)h
-(designator)g(is)e(a)i(reference)g(to)g(a)f(command)h(line)d(en)m(try)j
-(in)e(the)i(history)e(list.)p eop
+(designator)h(is)e(a)h(reference)g(to)g(a)f(command)h(line)f(en)m(try)h
+(in)f(the)h(history)f(list.)p eop end
%%Page: 112 118
-112 117 bop 150 -116 a Ft(112)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fs(!)432 b Ft(Start)34 b(a)f(history)g(substitution,)f
-(except)i(when)f(follo)m(w)m(ed)g(b)m(y)g(a)h(space,)h(tab,)f(the)g
-(end)f(of)630 408 y(the)i(line,)e(`)p Fs(=)p Ft(')i(or)f(`)p
-Fs(\()p Ft(')h(\(when)e(the)i Fs(extglob)d Ft(shell)h(option)g(is)h
-(enabled)f(using)g(the)h Fs(shopt)630 518 y Ft(builtin\).)150
-674 y Fs(!)p Fj(n)384 b Ft(Refer)30 b(to)i(command)e(line)e
-Fq(n)p Ft(.)150 830 y Fs(!-)p Fj(n)336 b Ft(Refer)30
-b(to)i(the)e(command)g Fq(n)g Ft(lines)f(bac)m(k.)150
-985 y Fs(!!)384 b Ft(Refer)30 b(to)i(the)e(previous)f(command.)40
-b(This)29 b(is)g(a)i(synon)m(ym)f(for)g(`)p Fs(!-1)p
-Ft('.)150 1141 y Fs(!)p Fj(string)144 b Ft(Refer)30 b(to)i(the)e(most)h
-(recen)m(t)g(command)f(starting)h(with)e Fq(string)p
-Ft(.)150 1297 y Fs(!?)p Fj(string)11 b Fs([?])630 1406
-y Ft(Refer)34 b(to)g(the)f(most)h(recen)m(t)h(command)e(con)m(taining)g
-Fq(string)p Ft(.)49 b(The)33 b(trailing)f(`)p Fs(?)p
-Ft(')h(ma)m(y)i(b)s(e)630 1516 y(omitted)30 b(if)g(the)g
-Fq(string)37 b Ft(is)30 b(follo)m(w)m(ed)g(immediately)f(b)m(y)h(a)h
-(newline.)150 1672 y Fs(^)p Fj(string1)11 b Fs(^)p Fj(string2)g
-Fs(^)630 1781 y Ft(Quic)m(k)31 b(Substitution.)42 b(Rep)s(eat)32
-b(the)g(last)g(command,)g(replacing)e Fq(string1)39 b
-Ft(with)30 b Fq(string2)p Ft(.)630 1891 y(Equiv)-5 b(alen)m(t)29
-b(to)i Fs(!!:s/)p Fj(string1)11 b Fs(/)p Fj(string2)g
-Fs(/)p Ft(.)150 2047 y Fs(!#)384 b Ft(The)30 b(en)m(tire)g(command)g
-(line)f(t)m(yp)s(ed)h(so)h(far.)150 2265 y Fk(9.3.2)63
-b(W)-10 b(ord)41 b(Designators)275 2508 y Ft(W)-8 b(ord)35
-b(designators)f(are)h(used)f(to)h(select)g(desired)e(w)m(ords)i(from)f
-(the)h(ev)m(en)m(t.)55 b(A)34 b(`)p Fs(:)p Ft(')h(separates)h(the)150
-2617 y(ev)m(en)m(t)41 b(sp)s(eci\014cation)d(from)i(the)f(w)m(ord)g
-(designator.)68 b(It)40 b(ma)m(y)g(b)s(e)f(omitted)h(if)e(the)i(w)m
-(ord)f(designator)150 2727 y(b)s(egins)32 b(with)h(a)i(`)p
-Fs(^)p Ft(',)g(`)p Fs($)p Ft(',)g(`)p Fs(*)p Ft(',)h(`)p
-Fs(-)p Ft(',)f(or)f(`)p Fs(\045)p Ft('.)52 b(W)-8 b(ords)35
-b(are)f(n)m(um)m(b)s(ered)f(from)g(the)i(b)s(eginning)c(of)j(the)g
-(line,)150 2836 y(with)k(the)i(\014rst)f(w)m(ord)g(b)s(eing)f(denoted)i
-(b)m(y)g(0)g(\(zero\).)70 b(W)-8 b(ords)39 b(are)h(inserted)f(in)m(to)g
-(the)h(curren)m(t)g(line)150 2946 y(separated)31 b(b)m(y)f(single)f
-(spaces.)275 3079 y(F)-8 b(or)31 b(example,)150 3234
-y Fs(!!)384 b Ft(designates)36 b(the)g(preceding)f(command.)57
-b(When)35 b(y)m(ou)i(t)m(yp)s(e)f(this,)g(the)g(preceding)f(com-)630
-3344 y(mand)30 b(is)f(rep)s(eated)h(in)f(toto.)150 3500
-y Fs(!!:$)288 b Ft(designates)22 b(the)h(last)f(argumen)m(t)h(of)f(the)
-h(preceding)e(command.)38 b(This)21 b(ma)m(y)i(b)s(e)e(shortened)630
+TeXDict begin 112 117 bop 150 -116 a Ft(112)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(!)432 b Ft(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 408 y(the)i(line,)g(`)p
+Fs(=)p Ft(')g(or)f(`)p Fs(\()p Ft(')h(\(when)e(the)i
+Fs(extglob)d Ft(shell)j(option)f(is)h(enabled)f(using)g(the)g
+Fs(shopt)630 518 y Ft(builtin\).)150 674 y Fs(!)p Fj(n)384
+b Ft(Refer)30 b(to)i(command)e(line)g Fq(n)p Ft(.)150
+830 y Fs(!-)p Fj(n)336 b Ft(Refer)30 b(to)i(the)e(command)g
+Fq(n)g Ft(lines)h(bac)m(k.)150 985 y Fs(!!)384 b Ft(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 Fs(!-1)p Ft('.)150 1141 y Fs(!)p Fj(string)144
+b Ft(Refer)30 b(to)i(the)e(most)h(recen)m(t)g(command)f(starting)i
+(with)e Fq(string)p Ft(.)150 1297 y Fs(!?)p Fj(string)11
+b Fs([?])630 1406 y Ft(Refer)34 b(to)g(the)f(most)h(recen)m(t)h
+(command)e(con)m(taining)i Fq(string)p Ft(.)50 b(The)33
+b(trailing)i(`)p Fs(?)p Ft(')e(ma)m(y)i(b)s(e)630 1516
+y(omitted)c(if)g(the)f Fq(string)38 b Ft(is)31 b(follo)m(w)m(ed)h
+(immediately)g(b)m(y)e(a)h(newline.)150 1672 y Fs(^)p
+Fj(string1)11 b Fs(^)p Fj(string2)g Fs(^)630 1781 y Ft(Quic)m(k)32
+b(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g
+Fq(string1)40 b Ft(with)31 b Fq(string2)p Ft(.)630 1891
+y(Equiv)-5 b(alen)m(t)31 b(to)g Fs(!!:s/)p Fj(string1)11
+b Fs(/)p Fj(string2)g Fs(/)p Ft(.)150 2047 y Fs(!#)384
+b Ft(The)30 b(en)m(tire)h(command)f(line)h(t)m(yp)s(ed)f(so)h(far.)150
+2265 y Fk(9.3.2)63 b(W)-10 b(ord)41 b(Designators)275
+2508 y Ft(W)-8 b(ord)35 b(designators)g(are)g(used)f(to)h(select)h
+(desired)e(w)m(ords)h(from)f(the)h(ev)m(en)m(t.)55 b(A)34
+b(`)p Fs(:)p Ft(')h(separates)h(the)150 2617 y(ev)m(en)m(t)41
+b(sp)s(eci\014cation)f(from)g(the)f(w)m(ord)g(designator.)69
+b(It)40 b(ma)m(y)g(b)s(e)f(omitted)i(if)e(the)h(w)m(ord)f(designator)
+150 2727 y(b)s(egins)33 b(with)h(a)h(`)p Fs(^)p Ft(',)g(`)p
+Fs($)p Ft(',)g(`)p Fs(*)p Ft(',)h(`)p Fs(-)p Ft(',)f(or)f(`)p
+Fs(\045)p Ft('.)52 b(W)-8 b(ords)35 b(are)f(n)m(um)m(b)s(ered)f(from)g
+(the)i(b)s(eginning)e(of)h(the)g(line,)150 2836 y(with)39
+b(the)h(\014rst)f(w)m(ord)g(b)s(eing)g(denoted)h(b)m(y)g(0)g(\(zero\).)
+70 b(W)-8 b(ords)39 b(are)h(inserted)g(in)m(to)g(the)g(curren)m(t)g
+(line)150 2946 y(separated)31 b(b)m(y)f(single)h(spaces.)275
+3079 y(F)-8 b(or)31 b(example,)150 3234 y Fs(!!)384 b
+Ft(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
+3344 y(mand)30 b(is)g(rep)s(eated)g(in)g(toto.)150 3500
+y Fs(!!:$)288 b Ft(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
3609 y(to)31 b Fs(!$)p Ft(.)150 3765 y Fs(!fi:2)240 b
-Ft(designates)29 b(the)h(second)f(argumen)m(t)h(of)f(the)h(most)f
-(recen)m(t)i(command)e(starting)g(with)f(the)630 3875
-y(letters)j Fs(fi)p Ft(.)275 4030 y(Here)f(are)h(the)g(w)m(ord)f
+Ft(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 3875
+y(letters)j Fs(fi)p Ft(.)275 4030 y(Here)e(are)h(the)g(w)m(ord)f
(designators:)150 4186 y Fs(0)g(\(zero\))114 b Ft(The)30
-b Fs(0)p Ft(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)e
-(this)g(is)g(the)i(command)f(w)m(ord.)150 4342 y Fj(n)432
+b Fs(0)p Ft(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 4342 y Fj(n)432
b Ft(The)30 b Fq(n)p Ft(th)g(w)m(ord.)150 4498 y Fs(^)432
-b Ft(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)e(w)m(ord)h(1.)150
-4654 y Fs($)432 b Ft(The)30 b(last)g(argumen)m(t.)150
+b Ft(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m(ord)g(1.)150
+4654 y Fs($)432 b Ft(The)30 b(last)h(argumen)m(t.)150
4809 y Fs(\045)432 b Ft(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h
(most)g(recen)m(t)g(`)p Fs(?)p Fj(string)11 b Fs(?)p
Ft(')28 b(searc)m(h.)150 4965 y Fj(x)p Fs(-)p Fj(y)336
b Ft(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fs(-)p Fj(y)11
-b Ft(')30 b(abbreviates)g(`)p Fs(0-)p Fj(y)11 b Ft('.)150
-5121 y Fs(*)432 b Ft(All)26 b(of)i(the)g(w)m(ords,)g(except)h(the)e
-Fs(0)p Ft(th.)40 b(This)26 b(is)g(a)i(synon)m(ym)f(for)h(`)p
-Fs(1-$)p Ft('.)39 b(It)28 b(is)f(not)h(an)f(error)630
-5230 y(to)j(use)g(`)p Fs(*)p Ft(')f(if)g(there)h(is)f(just)g(one)h(w)m
-(ord)f(in)f(the)i(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)d(is)h
-(returned)f(in)630 5340 y(that)j(case.)p eop
+b Ft(')30 b(abbreviates)h(`)p Fs(0-)p Fj(y)11 b Ft('.)150
+5121 y Fs(*)432 b Ft(All)28 b(of)g(the)g(w)m(ords,)g(except)h(the)e
+Fs(0)p Ft(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p
+Fs(1-$)p Ft('.)39 b(It)28 b(is)g(not)g(an)f(error)630
+5230 y(to)j(use)g(`)p Fs(*)p Ft(')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 5340 y(that)j(case.)p eop end
%%Page: 113 119
-113 118 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29
-b(History)h(In)m(teractiv)m(ely)1923 b(113)150 299 y
-Fj(x)11 b Fs(*)373 b Ft(Abbreviates)30 b(`)p Fj(x)p Fs(-$)p
-Ft(')150 458 y Fj(x)p Fs(-)384 b Ft(Abbreviates)30 b(`)p
-Fj(x)p Fs(-$)p Ft(')g(lik)m(e)f(`)p Fj(x)11 b Fs(*)p
-Ft(',)31 b(but)e(omits)h(the)h(last)f(w)m(ord.)275 618
-y(If)j(a)h(w)m(ord)g(designator)f(is)g(supplied)e(without)i(an)h(ev)m
-(en)m(t)h(sp)s(eci\014cation,)f(the)g(previous)e(command)150
-727 y(is)d(used)h(as)h(the)f(ev)m(en)m(t.)150 951 y Fk(9.3.3)63
-b(Mo)s(di\014ers)275 1196 y Ft(After)20 b(the)h(optional)f(w)m(ord)h
-(designator,)h(y)m(ou)f(can)g(add)f(a)h(sequence)g(of)g(one)g(or)g
-(more)g(of)g(the)f(follo)m(wing)150 1305 y(mo)s(di\014ers,)28
-b(eac)m(h)k(preceded)e(b)m(y)g(a)h(`)p Fs(:)p Ft('.)150
-1465 y Fs(h)432 b Ft(Remo)m(v)m(e)32 b(a)f(trailing)d(pathname)j(comp)s
-(onen)m(t,)g(lea)m(ving)f(only)f(the)i(head.)150 1624
-y Fs(t)432 b Ft(Remo)m(v)m(e)32 b(all)d(leading)h(pathname)g(comp)s
-(onen)m(ts,)h(lea)m(ving)f(the)g(tail.)150 1783 y Fs(r)432
-b Ft(Remo)m(v)m(e)32 b(a)f(trailing)d(su\016x)i(of)g(the)h(form)f(`)p
-Fs(.)p Fj(suffix)11 b Ft(',)28 b(lea)m(ving)j(the)f(basename.)150
-1943 y Fs(e)432 b Ft(Remo)m(v)m(e)32 b(all)d(but)h(the)h(trailing)d
-(su\016x.)150 2102 y Fs(p)432 b Ft(Prin)m(t)29 b(the)i(new)f(command)g
+TeXDict begin 113 118 bop 150 -116 a Ft(Chapter)30 b(9:)41
+b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(113)150
+299 y Fj(x)11 b Fs(*)373 b Ft(Abbreviates)31 b(`)p Fj(x)p
+Fs(-$)p Ft(')150 458 y Fj(x)p Fs(-)384 b Ft(Abbreviates)31
+b(`)p Fj(x)p Fs(-$)p Ft(')f(lik)m(e)h(`)p Fj(x)11 b Fs(*)p
+Ft(',)31 b(but)e(omits)i(the)g(last)g(w)m(ord.)275 618
+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
+727 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 951 y Fk(9.3.3)63
+b(Mo)s(di\014ers)275 1196 y Ft(After)20 b(the)h(optional)h(w)m(ord)f
+(designator,)i(y)m(ou)e(can)g(add)f(a)h(sequence)g(of)g(one)g(or)g
+(more)g(of)g(the)f(follo)m(wing)150 1305 y(mo)s(di\014ers,)29
+b(eac)m(h)j(preceded)e(b)m(y)g(a)h(`)p Fs(:)p Ft('.)150
+1465 y Fs(h)432 b Ft(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 1624
+y Fs(t)432 b Ft(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 1783 y Fs(r)432
+b Ft(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g(the)h(form)f(`)p
+Fs(.)p Fj(suffix)11 b Ft(',)28 b(lea)m(ving)33 b(the)d(basename.)150
+1943 y Fs(e)432 b Ft(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g
+(su\016x.)150 2102 y Fs(p)432 b Ft(Prin)m(t)30 b(the)h(new)f(command)g
(but)g(do)g(not)g(execute)i(it.)150 2262 y Fs(q)432 b
-Ft(Quote)31 b(the)f(substituted)f(w)m(ords,)h(escaping)g(further)f
-(substitutions.)150 2421 y Fs(x)432 b Ft(Quote)32 b(the)f(substituted)f
-(w)m(ords)g(as)i(with)e(`)p Fs(q)p Ft(',)i(but)e(break)h(in)m(to)h(w)m
-(ords)e(at)i(spaces,)h(tabs,)630 2531 y(and)d(newlines.)150
+Ft(Quote)31 b(the)f(substituted)g(w)m(ords,)g(escaping)h(further)e
+(substitutions.)150 2421 y Fs(x)432 b Ft(Quote)32 b(the)f(substituted)g
+(w)m(ords)f(as)i(with)f(`)p Fs(q)p Ft(',)h(but)e(break)h(in)m(to)i(w)m
+(ords)d(at)i(spaces,)h(tabs,)630 2531 y(and)d(newlines.)150
2690 y Fs(s/)p Fj(old)11 b Fs(/)p Fj(new)g Fs(/)630 2800
-y Ft(Substitute)31 b Fq(new)40 b Ft(for)32 b(the)h(\014rst)f(o)s
-(ccurrence)h(of)f Fq(old)k Ft(in)31 b(the)i(ev)m(en)m(t)h(line.)46
-b(An)m(y)32 b(delimiter)630 2909 y(ma)m(y)25 b(b)s(e)g(used)f(in)f
-(place)i(of)g(`)p Fs(/)p Ft('.)39 b(The)24 b(delimiter)e(ma)m(y)k(b)s
-(e)e(quoted)h(in)e Fq(old)28 b Ft(and)c Fq(new)32 b Ft(with)24
-b(a)630 3019 y(single)j(bac)m(kslash.)39 b(If)28 b(`)p
-Fs(&)p Ft(')g(app)s(ears)g(in)e Fq(new)p Ft(,)j(it)e(is)h(replaced)f(b)
-m(y)h Fq(old)p Ft(.)39 b(A)28 b(single)f(bac)m(kslash)630
-3128 y(will)32 b(quote)j(the)g(`)p Fs(&)p Ft('.)54 b(The)34
-b(\014nal)f(delimiter)g(is)g(optional)h(if)g(it)g(is)f(the)i(last)g(c)m
-(haracter)h(on)630 3238 y(the)31 b(input)d(line.)150
-3397 y Fs(&)432 b Ft(Rep)s(eat)31 b(the)f(previous)f(substitution.)150
-3557 y Fs(g)150 3666 y(a)432 b Ft(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f
-(applied)f(o)m(v)m(er)j(the)f(en)m(tire)f(ev)m(en)m(t)i(line.)64
-b(Used)39 b(in)e(conjunction)630 3776 y(with)29 b(`)p
-Fs(s)p Ft(',)i(as)f(in)g Fs(gs/)p Fj(old)11 b Fs(/)p
-Fj(new)g Fs(/)p Ft(,)26 b(or)k(with)g(`)p Fs(&)p Ft('.)150
-3935 y Fs(G)432 b Ft(Apply)29 b(the)h(follo)m(wing)f(`)p
-Fs(s)p Ft(')i(mo)s(di\014er)d(once)j(to)g(eac)m(h)h(w)m(ord)e(in)f(the)
-h(ev)m(en)m(t.)p eop
+y Ft(Substitute)32 b Fq(new)40 b Ft(for)32 b(the)h(\014rst)f(o)s
+(ccurrence)h(of)f Fq(old)37 b Ft(in)32 b(the)h(ev)m(en)m(t)h(line.)48
+b(An)m(y)32 b(delimiter)630 2909 y(ma)m(y)25 b(b)s(e)g(used)f(in)g
+(place)i(of)f(`)p Fs(/)p Ft('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s
+(e)e(quoted)h(in)f Fq(old)29 b Ft(and)24 b Fq(new)32
+b Ft(with)25 b(a)630 3019 y(single)k(bac)m(kslash.)40
+b(If)28 b(`)p Fs(&)p Ft(')g(app)s(ears)g(in)f Fq(new)p
+Ft(,)i(it)f(is)h(replaced)f(b)m(y)g Fq(old)p Ft(.)40
+b(A)28 b(single)h(bac)m(kslash)630 3128 y(will)35 b(quote)g(the)g(`)p
+Fs(&)p Ft('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f
+(it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 3238 y(the)31
+b(input)e(line.)150 3397 y Fs(&)432 b Ft(Rep)s(eat)31
+b(the)f(previous)g(substitution.)150 3557 y Fs(g)150
+3666 y(a)432 b Ft(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 3776 y(with)30 b(`)p Fs(s)p Ft(',)h(as)f(in)h
+Fs(gs/)p Fj(old)11 b Fs(/)p Fj(new)g Fs(/)p Ft(,)26 b(or)k(with)h(`)p
+Fs(&)p Ft('.)150 3935 y Fs(G)432 b Ft(Apply)30 b(the)g(follo)m(wing)i
+(`)p Fs(s)p Ft(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g
+(the)g(ev)m(en)m(t.)p eop end
%%Page: 114 120
-114 119 bop 150 -116 a Ft(114)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 114 119 bop 150 -116 a Ft(114)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 115 121
-115 120 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28
-b(Bash)2356 b(115)150 299 y Fo(10)80 b(Installing)55
-b(Bash)275 535 y Ft(This)38 b(c)m(hapter)j(pro)m(vides)e(basic)g
-(instructions)f(for)i(installing)d(Bash)j(on)g(the)h(v)-5
-b(arious)39 b(supp)s(orted)150 645 y(platforms.)57 b(The)36
-b(distribution)d(supp)s(orts)h(the)j Fl(gnu)f Ft(op)s(erating)f
-(systems,)k(nearly)c(ev)m(ery)i(v)m(ersion)f(of)150 754
-y(Unix,)g(and)f(sev)m(eral)h(non-Unix)f(systems)h(suc)m(h)f(as)h(BeOS)g
-(and)f(In)m(terix.)56 b(Other)35 b(indep)s(enden)m(t)f(p)s(orts)150
-864 y(exist)c(for)g Fl(ms-dos)p Ft(,)g Fl(os/2)p Ft(,)g(and)g(Windo)m
-(ws)g(platforms.)150 1123 y Fr(10.1)68 b(Basic)45 b(Installation)275
-1367 y Ft(These)30 b(are)g(installation)f(instructions)f(for)i(Bash.)
-275 1503 y(The)f(simplest)g(w)m(a)m(y)i(to)g(compile)f(Bash)g(is:)199
-1638 y(1.)61 b Fs(cd)38 b Ft(to)h(the)f(directory)g(con)m(taining)g
-(the)h(source)f(co)s(de)h(and)f(t)m(yp)s(e)g(`)p Fs(./configure)p
+TeXDict begin 115 120 bop 150 -116 a Ft(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(115)150 299 y Fo(10)80
+b(Installing)52 b(Bash)275 535 y Ft(This)39 b(c)m(hapter)i(pro)m(vides)
+f(basic)g(instructions)g(for)g(installing)h(Bash)f(on)g(the)h(v)-5
+b(arious)40 b(supp)s(orted)150 645 y(platforms.)58 b(The)36
+b(distribution)g(supp)s(orts)e(the)j Fl(gnu)f Ft(op)s(erating)g
+(systems,)j(nearly)d(ev)m(ery)h(v)m(ersion)g(of)150 754
+y(Unix,)g(and)e(sev)m(eral)i(non-Unix)f(systems)g(suc)m(h)f(as)h(BeOS)g
+(and)f(In)m(terix.)57 b(Other)35 b(indep)s(enden)m(t)g(p)s(orts)150
+864 y(exist)c(for)f Fl(ms-dos)p Ft(,)g Fl(os/2)p Ft(,)g(and)g(Windo)m
+(ws)h(platforms.)150 1123 y Fr(10.1)68 b(Basic)45 b(Installation)275
+1367 y Ft(These)30 b(are)g(installation)j(instructions)d(for)g(Bash.)
+275 1503 y(The)f(simplest)i(w)m(a)m(y)g(to)g(compile)h(Bash)e(is:)199
+1638 y(1.)61 b Fs(cd)38 b Ft(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 Fs(./configure)p
Ft(')e(to)j(con\014gure)330 1747 y(Bash)c(for)f(y)m(our)h(system.)54
-b(If)34 b(y)m(ou're)h(using)e Fs(csh)h Ft(on)g(an)h(old)f(v)m(ersion)g
-(of)h(System)f(V,)h(y)m(ou)g(migh)m(t)330 1857 y(need)21
+b(If)34 b(y)m(ou're)h(using)f Fs(csh)g Ft(on)g(an)h(old)g(v)m(ersion)g
+(of)g(System)f(V,)h(y)m(ou)g(migh)m(t)330 1857 y(need)21
b(to)g(t)m(yp)s(e)g(`)p Fs(sh)30 b(./configure)p Ft(')18
-b(instead)i(to)h(prev)m(en)m(t)h Fs(csh)e Ft(from)g(trying)g(to)h
+b(instead)j(to)g(prev)m(en)m(t)h Fs(csh)e Ft(from)g(trying)h(to)g
(execute)h Fs(configure)330 1966 y Ft(itself.)330 2101
-y(Running)29 b Fs(configure)g Ft(tak)m(es)k(some)e(time.)44
-b(While)30 b(running,)f(it)i(prin)m(ts)f(messages)i(telling)e(whic)m(h)
-330 2211 y(features)h(it)f(is)f(c)m(hec)m(king)i(for.)199
-2346 y(2.)61 b(T)m(yp)s(e)30 b(`)p Fs(make)p Ft(')g(to)h(compile)e
-(Bash)i(and)e(build)f(the)i Fs(bashbug)f Ft(bug)g(rep)s(orting)g
-(script.)199 2481 y(3.)61 b(Optionally)-8 b(,)29 b(t)m(yp)s(e)h(`)p
+y(Running)30 b Fs(configure)f Ft(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 2211 y(features)e(it)g(is)f(c)m(hec)m(king)i(for.)199
+2346 y(2.)61 b(T)m(yp)s(e)30 b(`)p Fs(make)p Ft(')g(to)h(compile)g
+(Bash)g(and)e(build)h(the)g Fs(bashbug)f Ft(bug)g(rep)s(orting)h
+(script.)199 2481 y(3.)61 b(Optionally)-8 b(,)32 b(t)m(yp)s(e)e(`)p
Fs(make)g(tests)p Ft(')f(to)i(run)e(the)h(Bash)h(test)g(suite.)199
2615 y(4.)61 b(T)m(yp)s(e)36 b(`)p Fs(make)29 b(install)p
-Ft(')35 b(to)i(install)e Fs(bash)g Ft(and)h Fs(bashbug)p
-Ft(.)57 b(This)34 b(will)g(also)j(install)d(the)j(man)m(ual)330
+Ft(')35 b(to)i(install)h Fs(bash)d Ft(and)h Fs(bashbug)p
+Ft(.)57 b(This)35 b(will)i(also)h(install)f(the)g(man)m(ual)330
2725 y(pages)31 b(and)f(Info)g(\014le.)275 2885 y(The)20
-b Fs(configure)f Ft(shell)g(script)h(attempts)i(to)g(guess)f(correct)i
-(v)-5 b(alues)20 b(for)h(v)-5 b(arious)20 b(system-dep)s(enden)m(t)150
-2995 y(v)-5 b(ariables)42 b(used)h(during)f(compilation.)79
-b(It)43 b(uses)h(those)g(v)-5 b(alues)43 b(to)h(create)h(a)g(`)p
-Fs(Makefile)p Ft(')c(in)i(eac)m(h)150 3104 y(directory)24
-b(of)h(the)g(pac)m(k)-5 b(age)27 b(\(the)e(top)g(directory)-8
-b(,)26 b(the)f(`)p Fs(builtins)p Ft(',)f(`)p Fs(doc)p
+b Fs(configure)f Ft(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
+2995 y(v)-5 b(ariables)44 b(used)f(during)g(compilation.)82
+b(It)43 b(uses)h(those)g(v)-5 b(alues)44 b(to)g(create)h(a)g(`)p
+Fs(Makefile)p Ft(')c(in)j(eac)m(h)150 3104 y(directory)25
+b(of)g(the)g(pac)m(k)-5 b(age)27 b(\(the)e(top)g(directory)-8
+b(,)27 b(the)e(`)p Fs(builtins)p Ft(',)f(`)p Fs(doc)p
Ft(',)i(and)e(`)p Fs(support)p Ft(')g(directories,)150
-3214 y(eac)m(h)32 b(directory)e(under)e(`)p Fs(lib)p
-Ft(',)j(and)f(sev)m(eral)g(others\).)42 b(It)30 b(also)h(creates)g(a)g
-(`)p Fs(config.h)p Ft(')e(\014le)g(con)m(taining)150
-3324 y(system-dep)s(enden)m(t)i(de\014nitions.)42 b(Finally)-8
-b(,)31 b(it)g(creates)i(a)f(shell)e(script)g(named)h
-Fs(config.status)d Ft(that)150 3433 y(y)m(ou)k(can)g(run)e(in)g(the)h
-(future)g(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)g(a)h
-(\014le)f(`)p Fs(config.cache)p Ft(')d(that)150 3543
-y(sa)m(v)m(es)35 b(the)f(results)e(of)i(its)f(tests)i(to)f(sp)s(eed)f
-(up)g(recon\014guring,)g(and)g(a)h(\014le)f(`)p Fs(config.log)p
-Ft(')e(con)m(taining)150 3652 y(compiler)23 b(output)i(\(useful)e
-(mainly)g(for)i(debugging)e Fs(configure)p Ft(\).)37
-b(If)24 b(at)i(some)f(p)s(oin)m(t)f(`)p Fs(config.cache)p
-Ft(')150 3762 y(con)m(tains)31 b(results)e(y)m(ou)h(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)g(it.)275
-3897 y(T)-8 b(o)37 b(\014nd)f(out)i(more)f(ab)s(out)h(the)f(options)g
-(and)g(argumen)m(ts)g(that)h(the)g Fs(configure)d Ft(script)h(under-)
+3214 y(eac)m(h)32 b(directory)f(under)d(`)p Fs(lib)p
+Ft(',)j(and)f(sev)m(eral)h(others\).)42 b(It)30 b(also)i(creates)f(a)g
+(`)p Fs(config.h)p Ft(')e(\014le)h(con)m(taining)150
+3324 y(system-dep)s(enden)m(t)h(de\014nitions.)44 b(Finally)-8
+b(,)34 b(it)e(creates)h(a)f(shell)g(script)f(named)g
+Fs(config.status)d Ft(that)150 3433 y(y)m(ou)k(can)g(run)e(in)h(the)g
+(future)g(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)h(a)g
+(\014le)g(`)p Fs(config.cache)p Ft(')c(that)150 3543
+y(sa)m(v)m(es)35 b(the)f(results)f(of)h(its)g(tests)h(to)f(sp)s(eed)f
+(up)g(recon\014guring,)h(and)f(a)h(\014le)g(`)p Fs(config.log)p
+Ft(')d(con)m(taining)150 3652 y(compiler)25 b(output)g(\(useful)f
+(mainly)h(for)g(debugging)f Fs(configure)p Ft(\).)37
+b(If)24 b(at)i(some)f(p)s(oin)m(t)g(`)p Fs(config.cache)p
+Ft(')150 3762 y(con)m(tains)32 b(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
+3897 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 Fs(configure)d Ft(script)i(under-)
150 4007 y(stands,)30 b(t)m(yp)s(e)390 4142 y Fs(bash-2.04$)45
-b(./configure)g(--help)150 4277 y Ft(at)31 b(the)g(Bash)f(prompt)g(in)f
-(y)m(our)h(Bash)h(source)f(directory)-8 b(.)275 4412
-y(If)53 b(y)m(ou)h(need)f(to)i(do)e(un)m(usual)f(things)g(to)j(compile)
-e(Bash,)59 b(please)54 b(try)f(to)i(\014gure)e(out)h(ho)m(w)150
-4522 y Fs(configure)47 b Ft(could)i(c)m(hec)m(k)i(whether)e(or)g(not)h
-(to)h(do)e(them,)55 b(and)49 b(mail)f(di\013s)g(or)i(instructions)d(to)
+b(./configure)g(--help)150 4277 y Ft(at)31 b(the)g(Bash)f(prompt)g(in)g
+(y)m(our)g(Bash)h(source)f(directory)-8 b(.)275 4412
+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
+4522 y Fs(configure)47 b Ft(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 4631 y Fs(bash-maintainers@gnu.org)24 b Ft(so)30
-b(they)h(can)g(b)s(e)e(considered)h(for)g(the)g(next)h(release.)275
-4766 y(The)24 b(\014le)h(`)p Fs(configure.in)p Ft(')d(is)j(used)f(to)j
-(create)g Fs(configure)22 b Ft(b)m(y)k(a)g(program)f(called)f(Auto)s
-(conf.)39 b(Y)-8 b(ou)150 4876 y(only)30 b(need)g(`)p
-Fs(configure.in)p Ft(')d(if)j(y)m(ou)g(w)m(an)m(t)i(to)f(c)m(hange)g
-(it)f(or)g(regenerate)i Fs(configure)c Ft(using)h(a)i(new)m(er)150
-4986 y(v)m(ersion)24 b(of)g(Auto)s(conf.)39 b(If)24 b(y)m(ou)h(do)f
-(this,)h(mak)m(e)g(sure)f(y)m(ou)h(are)f(using)f(Auto)s(conf)i(v)m
-(ersion)e(2.50)j(or)f(new)m(er.)275 5121 y(Y)-8 b(ou)29
-b(can)f(remo)m(v)m(e)i(the)f(program)g(binaries)d(and)i(ob)5
-b(ject)29 b(\014les)f(from)g(the)h(source)f(co)s(de)h(directory)f(b)m
-(y)150 5230 y(t)m(yping)j(`)p Fs(make)e(clean)p Ft('.)42
-b(T)-8 b(o)32 b(also)f(remo)m(v)m(e)h(the)g(\014les)e(that)h
+b(they)h(can)g(b)s(e)e(considered)i(for)f(the)g(next)h(release.)275
+4766 y(The)24 b(\014le)i(`)p Fs(configure.in)p Ft(')c(is)k(used)e(to)j
+(create)g Fs(configure)22 b Ft(b)m(y)k(a)g(program)f(called)h(Auto)s
+(conf.)39 b(Y)-8 b(ou)150 4876 y(only)31 b(need)f(`)p
+Fs(configure.in)p Ft(')d(if)k(y)m(ou)f(w)m(an)m(t)i(to)f(c)m(hange)g
+(it)g(or)f(regenerate)i Fs(configure)c Ft(using)i(a)h(new)m(er)150
+4986 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 5121 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 5230 y(t)m(yping)j(`)p Fs(make)d(clean)p Ft('.)42
+b(T)-8 b(o)32 b(also)g(remo)m(v)m(e)g(the)g(\014les)f(that)g
Fs(configure)e Ft(created)j(\(so)g(y)m(ou)g(can)f(compile)150
-5340 y(Bash)g(for)f(a)g(di\013eren)m(t)g(kind)f(of)h(computer\),)h(t)m
-(yp)s(e)g(`)p Fs(make)e(distclean)p Ft('.)p eop
+5340 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 Fs(make)e(distclean)p Ft('.)p eop end
%%Page: 116 122
-116 121 bop 150 -116 a Ft(116)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fr(10.2)68 b(Compilers)46 b(and)f(Options)275
-560 y Ft(Some)40 b(systems)g(require)e(un)m(usual)g(options)h(for)h
-(compilation)f(or)h(linking)d(that)j(the)g Fs(configure)150
-669 y Ft(script)29 b(do)s(es)i(not)g(kno)m(w)f(ab)s(out.)41
-b(Y)-8 b(ou)31 b(can)g(giv)m(e)g Fs(configure)d Ft(initial)g(v)-5
-b(alues)30 b(for)g(v)-5 b(ariables)29 b(b)m(y)i(setting)150
-779 y(them)21 b(in)e(the)i(en)m(vironmen)m(t.)37 b(Using)20
-b(a)h(Bourne-compatible)f(shell,)h(y)m(ou)g(can)g(do)f(that)i(on)e(the)
-h(command)150 888 y(line)29 b(lik)m(e)g(this:)390 1039
-y Fs(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275
+TeXDict begin 116 121 bop 150 -116 a Ft(116)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(10.2)68 b(Compilers)46
+b(and)f(Options)275 560 y Ft(Some)40 b(systems)g(require)f(un)m(usual)g
+(options)h(for)g(compilation)i(or)e(linking)g(that)g(the)g
+Fs(configure)150 669 y Ft(script)30 b(do)s(es)h(not)g(kno)m(w)f(ab)s
+(out.)41 b(Y)-8 b(ou)31 b(can)g(giv)m(e)h Fs(configure)c
+Ft(initial)k(v)-5 b(alues)31 b(for)f(v)-5 b(ariables)31
+b(b)m(y)g(setting)150 779 y(them)21 b(in)f(the)h(en)m(vironmen)m(t.)38
+b(Using)21 b(a)g(Bourne-compatible)h(shell,)h(y)m(ou)e(can)g(do)f(that)
+i(on)e(the)h(command)150 888 y(line)31 b(lik)m(e)g(this:)390
+1039 y Fs(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275
1191 y Ft(On)29 b(systems)h(that)h(ha)m(v)m(e)h(the)f
-Fs(env)e Ft(program,)h(y)m(ou)h(can)g(do)f(it)g(lik)m(e)g(this:)390
+Fs(env)e Ft(program,)h(y)m(ou)h(can)g(do)f(it)h(lik)m(e)h(this:)390
1342 y Fs(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42
-b(LDFLAGS=-s)j(./configure)275 1493 y Ft(The)29 b(con\014guration)h
-(pro)s(cess)g(uses)g(GCC)g(to)h(build)c(Bash)k(if)e(it)h(is)g(a)m(v)-5
+b(LDFLAGS=-s)j(./configure)275 1493 y Ft(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 1792 y Fr(10.3)68 b(Compiling)46 b(F)-11
b(or)45 b(Multiple)g(Arc)l(hitectures)275 2052 y Ft(Y)-8
-b(ou)28 b(can)h(compile)e(Bash)i(for)f(more)g(than)g(one)h(kind)d(of)j
-(computer)f(at)h(the)g(same)f(time,)h(b)m(y)f(placing)150
-2162 y(the)39 b(ob)5 b(ject)39 b(\014les)f(for)g(eac)m(h)i(arc)m
-(hitecture)f(in)e(their)h(o)m(wn)g(directory)-8 b(.)66
-b(T)-8 b(o)39 b(do)f(this,)i(y)m(ou)f(m)m(ust)f(use)h(a)150
-2271 y(v)m(ersion)32 b(of)h Fs(make)f Ft(that)i(supp)s(orts)d(the)i
-Fs(VPATH)e Ft(v)-5 b(ariable,)33 b(suc)m(h)f(as)i(GNU)f
+b(ou)28 b(can)h(compile)g(Bash)g(for)f(more)g(than)g(one)h(kind)e(of)i
+(computer)f(at)h(the)g(same)f(time,)i(b)m(y)e(placing)150
+2162 y(the)39 b(ob)5 b(ject)39 b(\014les)g(for)f(eac)m(h)i(arc)m
+(hitecture)g(in)e(their)h(o)m(wn)f(directory)-8 b(.)67
+b(T)-8 b(o)39 b(do)f(this,)j(y)m(ou)e(m)m(ust)f(use)h(a)150
+2271 y(v)m(ersion)33 b(of)g Fs(make)f Ft(that)i(supp)s(orts)d(the)i
+Fs(VPATH)e Ft(v)-5 b(ariable,)35 b(suc)m(h)d(as)i(GNU)f
Fs(make)p Ft(.)47 b Fs(cd)33 b Ft(to)g(the)g(directory)150
2381 y(where)23 b(y)m(ou)g(w)m(an)m(t)h(the)f(ob)5 b(ject)24
-b(\014les)e(and)g(executables)i(to)g(go)f(and)g(run)f(the)h
-Fs(configure)d Ft(script)i(from)h(the)150 2491 y(source)j(directory)-8
-b(.)39 b(Y)-8 b(ou)26 b(ma)m(y)g(need)g(to)g(supply)e(the)h(`)p
-Fs(--srcdir=PATH)p Ft(')e(argumen)m(t)j(to)h(tell)d Fs(configure)150
-2600 y Ft(where)43 b(the)h(source)g(\014les)f(are.)82
-b Fs(configure)41 b Ft(automatically)j(c)m(hec)m(ks)h(for)f(the)g
-(source)g(co)s(de)g(in)f(the)150 2710 y(directory)30
-b(that)h Fs(configure)d Ft(is)h(in)g(and)h(in)f(`..'.)275
+b(\014les)f(and)f(executables)j(to)f(go)f(and)g(run)f(the)h
+Fs(configure)d Ft(script)j(from)g(the)150 2491 y(source)j(directory)-8
+b(.)40 b(Y)-8 b(ou)26 b(ma)m(y)g(need)g(to)g(supply)f(the)g(`)p
+Fs(--srcdir=PATH)p Ft(')e(argumen)m(t)j(to)h(tell)f Fs(configure)150
+2600 y Ft(where)43 b(the)h(source)g(\014les)g(are.)82
+b Fs(configure)41 b Ft(automatically)47 b(c)m(hec)m(ks)e(for)f(the)g
+(source)g(co)s(de)g(in)g(the)150 2710 y(directory)31
+b(that)g Fs(configure)d Ft(is)i(in)g(and)g(in)g(`..'.)275
2861 y(If)20 b(y)m(ou)h(ha)m(v)m(e)i(to)e(use)g(a)g Fs(make)f
Ft(that)i(do)s(es)e(not)i(supp)s(orts)d(the)i Fs(VPATH)e
-Ft(v)-5 b(ariable,)22 b(y)m(ou)g(can)f(compile)f(Bash)150
-2971 y(for)33 b(one)h(arc)m(hitecture)g(at)g(a)g(time)f(in)f(the)i
-(source)g(co)s(de)f(directory)-8 b(.)50 b(After)34 b(y)m(ou)g(ha)m(v)m
-(e)h(installed)c(Bash)150 3080 y(for)f(one)h(arc)m(hitecture,)g(use)f
-(`)p Fs(make)g(distclean)p Ft(')e(b)s(efore)i(recon\014guring)f(for)h
+Ft(v)-5 b(ariable,)24 b(y)m(ou)e(can)f(compile)h(Bash)150
+2971 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 3080 y(for)c(one)h(arc)m(hitecture,)h(use)e
+(`)p Fs(make)g(distclean)p Ft(')e(b)s(efore)i(recon\014guring)g(for)g
(another)g(arc)m(hitecture.)275 3231 y(Alternativ)m(ely)-8
-b(,)23 b(if)d(y)m(our)i(system)g(supp)s(orts)d(sym)m(b)s(olic)h(links,)
-i(y)m(ou)g(can)g(use)f(the)h(`)p Fs(support/mkclone)p
-Ft(')150 3341 y(script)g(to)i(create)g(a)f(build)d(tree)k(whic)m(h)e
-(has)g(sym)m(b)s(olic)g(links)e(bac)m(k)k(to)g(eac)m(h)g(\014le)e(in)g
-(the)h(source)g(directory)-8 b(.)150 3450 y(Here's)41
-b(an)f(example)h(that)g(creates)h(a)e(build)e(directory)i(in)f(the)i
-(curren)m(t)f(directory)g(from)g(a)h(source)150 3560
-y(directory)30 b(`)p Fs(/usr/gnu/src/bash-2.0)p Ft(':)390
+b(,)26 b(if)21 b(y)m(our)h(system)g(supp)s(orts)d(sym)m(b)s(olic)j
+(links,)i(y)m(ou)e(can)g(use)f(the)h(`)p Fs(support/mkclone)p
+Ft(')150 3341 y(script)h(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 3450 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 3560
+y(directory)31 b(`)p Fs(/usr/gnu/src/bash-2.0)p Ft(':)390
3711 y Fs(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 3862 y
-Ft(The)c Fs(mkclone)e Ft(script)h(requires)g(Bash,)j(so)f(y)m(ou)f(m)m
-(ust)h(ha)m(v)m(e)g(already)f(built)e(Bash)i(for)g(at)h(least)g(one)150
-3972 y(arc)m(hitecture)31 b(b)s(efore)f(y)m(ou)h(can)f(create)i(build)c
-(directories)h(for)h(other)h(arc)m(hitectures.)150 4271
+Ft(The)c Fs(mkclone)e Ft(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
+3972 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 4271
y Fr(10.4)68 b(Installation)47 b(Names)275 4531 y Ft(By)36
-b(default,)g(`)p Fs(make)29 b(install)p Ft(')34 b(will)g(install)f(in)m
-(to)j(`)p Fs(/usr/local/bin)p Ft(',)e(`)p Fs(/usr/local/man)p
-Ft(',)g(etc.)150 4641 y(Y)-8 b(ou)39 b(can)g(sp)s(ecify)e(an)i
-(installation)d(pre\014x)h(other)i(than)g(`)p Fs(/usr/local)p
-Ft(')d(b)m(y)i(giving)g Fs(configure)e Ft(the)150 4751
-y(option)k(`)p Fs(--prefix=)p Fj(PATH)11 b Ft(',)41 b(or)g(b)m(y)f(sp)s
-(ecifying)f(a)j(v)-5 b(alue)40 b(for)h(the)g Fs(DESTDIR)e
-Ft(`)p Fs(make)p Ft(')h(v)-5 b(ariable)40 b(when)150
-4860 y(running)28 b(`)p Fs(make)h(install)p Ft('.)275
-5011 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)e(separate)i(installation)d
-(pre\014xes)h(for)h(arc)m(hitecture-sp)s(eci\014c)g(\014les)g(and)150
-5121 y(arc)m(hitecture-indep)s(enden)m(t)36 b(\014les.)61
-b(If)37 b(y)m(ou)h(giv)m(e)f Fs(configure)e Ft(the)j(option)f(`)p
-Fs(--exec-prefix=)p Fj(PATH)11 b Ft(',)150 5230 y(`)p
-Fs(make)29 b(install)p Ft(')63 b(will)e(use)i Fq(P)-8
-b(A)g(TH)75 b Ft(as)64 b(the)g(pre\014x)e(for)i(installing)d(programs)i
-(and)h(libraries.)150 5340 y(Do)s(cumen)m(tation)31 b(and)f(other)h
-(data)g(\014les)e(will)f(still)g(use)i(the)h(regular)e(pre\014x.)p
-eop
+b(default,)h(`)p Fs(make)29 b(install)p Ft(')34 b(will)j(install)f(in)m
+(to)h(`)p Fs(/usr/local/bin)p Ft(',)d(`)p Fs(/usr/local/man)p
+Ft(',)g(etc.)150 4641 y(Y)-8 b(ou)39 b(can)g(sp)s(ecify)f(an)h
+(installation)h(pre\014x)d(other)i(than)g(`)p Fs(/usr/local)p
+Ft(')d(b)m(y)i(giving)i Fs(configure)c Ft(the)150 4751
+y(option)41 b(`)p Fs(--prefix=)p Fj(PATH)11 b Ft(',)41
+b(or)g(b)m(y)f(sp)s(ecifying)h(a)h(v)-5 b(alue)41 b(for)g(the)g
+Fs(DESTDIR)e Ft(`)p Fs(make)p Ft(')h(v)-5 b(ariable)42
+b(when)150 4860 y(running)29 b(`)p Fs(make)g(install)p
+Ft('.)275 5011 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 5121 y(arc)m(hitecture-indep)s(enden)m(t)38
+b(\014les.)62 b(If)37 b(y)m(ou)h(giv)m(e)g Fs(configure)d
+Ft(the)j(option)g(`)p Fs(--exec-prefix=)p Fj(PATH)11
+b Ft(',)150 5230 y(`)p Fs(make)29 b(install)p Ft(')63
+b(will)h(use)f Fq(P)-8 b(A)g(TH)75 b Ft(as)64 b(the)g(pre\014x)e(for)i
+(installing)h(programs)e(and)h(libraries.)150 5340 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.)p eop end
%%Page: 117 123
-117 122 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28
-b(Bash)2356 b(117)150 299 y Fr(10.5)68 b(Sp)t(ecifying)45
-b(the)g(System)h(T)l(yp)t(e)275 539 y Ft(There)35 b(ma)m(y)h(b)s(e)f
-(some)h(features)g Fs(configure)d Ft(can)j(not)g(\014gure)f(out)g
-(automatically)-8 b(,)38 b(but)d(need)g(to)150 649 y(determine)g(b)m(y)
-h(the)h(t)m(yp)s(e)f(of)g(host)h(Bash)f(will)e(run)g(on.)58
-b(Usually)35 b Fs(configure)f Ft(can)i(\014gure)g(that)g(out,)150
-758 y(but)c(if)g(it)g(prin)m(ts)g(a)h(message)h(sa)m(ying)f(it)f(can)i
-(not)f(guess)g(the)g(host)g(t)m(yp)s(e,)h(giv)m(e)f(it)f(the)h(`)p
-Fs(--host=TYPE)p Ft(')150 868 y(option.)38 b(`)p Fs(TYPE)p
-Ft(')25 b(can)g(either)f(b)s(e)h(a)g(short)g(name)g(for)g(the)g(system)
+TeXDict begin 117 122 bop 150 -116 a Ft(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(117)150 299 y Fr(10.5)68
+b(Sp)t(ecifying)45 b(the)g(System)h(T)l(yp)t(e)275 539
+y Ft(There)35 b(ma)m(y)h(b)s(e)f(some)h(features)g Fs(configure)d
+Ft(can)j(not)g(\014gure)f(out)g(automatically)-8 b(,)41
+b(but)35 b(need)g(to)150 649 y(determine)h(b)m(y)g(the)h(t)m(yp)s(e)f
+(of)g(host)h(Bash)f(will)h(run)d(on.)58 b(Usually)37
+b Fs(configure)d Ft(can)i(\014gure)g(that)g(out,)150
+758 y(but)c(if)h(it)g(prin)m(ts)g(a)g(message)h(sa)m(ying)g(it)f(can)h
+(not)f(guess)g(the)g(host)g(t)m(yp)s(e,)h(giv)m(e)g(it)f(the)g(`)p
+Fs(--host=TYPE)p Ft(')150 868 y(option.)39 b(`)p Fs(TYPE)p
+Ft(')25 b(can)g(either)g(b)s(e)g(a)g(short)g(name)g(for)g(the)g(system)
g(t)m(yp)s(e,)h(suc)m(h)f(as)g(`)p Fs(sun4)p Ft(',)h(or)f(a)g
-(canonical)150 977 y(name)30 b(with)f(three)i(\014elds:)39
+(canonical)150 977 y(name)30 b(with)g(three)h(\014elds:)40
b(`)p Fs(CPU-COMPANY-SYSTEM)p Ft(')26 b(\(e.g.,)32 b(`)p
-Fs(i386-unknown-freebsd4.2)p Ft('\).)275 1108 y(See)e(the)h(\014le)e(`)
-p Fs(support/config.sub)p Ft(')d(for)k(the)h(p)s(ossible)d(v)-5
-b(alues)29 b(of)i(eac)m(h)g(\014eld.)150 1354 y Fr(10.6)68
+Fs(i386-unknown-freebsd4.2)p Ft('\).)275 1108 y(See)e(the)h(\014le)f(`)
+p Fs(support/config.sub)p Ft(')c(for)k(the)h(p)s(ossible)f(v)-5
+b(alues)30 b(of)h(eac)m(h)g(\014eld.)150 1354 y Fr(10.6)68
b(Sharing)45 b(Defaults)275 1594 y Ft(If)34 b(y)m(ou)i(w)m(an)m(t)g(to)
-g(set)g(default)e(v)-5 b(alues)35 b(for)g Fs(configure)e
-Ft(scripts)h(to)i(share,)g(y)m(ou)g(can)g(create)g(a)g(site)150
-1704 y(shell)46 b(script)g(called)h Fs(config.site)d
-Ft(that)k(giv)m(es)g(default)f(v)-5 b(alues)47 b(for)g(v)-5
-b(ariables)46 b(lik)m(e)h Fs(CC)p Ft(,)52 b Fs(cache_)150
+g(set)g(default)f(v)-5 b(alues)36 b(for)f Fs(configure)e
+Ft(scripts)i(to)h(share,)g(y)m(ou)g(can)g(create)g(a)g(site)150
+1704 y(shell)48 b(script)f(called)i Fs(config.site)44
+b Ft(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 Fs(CC)p Ft(,)j Fs(cache_)150
1813 y(file)p Ft(,)43 b(and)e Fs(prefix)p Ft(.)73 b Fs(configure)39
-b Ft(lo)s(oks)i(for)g(`)p Fs(PREFIX/share/config.site)p
-Ft(')35 b(if)41 b(it)g(exists,)j(then)150 1923 y(`)p
-Fs(PREFIX/etc/config.site)p Ft(')20 b(if)25 b(it)g(exists.)39
+b Ft(lo)s(oks)j(for)f(`)p Fs(PREFIX/share/config.site)p
+Ft(')35 b(if)42 b(it)g(exists,)j(then)150 1923 y(`)p
+Fs(PREFIX/etc/config.site)p Ft(')20 b(if)26 b(it)g(exists.)40
b(Or,)26 b(y)m(ou)g(can)g(set)g(the)g Fs(CONFIG_SITE)c
-Ft(en)m(vironmen)m(t)j(v)-5 b(ari-)150 2033 y(able)39
-b(to)h(the)g(lo)s(cation)f(of)g(the)h(site)f(script.)66
-b(A)40 b(w)m(arning:)57 b(the)40 b(Bash)g Fs(configure)c
-Ft(lo)s(oks)j(for)g(a)h(site)150 2142 y(script,)30 b(but)f(not)i(all)e
-Fs(configure)f Ft(scripts)h(do.)150 2388 y Fr(10.7)68
+Ft(en)m(vironmen)m(t)k(v)-5 b(ari-)150 2033 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 Fs(configure)c
+Ft(lo)s(oks)k(for)f(a)h(site)150 2142 y(script,)31 b(but)e(not)i(all)g
+Fs(configure)d Ft(scripts)i(do.)150 2388 y Fr(10.7)68
b(Op)t(eration)46 b(Con)l(trols)275 2628 y Fs(configure)27
-b Ft(recognizes)k(the)g(follo)m(wing)e(options)h(to)h(con)m(trol)f(ho)m
-(w)h(it)f(op)s(erates.)150 2780 y Fs(--cache-file=)p
-Fj(file)630 2890 y Ft(Use)35 b(and)g(sa)m(v)m(e)h(the)f(results)f(of)h
-(the)h(tests)f(in)f Fq(\014le)39 b Ft(instead)34 b(of)i(`)p
-Fs(./config.cache)p Ft('.)51 b(Set)630 2999 y Fq(\014le)35
-b Ft(to)c(`)p Fs(/dev/null)p Ft(')d(to)j(disable)e(cac)m(hing,)i(for)f
-(debugging)f Fs(configure)p Ft(.)150 3151 y Fs(--help)192
-b Ft(Prin)m(t)29 b(a)i(summary)e(of)i(the)f(options)g(to)h
+b Ft(recognizes)32 b(the)f(follo)m(wing)h(options)f(to)g(con)m(trol)g
+(ho)m(w)g(it)g(op)s(erates.)150 2780 y Fs(--cache-file=)p
+Fj(file)630 2890 y Ft(Use)k(and)g(sa)m(v)m(e)h(the)f(results)g(of)g
+(the)h(tests)f(in)g Fq(\014le)40 b Ft(instead)35 b(of)h(`)p
+Fs(./config.cache)p Ft('.)51 b(Set)630 2999 y Fq(\014le)36
+b Ft(to)31 b(`)p Fs(/dev/null)p Ft(')d(to)j(disable)g(cac)m(hing,)h
+(for)e(debugging)g Fs(configure)p Ft(.)150 3151 y Fs(--help)192
+b Ft(Prin)m(t)30 b(a)h(summary)e(of)i(the)f(options)h(to)g
Fs(configure)p Ft(,)d(and)i(exit.)150 3303 y Fs(--quiet)150
-3412 y(--silent)150 3522 y(-q)384 b Ft(Do)31 b(not)g(prin)m(t)e
-(messages)i(sa)m(ying)f(whic)m(h)g(c)m(hec)m(ks)h(are)g(b)s(eing)e
-(made.)150 3674 y Fs(--srcdir=)p Fj(dir)630 3783 y Ft(Lo)s(ok)j(for)g
-(the)g(Bash)g(source)h(co)s(de)f(in)f(directory)g Fq(dir)p
-Ft(.)44 b(Usually)31 b Fs(configure)e Ft(can)j(deter-)630
-3893 y(mine)d(that)i(directory)f(automatically)-8 b(.)150
-4045 y Fs(--version)630 4154 y Ft(Prin)m(t)28 b(the)i(v)m(ersion)f(of)h
+3412 y(--silent)150 3522 y(-q)384 b Ft(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 3674 y Fs(--srcdir=)p Fj(dir)630 3783 y Ft(Lo)s(ok)i(for)g
+(the)g(Bash)g(source)h(co)s(de)f(in)g(directory)g Fq(dir)p
+Ft(.)45 b(Usually)33 b Fs(configure)c Ft(can)j(deter-)630
+3893 y(mine)e(that)h(directory)g(automatically)-8 b(.)150
+4045 y Fs(--version)630 4154 y Ft(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 Fs(configure)d
-Ft(script,)i(and)g(exit.)275 4306 y Fs(configure)34 b
-Ft(also)j(accepts)h(some)g(other,)h(not)e(widely)e(used,)j(b)s
-(oilerplate)d(options.)60 b(`)p Fs(configure)150 4415
-y(--help)p Ft(')29 b(prin)m(ts)g(the)h(complete)h(list.)150
+Ft(script,)j(and)f(exit.)275 4306 y Fs(configure)34 b
+Ft(also)k(accepts)g(some)g(other,)h(not)e(widely)g(used,)h(b)s
+(oilerplate)g(options.)61 b(`)p Fs(configure)150 4415
+y(--help)p Ft(')29 b(prin)m(ts)h(the)g(complete)i(list.)150
4661 y Fr(10.8)68 b(Optional)46 b(F)-11 b(eatures)275
4902 y Ft(The)34 b(Bash)h Fs(configure)d Ft(has)j(a)g(n)m(um)m(b)s(er)f
-(of)h(`)p Fs(--enable-)p Fj(feature)11 b Ft(')30 b(options,)36
-b(where)f Fq(feature)40 b Ft(in-)150 5011 y(dicates)32
-b(an)g(optional)f(part)h(of)g(Bash.)45 b(There)32 b(are)g(also)g(sev)m
-(eral)g(`)p Fs(--with-)p Fj(package)11 b Ft(')29 b(options,)i(where)150
-5121 y Fq(pac)m(k)-5 b(age)35 b Ft(is)27 b(something)h(lik)m(e)g(`)p
-Fs(bash-malloc)p Ft(')d(or)j(`)p Fs(purify)p Ft('.)39
-b(T)-8 b(o)29 b(turn)e(o\013)h(the)h(default)e(use)h(of)g(a)h(pac)m(k-)
+(of)h(`)p Fs(--enable-)p Fj(feature)11 b Ft(')30 b(options,)37
+b(where)e Fq(feature)40 b Ft(in-)150 5011 y(dicates)33
+b(an)f(optional)h(part)f(of)g(Bash.)45 b(There)32 b(are)g(also)h(sev)m
+(eral)g(`)p Fs(--with-)p Fj(package)11 b Ft(')29 b(options,)j(where)150
+5121 y Fq(pac)m(k)-5 b(age)35 b Ft(is)28 b(something)h(lik)m(e)h(`)p
+Fs(bash-malloc)p Ft(')25 b(or)j(`)p Fs(purify)p Ft('.)39
+b(T)-8 b(o)29 b(turn)e(o\013)h(the)h(default)f(use)g(of)g(a)h(pac)m(k-)
150 5230 y(age,)43 b(use)d(`)p Fs(--without-)p Fj(package)11
-b Ft('.)63 b(T)-8 b(o)40 b(con\014gure)g(Bash)f(without)g(a)h(feature)g
-(that)g(is)f(enabled)f(b)m(y)150 5340 y(default,)30 b(use)g(`)p
-Fs(--disable-)p Fj(feature)11 b Ft('.)p eop
+b Ft('.)63 b(T)-8 b(o)40 b(con\014gure)g(Bash)f(without)h(a)g(feature)g
+(that)g(is)g(enabled)f(b)m(y)150 5340 y(default,)31 b(use)f(`)p
+Fs(--disable-)p Fj(feature)11 b Ft('.)p eop end
%%Page: 118 124
-118 123 bop 150 -116 a Ft(118)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-275 299 y(Here)21 b(is)f(a)h(complete)g(list)f(of)h(the)g(`)p
-Fs(--enable-)p Ft(')e(and)h(`)p Fs(--with-)p Ft(')g(options)g(that)h
-(the)g(Bash)g Fs(configure)150 408 y Ft(recognizes.)150
-589 y Fs(--with-afs)630 698 y Ft(De\014ne)31 b(if)e(y)m(ou)i(are)f
-(using)f(the)i(Andrew)e(File)h(System)g(from)g(T)-8 b(ransarc.)150
-872 y Fs(--with-bash-malloc)630 981 y Ft(Use)40 b(the)f(Bash)h(v)m
-(ersion)f(of)g Fs(malloc)f Ft(in)g(`)p Fs(lib/malloc/malloc.c)p
-Ft('.)63 b(This)38 b(is)g(not)i(the)630 1091 y(same)34
-b Fs(malloc)f Ft(that)h(app)s(ears)f(in)g Fl(gnu)h Ft(lib)s(c,)f(but)g
-(an)h(older)f(v)m(ersion)g(deriv)m(ed)g(from)h(the)630
-1200 y(4.2)45 b Fl(bsd)d Fs(malloc)p Ft(.)79 b(This)41
-b Fs(malloc)h Ft(is)h(v)m(ery)h(fast,)j(but)c(w)m(astes)h(some)g(space)
-g(on)g(eac)m(h)630 1310 y(allo)s(cation.)39 b(This)27
-b(option)g(is)h(enabled)f(b)m(y)h(default.)39 b(The)28
-b(`)p Fs(NOTES)p Ft(')f(\014le)h(con)m(tains)g(a)h(list)e(of)630
-1419 y(systems)e(for)h(whic)m(h)e(this)g(should)f(b)s(e)i(turned)f
-(o\013,)j(and)e Fs(configure)e Ft(disables)g(this)h(option)630
-1529 y(automatically)30 b(for)g(a)h(n)m(um)m(b)s(er)e(of)i(systems.)150
-1702 y Fs(--with-curses)630 1812 y Ft(Use)h(the)h(curses)e(library)f
-(instead)h(of)i(the)f(termcap)g(library)-8 b(.)44 b(This)31
-b(should)f(b)s(e)h(supplied)630 1921 y(if)e(y)m(our)i(system)f(has)g
-(an)h(inadequate)f(or)g(incomplete)g(termcap)g(database.)150
+TeXDict begin 118 123 bop 150 -116 a Ft(118)2527 b(Bash)31
+b(Reference)g(Man)m(ual)275 299 y(Here)21 b(is)g(a)g(complete)h(list)g
+(of)f(the)g(`)p Fs(--enable-)p Ft(')e(and)h(`)p Fs(--with-)p
+Ft(')g(options)h(that)g(the)g(Bash)g Fs(configure)150
+408 y Ft(recognizes.)150 589 y Fs(--with-afs)630 698
+y Ft(De\014ne)31 b(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 872 y Fs(--with-bash-malloc)630
+981 y Ft(Use)40 b(the)f(Bash)h(v)m(ersion)g(of)f Fs(malloc)f
+Ft(in)h(`)p Fs(lib/malloc/malloc.c)p Ft('.)63 b(This)39
+b(is)g(not)h(the)630 1091 y(same)34 b Fs(malloc)f Ft(that)h(app)s(ears)
+f(in)h Fl(gnu)g Ft(lib)s(c,)h(but)e(an)h(older)g(v)m(ersion)g(deriv)m
+(ed)g(from)g(the)630 1200 y(4.2)45 b Fl(bsd)d Fs(malloc)p
+Ft(.)79 b(This)42 b Fs(malloc)g Ft(is)i(v)m(ery)g(fast,)j(but)c(w)m
+(astes)h(some)g(space)g(on)g(eac)m(h)630 1310 y(allo)s(cation.)e(This)
+28 b(option)g(is)h(enabled)f(b)m(y)g(default.)40 b(The)28
+b(`)p Fs(NOTES)p Ft(')f(\014le)i(con)m(tains)g(a)g(list)g(of)630
+1419 y(systems)c(for)h(whic)m(h)f(this)g(should)f(b)s(e)h(turned)f
+(o\013,)j(and)e Fs(configure)e Ft(disables)i(this)g(option)630
+1529 y(automatically)33 b(for)d(a)h(n)m(um)m(b)s(er)e(of)i(systems.)150
+1702 y Fs(--with-curses)630 1812 y Ft(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 1921 y(if)f(y)m(our)h(system)f(has)g
+(an)h(inadequate)g(or)f(incomplete)i(termcap)e(database.)150
2095 y Fs(--with-gnu-malloc)630 2204 y Ft(A)g(synon)m(ym)g(for)g
Fs(--with-bash-malloc)p Ft(.)150 2378 y Fs(--with-installed-readlin)o
(e[=)p Fj(P)o(REFI)o(X)11 b Fs(])630 2487 y Ft(De\014ne)26
-b(this)e(to)i(mak)m(e)h(Bash)f(link)d(with)h(a)i(lo)s(cally-installed)c
-(v)m(ersion)j(of)h(Readline)e(rather)630 2597 y(than)38
-b(the)h(v)m(ersion)f(in)g(`)p Fs(lib/readline)p Ft('.)62
-b(This)37 b(w)m(orks)i(only)e(with)h(Readline)f(4.3)j(and)630
-2706 y(later)28 b(v)m(ersions.)39 b(If)28 b Fq(PREFIX)37
-b Ft(is)27 b Fs(yes)g Ft(or)h(not)g(supplied,)d Fs(configure)h
-Ft(uses)h(the)h(v)-5 b(alues)28 b(of)630 2816 y(the)d(mak)m(e)g(v)-5
-b(ariables)23 b Fs(includedir)f Ft(and)h Fs(libdir)p
-Ft(,)h(whic)m(h)g(are)g(sub)s(directories)e(of)j Fs(prefix)630
-2926 y Ft(b)m(y)32 b(default,)f(to)i(\014nd)d(the)i(installed)e(v)m
-(ersion)h(of)h(Readline)f(if)g(it)g(is)g(not)h(in)f(the)h(standard)630
-3035 y(system)j(include)d(and)i(library)e(directories.)52
-b(If)34 b Fq(PREFIX)43 b Ft(is)34 b Fs(no)p Ft(,)h(Bash)f(links)f(with)
-g(the)630 3145 y(v)m(ersion)k(in)f(`)p Fs(lib/readline)p
-Ft('.)58 b(If)37 b Fq(PREFIX)46 b Ft(is)37 b(set)h(to)g(an)m(y)f(other)
-h(v)-5 b(alue,)38 b Fs(configure)630 3254 y Ft(treats)27
-b(it)f(as)g(a)h(directory)f(pathname)g(and)f(lo)s(oks)h(for)g(the)g
-(installed)e(v)m(ersion)i(of)g(Readline)630 3364 y(in)33
-b(sub)s(directories)e(of)j(that)h(directory)f(\(include)e(\014les)h(in)
+b(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 2597 y(than)38
+b(the)h(v)m(ersion)g(in)g(`)p Fs(lib/readline)p Ft('.)62
+b(This)38 b(w)m(orks)h(only)f(with)h(Readline)g(4.3)h(and)630
+2706 y(later)29 b(v)m(ersions.)40 b(If)28 b Fq(PREFIX)37
+b Ft(is)28 b Fs(yes)f Ft(or)h(not)g(supplied,)f Fs(configure)f
+Ft(uses)h(the)h(v)-5 b(alues)29 b(of)630 2816 y(the)c(mak)m(e)g(v)-5
+b(ariables)25 b Fs(includedir)d Ft(and)h Fs(libdir)p
+Ft(,)h(whic)m(h)h(are)f(sub)s(directories)g(of)h Fs(prefix)630
+2926 y Ft(b)m(y)32 b(default,)g(to)h(\014nd)d(the)i(installed)h(v)m
+(ersion)f(of)g(Readline)h(if)f(it)g(is)g(not)g(in)g(the)g(standard)630
+3035 y(system)j(include)f(and)g(library)g(directories.)54
+b(If)34 b Fq(PREFIX)43 b Ft(is)35 b Fs(no)p Ft(,)g(Bash)f(links)h(with)
+f(the)630 3145 y(v)m(ersion)k(in)f(`)p Fs(lib/readline)p
+Ft('.)58 b(If)37 b Fq(PREFIX)46 b Ft(is)38 b(set)g(to)g(an)m(y)f(other)
+h(v)-5 b(alue,)39 b Fs(configure)630 3254 y Ft(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 3364 y(in)34
+b(sub)s(directories)f(of)h(that)h(directory)g(\(include)f(\014les)g(in)
g Fq(PREFIX)9 b Ft(/)p Fs(include)32 b Ft(and)i(the)630
-3473 y(library)28 b(in)h Fq(PREFIX)9 b Ft(/)p Fs(lib)p
-Ft(\).)150 3647 y Fs(--with-purify)630 3756 y Ft(De\014ne)23
-b(this)f(to)i(use)f(the)g(Purify)e(memory)i(allo)s(cation)f(c)m(hec)m
-(k)m(er)j(from)e(Rational)g(Soft)m(w)m(are.)150 3930
-y Fs(--enable-minimal-config)630 4039 y Ft(This)f(pro)s(duces)g(a)i
-(shell)e(with)g(minimal)f(features,)k(close)f(to)g(the)g(historical)e
-(Bourne)h(shell.)275 4219 y(There)g(are)i(sev)m(eral)f(`)p
-Fs(--enable-)p Ft(')e(options)i(that)g(alter)g(ho)m(w)h(Bash)f(is)f
-(compiled)g(and)g(link)m(ed,)h(rather)150 4329 y(than)30
-b(c)m(hanging)g(run-time)f(features.)150 4509 y Fs(--enable-largefile)
-630 4619 y Ft(Enable)75 b(supp)s(ort)g(for)h(large)g(\014les)f(\()p
+3473 y(library)c(in)g Fq(PREFIX)9 b Ft(/)p Fs(lib)p Ft(\).)150
+3647 y Fs(--with-purify)630 3756 y Ft(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 3930 y Fs(--enable-minimal-config)630
+4039 y Ft(This)e(pro)s(duces)f(a)i(shell)g(with)f(minimal)h(features,)h
+(close)g(to)f(the)g(historical)h(Bourne)e(shell.)275
+4219 y(There)g(are)i(sev)m(eral)g(`)p Fs(--enable-)p
+Ft(')d(options)j(that)f(alter)h(ho)m(w)g(Bash)f(is)g(compiled)h(and)e
+(link)m(ed,)j(rather)150 4329 y(than)k(c)m(hanging)h(run-time)f
+(features.)150 4509 y Fs(--enable-largefile)630 4619
+y Ft(Enable)76 b(supp)s(ort)f(for)h(large)h(\014les)f(\()p
Fs(http://www.sas.com/standar)o(ds/l)o(arge)o(_)630 4728
-y(file/x_open.20Mar96.html)o Ft(\))23 b(if)k(the)h(op)s(erating)g
-(system)g(requires)f(sp)s(ecial)f(compiler)630 4838 y(options)44
-b(to)h(build)c(programs)j(whic)m(h)f(can)h(access)i(large)e(\014les.)81
-b(This)43 b(is)g(enabled)g(b)m(y)630 4948 y(default,)30
-b(if)f(the)i(op)s(erating)f(system)g(pro)m(vides)f(large)i(\014le)e
+y(file/x_open.20Mar96.html)o Ft(\))23 b(if)28 b(the)g(op)s(erating)h
+(system)f(requires)g(sp)s(ecial)g(compiler)630 4838 y(options)45
+b(to)g(build)e(programs)h(whic)m(h)g(can)g(access)i(large)f(\014les.)82
+b(This)44 b(is)g(enabled)g(b)m(y)630 4948 y(default,)31
+b(if)f(the)h(op)s(erating)g(system)f(pro)m(vides)g(large)i(\014le)e
(supp)s(ort.)150 5121 y Fs(--enable-profiling)630 5230
-y Ft(This)h(builds)e(a)k(Bash)g(binary)e(that)i(pro)s(duces)e
-(pro\014ling)f(information)h(to)j(b)s(e)d(pro)s(cessed)630
-5340 y(b)m(y)g Fs(gprof)f Ft(eac)m(h)j(time)e(it)g(is)f(executed.)p
-eop
+y Ft(This)h(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
+5340 y(b)m(y)g Fs(gprof)f Ft(eac)m(h)j(time)f(it)g(is)f(executed.)p
+eop end
%%Page: 119 125
-119 124 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28
-b(Bash)2356 b(119)150 299 y Fs(--enable-static-link)630
-408 y Ft(This)36 b(causes)i(Bash)f(to)h(b)s(e)f(link)m(ed)f(statically)
--8 b(,)40 b(if)c Fs(gcc)h Ft(is)f(b)s(eing)g(used.)61
-b(This)36 b(could)h(b)s(e)630 518 y(used)30 b(to)h(build)c(a)k(v)m
-(ersion)f(to)h(use)f(as)g(ro)s(ot's)h(shell.)275 663
-y(The)f(`)p Fs(minimal-config)p Ft(')d(option)j(can)h(b)s(e)f(used)f
-(to)j(disable)c(all)i(of)h(the)f(follo)m(wing)f(options,)i(but)e(it)150
-772 y(is)g(pro)s(cessed)h(\014rst,)g(so)h(individual)26
-b(options)j(ma)m(y)i(b)s(e)f(enabled)f(using)g(`)p Fs(enable-)p
-Fj(feature)11 b Ft('.)275 899 y(All)35 b(of)i(the)f(follo)m(wing)f
-(options)h(except)i(for)e(`)p Fs(disabled-builtins)p
-Ft(')d(and)j(`)p Fs(xpg-echo-default)p Ft(')150 1009
-y(are)26 b(enabled)f(b)m(y)h(default,)g(unless)f(the)h(op)s(erating)f
-(system)h(do)s(es)g(not)g(pro)m(vide)f(the)h(necessary)g(supp)s(ort.)
-150 1154 y Fs(--enable-alias)630 1263 y Ft(Allo)m(w)39
-b(alias)g(expansion)g(and)g(include)e(the)j Fs(alias)f
-Ft(and)g Fs(unalias)e Ft(builtins)g(\(see)j(Sec-)630
-1373 y(tion)30 b(6.6)h([Aliases],)g(page)g(71\).)150
-1518 y Fs(--enable-arith-for-comma)o(nd)630 1627 y Ft(Include)20
-b(supp)s(ort)h(for)g(the)i(alternate)f(form)g(of)g(the)g
-Fs(for)f Ft(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)g(the)630
-1737 y(C)30 b(language)h Fs(for)e Ft(statemen)m(t)j(\(see)g(Section)e
-(3.2.4.1)j([Lo)s(oping)c(Constructs],)i(page)g(9\).)150
-1881 y Fs(--enable-array-variables)630 1991 y Ft(Include)g(supp)s(ort)h
-(for)h(one-dimensional)e(arra)m(y)i(shell)f(v)-5 b(ariables)31
-b(\(see)j(Section)f(6.7)i([Ar-)630 2101 y(ra)m(ys],)c(page)g(72\).)150
-2245 y Fs(--enable-bang-history)630 2355 y Ft(Include)k(supp)s(ort)g
-(for)h Fs(csh)p Ft(-lik)m(e)f(history)h(substitution)e(\(see)j(Section)
-f(9.3)i([History)e(In-)630 2464 y(teraction],)c(page)f(111\).)150
-2609 y Fs(--enable-brace-expansion)630 2719 y Ft(Include)39
-b Fs(csh)p Ft(-lik)m(e)g(brace)h(expansion)f(\()i Fs(b{a,b}c)2445
-2715 y Fp(7!)2576 2719 y Fs(bac)30 b(bbc)39 b Ft(\).)71
-b(See)40 b(Section)g(3.5.1)630 2828 y([Brace)32 b(Expansion],)d(page)i
-(17,)h(for)e(a)g(complete)h(description.)150 2973 y Fs
-(--enable-command-timing)630 3082 y Ft(Include)42 b(supp)s(ort)g(for)h
-(recognizing)g Fs(time)g Ft(as)g(a)h(reserv)m(ed)g(w)m(ord)f(and)g(for)
-h(displa)m(ying)630 3192 y(timing)35 b(statistics)h(for)g(the)g(pip)s
-(eline)d(follo)m(wing)i Fs(time)g Ft(\(see)i(Section)f(3.2.2)i([Pip)s
-(elines],)630 3302 y(page)24 b(8\).)39 b(This)22 b(allo)m(ws)g(pip)s
-(elines)e(as)k(w)m(ell)e(as)i(shell)d(builtins)f(and)j(functions)f(to)i
-(b)s(e)e(timed.)150 3446 y Fs(--enable-cond-command)630
-3556 y Ft(Include)32 b(supp)s(ort)g(for)i(the)g Fs([[)f
-Ft(conditional)f(command.)51 b(\(see)34 b(Section)g(3.2.4.2)i([Condi-)
-630 3665 y(tional)30 b(Constructs],)g(page)h(10\).)150
-3810 y Fs(--enable-cond-regexp)630 3920 y Ft(Include)e(supp)s(ort)g
-(for)i(matc)m(hing)g(POSIX)e(regular)h(expressions)g(using)f(the)i(`)p
-Fs(=~)p Ft(')g(binary)630 4029 y(op)s(erator)25 b(in)e(the)i
-Fs([[)f Ft(conditional)e(command.)39 b(\(see)25 b(Section)g(3.2.4.2)i
-([Conditional)22 b(Con-)630 4139 y(structs],)31 b(page)g(10\).)150
-4284 y Fs(--enable-directory-stack)630 4393 y Ft(Include)h(supp)s(ort)h
-(for)h(a)g Fs(csh)p Ft(-lik)m(e)f(directory)g(stac)m(k)j(and)d(the)i
+TeXDict begin 119 124 bop 150 -116 a Ft(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(119)150 299 y Fs(--enable-static-link)630
+408 y Ft(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 Fs(gcc)g Ft(is)g(b)s(eing)g(used.)61
+b(This)37 b(could)h(b)s(e)630 518 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 663
+y(The)f(`)p Fs(minimal-config)p Ft(')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
+772 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 Fs(enable-)p Fj(feature)11
+b Ft('.)275 899 y(All)37 b(of)g(the)f(follo)m(wing)i(options)f(except)h
+(for)e(`)p Fs(disabled-builtins)p Ft(')d(and)j(`)p Fs(xpg-echo-default)
+p Ft(')150 1009 y(are)26 b(enabled)g(b)m(y)g(default,)h(unless)f(the)g
+(op)s(erating)g(system)g(do)s(es)g(not)g(pro)m(vide)g(the)g(necessary)g
+(supp)s(ort.)150 1154 y Fs(--enable-alias)630 1263 y
+Ft(Allo)m(w)41 b(alias)g(expansion)f(and)f(include)g(the)h
+Fs(alias)f Ft(and)g Fs(unalias)e Ft(builtins)j(\(see)g(Sec-)630
+1373 y(tion)31 b(6.6)g([Aliases],)i(page)e(71\).)150
+1518 y Fs(--enable-arith-for-comma)o(nd)630 1627 y Ft(Include)21
+b(supp)s(ort)g(for)g(the)i(alternate)g(form)f(of)g(the)g
+Fs(for)f Ft(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)i(the)630
+1737 y(C)30 b(language)i Fs(for)d Ft(statemen)m(t)j(\(see)g(Section)f
+(3.2.4.1)i([Lo)s(oping)d(Constructs],)h(page)g(9\).)150
+1881 y Fs(--enable-array-variables)630 1991 y Ft(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 2101 y(ra)m(ys],)c(page)g(72\).)150
+2245 y Fs(--enable-bang-history)630 2355 y Ft(Include)36
+b(supp)s(ort)f(for)h Fs(csh)p Ft(-lik)m(e)h(history)g(substitution)f
+(\(see)h(Section)g(9.3)h([History)f(In-)630 2464 y(teraction],)c(page)e
+(111\).)150 2609 y Fs(--enable-brace-expansion)630 2719
+y Ft(Include)40 b Fs(csh)p Ft(-lik)m(e)h(brace)f(expansion)g(\()h
+Fs(b{a,b}c)2445 2715 y Fp(7!)2576 2719 y Fs(bac)30 b(bbc)39
+b Ft(\).)71 b(See)40 b(Section)h(3.5.1)630 2828 y([Brace)32
+b(Expansion],)e(page)h(17,)h(for)e(a)g(complete)i(description.)150
+2973 y Fs(--enable-command-timing)630 3082 y Ft(Include)43
+b(supp)s(ort)f(for)h(recognizing)i Fs(time)e Ft(as)g(a)h(reserv)m(ed)g
+(w)m(ord)f(and)g(for)h(displa)m(ying)630 3192 y(timing)37
+b(statistics)h(for)e(the)g(pip)s(eline)g(follo)m(wing)i
+Fs(time)d Ft(\(see)i(Section)g(3.2.2)h([Pip)s(elines],)630
+3302 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 3446 y Fs(--enable-cond-command)630 3556 y Ft(Include)33
+b(supp)s(ort)f(for)i(the)g Fs([[)f Ft(conditional)i(command.)51
+b(\(see)34 b(Section)h(3.2.4.2)h([Condi-)630 3665 y(tional)c
+(Constructs],)e(page)h(10\).)150 3810 y Fs(--enable-cond-regexp)630
+3920 y Ft(Include)f(supp)s(ort)f(for)i(matc)m(hing)h(POSIX)d(regular)i
+(expressions)g(using)f(the)h(`)p Fs(=~)p Ft(')g(binary)630
+4029 y(op)s(erator)25 b(in)f(the)h Fs([[)f Ft(conditional)h(command.)39
+b(\(see)25 b(Section)h(3.2.4.2)h([Conditional)e(Con-)630
+4139 y(structs],)31 b(page)g(10\).)150 4284 y Fs
+(--enable-directory-stack)630 4393 y Ft(Include)i(supp)s(ort)g(for)h(a)
+g Fs(csh)p Ft(-lik)m(e)h(directory)f(stac)m(k)i(and)d(the)i
Fs(pushd)p Ft(,)f Fs(popd)p Ft(,)g(and)f Fs(dirs)630
-4503 y Ft(builtins)27 b(\(see)k(Section)f(6.8)i([The)e(Directory)h
-(Stac)m(k],)h(page)f(73\).)150 4647 y Fs(--enable-disabled-builti)o(ns)
-630 4757 y Ft(Allo)m(w)38 b(builtin)d(commands)j(to)h(b)s(e)f(in)m(v)m
-(ok)m(ed)h(via)f(`)p Fs(builtin)29 b(xxx)p Ft(')37 b(ev)m(en)j(after)f
-Fs(xxx)e Ft(has)630 4867 y(b)s(een)31 b(disabled)e(using)h(`)p
-Fs(enable)e(-n)i(xxx)p Ft('.)43 b(See)32 b(Section)f(4.2)i([Bash)e
-(Builtins],)f(page)i(39,)630 4976 y(for)e(details)g(of)g(the)h
-Fs(builtin)d Ft(and)i Fs(enable)e Ft(builtin)f(commands.)150
-5121 y Fs(--enable-dparen-arithmet)o(ic)630 5230 y Ft(Include)41
-b(supp)s(ort)g(for)h(the)h Fs(\(\(...)o(\)\))f Ft(command)g(\(see)i
-(Section)e(3.2.4.2)j([Conditional)630 5340 y(Constructs],)30
-b(page)h(10\).)p eop
+4503 y Ft(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m
+(k],)g(page)f(73\).)150 4647 y Fs(--enable-disabled-builti)o(ns)630
+4757 y Ft(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 Fs(builtin)29 b(xxx)p Ft(')37 b(ev)m(en)j(after)f
+Fs(xxx)e Ft(has)630 4867 y(b)s(een)31 b(disabled)g(using)g(`)p
+Fs(enable)d(-n)i(xxx)p Ft('.)43 b(See)32 b(Section)g(4.2)h([Bash)e
+(Builtins],)i(page)f(39,)630 4976 y(for)e(details)i(of)e(the)h
+Fs(builtin)d Ft(and)i Fs(enable)e Ft(builtin)i(commands.)150
+5121 y Fs(--enable-dparen-arithmet)o(ic)630 5230 y Ft(Include)42
+b(supp)s(ort)f(for)h(the)h Fs(\(\(...)o(\)\))f Ft(command)g(\(see)i
+(Section)f(3.2.4.2)i([Conditional)630 5340 y(Constructs],)30
+b(page)h(10\).)p eop end
%%Page: 120 126
-120 125 bop 150 -116 a Ft(120)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fs(--enable-extended-glob)630 408 y Ft(Include)39
-b(supp)s(ort)f(for)i(the)h(extended)f(pattern)h(matc)m(hing)f(features)
-h(describ)s(ed)d(ab)s(o)m(v)m(e)630 518 y(under)29 b(Section)h(3.5.8.1)
-j([P)m(attern)e(Matc)m(hing],)h(page)f(23.)150 682 y
-Fs(--enable-help-builtin)630 792 y Ft(Include)23 b(the)i
-Fs(help)f Ft(builtin,)e(whic)m(h)i(displa)m(ys)e(help)i(on)g(shell)f
-(builtins)e(and)k(v)-5 b(ariables)23 b(\(see)630 902
-y(Section)30 b(4.2)i([Bash)e(Builtins],)f(page)i(39\).)150
-1066 y Fs(--enable-history)630 1176 y Ft(Include)d(command)h(history)g
-(and)g(the)h Fs(fc)f Ft(and)g Fs(history)e Ft(builtin)g(commands)i
-(\(see)h(Sec-)630 1285 y(tion)g(9.1)h([Bash)g(History)f(F)-8
-b(acilities],)30 b(page)h(109\).)150 1450 y Fs(--enable-job-control)630
-1559 y Ft(This)d(enables)i(the)g(job)g(con)m(trol)g(features)h(\(see)g
-(Chapter)f(7)g([Job)g(Con)m(trol],)g(page)h(79\),)h(if)630
-1669 y(the)f(op)s(erating)e(system)i(supp)s(orts)d(them.)150
-1833 y Fs(--enable-multibyte)630 1943 y Ft(This)g(enables)i(supp)s(ort)
-e(for)i(m)m(ultib)m(yte)f(c)m(haracters)i(if)e(the)h(op)s(erating)g
-(system)g(pro)m(vides)630 2052 y(the)h(necessary)f(supp)s(ort.)150
-2217 y Fs(--enable-net-redirection)o(s)630 2326 y Ft(This)20
-b(enables)h(the)h(sp)s(ecial)f(handling)e(of)j(\014lenames)f(of)h(the)g
-(form)f Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630
-2436 y Ft(and)29 b Fs(/dev/udp/)p Fj(host)11 b Fs(/)p
-Fj(port)34 b Ft(when)28 b(used)g(in)g(redirections)g(\(see)i(Section)f
-(3.6)h([Redirec-)630 2545 y(tions],)g(page)h(24\).)150
-2710 y Fs(--enable-process-substit)o(utio)o(n)630 2819
-y Ft(This)48 b(enables)i(pro)s(cess)g(substitution)e(\(see)j(Section)f
-(3.5.6)i([Pro)s(cess)e(Substitution],)630 2929 y(page)31
-b(22\))h(if)d(the)i(op)s(erating)e(system)i(pro)m(vides)e(the)i
-(necessary)g(supp)s(ort.)150 3093 y Fs(--enable-prompt-string-d)o(ecod)
-o(ing)630 3203 y Ft(T)-8 b(urn)46 b(on)h(the)h(in)m(terpretation)e(of)i
-(a)g(n)m(um)m(b)s(er)e(of)h(bac)m(kslash-escap)s(ed)g(c)m(haracters)i
-(in)630 3313 y(the)39 b Fs($PS1)p Ft(,)g Fs($PS2)p Ft(,)h
-Fs($PS3)p Ft(,)f(and)f Fs($PS4)f Ft(prompt)h(strings.)63
-b(See)39 b(Section)f(6.9)i([Prin)m(ting)d(a)630 3422
-y(Prompt],)30 b(page)h(75,)h(for)e(a)h(complete)g(list)e(of)h(prompt)g
-(string)f(escap)s(e)i(sequences.)150 3587 y Fs(--enable-progcomp)630
-3696 y Ft(Enable)c(the)h(programmable)f(completion)h(facilities)e
-(\(see)j(Section)f(8.6)h([Programmable)630 3806 y(Completion],)g(page)j
-(103\).)42 b(If)30 b(Readline)f(is)g(not)i(enabled,)e(this)h(option)g
-(has)g(no)g(e\013ect.)150 3970 y Fs(--enable-readline)630
-4080 y Ft(Include)d(supp)s(ort)g(for)h(command-line)f(editing)g(and)h
-(history)f(with)g(the)i(Bash)g(v)m(ersion)f(of)630 4189
-y(the)j(Readline)e(library)f(\(see)j(Chapter)f(8)g([Command)g(Line)f
-(Editing],)g(page)i(83\).)150 4354 y Fs(--enable-restricted)630
-4463 y Ft(Include)40 b(supp)s(ort)g(for)i(a)g Fq(restricted)f(shell)p
-Ft(.)73 b(If)42 b(this)e(is)h(enabled,)j(Bash,)h(when)c(called)630
-4573 y(as)f Fs(rbash)p Ft(,)h(en)m(ters)f(a)g(restricted)g(mo)s(de.)68
-b(See)40 b(Section)g(6.10)h([The)f(Restricted)g(Shell],)630
-4682 y(page)31 b(76,)h(for)e(a)g(description)f(of)h(restricted)g(mo)s
-(de.)150 4847 y Fs(--enable-select)630 4956 y Ft(Include)k(the)h
-Fs(select)f Ft(builtin,)f(whic)m(h)h(allo)m(ws)h(the)h(generation)f(of)
-h(simple)d(men)m(us)i(\(see)630 5066 y(Section)30 b(3.2.4.2)j
-([Conditional)28 b(Constructs],)j(page)g(10\).)150 5230
+TeXDict begin 120 125 bop 150 -116 a Ft(120)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fs(--enable-extended-glob)630
+408 y Ft(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
+518 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i
+(page)e(23.)150 682 y Fs(--enable-help-builtin)630 792
+y Ft(Include)24 b(the)h Fs(help)f Ft(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 902 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f(39\).)
+150 1066 y Fs(--enable-history)630 1176 y Ft(Include)e(command)g
+(history)h(and)f(the)h Fs(fc)f Ft(and)g Fs(history)e
+Ft(builtin)j(commands)f(\(see)h(Sec-)630 1285 y(tion)h(9.1)g([Bash)g
+(History)g(F)-8 b(acilities],)34 b(page)d(109\).)150
+1450 y Fs(--enable-job-control)630 1559 y Ft(This)e(enables)i(the)f
+(job)g(con)m(trol)h(features)g(\(see)g(Chapter)f(7)g([Job)g(Con)m
+(trol],)h(page)g(79\),)h(if)630 1669 y(the)f(op)s(erating)f(system)h
+(supp)s(orts)d(them.)150 1833 y Fs(--enable-multibyte)630
+1943 y Ft(This)h(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
+2052 y(the)h(necessary)f(supp)s(ort.)150 2217 y Fs
+(--enable-net-redirection)o(s)630 2326 y Ft(This)21 b(enables)h(the)g
+(sp)s(ecial)h(handling)e(of)h(\014lenames)g(of)g(the)g(form)f
+Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630 2436 y
+Ft(and)29 b Fs(/dev/udp/)p Fj(host)11 b Fs(/)p Fj(port)34
+b Ft(when)28 b(used)g(in)h(redirections)h(\(see)g(Section)g(3.6)g
+([Redirec-)630 2545 y(tions],)h(page)g(24\).)150 2710
+y Fs(--enable-process-substit)o(utio)o(n)630 2819 y Ft(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 2929 y(page)31 b(22\))h(if)e(the)h(op)s
+(erating)f(system)h(pro)m(vides)f(the)h(necessary)g(supp)s(ort.)150
+3093 y Fs(--enable-prompt-string-d)o(ecod)o(ing)630 3203
+y Ft(T)-8 b(urn)46 b(on)h(the)h(in)m(terpretation)g(of)g(a)g(n)m(um)m
+(b)s(er)e(of)h(bac)m(kslash-escap)s(ed)h(c)m(haracters)h(in)630
+3313 y(the)39 b Fs($PS1)p Ft(,)g Fs($PS2)p Ft(,)h Fs($PS3)p
+Ft(,)f(and)f Fs($PS4)f Ft(prompt)h(strings.)64 b(See)39
+b(Section)g(6.9)h([Prin)m(ting)f(a)630 3422 y(Prompt],)30
+b(page)h(75,)h(for)e(a)h(complete)h(list)f(of)f(prompt)g(string)g
+(escap)s(e)h(sequences.)150 3587 y Fs(--enable-progcomp)630
+3696 y Ft(Enable)d(the)g(programmable)g(completion)i(facilities)g
+(\(see)f(Section)g(8.6)g([Programmable)630 3806 y(Completion],)i(page)h
+(103\).)42 b(If)30 b(Readline)h(is)f(not)h(enabled,)f(this)h(option)g
+(has)f(no)g(e\013ect.)150 3970 y Fs(--enable-readline)630
+4080 y Ft(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 4189
+y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)g([Command)g(Line)g
+(Editing],)h(page)g(83\).)150 4354 y Fs(--enable-restricted)630
+4463 y Ft(Include)41 b(supp)s(ort)f(for)i(a)g Fq(restricted)g(shell)p
+Ft(.)75 b(If)42 b(this)f(is)h(enabled,)j(Bash,)g(when)c(called)630
+4573 y(as)f Fs(rbash)p Ft(,)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
+4682 y(page)31 b(76,)h(for)e(a)g(description)h(of)f(restricted)h(mo)s
+(de.)150 4847 y Fs(--enable-select)630 4956 y Ft(Include)k(the)g
+Fs(select)f Ft(builtin,)i(whic)m(h)f(allo)m(ws)i(the)f(generation)g(of)
+g(simple)f(men)m(us)g(\(see)630 5066 y(Section)c(3.2.4.2)i
+([Conditional)e(Constructs],)g(page)g(10\).)150 5230
y Fs(--enable-usg-echo-defaul)o(t)630 5340 y Ft(A)f(synon)m(ym)g(for)g
-Fs(--enable-xpg-echo-default)p Ft(.)p eop
+Fs(--enable-xpg-echo-default)p Ft(.)p eop end
%%Page: 121 127
-121 126 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28
-b(Bash)2356 b(121)150 299 y Fs(--enable-xpg-echo-defaul)o(t)630
-408 y Ft(Mak)m(e)26 b(the)f Fs(echo)e Ft(builtin)f(expand)i(bac)m
-(kslash-escap)s(ed)g(c)m(haracters)i(b)m(y)f(default,)g(without)630
-518 y(requiring)39 b(the)i(`)p Fs(-e)p Ft(')g(option.)72
-b(This)40 b(sets)h(the)g(default)g(v)-5 b(alue)40 b(of)i(the)f
-Fs(xpg_echo)e Ft(shell)630 628 y(option)25 b(to)h Fs(on)p
-Ft(,)g(whic)m(h)f(mak)m(es)h(the)g(Bash)g Fs(echo)e Ft(b)s(eha)m(v)m(e)
-i(more)g(lik)m(e)f(the)h(v)m(ersion)f(sp)s(eci\014ed)630
-737 y(in)40 b(the)i(Single)e(Unix)g(Sp)s(eci\014cation,)j(v)m(ersion)f
-(2.)74 b(See)42 b(Section)f(4.2)i([Bash)f(Builtins],)630
-847 y(page)31 b(39,)h(for)e(a)g(description)f(of)h(the)h(escap)s(e)g
-(sequences)f(that)h Fs(echo)f Ft(recognizes.)275 1006
-y(The)23 b(\014le)h(`)p Fs(config-top.h)p Ft(')d(con)m(tains)k(C)f
-(Prepro)s(cessor)g(`)p Fs(#define)p Ft(')e(statemen)m(ts)k(for)f
-(options)e(whic)m(h)150 1116 y(are)35 b(not)g(settable)h(from)e
+TeXDict begin 121 126 bop 150 -116 a Ft(Chapter)30 b(10:)41
+b(Installing)31 b(Bash)2356 b(121)150 299 y Fs
+(--enable-xpg-echo-defaul)o(t)630 408 y Ft(Mak)m(e)26
+b(the)f Fs(echo)e Ft(builtin)i(expand)f(bac)m(kslash-escap)s(ed)h(c)m
+(haracters)h(b)m(y)f(default,)h(without)630 518 y(requiring)41
+b(the)g(`)p Fs(-e)p Ft(')g(option.)73 b(This)41 b(sets)g(the)g(default)
+h(v)-5 b(alue)41 b(of)h(the)f Fs(xpg_echo)e Ft(shell)630
+628 y(option)26 b(to)g Fs(on)p Ft(,)g(whic)m(h)g(mak)m(es)g(the)g(Bash)
+g Fs(echo)e Ft(b)s(eha)m(v)m(e)i(more)g(lik)m(e)h(the)f(v)m(ersion)g
+(sp)s(eci\014ed)630 737 y(in)41 b(the)h(Single)g(Unix)f(Sp)s
+(eci\014cation,)k(v)m(ersion)e(2.)74 b(See)42 b(Section)g(4.2)h([Bash)f
+(Builtins],)630 847 y(page)31 b(39,)h(for)e(a)g(description)h(of)f(the)
+h(escap)s(e)g(sequences)f(that)h Fs(echo)f Ft(recognizes.)275
+1006 y(The)23 b(\014le)i(`)p Fs(config-top.h)p Ft(')c(con)m(tains)26
+b(C)e(Prepro)s(cessor)g(`)p Fs(#define)p Ft(')e(statemen)m(ts)k(for)f
+(options)f(whic)m(h)150 1116 y(are)35 b(not)g(settable)i(from)d
Fs(configure)p Ft(.)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 1225
-y(the)h(consequences)g(if)e(y)m(ou)i(do.)55 b(Read)36
-b(the)g(commen)m(ts)g(asso)s(ciated)g(with)e(eac)m(h)j(de\014nition)c
-(for)i(more)150 1335 y(information)29 b(ab)s(out)h(its)g(e\013ect.)p
-eop
+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 1335 y(information)c(ab)s(out)f(its)h(e\013ect.)p
+eop end
%%Page: 122 128
-122 127 bop 150 -116 a Ft(122)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 122 127 bop 150 -116 a Ft(122)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 123 129
-123 128 bop 150 -116 a Ft(App)s(endix)28 b(A:)i(Rep)s(orting)g(Bugs)
-2299 b(123)150 299 y Fo(App)t(endix)53 b(A)121 b(Rep)t(orting)53
-b(Bugs)275 533 y Ft(Please)34 b(rep)s(ort)f(all)g(bugs)h(y)m(ou)g
-(\014nd)f(in)g(Bash.)52 b(But)34 b(\014rst,)h(y)m(ou)f(should)e(mak)m
-(e)j(sure)f(that)g(it)g(really)150 643 y(is)h(a)h(bug,)h(and)e(that)h
-(it)g(app)s(ears)f(in)f(the)i(latest)h(v)m(ersion)e(of)h(Bash.)57
-b(The)35 b(latest)i(v)m(ersion)e(of)h(Bash)g(is)150 752
-y(alw)m(a)m(ys)31 b(a)m(v)-5 b(ailable)30 b(for)g(FTP)g(from)g
-Fs(ftp://ftp.gnu.org/pub/ba)o(sh/)o Ft(.)275 887 y(Once)41
-b(y)m(ou)g(ha)m(v)m(e)h(determined)e(that)i(a)f(bug)g(actually)f
-(exists,)k(use)d(the)g Fs(bashbug)e Ft(command)i(to)150
-996 y(submit)24 b(a)i(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)f(that)h(as)g
-(w)m(ell!)38 b(Suggestions)150 1106 y(and)20 b(`philosophical')f(bug)h
-(rep)s(orts)g(ma)m(y)i(b)s(e)f(mailed)e(to)j Fs(bug-bash@gnu.org)17
-b Ft(or)k(p)s(osted)f(to)i(the)f(Usenet)150 1215 y(newsgroup)29
-b Fs(gnu.bash.bug)p Ft(.)275 1350 y(All)g(bug)g(rep)s(orts)h(should)e
-(include:)225 1484 y Fp(\017)60 b Ft(The)30 b(v)m(ersion)g(n)m(um)m(b)s
-(er)f(of)h(Bash.)225 1619 y Fp(\017)60 b Ft(The)30 b(hardw)m(are)g(and)
-g(op)s(erating)f(system.)225 1753 y Fp(\017)60 b Ft(The)30
-b(compiler)f(used)g(to)i(compile)f(Bash.)225 1888 y Fp(\017)60
-b Ft(A)30 b(description)f(of)h(the)h(bug)f(b)s(eha)m(viour.)225
-2022 y Fp(\017)60 b Ft(A)30 b(short)h(script)e(or)h(`recip)s(e')g(whic)
-m(h)f(exercises)i(the)f(bug)g(and)g(ma)m(y)h(b)s(e)f(used)f(to)i(repro)
-s(duce)e(it.)150 2182 y Fs(bashbug)d Ft(inserts)h(the)i(\014rst)f
-(three)g(items)g(automatically)g(in)m(to)h(the)f(template)h(it)f(pro)m
-(vides)f(for)h(\014ling)f(a)150 2291 y(bug)j(rep)s(ort.)275
-2426 y(Please)g(send)g(all)f(rep)s(orts)h(concerning)f(this)h(man)m
-(ual)f(to)i Fs(chet@po.CWRU.Edu)p Ft(.)p eop
+TeXDict begin 123 128 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Rep)s(orting)h(Bugs)2299 b(123)150 299 y Fo(App)t(endix)52
+b(A)121 b(Rep)t(orting)52 b(Bugs)275 533 y Ft(Please)35
+b(rep)s(ort)e(all)i(bugs)f(y)m(ou)g(\014nd)f(in)h(Bash.)52
+b(But)34 b(\014rst,)h(y)m(ou)f(should)f(mak)m(e)i(sure)f(that)g(it)h
+(really)150 643 y(is)h(a)g(bug,)h(and)e(that)h(it)h(app)s(ears)e(in)g
+(the)h(latest)i(v)m(ersion)e(of)g(Bash.)57 b(The)35 b(latest)j(v)m
+(ersion)e(of)g(Bash)g(is)150 752 y(alw)m(a)m(ys)c(a)m(v)-5
+b(ailable)33 b(for)d(FTP)g(from)g Fs(ftp://ftp.gnu.org/pub/ba)o(sh/)o
+Ft(.)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 Fs(bashbug)e
+Ft(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)20 b(`philosophical')j(bug)d(rep)s(orts)g(ma)m(y)i(b)s(e)f
+(mailed)g(to)h Fs(bug-bash@gnu.org)17 b Ft(or)k(p)s(osted)f(to)i(the)f
+(Usenet)150 1215 y(newsgroup)29 b Fs(gnu.bash.bug)p Ft(.)275
+1350 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225
+1484 y Fp(\017)60 b Ft(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h
+(Bash.)225 1619 y Fp(\017)60 b Ft(The)30 b(hardw)m(are)g(and)g(op)s
+(erating)g(system.)225 1753 y Fp(\017)60 b Ft(The)30
+b(compiler)h(used)e(to)i(compile)h(Bash.)225 1888 y Fp(\017)60
+b Ft(A)30 b(description)h(of)f(the)h(bug)f(b)s(eha)m(viour.)225
+2022 y Fp(\017)60 b Ft(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 Fs(bashbug)d Ft(inserts)i(the)h(\014rst)f
+(three)g(items)h(automatically)i(in)m(to)f(the)e(template)i(it)f(pro)m
+(vides)f(for)g(\014ling)h(a)150 2291 y(bug)h(rep)s(ort.)275
+2426 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m
+(ual)f(to)h Fs(chet@po.CWRU.Edu)p Ft(.)p eop end
%%Page: 124 130
-124 129 bop 150 -116 a Ft(124)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 124 129 bop 150 -116 a Ft(124)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 125 131
-125 130 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5
-b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256
-b(125)150 141 y Fo(App)t(endix)53 b(B)128 b(Ma)9 b(jor)54
-b(Di\013erences)e(F)-13 b(rom)53 b(The)g(Bourne)1135
-299 y(Shell)275 524 y Ft(Bash)25 b(implemen)m(ts)e(essen)m(tially)h
-(the)i(same)f(grammar,)i(parameter)e(and)g(v)-5 b(ariable)24
-b(expansion,)h(redi-)150 633 y(rection,)j(and)e(quoting)g(as)h(the)h
-(Bourne)e(Shell.)38 b(Bash)27 b(uses)f(the)h Fl(posix)f
-Ft(1003.2)k(standard)c(as)h(the)g(sp)s(ec-)150 743 y(i\014cation)k(of)g
-(ho)m(w)h(these)g(features)g(are)g(to)g(b)s(e)f(implemen)m(ted.)43
-b(There)31 b(are)h(some)g(di\013erences)f(b)s(et)m(w)m(een)150
-853 y(the)h(traditional)e(Bourne)h(shell)e(and)i(Bash;)i(this)d
-(section)i(quic)m(kly)e(details)h(the)g(di\013erences)g(of)h(signif-)
-150 962 y(icance.)51 b(A)34 b(n)m(um)m(b)s(er)e(of)i(these)h
-(di\013erences)e(are)h(explained)e(in)g(greater)j(depth)e(in)f
-(previous)h(sections.)150 1072 y(This)c(section)h(uses)g(the)h(v)m
-(ersion)e(of)i Fs(sh)f Ft(included)d(in)i(SVR4.2)j(as)e(the)h(baseline)
-e(reference.)225 1204 y Fp(\017)60 b Ft(Bash)32 b(is)g
-Fl(posix)p Ft(-conforman)m(t,)h(ev)m(en)g(where)f(the)g
-Fl(posix)g Ft(sp)s(eci\014cation)f(di\013ers)g(from)h(traditional)330
-1314 y Fs(sh)e Ft(b)s(eha)m(vior)f(\(see)j(Section)e(6.11)i([Bash)e
-(POSIX)g(Mo)s(de],)h(page)g(76\).)225 1447 y Fp(\017)60
-b Ft(Bash)26 b(has)g(m)m(ulti-c)m(haracter)g(in)m(v)m(o)s(cation)g
-(options)g(\(see)g(Section)g(6.1)h([In)m(v)m(oking)f(Bash],)i(page)e
-(63\).)225 1579 y Fp(\017)60 b Ft(Bash)28 b(has)g(command-line)f
-(editing)f(\(see)j(Chapter)f(8)g([Command)f(Line)g(Editing],)h(page)g
-(83\))i(and)330 1689 y(the)h Fs(bind)e Ft(builtin.)225
-1822 y Fp(\017)60 b Ft(Bash)46 b(pro)m(vides)f(a)h(programmable)f(w)m
-(ord)g(completion)g(mec)m(hanism)g(\(see)i(Section)f(8.6)h([Pro-)330
-1931 y(grammable)20 b(Completion],)h(page)g(103\),)k(and)19
-b(t)m(w)m(o)j(builtin)17 b(commands,)22 b Fs(complete)c
-Ft(and)i Fs(compgen)p Ft(,)330 2041 y(to)31 b(manipulate)e(it.)225
-2173 y Fp(\017)60 b Ft(Bash)26 b(has)f(command)h(history)e(\(see)j
-(Section)e(9.1)i([Bash)f(History)g(F)-8 b(acilities],)26
-b(page)g(109\))i(and)d(the)330 2283 y Fs(history)k Ft(and)h
-Fs(fc)g Ft(builtins)d(to)k(manipulate)e(it.)41 b(The)30
-b(Bash)h(history)f(list)f(main)m(tains)g(timestamp)330
-2393 y(information)g(and)g(uses)h(the)h(v)-5 b(alue)30
-b(of)g(the)h Fs(HISTTIMEFORMAT)26 b Ft(v)-5 b(ariable)30
-b(to)h(displa)m(y)d(it.)225 2525 y Fp(\017)60 b Ft(Bash)48
-b(implemen)m(ts)f Fs(csh)p Ft(-lik)m(e)g(history)g(expansion)g(\(see)i
-(Section)f(9.3)i([History)e(In)m(teraction],)330 2635
+TeXDict begin 125 130 bop 150 -116 a Ft(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(125)150 141 y Fo(App)t(endix)52
+b(B)128 b(Ma)9 b(jor)54 b(Di\013erences)d(F)-13 b(rom)54
+b(The)f(Bourne)1135 299 y(Shell)275 524 y Ft(Bash)25
+b(implemen)m(ts)g(essen)m(tially)i(the)f(same)f(grammar,)i(parameter)e
+(and)g(v)-5 b(ariable)26 b(expansion,)g(redi-)150 633
+y(rection,)j(and)d(quoting)h(as)g(the)h(Bourne)e(Shell.)40
+b(Bash)27 b(uses)f(the)h Fl(posix)f Ft(1003.2)k(standard)c(as)h(the)g
+(sp)s(ec-)150 743 y(i\014cation)33 b(of)e(ho)m(w)h(these)g(features)g
+(are)g(to)g(b)s(e)f(implemen)m(ted.)45 b(There)31 b(are)h(some)g
+(di\013erences)g(b)s(et)m(w)m(een)150 853 y(the)g(traditional)h(Bourne)
+e(shell)g(and)g(Bash;)i(this)e(section)i(quic)m(kly)f(details)h(the)e
+(di\013erences)h(of)g(signif-)150 962 y(icance.)52 b(A)34
+b(n)m(um)m(b)s(er)e(of)i(these)h(di\013erences)f(are)g(explained)g(in)f
+(greater)i(depth)e(in)g(previous)h(sections.)150 1072
+y(This)c(section)h(uses)f(the)h(v)m(ersion)f(of)h Fs(sh)f
+Ft(included)f(in)h(SVR4.2)i(as)e(the)h(baseline)g(reference.)225
+1204 y Fp(\017)60 b Ft(Bash)32 b(is)h Fl(posix)p Ft(-conforman)m(t,)g
+(ev)m(en)g(where)f(the)g Fl(posix)g Ft(sp)s(eci\014cation)h(di\013ers)f
+(from)g(traditional)330 1314 y Fs(sh)e Ft(b)s(eha)m(vior)g(\(see)i
+(Section)f(6.11)h([Bash)e(POSIX)g(Mo)s(de],)h(page)g(76\).)225
+1447 y Fp(\017)60 b Ft(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(63\).)225 1579 y Fp(\017)60 b Ft(Bash)28
+b(has)g(command-line)h(editing)f(\(see)h(Chapter)f(8)g([Command)f(Line)
+h(Editing],)i(page)e(83\))i(and)330 1689 y(the)h Fs(bind)e
+Ft(builtin.)225 1822 y Fp(\017)60 b Ft(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 1931 y(grammable)21 b(Completion],)i(page)e(103\),)k
+(and)19 b(t)m(w)m(o)j(builtin)e(commands,)i Fs(complete)c
+Ft(and)i Fs(compgen)p Ft(,)330 2041 y(to)31 b(manipulate)g(it.)225
+2173 y Fp(\017)60 b Ft(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(109\))i(and)d(the)330 2283 y Fs(history)k Ft(and)h
+Fs(fc)g Ft(builtins)g(to)h(manipulate)g(it.)42 b(The)30
+b(Bash)h(history)g(list)g(main)m(tains)g(timestamp)330
+2393 y(information)g(and)e(uses)h(the)h(v)-5 b(alue)31
+b(of)f(the)h Fs(HISTTIMEFORMAT)26 b Ft(v)-5 b(ariable)32
+b(to)f(displa)m(y)f(it.)225 2525 y Fp(\017)60 b Ft(Bash)48
+b(implemen)m(ts)h Fs(csh)p Ft(-lik)m(e)g(history)f(expansion)g(\(see)h
+(Section)g(9.3)h([History)f(In)m(teraction],)330 2635
y(page)31 b(111\).)225 2768 y Fp(\017)60 b Ft(Bash)33
-b(has)g(one-dimensional)e(arra)m(y)i(v)-5 b(ariables)32
-b(\(see)i(Section)f(6.7)h([Arra)m(ys],)g(page)g(72\),)h(and)e(the)330
-2877 y(appropriate)38 b(v)-5 b(ariable)38 b(expansions)g(and)h
-(assignmen)m(t)g(syn)m(tax)h(to)g(use)f(them.)67 b(Sev)m(eral)39
-b(of)h(the)330 2987 y(Bash)32 b(builtins)c(tak)m(e)34
-b(options)d(to)i(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)f(a)h
-(n)m(um)m(b)s(er)f(of)h(built-in)c(arra)m(y)330 3096
-y(v)-5 b(ariables.)225 3229 y Fp(\017)60 b Ft(The)37
-b Fs($'...)n(')g Ft(quoting)f(syn)m(tax,)k(whic)m(h)c(expands)g(ANSI-C)
-h(bac)m(kslash-escap)s(ed)g(c)m(haracters)h(in)330 3339
-y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g(single)d(quotes,)k(is)d
-(supp)s(orted)g(\(see)i(Section)f(3.1.2.4)i([ANSI-C)e(Quoting],)330
-3448 y(page)31 b(6\).)225 3581 y Fp(\017)60 b Ft(Bash)69
-b(supp)s(orts)e(the)i Fs($"...)n(")g Ft(quoting)f(syn)m(tax)h(to)h(do)e
-(lo)s(cale-sp)s(eci\014c)g(translation)g(of)330 3690
-y(the)d(c)m(haracters)i(b)s(et)m(w)m(een)f(the)f(double)f(quotes.)145
-b(The)65 b(`)p Fs(-D)p Ft(',)74 b(`)p Fs(--dump-strings)p
-Ft(',)d(and)330 3800 y(`)p Fs(--dump-po-strings)p Ft(')27
-b(in)m(v)m(o)s(cation)k(options)f(list)g(the)h(translatable)f(strings)g
-(found)g(in)g(a)h(script)330 3910 y(\(see)g(Section)g(3.1.2.5)h([Lo)s
-(cale)f(T)-8 b(ranslation],)30 b(page)h(7\).)225 4042
-y Fp(\017)60 b Ft(Bash)44 b(implemen)m(ts)e(the)h Fs(!)h
-Ft(k)m(eyw)m(ord)g(to)g(negate)h(the)f(return)e(v)-5
-b(alue)43 b(of)h(a)g(pip)s(eline)c(\(see)k(Sec-)330 4152
-y(tion)32 b(3.2.2)j([Pip)s(elines],)c(page)j(8\).)49
-b(V)-8 b(ery)33 b(useful)e(when)h(an)h Fs(if)f Ft(statemen)m(t)j(needs)
-d(to)i(act)g(only)e(if)330 4261 y(a)f(test)g(fails.)225
+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(72\),)h(and)e(the)330
+2877 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 2987 y(Bash)32 b(builtins)f(tak)m(e)j(options)e(to)h
+(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)g(a)g(n)m(um)m(b)s
+(er)f(of)h(built-in)f(arra)m(y)330 3096 y(v)-5 b(ariables.)225
+3229 y Fp(\017)60 b Ft(The)37 b Fs($'...)n(')g Ft(quoting)g(syn)m(tax,)
+j(whic)m(h)d(expands)f(ANSI-C)h(bac)m(kslash-escap)s(ed)h(c)m
+(haracters)g(in)330 3339 y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g
+(single)f(quotes,)i(is)e(supp)s(orted)f(\(see)i(Section)g(3.1.2.4)h
+([ANSI-C)e(Quoting],)330 3448 y(page)31 b(6\).)225 3581
+y Fp(\017)60 b Ft(Bash)69 b(supp)s(orts)e(the)i Fs($"...)n(")g
+Ft(quoting)g(syn)m(tax)g(to)h(do)e(lo)s(cale-sp)s(eci\014c)j
+(translation)f(of)330 3690 y(the)65 b(c)m(haracters)i(b)s(et)m(w)m(een)
+f(the)f(double)g(quotes.)145 b(The)65 b(`)p Fs(-D)p Ft(',)74
+b(`)p Fs(--dump-strings)p Ft(',)d(and)330 3800 y(`)p
+Fs(--dump-po-strings)p Ft(')27 b(in)m(v)m(o)s(cation)33
+b(options)e(list)h(the)f(translatable)h(strings)f(found)f(in)h(a)g
+(script)330 3910 y(\(see)g(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8
+b(ranslation],)32 b(page)f(7\).)225 4042 y Fp(\017)60
+b Ft(Bash)44 b(implemen)m(ts)g(the)f Fs(!)h Ft(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 4152 y(tion)33 b(3.2.2)i([Pip)s(elines],)f(page)g(8\).)49
+b(V)-8 b(ery)33 b(useful)f(when)g(an)h Fs(if)f Ft(statemen)m(t)j(needs)
+d(to)i(act)g(only)f(if)330 4261 y(a)e(test)g(fails.)225
4394 y Fp(\017)60 b Ft(Bash)34 b(has)g(the)g Fs(time)f
-Ft(reserv)m(ed)h(w)m(ord)g(and)f(command)h(timing)f(\(see)i(Section)f
-(3.2.2)h([Pip)s(elines],)330 4504 y(page)g(8\).)52 b(The)33
-b(displa)m(y)g(of)h(the)g(timing)e(statistics)i(ma)m(y)h(b)s(e)e(con)m
-(trolled)h(with)f(the)h Fs(TIMEFORMAT)330 4613 y Ft(v)-5
-b(ariable.)225 4746 y Fp(\017)60 b Ft(Bash)23 b(implemen)m(ts)e(the)j
+Ft(reserv)m(ed)h(w)m(ord)g(and)f(command)h(timing)h(\(see)g(Section)g
+(3.2.2)g([Pip)s(elines],)330 4504 y(page)g(8\).)52 b(The)33
+b(displa)m(y)i(of)f(the)g(timing)g(statistics)i(ma)m(y)f(b)s(e)e(con)m
+(trolled)j(with)e(the)g Fs(TIMEFORMAT)330 4613 y Ft(v)-5
+b(ariable.)225 4746 y Fp(\017)60 b Ft(Bash)23 b(implemen)m(ts)g(the)h
Fs(for)29 b(\(\()h Fj(expr1)39 b Fs(;)30 b Fj(expr2)40
-b Fs(;)30 b Fj(expr3)39 b Fs(\)\))23 b Ft(arithmetic)f(for)g(command,)j
-(sim-)330 4855 y(ilar)k(to)i(the)g(C)f(language)g(\(see)i(Section)e
-(3.2.4.1)j([Lo)s(oping)c(Constructs],)i(page)g(9\).)225
-4988 y Fp(\017)60 b Ft(Bash)31 b(includes)d(the)i Fs(select)f
-Ft(comp)s(ound)g(command,)i(whic)m(h)e(allo)m(ws)h(the)h(generation)f
-(of)h(simple)330 5098 y(men)m(us)f(\(see)h(Section)f(3.2.4.2)j
-([Conditional)28 b(Constructs],)j(page)g(10\).)225 5230
-y Fp(\017)60 b Ft(Bash)26 b(includes)e(the)j Fs([[)f
-Ft(comp)s(ound)f(command,)i(whic)m(h)e(mak)m(es)i(conditional)e
-(testing)h(part)g(of)h(the)330 5340 y(shell)i(grammar)h(\(see)h
-(Section)f(3.2.4.2)j([Conditional)c(Constructs],)h(page)h(10\).)p
-eop
+b Fs(;)30 b Fj(expr3)39 b Fs(\)\))23 b Ft(arithmetic)h(for)e(command,)j
+(sim-)330 4855 y(ilar)31 b(to)g(the)g(C)f(language)h(\(see)h(Section)f
+(3.2.4.1)i([Lo)s(oping)d(Constructs],)h(page)g(9\).)225
+4988 y Fp(\017)60 b Ft(Bash)31 b(includes)f(the)g Fs(select)f
+Ft(comp)s(ound)g(command,)i(whic)m(h)f(allo)m(ws)i(the)f(generation)g
+(of)g(simple)330 5098 y(men)m(us)f(\(see)h(Section)g(3.2.4.2)i
+([Conditional)e(Constructs],)g(page)g(10\).)225 5230
+y Fp(\017)60 b Ft(Bash)26 b(includes)g(the)h Fs([[)f
+Ft(comp)s(ound)f(command,)i(whic)m(h)f(mak)m(es)h(conditional)h
+(testing)f(part)f(of)h(the)330 5340 y(shell)k(grammar)f(\(see)h
+(Section)g(3.2.4.2)i([Conditional)f(Constructs],)e(page)h(10\).)p
+eop end
%%Page: 126 132
-126 131 bop 150 -116 a Ft(126)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-225 299 y Fp(\017)60 b Ft(Bash)27 b(includes)e(brace)j(expansion)e
-(\(see)i(Section)f(3.5.1)j([Brace)e(Expansion],)f(page)h(17\))h(and)d
-(tilde)330 408 y(expansion)j(\(see)j(Section)e(3.5.2)i([Tilde)d
-(Expansion],)g(page)i(18\).)225 537 y Fp(\017)60 b Ft(Bash)24
-b(implemen)m(ts)f(command)g(aliases)h(and)f(the)i Fs(alias)d
-Ft(and)i Fs(unalias)e Ft(builtins)e(\(see)25 b(Section)f(6.6)330
-647 y([Aliases],)30 b(page)h(71\).)225 776 y Fp(\017)60
-b Ft(Bash)32 b(pro)m(vides)f(shell)f(arithmetic,)i(the)g
-Fs(\(\()g Ft(comp)s(ound)e(command)i(\(see)h(Section)e(3.2.4.2)k([Con-)
-330 886 y(ditional)29 b(Constructs],)h(page)i(10\),)g(and)e(arithmetic)
-g(expansion)f(\(see)j(Section)e(6.5)i([Shell)d(Arith-)330
-995 y(metic],)i(page)g(70\).)225 1124 y Fp(\017)60 b
-Ft(V)-8 b(ariables)29 b(presen)m(t)g(in)f(the)h(shell's)f(initial)e(en)
-m(vironmen)m(t)j(are)h(automatically)f(exp)s(orted)g(to)h(c)m(hild)330
-1234 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)e(do)s(es)i(not)g
-(normally)e(do)i(this)f(unless)g(the)h(v)-5 b(ariables)22
-b(are)h(explicitly)330 1343 y(mark)m(ed)30 b(using)f(the)i
+TeXDict begin 126 131 bop 150 -116 a Ft(126)2527 b(Bash)31
+b(Reference)g(Man)m(ual)225 299 y Fp(\017)60 b Ft(Bash)27
+b(includes)g(brace)h(expansion)f(\(see)h(Section)g(3.5.1)i([Brace)e
+(Expansion],)g(page)g(17\))h(and)d(tilde)330 408 y(expansion)k(\(see)i
+(Section)f(3.5.2)h([Tilde)f(Expansion],)f(page)h(18\).)225
+537 y Fp(\017)60 b Ft(Bash)24 b(implemen)m(ts)h(command)e(aliases)j
+(and)d(the)i Fs(alias)d Ft(and)i Fs(unalias)e Ft(builtins)h(\(see)i
+(Section)g(6.6)330 647 y([Aliases],)32 b(page)f(71\).)225
+776 y Fp(\017)60 b Ft(Bash)32 b(pro)m(vides)g(shell)g(arithmetic,)i
+(the)e Fs(\(\()g Ft(comp)s(ound)e(command)i(\(see)h(Section)f(3.2.4.2)j
+([Con-)330 886 y(ditional)d(Constructs],)e(page)i(10\),)g(and)e
+(arithmetic)i(expansion)e(\(see)i(Section)f(6.5)h([Shell)f(Arith-)330
+995 y(metic],)h(page)f(70\).)225 1124 y Fp(\017)60 b
+Ft(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
+1234 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g
+(normally)g(do)g(this)g(unless)g(the)g(v)-5 b(ariables)24
+b(are)f(explicitly)330 1343 y(mark)m(ed)30 b(using)g(the)h
Fs(export)e Ft(command.)225 1472 y Fp(\017)60 b Ft(Bash)36
-b(includes)e(the)i Fl(posix)f Ft(pattern)h(remo)m(v)-5
-b(al)36 b(`)p Fs(\045)p Ft(',)i(`)p Fs(#)p Ft(',)g(`)p
-Fs(\045\045)p Ft(')e(and)f(`)p Fs(##)p Ft(')h(expansions)f(to)h(remo)m
-(v)m(e)330 1582 y(leading)d(or)h(trailing)e(substrings)g(from)h(v)-5
-b(ariable)33 b(v)-5 b(alues)34 b(\(see)h(Section)f(3.5.3)h([Shell)e(P)m
-(arameter)330 1691 y(Expansion],)c(page)i(18\).)225 1820
-y Fp(\017)60 b Ft(The)46 b(expansion)f Fs(${#xx})p Ft(,)k(whic)m(h)c
-(returns)g(the)i(length)e(of)i Fs(${xx})p Ft(,)i(is)d(supp)s(orted)e
-(\(see)j(Sec-)330 1930 y(tion)30 b(3.5.3)i([Shell)d(P)m(arameter)i
-(Expansion],)e(page)j(18\).)225 2059 y Fp(\017)60 b Ft(The)30
-b(expansion)f Fs(${var:)p Fq(o\013set)r Fs([:)p Fq(length)p
-Fs(]})p Ft(,)g(whic)m(h)g(expands)h(to)h(the)g(substring)d(of)j
-Fs(var)p Ft('s)e(v)-5 b(alue)330 2168 y(of)43 b(length)f
-Fq(length)p Ft(,)k(b)s(eginning)40 b(at)k Fq(o\013set)p
-Ft(,)j(is)42 b(presen)m(t)h(\(see)g(Section)g(3.5.3)i([Shell)c(P)m
-(arameter)330 2278 y(Expansion],)29 b(page)i(18\).)225
-2407 y Fp(\017)60 b Ft(The)21 b(expansion)e Fs(${var/[/])p
+b(includes)g(the)g Fl(posix)f Ft(pattern)h(remo)m(v)-5
+b(al)37 b(`)p Fs(\045)p Ft(',)h(`)p Fs(#)p Ft(',)g(`)p
+Fs(\045\045)p Ft(')e(and)f(`)p Fs(##)p Ft(')h(expansions)g(to)g(remo)m
+(v)m(e)330 1582 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 1691 y(Expansion],)30 b(page)h(18\).)225
+1820 y Fp(\017)60 b Ft(The)46 b(expansion)g Fs(${#xx})p
+Ft(,)j(whic)m(h)d(returns)f(the)i(length)f(of)h Fs(${xx})p
+Ft(,)i(is)e(supp)s(orted)d(\(see)j(Sec-)330 1930 y(tion)31
+b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i(18\).)225
+2059 y Fp(\017)60 b Ft(The)30 b(expansion)g Fs(${var:)p
+Fq(o\013set)r Fs([:)p Fq(length)p Fs(]})p Ft(,)g(whic)m(h)g(expands)g
+(to)h(the)g(substring)e(of)i Fs(var)p Ft('s)e(v)-5 b(alue)330
+2168 y(of)43 b(length)g Fq(length)p Ft(,)k(b)s(eginning)42
+b(at)i Fq(o\013set)p Ft(,)j(is)c(presen)m(t)g(\(see)g(Section)h(3.5.3)h
+([Shell)e(P)m(arameter)330 2278 y(Expansion],)30 b(page)h(18\).)225
+2407 y Fp(\017)60 b Ft(The)21 b(expansion)f Fs(${var/[/])p
Fq(pattern)p Fs([/)p Fq(replacemen)m(t)r Fs(]})p Ft(,)i(whic)m(h)e
-(matc)m(hes)k Fq(pattern)e Ft(and)f(replaces)330 2516
-y(it)28 b(with)e Fq(replacemen)m(t)31 b Ft(in)c(the)h(v)-5
-b(alue)28 b(of)g Fs(var)p Ft(,)g(is)f(a)m(v)-5 b(ailable)28
-b(\(see)h(Section)e(3.5.3)j([Shell)d(P)m(arameter)330
-2626 y(Expansion],)i(page)i(18\).)225 2755 y Fp(\017)60
-b Ft(The)32 b(expansion)f Fs(${!)p Fj(prefix)p Fs(})p
-Fj(*)40 b Ft(expansion,)31 b(whic)m(h)g(expands)h(to)h(the)f(names)g
-(of)h(all)e(shell)f(v)-5 b(ari-)330 2865 y(ables)35 b(whose)h(names)g
-(b)s(egin)f(with)g Fq(pre\014x)p Ft(,)h(is)f(a)m(v)-5
-b(ailable)36 b(\(see)h(Section)f(3.5.3)h([Shell)e(P)m(arameter)330
-2974 y(Expansion],)29 b(page)i(18\).)225 3103 y Fp(\017)60
-b Ft(Bash)22 b(has)f Fq(indirect)h Ft(v)-5 b(ariable)20
-b(expansion)h(using)f Fs(${!word})f Ft(\(see)k(Section)e(3.5.3)j
-([Shell)c(P)m(arameter)330 3213 y(Expansion],)29 b(page)i(18\).)225
-3342 y Fp(\017)60 b Ft(Bash)31 b(can)f(expand)g(p)s(ositional)e
-(parameters)j(b)s(ey)m(ond)e Fs($9)h Ft(using)f Fs(${)p
+(matc)m(hes)j Fq(pattern)e Ft(and)f(replaces)330 2516
+y(it)29 b(with)e Fq(replacemen)m(t)32 b Ft(in)c(the)g(v)-5
+b(alue)29 b(of)f Fs(var)p Ft(,)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
+2626 y(Expansion],)h(page)h(18\).)225 2755 y Fp(\017)60
+b Ft(The)32 b(expansion)g Fs(${!)p Fj(prefix)p Fs(})p
+Fj(*)40 b Ft(expansion,)32 b(whic)m(h)g(expands)g(to)h(the)f(names)g
+(of)h(all)g(shell)f(v)-5 b(ari-)330 2865 y(ables)36 b(whose)g(names)g
+(b)s(egin)g(with)g Fq(pre\014x)p Ft(,)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
+2974 y(Expansion],)30 b(page)h(18\).)225 3103 y Fp(\017)60
+b Ft(Bash)22 b(has)f Fq(indirect)j Ft(v)-5 b(ariable)22
+b(expansion)g(using)f Fs(${!word})e Ft(\(see)k(Section)f(3.5.3)i
+([Shell)e(P)m(arameter)330 3213 y(Expansion],)30 b(page)h(18\).)225
+3342 y Fp(\017)60 b Ft(Bash)31 b(can)f(expand)g(p)s(ositional)h
+(parameters)g(b)s(ey)m(ond)e Fs($9)h Ft(using)g Fs(${)p
Fj(num)11 b Fs(})p Ft(.)225 3471 y Fp(\017)60 b Ft(The)27
-b Fl(posix)g Fs($\(\))g Ft(form)g(of)h(command)g(substitution)d(is)i
-(implemen)m(ted)f(\(see)j(Section)e(3.5.4)j([Com-)330
-3580 y(mand)38 b(Substitution],)i(page)g(21\),)j(and)38
-b(preferred)g(to)i(the)g(Bourne)f(shell's)f Fs(``)g Ft(\(whic)m(h)h(is)
-f(also)330 3690 y(implemen)m(ted)29 b(for)h(bac)m(kw)m(ards)h
+b Fl(posix)g Fs($\(\))g Ft(form)g(of)h(command)g(substitution)f(is)h
+(implemen)m(ted)g(\(see)h(Section)f(3.5.4)i([Com-)330
+3580 y(mand)38 b(Substitution],)k(page)e(21\),)j(and)38
+b(preferred)g(to)i(the)g(Bourne)f(shell's)h Fs(``)e Ft(\(whic)m(h)i(is)
+f(also)330 3690 y(implemen)m(ted)31 b(for)f(bac)m(kw)m(ards)h
(compatibilit)m(y\).)225 3819 y Fp(\017)60 b Ft(Bash)31
-b(has)f(pro)s(cess)g(substitution)e(\(see)j(Section)f(3.5.6)i([Pro)s
-(cess)f(Substitution],)d(page)j(22\).)225 3948 y Fp(\017)60
-b Ft(Bash)55 b(automatically)g(assigns)g(v)-5 b(ariables)53
-b(that)j(pro)m(vide)e(information)g(ab)s(out)h(the)g(curren)m(t)330
+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(22\).)225 3948 y Fp(\017)60
+b Ft(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
4057 y(user)40 b(\()p Fs(UID)p Ft(,)i Fs(EUID)p Ft(,)g(and)e
Fs(GROUPS)p Ft(\),)h(the)g(curren)m(t)f(host)g(\()p Fs(HOSTTYPE)p
Ft(,)h Fs(OSTYPE)p Ft(,)h Fs(MACHTYPE)p Ft(,)f(and)330
-4167 y Fs(HOSTNAME)p Ft(\),)55 b(and)c(the)g(instance)g(of)h(Bash)f
-(that)h(is)e(running)f(\()p Fs(BASH)p Ft(,)56 b Fs(BASH_VERSION)p
+4167 y Fs(HOSTNAME)p Ft(\),)55 b(and)c(the)g(instance)h(of)g(Bash)f
+(that)h(is)f(running)f(\()p Fs(BASH)p Ft(,)56 b Fs(BASH_VERSION)p
Ft(,)e(and)330 4276 y Fs(BASH_VERSINFO)p Ft(\).)37 b(See)31
-b(Section)f(5.2)i([Bash)e(V)-8 b(ariables],)31 b(page)g(55,)g(for)f
+b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(55,)g(for)f
(details.)225 4405 y Fp(\017)60 b Ft(The)44 b Fs(IFS)f
-Ft(v)-5 b(ariable)43 b(is)g(used)g(to)i(split)d(only)h(the)h(results)f
-(of)i(expansion,)h(not)e(all)f(w)m(ords)h(\(see)330 4515
-y(Section)28 b(3.5.7)i([W)-8 b(ord)29 b(Splitting],)e(page)i(22\).)41
-b(This)27 b(closes)h(a)h(longstanding)e(shell)f(securit)m(y)i(hole.)225
-4644 y Fp(\017)60 b Ft(Bash)33 b(implemen)m(ts)f(the)h(full)e(set)j(of)
-f Fl(posix)f Ft(1003.2)k(\014lename)c(expansion)g(op)s(erators,)i
+Ft(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 4515
+y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(22\).)41
+b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)225
+4644 y Fp(\017)60 b Ft(Bash)33 b(implemen)m(ts)h(the)f(full)g(set)h(of)
+f Fl(posix)f Ft(1003.2)k(\014lename)d(expansion)g(op)s(erators,)h
(including)330 4753 y Fq(c)m(haracter)23 b(classes)p
-Ft(,)g Fq(equiv)-5 b(alence)21 b(classes)p Ft(,)i(and)e
-Fq(collating)f(sym)m(b)s(ols)k Ft(\(see)e(Section)f(3.5.8)i([Filename)
-330 4863 y(Expansion],)29 b(page)i(22\).)225 4992 y Fp(\017)60
-b Ft(Bash)35 b(implemen)m(ts)e(extended)i(pattern)g(matc)m(hing)g
-(features)g(when)f(the)h Fs(extglob)d Ft(shell)h(option)330
-5101 y(is)c(enabled)h(\(see)h(Section)f(3.5.8.1)j([P)m(attern)f(Matc)m
-(hing],)f(page)g(23\).)225 5230 y Fp(\017)60 b Ft(It)22
-b(is)f(p)s(ossible)f(to)j(ha)m(v)m(e)g(a)f(v)-5 b(ariable)21
-b(and)h(a)g(function)f(with)g(the)h(same)g(name;)j Fs(sh)d
-Ft(do)s(es)g(not)g(separate)330 5340 y(the)31 b(t)m(w)m(o)g(name)g
-(spaces.)p eop
+Ft(,)h Fq(equiv)-5 b(alence)23 b(classes)p Ft(,)h(and)d
+Fq(collating)i(sym)m(b)s(ols)i Ft(\(see)d(Section)g(3.5.8)h([Filename)
+330 4863 y(Expansion],)30 b(page)h(22\).)225 4992 y Fp(\017)60
+b Ft(Bash)35 b(implemen)m(ts)g(extended)g(pattern)g(matc)m(hing)h
+(features)f(when)f(the)h Fs(extglob)d Ft(shell)j(option)330
+5101 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(23\).)225 5230 y Fp(\017)60 b
+Ft(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
+Fs(sh)d Ft(do)s(es)g(not)g(separate)330 5340 y(the)31
+b(t)m(w)m(o)g(name)g(spaces.)p eop end
%%Page: 127 133
-127 132 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5
-b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256
-b(127)225 299 y Fp(\017)60 b Ft(Bash)30 b(functions)d(are)j(p)s
-(ermitted)e(to)i(ha)m(v)m(e)h(lo)s(cal)e(v)-5 b(ariables)28
-b(using)g(the)h Fs(local)f Ft(builtin,)f(and)h(th)m(us)330
-408 y(useful)h(recursiv)m(e)g(functions)g(ma)m(y)i(b)s(e)f(written)f
-(\(see)j(Section)e(4.2)h([Bash)g(Builtins],)d(page)k(39\).)225
-537 y Fp(\017)60 b Ft(V)-8 b(ariable)23 b(assignmen)m(ts)h(preceding)e
-(commands)i(a\013ect)h(only)e(that)h(command,)h(ev)m(en)f(builtins)d
-(and)330 647 y(functions)35 b(\(see)i(Section)f(3.7.4)i([En)m(vironmen)
-m(t],)g(page)f(30\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)d(v)-5
-b(ariable)35 b(assignmen)m(ts)330 757 y(preceding)29
-b(commands)h(are)h(global)f(unless)e(the)j(command)f(is)g(executed)h
-(from)f(the)g(\014le)g(system.)225 886 y Fp(\017)60 b
-Ft(Bash)44 b(p)s(erforms)e(\014lename)h(expansion)f(on)i(\014lenames)f
-(sp)s(eci\014ed)f(as)i(op)s(erands)e(to)j(input)d(and)330
-995 y(output)30 b(redirection)f(op)s(erators)i(\(see)g(Section)f(3.6)i
-([Redirections],)e(page)h(24\).)225 1124 y Fp(\017)60
-b Ft(Bash)29 b(con)m(tains)g(the)g(`)p Fs(<>)p Ft(')f(redirection)g(op)
-s(erator,)h(allo)m(wing)f(a)h(\014le)f(to)h(b)s(e)f(op)s(ened)g(for)h
-(b)s(oth)f(read-)330 1234 y(ing)34 b(and)g(writing,)g(and)g(the)h(`)p
-Fs(&>)p Ft(')g(redirection)e(op)s(erator,)j(for)f(directing)e(standard)
-h(output)h(and)330 1343 y(standard)30 b(error)g(to)h(the)f(same)h
-(\014le)e(\(see)j(Section)e(3.6)h([Redirections],)f(page)i(24\).)225
-1472 y Fp(\017)60 b Ft(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i
-(\014lenames)f(sp)s(ecially)e(when)i(they)h(are)g(used)f(in)f
-(redirection)h(op)s(erators)330 1582 y(\(see)31 b(Section)g(3.6)g
-([Redirections],)f(page)h(24\).)225 1711 y Fp(\017)60
-b Ft(Bash)33 b(can)f(op)s(en)g(net)m(w)m(ork)i(connections)e(to)i
-(arbitrary)d(mac)m(hines)h(and)g(services)g(with)f(the)i(redi-)330
-1820 y(rection)d(op)s(erators)h(\(see)g(Section)f(3.6)i
-([Redirections],)e(page)h(24\).)225 1949 y Fp(\017)60
-b Ft(The)29 b Fs(noclobber)e Ft(option)i(is)g(a)m(v)-5
-b(ailable)29 b(to)h(a)m(v)m(oid)g(o)m(v)m(erwriting)f(existing)g
-(\014les)f(with)h(output)g(redi-)330 2059 y(rection)g(\(see)i(Section)e
-(4.3)h([The)g(Set)f(Builtin],)f(page)i(50\).)41 b(The)29
-b(`)p Fs(>|)p Ft(')h(redirection)e(op)s(erator)h(ma)m(y)330
-2168 y(b)s(e)h(used)f(to)i(o)m(v)m(erride)g Fs(noclobber)p
+TeXDict begin 127 132 bop 150 -116 a Ft(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(127)225 299 y Fp(\017)60
+b Ft(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 Fs(local)f
+Ft(builtin,)i(and)e(th)m(us)330 408 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(39\).)225 537 y Fp(\017)60 b Ft(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 647
+y(functions)36 b(\(see)h(Section)g(3.7.4)h([En)m(vironmen)m(t],)h(page)
+e(30\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)f(v)-5 b(ariable)37
+b(assignmen)m(ts)330 757 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 886 y Fp(\017)60 b Ft(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 995 y(output)30 b(redirection)h(op)s(erators)g(\(see)
+g(Section)g(3.6)h([Redirections],)g(page)f(24\).)225
+1124 y Fp(\017)60 b Ft(Bash)29 b(con)m(tains)h(the)f(`)p
+Fs(<>)p Ft(')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 1234
+y(ing)35 b(and)f(writing,)i(and)e(the)h(`)p Fs(&>)p Ft(')g(redirection)
+g(op)s(erator,)h(for)f(directing)g(standard)f(output)h(and)330
+1343 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(24\).)225 1472
+y Fp(\017)60 b Ft(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 1582 y(\(see)31 b(Section)h(3.6)f
+([Redirections],)h(page)f(24\).)225 1711 y Fp(\017)60
+b Ft(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
+1820 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h
+([Redirections],)g(page)f(24\).)225 1949 y Fp(\017)60
+b Ft(The)29 b Fs(noclobber)e Ft(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 2059 y(rection)h(\(see)h(Section)f
+(4.3)g([The)g(Set)f(Builtin],)i(page)f(50\).)41 b(The)29
+b(`)p Fs(>|)p Ft(')h(redirection)g(op)s(erator)f(ma)m(y)330
+2168 y(b)s(e)h(used)f(to)i(o)m(v)m(erride)h Fs(noclobber)p
Ft(.)225 2297 y Fp(\017)60 b Ft(The)34 b(Bash)g Fs(cd)g
-Ft(and)f Fs(pwd)g Ft(builtins)e(\(see)k(Section)f(4.1)h([Bourne)g
-(Shell)d(Builtins],)g(page)j(33\))h(eac)m(h)330 2407
-y(tak)m(e)c(`)p Fs(-L)p Ft(')e(and)g(`)p Fs(-P)p Ft(')g(options)g(to)h
-(switc)m(h)f(b)s(et)m(w)m(een)h(logical)f(and)f(ph)m(ysical)g(mo)s
-(des.)225 2536 y Fp(\017)60 b Ft(Bash)25 b(allo)m(ws)f(a)i(function)d
-(to)j(o)m(v)m(erride)f(a)h(builtin)21 b(with)j(the)h(same)g(name,)i
-(and)d(pro)m(vides)g(access)i(to)330 2645 y(that)34 b(builtin's)c
-(functionalit)m(y)h(within)g(the)i(function)f(via)h(the)g
+Ft(and)f Fs(pwd)g Ft(builtins)h(\(see)h(Section)g(4.1)g([Bourne)g
+(Shell)f(Builtins],)h(page)g(33\))h(eac)m(h)330 2407
+y(tak)m(e)c(`)p Fs(-L)p Ft(')e(and)g(`)p Fs(-P)p Ft(')g(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 2536 y Fp(\017)60 b Ft(Bash)25 b(allo)m(ws)h(a)g(function)e
+(to)i(o)m(v)m(erride)g(a)g(builtin)e(with)h(the)g(same)g(name,)i(and)d
+(pro)m(vides)h(access)h(to)330 2645 y(that)34 b(builtin's)f
+(functionalit)m(y)h(within)f(the)g(function)g(via)h(the)f
Fs(builtin)f Ft(and)g Fs(command)g Ft(builtins)330 2755
-y(\(see)f(Section)g(4.2)g([Bash)g(Builtins],)d(page)j(39\).)225
-2884 y Fp(\017)60 b Ft(The)35 b Fs(command)e Ft(builtin)f(allo)m(ws)j
-(selectiv)m(e)h(disabling)d(of)i(functions)f(when)h(command)g(lo)s
-(okup)f(is)330 2993 y(p)s(erformed)29 b(\(see)i(Section)f(4.2)i([Bash)f
-(Builtins],)d(page)j(39\).)225 3122 y Fp(\017)60 b Ft(Individual)20
-b(builtins)g(ma)m(y)25 b(b)s(e)e(enabled)g(or)h(disabled)e(using)g(the)
-i Fs(enable)f Ft(builtin)d(\(see)25 b(Section)f(4.2)330
-3232 y([Bash)31 b(Builtins],)d(page)j(39\).)225 3361
-y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(exec)e Ft(builtin)e(tak)m(es)28
-b(additional)c(options)i(that)h(allo)m(w)f(users)f(to)j(con)m(trol)f
-(the)f(con)m(ten)m(ts)330 3471 y(of)35 b(the)f(en)m(vironmen)m(t)g
-(passed)g(to)h(the)g(executed)g(command,)h(and)d(what)i(the)f(zeroth)h
-(argumen)m(t)330 3580 y(to)c(the)g(command)f(is)f(to)i(b)s(e)f(\(see)h
-(Section)g(4.1)g([Bourne)f(Shell)f(Builtins],)f(page)j(33\).)225
-3709 y Fp(\017)60 b Ft(Shell)27 b(functions)h(ma)m(y)i(b)s(e)f(exp)s
-(orted)g(to)h(c)m(hildren)d(via)i(the)h(en)m(vironmen)m(t)f(using)f
-Fs(export)g(-f)h Ft(\(see)330 3819 y(Section)h(3.3)i([Shell)c(F)-8
-b(unctions],)31 b(page)g(13\).)225 3948 y Fp(\017)60
+y(\(see)f(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(39\).)225
+2884 y Fp(\017)60 b Ft(The)35 b Fs(command)e Ft(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 2993 y(p)s(erformed)29 b(\(see)i(Section)g(4.2)h([Bash)f
+(Builtins],)g(page)g(39\).)225 3122 y Fp(\017)60 b Ft(Individual)23
+b(builtins)g(ma)m(y)i(b)s(e)e(enabled)h(or)g(disabled)g(using)f(the)h
+Fs(enable)f Ft(builtin)g(\(see)i(Section)g(4.2)330 3232
+y([Bash)31 b(Builtins],)g(page)g(39\).)225 3361 y Fp(\017)60
+b Ft(The)26 b(Bash)h Fs(exec)e Ft(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 3471 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
+3580 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(33\).)225 3709
+y Fp(\017)60 b Ft(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
+Fs(export)f(-f)h Ft(\(see)330 3819 y(Section)i(3.3)h([Shell)e(F)-8
+b(unctions],)32 b(page)f(13\).)225 3948 y Fp(\017)60
b Ft(The)37 b(Bash)g Fs(export)p Ft(,)h Fs(readonly)p
-Ft(,)f(and)f Fs(declare)g Ft(builtins)e(can)j(tak)m(e)i(a)f(`)p
-Fs(-f)p Ft(')f(option)g(to)h(act)g(on)330 4057 y(shell)24
-b(functions,)h(a)i(`)p Fs(-p)p Ft(')e(option)g(to)i(displa)m(y)d(v)-5
-b(ariables)24 b(with)h(v)-5 b(arious)24 b(attributes)i(set)g(in)e(a)j
-(format)330 4167 y(that)g(can)f(b)s(e)f(used)h(as)g(shell)e(input,)i(a)
-g(`)p Fs(-n)p Ft(')g(option)f(to)i(remo)m(v)m(e)h(v)-5
-b(arious)25 b(v)-5 b(ariable)25 b(attributes,)i(and)330
-4276 y(`)p Fs(name=value)p Ft(')h(argumen)m(ts)j(to)g(set)g(v)-5
-b(ariable)29 b(attributes)h(and)g(v)-5 b(alues)29 b(sim)m(ultaneously)
+Ft(,)f(and)f Fs(declare)g Ft(builtins)h(can)g(tak)m(e)i(a)f(`)p
+Fs(-f)p Ft(')f(option)h(to)g(act)g(on)330 4057 y(shell)26
+b(functions,)g(a)h(`)p Fs(-p)p Ft(')e(option)h(to)h(displa)m(y)f(v)-5
+b(ariables)26 b(with)g(v)-5 b(arious)25 b(attributes)i(set)f(in)f(a)i
+(format)330 4167 y(that)g(can)f(b)s(e)f(used)h(as)g(shell)g(input,)h(a)
+f(`)p Fs(-n)p Ft(')g(option)g(to)h(remo)m(v)m(e)h(v)-5
+b(arious)26 b(v)-5 b(ariable)27 b(attributes,)h(and)330
+4276 y(`)p Fs(name=value)p Ft(')g(argumen)m(ts)j(to)g(set)g(v)-5
+b(ariable)31 b(attributes)g(and)f(v)-5 b(alues)30 b(sim)m(ultaneously)
-8 b(.)225 4405 y Fp(\017)60 b Ft(The)42 b(Bash)h Fs(hash)f
-Ft(builtin)d(allo)m(ws)k(a)g(name)g(to)g(b)s(e)f(asso)s(ciated)i(with)d
-(an)i(arbitrary)e(\014lename,)330 4515 y(ev)m(en)30 b(when)e(that)h
-(\014lename)f(cannot)i(b)s(e)e(found)g(b)m(y)h(searc)m(hing)f(the)h
-Fs($PATH)p Ft(,)g(using)e(`)p Fs(hash)i(-p)p Ft(')g(\(see)330
-4624 y(Section)h(4.1)i([Bourne)e(Shell)e(Builtins],)g(page)k(33\).)225
-4753 y Fp(\017)60 b Ft(Bash)27 b(includes)d(a)k Fs(help)d
-Ft(builtin)f(for)i(quic)m(k)g(reference)i(to)f(shell)e(facilities)g
-(\(see)j(Section)f(4.2)h([Bash)330 4863 y(Builtins],)g(page)j(39\).)225
-4992 y Fp(\017)60 b Ft(The)42 b Fs(printf)g Ft(builtin)d(is)j(a)m(v)-5
-b(ailable)42 b(to)i(displa)m(y)d(formatted)i(output)g(\(see)h(Section)f
-(4.2)h([Bash)330 5101 y(Builtins],)28 b(page)j(39\).)225
-5230 y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(read)f Ft(builtin)d(\(see)28
-b(Section)f(4.2)h([Bash)f(Builtins],)e(page)j(39\))g(will)c(read)j(a)g
-(line)e(ending)330 5340 y(in)g(`)p Fs(\\)p Ft(')i(with)e(the)h(`)p
-Fs(-r)p Ft(')h(option,)g(and)e(will)f(use)i(the)h Fs(REPLY)e
-Ft(v)-5 b(ariable)25 b(as)i(a)f(default)g(if)f(no)i(non-option)p
-eop
+Ft(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 4515 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
+Fs($PATH)p Ft(,)g(using)f(`)p Fs(hash)h(-p)p Ft(')g(\(see)330
+4624 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(33\).)225
+4753 y Fp(\017)60 b Ft(Bash)27 b(includes)f(a)i Fs(help)d
+Ft(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 4863 y(Builtins],)j(page)g(39\).)225
+4992 y Fp(\017)60 b Ft(The)42 b Fs(printf)g Ft(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 5101 y(Builtins],)31 b(page)g(39\).)225
+5230 y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(read)f Ft(builtin)g(\(see)i
+(Section)g(4.2)g([Bash)f(Builtins],)h(page)g(39\))g(will)f(read)g(a)g
+(line)g(ending)330 5340 y(in)f(`)p Fs(\\)p Ft(')h(with)f(the)g(`)p
+Fs(-r)p Ft(')h(option,)h(and)d(will)i(use)f(the)h Fs(REPLY)e
+Ft(v)-5 b(ariable)27 b(as)g(a)f(default)h(if)f(no)h(non-option)p
+eop end
%%Page: 128 134
-128 133 bop 150 -116 a Ft(128)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-330 299 y(argumen)m(ts)g(are)h(supplied.)40 b(The)30
-b(Bash)i Fs(read)e Ft(builtin)d(also)32 b(accepts)g(a)g(prompt)e
-(string)g(with)g(the)330 408 y(`)p Fs(-p)p Ft(')35 b(option)f(and)g
-(will)e(use)j(Readline)e(to)j(obtain)e(the)h(line)e(when)h(giv)m(en)h
-(the)g(`)p Fs(-e)p Ft(')g(option.)53 b(The)330 518 y
-Fs(read)31 b Ft(builtin)e(also)k(has)f(additional)e(options)i(to)h(con)
-m(trol)g(input:)43 b(the)32 b(`)p Fs(-s)p Ft(')h(option)e(will)f(turn)i
-(o\013)330 628 y(ec)m(hoing)37 b(of)f(input)e(c)m(haracters)k(as)e
-(they)h(are)f(read,)i(the)e(`)p Fs(-t)p Ft(')g(option)g(will)e(allo)m
-(w)h Fs(read)g Ft(to)i(time)330 737 y(out)c(if)f(input)f(do)s(es)h(not)
-h(arriv)m(e)f(within)f(a)i(sp)s(eci\014ed)e(n)m(um)m(b)s(er)g(of)i
-(seconds,)h(the)f(`)p Fs(-n)p Ft(')f(option)h(will)330
-847 y(allo)m(w)27 b(reading)f(only)h(a)h(sp)s(eci\014ed)d(n)m(um)m(b)s
-(er)h(of)i(c)m(haracters)h(rather)e(than)g(a)h(full)d(line,)i(and)f
-(the)i(`)p Fs(-d)p Ft(')330 956 y(option)i(will)e(read)i(un)m(til)e(a)j
-(particular)e(c)m(haracter)j(rather)e(than)g(newline.)225
-1096 y Fp(\017)60 b Ft(The)33 b Fs(return)e Ft(builtin)f(ma)m(y)j(b)s
-(e)g(used)f(to)i(ab)s(ort)f(execution)g(of)g(scripts)f(executed)i(with)
-e(the)h Fs(.)g Ft(or)330 1205 y Fs(source)c Ft(builtins)d(\(see)32
-b(Section)e(4.1)h([Bourne)g(Shell)d(Builtins],)g(page)j(33\).)225
-1345 y Fp(\017)60 b Ft(Bash)43 b(includes)e(the)i Fs(shopt)f
-Ft(builtin,)h(for)g(\014ner)f(con)m(trol)i(of)f(shell)f(optional)g
-(capabilities)f(\(see)330 1455 y(Section)33 b(4.2)h([Bash)f(Builtins],)
-f(page)h(39\),)i(and)e(allo)m(ws)f(these)h(options)g(to)g(b)s(e)g(set)g
-(and)g(unset)f(at)330 1564 y(shell)d(in)m(v)m(o)s(cation)h(\(see)h
-(Section)f(6.1)i([In)m(v)m(oking)e(Bash],)h(page)h(63\).)225
-1704 y Fp(\017)60 b Ft(Bash)23 b(has)f(m)m(uc)m(h)g(more)h(optional)f
-(b)s(eha)m(vior)f(con)m(trollable)h(with)f(the)i Fs(set)e
-Ft(builtin)e(\(see)24 b(Section)e(4.3)330 1813 y([The)30
-b(Set)h(Builtin],)d(page)j(50\).)225 1953 y Fp(\017)60
-b Ft(The)31 b(`)p Fs(-x)p Ft(')g(\()p Fs(xtrace)p Ft(\))g(option)g
-(displa)m(ys)e(commands)j(other)f(than)h(simple)d(commands)i(when)g(p)s
-(er-)330 2062 y(forming)e(an)h(execution)h(trace)g(\(see)h(Section)e
-(4.3)h([The)g(Set)f(Builtin],)e(page)k(50\).)225 2202
-y Fp(\017)60 b Ft(The)28 b Fs(test)g Ft(builtin)e(\(see)k(Section)e
-(4.1)i([Bourne)f(Shell)e(Builtins],)g(page)j(33\))g(is)e(sligh)m(tly)f
-(di\013eren)m(t,)330 2311 y(as)c(it)f(implemen)m(ts)e(the)j
-Fl(posix)f Ft(algorithm,)h(whic)m(h)e(sp)s(eci\014es)g(the)i(b)s(eha)m
-(vior)e(based)h(on)h(the)f(n)m(um)m(b)s(er)330 2421 y(of)31
-b(argumen)m(ts.)225 2560 y Fp(\017)60 b Ft(Bash)31 b(includes)e(the)j
-Fs(caller)d Ft(builtin,)g(whic)m(h)h(displa)m(ys)f(the)i(con)m(text)i
-(of)f(an)m(y)g(activ)m(e)g(subroutine)330 2670 y(call)26
-b(\(a)h(shell)d(function)i(or)g(a)h(script)e(executed)i(with)e(the)i
-Fs(.)f Ft(or)g Fs(source)f Ft(builtins\).)36 b(This)25
+TeXDict begin 128 133 bop 150 -116 a Ft(128)2527 b(Bash)31
+b(Reference)g(Man)m(ual)330 299 y(argumen)m(ts)g(are)h(supplied.)42
+b(The)30 b(Bash)i Fs(read)e Ft(builtin)g(also)j(accepts)f(a)g(prompt)e
+(string)h(with)g(the)330 408 y(`)p Fs(-p)p Ft(')k(option)g(and)f(will)h
+(use)g(Readline)g(to)h(obtain)f(the)g(line)g(when)f(giv)m(en)i(the)f(`)
+p Fs(-e)p Ft(')g(option.)54 b(The)330 518 y Fs(read)31
+b Ft(builtin)h(also)i(has)e(additional)h(options)g(to)g(con)m(trol)h
+(input:)44 b(the)32 b(`)p Fs(-s)p Ft(')h(option)f(will)h(turn)f(o\013)
+330 628 y(ec)m(hoing)38 b(of)e(input)f(c)m(haracters)j(as)e(they)h(are)
+f(read,)i(the)e(`)p Fs(-t)p Ft(')g(option)h(will)g(allo)m(w)g
+Fs(read)e Ft(to)i(time)330 737 y(out)c(if)g(input)f(do)s(es)g(not)h
+(arriv)m(e)g(within)g(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)f(of)i
+(seconds,)h(the)f(`)p Fs(-n)p Ft(')f(option)i(will)330
+847 y(allo)m(w)29 b(reading)e(only)h(a)g(sp)s(eci\014ed)e(n)m(um)m(b)s
+(er)g(of)i(c)m(haracters)h(rather)e(than)g(a)h(full)f(line,)i(and)d
+(the)i(`)p Fs(-d)p Ft(')330 956 y(option)j(will)g(read)f(un)m(til)g(a)h
+(particular)g(c)m(haracter)h(rather)e(than)g(newline.)225
+1096 y Fp(\017)60 b Ft(The)33 b Fs(return)e Ft(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 Fs(.)g Ft(or)330 1205 y Fs(source)c Ft(builtins)g(\(see)j
+(Section)f(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(33\).)225
+1345 y Fp(\017)60 b Ft(Bash)43 b(includes)g(the)g Fs(shopt)f
+Ft(builtin,)k(for)d(\014ner)f(con)m(trol)j(of)e(shell)h(optional)g
+(capabilities)h(\(see)330 1455 y(Section)34 b(4.2)g([Bash)f(Builtins],)
+i(page)e(39\),)i(and)e(allo)m(ws)h(these)f(options)h(to)f(b)s(e)g(set)g
+(and)g(unset)f(at)330 1564 y(shell)f(in)m(v)m(o)s(cation)h(\(see)f
+(Section)g(6.1)h([In)m(v)m(oking)f(Bash],)g(page)h(63\).)225
+1704 y Fp(\017)60 b Ft(Bash)23 b(has)f(m)m(uc)m(h)g(more)h(optional)h
+(b)s(eha)m(vior)e(con)m(trollable)j(with)d(the)h Fs(set)e
+Ft(builtin)h(\(see)i(Section)f(4.3)330 1813 y([The)30
+b(Set)h(Builtin],)g(page)g(50\).)225 1953 y Fp(\017)60
+b Ft(The)31 b(`)p Fs(-x)p Ft(')g(\()p Fs(xtrace)p Ft(\))g(option)h
+(displa)m(ys)f(commands)h(other)f(than)h(simple)f(commands)g(when)g(p)s
+(er-)330 2062 y(forming)f(an)g(execution)i(trace)f(\(see)h(Section)f
+(4.3)g([The)g(Set)f(Builtin],)h(page)h(50\).)225 2202
+y Fp(\017)60 b Ft(The)28 b Fs(test)g Ft(builtin)h(\(see)h(Section)f
+(4.1)h([Bourne)f(Shell)g(Builtins],)h(page)g(33\))g(is)f(sligh)m(tly)h
+(di\013eren)m(t,)330 2311 y(as)23 b(it)g(implemen)m(ts)f(the)h
+Fl(posix)f Ft(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 2421 y(of)31
+b(argumen)m(ts.)225 2560 y Fp(\017)60 b Ft(Bash)31 b(includes)g(the)h
+Fs(caller)d Ft(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 2670 y(call)28
+b(\(a)f(shell)f(function)h(or)f(a)h(script)f(executed)h(with)f(the)h
+Fs(.)f Ft(or)g Fs(source)f Ft(builtins\).)39 b(This)26
b(supp)s(orts)330 2780 y(the)31 b(bash)e(debugger.)225
-2919 y Fp(\017)60 b Ft(The)42 b Fs(trap)f Ft(builtin)e(\(see)44
-b(Section)e(4.1)i([Bourne)e(Shell)e(Builtins],)k(page)f(33\))h(allo)m
-(ws)e(a)g Fs(DEBUG)330 3029 y Ft(pseudo-signal)36 b(sp)s
-(eci\014cation,)i(similar)d(to)j Fs(EXIT)p Ft(.)62 b(Commands)36
-b(sp)s(eci\014ed)g(with)g(a)i Fs(DEBUG)e Ft(trap)330
-3138 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h(simple)d(command,)42
-b Fs(for)c Ft(command,)k Fs(case)c Ft(command,)k Fs(select)330
-3248 y Ft(command,)35 b(ev)m(ery)g(arithmetic)e Fs(for)g
-Ft(command,)i(and)f(b)s(efore)g(the)g(\014rst)f(command)h(executes)h
-(in)330 3357 y(a)29 b(shell)e(function.)39 b(The)28 b
-Fs(DEBUG)g Ft(trap)g(is)g(not)h(inherited)d(b)m(y)j(shell)e(functions)g
-(unless)g(the)i(function)330 3467 y(has)35 b(b)s(een)g(giv)m(en)h(the)g
-Fs(trace)e Ft(attribute)h(or)h(the)g Fs(functrace)d Ft(option)i(has)g
-(b)s(een)g(enabled)f(using)330 3577 y(the)28 b Fs(shopt)e
-Ft(builtin.)36 b(The)27 b Fs(extdebug)f Ft(shell)g(option)h(has)g
-(additional)e(e\013ects)k(on)f(the)g Fs(DEBUG)e Ft(trap.)330
-3716 y(The)21 b Fs(trap)e Ft(builtin)f(\(see)k(Section)f(4.1)h([Bourne)
-f(Shell)e(Builtins],)i(page)h(33\))g(allo)m(ws)e(an)h
-Fs(ERR)f Ft(pseudo-)330 3826 y(signal)28 b(sp)s(eci\014cation,)h
-(similar)e(to)j Fs(EXIT)f Ft(and)g Fs(DEBUG)p Ft(.)39
-b(Commands)28 b(sp)s(eci\014ed)g(with)g(an)h Fs(ERR)g
-Ft(trap)330 3935 y(are)40 b(executed)g(after)g(a)f(simple)f(command)h
-(fails,)h(with)e(a)i(few)f(exceptions.)67 b(The)39 b
-Fs(ERR)g Ft(trap)g(is)330 4045 y(not)g(inherited)d(b)m(y)j(shell)e
-(functions)g(unless)g(the)i Fs(-o)29 b(errtrace)37 b
-Ft(option)h(to)h(the)g Fs(set)f Ft(builtin)d(is)330 4154
-y(enabled.)330 4294 y(The)j Fs(trap)g Ft(builtin)e(\(see)j(Section)g
-(4.1)h([Bourne)f(Shell)e(Builtins],)h(page)i(33\))g(allo)m(ws)e(a)i
-Fs(RETURN)330 4403 y Ft(pseudo-signal)33 b(sp)s(eci\014cation,)j
-(similar)c(to)k Fs(EXIT)e Ft(and)g Fs(DEBUG)p Ft(.)54
-b(Commands)34 b(sp)s(eci\014ed)f(with)h(an)330 4513 y
-Fs(RETURN)39 b Ft(trap)i(are)g(executed)h(b)s(efore)e(execution)h
-(resumes)f(after)h(a)g(shell)e(function)h(or)h(a)g(shell)330
-4623 y(script)35 b(executed)h(with)f Fs(.)g Ft(or)h Fs(source)e
-Ft(returns.)56 b(The)35 b Fs(RETURN)f Ft(trap)i(is)f(not)h(inherited)d
-(b)m(y)j(shell)330 4732 y(functions.)225 4872 y Fp(\017)60
-b Ft(The)30 b(Bash)g Fs(type)f Ft(builtin)e(is)i(more)h(extensiv)m(e)h
-(and)e(giv)m(es)i(more)f(information)f(ab)s(out)h(the)g(names)330
-4981 y(it)g(\014nds)f(\(see)i(Section)f(4.2)i([Bash)e(Builtins],)f
-(page)i(39\).)225 5121 y Fp(\017)60 b Ft(The)34 b(Bash)h
-Fs(umask)e Ft(builtin)e(p)s(ermits)i(a)h(`)p Fs(-p)p
-Ft(')h(option)f(to)h(cause)g(the)g(output)f(to)h(b)s(e)f(displa)m(y)m
-(ed)f(in)330 5230 y(the)i(form)g(of)g(a)h Fs(umask)e
-Ft(command)h(that)g(ma)m(y)h(b)s(e)f(reused)f(as)h(input)f(\(see)i
-(Section)f(4.1)h([Bourne)330 5340 y(Shell)28 b(Builtins],)g(page)k
-(33\).)p eop
+2919 y Fp(\017)60 b Ft(The)42 b Fs(trap)f Ft(builtin)h(\(see)i(Section)
+f(4.1)h([Bourne)e(Shell)g(Builtins],)47 b(page)c(33\))h(allo)m(ws)g(a)e
+Fs(DEBUG)330 3029 y Ft(pseudo-signal)c(sp)s(eci\014cation,)i(similar)e
+(to)g Fs(EXIT)p Ft(.)62 b(Commands)36 b(sp)s(eci\014ed)h(with)g(a)h
+Fs(DEBUG)e Ft(trap)330 3138 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h
+(simple)f(command,)j Fs(for)c Ft(command,)k Fs(case)c
+Ft(command,)k Fs(select)330 3248 y Ft(command,)35 b(ev)m(ery)g
+(arithmetic)g Fs(for)e Ft(command,)i(and)f(b)s(efore)g(the)g(\014rst)f
+(command)h(executes)h(in)330 3357 y(a)29 b(shell)g(function.)40
+b(The)28 b Fs(DEBUG)g Ft(trap)g(is)h(not)g(inherited)f(b)m(y)h(shell)g
+(functions)f(unless)g(the)h(function)330 3467 y(has)35
+b(b)s(een)g(giv)m(en)i(the)f Fs(trace)e Ft(attribute)i(or)g(the)g
+Fs(functrace)d Ft(option)j(has)f(b)s(een)g(enabled)g(using)330
+3577 y(the)28 b Fs(shopt)e Ft(builtin.)39 b(The)27 b
+Fs(extdebug)f Ft(shell)i(option)g(has)f(additional)h(e\013ects)h(on)f
+(the)g Fs(DEBUG)e Ft(trap.)330 3716 y(The)21 b Fs(trap)e
+Ft(builtin)i(\(see)h(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)j
+(page)e(33\))g(allo)m(ws)g(an)f Fs(ERR)f Ft(pseudo-)330
+3826 y(signal)30 b(sp)s(eci\014cation,)h(similar)f(to)g
+Fs(EXIT)f Ft(and)g Fs(DEBUG)p Ft(.)39 b(Commands)28 b(sp)s(eci\014ed)h
+(with)g(an)g Fs(ERR)g Ft(trap)330 3935 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 Fs(ERR)g Ft(trap)g(is)330 4045 y(not)g(inherited)f(b)m(y)h
+(shell)g(functions)f(unless)g(the)h Fs(-o)29 b(errtrace)37
+b Ft(option)i(to)g(the)g Fs(set)f Ft(builtin)g(is)330
+4154 y(enabled.)330 4294 y(The)g Fs(trap)g Ft(builtin)h(\(see)g
+(Section)h(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(33\))g(allo)m
+(ws)g(a)g Fs(RETURN)330 4403 y Ft(pseudo-signal)35 b(sp)s
+(eci\014cation,)j(similar)d(to)h Fs(EXIT)e Ft(and)g Fs(DEBUG)p
+Ft(.)54 b(Commands)34 b(sp)s(eci\014ed)g(with)h(an)330
+4513 y Fs(RETURN)k Ft(trap)i(are)g(executed)h(b)s(efore)e(execution)i
+(resumes)e(after)h(a)g(shell)g(function)g(or)g(a)g(shell)330
+4623 y(script)36 b(executed)g(with)g Fs(.)f Ft(or)h Fs(source)e
+Ft(returns.)56 b(The)35 b Fs(RETURN)f Ft(trap)i(is)g(not)g(inherited)f
+(b)m(y)h(shell)330 4732 y(functions.)225 4872 y Fp(\017)60
+b Ft(The)30 b(Bash)g Fs(type)f Ft(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
+4981 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i
+(page)f(39\).)225 5121 y Fp(\017)60 b Ft(The)34 b(Bash)h
+Fs(umask)e Ft(builtin)h(p)s(ermits)g(a)g(`)p Fs(-p)p
+Ft(')h(option)g(to)g(cause)g(the)g(output)f(to)h(b)s(e)f(displa)m(y)m
+(ed)h(in)330 5230 y(the)g(form)g(of)g(a)h Fs(umask)e
+Ft(command)h(that)g(ma)m(y)h(b)s(e)f(reused)f(as)h(input)g(\(see)h
+(Section)g(4.1)g([Bourne)330 5340 y(Shell)30 b(Builtins],)h(page)h
+(33\).)p eop end
%%Page: 129 135
-129 134 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5
-b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256
-b(129)225 299 y Fp(\017)60 b Ft(Bash)34 b(implemen)m(ts)f(a)i
-Fs(csh)p Ft(-lik)m(e)e(directory)g(stac)m(k,)k(and)d(pro)m(vides)f(the)
-h Fs(pushd)p Ft(,)g Fs(popd)p Ft(,)g(and)g Fs(dirs)330
-408 y Ft(builtins)d(to)36 b(manipulate)d(it)i(\(see)g(Section)g(6.8)h
-([The)f(Directory)g(Stac)m(k],)j(page)d(73\).)56 b(Bash)35
-b(also)330 518 y(mak)m(es)c(the)g(directory)f(stac)m(k)h(visible)d(as)j
-(the)f(v)-5 b(alue)30 b(of)h(the)f Fs(DIRSTACK)f Ft(shell)f(v)-5
-b(ariable.)225 646 y Fp(\017)60 b Ft(Bash)28 b(in)m(terprets)g(sp)s
-(ecial)f(bac)m(kslash-escap)s(ed)h(c)m(haracters)h(in)e(the)i(prompt)e
-(strings)g(when)g(in)m(ter-)330 756 y(activ)m(e)32 b(\(see)f(Section)f
-(6.9)i([Prin)m(ting)c(a)j(Prompt],)g(page)g(75\).)225
-885 y Fp(\017)60 b Ft(The)46 b(Bash)h(restricted)f(mo)s(de)g(is)g(more)
-g(useful)f(\(see)i(Section)g(6.10)h([The)e(Restricted)h(Shell],)330
-994 y(page)31 b(76\);)h(the)f(SVR4.2)g(shell)d(restricted)i(mo)s(de)g
-(is)g(to)s(o)h(limited.)225 1123 y Fp(\017)60 b Ft(The)30
-b Fs(disown)f Ft(builtin)e(can)k(remo)m(v)m(e)h(a)f(job)f(from)g(the)h
-(in)m(ternal)e(shell)g(job)h(table)h(\(see)g(Section)g(7.2)330
-1232 y([Job)i(Con)m(trol)g(Builtins],)e(page)j(80\))h(or)e(suppress)e
-(the)i(sending)f(of)h Fs(SIGHUP)e Ft(to)j(a)g(job)f(when)f(the)330
-1342 y(shell)d(exits)h(as)g(the)h(result)e(of)i(a)f Fs(SIGHUP)p
-Ft(.)225 1470 y Fp(\017)60 b Ft(The)28 b(SVR4.2)h(shell)d(has)i(t)m(w)m
-(o)i(privilege-related)c(builtins)f(\()p Fs(mldmode)h
+TeXDict begin 129 134 bop 150 -116 a Ft(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(129)225 299 y Fp(\017)60
+b Ft(Bash)34 b(implemen)m(ts)h(a)g Fs(csh)p Ft(-lik)m(e)g(directory)f
+(stac)m(k,)j(and)d(pro)m(vides)g(the)g Fs(pushd)p Ft(,)g
+Fs(popd)p Ft(,)g(and)g Fs(dirs)330 408 y Ft(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
+(73\).)56 b(Bash)35 b(also)330 518 y(mak)m(es)c(the)g(directory)g(stac)
+m(k)g(visible)g(as)g(the)f(v)-5 b(alue)31 b(of)g(the)f
+Fs(DIRSTACK)f Ft(shell)h(v)-5 b(ariable.)225 646 y Fp(\017)60
+b Ft(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
+756 y(activ)m(e)33 b(\(see)e(Section)g(6.9)h([Prin)m(ting)e(a)h
+(Prompt],)g(page)g(75\).)225 885 y Fp(\017)60 b Ft(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 994 y(page)31
+b(76\);)h(the)f(SVR4.2)g(shell)f(restricted)h(mo)s(de)f(is)h(to)s(o)g
+(limited.)225 1123 y Fp(\017)60 b Ft(The)30 b Fs(disown)f
+Ft(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 1232
+y([Job)h(Con)m(trol)h(Builtins],)g(page)g(80\))h(or)e(suppress)e(the)i
+(sending)g(of)g Fs(SIGHUP)e Ft(to)j(a)g(job)f(when)f(the)330
+1342 y(shell)f(exits)g(as)f(the)h(result)f(of)h(a)f Fs(SIGHUP)p
+Ft(.)225 1470 y Fp(\017)60 b Ft(The)28 b(SVR4.2)h(shell)f(has)g(t)m(w)m
+(o)i(privilege-related)g(builtins)e(\()p Fs(mldmode)e
Ft(and)i Fs(priv)p Ft(\))f(not)i(presen)m(t)f(in)330
1580 y(Bash.)225 1708 y Fp(\017)60 b Ft(Bash)31 b(do)s(es)f(not)g(ha)m
(v)m(e)i(the)e Fs(stop)g Ft(or)g Fs(newgrp)f Ft(builtins.)225
1837 y Fp(\017)60 b Ft(Bash)31 b(do)s(es)f(not)g(use)g(the)h
-Fs(SHACCT)d Ft(v)-5 b(ariable)30 b(or)g(p)s(erform)f(shell)g(accoun)m
+Fs(SHACCT)d Ft(v)-5 b(ariable)32 b(or)e(p)s(erform)f(shell)i(accoun)m
(ting.)225 1965 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h Fs(sh)f
-Ft(uses)g(a)g Fs(TIMEOUT)f Ft(v)-5 b(ariable)29 b(lik)m(e)h(Bash)g
-(uses)g Fs(TMOUT)p Ft(.)150 2112 y(More)h(features)g(unique)d(to)j
-(Bash)g(ma)m(y)g(b)s(e)f(found)f(in)g(Chapter)g(6)i([Bash)g(F)-8
+Ft(uses)g(a)g Fs(TIMEOUT)f Ft(v)-5 b(ariable)31 b(lik)m(e)h(Bash)e
+(uses)g Fs(TMOUT)p Ft(.)150 2112 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(63.)150 2351 y Fr(B.1)67 b(Implemen)l(tation)48
b(Di\013erences)e(F)-11 b(rom)44 b(The)h(SVR4.2)g(Shell)275
-2589 y Ft(Since)38 b(Bash)i(is)e(a)i(completely)g(new)f(implemen)m
-(tation,)h(it)f(do)s(es)h(not)f(su\013er)g(from)g(man)m(y)h(of)g(the)
-150 2699 y(limitations)28 b(of)j(the)f(SVR4.2)h(shell.)39
+2589 y Ft(Since)39 b(Bash)h(is)f(a)h(completely)i(new)d(implemen)m
+(tation,)k(it)d(do)s(es)g(not)f(su\013er)g(from)g(man)m(y)h(of)g(the)
+150 2699 y(limitations)32 b(of)f(the)f(SVR4.2)h(shell.)41
b(F)-8 b(or)31 b(instance:)225 2827 y Fp(\017)60 b Ft(Bash)32
-b(do)s(es)f(not)h(fork)f(a)h(subshell)c(when)j(redirecting)f(in)m(to)i
-(or)f(out)h(of)g(a)g(shell)d(con)m(trol)j(structure)330
-2937 y(suc)m(h)e(as)h(an)f Fs(if)g Ft(or)g Fs(while)f
+b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h
+(or)e(out)h(of)g(a)g(shell)f(con)m(trol)i(structure)330
+2937 y(suc)m(h)d(as)h(an)f Fs(if)g Ft(or)g Fs(while)f
Ft(statemen)m(t.)225 3065 y Fp(\017)60 b Ft(Bash)29 b(do)s(es)f(not)h
-(allo)m(w)f(un)m(balanced)g(quotes.)41 b(The)28 b(SVR4.2)h(shell)e
-(will)f(silen)m(tly)h(insert)h(a)h(needed)330 3175 y(closing)e(quote)i
-(at)f Fs(EOF)f Ft(under)g(certain)g(circumstances.)40
-b(This)26 b(can)i(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330
+(allo)m(w)h(un)m(balanced)f(quotes.)41 b(The)28 b(SVR4.2)h(shell)g
+(will)g(silen)m(tly)h(insert)f(a)g(needed)330 3175 y(closing)g(quote)g
+(at)f Fs(EOF)f Ft(under)g(certain)h(circumstances.)41
+b(This)27 b(can)h(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330
3285 y(to-\014nd)h(errors.)225 3413 y Fp(\017)60 b Ft(The)45
-b(SVR4.2)h(shell)d(uses)i(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc)
+b(SVR4.2)h(shell)f(uses)g(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc)
m(heme)e(based)g(on)g(trapping)330 3523 y Fs(SIGSEGV)p
-Ft(.)57 b(If)35 b(the)i(shell)d(is)i(started)h(from)e(a)i(pro)s(cess)f
-(with)f Fs(SIGSEGV)f Ft(blo)s(c)m(k)m(ed)j(\(e.g.,)i(b)m(y)d(using)330
-3632 y(the)31 b Fs(system\(\))d Ft(C)i(library)e(function)h(call\),)h
-(it)g(misb)s(eha)m(v)m(es)g(badly)-8 b(.)225 3761 y Fp(\017)60
-b Ft(In)26 b(a)i(questionable)e(attempt)j(at)f(securit)m(y)-8
-b(,)28 b(the)f(SVR4.2)h(shell,)e(when)h(in)m(v)m(ok)m(ed)g(without)g
-(the)g(`)p Fs(-p)p Ft(')330 3870 y(option,)38 b(will)33
-b(alter)k(its)e(real)h(and)g(e\013ectiv)m(e)i Fl(uid)e
-Ft(and)g Fl(gid)h Ft(if)e(they)i(are)f(less)g(than)g(some)h(magic)330
-3980 y(threshold)29 b(v)-5 b(alue,)30 b(commonly)g(100.)42
-b(This)28 b(can)j(lead)f(to)h(unexp)s(ected)f(results.)225
-4108 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)e(do)s(es)h(not)g(allo)m
-(w)g(users)g(to)h(trap)f Fs(SIGSEGV)p Ft(,)f Fs(SIGALRM)p
+Ft(.)57 b(If)35 b(the)i(shell)f(is)h(started)g(from)e(a)i(pro)s(cess)f
+(with)g Fs(SIGSEGV)e Ft(blo)s(c)m(k)m(ed)k(\(e.g.,)h(b)m(y)d(using)330
+3632 y(the)31 b Fs(system\(\))d Ft(C)i(library)g(function)g(call\),)i
+(it)f(misb)s(eha)m(v)m(es)g(badly)-8 b(.)225 3761 y Fp(\017)60
+b Ft(In)26 b(a)i(questionable)g(attempt)h(at)f(securit)m(y)-8
+b(,)29 b(the)e(SVR4.2)h(shell,)g(when)f(in)m(v)m(ok)m(ed)h(without)g
+(the)f(`)p Fs(-p)p Ft(')330 3870 y(option,)39 b(will)d(alter)i(its)e
+(real)h(and)f(e\013ectiv)m(e)j Fl(uid)d Ft(and)g Fl(gid)h
+Ft(if)f(they)h(are)f(less)h(than)f(some)h(magic)330 3980
+y(threshold)30 b(v)-5 b(alue,)31 b(commonly)g(100.)42
+b(This)29 b(can)i(lead)g(to)g(unexp)s(ected)f(results.)225
+4108 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)g(do)s(es)f(not)g(allo)m
+(w)i(users)e(to)h(trap)f Fs(SIGSEGV)p Ft(,)f Fs(SIGALRM)p
Ft(,)f(or)j Fs(SIGCHLD)p Ft(.)225 4237 y Fp(\017)60 b
-Ft(The)34 b(SVR4.2)h(shell)e(do)s(es)i(not)f(allo)m(w)h(the)f
+Ft(The)34 b(SVR4.2)h(shell)g(do)s(es)g(not)f(allo)m(w)j(the)d
Fs(IFS)p Ft(,)h Fs(MAILCHECK)p Ft(,)f Fs(PATH)p Ft(,)h
-Fs(PS1)p Ft(,)g(or)f Fs(PS2)g Ft(v)-5 b(ariables)33 b(to)330
-4346 y(b)s(e)d(unset.)225 4475 y Fp(\017)60 b Ft(The)30
-b(SVR4.2)h(shell)e(treats)i(`)p Fs(^)p Ft(')f(as)h(the)g(undo)s(cumen)m
-(ted)e(equiv)-5 b(alen)m(t)29 b(of)i(`)p Fs(|)p Ft('.)225
-4603 y Fp(\017)60 b Ft(Bash)37 b(allo)m(ws)f(m)m(ultiple)e(option)i
-(argumen)m(ts)h(when)e(it)h(is)g(in)m(v)m(ok)m(ed)h(\()p
+Fs(PS1)p Ft(,)g(or)f Fs(PS2)g Ft(v)-5 b(ariables)35 b(to)330
+4346 y(b)s(e)30 b(unset.)225 4475 y Fp(\017)60 b Ft(The)30
+b(SVR4.2)h(shell)g(treats)g(`)p Fs(^)p Ft(')f(as)h(the)g(undo)s(cumen)m
+(ted)e(equiv)-5 b(alen)m(t)31 b(of)g(`)p Fs(|)p Ft('.)225
+4603 y Fp(\017)60 b Ft(Bash)37 b(allo)m(ws)h(m)m(ultiple)f(option)g
+(argumen)m(ts)g(when)e(it)i(is)g(in)m(v)m(ok)m(ed)h(\()p
Fs(-x)30 b(-v)p Ft(\);)40 b(the)c(SVR4.2)i(shell)330
-4713 y(allo)m(ws)32 b(only)g(one)h(option)f(argumen)m(t)h(\()p
-Fs(-xv)p Ft(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)f(of)h(the)g
-(shell)d(dump)h(core)330 4822 y(if)e(the)i(second)f(argumen)m(t)h(b)s
-(egins)e(with)g(a)i(`)p Fs(-)p Ft('.)225 4951 y Fp(\017)60
-b Ft(The)35 b(SVR4.2)i(shell)c(exits)j(a)g(script)f(if)f(an)m(y)i
-(builtin)c(fails;)37 b(Bash)f(exits)g(a)g(script)e(only)h(if)g(one)h
-(of)330 5060 y(the)d Fl(posix)g Ft(1003.2)i(sp)s(ecial)d(builtins)d
-(fails,)k(and)f(only)h(for)f(certain)h(failures,)g(as)g(en)m(umerated)g
-(in)330 5170 y(the)e Fl(posix)e Ft(1003.2)k(standard.)225
-5298 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)e(b)s(eha)m(v)m(es)h
-(di\013eren)m(tly)f(when)h(in)m(v)m(ok)m(ed)h(as)f Fs(jsh)g
-Ft(\(it)g(turns)f(on)h(job)g(con)m(trol\).)p eop
+4713 y(allo)m(ws)c(only)f(one)g(option)g(argumen)m(t)g(\()p
+Fs(-xv)p Ft(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)g(of)g(the)g
+(shell)f(dump)f(core)330 4822 y(if)f(the)h(second)f(argumen)m(t)h(b)s
+(egins)f(with)g(a)h(`)p Fs(-)p Ft('.)225 4951 y Fp(\017)60
+b Ft(The)35 b(SVR4.2)i(shell)e(exits)i(a)f(script)g(if)f(an)m(y)h
+(builtin)f(fails;)k(Bash)d(exits)h(a)f(script)f(only)h(if)g(one)g(of)
+330 5060 y(the)d Fl(posix)g Ft(1003.2)i(sp)s(ecial)f(builtins)e(fails,)
+j(and)d(only)i(for)e(certain)i(failures,)h(as)e(en)m(umerated)g(in)330
+5170 y(the)e Fl(posix)e Ft(1003.2)k(standard.)225 5298
+y Fp(\017)60 b Ft(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 Fs(jsh)g
+Ft(\(it)h(turns)e(on)h(job)g(con)m(trol\).)p eop end
%%Page: 130 136
-130 135 bop 150 -116 a Ft(130)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 130 135 bop 150 -116 a Ft(130)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 131 137
-131 136 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g
-(Man)m(ual)2062 b(131)150 299 y Fo(App)t(endix)53 b(C)126
-b(Cop)l(ying)52 b(This)i(Man)l(ual)150 690 y Fr(C.1)68
-b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)1396
-909 y Ft(V)-8 b(ersion)30 b(1.2,)i(No)m(v)m(em)m(b)s(er)g(2002)390
-1052 y(Cop)m(yrigh)m(t)842 1049 y(c)817 1052 y Fp(\015)e
-Ft(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8
-b(oundation,)31 b(Inc.)390 1161 y(59)g(T)-8 b(emple)30
-b(Place,)h(Suite)e(330,)j(Boston,)g(MA)61 b(02111-1307,)35
-b(USA)390 1380 y(Ev)m(ery)m(one)c(is)f(p)s(ermitted)f(to)i(cop)m(y)g
-(and)f(distribute)e(v)m(erbatim)i(copies)390 1490 y(of)h(this)e
-(license)g(do)s(cumen)m(t,)i(but)e(c)m(hanging)i(it)f(is)f(not)i(allo)m
+TeXDict begin 131 136 bop 150 -116 a Ft(App)s(endix)29
+b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(131)150 299
+y Fo(App)t(endix)52 b(C)126 b(Cop)l(ying)51 b(This)i(Man)l(ual)150
+690 y Fr(C.1)68 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h
+(License)1396 909 y Ft(V)-8 b(ersion)31 b(1.2,)h(No)m(v)m(em)m(b)s(er)g
+(2002)390 1052 y(Cop)m(yrigh)m(t)842 1049 y(c)817 1052
+y Fp(\015)e Ft(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)
+-8 b(oundation,)32 b(Inc.)390 1161 y(59)f(T)-8 b(emple)31
+b(Place,)h(Suite)e(330,)i(Boston,)g(MA)61 b(02111-1307,)35
+b(USA)390 1380 y(Ev)m(ery)m(one)c(is)g(p)s(ermitted)f(to)h(cop)m(y)g
+(and)f(distribute)g(v)m(erbatim)h(copies)390 1490 y(of)g(this)f
+(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f(is)f(not)h(allo)m
(w)m(ed.)199 1632 y(0.)61 b(PREAMBLE)330 1770 y(The)37
-b(purp)s(ose)e(of)i(this)f(License)h(is)f(to)i(mak)m(e)g(a)g(man)m
-(ual,)g(textb)s(o)s(ok,)i(or)d(other)g(functional)f(and)330
-1880 y(useful)28 b(do)s(cumen)m(t)i Fq(free)36 b Ft(in)28
-b(the)j(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j
-(the)e(e\013ectiv)m(e)i(freedom)330 1990 y(to)g(cop)m(y)g(and)f
-(redistribute)e(it,)i(with)g(or)g(without)f(mo)s(difying)f(it,)j
-(either)f(commercially)f(or)h(non-)330 2099 y(commercially)-8
-b(.)53 b(Secondarily)-8 b(,)34 b(this)g(License)g(preserv)m(es)h(for)f
-(the)h(author)f(and)g(publisher)d(a)k(w)m(a)m(y)330 2209
-y(to)i(get)g(credit)f(for)g(their)f(w)m(ork,)j(while)c(not)i(b)s(eing)f
-(considered)g(resp)s(onsible)e(for)j(mo)s(di\014cations)330
-2318 y(made)30 b(b)m(y)h(others.)330 2457 y(This)21 b(License)i(is)f(a)
-i(kind)d(of)j(\\cop)m(yleft",)i(whic)m(h)c(means)h(that)h(deriv)-5
-b(ativ)m(e)22 b(w)m(orks)h(of)h(the)f(do)s(cumen)m(t)330
-2566 y(m)m(ust)34 b(themselv)m(es)g(b)s(e)f(free)h(in)f(the)h(same)g
-(sense.)51 b(It)34 b(complemen)m(ts)g(the)g(GNU)g(General)g(Public)330
-2676 y(License,)c(whic)m(h)f(is)h(a)g(cop)m(yleft)h(license)f(designed)
-f(for)h(free)h(soft)m(w)m(are.)330 2814 y(W)-8 b(e)31
-b(ha)m(v)m(e)f(designed)f(this)f(License)h(in)f(order)h(to)i(use)e(it)g
-(for)g(man)m(uals)g(for)g(free)h(soft)m(w)m(are,)h(b)s(ecause)330
+b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g(a)g(man)m
+(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330
+1880 y(useful)29 b(do)s(cumen)m(t)h Fq(free)36 b Ft(in)29
+b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j
+(the)e(e\013ectiv)m(e)j(freedom)330 1990 y(to)f(cop)m(y)g(and)f
+(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i
+(either)f(commercially)h(or)e(non-)330 2099 y(commercially)-8
+b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f
+(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2209
+y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g
+(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330
+2318 y(made)30 b(b)m(y)h(others.)330 2457 y(This)22 b(License)i(is)f(a)
+h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5
+b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330
+2566 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g
+(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330
+2676 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed)
+e(for)g(free)h(soft)m(w)m(are.)330 2814 y(W)-8 b(e)31
+b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h
+(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330
2924 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:)
-64 b(a)42 b(free)h(program)f(should)e(come)j(with)e(man)m(uals)330
-3033 y(pro)m(viding)27 b(the)i(same)g(freedoms)f(that)i(the)f(soft)m(w)
-m(are)h(do)s(es.)40 b(But)29 b(this)e(License)i(is)f(not)h(limited)d
-(to)330 3143 y(soft)m(w)m(are)32 b(man)m(uals;)e(it)g(can)h(b)s(e)f
-(used)g(for)g(an)m(y)h(textual)g(w)m(ork,)g(regardless)f(of)h(sub)5
-b(ject)30 b(matter)i(or)330 3252 y(whether)f(it)g(is)f(published)e(as)k
-(a)f(prin)m(ted)f(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)g
-(License)g(principally)c(for)330 3362 y(w)m(orks)j(whose)h(purp)s(ose)d
-(is)i(instruction)e(or)i(reference.)199 3500 y(1.)61
-b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3639 y(This)38
-b(License)i(applies)e(to)i(an)m(y)h(man)m(ual)e(or)h(other)g(w)m(ork,)i
-(in)d(an)m(y)h(medium,)h(that)f(con)m(tains)h(a)330 3748
-y(notice)h(placed)f(b)m(y)g(the)h(cop)m(yrigh)m(t)g(holder)e(sa)m(ying)
-h(it)g(can)h(b)s(e)f(distributed)d(under)i(the)i(terms)330
-3858 y(of)c(this)e(License.)61 b(Suc)m(h)37 b(a)h(notice)g(gran)m(ts)g
-(a)g(w)m(orld-wide,)f(ro)m(y)m(alt)m(y-free)j(license,)e(unlimited)c
-(in)330 3967 y(duration,)48 b(to)e(use)f(that)g(w)m(ork)h(under)d(the)j
-(conditions)d(stated)j(herein.)84 b(The)45 b(\\Do)s(cumen)m(t",)330
-4077 y(b)s(elo)m(w,)28 b(refers)g(to)h(an)m(y)g(suc)m(h)f(man)m(ual)g
-(or)g(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)e(is)h
-(a)i(licensee,)g(and)330 4187 y(is)24 b(addressed)g(as)h(\\y)m(ou".)40
-b(Y)-8 b(ou)26 b(accept)g(the)f(license)f(if)g(y)m(ou)i(cop)m(y)-8
-b(,)27 b(mo)s(dify)c(or)i(distribute)e(the)i(w)m(ork)330
-4296 y(in)k(a)i(w)m(a)m(y)g(requiring)d(p)s(ermission)f(under)i(cop)m
-(yrigh)m(t)i(la)m(w.)330 4435 y(A)j(\\Mo)s(di\014ed)e(V)-8
-b(ersion")34 b(of)g(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f
-(con)m(taining)h(the)g(Do)s(cumen)m(t)g(or)330 4544 y(a)k(p)s(ortion)e
-(of)i(it,)h(either)e(copied)g(v)m(erbatim,)i(or)e(with)g(mo)s
-(di\014cations)e(and/or)j(translated)f(in)m(to)330 4654
-y(another)31 b(language.)330 4792 y(A)26 b(\\Secondary)g(Section")g(is)
-f(a)i(named)e(app)s(endix)e(or)j(a)h(fron)m(t-matter)g(section)f(of)g
-(the)g(Do)s(cumen)m(t)330 4902 y(that)c(deals)f(exclusiv)m(ely)f(with)g
-(the)h(relationship)e(of)i(the)h(publishers)17 b(or)k(authors)g(of)h
-(the)f(Do)s(cumen)m(t)330 5011 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m
-(v)m(erall)e(sub)5 b(ject)37 b(\(or)h(to)g(related)f(matters\))h(and)f
-(con)m(tains)g(nothing)f(that)330 5121 y(could)j(fall)g(directly)g
-(within)f(that)j(o)m(v)m(erall)g(sub)5 b(ject.)70 b(\(Th)m(us,)42
-b(if)d(the)i(Do)s(cumen)m(t)g(is)e(in)g(part)i(a)330
-5230 y(textb)s(o)s(ok)24 b(of)g(mathematics,)i(a)e(Secondary)f(Section)
-g(ma)m(y)h(not)g(explain)e(an)m(y)i(mathematics.\))39
-b(The)330 5340 y(relationship)25 b(could)h(b)s(e)h(a)g(matter)i(of)e
-(historical)f(connection)h(with)f(the)i(sub)5 b(ject)27
-b(or)g(with)f(related)p eop
+65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330
+3033 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w)
+m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g
+(to)330 3143 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g
+(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5
+b(ject)30 b(matter)i(or)330 3252 y(whether)f(it)h(is)f(published)f(as)i
+(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h
+(License)g(principally)f(for)330 3362 y(w)m(orks)f(whose)h(purp)s(ose)d
+(is)j(instruction)f(or)g(reference.)199 3500 y(1.)61
+b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3639 y(This)39
+b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i
+(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3748
+y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying)
+h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330
+3858 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f
+(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d
+(in)330 3967 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j
+(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330
+4077 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h
+(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g
+(a)h(licensee,)i(and)330 4187 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40
+b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8
+b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330
+4296 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop)
+m(yrigh)m(t)j(la)m(w.)330 4435 y(A)i(\\Mo)s(di\014ed)f(V)-8
+b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f
+(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4544 y(a)k(p)s(ortion)f
+(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s
+(di\014cations)f(and/or)h(translated)g(in)m(to)330 4654
+y(another)31 b(language.)330 4792 y(A)26 b(\\Secondary)g(Section")h(is)
+f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f
+(the)g(Do)s(cumen)m(t)330 4902 y(that)c(deals)g(exclusiv)m(ely)h(with)e
+(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f
+(Do)s(cumen)m(t)330 5011 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m
+(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con)
+m(tains)h(nothing)f(that)330 5121 y(could)j(fall)h(directly)g(within)f
+(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42
+b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330
+5230 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section)
+h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40
+b(The)330 5340 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e
+(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27
+b(or)g(with)g(related)p eop end
%%Page: 132 138
-132 137 bop 150 -116 a Ft(132)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-330 299 y(matters,)38 b(or)d(of)h(legal,)g(commercial,)h
-(philosophical,)d(ethical)h(or)g(p)s(olitical)e(p)s(osition)h
-(regarding)330 408 y(them.)330 549 y(The)25 b(\\In)m(v)-5
-b(arian)m(t)26 b(Sections")g(are)g(certain)f(Secondary)h(Sections)f
-(whose)g(titles)g(are)h(designated,)h(as)330 659 y(b)s(eing)e(those)i
-(of)g(In)m(v)-5 b(arian)m(t)26 b(Sections,)i(in)d(the)i(notice)g(that)g
-(sa)m(ys)g(that)g(the)g(Do)s(cumen)m(t)g(is)f(released)330
-769 y(under)g(this)h(License.)39 b(If)27 b(a)h(section)g(do)s(es)g(not)
-f(\014t)h(the)g(ab)s(o)m(v)m(e)h(de\014nition)c(of)j(Secondary)f(then)h
-(it)f(is)330 878 y(not)32 b(allo)m(w)m(ed)g(to)g(b)s(e)g(designated)f
-(as)h(In)m(v)-5 b(arian)m(t.)45 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f
-(con)m(tain)h(zero)f(In)m(v)-5 b(arian)m(t)330 988 y(Sections.)38
-b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)e(an)m(y)i
-(In)m(v)-5 b(arian)m(t)24 b(Sections)h(then)f(there)h(are)g(none.)330
-1129 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)f
-(short)h(passages)g(of)g(text)g(that)h(are)f(listed,)g(as)f(F)-8
+TeXDict begin 132 137 bop 150 -116 a Ft(132)2527 b(Bash)31
+b(Reference)g(Man)m(ual)330 299 y(matters,)38 b(or)d(of)h(legal,)i
+(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s
+(osition)f(regarding)330 408 y(them.)330 549 y(The)25
+b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g
+(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330
+659 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)330 769 y(under)f(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 878
+y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5
+b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero)
+e(In)m(v)-5 b(arian)m(t)330 988 y(Sections.)39 b(If)25
+b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v)
+-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330
+1129 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g
+(short)g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8
b(ron)m(t-Co)m(v)m(er)330 1238 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m
-(er)j(T)-8 b(exts,)27 b(in)c(the)i(notice)h(that)f(sa)m(ys)h(that)g
-(the)f(Do)s(cumen)m(t)h(is)e(released)g(under)330 1348
-y(this)h(License.)39 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29
+(er)j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g
+(the)f(Do)s(cumen)m(t)h(is)f(released)g(under)330 1348
+y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29
b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)
g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1457
y(b)s(e)k(at)h(most)g(25)g(w)m(ords.)330 1598 y(A)36
b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h
-(means)g(a)g(mac)m(hine-readable)f(cop)m(y)-8 b(,)38
-b(represen)m(ted)330 1708 y(in)c(a)i(format)g(whose)g(sp)s
-(eci\014cation)e(is)h(a)m(v)-5 b(ailable)35 b(to)i(the)f(general)f
-(public,)g(that)h(is)f(suitable)f(for)330 1817 y(revising)c(the)i(do)s
-(cumen)m(t)f(straigh)m(tforw)m(ardly)g(with)f(generic)i(text)h(editors)
-e(or)g(\(for)h(images)g(com-)330 1927 y(p)s(osed)23 b(of)h(pixels\))e
-(generic)i(pain)m(t)f(programs)h(or)f(\(for)h(dra)m(wings\))f(some)h
-(widely)e(a)m(v)-5 b(ailable)23 b(dra)m(wing)330 2037
-y(editor,)29 b(and)g(that)g(is)f(suitable)g(for)h(input)e(to)j(text)g
-(formatters)f(or)g(for)g(automatic)h(translation)e(to)330
-2146 y(a)f(v)-5 b(ariet)m(y)27 b(of)g(formats)g(suitable)f(for)g(input)
-f(to)j(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)f(an)h
-(otherwise)330 2256 y(T)-8 b(ransparen)m(t)37 b(\014le)g(format)h
+(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38
+b(represen)m(ted)330 1708 y(in)d(a)h(format)g(whose)g(sp)s
+(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g
+(public,)h(that)f(is)g(suitable)g(for)330 1817 y(revising)c(the)g(do)s
+(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors)
+f(or)f(\(for)h(images)h(com-)330 1927 y(p)s(osed)23 b(of)h(pixels\))g
+(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g
+(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 2037
+y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g
+(formatters)f(or)g(for)g(automatic)i(translation)f(to)330
+2146 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input)
+g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g
+(otherwise)330 2256 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g
(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f
-(arranged)g(to)330 2365 y(th)m(w)m(art)27 b(or)g(discourage)f
-(subsequen)m(t)g(mo)s(di\014cation)f(b)m(y)i(readers)f(is)f(not)i(T)-8
+(arranged)g(to)330 2365 y(th)m(w)m(art)27 b(or)g(discourage)g
+(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8
b(ransparen)m(t.)39 b(An)27 b(image)330 2475 y(format)35
-b(is)e(not)i(T)-8 b(ransparen)m(t)34 b(if)f(used)h(for)g(an)m(y)g
-(substan)m(tial)f(amoun)m(t)i(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g
-(is)330 2585 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)e(called)h
-(\\Opaque".)330 2725 y(Examples)52 b(of)h(suitable)f(formats)h(for)g(T)
--8 b(ransparen)m(t)53 b(copies)g(include)e(plain)g Fl(asci)r(i)i
-Ft(without)330 2835 y(markup,)41 b(T)-8 b(exinfo)39 b(input)f(format,)k
-(LaT)1775 2855 y(E)1826 2835 y(X)d(input)f(format,)43
-b Fl(sgml)c Ft(or)g Fl(xml)g Ft(using)f(a)i(publicly)330
-2945 y(a)m(v)-5 b(ailable)31 b Fl(dtd)p Ft(,)g(and)g
-(standard-conforming)f(simple)g Fl(html)p Ft(,)h(P)m(ostScript)g(or)g
-Fl(pdf)g Ft(designed)f(for)330 3054 y(h)m(uman)37 b(mo)s(di\014cation.)
-63 b(Examples)37 b(of)h(transparen)m(t)g(image)h(formats)f(include)e
-Fl(png)p Ft(,)k Fl(x)n(cf)e Ft(and)330 3164 y Fl(jpg)p
-Ft(.)63 b(Opaque)38 b(formats)g(include)e(proprietary)h(formats)h(that)
-h(can)f(b)s(e)g(read)g(and)f(edited)h(only)330 3273 y(b)m(y)h
-(proprietary)f(w)m(ord)h(pro)s(cessors,)j Fl(sgml)c Ft(or)i
-Fl(xml)e Ft(for)i(whic)m(h)e(the)h Fl(dtd)g Ft(and/or)g(pro)s(cessing)
-330 3383 y(to)s(ols)31 b(are)g(not)g(generally)f(a)m(v)-5
-b(ailable,)31 b(and)f(the)h(mac)m(hine-generated)h Fl(html)p
-Ft(,)e(P)m(ostScript)h(or)g Fl(pdf)330 3493 y Ft(pro)s(duced)e(b)m(y)h
+b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g
+(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g
+(is)330 2585 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i
+(\\Opaque".)330 2725 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T)
+-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g
+Ft(without)330 2835 y(markup,)41 b(T)-8 b(exinfo)40 b(input)f(format,)j
+(LaT)1775 2855 y(E)1826 2835 y(X)d(input)g(format,)k
+Fl(sgml)c Ft(or)g Fl(xml)g Ft(using)g(a)h(publicly)330
+2945 y(a)m(v)-5 b(ailable)34 b Fl(dtd)p Ft(,)d(and)g
+(standard-conforming)g(simple)h Fl(html)p Ft(,)f(P)m(ostScript)h(or)f
+Fl(pdf)g Ft(designed)g(for)330 3054 y(h)m(uman)37 b(mo)s(di\014cation.)
+65 b(Examples)38 b(of)g(transparen)m(t)g(image)i(formats)e(include)g
+Fl(png)p Ft(,)i Fl(x)n(cf)e Ft(and)330 3164 y Fl(jpg)p
+Ft(.)63 b(Opaque)38 b(formats)g(include)g(proprietary)g(formats)g(that)
+h(can)f(b)s(e)g(read)g(and)f(edited)i(only)330 3273 y(b)m(y)g
+(proprietary)g(w)m(ord)g(pro)s(cessors,)j Fl(sgml)c Ft(or)i
+Fl(xml)e Ft(for)i(whic)m(h)f(the)g Fl(dtd)g Ft(and/or)g(pro)s(cessing)
+330 3383 y(to)s(ols)32 b(are)f(not)g(generally)h(a)m(v)-5
+b(ailable,)34 b(and)c(the)h(mac)m(hine-generated)i Fl(html)p
+Ft(,)d(P)m(ostScript)i(or)f Fl(pdf)330 3493 y Ft(pro)s(duced)e(b)m(y)h
(some)h(w)m(ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)e(only)-8
-b(.)330 3634 y(The)34 b(\\Title)f(P)m(age")k(means,)e(for)f(a)h(prin)m
-(ted)e(b)s(o)s(ok,)i(the)f(title)g(page)h(itself,)f(plus)f(suc)m(h)g
-(follo)m(wing)330 3743 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)f
-(legibly)-8 b(,)27 b(the)h(material)f(this)g(License)g(requires)f(to)i
-(app)s(ear)f(in)g(the)330 3853 y(title)f(page.)40 b(F)-8
-b(or)28 b(w)m(orks)e(in)f(formats)i(whic)m(h)f(do)g(not)h(ha)m(v)m(e)h
-(an)m(y)e(title)h(page)g(as)g(suc)m(h,)g(\\Title)f(P)m(age")330
-3962 y(means)31 b(the)f(text)i(near)e(the)h(most)g(prominen)m(t)f(app)s
-(earance)g(of)h(the)g(w)m(ork's)g(title,)f(preceding)g(the)330
-4072 y(b)s(eginning)e(of)i(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330
-4213 y(A)f(section)g(\\En)m(titled)f(XYZ")h(means)f(a)h(named)g
-(subunit)d(of)i(the)h(Do)s(cumen)m(t)h(whose)e(title)g(either)330
-4322 y(is)e(precisely)f(XYZ)i(or)f(con)m(tains)h(XYZ)g(in)e(paren)m
-(theses)j(follo)m(wing)d(text)j(that)f(translates)g(XYZ)f(in)330
-4432 y(another)e(language.)39 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g
-(sp)s(eci\014c)f(section)h(name)g(men)m(tioned)g(b)s(elo)m(w,)g(suc)m
-(h)330 4542 y(as)j(\\Ac)m(kno)m(wledgemen)m(ts",)k(\\Dedications",)d
-(\\Endorsemen)m(ts",)g(or)f(\\History".\))41 b(T)-8 b(o)29
-b(\\Preserv)m(e)330 4651 y(the)34 b(Title")f(of)g(suc)m(h)h(a)g
-(section)f(when)g(y)m(ou)h(mo)s(dify)d(the)j(Do)s(cumen)m(t)h(means)e
-(that)h(it)f(remains)g(a)330 4761 y(section)e(\\En)m(titled)e(XYZ")i
-(according)f(to)h(this)f(de\014nition.)330 4902 y(The)d(Do)s(cumen)m(t)
-i(ma)m(y)f(include)d(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)c(next)i(to)
-g(the)g(notice)g(whic)m(h)e(states)j(that)330 5011 y(this)k(License)g
-(applies)f(to)j(the)f(Do)s(cumen)m(t.)52 b(These)33 b(W)-8
-b(arran)m(t)m(y)36 b(Disclaimers)c(are)j(considered)d(to)330
-5121 y(b)s(e)37 b(included)e(b)m(y)i(reference)h(in)f(this)f(License,)j
-(but)e(only)g(as)h(regards)f(disclaiming)e(w)m(arran)m(ties:)330
-5230 y(an)m(y)i(other)g(implication)e(that)i(these)g(W)-8
-b(arran)m(t)m(y)39 b(Disclaimers)c(ma)m(y)j(ha)m(v)m(e)g(is)e(v)m(oid)g
-(and)g(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)e(of)i
-(this)e(License.)p eop
+b(.)330 3634 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m
+(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f
+(follo)m(wing)330 3743 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g
+(legibly)-8 b(,)30 b(the)e(material)h(this)f(License)g(requires)f(to)h
+(app)s(ear)f(in)h(the)330 3853 y(title)g(page.)40 b(F)-8
+b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h
+(an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330
+3962 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s
+(earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330
+4072 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330
+4213 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g
+(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330
+4322 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m
+(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330
+4432 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g
+(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m
+(h)330 4542 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e
+(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29
+b(\\Preserv)m(e)330 4651 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g
+(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e
+(that)h(it)g(remains)g(a)330 4761 y(section)e(\\En)m(titled)f(XYZ")g
+(according)g(to)g(this)g(de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t)
+i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)
+g(the)g(notice)h(whic)m(h)e(states)i(that)330 5011 y(this)34
+b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33
+b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330
+5121 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j
+(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330
+5230 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8
+b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g
+(and)f(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h
+(this)f(License.)p eop end
%%Page: 133 139
-133 138 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g
-(Man)m(ual)2062 b(133)199 299 y(2.)61 b(VERBA)-8 b(TIM)31
-b(COPYING)330 445 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)
-f(the)i(Do)s(cumen)m(t)h(in)e(an)m(y)h(medium,)g(either)g(commercially)
-f(or)330 555 y(noncommercially)-8 b(,)45 b(pro)m(vided)c(that)i(this)e
-(License,)46 b(the)c(cop)m(yrigh)m(t)h(notices,)j(and)c(the)h(license)
-330 664 y(notice)36 b(sa)m(ying)g(this)e(License)i(applies)d(to)k(the)f
-(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)h(all)f(copies,)k(and)330
-774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f(conditions)f(whatso)s(ev)m
-(er)j(to)f(those)g(of)g(this)e(License.)39 b(Y)-8 b(ou)27
-b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)33 b(measures)f(to)i
-(obstruct)f(or)g(con)m(trol)g(the)g(reading)f(or)h(further)e(cop)m
-(ying)i(of)g(the)g(copies)330 993 y(y)m(ou)25 b(mak)m(e)g(or)g
-(distribute.)36 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h
-(comp)s(ensation)e(in)f(exc)m(hange)k(for)d(copies.)330
-1103 y(If)32 b(y)m(ou)g(distribute)e(a)j(large)f(enough)g(n)m(um)m(b)s
-(er)f(of)h(copies)g(y)m(ou)g(m)m(ust)h(also)f(follo)m(w)f(the)h
-(conditions)330 1212 y(in)d(section)i(3.)330 1358 y(Y)-8
-b(ou)21 b(ma)m(y)h(also)e(lend)g(copies,)i(under)e(the)h(same)g
-(conditions)e(stated)j(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g
-(publicly)330 1468 y(displa)m(y)29 b(copies.)199 1614
+TeXDict begin 133 138 bop 150 -116 a Ft(App)s(endix)29
+b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(133)199 299
+y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)330 445 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
+555 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f
+(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42
+b(the)h(license)330 664 y(notice)37 b(sa)m(ying)g(this)e(License)i
+(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g
+(copies,)j(and)330 774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f
+(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f(License.)40
+b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)35
+b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g
+(further)e(cop)m(ying)j(of)f(the)g(copies)330 993 y(y)m(ou)25
+b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28
+b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d
+(copies.)330 1103 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f
+(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g
+(the)f(conditions)330 1212 y(in)e(section)i(3.)330 1358
+y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g
+(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g
+(publicly)330 1468 y(displa)m(y)31 b(copies.)199 1614
y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1760 y(If)25
-b(y)m(ou)g(publish)d(prin)m(ted)h(copies)i(\(or)h(copies)f(in)f(media)g
-(that)i(commonly)f(ha)m(v)m(e)h(prin)m(ted)e(co)m(v)m(ers\))j(of)330
-1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)d(more)i(than)f
-(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)d(notice)i(requires)330
-1979 y(Co)m(v)m(er)j(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)h
-(the)f(copies)g(in)f(co)m(v)m(ers)j(that)f(carry)-8 b(,)36
-b(clearly)d(and)h(legibly)-8 b(,)34 b(all)330 2089 y(these)40
-b(Co)m(v)m(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41
+b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g
+(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330
+1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f
+(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330
+1979 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i
+(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36
+b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 2089 y(these)j(Co)m(v)m
+(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41
b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44
b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330
2198 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m)
-m(ust)e(also)g(clearly)f(and)h(legibly)e(iden)m(tify)g(y)m(ou)j(as)f
-(the)h(publisher)330 2308 y(of)k(these)h(copies.)52 b(The)34
-b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)d(title)i
-(with)e(all)i(w)m(ords)f(of)i(the)f(title)330 2418 y(equally)c
-(prominen)m(t)f(and)h(visible.)40 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g
-(other)g(material)f(on)h(the)g(co)m(v)m(ers)h(in)d(addition.)330
-2527 y(Cop)m(ying)35 b(with)g(c)m(hanges)i(limited)d(to)j(the)g(co)m(v)
-m(ers,)i(as)d(long)g(as)h(they)f(preserv)m(e)g(the)h(title)e(of)i(the)
-330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)h(these)g(conditions,)h(can)f
-(b)s(e)g(treated)h(as)f(v)m(erbatim)g(cop)m(ying)g(in)f(other)330
-2746 y(resp)s(ects.)330 2892 y(If)c(the)h(required)e(texts)j(for)e
-(either)g(co)m(v)m(er)j(are)e(to)s(o)g(v)m(oluminous)e(to)i(\014t)g
-(legibly)-8 b(,)32 b(y)m(ou)h(should)e(put)330 3002 y(the)i(\014rst)f
-(ones)h(listed)e(\(as)j(man)m(y)f(as)g(\014t)g(reasonably\))f(on)h(the)
-g(actual)g(co)m(v)m(er,)i(and)e(con)m(tin)m(ue)g(the)330
-3112 y(rest)e(on)m(to)g(adjacen)m(t)h(pages.)330 3258
-y(If)27 b(y)m(ou)g(publish)c(or)k(distribute)e(Opaque)h(copies)h(of)g
-(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)e(more)j(than)e(100,)330
-3367 y(y)m(ou)i(m)m(ust)g(either)g(include)d(a)k(mac)m(hine-readable)e
-(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)f(with)e(eac)m(h)j(Opaque)
-330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)e(or)h(with)f(eac)m(h)i
-(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)f(from)f
-(whic)m(h)330 3587 y(the)24 b(general)h(net)m(w)m(ork-using)f(public)d
-(has)j(access)i(to)f(do)m(wnload)e(using)g(public-standard)e(net)m(w)m
-(ork)330 3696 y(proto)s(cols)39 b(a)g(complete)g(T)-8
+m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f
+(the)h(publisher)330 2308 y(of)k(these)h(copies.)53 b(The)34
+b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i
+(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2418 y(equally)e
+(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g
+(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330
+2527 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v)
+m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the)
+330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d
+(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330
+2746 y(resp)s(ects.)330 2892 y(If)32 b(the)h(required)f(texts)i(for)e
+(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g
+(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 3002 y(the)h(\014rst)f
+(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the)
+g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330
+3112 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3258
+y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f
+(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330
+3367 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g
+(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque)
+330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h
+(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d
+(whic)m(h)330 3587 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e
+(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m
+(ork)330 3696 y(proto)s(cols)40 b(a)f(complete)h(T)-8
b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g
-(added)f(material.)65 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)g
-(option,)h(y)m(ou)g(m)m(ust)e(tak)m(e)j(reasonably)d(pruden)m(t)f
-(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)c(of)j
-(Opaque)g(copies)g(in)e(quan)m(tit)m(y)-8 b(,)42 b(to)c(ensure)g(that)h
-(this)e(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330
-4025 y(remain)29 b(th)m(us)h(accessible)g(at)h(the)f(stated)h(lo)s
-(cation)f(un)m(til)e(at)j(least)g(one)f(y)m(ear)h(after)g(the)f(last)g
-(time)330 4134 y(y)m(ou)37 b(distribute)d(an)j(Opaque)f(cop)m(y)i
-(\(directly)e(or)g(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))f
-(of)h(that)330 4244 y(edition)29 b(to)i(the)g(public.)330
-4390 y(It)k(is)e(requested,)j(but)e(not)h(required,)f(that)h(y)m(ou)g
+(added)f(material.)67 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)h
+(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e
+(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)f(of)g
+(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38
+b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330
+4025 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s
+(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h
+(time)330 4134 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i
+(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h
+(of)f(that)330 4244 y(edition)31 b(to)g(the)g(public.)330
+4390 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g
(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330
-4500 y(b)s(efore)28 b(redistributing)d(an)m(y)k(large)g(n)m(um)m(b)s
-(er)e(of)i(copies,)g(to)g(giv)m(e)g(them)g(a)g(c)m(hance)h(to)f(pro)m
-(vide)f(y)m(ou)330 4609 y(with)h(an)h(up)s(dated)f(v)m(ersion)h(of)h
+4500 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s
+(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m
+(vide)g(y)m(ou)330 4609 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g
(the)f(Do)s(cumen)m(t.)199 4755 y(4.)61 b(MODIFICA)-8
-b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)e(a)
-j(Mo)s(di\014ed)e(V)-8 b(ersion)25 b(of)h(the)g(Do)s(cumen)m(t)g(under)
-e(the)h(conditions)330 5011 y(of)c(sections)g(2)h(and)e(3)h(ab)s(o)m(v)
-m(e,)k(pro)m(vided)19 b(that)j(y)m(ou)f(release)h(the)f(Mo)s(di\014ed)e
-(V)-8 b(ersion)21 b(under)e(precisely)330 5121 y(this)28
-b(License,)h(with)f(the)h(Mo)s(di\014ed)e(V)-8 b(ersion)29
-b(\014lling)d(the)j(role)g(of)g(the)g(Do)s(cumen)m(t,)h(th)m(us)f
-(licensing)330 5230 y(distribution)h(and)k(mo)s(di\014cation)e(of)j
-(the)f(Mo)s(di\014ed)e(V)-8 b(ersion)34 b(to)h(who)s(ev)m(er)f(p)s
-(ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)40 b(In)30
-b(addition,)f(y)m(ou)h(m)m(ust)h(do)f(these)h(things)e(in)g(the)i(Mo)s
-(di\014ed)d(V)-8 b(ersion:)p eop
+b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a)
+h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under)
+e(the)h(conditions)330 5011 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v)
+m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f
+(V)-8 b(ersion)22 b(under)d(precisely)330 5121 y(this)29
+b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30
+b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f
+(licensing)330 5230 y(distribution)k(and)h(mo)s(di\014cation)g(of)h
+(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s
+(ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)41 b(In)30
+b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s
+(di\014ed)e(V)-8 b(ersion:)p eop end
%%Page: 134 140
-134 139 bop 150 -116 a Ft(134)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-357 299 y(A.)60 b(Use)33 b(in)e(the)i(Title)f(P)m(age)i(\(and)f(on)f
-(the)h(co)m(v)m(ers,)i(if)d(an)m(y\))h(a)g(title)f(distinct)f(from)i
-(that)g(of)g(the)510 408 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f
-(previous)e(v)m(ersions)h(\(whic)m(h)g(should,)g(if)g(there)h(w)m(ere)g
-(an)m(y)-8 b(,)510 518 y(b)s(e)31 b(listed)f(in)g(the)h(History)g
-(section)g(of)h(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)f(as)510 628 y(a)g(previous)e(v)m
-(ersion)g(if)h(the)g(original)f(publisher)e(of)j(that)h(v)m(ersion)f
-(giv)m(es)h(p)s(ermission.)360 758 y(B.)61 b(List)30
-b(on)g(the)h(Title)e(P)m(age,)k(as)d(authors,)h(one)g(or)f(more)h(p)s
-(ersons)e(or)h(en)m(tities)h(resp)s(onsible)c(for)510
-867 y(authorship)d(of)i(the)h(mo)s(di\014cations)d(in)h(the)h(Mo)s
-(di\014ed)e(V)-8 b(ersion,)27 b(together)h(with)c(at)j(least)g(\014v)m
-(e)510 977 y(of)d(the)g(principal)d(authors)i(of)i(the)f(Do)s(cumen)m
-(t)g(\(all)f(of)i(its)e(principal)e(authors,)k(if)e(it)g(has)h(few)m
-(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)e(they)i(release)f(y)m
-(ou)h(from)f(this)f(requiremen)m(t.)359 1217 y(C.)60
-b(State)32 b(on)e(the)h(Title)f(page)h(the)g(name)g(of)g(the)g
-(publisher)c(of)k(the)g(Mo)s(di\014ed)e(V)-8 b(ersion,)31
-b(as)g(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31
-b(all)e(the)i(cop)m(yrigh)m(t)g(notices)f(of)h(the)f(Do)s(cumen)m(t.)
-363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)e(cop)m(yrigh)m(t)i
-(notice)f(for)h(y)m(our)f(mo)s(di\014cations)e(adjacen)m(t)k(to)f(the)g
-(other)510 1696 y(cop)m(yrigh)m(t)f(notices.)365 1826
-y(F.)61 b(Include,)27 b(immediately)f(after)i(the)h(cop)m(yrigh)m(t)f
-(notices,)h(a)f(license)f(notice)h(giving)f(the)h(public)510
-1936 y(p)s(ermission)21 b(to)26 b(use)e(the)g(Mo)s(di\014ed)f(V)-8
-b(ersion)24 b(under)f(the)i(terms)f(of)h(this)e(License,)j(in)d(the)h
-(form)510 2045 y(sho)m(wn)30 b(in)f(the)h(Addendum)f(b)s(elo)m(w.)353
-2176 y(G.)61 b(Preserv)m(e)23 b(in)f(that)h(license)f(notice)h(the)g
-(full)e(lists)g(of)i(In)m(v)-5 b(arian)m(t)22 b(Sections)h(and)f
-(required)f(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)f(in)f
-(the)i(Do)s(cumen)m(t's)g(license)f(notice.)357 2415
-y(H.)60 b(Include)29 b(an)h(unaltered)f(cop)m(y)i(of)g(this)e(License.)
-392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)g(En)m(titled)f
-(\\History",)i(Preserv)m(e)g(its)e(Title,)h(and)f(add)h(to)h(it)e(an)h
-(item)510 2655 y(stating)c(at)h(least)f(the)h(title,)f(y)m(ear,)i(new)d
-(authors,)i(and)e(publisher)d(of)29 b(the)f(Mo)s(di\014ed)e(V)-8
-b(ersion)510 2765 y(as)32 b(giv)m(en)f(on)g(the)h(Title)e(P)m(age.)45
-b(If)31 b(there)h(is)e(no)h(section)h(En)m(titled)e(\\History")i(in)e
-(the)h(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)g(the)g
-(title,)g(y)m(ear,)i(authors,)f(and)e(publisher)d(of)k(the)g(Do)s
-(cumen)m(t)510 2984 y(as)h(giv)m(en)g(on)g(its)g(Title)f(P)m(age,)k
-(then)d(add)g(an)g(item)f(describing)f(the)i(Mo)s(di\014ed)f(V)-8
-b(ersion)36 b(as)510 3093 y(stated)31 b(in)e(the)i(previous)e(sen)m
+TeXDict begin 134 139 bop 150 -116 a Ft(134)2527 b(Bash)31
+b(Reference)g(Man)m(ual)357 299 y(A.)60 b(Use)33 b(in)f(the)h(Title)h
+(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e(an)m(y\))g(a)g
+(title)h(distinct)f(from)g(that)g(of)g(the)510 408 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(,)510 518
+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 628 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
+758 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h
+(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c
+(for)510 867 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g
+(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h
+(\014v)m(e)510 977 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s
+(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g
+(few)m(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g
+(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1217 y(C.)60
+b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g
+(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32
+b(as)f(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31
+b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.)
+363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i
+(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g
+(other)510 1696 y(cop)m(yrigh)m(t)g(notices.)365 1826
+y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g
+(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510
+1936 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8
+b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g
+(form)510 2045 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353
+2176 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f
+(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e
+(required)g(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)g(in)f
+(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2415
+y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.)
+392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g
+(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g
+(item)510 2655 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d
+(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8
+b(ersion)510 2765 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45
+b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e
+(the)g(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f
+(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s
+(cumen)m(t)510 2984 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i
+(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8
+b(ersion)37 b(as)510 3093 y(stated)31 b(in)f(the)h(previous)f(sen)m
(tence.)378 3224 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s
-(cation,)g(if)e(an)m(y)-8 b(,)34 b(giv)m(en)e(in)g(the)g(Do)s(cumen)m
-(t)h(for)g(public)c(access)34 b(to)510 3333 y(a)e(T)-8
-b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m
-(ewise)e(the)j(net)m(w)m(ork)g(lo)s(cations)e(giv)m(en)h(in)510
-3443 y(the)h(Do)s(cumen)m(t)g(for)g(previous)e(v)m(ersions)h(it)g(w)m
-(as)h(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)g(in)g(the)
-510 3552 y(\\History")26 b(section.)39 b(Y)-8 b(ou)25
-b(ma)m(y)h(omit)f(a)g(net)m(w)m(ork)h(lo)s(cation)e(for)h(a)h(w)m(ork)f
-(that)g(w)m(as)h(published)510 3662 y(at)36 b(least)g(four)f(y)m(ears)i
-(b)s(efore)e(the)h(Do)s(cumen)m(t)h(itself,)f(or)f(if)g(the)h(original)
-e(publisher)e(of)k(the)510 3771 y(v)m(ersion)30 b(it)g(refers)g(to)h
-(giv)m(es)g(p)s(ermission.)354 3902 y(K.)60 b(F)-8 b(or)24
-b(an)m(y)h(section)e(En)m(titled)g(\\Ac)m(kno)m(wledgemen)m(ts")j(or)e
-(\\Dedications",)i(Preserv)m(e)e(the)g(Title)510 4011
-y(of)j(the)f(section,)i(and)e(preserv)m(e)h(in)e(the)i(section)f(all)g
-(the)g(substance)h(and)f(tone)h(of)f(eac)m(h)i(of)f(the)510
-4121 y(con)m(tributor)j(ac)m(kno)m(wledgemen)m(ts)i(and/or)e
-(dedications)f(giv)m(en)i(therein.)368 4251 y(L.)60 b(Preserv)m(e)36
-b(all)e(the)i(In)m(v)-5 b(arian)m(t)35 b(Sections)g(of)g(the)h(Do)s
-(cumen)m(t,)h(unaltered)e(in)f(their)g(text)j(and)510
-4361 y(in)e(their)g(titles.)56 b(Section)36 b(n)m(um)m(b)s(ers)e(or)i
-(the)g(equiv)-5 b(alen)m(t)36 b(are)g(not)g(considered)f(part)h(of)g
-(the)510 4470 y(section)31 b(titles.)341 4600 y(M.)61
-b(Delete)32 b(an)m(y)f(section)g(En)m(titled)e(\\Endorsemen)m(ts".)42
-b(Suc)m(h)30 b(a)i(section)e(ma)m(y)i(not)f(b)s(e)f(included)510
-4710 y(in)f(the)i(Mo)s(di\014ed)d(V)-8 b(ersion.)357
-4840 y(N.)60 b(Do)29 b(not)g(retitle)f(an)m(y)g(existing)g(section)g
-(to)h(b)s(e)f(En)m(titled)f(\\Endorsemen)m(ts")i(or)f(to)h(con\015ict)f
-(in)510 4950 y(title)i(with)f(an)m(y)i(In)m(v)-5 b(arian)m(t)30
+(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m
+(t)h(for)g(public)e(access)j(to)510 3333 y(a)e(T)-8 b(ransparen)m(t)30
+b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net)
+m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3443 y(the)g(Do)s(cumen)m
+(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45
+b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3552
+y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net)
+m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h
+(published)510 3662 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e
+(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher)
+d(of)i(the)510 3771 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s
+(ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m
+(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k
+(Preserv)m(e)c(the)g(Title)510 4011 y(of)j(the)f(section,)j(and)d
+(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone)
+h(of)f(eac)m(h)i(of)f(the)510 4121 y(con)m(tributor)k(ac)m(kno)m
+(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368
+4251 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5
+b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f
+(in)f(their)g(text)i(and)510 4361 y(in)f(their)g(titles.)58
+b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5
+b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510
+4470 y(section)c(titles.)341 4600 y(M.)61 b(Delete)33
+b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42
+b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510
+4710 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357
+4840 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f
+(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g
+(in)510 4950 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31
b(Section.)354 5080 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8
-b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)f
-(V)-8 b(ersion)33 b(includes)e(new)i(fron)m(t-matter)i(sections)e(or)g
-(app)s(endices)f(that)i(qualify)330 5340 y(as)28 b(Secondary)g
-(Sections)f(and)g(con)m(tain)i(no)e(material)h(copied)f(from)g(the)h
-(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop
+b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)g
+(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f
+(app)s(endices)g(that)h(qualify)330 5340 y(as)28 b(Secondary)g
+(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h
+(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop end
%%Page: 135 141
-135 140 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g
-(Man)m(ual)2062 b(135)330 299 y(y)m(our)32 b(option)g(designate)h(some)
-f(or)h(all)e(of)h(these)h(sections)g(as)f(in)m(v)-5 b(arian)m(t.)46
-b(T)-8 b(o)33 b(do)f(this,)g(add)g(their)330 408 y(titles)j(to)h(the)f
-(list)f(of)i(In)m(v)-5 b(arian)m(t)35 b(Sections)g(in)f(the)i(Mo)s
-(di\014ed)e(V)-8 b(ersion's)35 b(license)f(notice.)56
-b(These)330 518 y(titles)30 b(m)m(ust)g(b)s(e)g(distinct)f(from)g(an)m
-(y)i(other)g(section)f(titles.)330 650 y(Y)-8 b(ou)43
-b(ma)m(y)g(add)f(a)g(section)h(En)m(titled)e(\\Endorsemen)m(ts",)46
-b(pro)m(vided)41 b(it)h(con)m(tains)g(nothing)g(but)330
-759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)f(V)-8
-b(ersion)30 b(b)m(y)f(v)-5 b(arious)29 b(parties|for)g(example,)g
-(statemen)m(ts)j(of)330 869 y(p)s(eer)27 b(review)f(or)h(that)h(the)f
-(text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)f
-(as)g(the)h(authoritativ)m(e)330 978 y(de\014nition)g(of)j(a)f
-(standard.)330 1110 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g
-(up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)
-30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330
-1219 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8
-b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)f(of)h(Co)m(v)m(er)h(T)-8
-b(exts)27 b(in)f(the)i(Mo)s(di\014ed)330 1329 y(V)-8
-b(ersion.)57 b(Only)34 b(one)i(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m
-(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8
-b(ext)36 b(ma)m(y)h(b)s(e)330 1439 y(added)27 b(b)m(y)g(\(or)h(through)
-f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8
-b(.)41 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1548
-y(includes)k(a)i(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m(er,)h
-(previously)c(added)h(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m(t)330
-1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)h(y)m(ou)g(are)f
-(acting)h(on)f(b)s(ehalf)e(of,)k(y)m(ou)f(ma)m(y)g(not)f(add)g
-(another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)f(the)g(old)f
-(one,)j(on)e(explicit)e(p)s(ermission)f(from)i(the)i(previous)d
-(publisher)e(that)330 1877 y(added)g(the)g(old)g(one.)330
-2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))d(of)k(the)f(Do)s
-(cumen)m(t)h(do)g(not)f(b)m(y)h(this)e(License)h(giv)m(e)h(p)s
-(ermission)330 2118 y(to)31 b(use)f(their)f(names)i(for)f(publicit)m(y)
-d(for)k(or)f(to)h(assert)g(or)f(imply)e(endorsemen)m(t)i(of)h(an)m(y)g
+TeXDict begin 135 140 bop 150 -116 a Ft(App)s(endix)29
+b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(135)330 299
+y(y)m(our)32 b(option)h(designate)h(some)e(or)h(all)g(of)f(these)h
+(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33
+b(do)f(this,)h(add)f(their)330 408 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 518
+y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g
+(section)g(titles.)330 650 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)
+i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g
+(nothing)g(but)330 759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s
+(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30
+b(parties|for)g(example,)g(statemen)m(ts)i(of)330 869
+y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro)
+m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330
+978 y(de\014nition)i(of)h(a)f(standard.)330 1110 y(Y)-8
+b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m
+(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8
+b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1219 y(to)g(25)g(w)m(ords)e
+(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i
+(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s
+(di\014ed)330 1329 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f
+(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m
+(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1439
+y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\))
+g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)
+g(already)330 1548 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g
+(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m
+(y)g(arrangemen)m(t)330 1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m
+(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g
+(not)f(add)g(another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)g(the)
+f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e
+(publisher)f(that)330 1877 y(added)e(the)g(old)h(one.)330
+2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s
+(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s
+(ermission)330 2118 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g
+(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g
(Mo)s(di\014ed)330 2228 y(V)-8 b(ersion.)199 2359 y(5.)61
b(COMBINING)31 b(DOCUMENTS)330 2491 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m
-(bine)g(the)g(Do)s(cumen)m(t)g(with)f(other)g(do)s(cumen)m(ts)h
-(released)f(under)g(this)f(License,)330 2600 y(under)g(the)h(terms)g
-(de\014ned)f(in)g(section)h(4)h(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)e
-(v)m(ersions,)k(pro)m(vided)d(that)i(y)m(ou)330 2710
-y(include)23 b(in)h(the)h(com)m(bination)g(all)f(of)i(the)f(In)m(v)-5
-b(arian)m(t)25 b(Sections)g(of)h(all)e(of)h(the)h(original)d(do)s
-(cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)i(and)h(list)f(them)i(all)e
-(as)i(In)m(v)-5 b(arian)m(t)27 b(Sections)f(of)h(y)m(our)g(com)m(bined)
-f(w)m(ork)g(in)g(its)g(license)330 2929 y(notice,)31
-b(and)f(that)h(y)m(ou)f(preserv)m(e)h(all)e(their)h(W)-8
-b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)f(w)m
-(ork)i(need)e(only)h(con)m(tain)g(one)h(cop)m(y)g(of)f(this)f(License,)
-i(and)e(m)m(ultiple)f(iden)m(tical)330 3170 y(In)m(v)-5
-b(arian)m(t)32 b(Sections)g(ma)m(y)h(b)s(e)f(replaced)g(with)f(a)i
-(single)e(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)d(In)m
-(v)-5 b(arian)m(t)330 3280 y(Sections)26 b(with)g(the)h(same)g(name)g
-(but)f(di\013eren)m(t)g(con)m(ten)m(ts,)j(mak)m(e)f(the)f(title)f(of)h
-(eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)32 b(b)m(y)i(adding)e
-(at)j(the)f(end)g(of)g(it,)g(in)f(paren)m(theses,)j(the)e(name)g(of)g
-(the)g(original)e(author)i(or)330 3499 y(publisher)21
-b(of)k(that)h(section)f(if)f(kno)m(wn,)i(or)f(else)g(a)g(unique)e(n)m
+(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h
+(released)g(under)f(this)g(License,)330 2600 y(under)f(the)h(terms)g
+(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f
+(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2710
+y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5
+b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s
+(cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g
+(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined)
+g(w)m(ork)f(in)h(its)g(license)330 2929 y(notice,)32
+b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8
+b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)g(w)m
+(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,)
+i(and)d(m)m(ultiple)i(iden)m(tical)330 3170 y(In)m(v)-5
+b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h
+(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m
+(v)-5 b(arian)m(t)330 3280 y(Sections)27 b(with)g(the)g(same)g(name)g
+(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f
+(eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)33 b(b)m(y)h(adding)f
+(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g
+(the)g(original)h(author)f(or)330 3499 y(publisher)23
+b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m
(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330
-3608 y(to)g(the)g(section)f(titles)g(in)f(the)i(list)e(of)h(In)m(v)-5
-b(arian)m(t)25 b(Sections)f(in)f(the)h(license)g(notice)h(of)f(the)h
+3608 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5
+b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h
(com)m(bined)330 3718 y(w)m(ork.)330 3850 y(In)41 b(the)g(com)m
-(bination,)j(y)m(ou)d(m)m(ust)g(com)m(bine)g(an)m(y)h(sections)f(En)m
-(titled)f(\\History")i(in)e(the)h(v)-5 b(ari-)330 3959
-y(ous)32 b(original)e(do)s(cumen)m(ts,)j(forming)e(one)h(section)g(En)m
-(titled)f(\\History";)j(lik)m(ewise)d(com)m(bine)h(an)m(y)330
-4069 y(sections)g(En)m(titled)e(\\Ac)m(kno)m(wledgemen)m(ts",)35
-b(and)c(an)m(y)h(sections)g(En)m(titled)f(\\Dedications".)45
-b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)h(all)e(sections)i(En)m
-(titled)e(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28
+(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g
+(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330
+3959 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h
+(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330
+4069 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31
+b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47
+b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m
+(titled)f(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28
b(OF)i(DOCUMENTS)330 4441 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f
-(collection)f(consisting)g(of)h(the)g(Do)s(cumen)m(t)g(and)g(other)g
-(do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)g(License,)k
-(and)d(replace)g(the)h(individual)38 b(copies)k(of)g(this)f(License)h
-(in)f(the)i(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42
-b(with)f(a)i(single)e(cop)m(y)j(that)f(is)e(included)f(in)h(the)i
-(collection,)i(pro)m(vided)c(that)j(y)m(ou)330 4770 y(follo)m(w)36
-b(the)i(rules)d(of)i(this)f(License)h(for)g(v)m(erbatim)g(cop)m(ying)g
-(of)g(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)g(all)330
+(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g
+(do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)h(License,)k
+(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f
+(the)h(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 b(with)g(a)h(single)
+g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48
+b(pro)m(vided)42 b(that)i(y)m(ou)330 4770 y(follo)m(w)38
+b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g
+(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330
4880 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32
-b(ma)m(y)g(extract)h(a)f(single)e(do)s(cumen)m(t)h(from)g(suc)m(h)g(a)h
-(collection,)f(and)g(distribute)e(it)i(individu-)330
-5121 y(ally)j(under)f(this)h(License,)i(pro)m(vided)e(y)m(ou)h(insert)f
-(a)h(cop)m(y)h(of)f(this)f(License)g(in)m(to)h(the)h(extracted)330
-5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)g(this)f(License)h(in)g(all)f
-(other)i(resp)s(ects)f(regarding)g(v)m(erbatim)g(cop)m(ying)h(of)330
-5340 y(that)e(do)s(cumen)m(t.)p eop
+b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h
+(collection,)i(and)d(distribute)g(it)h(individu-)330
+5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g
+(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330
+5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g
+(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330
+5340 y(that)d(do)s(cumen)m(t.)p eop end
%%Page: 136 142
-136 141 bop 150 -116 a Ft(136)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m
-(ORKS)330 428 y(A)d(compilation)f(of)h(the)g(Do)s(cumen)m(t)h(or)f(its)
-f(deriv)-5 b(ativ)m(es)28 b(with)e(other)j(separate)g(and)e(indep)s
-(enden)m(t)330 538 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)e(or)i
-(on)f(a)g(v)m(olume)g(of)h(a)f(storage)i(or)e(distribution)d(medium,)i
-(is)h(called)330 648 y(an)d(\\aggregate")k(if)29 b(the)h(cop)m(yrigh)m
-(t)h(resulting)d(from)h(the)i(compilation)d(is)h(not)i(used)e(to)i
-(limit)d(the)330 757 y(legal)e(righ)m(ts)g(of)h(the)g(compilation's)e
-(users)h(b)s(ey)m(ond)g(what)g(the)h(individual)22 b(w)m(orks)k(p)s
-(ermit.)38 b(When)330 867 y(the)28 b(Do)s(cumen)m(t)g(is)f(included)e
-(an)i(aggregate,)32 b(this)26 b(License)h(do)s(es)h(not)g(apply)e(to)i
-(the)g(other)g(w)m(orks)330 976 y(in)h(the)i(aggregate)i(whic)m(h)c
-(are)i(not)f(themselv)m(es)h(deriv)-5 b(ativ)m(e)30 b(w)m(orks)g(of)h
-(the)f(Do)s(cumen)m(t.)330 1106 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8
-b(ext)23 b(requiremen)m(t)f(of)h(section)g(3)g(is)f(applicable)f(to)i
-(these)h(copies)e(of)h(the)g(Do)s(cumen)m(t,)330 1215
-y(then)f(if)f(the)i(Do)s(cumen)m(t)g(is)f(less)f(than)h(one)h(half)e
-(of)i(the)g(en)m(tire)f(aggregate,)27 b(the)c(Do)s(cumen)m(t's)g(Co)m
-(v)m(er)330 1325 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)g(on)h(co)m
-(v)m(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)d(the)j
-(aggregate,)j(or)d(the)330 1435 y(electronic)35 b(equiv)-5
-b(alen)m(t)34 b(of)i(co)m(v)m(ers)g(if)e(the)h(Do)s(cumen)m(t)h(is)e
-(in)g(electronic)h(form.)54 b(Otherwise)34 b(they)330
-1544 y(m)m(ust)c(app)s(ear)g(on)g(prin)m(ted)f(co)m(v)m(ers)j(that)f
-(brac)m(k)m(et)h(the)f(whole)e(aggregate.)199 1674 y(8.)61
-b(TRANSLA)-8 b(TION)330 1803 y(T)g(ranslation)39 b(is)g(considered)f(a)
-j(kind)d(of)i(mo)s(di\014cation,)h(so)f(y)m(ou)g(ma)m(y)h(distribute)c
+TeXDict begin 136 141 bop 150 -116 a Ft(136)2527 b(Bash)31
+b(Reference)g(Man)m(ual)199 299 y(7.)61 b(A)m(GGREGA)-8
+b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 428 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
+538 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m
+(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called)
+330 648 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e
+(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330
+757 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m
+(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39
+b(When)330 867 y(the)28 b(Do)s(cumen)m(t)g(is)g(included)f(an)g
+(aggregate,)32 b(this)27 b(License)h(do)s(es)g(not)g(apply)f(to)h(the)g
+(other)g(w)m(orks)330 976 y(in)i(the)h(aggregate)i(whic)m(h)d(are)h
+(not)f(themselv)m(es)i(deriv)-5 b(ativ)m(e)32 b(w)m(orks)e(of)h(the)f
+(Do)s(cumen)m(t.)330 1106 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8
+b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f
+(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1215
+y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f
+(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m
+(er)330 1325 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m
+(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h
+(aggregate,)j(or)d(the)330 1435 y(electronic)37 b(equiv)-5
+b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f
+(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330
+1544 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f
+(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1674 y(8.)61
+b(TRANSLA)-8 b(TION)330 1803 y(T)g(ranslation)41 b(is)f(considered)f(a)
+i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e
(translations)330 1913 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h
-(terms)h(of)f(section)h(4.)83 b(Replacing)43 b(In)m(v)-5
-b(arian)m(t)44 b(Sections)g(with)330 2022 y(translations)g(requires)g
-(sp)s(ecial)g(p)s(ermission)f(from)i(their)f(cop)m(yrigh)m(t)i
-(holders,)i(but)d(y)m(ou)g(ma)m(y)330 2132 y(include)22
-b(translations)i(of)g(some)h(or)g(all)e(In)m(v)-5 b(arian)m(t)24
-b(Sections)g(in)f(addition)g(to)i(the)g(original)e(v)m(ersions)330
-2242 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)32 b(Sections.)43
-b(Y)-8 b(ou)32 b(ma)m(y)g(include)d(a)j(translation)e(of)i(this)e
-(License,)i(and)e(all)h(the)330 2351 y(license)40 b(notices)h(in)f(the)
-i(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42
-b(Disclaimers,)h(pro)m(vided)d(that)i(y)m(ou)330 2461
-y(also)e(include)e(the)i(original)e(English)g(v)m(ersion)h(of)h(this)f
-(License)h(and)f(the)h(original)e(v)m(ersions)i(of)330
-2570 y(those)35 b(notices)f(and)f(disclaimers.)50 b(In)33
-b(case)i(of)g(a)f(disagreemen)m(t)g(b)s(et)m(w)m(een)h(the)f
-(translation)g(and)330 2680 y(the)h(original)f(v)m(ersion)g(of)i(this)e
-(License)h(or)g(a)g(notice)h(or)f(disclaimer,)f(the)i(original)d(v)m
-(ersion)i(will)330 2790 y(prev)-5 b(ail.)330 2919 y(If)28
-b(a)h(section)g(in)e(the)i(Do)s(cumen)m(t)h(is)d(En)m(titled)h(\\Ac)m
-(kno)m(wledgemen)m(ts",)j(\\Dedications",)f(or)f(\\His-)330
-3029 y(tory",)f(the)f(requiremen)m(t)e(\(section)i(4\))g(to)g(Preserv)m
-(e)g(its)e(Title)h(\(section)g(1\))h(will)d(t)m(ypically)h(require)330
-3138 y(c)m(hanging)30 b(the)h(actual)g(title.)199 3268
-y(9.)61 b(TERMINA)-8 b(TION)330 3397 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m
-(y)-8 b(,)31 b(mo)s(dify)-8 b(,)29 b(sublicense,)f(or)i(distribute)d
-(the)j(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3507
-y(pro)m(vided)40 b(for)i(under)e(this)h(License.)74 b(An)m(y)42
-b(other)g(attempt)h(to)g(cop)m(y)-8 b(,)46 b(mo)s(dify)-8
-b(,)43 b(sublicense)d(or)330 3616 y(distribute)34 b(the)j(Do)s(cumen)m
-(t)g(is)f(v)m(oid,)i(and)e(will)e(automatically)i(terminate)h(y)m(our)f
-(righ)m(ts)g(under)330 3726 y(this)27 b(License.)39 b(Ho)m(w)m(ev)m
-(er,)31 b(parties)c(who)g(ha)m(v)m(e)i(receiv)m(ed)f(copies,)h(or)e
-(righ)m(ts,)h(from)g(y)m(ou)g(under)e(this)330 3836 y(License)36
-b(will)e(not)j(ha)m(v)m(e)h(their)e(licenses)f(terminated)i(so)g(long)f
-(as)h(suc)m(h)f(parties)g(remain)g(in)f(full)330 3945
-y(compliance.)154 4075 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e
-(LICENSE)330 4204 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8
-b(oundation)42 b(ma)m(y)g(publish)c(new,)44 b(revised)c(v)m(ersions)h
-(of)h(the)g(GNU)g(F)-8 b(ree)330 4314 y(Do)s(cumen)m(tation)33
-b(License)e(from)h(time)g(to)h(time.)45 b(Suc)m(h)31
-b(new)h(v)m(ersions)f(will)f(b)s(e)h(similar)e(in)i(spirit)330
-4423 y(to)k(the)g(presen)m(t)f(v)m(ersion,)h(but)f(ma)m(y)h(di\013er)e
-(in)g(detail)g(to)i(address)f(new)g(problems)e(or)j(concerns.)330
-4533 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p
-Ft(.)330 4663 y(Eac)m(h)f(v)m(ersion)f(of)h(the)f(License)g(is)g(giv)m
-(en)g(a)h(distinguishing)25 b(v)m(ersion)k(n)m(um)m(b)s(er.)39
-b(If)29 b(the)g(Do)s(cumen)m(t)330 4772 y(sp)s(eci\014es)44
-b(that)i(a)g(particular)d(n)m(um)m(b)s(ered)h(v)m(ersion)h(of)g(this)f
-(License)h(\\or)h(an)m(y)g(later)f(v)m(ersion")330 4882
-y(applies)31 b(to)i(it,)g(y)m(ou)f(ha)m(v)m(e)i(the)f(option)f(of)g
-(follo)m(wing)f(the)i(terms)f(and)g(conditions)f(either)h(of)g(that)330
-4991 y(sp)s(eci\014ed)k(v)m(ersion)i(or)f(of)h(an)m(y)h(later)f(v)m
-(ersion)f(that)h(has)g(b)s(een)f(published)d(\(not)39
-b(as)f(a)g(draft\))g(b)m(y)330 5101 y(the)33 b(F)-8 b(ree)34
-b(Soft)m(w)m(are)f(F)-8 b(oundation.)48 b(If)32 b(the)h(Do)s(cumen)m(t)
-g(do)s(es)g(not)g(sp)s(ecify)e(a)i(v)m(ersion)f(n)m(um)m(b)s(er)g(of)
-330 5210 y(this)h(License,)j(y)m(ou)e(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g
-(v)m(ersion)f(ev)m(er)h(published)c(\(not)k(as)g(a)f(draft\))h(b)m(y)f
-(the)h(F)-8 b(ree)330 5320 y(Soft)m(w)m(are)31 b(F)-8
-b(oundation.)p eop
+(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5
+b(arian)m(t)45 b(Sections)g(with)330 2022 y(translations)h(requires)f
+(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i
+(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2132 y(include)24
+b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25
+b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330
+2242 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44
+b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f
+(License,)i(and)d(all)j(the)330 2351 y(license)42 b(notices)g(in)f(the)
+h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42
+b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2461
+y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g
+(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330
+2570 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33
+b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f
+(translation)i(and)330 2680 y(the)f(original)i(v)m(ersion)e(of)h(this)f
+(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m
+(ersion)g(will)330 2790 y(prev)-5 b(ail.)330 2919 y(If)28
+b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m
+(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330
+3029 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m
+(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330
+3138 y(c)m(hanging)j(the)g(actual)h(title.)199 3268 y(9.)61
+b(TERMINA)-8 b(TION)330 3397 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8
+b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h
+(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3507 y(pro)m(vided)41
+b(for)h(under)e(this)i(License.)75 b(An)m(y)42 b(other)g(attempt)h(to)g
+(cop)m(y)-8 b(,)46 b(mo)s(dify)-8 b(,)44 b(sublicense)e(or)330
+3616 y(distribute)36 b(the)h(Do)s(cumen)m(t)g(is)g(v)m(oid,)i(and)d
+(will)h(automatically)i(terminate)f(y)m(our)e(righ)m(ts)h(under)330
+3726 y(this)28 b(License.)40 b(Ho)m(w)m(ev)m(er,)31 b(parties)d(who)f
+(ha)m(v)m(e)i(receiv)m(ed)g(copies,)h(or)d(righ)m(ts,)i(from)f(y)m(ou)g
+(under)e(this)330 3836 y(License)37 b(will)g(not)g(ha)m(v)m(e)h(their)f
+(licenses)g(terminated)h(so)f(long)g(as)g(suc)m(h)f(parties)h(remain)g
+(in)f(full)330 3945 y(compliance.)154 4075 y(10.)61 b(FUTURE)30
+b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 4204 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 4314 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g
+(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h
+(in)g(spirit)330 4423 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)
+m(y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i
+(concerns.)330 4533 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p
+Ft(.)330 4663 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m
+(en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39
+b(If)29 b(the)g(Do)s(cumen)m(t)330 4772 y(sp)s(eci\014es)45
+b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g
+(License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 4882
+y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f
+(follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330
+4991 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m
+(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g
+(b)m(y)330 5101 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8
+b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s
+(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 5210
+y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m
+(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the)
+h(F)-8 b(ree)330 5320 y(Soft)m(w)m(are)31 b(F)-8 b(oundation.)p
+eop end
%%Page: 137 143
-137 142 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g
-(Man)m(ual)2062 b(137)150 299 y Fk(C.1.1)62 b(ADDENDUM:)41
-b(Ho)m(w)f(to)h(use)h(this)f(License)g(for)g(y)m(our)g(do)s(cumen)m(ts)
-275 543 y Ft(T)-8 b(o)27 b(use)g(this)f(License)h(in)f(a)i(do)s(cumen)m
-(t)f(y)m(ou)h(ha)m(v)m(e)g(written,)f(include)e(a)j(cop)m(y)g(of)f(the)
-h(License)f(in)f(the)150 653 y(do)s(cumen)m(t)k(and)g(put)g(the)g
-(follo)m(wing)f(cop)m(yrigh)m(t)i(and)f(license)f(notices)h(just)g
-(after)h(the)g(title)f(page:)468 765 y Fe(Copyright)42
-b(\(C\))79 b Fd(year)88 b(your)40 b(name)p Fe(.)468 852
-y(Permission)i(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g
-(modify)f(this)g(document)468 939 y(under)h(the)f(terms)g(of)g(the)g
-(GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.2)468
-1026 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g
-(Software)h(Foundation;)468 1113 y(with)g(no)e(Invariant)j(Sections,)f
-(no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)j(Texts.)468
-1200 y(A)e(copy)g(of)g(the)g(license)g(is)g(included)h(in)f(the)g
-(section)h(entitled)g(``GNU)468 1288 y(Free)g(Documentation)h
-(License''.)275 1410 y Ft(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5
-b(arian)m(t)40 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42
-b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43
-b(replace)d(the)150 1520 y(\\with...T)-8 b(exts.")42
-b(line)28 b(with)i(this:)547 1632 y Fe(with)40 b(the)g(Invariant)h
-(Sections)g(being)g Fd(list)f(their)g(titles)p Fe(,)h(with)547
-1719 y(the)f(Front-Cover)i(Texts)e(being)g Fd(list)p
-Fe(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 1806
-y(being)f Fd(list)p Fe(.)275 1929 y Ft(If)34 b(y)m(ou)i(ha)m(v)m(e)g
-(In)m(v)-5 b(arian)m(t)35 b(Sections)g(without)f(Co)m(v)m(er)i(T)-8
-b(exts,)38 b(or)d(some)g(other)h(com)m(bination)e(of)i(the)150
-2038 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)g(to)g
-(suit)e(the)i(situation.)275 2173 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f
-(con)m(tains)h(non)m(trivial)e(examples)i(of)g(program)f(co)s(de,)j(w)m
-(e)e(recommend)g(releasing)150 2283 y(these)44 b(examples)e(in)g
-(parallel)f(under)h(y)m(our)h(c)m(hoice)h(of)f(free)g(soft)m(w)m(are)h
-(license,)i(suc)m(h)d(as)g(the)g(GNU)150 2392 y(General)30
-b(Public)e(License,)j(to)g(p)s(ermit)d(their)i(use)g(in)f(free)h(soft)m
-(w)m(are.)p eop
+TeXDict begin 137 142 bop 150 -116 a Ft(App)s(endix)29
+b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(137)150 299
+y Fk(C.1.1)62 b(ADDENDUM:)41 b(Ho)m(w)f(to)h(use)h(this)f(License)g
+(for)h(y)m(our)f(do)s(cumen)m(ts)275 543 y Ft(T)-8 b(o)27
+b(use)g(this)g(License)h(in)f(a)h(do)s(cumen)m(t)f(y)m(ou)h(ha)m(v)m(e)
+g(written,)g(include)f(a)h(cop)m(y)g(of)f(the)h(License)g(in)f(the)150
+653 y(do)s(cumen)m(t)j(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh)m
+(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468
+765 y Fe(Copyright)42 b(\(C\))79 b Fd(year)88 b(your)40
+b(name)p Fe(.)468 852 y(Permission)i(is)e(granted)g(to)g(copy,)h
+(distribute)g(and/or)g(modify)f(this)g(document)468 939
+y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i
+(License,)f(Version)g(1.2)468 1026 y(or)f(any)g(later)g(version)h
+(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468
+1113 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g
+(and)f(no)f(Back-Cover)j(Texts.)468 1200 y(A)e(copy)g(of)g(the)g
+(license)g(is)g(included)h(in)f(the)g(section)h(entitled)g(``GNU)468
+1288 y(Free)g(Documentation)h(License''.)275 1410 y Ft(If)d(y)m(ou)h
+(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8
+b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k
+(T)-8 b(exts,)43 b(replace)e(the)150 1520 y(\\with...T)-8
+b(exts.")43 b(line)30 b(with)h(this:)547 1632 y Fe(with)40
+b(the)g(Invariant)h(Sections)g(being)g Fd(list)f(their)g(titles)p
+Fe(,)h(with)547 1719 y(the)f(Front-Cover)i(Texts)e(being)g
+Fd(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547
+1806 y(being)f Fd(list)p Fe(.)275 1929 y Ft(If)34 b(y)m(ou)i(ha)m(v)m
+(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8
+b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150
+2038 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e
+(suit)f(the)h(situation.)275 2173 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f
+(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m
+(e)e(recommend)g(releasing)150 2283 y(these)44 b(examples)f(in)g
+(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h
+(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2392 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: 138 144
-138 143 bop 150 -116 a Ft(138)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 138 143 bop 150 -116 a Ft(138)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 139 145
-139 144 bop 150 -116 a Ft(Index)30 b(of)g(Shell)e(Builtin)g(Commands)
-2133 b(139)150 299 y Fo(Index)53 b(of)h(Shell)g(Builtin)h(Commands)150
-560 y Fr(.)150 686 y Fe(.)17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
+TeXDict begin 139 144 bop 150 -116 a Ft(Index)30 b(of)g(Shell)g
+(Builtin)h(Commands)2133 b(139)150 299 y Fo(Index)53
+b(of)h(Shell)e(Builtin)g(Commands)150 560 y Fr(.)150
+686 y Fe(.)17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
b Fb(33)150 945 y Fr(:)150 1071 y Fe(:)17 b Fc(.)12 b(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
y Fr(W)2025 5674 y Fe(wait)13 b Fc(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)38
-b Fb(81)p eop
+b Fb(81)p eop end
%%Page: 140 146
-140 145 bop 150 -116 a Ft(140)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 140 145 bop 150 -116 a Ft(140)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 141 147
-141 146 bop 150 -116 a Ft(Index)30 b(of)g(Shell)e(Reserv)m(ed)j(W)-8
-b(ords)2247 b(141)150 299 y Fo(Index)53 b(of)h(Shell)g(Reserv)l(ed)e(W)
--13 b(ords)150 610 y Fr(!)150 743 y Fe(!)18 b Fc(.)12
-b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(8)150 1029 y
-Fr([)150 1162 y Fe([[)15 b Fc(.)e(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+TeXDict begin 141 146 bop 150 -116 a Ft(Index)30 b(of)g(Shell)g(Reserv)
+m(ed)h(W)-8 b(ords)2247 b(141)150 299 y Fo(Index)53 b(of)h(Shell)e
+(Reserv)l(ed)g(W)-13 b(ords)150 610 y Fr(!)150 743 y
+Fe(!)18 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b
+Fb(8)150 1029 y Fr([)150 1162 y Fe([[)15 b Fc(.)e(.)g(.)f(.)g(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)41 b Fb(12)150 1455 y Fr(])150 1587 y Fe(]])15 b Fc(.)e(.)g(.)f(.)g
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41
-b Fb(12)150 1455 y Fr(])150 1587 y Fe(]])15 b Fc(.)e(.)g(.)f(.)g(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)41 b Fb(12)150 1873 y Fa({)150 2006 y Fe({)17 b Fc(.)12
-b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(13)150 2292 y Fa(})150
-2425 y Fe(})17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)h(.)f(.)41 b Fb(12)150 1873 y Fa({)150 2006 y Fe({)17
+b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(13)150 2292
+y Fa(})150 2425 y Fe(})17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
b Fb(13)150 2709 y Fr(C)150 2842 y Fe(case)13 b Fc(.)g(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
38 b Fb(9)2025 3231 y Fr(W)2025 3347 y Fe(while)11 b
Fc(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)37 b Fb(10)p eop
+g(.)h(.)f(.)g(.)37 b Fb(10)p eop end
%%Page: 142 148
-142 147 bop 150 -116 a Ft(142)2527 b(Bash)31 b(Reference)g(Man)m(ual)p
-eop
+TeXDict begin 142 147 bop 150 -116 a Ft(142)2527 b(Bash)31
+b(Reference)g(Man)m(ual)p eop end
%%Page: 143 149
-143 148 bop 150 -116 a Ft(P)m(arameter)32 b(and)d(V)-8
-b(ariable)30 b(Index)2262 b(143)150 299 y Fo(P)l(arameter)53
-b(and)g(V)-13 b(ariable)55 b(Index)150 610 y Fr(!)150
-727 y Fe(!)17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
+TeXDict begin 143 148 bop 150 -116 a Ft(P)m(arameter)32
+b(and)d(V)-8 b(ariable)32 b(Index)2262 b(143)150 299
+y Fo(P)l(arameter)54 b(and)f(V)-13 b(ariable)53 b(Index)150
+610 y Fr(!)150 727 y Fe(!)17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
b Fb(16)150 963 y Fr(#)150 1080 y Fe(#)17 b Fc(.)12 b(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
f(.)g(.)h(.)f(.)g(.)h(.)32 b Fb(60)2025 5340 y Fe(HOSTTYPE)7
b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)32 b Fb(60)p eop
+g(.)h(.)32 b Fb(60)p eop end
%%Page: 144 150
-144 149 bop 150 -116 a Ft(144)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fr(I)150 417 y Fe(IFS)14 b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
-b Fb(55)150 506 y Fe(IGNOREEOF)25 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(60)150 594
-y Fe(input-meta)24 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)47 b Fb(88)150 682 y Fe(INPUTRC)8 b Fc(.)14
-b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)34 b Fb(60)150 771 y Fe(isearch-terminators)9 b Fc(.)17
-b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(88)150 1009 y Fr(K)150
-1128 y Fe(keymap)10 b Fc(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(88)150 1385
-y Fr(L)150 1504 y Fe(LANG)13 b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
+TeXDict begin 144 149 bop 150 -116 a Ft(144)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(I)150 417 y Fe(IFS)14
+b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fb(55)150 506 y Fe(IGNOREEOF)25
+b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
+49 b Fb(60)150 594 y Fe(input-meta)24 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(88)150 682
+y Fe(INPUTRC)8 b Fc(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fb(60)150 771 y Fe
+(isearch-terminators)9 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34
+b Fb(88)150 1009 y Fr(K)150 1128 y Fe(keymap)10 b Fc(.)j(.)g(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
+b Fb(88)150 1385 y Fr(L)150 1504 y Fe(LANG)13 b Fc(.)g(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
b Fb(60)150 1592 y Fe(LC_ALL)10 b Fc(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(60)150
b Fb(62)2025 3796 y Fr(V)2025 3915 y Fe(visible-stats)18
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
-b Fb(89)p eop
+b Fb(89)p eop end
%%Page: 145 151
-145 150 bop 150 -116 a Ft(F)-8 b(unction)30 b(Index)2861
-b(145)150 299 y Fo(F)-13 b(unction)53 b(Index)150 610
-y Fr(A)150 749 y Fe(abort)27 b(\(C-g\))8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(101)150 848
-y Fe(accept-line)28 b(\(Newline)g(or)e(Return\))12 b
-Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b
-Fb(95)150 946 y Fe(alias-expand-line)29 b(\(\))13 b Fc(.)g(.)g(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-39 b Fb(103)150 1257 y Fr(B)150 1397 y Fe(backward-char)29
-b(\(C-b\))16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 b Fb(95)150
-1495 y Fe(backward-delete-char)30 b(\(Rubout\))21 b Fc(.)13
-b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b
-Fb(97)150 1594 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))f
+TeXDict begin 145 150 bop 150 -116 a Ft(F)-8 b(unction)31
+b(Index)2861 b(145)150 299 y Fo(F)-13 b(unction)52 b(Index)150
+610 y Fr(A)150 749 y Fe(abort)27 b(\(C-g\))8 b Fc(.)13
+b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34
+b Fb(101)150 848 y Fe(accept-line)28 b(\(Newline)g(or)e(Return\))12
+b Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37
+b Fb(95)150 946 y Fe(alias-expand-line)29 b(\(\))13 b
+Fc(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)39 b Fb(103)150 1257 y Fr(B)150 1397
+y Fe(backward-char)29 b(\(C-b\))16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41
+b Fb(95)150 1495 y Fe(backward-delete-char)30 b(\(Rubout\))21
+b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
+b Fb(97)150 1594 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))f
Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b
Fb(98)150 1692 y Fe(backward-kill-word)30 b(\(M-)999
1689 y Fg(h)p 1024 1636 146 4 v 1024 1692 a Ff(DEL)p
b(\(M-p\))2193 5340 y Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(96)p
-eop
+eop end
%%Page: 146 152
-146 151 bop 150 -116 a Ft(146)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fr(O)150 425 y Fe(operate-and-get-next)f(\(C-o\))24
-b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49
-b Fb(103)150 518 y Fe(overwrite-mode)29 b(\(\))19 b Fc(.)12
-b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(97)150 786 y Fr(P)150
-913 y Fe(possible-command-completions)32 b(\(C-x)26 b(!\))15
-b Fc(.)e(.)g(.)f(.)g(.)41 b Fb(100)150 1005 y Fe(possible-completions)
-30 b(\(M-?\))25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)g(.)h(.)49 b Fb(99)150 1097 y Fe(possible-filename-completions)
-32 b(\(C-x)27 b(/\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150
+TeXDict begin 146 151 bop 150 -116 a Ft(146)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(O)150 425 y Fe
+(operate-and-get-next)f(\(C-o\))24 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 b Fb(103)150 518 y
+Fe(overwrite-mode)29 b(\(\))19 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
+44 b Fb(97)150 786 y Fr(P)150 913 y Fe(possible-command-completions)32
+b(\(C-x)26 b(!\))15 b Fc(.)e(.)g(.)f(.)g(.)41 b Fb(100)150
+1005 y Fe(possible-completions)30 b(\(M-?\))25 b Fc(.)12
+b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49
+b Fb(99)150 1097 y Fe(possible-filename-completions)32
+b(\(C-x)27 b(/\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150
1190 y Fe(possible-hostname-completions)32 b(\(C-x)27
b(@\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150 1282 y Fe
(possible-username-completions)32 b(\(C-x)27 b(~\))14
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(96)2025
2646 y Fe(yank-pop)27 b(\(M-y\))d Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)49 b Fb(99)p eop
+h(.)f(.)g(.)49 b Fb(99)p eop end
%%Page: 147 153
-147 152 bop 150 -116 a Ft(Concept)31 b(Index)2882 b(147)150
-299 y Fo(Concept)52 b(Index)150 638 y Fr(A)150 754 y
-Fb(alias)27 b(expansion)20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)45 b Fb(71)150 841 y(arithmetic)25 b(ev)l(aluation)g
-Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fb(70)150 929 y(arithmetic)25
-b(expansion)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(21)150
-1016 y(arithmetic,)26 b(shell)20 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)45 b Fb(70)150 1103 y(arra)n(ys)6 b Fc(.)13
-b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)32 b Fb(72)150 1353 y Fr(B)150 1469 y Fb(bac)n(kground)23
-b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49
+TeXDict begin 147 152 bop 150 -116 a Ft(Concept)31 b(Index)2882
+b(147)150 299 y Fo(Concept)52 b(Index)150 638 y Fr(A)150
+754 y Fb(alias)27 b(expansion)20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)45 b Fb(71)150 841 y(arithmetic)26
+b(ev)l(aluation)f Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fb(70)150
+929 y(arithmetic)26 b(expansion)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38
+b Fb(21)150 1016 y(arithmetic,)27 b(shell)20 b Fc(.)12
+b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45 b Fb(70)150
+1103 y(arra)n(ys)6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(72)150
+1353 y Fr(B)150 1469 y Fb(bac)n(kground)23 b Fc(.)13
+b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49
b Fb(79)150 1556 y(Bash)26 b(con\014guration)11 b Fc(.)i(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)36 b Fb(115)150 1643 y(Bash)26 b(installation)6
b Fb(17)150 1905 y(builtin)17 b Fc(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b
-Fb(3)150 2138 y Fr(C)150 2254 y Fb(command)24 b(editing)19
+Fb(3)150 2138 y Fr(C)150 2254 y Fb(command)26 b(editing)19
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fb(83)150
-2341 y(command)24 b(execution)11 b Fc(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+2341 y(command)26 b(execution)11 b Fc(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-37 b Fb(28)150 2428 y(command)24 b(expansion)f Fc(.)12
+37 b Fb(28)150 2428 y(command)26 b(expansion)d Fc(.)12
b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(28)150 2515 y(command)24
+(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(28)150 2515 y(command)26
b(history)16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42
-b Fb(109)150 2603 y(command)24 b(searc)n(h)12 b Fc(.)h(.)f(.)g(.)h(.)f
+b Fb(109)150 2603 y(command)26 b(searc)n(h)12 b Fc(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)g(.)38 b Fb(28)150 2690 y(command)24
-b(substitution)g Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+f(.)g(.)h(.)f(.)g(.)g(.)38 b Fb(28)150 2690 y(command)26
+b(substitution)e Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fb(21)150
-2777 y(command)24 b(timing)8 b Fc(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)34 b Fb(8)150 2864 y(commands,)24 b(comp)r(ound)8
-b Fc(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(9)150 2952 y(commands,)24
-b(conditional)13 b Fc(.)h(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fb(10)150
-3039 y(commands,)24 b(grouping)15 b Fc(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)41
-b Fb(13)150 3126 y(commands,)24 b(lists)6 b Fc(.)14 b(.)f(.)f(.)g(.)h
-(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fb(9)150 3213 y(commands,)24
-b(lo)r(oping)h Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
-b Fb(9)150 3300 y(commands,)24 b(pip)r(elines)17 b Fc(.)d(.)e(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)43 b Fb(8)150 3388 y(commands,)24 b(shell)16
-b Fc(.)e(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)42
-b Fb(8)150 3475 y(commands,)24 b(simple)d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)47 b Fb(8)150 3562 y(commen)n(ts,)24
-b(shell)8 b Fc(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-34 b Fb(7)150 3649 y(completion)26 b(builtins)c Fc(.)12
+2777 y(command)26 b(timing)8 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)34 b Fb(8)150 2864 y(commands,)26 b(comp)r(ound)8
+b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(9)150 2952
+y(commands,)26 b(conditional)13 b Fc(.)h(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39
+b Fb(10)150 3039 y(commands,)26 b(grouping)15 b Fc(.)f(.)e(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
+h(.)f(.)41 b Fb(13)150 3126 y(commands,)26 b(lists)6
+b Fc(.)14 b(.)f(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32
+b Fb(9)150 3213 y(commands,)26 b(lo)r(oping)f Fc(.)12
+b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(9)150 3300
+y(commands,)26 b(pip)r(elines)17 b Fc(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+43 b Fb(8)150 3388 y(commands,)26 b(shell)16 b Fc(.)e(.)e(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(8)150 3475 y(commands,)26
+b(simple)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
+b Fb(8)150 3562 y(commen)n(ts,)26 b(shell)8 b Fc(.)13
+b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34
+b Fb(7)150 3649 y(completion)27 b(builtins)22 b Fc(.)12
b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fb(105)150 3736 y(con\014guration)15
b Fc(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
4073 y Fr(D)150 4189 y Fb(directory)26 b(stac)n(k)e Fc(.)12
b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(73)150
-4439 y Fr(E)150 4555 y Fb(editing)26 b(command)e(lines)f
+4439 y Fr(E)150 4555 y Fb(editing)26 b(command)g(lines)d
Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(83)150 4642 y(en)n(vironmen)n(t)10
-b Fc(.)h(.)h(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+b Fc(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
b Fb(30)150 4729 y(ev)l(aluation,)26 b(arithmetic)13
-b Fc(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
+b Fc(.)h(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fb(70)150 4817 y(ev)n(en)n(t)25
b(designators)18 b Fc(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
-b Fb(111)150 4904 y(execution)26 b(en)n(vironmen)n(t)18
+b Fb(111)150 4904 y(execution)26 b(en)n(vironmen)n(t)19
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fb(29)150 4991 y(exit)25
b(status)17 b Fc(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
(.)43 b Fb(3,)26 b(30)150 5078 y(expansion)16 b Fc(.)d(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b
-Fb(16)150 5166 y(expansion,)26 b(arithmetic)19 b Fc(.)13
+Fb(16)150 5166 y(expansion,)26 b(arithmetic)20 b Fc(.)13
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)45 b Fb(21)150 5253 y(expansion,)26
b(brace)12 b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38
-b Fb(17)150 5340 y(expansion,)26 b(\014lename)18 b Fc(.)11
-b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+b Fb(17)150 5340 y(expansion,)26 b(\014lename)18 b Fc(.)12
+b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(22)2025 638 y(expansion,)26
-b(parameter)21 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(18)2025
-729 y(expansion,)26 b(pathname)8 b Fc(.)j(.)h(.)h(.)f(.)g(.)h(.)f(.)g
+b(parameter)c Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(18)2025
+729 y(expansion,)26 b(pathname)8 b Fc(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34
b Fb(22)2025 819 y(expansion,)26 b(tilde)9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
h(.)f(.)g(.)h(.)f(.)g(.)35 b Fb(18)2025 910 y(expressions,)27
-b(arithmetic)16 b Fc(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
+b(arithmetic)16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fb(70)2025
1000 y(expressions,)27 b(conditional)22 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47
b Fb(69)2025 1267 y Fr(F)2025 1390 y Fb(FDL,)25 b(GNU)g(F)-6
-b(ree)26 b(Do)r(cumen)n(tation)f(License)10 b Fc(.)j(.)g(.)f(.)g(.)h(.)
+b(ree)26 b(Do)r(cumen)n(tation)g(License)10 b Fc(.)j(.)g(.)f(.)g(.)h(.)
36 b Fb(131)2025 1480 y(\014eld)21 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)48
-b Fb(3)2025 1571 y(\014lename)8 b Fc(.)j(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)
+b Fb(3)2025 1571 y(\014lename)8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(3)2025
-1661 y(\014lename)25 b(expansion)10 b Fc(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)
+1661 y(\014lename)26 b(expansion)10 b Fc(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.)
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)36 b Fb(22)2025 1752 y(foreground)20 b Fc(.)12
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
b Fb(7)2025 4860 y(login)26 b(shell)13 b Fc(.)h(.)e(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fb(65)2025
-5127 y Fr(M)2025 5249 y Fb(matc)n(hing,)25 b(pattern)7
+5127 y Fr(M)2025 5249 y Fb(matc)n(hing,)26 b(pattern)7
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fb(23)2025
-5340 y(metac)n(haracter)17 b Fc(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+5340 y(metac)n(haracter)17 b Fc(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)44 b Fb(3)p eop
+g(.)h(.)f(.)g(.)44 b Fb(3)p eop end
%%Page: 148 154
-148 153 bop 150 -116 a Ft(148)2527 b(Bash)31 b(Reference)g(Man)m(ual)
-150 299 y Fr(N)150 417 y Fb(name)20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
+TeXDict begin 148 153 bop 150 -116 a Ft(148)2527 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y Fr(N)150 417 y Fb(name)21
+b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)47 b Fb(3)150 506 y(nativ)n(e)25
+b(languages)14 b Fc(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40
+b Fb(7)150 594 y(notation,)27 b(readline)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)
+g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)38 b Fb(83)150 851 y Fr(O)150 969
+y Fb(op)r(erator,)27 b(shell)15 b Fc(.)e(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)41 b Fb(3)150 1225 y Fr(P)150
+1344 y Fb(parameter)26 b(expansion)14 b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+40 b Fb(18)150 1432 y(parameters)14 b Fc(.)f(.)g(.)f(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fb(15)150 1521
+y(parameters,)27 b(p)r(ositional)9 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34
+b Fb(15)150 1609 y(parameters,)27 b(sp)r(ecial)e Fc(.)12
+b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(15)150 1698 y(pathname)25
+b(expansion)19 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
+b Fb(22)150 1786 y(pattern)25 b(matc)n(hing)18 b Fc(.)13
+b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(23)150
+1875 y(pip)r(eline)15 b Fc(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fb(8)150 1963
+y(POSIX)8 b Fc(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(3)150 2052 y(POSIX)25
+b(Mo)r(de)10 b Fc(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
-b Fb(3)150 506 y(nativ)n(e)25 b(languages)14 b Fc(.)h(.)d(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fb(7)150 594 y(notation,)27
-b(readline)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38
-b Fb(83)150 851 y Fr(O)150 969 y Fb(op)r(erator,)27 b(shell)15
-b Fc(.)e(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
-b Fb(3)150 1225 y Fr(P)150 1344 y Fb(parameter)25 b(expansion)14
-b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fb(18)150 1432 y(parameters)14
-b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
-b Fb(15)150 1521 y(parameters,)26 b(p)r(ositional)9 b
-Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(15)150 1609 y(parameters,)26
-b(sp)r(ecial)f Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
-b Fb(15)150 1698 y(pathname)24 b(expansion)19 b Fc(.)12
-b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(22)150 1786 y(pattern)25
-b(matc)n(hing)18 b Fc(.)12 b(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
-b Fb(23)150 1875 y(pip)r(eline)15 b Fc(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g
+f(.)35 b Fb(76)150 2140 y(pro)r(cess)27 b(group)7 b Fc(.)13
+b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33
+b Fb(3)150 2229 y(pro)r(cess)27 b(group)e(ID)f Fc(.)12
+b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fb(3)150
+2317 y(pro)r(cess)27 b(substitution)10 b Fc(.)i(.)h(.)f(.)g(.)h(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b
-Fb(8)150 1963 y(POSIX)8 b Fc(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(3)150
-2052 y(POSIX)25 b(Mo)r(de)10 b Fc(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
-h(.)f(.)g(.)h(.)f(.)35 b Fb(76)150 2140 y(pro)r(cess)27
-b(group)7 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)33 b Fb(3)150 2229 y(pro)r(cess)27 b(group)e(ID)f
-Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50
-b Fb(3)150 2317 y(pro)r(cess)27 b(substitution)10 b Fc(.)i(.)h(.)f(.)g
-(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
-f(.)g(.)h(.)f(.)36 b Fb(22)150 2406 y(programmable)25
-b(completion)16 b Fc(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)g(.)42 b Fb(103)150 2494 y(prompting)7
-b Fc(.)k(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)32 b Fb(75)150 2750 y Fr(Q)150 2869 y Fb(quoting)19
-b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)h(.)f(.)g(.)46 b Fb(6)150 2957 y(quoting,)26 b(ANSI)12
-b Fc(.)f(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
-f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38
+f(.)36 b Fb(22)150 2406 y(programmable)27 b(completion)16
+b Fc(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
+g(.)g(.)42 b Fb(103)150 2494 y(prompting)7 b Fc(.)12
+b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32
+b Fb(75)150 2750 y Fr(Q)150 2869 y Fb(quoting)19 b Fc(.)13
+b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
+(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
+f(.)g(.)46 b Fb(6)150 2957 y(quoting,)26 b(ANSI)12 b
+Fc(.)f(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38
b Fb(6)150 3213 y Fr(R)150 3332 y Fb(Readline,)26 b(ho)n(w)g(to)g(use)
14 b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fb(82)150 3421
b Fb(76)2025 473 y(return)25 b(status)19 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fb(3)2025
-707 y Fr(S)2025 823 y Fb(shell)26 b(arithmetic)12 b Fc(.)g(.)h(.)f(.)g
+707 y Fr(S)2025 823 y Fb(shell)26 b(arithmetic)12 b Fc(.)h(.)g(.)f(.)g
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(70)2025 910 y(shell)26
b(function)11 b Fc(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g
b Fb(22)2025 3304 y Fr(Y)2025 3421 y Fb(y)n(anking)25
b(text)7 b Fc(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
-g(.)33 b Fb(85)p eop
+g(.)33 b Fb(85)p eop end
%%Trailer
-end
+
userdict /end-hook known{end-hook}if
%%EOF
--- /dev/null
+\input texinfo.tex @c -*- texinfo -*-
+@c %**start of header
+@setfilename bashref.info
+@settitle Bash Reference Manual
+@c %**end of header
+
+@setchapternewpage odd
+
+@include version.texi
+
+@copying
+This text is a brief description of the features that are present in
+the Bash shell (version @value{VERSION}, @value{UPDATED}).
+
+This is Edition @value{EDITION}, last updated @value{UPDATED},
+of @cite{The GNU Bash Reference Manual},
+for @code{Bash}, Version @value{VERSION}.
+
+Copyright @copyright{} 1988-2003 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below. A copy of the license is
+included in the section entitled ``GNU Free Documentation License.''
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@end quotation
+@end copying
+
+@defcodeindex bt
+@defcodeindex rw
+@set BashFeatures
+
+@dircategory Basics
+@direntry
+* Bash: (bash). The GNU Bourne-Again SHell.
+@end direntry
+
+@finalout
+
+@titlepage
+@title Bash Reference Manual
+@subtitle Reference Documentation for Bash
+@subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}.
+@subtitle @value{UPDATED-MONTH}
+@author Chet Ramey, Case Western Reserve University
+@author Brian Fox, Free Software Foundation
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+
+@sp 1
+Published by the Free Software Foundation @*
+59 Temple Place, Suite 330, @*
+Boston, MA 02111-1307 @*
+USA @*
+
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top Bash Features
+
+This text is a brief description of the features that are present in
+the Bash shell (version @value{VERSION}, @value{UPDATED})..
+
+This is Edition @value{EDITION}, last updated @value{UPDATED},
+of @cite{The GNU Bash Reference Manual},
+for @code{Bash}, Version @value{VERSION}.
+
+Bash contains features that appear in other popular shells, and some
+features that only appear in Bash. Some of the shells that Bash has
+borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell
+(@file{ksh}), and the C-shell (@file{csh} and its successor,
+@file{tcsh}). The following menu breaks the features up into
+categories based upon which one of these other shells inspired the
+feature.
+
+This manual is meant as a brief introduction to features found in
+Bash. The Bash manual page should be used as the definitive
+reference on shell behavior.
+
+@menu
+* Introduction:: An introduction to the shell.
+
+* Definitions:: Some definitions used in the rest of this
+ manual.
+
+* Basic Shell Features:: The shell "building blocks".
+
+* Shell Builtin Commands:: Commands that are a part of the shell.
+
+* Shell Variables:: Variables used or set by Bash.
+
+* Bash Features:: Features found only in Bash.
+
+* Job Control:: A chapter describing what job control is
+ and how Bash allows you to use it.
+
+* Using History Interactively:: Chapter dealing with history expansion
+ rules.
+
+* Command Line Editing:: Chapter describing the command line
+ editing features.
+
+* Installing Bash:: How to build and install Bash on your system.
+
+* Reporting Bugs:: How to report bugs in Bash.
+
+* Major Differences From The Bourne Shell:: A terse list of the differences
+ between Bash and historical
+ versions of /bin/sh.
+
+* Copying This Manual:: Copying this manual.
+
+* Builtin Index:: Index of Bash builtin commands.
+
+* Reserved Word Index:: Index of Bash reserved words.
+
+* Variable Index:: Quick reference helps you find the
+ variable you want.
+
+* Function Index:: Index of bindable Readline functions.
+
+* Concept Index:: General index for concepts described in
+ this manual.
+@end menu
+@end ifnottex
+
+@node Introduction
+@chapter Introduction
+@menu
+* What is Bash?:: A short description of Bash.
+
+* What is a shell?:: A brief introduction to shells.
+@end menu
+
+@node What is Bash?
+@section What is Bash?
+
+Bash is the shell, or command language interpreter,
+for the @sc{gnu} operating system.
+The name is an acronym for the @samp{Bourne-Again SHell},
+a pun on Stephen Bourne, the author of the direct ancestor of
+the current Unix shell @code{/bin/sh},
+which appeared in the Seventh Edition Bell Labs Research version
+of Unix.
+
+Bash is largely compatible with @code{sh} and incorporates useful
+features from the Korn shell @code{ksh} and the C shell @code{csh}.
+It is intended to be a conformant implementation of the @sc{ieee}
+@sc{posix} Shell and Tools specification (@sc{ieee} Working Group 1003.2).
+It offers functional improvements over @code{sh} for both interactive and
+programming use.
+
+While the @sc{gnu} operating system provides other shells, including
+a version of @code{csh}, Bash is the default shell.
+Like other @sc{gnu} software, Bash is quite portable. It currently runs
+on nearly every version of Unix and a few other operating systems @minus{}
+independently-supported ports exist for @sc{ms-dos}, @sc{os/2},
+Windows @sc{95/98}, and Windows @sc{nt}.
+
+@node What is a shell?
+@section What is a shell?
+
+At its base, a shell is simply a macro processor that executes
+commands. A Unix shell is both a command interpreter, which
+provides the user interface to the rich set of @sc{gnu} utilities,
+and a programming language, allowing these utilitites to be
+combined. Files containing commands can be created, and become
+commands themselves. These new commands have the same status as
+system commands in directories such as @file{/bin}, allowing users
+or groups to establish custom environments.
+
+A shell allows execution of @sc{gnu} commands, both synchronously and
+asynchronously.
+The shell waits for synchronous commands to complete before accepting
+more input; asynchronous commands continue to execute in parallel
+with the shell while it reads and executes additional commands.
+The @dfn{redirection} constructs permit
+fine-grained control of the input and output of those commands.
+Moreover, the shell allows control over the contents of commands'
+environments.
+Shells may be used interactively or non-interactively: they accept
+input typed from the keyboard or from a file.
+
+Shells also provide a small set of built-in
+commands (@dfn{builtins}) implementing functionality impossible
+or inconvenient to obtain via separate utilities.
+For example, @code{cd}, @code{break}, @code{continue}, and
+@code{exec}) cannot be implemented outside of the shell because
+they directly manipulate the shell itself.
+The @code{history}, @code{getopts}, @code{kill}, or @code{pwd}
+builtins, among others, could be implemented in separate utilities,
+but they are more convenient to use as builtin commands.
+All of the shell builtins are described in
+subsequent sections.
+
+While executing commands is essential, most of the power (and
+complexity) of shells is due to their embedded programming
+languages. Like any high-level language, the shell provides
+variables, flow control constructs, quoting, and functions.
+
+Shells offer features geared specifically for
+interactive use rather than to augment the programming language.
+These interactive features include job control, command line
+editing, history and aliases. Each of these features is
+described in this manual.
+
+@node Definitions
+@chapter Definitions
+These definitions are used throughout the remainder of this manual.
+
+@table @code
+
+@item POSIX
+@cindex POSIX
+A family of open system standards based on Unix. Bash
+is concerned with @sc{posix} 1003.2, the Shell and Tools Standard.
+
+@item blank
+A space or tab character.
+
+@item builtin
+@cindex builtin
+A command that is implemented internally by the shell itself, rather
+than by an executable program somewhere in the file system.
+
+@item control operator
+@cindex control operator
+A @code{word} that performs a control function. It is a @code{newline}
+or one of the following:
+@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;},
+@samp{|}, @samp{(}, or @samp{)}.
+
+@item exit status
+@cindex exit status
+The value returned by a command to its caller. The value is restricted
+to eight bits, so the maximum value is 255.
+
+@item field
+@cindex field
+A unit of text that is the result of one of the shell expansions. After
+expansion, when executing a command, the resulting fields are used as
+the command name and arguments.
+
+@item filename
+@cindex filename
+A string of characters used to identify a file.
+
+@item job
+@cindex job
+A set of processes comprising a pipeline, and any processes descended
+from it, that are all in the same process group.
+
+@item job control
+@cindex job control
+A mechanism by which users can selectively stop (suspend) and restart
+(resume) execution of processes.
+
+@item metacharacter
+@cindex metacharacter
+A character that, when unquoted, separates words. A metacharacter is
+a @code{blank} or one of the following characters:
+@samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or
+@samp{>}.
+
+@item name
+@cindex name
+@cindex identifier
+A @code{word} consisting solely of letters, numbers, and underscores,
+and beginning with a letter or underscore. @code{Name}s are used as
+shell variable and function names.
+Also referred to as an @code{identifier}.
+
+@item operator
+@cindex operator, shell
+A @code{control operator} or a @code{redirection operator}.
+@xref{Redirections}, for a list of redirection operators.
+
+@item process group
+@cindex process group
+A collection of related processes each having the same process
+group @sc{id}.
+
+@item process group ID
+@cindex process group ID
+A unique identifer that represents a @code{process group}
+during its lifetime.
+
+@item reserved word
+@cindex reserved word
+A @code{word} that has a special meaning to the shell. Most reserved
+words introduce shell flow control constructs, such as @code{for} and
+@code{while}.
+
+@item return status
+@cindex return status
+A synonym for @code{exit status}.
+
+@item signal
+@cindex signal
+A mechanism by which a process may be notified by the kernel
+of an event occurring in the system.
+
+@item special builtin
+@cindex special builtin
+A shell builtin command that has been classified as special by the
+@sc{posix} 1003.2 standard.
+
+@item token
+@cindex token
+A sequence of characters considered a single unit by the shell. It is
+either a @code{word} or an @code{operator}.
+
+@item word
+@cindex word
+A @code{token} that is not an @code{operator}.
+@end table
+
+@node Basic Shell Features
+@chapter Basic Shell Features
+@cindex Bourne shell
+
+Bash is an acronym for @samp{Bourne-Again SHell}.
+The Bourne shell is
+the traditional Unix shell originally written by Stephen Bourne.
+All of the Bourne shell builtin commands are available in Bash,
+and the rules for evaluation and quoting are taken from the @sc{posix}
+1003.2 specification for the `standard' Unix shell.
+
+This chapter briefly summarizes the shell's `building blocks':
+commands, control structures, shell functions, shell @i{parameters},
+shell expansions,
+@i{redirections}, which are a way to direct input and output from
+and to named files, and how the shell executes commands.
+
+@menu
+* Shell Syntax:: What your input means to the shell.
+* Shell Commands:: The types of commands you can use.
+* Shell Functions:: Grouping commands by name.
+* Shell Parameters:: How the shell stores values.
+* Shell Expansions:: How Bash expands parameters and the various
+ expansions available.
+* Redirections:: A way to control where input and output go.
+* Executing Commands:: What happens when you run a command.
+* Shell Scripts:: Executing files of shell commands.
+@end menu
+
+@node Shell Syntax
+@section Shell Syntax
+@menu
+* Shell Operation:: The basic operation of the shell.
+
+* Quoting:: How to remove the special meaning from characters.
+
+* Comments:: How to specify comments.
+@end menu
+
+When the shell reads input, it proceeds through a
+sequence of operations. If the input indicates the beginning of a
+comment, the shell ignores the comment symbol (@samp{#}), and the rest
+of that line.
+
+Otherwise, roughly speaking, the shell reads its input and
+divides the input into words and operators, employing the quoting rules
+to select which meanings to assign various words and characters.
+
+The shell then parses these tokens into commands and other constructs,
+removes the special meaning of certain words or characters, expands
+others, redirects input and output as needed, executes the specified
+command, waits for the command's exit status, and makes that exit status
+available for further inspection or processing.
+
+@node Shell Operation
+@subsection Shell Operation
+
+The following is a brief description of the shell's operation when it
+reads and executes a command. Basically, the shell does the
+following:
+
+@enumerate
+@item
+Reads its input from a file (@pxref{Shell Scripts}), from a string
+supplied as an argument to the @option{-c} invocation option
+(@pxref{Invoking Bash}), or from the user's terminal.
+
+@item
+Breaks the input into words and operators, obeying the quoting rules
+described in @ref{Quoting}. These tokens are separated by
+@code{metacharacters}. Alias expansion is performed by this step
+(@pxref{Aliases}).
+
+@item
+Parses the tokens into simple and compound commands
+(@pxref{Shell Commands}).
+
+@item
+Performs the various shell expansions (@pxref{Shell Expansions}), breaking
+the expanded tokens into lists of filenames (@pxref{Filename Expansion})
+and commands and arguments.
+
+@item
+Performs any necessary redirections (@pxref{Redirections}) and removes
+the redirection operators and their operands from the argument list.
+
+@item
+Executes the command (@pxref{Executing Commands}).
+
+@item
+Optionally waits for the command to complete and collects its exit
+status (@pxref{Exit Status}).
+
+@end enumerate
+
+@node Quoting
+@subsection Quoting
+@cindex quoting
+@menu
+* Escape Character:: How to remove the special meaning from a single
+ character.
+* Single Quotes:: How to inhibit all interpretation of a sequence
+ of characters.
+* Double Quotes:: How to suppress most of the interpretation of a
+ sequence of characters.
+* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
+
+* Locale Translation:: How to translate strings into different languages.
+@end menu
+
+Quoting is used to remove the special meaning of certain
+characters or words to the shell. Quoting can be used to
+disable special treatment for special characters, to prevent
+reserved words from being recognized as such, and to prevent
+parameter expansion.
+
+Each of the shell metacharacters (@pxref{Definitions})
+has special meaning to the shell and must be quoted if it is to
+represent itself.
+When the command history expansion facilities are being used, the
+@var{history expansion} character, usually @samp{!}, must be quoted
+to prevent history expansion. @xref{Bash History Facilities}, for
+more details concerning history expansion.
+
+There are three quoting mechanisms: the
+@var{escape character}, single quotes, and double quotes.
+
+@node Escape Character
+@subsubsection Escape Character
+A non-quoted backslash @samp{\} is the Bash escape character.
+It preserves the literal value of the next character that follows,
+with the exception of @code{newline}. If a @code{\newline} pair
+appears, and the backslash itself is not quoted, the @code{\newline}
+is treated as a line continuation (that is, it is removed from
+the input stream and effectively ignored).
+
+@node Single Quotes
+@subsubsection Single Quotes
+
+Enclosing characters in single quotes (@samp{'}) preserves the literal value
+of each character within the quotes. A single quote may not occur
+between single quotes, even when preceded by a backslash.
+
+@node Double Quotes
+@subsubsection Double Quotes
+
+Enclosing characters in double quotes (@samp{"}) preserves the literal value
+of all characters within the quotes, with the exception of
+@samp{$}, @samp{`}, and @samp{\}.
+The characters @samp{$} and @samp{`}
+retain their special meaning within double quotes (@pxref{Shell Expansions}).
+The backslash retains its special meaning only when followed by one of
+the following characters:
+@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}.
+Within double quotes, backslashes that are followed by one of these
+characters are removed. Backslashes preceding characters without a
+special meaning are left unmodified.
+A double quote may be quoted within double quotes by preceding it with
+a backslash.
+When command history is being used, the double quote may not be used to
+quote the history expansion character.
+
+The special parameters @samp{*} and @samp{@@} have special meaning
+when in double quotes (@pxref{Shell Parameter Expansion}).
+
+@node ANSI-C Quoting
+@subsubsection ANSI-C Quoting
+@cindex quoting, ANSI
+
+Words of the form @code{$'@var{string}'} are treated specially. The
+word expands to @var{string}, with backslash-escaped characters replaced
+as specified by the ANSI C standard. Backslash escape sequences, if
+present, are decoded as follows:
+
+@table @code
+@item \a
+alert (bell)
+@item \b
+backspace
+@item \e
+an escape character (not ANSI C)
+@item \f
+form feed
+@item \n
+newline
+@item \r
+carriage return
+@item \t
+horizontal tab
+@item \v
+vertical tab
+@item \\
+backslash
+@item \'
+single quote
+@item \@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(one to three digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
+@item \c@var{x}
+a control-@var{x} character
+@end table
+
+@noindent
+The expanded result is single-quoted, as if the dollar sign had not
+been present.
+
+@node Locale Translation
+@subsubsection Locale-Specific Translation
+@cindex localization
+@cindex internationalization
+@cindex native languages
+@cindex translation, native languages
+
+A double-quoted string preceded by a dollar sign (@samp{$}) will cause
+the string to be translated according to the current locale.
+If the current locale is @code{C} or @code{POSIX}, the dollar sign
+is ignored.
+If the string is translated and replaced, the replacement is
+double-quoted.
+
+@vindex LC_MESSAGES
+@vindex TEXTDOMAIN
+@vindex TEXTDOMAINDIR
+Some systems use the message catalog selected by the @env{LC_MESSAGES}
+shell variable. Others create the name of the message catalog from the
+value of the @env{TEXTDOMAIN} shell variable, possibly adding a
+suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
+may need to set the @env{TEXTDOMAINDIR} variable to the location of
+the message catalog files. Still others use both variables in this
+fashion:
+@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
+
+@node Comments
+@subsection Comments
+@cindex comments, shell
+
+In a non-interactive shell, or an interactive shell in which the
+@code{interactive_comments} option to the @code{shopt}
+builtin is enabled (@pxref{Bash Builtins}),
+a word beginning with @samp{#}
+causes that word and all remaining characters on that line to
+be ignored. An interactive shell without the @code{interactive_comments}
+option enabled does not allow comments. The @code{interactive_comments}
+option is on by default in interactive shells.
+@xref{Interactive Shells}, for a description of what makes
+a shell interactive.
+
+@node Shell Commands
+@section Shell Commands
+@cindex commands, shell
+
+A simple shell command such as @code{echo a b c} consists of the command
+itself followed by arguments, separated by spaces.
+
+More complex shell commands are composed of simple commands arranged together
+in a variety of ways: in a pipeline in which the output of one command
+becomes the input of a second, in a loop or conditional construct, or in
+some other grouping.
+
+@menu
+* Simple Commands:: The most common type of command.
+* Pipelines:: Connecting the input and output of several
+ commands.
+* Lists:: How to execute commands sequentially.
+* Looping Constructs:: Shell commands for iterative action.
+* Conditional Constructs:: Shell commands for conditional execution.
+* Command Grouping:: Ways to group commands.
+@end menu
+
+@node Simple Commands
+@subsection Simple Commands
+@cindex commands, simple
+
+A simple command is the kind of command encountered most often.
+It's just a sequence of words separated by @code{blank}s, terminated
+by one of the shell's control operators (@pxref{Definitions}). The
+first word generally specifies a command to be executed, with the
+rest of the words being that command's arguments.
+
+The return status (@pxref{Exit Status}) of a simple command is
+its exit status as provided
+by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if
+the command was terminated by signal @var{n}.
+
+@node Pipelines
+@subsection Pipelines
+@cindex pipeline
+@cindex commands, pipelines
+
+A @code{pipeline} is a sequence of simple commands separated by
+@samp{|}.
+
+@rwindex time
+@rwindex !
+@cindex command timing
+The format for a pipeline is
+@example
+[@code{time} [@code{-p}]] [@code{!}] @var{command1} [@code{|} @var{command2} @dots{}]
+@end example
+
+@noindent
+The output of each command in the pipeline is connected via a pipe
+to the input of the next command.
+That is, each command reads the previous command's output.
+
+The reserved word @code{time} causes timing statistics
+to be printed for the pipeline once it finishes.
+The statistics currently consist of elapsed (wall-clock) time and
+user and system time consumed by the command's execution.
+The @option{-p} option changes the output format to that specified
+by @sc{posix}.
+The @env{TIMEFORMAT} variable may be set to a format string that
+specifies how the timing information should be displayed.
+@xref{Bash Variables}, for a description of the available formats.
+The use of @code{time} as a reserved word permits the timing of
+shell builtins, shell functions, and pipelines. An external
+@code{time} command cannot time these easily.
+
+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
+(@pxref{Command Execution Environment}). The exit
+status of a pipeline is the exit status of the last command in the
+pipeline. If the reserved word @samp{!} precedes the pipeline, the
+exit status is the logical negation of the exit status of the last command.
+
+@node Lists
+@subsection Lists of Commands
+@cindex commands, lists
+
+A @code{list} is a sequence of one or more pipelines separated by one
+of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||},
+and optionally terminated by one of @samp{;}, @samp{&}, or a
+@code{newline}.
+
+Of these list operators, @samp{&&} and @samp{||}
+have equal precedence, followed by @samp{;} and @samp{&},
+which have equal precedence.
+
+A sequence of one or more newlines may appear in a @code{list}
+to delimit commands, equivalent to a semicolon.
+
+If a command is terminated by the control operator @samp{&},
+the shell executes the command asynchronously in a subshell.
+This is known as executing the command in the @var{background}.
+The shell does not wait for the command to finish, and the return
+status is 0 (true).
+When job control is not active (@pxref{Job Control}),
+the standard input for asynchronous commands, in the absence of any
+explicit redirections, is redirected from @code{/dev/null}.
+
+Commands separated by a @samp{;} are executed sequentially; the shell
+waits for each command to terminate in turn. The return status is the
+exit status of the last command executed.
+
+The control operators @samp{&&} and @samp{||}
+denote @sc{and} lists and @sc{or} lists, respectively.
+An @sc{and} list has the form
+@example
+@var{command1} && @var{command2}
+@end example
+
+@noindent
+@var{command2} is executed if, and only if, @var{command1}
+returns an exit status of zero.
+
+An @sc{or} list has the form
+@example
+@var{command1} || @var{command2}
+@end example
+
+@noindent
+@var{command2} is executed if, and only if, @var{command1}
+returns a non-zero exit status.
+
+The return status of
+@sc{and} and @sc{or} lists is the exit status of the last command
+executed in the list.
+
+@node Looping Constructs
+@subsection Looping Constructs
+@cindex commands, looping
+
+Bash supports the following looping constructs.
+
+Note that wherever a @samp{;} appears in the description of a
+command's syntax, it may be replaced with one or more newlines.
+
+@table @code
+@item until
+@rwindex until
+@rwindex do
+@rwindex done
+The syntax of the @code{until} command is:
+@example
+until @var{test-commands}; do @var{consequent-commands}; done
+@end example
+Execute @var{consequent-commands} as long as
+@var{test-commands} has an exit status which is not zero.
+The return status is the exit status of the last command executed
+in @var{consequent-commands}, or zero if none was executed.
+
+@item while
+@rwindex while
+The syntax of the @code{while} command is:
+@example
+while @var{test-commands}; do @var{consequent-commands}; done
+@end example
+
+Execute @var{consequent-commands} as long as
+@var{test-commands} has an exit status of zero.
+The return status is the exit status of the last command executed
+in @var{consequent-commands}, or zero if none was executed.
+
+@item for
+@rwindex for
+The syntax of the @code{for} command is:
+
+@example
+for @var{name} [in @var{words} @dots{}]; do @var{commands}; done
+@end example
+Expand @var{words}, and execute @var{commands} once for each member
+in the resultant list, with @var{name} bound to the current member.
+If @samp{in @var{words}} is not present, the @code{for} command
+executes the @var{commands} once for each positional parameter that is
+set, as if @samp{in "$@@"} had been specified
+(@pxref{Special Parameters}).
+The return status is the exit status of the last command that executes.
+If there are no items in the expansion of @var{words}, no commands are
+executed, and the return status is zero.
+
+An alternate form of the @code{for} command is also supported:
+
+@example
+for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done
+@end example
+First, the arithmetic expression @var{expr1} is evaluated according
+to the rules described below (@pxref{Shell Arithmetic}).
+The arithmetic expression @var{expr2} is then evaluated repeatedly
+until it evaluates to zero.
+Each time @var{expr2} evaluates to a non-zero value, @var{commands} are
+executed and the arithmetic expression @var{expr3} is evaluated.
+If any expression is omitted, it behaves as if it evaluates to 1.
+The return value is the exit status of the last command in @var{list}
+that is executed, or false if any of the expressions is invalid.
+
+@end table
+
+The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins})
+may be used to control loop execution.
+
+@node Conditional Constructs
+@subsection Conditional Constructs
+@cindex commands, conditional
+
+@table @code
+@item if
+@rwindex if
+@rwindex then
+@rwindex else
+@rwindex elif
+@rwindex fi
+The syntax of the @code{if} command is:
+
+@example
+if @var{test-commands}; then
+ @var{consequent-commands};
+[elif @var{more-test-commands}; then
+ @var{more-consequents};]
+[else @var{alternate-consequents};]
+fi
+@end example
+
+The @var{test-commands} list is executed, and if its return status is zero,
+the @var{consequent-commands} list is executed.
+If @var{test-commands} returns a non-zero status, each @code{elif} list
+is executed in turn, and if its exit status is zero,
+the corresponding @var{more-consequents} is executed and the
+command completes.
+If @samp{else @var{alternate-consequents}} is present, and
+the final command in the final @code{if} or @code{elif} clause
+has a non-zero exit status, then @var{alternate-consequents} is executed.
+The return status is the exit status of the last command executed, or
+zero if no condition tested true.
+
+@item case
+@rwindex case
+@rwindex in
+@rwindex esac
+The syntax of the @code{case} command is:
+
+@example
+@code{case @var{word} in [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} esac}
+@end example
+
+@code{case} will selectively execute the @var{command-list} corresponding to
+the first @var{pattern} that matches @var{word}.
+The @samp{|} is used to separate multiple patterns, and the @samp{)}
+operator terminates a pattern list.
+A list of patterns and an associated command-list is known
+as a @var{clause}. Each clause must be terminated with @samp{;;}.
+The @var{word} undergoes tilde expansion, parameter expansion, command
+substitution, arithmetic expansion, and quote removal before matching is
+attempted. Each @var{pattern} undergoes tilde expansion, parameter
+expansion, command substitution, and arithmetic expansion.
+
+There may be an arbitrary number of @code{case} clauses, each terminated
+by a @samp{;;}. The first pattern that matches determines the
+command-list that is executed.
+
+Here is an example using @code{case} in a script that could be used to
+describe one interesting feature of an animal:
+
+@example
+echo -n "Enter the name of an animal: "
+read ANIMAL
+echo -n "The $ANIMAL has "
+case $ANIMAL in
+ horse | dog | cat) echo -n "four";;
+ man | kangaroo ) echo -n "two";;
+ *) echo -n "an unknown number of";;
+esac
+echo " legs."
+@end example
+
+@noindent
+The return status is zero if no @var{pattern} is matched. Otherwise, the
+return status is the exit status of the @var{command-list} executed.
+
+@item select
+@rwindex select
+
+The @code{select} construct allows the easy generation of menus.
+It has almost the same syntax as the @code{for} command:
+
+@example
+select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
+@end example
+
+The list of words following @code{in} is expanded, generating a list
+of items. The set of expanded words is printed on the standard
+error output stream, each preceded by a number. If the
+@samp{in @var{words}} is omitted, the positional parameters are printed,
+as if @samp{in "$@@"} had been specifed.
+The @env{PS3} prompt is then displayed and a line is read from the
+standard input.
+If the line consists of a number corresponding to one of the displayed
+words, then the value of @var{name} is set to that word.
+If the line is empty, the words and prompt are displayed again.
+If @code{EOF} is read, the @code{select} command completes.
+Any other value read causes @var{name} to be set to null.
+The line read is saved in the variable @env{REPLY}.
+
+The @var{commands} are executed after each selection until a
+@code{break} command is executed, at which
+point the @code{select} command completes.
+
+Here is an example that allows the user to pick a filename from the
+current directory, and displays the name and index of the file
+selected.
+
+@example
+select fname in *;
+do
+ echo you picked $fname \($REPLY\)
+ break;
+done
+@end example
+
+@item ((@dots{}))
+@example
+(( @var{expression} ))
+@end example
+
+The arithmetic @var{expression} is evaluated according to the rules
+described below (@pxref{Shell Arithmetic}).
+If the value of the expression is non-zero, the return status is 0;
+otherwise the return status is 1. This is exactly equivalent to
+@example
+let "@var{expression}"
+@end example
+@noindent
+@xref{Bash Builtins}, for a full description of the @code{let} builtin.
+
+@item [[@dots{}]]
+@rwindex [[
+@rwindex ]]
+@example
+[[ @var{expression} ]]
+@end example
+
+Return a status of 0 or 1 depending on the evaluation of
+the conditional expression @var{expression}.
+Expressions are composed of the primaries described below in
+@ref{Bash Conditional Expressions}.
+Word splitting and filename expansion are not performed on the words
+between the @samp{[[} and @samp{]]}; tilde expansion, parameter and
+variable expansion, arithmetic expansion, command substitution, process
+substitution, and quote removal are performed.
+Conditional operators such as @samp{-f} must be unquoted to be recognized
+as primaries.
+
+When the @samp{==} and @samp{!=} operators are used, the string to the
+right of the operator is considered a pattern and matched according
+to the rules described below in @ref{Pattern Matching}.
+The return value is 0 if the string matches or does not match
+the pattern, respectively, and 1 otherwise.
+Any part of the pattern may be quoted to force it to be matched as a
+string.
+
+Expressions may be combined using the following operators, listed
+in decreasing order of precedence:
+
+@table @code
+@item ( @var{expression} )
+Returns the value of @var{expression}.
+This may be used to override the normal precedence of operators.
+
+@item ! @var{expression}
+True if @var{expression} is false.
+
+@item @var{expression1} && @var{expression2}
+True if both @var{expression1} and @var{expression2} are true.
+
+@item @var{expression1} || @var{expression2}
+True if either @var{expression1} or @var{expression2} is true.
+@end table
+@noindent
+The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the
+value of @var{expression1} is sufficient to determine the return
+value of the entire conditional expression.
+
+@end table
+
+@node Command Grouping
+@subsection Grouping Commands
+@cindex commands, grouping
+
+Bash provides two ways to group a list of commands to be executed
+as a unit. When commands are grouped, redirections may be applied
+to the entire command list. For example, the output of all the
+commands in the list may be redirected to a single stream.
+
+@table @code
+@item ()
+@example
+( @var{list} )
+@end example
+
+Placing a list of commands between parentheses causes a subshell
+to be created, and each of the commands in @var{list} to be executed
+in that subshell. Since the @var{list} is executed in a subshell,
+variable assignments do not remain in effect after the subshell completes.
+
+@item @{@}
+@rwindex @{
+@rwindex @}
+@example
+@{ @var{list}; @}
+@end example
+
+Placing a list of commands between curly braces causes the list to
+be executed in the current shell context. No subshell is created.
+The semicolon (or newline) following @var{list} is required.
+@end table
+
+In addition to the creation of a subshell, there is a subtle difference
+between these two constructs due to historical reasons. The braces
+are @code{reserved words}, so they must be separated from the @var{list}
+by @code{blank}s. The parentheses are @code{operators}, and are
+recognized as separate tokens by the shell even if they are not separated
+from the @var{list} by whitespace.
+
+The exit status of both of these constructs is the exit status of
+@var{list}.
+
+@node Shell Functions
+@section Shell Functions
+@cindex shell function
+@cindex functions, shell
+
+Shell functions are a way to group commands for later execution
+using a single name for the group. They are executed just like
+a "regular" command.
+When the name of a shell function is used as a simple command name,
+the list of commands associated with that function name is executed.
+Shell functions are executed in the current
+shell context; no new process is created to interpret them.
+
+Functions are declared using this syntax:
+@rwindex function
+@example
+[ @code{function} ] @var{name} () @{ @var{command-list}; @}
+@end example
+
+This defines a shell function named @var{name}. The reserved
+word @code{function} is optional.
+If the @code{function} reserved
+word is supplied, the parentheses are optional.
+The @var{body} of the function is the @var{command-list} between @{ and @}.
+This list is executed whenever @var{name} is specified as the
+name of a command. The exit status of a function is
+the exit status of the last command executed in the body.
+
+Note that for historical reasons, the curly braces that surround
+the body of the function must be separated from the body by
+@code{blank}s or newlines.
+This is because the braces are reserved words and are only recognized
+as such when they are separated by whitespace.
+Also, the @var{command-list} must be terminated by a semicolon,
+a @samp{&}, or a newline.
+
+When a function is executed, the arguments to the
+function become the positional parameters
+during its execution (@pxref{Positional Parameters}).
+The special parameter @samp{#} that expands to the number of
+positional parameters is updated to reflect the change.
+Positional parameter @code{0} is unchanged.
+The first element of the @env{FUNCNAME} variable is set to the
+name of the function while the function is executing.
+All other aspects of the shell execution
+environment are identical between a function and its caller
+with the exception that the @env{DEBUG} trap
+below) is not inherited unless the function has been given the
+@code{trace} attribute using the @code{declare} builtin or
+the @code{-o functrace} option has been enabled with
+the @code{set} builtin,
+(in which case all functions inherit the @code{DEBUG} trap).
+@xref{Bourne Shell Builtins}, for the description of the
+@code{trap} builtin.
+
+If the builtin command @code{return}
+is executed in a function, the function completes and
+execution resumes with the next command after the function
+call.
+Any command associated with the @code{RETURN} trap is executed
+before execution resumes.
+When a function completes, the values of the
+positional parameters and the special parameter @samp{#}
+are restored to the values they had prior to the function's
+execution. If a numeric argument is given to @code{return},
+that is the function's return status; otherwise the function's
+return status is the exit status of the last command executed
+before the @code{return}.
+
+Variables local to the function may be declared with the
+@code{local} builtin. These variables are visible only to
+the function and the commands it invokes.
+
+Function names and definitions may be listed with the
+@option{-f} option to the @code{declare} or @code{typeset}
+builtin commands (@pxref{Bash Builtins}).
+The @option{-F} option to @code{declare} or @code{typeset}
+will list the function names only
+(and optionally the source file and line number, if the @code{extdebug}
+shell option is enabled).
+Functions may be exported so that subshells
+automatically have them defined with the
+@option{-f} option to the @code{export} builtin
+(@pxref{Bourne Shell Builtins}).
+Note that shell functions and variables with the same name may result
+in multiple identically-named entries in the environment passed to the
+shell's children.
+Care should be taken in cases where this may cause a problem.
+
+Functions may be recursive. No limit is placed on the number of
+recursive calls.
+
+@node Shell Parameters
+@section Shell Parameters
+@cindex parameters
+@cindex variable, shell
+@cindex shell variable
+
+@menu
+* Positional Parameters:: The shell's command-line arguments.
+* Special Parameters:: Parameters denoted by special characters.
+@end menu
+
+A @var{parameter} is an entity that stores values.
+It can be a @code{name}, a number, or one of the special characters
+listed below.
+A @var{variable} is a parameter denoted by a @code{name}.
+A variable has a @var{value} and zero or more @var{attributes}.
+Attributes are assigned using the @code{declare} builtin command
+(see the description of the @code{declare} builtin in @ref{Bash Builtins}).
+
+A parameter is set if it has been assigned a value. The null string is
+a valid value. Once a variable is set, it may be unset only by using
+the @code{unset} builtin command.
+
+A variable may be assigned to by a statement of the form
+@example
+@var{name}=[@var{value}]
+@end example
+@noindent
+If @var{value}
+is not given, the variable is assigned the null string. All
+@var{value}s undergo tilde expansion, parameter and variable expansion,
+command substitution, arithmetic expansion, and quote
+removal (detailed below). If the variable has its @code{integer}
+attribute set, then @var{value}
+is evaluated as an arithmetic expression even if the @code{$((@dots{}))}
+expansion is not used (@pxref{Arithmetic Expansion}).
+Word splitting is not performed, with the exception
+of @code{"$@@"} as explained below.
+Filename expansion is not performed.
+Assignment statements may also appear as arguments to the
+@code{declare}, @code{typeset}, @code{export}, @code{readonly},
+and @code{local} builtin commands.
+
+@node Positional Parameters
+@subsection Positional Parameters
+@cindex parameters, positional
+
+A @var{positional parameter} is a parameter denoted by one or more
+digits, other than the single digit @code{0}. Positional parameters are
+assigned from the shell's arguments when it is invoked,
+and may be reassigned using the @code{set} builtin command.
+Positional parameter @code{N} may be referenced as @code{$@{N@}}, or
+as @code{$N} when @code{N} consists of a single digit.
+Positional parameters may not be assigned to with assignment statements.
+The @code{set} and @code{shift} builtins are used to set and
+unset them (@pxref{Shell Builtin Commands}).
+The positional parameters are
+temporarily replaced when a shell function is executed
+(@pxref{Shell Functions}).
+
+When a positional parameter consisting of more than a single
+digit is expanded, it must be enclosed in braces.
+
+@node Special Parameters
+@subsection Special Parameters
+@cindex parameters, special
+
+The shell treats several parameters specially. These parameters may
+only be referenced; assignment to them is not allowed.
+
+@vtable @code
+
+@item *
+Expands to the positional parameters, starting from one. When the
+expansion occurs within double quotes, it expands to a single word
+with the value of each parameter separated by the first character
+of the @env{IFS}
+special variable. That is, @code{"$*"} is equivalent
+to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c}
+is the first character of the value of the @code{IFS}
+variable.
+If @env{IFS} is unset, the parameters are separated by spaces.
+If @env{IFS} is null, the parameters are joined without intervening
+separators.
+
+
+@item @@
+Expands to the positional parameters, starting from one. When the
+expansion occurs within double quotes, each parameter expands to a
+separate word. That is, @code{"$@@"} is equivalent to
+@code{"$1" "$2" @dots{}}.
+When there are no positional parameters, @code{"$@@"} and
+@code{$@@}
+expand to nothing (i.e., they are removed).
+
+@item #
+Expands to the number of positional parameters in decimal.
+
+@item ?
+Expands to the exit status of the most recently executed foreground
+pipeline.
+
+@item -
+(A hyphen.) Expands to the current option flags as specified upon
+invocation, by the @code{set}
+builtin command, or those set by the shell itself
+(such as the @option{-i} option).
+
+@item $
+Expands to the process @sc{id} of the shell. In a @code{()} subshell, it
+expands to the process @sc{id} of the invoking shell, not the subshell.
+
+@item !
+Expands to the process @sc{id} of the most recently executed background
+(asynchronous) command.
+
+@item 0
+Expands to the name of the shell or shell script. This is set at
+shell initialization. If Bash is invoked with a file of commands
+(@pxref{Shell Scripts}), @code{$0} is set to the name of that file.
+If Bash is started with the @option{-c} option (@pxref{Invoking Bash}),
+then @code{$0} is set to the first argument after the string to be
+executed, if one is present. Otherwise, it is set
+to the filename used to invoke Bash, as given by argument zero.
+
+@item _
+(An underscore.)
+At shell startup, set to the absolute filename of the shell or shell
+script being executed as passed in the argument list.
+Subsequently, expands to the last argument to the previous command,
+after expansion.
+Also set to the full pathname of each command executed and placed in
+the environment exported to that command.
+When checking mail, this parameter holds the name of the mail file.
+@end vtable
+
+@node Shell Expansions
+@section Shell Expansions
+@cindex expansion
+
+Expansion is performed on the command line after it has been split into
+@code{token}s. There are seven kinds of expansion performed:
+@itemize @bullet
+@item brace expansion
+@item tilde expansion
+@item parameter and variable expansion
+@item command substitution
+@item arithmetic expansion
+@item word splitting
+@item filename expansion
+@end itemize
+
+@menu
+* Brace Expansion:: Expansion of expressions within braces.
+* Tilde Expansion:: Expansion of the ~ character.
+* Shell Parameter Expansion:: How Bash expands variables to their values.
+* Command Substitution:: Using the output of a command as an argument.
+* Arithmetic Expansion:: How to use arithmetic in shell expansions.
+* Process Substitution:: A way to write and read to and from a
+ command.
+* Word Splitting:: How the results of expansion are split into separate
+ arguments.
+* Filename Expansion:: A shorthand for specifying filenames matching patterns.
+* Quote Removal:: How and when quote characters are removed from
+ words.
+@end menu
+
+The order of expansions is: brace expansion, tilde expansion,
+parameter, variable, and arithmetic expansion and
+command substitution
+(done in a left-to-right fashion), word splitting, and filename
+expansion.
+
+On systems that can support it, there is an additional expansion
+available: @var{process substitution}. This is performed at the
+same time as parameter, variable, and arithmetic expansion and
+command substitution.
+
+Only brace expansion, word splitting, and filename expansion
+can change the number of words of the expansion; other expansions
+expand a single word to a single word.
+The only exceptions to this are the expansions of
+@code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{@var{name}[@@]@}"}
+(@pxref{Arrays}).
+
+After all expansions, @code{quote removal} (@pxref{Quote Removal})
+is performed.
+
+@node Brace Expansion
+@subsection Brace Expansion
+@cindex brace expansion
+@cindex expansion, brace
+
+Brace expansion is a mechanism by which arbitrary strings may be generated.
+This mechanism is similar to
+@var{filename expansion} (@pxref{Filename Expansion}),
+but the file names 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 sequnce expression
+between a pair of braces,
+followed by an optional @var{postscript}.
+The preamble is prefixed to each string contained within the braces, and
+the postscript is then appended to each resulting string, expanding left
+to right.
+
+Brace expansions may be nested.
+The results of each expanded string are not sorted; left to right order
+is preserved.
+For example,
+@example
+bash$ echo a@{d,c,b@}e
+ade ace abe
+@end example
+
+A sequence expression takes the form @code{@{@var{x}..@var{y}@}},
+where @var{x} and @var{y} are either integers or single characters.
+When integers are supplied, the expression expands to each number between
+@var{x} and @var{y}, inclusive.
+When characters are supplied, the expression expands to each character
+lexicographically between @var{x} and @var{y}, inclusive. Note that
+both @var{x} and @var{y} must be of the same type.
+
+Brace expansion is performed before any other expansions,
+and any characters special to other expansions are preserved
+in the result. It is strictly textual. Bash
+does not apply any syntactic interpretation to the context of the
+expansion or the text between the braces.
+To avoid conflicts with parameter expansion, the string @samp{$@{}
+is not considered eligible for brace expansion.
+
+A correctly-formed brace expansion must contain unquoted opening
+and closing braces, and at least one unquoted comma or a valid
+sequence expression.
+Any incorrectly formed brace expansion is left unchanged.
+
+A @{ or @samp{,} may be quoted with a backslash to prevent its
+being considered part of a brace expression.
+To avoid conflicts with parameter expansion, the string @samp{$@{}
+is not considered eligible for brace expansion.
+
+This construct is typically used as shorthand when the common
+prefix of the strings to be generated is longer than in the
+above example:
+@example
+mkdir /usr/local/src/bash/@{old,new,dist,bugs@}
+@end example
+or
+@example
+chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
+@end example
+
+@node Tilde Expansion
+@subsection Tilde Expansion
+@cindex tilde expansion
+@cindex expansion, tilde
+
+If a word begins with an unquoted tilde character (@samp{~}), all of the
+characters up to the first unquoted slash (or all characters,
+if there is no unquoted slash) are considered a @var{tilde-prefix}.
+If none of the characters in the tilde-prefix are quoted, the
+characters in the tilde-prefix following the tilde are treated as a
+possible @var{login name}.
+If this login name is the null string, the tilde is replaced with the
+value of the @env{HOME} shell variable.
+If @env{HOME} is unset, the home directory of the user executing the
+shell is substituted instead.
+Otherwise, the tilde-prefix is replaced with the home directory
+associated with the specified login name.
+
+If the tilde-prefix is @samp{~+}, the value of
+the shell variable @env{PWD} replaces the tilde-prefix.
+If the tilde-prefix is @samp{~-}, the value of the shell variable
+@env{OLDPWD}, if it is set, is substituted.
+
+If the characters following the tilde in the tilde-prefix consist of a
+number @var{N}, optionally prefixed by a @samp{+} or a @samp{-},
+the tilde-prefix is replaced with the
+corresponding element from the directory stack, as it would be displayed
+by the @code{dirs} builtin invoked with the characters following tilde
+in the tilde-prefix as an argument (@pxref{The Directory Stack}).
+If the tilde-prefix, sans the tilde, consists of a number without a
+leading @samp{+} or @samp{-}, @samp{+} is assumed.
+
+If the login name is invalid, or the tilde expansion fails, the word is
+left unchanged.
+
+Each variable assignment is checked for unquoted tilde-prefixes immediately
+following a @samp{:} or @samp{=}.
+In these cases, tilde expansion is also performed.
+Consequently, one may use file names with tildes in assignments to
+@env{PATH}, @env{MAILPATH}, and @env{CDPATH},
+and the shell assigns the expanded value.
+
+The following table shows how Bash treats unquoted tilde-prefixes:
+
+@table @code
+@item ~
+The value of @code{$HOME}
+@item ~/foo
+@file{$HOME/foo}
+
+@item ~fred/foo
+The subdirectory @code{foo} of the home directory of the user
+@code{fred}
+
+@item ~+/foo
+@file{$PWD/foo}
+
+@item ~-/foo
+@file{$@{OLDPWD-'~-'@}/foo}
+
+@item ~@var{N}
+The string that would be displayed by @samp{dirs +@var{N}}
+
+@item ~+@var{N}
+The string that would be displayed by @samp{dirs +@var{N}}
+
+@item ~-@var{N}
+The string that would be displayed by @samp{dirs -@var{N}}
+
+@end table
+
+@node Shell Parameter Expansion
+@subsection Shell Parameter Expansion
+@cindex parameter expansion
+@cindex expansion, parameter
+
+The @samp{$} character introduces parameter expansion,
+command substitution, or arithmetic expansion. The parameter name
+or symbol to be expanded may be enclosed in braces, which
+are optional but serve to protect the variable to be expanded from
+characters immediately following it which could be
+interpreted as part of the name.
+
+When braces are used, the matching ending brace is the first @samp{@}}
+not escaped by a backslash or within a quoted string, and not within an
+embedded arithmetic expansion, command substitution, or parameter
+expansion.
+
+The basic form of parameter expansion is $@{@var{parameter}@}.
+The value of @var{parameter} is substituted. The braces are required
+when @var{parameter}
+is a positional parameter with more than one digit,
+or when @var{parameter}
+is followed by a character that is not to be
+interpreted as part of its name.
+
+If the first character of @var{parameter} is an exclamation point,
+a level of variable indirection is introduced.
+Bash uses the value of the variable formed from the rest of
+@var{parameter} as the name of the variable; this variable is then
+expanded and that value is used in the rest of the substitution, rather
+than the value of @var{parameter} itself.
+This is known as @code{indirect expansion}.
+The exceptions to this are the expansions of $@{!@var{prefix*}@}
+and $@{!@var{name}[@@]@}
+described below.
+The exclamation point must immediately follow the left brace in order to
+introduce indirection.
+
+In each of the cases below, @var{word} is subject to tilde expansion,
+parameter expansion, command substitution, and arithmetic expansion.
+
+When not performing substring expansion, Bash tests for a parameter
+that is unset or null; omitting the colon results in a test only for a
+parameter that is unset. Put another way, if the colon is included,
+the operator tests for both existence and that the value is not null;
+if the colon is omitted, the operator tests only for existence.
+
+@table @code
+
+@item $@{@var{parameter}:@minus{}@var{word}@}
+If @var{parameter} is unset or null, the expansion of
+@var{word} is substituted. Otherwise, the value of
+@var{parameter} is substituted.
+
+@item $@{@var{parameter}:=@var{word}@}
+If @var{parameter}
+is unset or null, the expansion of @var{word}
+is assigned to @var{parameter}.
+The value of @var{parameter}
+is then substituted. Positional parameters and special parameters may
+not be assigned to in this way.
+
+@item $@{@var{parameter}:?@var{word}@}
+If @var{parameter}
+is null or unset, the expansion of @var{word} (or a message
+to that effect if @var{word}
+is not present) is written to the standard error and the shell, if it
+is not interactive, exits. Otherwise, the value of @var{parameter} is
+substituted.
+
+@item $@{@var{parameter}:+@var{word}@}
+If @var{parameter}
+is null or unset, nothing is substituted, otherwise the expansion of
+@var{word} is substituted.
+
+@item $@{@var{parameter}:@var{offset}@}
+@itemx $@{@var{parameter}:@var{offset}:@var{length}@}
+Expands to up to @var{length} characters of @var{parameter}
+starting at the character specified by @var{offset}.
+If @var{length} is omitted, expands to the substring of
+@var{parameter} starting at the character specified by @var{offset}.
+@var{length} and @var{offset} are arithmetic expressions
+(@pxref{Shell Arithmetic}).
+This is referred to as Substring Expansion.
+
+@var{length} must evaluate to a number greater than or equal to zero.
+If @var{offset} evaluates to a number less than zero, the value
+is used as an offset from the end of the value of @var{parameter}.
+If @var{parameter} is @samp{@@}, the result is @var{length} positional
+parameters beginning at @var{offset}.
+If @var{parameter} is an array name indexed by @samp{@@} or @samp{*},
+the result is the @var{length}
+members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
+Substring indexing is zero-based unless the positional parameters
+are used, in which case the indexing starts at 1.
+
+@item $@{!@var{prefix}*@}
+@itemx $@{!@var{prefix}@@@}
+Expands to the names of variables whose names begin with @var{prefix},
+separated by the first character of the @env{IFS} special variable.
+
+@item $@{!@var{name}[@@]@}
+@itemx $@{!@var{name}[*]@}
+If @var{name} is an array variable, expands to the list of array indices
+(keys) assigned in @var{name}.
+If @var{name} is not an array, expands to 0 if @var{name} is set and null
+otherwise.
+When @samp{@@} is used and the expansion appears within double quotes, each
+key expands to a separate word.
+
+@item $@{#@var{parameter}@}
+The length in characters of the expanded value of @var{parameter} is
+substituted.
+If @var{parameter} is @samp{*} or @samp{@@}, the value substituted
+is the number of positional parameters.
+If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@},
+the value substituted is the number of elements in the array.
+
+@item $@{@var{parameter}#@var{word}@}
+@itemx $@{@var{parameter}##@var{word}@}
+The @var{word}
+is expanded to produce a pattern just as in filename
+expansion (@pxref{Filename Expansion}). If the pattern matches
+the beginning of the expanded value of @var{parameter},
+then the result of the expansion is the expanded value of @var{parameter}
+with the shortest matching pattern (the @samp{#} case) or the
+longest matching pattern (the @samp{##} case) deleted.
+If @var{parameter} is @samp{@@} or @samp{*},
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter} is an array variable subscripted with
+@samp{@@} or @samp{*},
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}%@var{word}@}
+@itemx $@{@var{parameter}%%@var{word}@}
+The @var{word} is expanded to produce a pattern just as in
+filename expansion.
+If the pattern matches a trailing portion of the expanded value of
+@var{parameter}, then the result of the expansion is the value of
+@var{parameter} with the shortest matching pattern (the @samp{%} case)
+or the longest matching pattern (the @samp{%%} case) deleted.
+If @var{parameter} is @samp{@@} or @samp{*},
+the pattern removal operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the pattern removal operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@item $@{@var{parameter}/@var{pattern}/@var{string}@}
+@itemx $@{@var{parameter}//@var{pattern}/@var{string}@}
+
+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}.
+In the first form, only the first match is replaced.
+The second form causes all matches of @var{pattern} to be
+replaced with @var{string}.
+If @var{pattern} begins with @samp{#}, it must match at the beginning
+of the expanded value of @var{parameter}.
+If @var{pattern} begins with @samp{%}, it must match at the end
+of the expanded value of @var{parameter}.
+If @var{string} is null, matches of @var{pattern} are deleted
+and the @code{/} following @var{pattern} may be omitted.
+If @var{parameter} is @samp{@@} or @samp{*},
+the substitution operation is applied to each positional
+parameter in turn, and the expansion is the resultant list.
+If @var{parameter}
+is an array variable subscripted with @samp{@@} or @samp{*},
+the substitution operation is applied to each member of the
+array in turn, and the expansion is the resultant list.
+
+@end table
+
+@node Command Substitution
+@subsection Command Substitution
+@cindex command substitution
+
+Command substitution allows the output of a command to replace
+the command itself.
+Command substitution occurs when a command is enclosed as follows:
+@example
+$(@var{command})
+@end example
+@noindent
+or
+@example
+`@var{command}`
+@end example
+
+@noindent
+Bash performs the expansion by executing @var{command} and
+replacing the command substitution with the standard output of the
+command, with any trailing newlines deleted.
+Embedded newlines are not deleted, but they may be removed during
+word splitting.
+The command substitution @code{$(cat @var{file})} can be
+replaced by the equivalent but faster @code{$(< @var{file})}.
+
+When the old-style backquote form of substitution is used,
+backslash retains its literal meaning except when followed by
+@samp{$}, @samp{`}, or @samp{\}.
+The first backquote not preceded by a backslash terminates the
+command substitution.
+When using the @code{$(@var{command})} form, all characters between
+the parentheses make up the command; none are treated specially.
+
+Command substitutions may be nested. To nest when using the backquoted
+form, escape the inner backquotes with backslashes.
+
+If the substitution appears within double quotes, word splitting and
+filename expansion are not performed on the results.
+
+@node Arithmetic Expansion
+@subsection Arithmetic Expansion
+@cindex expansion, arithmetic
+@cindex arithmetic expansion
+
+Arithmetic expansion allows the evaluation of an arithmetic expression
+and the substitution of the result. The format for arithmetic expansion is:
+
+@example
+$(( @var{expression} ))
+@end example
+
+The expression is treated as if it were within double quotes, but
+a double quote inside the parentheses is not treated specially.
+All tokens in the expression undergo parameter expansion, command
+substitution, and quote removal.
+Arithmetic expansions may be nested.
+
+The evaluation is performed according to the rules listed below
+(@pxref{Shell Arithmetic}).
+If the expression is invalid, Bash prints a message indicating
+failure to the standard error and no substitution occurs.
+
+@node Process Substitution
+@subsection Process Substitution
+@cindex process substitution
+
+Process substitution is supported on systems that support named
+pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files.
+It takes the form of
+@example
+<(@var{list})
+@end example
+@noindent
+or
+@example
+>(@var{list})
+@end example
+@noindent
+The process @var{list} is run with its input or output connected to a
+@sc{fifo} or some file in @file{/dev/fd}. The name of this file is
+passed as an argument to the current command as the result of the
+expansion. If the @code{>(@var{list})} form is used, writing to
+the file will provide input for @var{list}. If the
+@code{<(@var{list})} form is used, the file passed as an
+argument should be read to obtain the output of @var{list}.
+Note that no space may appear between the @code{<} or @code{>}
+and the left parenthesis, otherwise the construct would be interpreted
+as a redirection.
+
+When available, process substitution is performed simultaneously with
+parameter and variable expansion, command substitution, and arithmetic
+expansion.
+
+@node Word Splitting
+@subsection Word Splitting
+@cindex word splitting
+
+The shell scans the results of parameter expansion, command substitution,
+and arithmetic expansion that did not occur within double quotes for
+word splitting.
+
+The shell treats each character of @env{$IFS}
+as a delimiter, and splits the results of the other
+expansions into words on these characters. If
+@env{IFS} is unset, or its value is exactly @code{<space><tab><newline>},
+the default, then any sequence of @env{IFS}
+characters serves to delimit words. If @env{IFS}
+has a value other than the default, then sequences of
+the whitespace characters @code{space} and @code{tab}
+are ignored at the beginning and end of the
+word, as long as the whitespace character is in the
+value of @env{IFS} (an @env{IFS} whitespace character).
+Any character in @env{IFS} that is not @env{IFS}
+whitespace, along with any adjacent @env{IFS}
+whitespace characters, delimits a field. A sequence of @env{IFS}
+whitespace characters is also treated as a delimiter.
+If the value of @env{IFS} is null, no word splitting occurs.
+
+Explicit null arguments (@code{""} or @code{''}) are retained.
+Unquoted implicit null arguments, resulting from the expansion of
+parameters that have no values, are removed.
+If a parameter with no value is expanded within double quotes, a
+null argument results and is retained.
+
+Note that if no expansion occurs, no splitting
+is performed.
+
+@node Filename Expansion
+@subsection Filename Expansion
+@menu
+* Pattern Matching:: How the shell matches patterns.
+@end menu
+@cindex expansion, filename
+@cindex expansion, pathname
+@cindex filename expansion
+@cindex pathname expansion
+
+After word splitting, unless the @option{-f} option has been set
+(@pxref{The Set Builtin}), Bash scans each word for the characters
+@samp{*}, @samp{?}, and @samp{[}.
+If one of these characters appears, then the word is
+regarded as a @var{pattern},
+and replaced with an alphabetically sorted list of
+file names matching the pattern. If no matching file names are found,
+and the shell option @code{nullglob} is disabled, the word is left
+unchanged.
+If the @code{nullglob} option is set, and no matches are found, the word
+is removed.
+If the shell option @code{nocaseglob} is enabled, the match is performed
+without regard to the case of alphabetic characters.
+
+When a pattern is used for filename generation, 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.
+When matching a file name, the slash character must always be
+matched explicitly.
+In other cases, the @samp{.} character is not treated specially.
+
+See the description of @code{shopt} in @ref{Bash Builtins},
+for a description of the @code{nocaseglob}, @code{nullglob},
+and @code{dotglob} options.
+
+The @env{GLOBIGNORE}
+shell variable may be used to restrict the set of filenames matching a
+pattern. If @env{GLOBIGNORE}
+is set, each matching filename that also matches one of the patterns in
+@env{GLOBIGNORE} is removed from the list of matches. The filenames
+@file{.} and @file{..}
+are always ignored when @env{GLOBIGNORE}
+is set and not null.
+However, setting @env{GLOBIGNORE} to a non-null value has the effect of
+enabling the @code{dotglob}
+shell option, so all other filenames beginning with a
+@samp{.} will match.
+To get the old behavior of ignoring filenames beginning with a
+@samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}.
+The @code{dotglob} option is disabled when @env{GLOBIGNORE}
+is unset.
+
+@node Pattern Matching
+@subsubsection Pattern Matching
+@cindex pattern matching
+@cindex matching, pattern
+
+Any character that appears in a pattern, other than the special pattern
+characters described below, matches itself.
+The @sc{nul} character may not occur in a pattern.
+A backslash escapes the following character; the
+escaping backslash is discarded when matching.
+The special pattern characters must be quoted if they are to be matched
+literally.
+
+The special pattern characters have the following meanings:
+@table @code
+@item *
+Matches any string, including the null string.
+@item ?
+Matches any single character.
+@item [@dots{}]
+Matches any one of the enclosed characters. A pair of characters
+separated by a hyphen denotes a @var{range expression};
+any character that sorts between those two characters, inclusive,
+using the current locale's collating sequence and character set,
+is matched. If the first character following the
+@samp{[} is a @samp{!} or a @samp{^}
+then any character not enclosed is matched. A @samp{@minus{}}
+may be matched by including it as the first or last character
+in the set. A @samp{]} may be matched by including it as the first
+character in the set.
+The sorting order of characters in range expressions is determined by
+the current locale and the value of the @env{LC_COLLATE} shell variable,
+if set.
+
+For example, in the default C locale, @samp{[a-dx-z]} is equivalent to
+@samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in
+these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
+it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example. To obtain
+the traditional interpretation of ranges in bracket expressions, you can
+force the use of the C locale by setting the @env{LC_COLLATE} or
+@env{LC_ALL} environment variable to the value @samp{C}.
+
+Within @samp{[} and @samp{]}, @var{character classes} can be specified
+using the syntax
+@code{[:}@var{class}@code{:]}, where @var{class} is one of the
+following classes defined in the @sc{posix} 1003.2 standard:
+@example
+alnum alpha ascii blank cntrl digit graph lower
+print punct space upper word xdigit
+@end example
+@noindent
+A character class matches any character belonging to that class.
+The @code{word} character class matches letters, digits, and the character
+@samp{_}.
+
+Within @samp{[} and @samp{]}, an @var{equivalence class} can be
+specified using the syntax @code{[=}@var{c}@code{=]}, which
+matches all characters with the same collation weight (as defined
+by the current locale) as the character @var{c}.
+
+Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]}
+matches the collating symbol @var{symbol}.
+@end table
+
+If the @code{extglob} shell option is enabled using the @code{shopt}
+builtin, several extended pattern matching operators are recognized.
+In the following description, a @var{pattern-list} is a list of one
+or more patterns separated by a @samp{|}.
+Composite patterns may be formed using one or more of the following
+sub-patterns:
+
+@table @code
+@item ?(@var{pattern-list})
+Matches zero or one occurrence of the given patterns.
+
+@item *(@var{pattern-list})
+Matches zero or more occurrences of the given patterns.
+
+@item +(@var{pattern-list})
+Matches one or more occurrences of the given patterns.
+
+@item @@(@var{pattern-list})
+Matches exactly one of the given patterns.
+
+@item !(@var{pattern-list})
+Matches anything except one of the given patterns.
+@end table
+
+@node Quote Removal
+@subsection Quote Removal
+
+After the preceding expansions, all unquoted occurrences of the
+characters @samp{\}, @samp{'}, and @samp{"} that did not
+result from one of the above expansions are removed.
+
+@node Redirections
+@section Redirections
+@cindex redirection
+
+Before a command is executed, its input and output
+may be @var{redirected}
+using a special notation interpreted by the shell.
+Redirection may also be used to open and close files for the
+current shell execution environment. The following redirection
+operators may precede or appear anywhere within a
+simple command or may follow a command.
+Redirections are processed in the order they appear, from
+left to right.
+
+In the following descriptions, if the file descriptor number is
+omitted, and the first character of the redirection operator is
+@samp{<}, the redirection refers to the standard input (file
+descriptor 0). If the first character of the redirection operator
+is @samp{>}, the redirection refers to the standard output (file
+descriptor 1).
+
+The word following the redirection operator in the following
+descriptions, unless otherwise noted, is subjected to brace expansion,
+tilde expansion, parameter expansion, command substitution, arithmetic
+expansion, quote removal, filename expansion, and word splitting.
+If it expands to more than one word, Bash reports an error.
+
+Note that the order of redirections is significant. For example,
+the command
+@example
+ls > @var{dirlist} 2>&1
+@end example
+@noindent
+directs both standard output (file descriptor 1) and standard error
+(file descriptor 2) to the file @var{dirlist}, while the command
+@example
+ls 2>&1 > @var{dirlist}
+@end example
+@noindent
+directs only the standard output to file @var{dirlist},
+because the standard error was duplicated as standard output
+before the standard output was redirected to @var{dirlist}.
+
+Bash handles several filenames specially when they are used in
+redirections, as described in the following table:
+
+@table @code
+@item /dev/fd/@var{fd}
+If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated.
+
+@item /dev/stdin
+File descriptor 0 is duplicated.
+
+@item /dev/stdout
+File descriptor 1 is duplicated.
+
+@item /dev/stderr
+File descriptor 2 is duplicated.
+
+@item /dev/tcp/@var{host}/@var{port}
+If @var{host} is a valid hostname or Internet address, and @var{port}
+is an integer port number or service name, Bash attempts to open a TCP
+connection to the corresponding socket.
+
+@item /dev/udp/@var{host}/@var{port}
+If @var{host} is a valid hostname or Internet address, and @var{port}
+is an integer port number or service name, Bash attempts to open a UDP
+connection to the corresponding socket.
+
+@end table
+
+A failure to open or create a file causes the redirection to fail.
+
+@subsection Redirecting Input
+Redirection of input causes the file whose name results from
+the expansion of @var{word}
+to be opened for reading on file descriptor @code{n},
+or the standard input (file descriptor 0) if @code{n}
+is not specified.
+
+The general format for redirecting input is:
+@example
+[@var{n}]<@var{word}
+@end example
+
+@subsection Redirecting Output
+Redirection of output causes the file whose name results from
+the expansion of @var{word}
+to be opened for writing on file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n}
+is not specified. If the file does not exist it is created;
+if it does exist it is truncated to zero size.
+
+The general format for redirecting output is:
+@example
+[@var{n}]>[|]@var{word}
+@end example
+
+If the redirection operator is @samp{>}, and the @code{noclobber}
+option to the @code{set} builtin has been enabled, the redirection
+will fail if the file whose name results from the expansion of
+@var{word} exists and is a regular file.
+If the redirection operator is @samp{>|}, or the redirection operator is
+@samp{>} and the @code{noclobber} option is not enabled, the redirection
+is attempted even if the file named by @var{word} exists.
+
+@subsection Appending Redirected Output
+Redirection of output in this fashion
+causes the file whose name results from
+the expansion of @var{word}
+to be opened for appending on file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n}
+is not specified. If the file does not exist it is created.
+
+The general format for appending output is:
+@example
+[@var{n}]>>@var{word}
+@end example
+
+@subsection Redirecting Standard Output and Standard Error
+Bash allows both the
+standard output (file descriptor 1) and
+the standard error output (file descriptor 2)
+to be redirected to the file whose name is the
+expansion of @var{word} with this construct.
+
+There are two formats for redirecting standard output and
+standard error:
+@example
+&>@var{word}
+@end example
+@noindent
+and
+@example
+>&@var{word}
+@end example
+@noindent
+Of the two forms, the first is preferred.
+This is semantically equivalent to
+@example
+>@var{word} 2>&1
+@end example
+
+@subsection Here Documents
+This type of redirection instructs the shell to read input from the
+current source until a line containing only @var{word}
+(with no trailing blanks) is seen. All of
+the lines read up to that point are then used as the standard
+input for a command.
+
+The format of here-documents is:
+@example
+<<[@minus{}]@var{word}
+ @var{here-document}
+@var{delimiter}
+@end example
+
+No parameter expansion, command substitution, arithmetic expansion,
+or filename expansion is performed on
+@var{word}. If any characters in @var{word} are quoted, the
+@var{delimiter} is the result of quote removal on @var{word},
+and the lines in the here-document are not expanded.
+If @var{word} is unquoted,
+all lines of the here-document are subjected to parameter expansion,
+command substitution, and arithmetic expansion. In the latter
+case, the character sequence @code{\newline} is ignored, and @samp{\}
+must be used to quote the characters
+@samp{\}, @samp{$}, and @samp{`}.
+
+If the redirection operator is @samp{<<-},
+then all leading tab characters are stripped from input lines and the
+line containing @var{delimiter}.
+This allows here-documents within shell scripts to be indented in a
+natural fashion.
+
+@subsection Here Strings
+A variant of here documents, the format is:
+@example
+<<< @var{word}
+@end example
+
+The @var{word} is expanded and supplied to the command on its standard
+input.
+
+@subsection Duplicating File Descriptors
+The redirection operator
+@example
+[@var{n}]<&@var{word}
+@end example
+@noindent
+is used to duplicate input file descriptors.
+If @var{word}
+expands to one or more digits, the file descriptor denoted by @var{n}
+is made to be a copy of that file descriptor.
+If the digits in @var{word} do not specify a file descriptor open for
+input, a redirection error occurs.
+If @var{word}
+evaluates to @samp{-}, file descriptor @var{n} is closed. If
+@var{n} is not specified, the standard input (file descriptor 0) is used.
+
+The operator
+@example
+[@var{n}]>&@var{word}
+@end example
+@noindent
+is used similarly to duplicate output file descriptors. If
+@var{n} is not specified, the standard output (file descriptor 1) is used.
+If the digits in @var{word} do not specify a file descriptor open for
+output, a redirection error occurs.
+As a special case, if @var{n} is omitted, and @var{word} does not
+expand to one or more digits, the standard output and standard
+error are redirected as described previously.
+
+@subsection Moving File Descriptors
+The redirection operator
+@example
+[@var{n}]<&@var{digit}-
+@end example
+@noindent
+moves the file descriptor @var{digit} to file descriptor @var{n},
+or the standard input (file descriptor 0) if @var{n} is not specified.
+@var{digit} is closed after being duplicated to @var{n}.
+
+Similarly, the redirection operator
+@example
+[@var{n}]>&@var{digit}-
+@end example
+@noindent
+moves the file descriptor @var{digit} to file descriptor @var{n},
+or the standard output (file descriptor 1) if @var{n} is not specified.
+
+@subsection Opening File Descriptors for Reading and Writing
+The redirection operator
+@example
+[@var{n}]<>@var{word}
+@end example
+@noindent
+causes the file whose name is the expansion of @var{word}
+to be opened for both reading and writing on file descriptor
+@var{n}, or on file descriptor 0 if @var{n}
+is not specified. If the file does not exist, it is created.
+
+@node Executing Commands
+@section Executing Commands
+
+@menu
+* Simple Command Expansion:: How Bash expands simple commands before
+ executing them.
+
+* Command Search and Execution:: How Bash finds commands and runs them.
+
+* Command Execution Environment:: The environment in which Bash
+ executes commands that are not
+ shell builtins.
+
+* Environment:: The environment given to a command.
+
+* Exit Status:: The status returned by commands and how Bash
+ interprets it.
+
+* Signals:: What happens when Bash or a command it runs
+ receives a signal.
+
+@end menu
+
+@node Simple Command Expansion
+@subsection Simple Command Expansion
+@cindex command expansion
+
+When a simple command is executed, the shell performs the following
+expansions, assignments, and redirections, from left to right.
+
+@enumerate
+@item
+The words that the parser has marked as variable assignments (those
+preceding the command name) and redirections are saved for later
+processing.
+
+@item
+The words that are not variable assignments or redirections are
+expanded (@pxref{Shell Expansions}).
+If any words remain after expansion, the first word
+is taken to be the name of the command and the remaining words are
+the arguments.
+
+@item
+Redirections are performed as described above (@pxref{Redirections}).
+
+@item
+The text after the @samp{=} in each variable assignment undergoes tilde
+expansion, parameter expansion, command substitution, arithmetic expansion,
+and quote removal before being assigned to the variable.
+@end enumerate
+
+If no command name results, the variable assignments affect the current
+shell environment. Otherwise, the variables are added to the environment
+of the executed command and do not affect the current shell environment.
+If any of the assignments attempts to assign a value to a readonly variable,
+an error occurs, and the command exits with a non-zero status.
+
+If no command name results, redirections are performed, but do not
+affect the current shell environment. A redirection error causes the
+command to exit with a non-zero status.
+
+If there is a command name left after expansion, execution proceeds as
+described below. Otherwise, the command exits. If one of the expansions
+contained a command substitution, the exit status of the command is
+the exit status of the last command substitution performed. If there
+were no command substitutions, the command exits with a status of zero.
+
+@node Command Search and Execution
+@subsection Command Search and Execution
+@cindex command execution
+@cindex command search
+
+After a command has been split into words, if it results in a
+simple command and an optional list of arguments, the following
+actions are taken.
+
+@enumerate
+@item
+If the command name contains no slashes, the shell attempts to
+locate it. If there exists a shell function by that name, that
+function is invoked as described in @ref{Shell Functions}.
+
+@item
+If the name does not match a function, the shell searches for
+it in the list of shell builtins. If a match is found, that
+builtin is invoked.
+
+@item
+If the name is neither a shell function nor a builtin,
+and contains no slashes, Bash searches each element of
+@env{$PATH} for a directory containing an executable file
+by that name. Bash uses a hash table to remember the full
+pathnames of executable files to avoid multiple @env{PATH} searches
+(see the description of @code{hash} in @ref{Bourne Shell Builtins}).
+A full search of the directories in @env{$PATH}
+is performed only if the command is not found in the hash table.
+If the search is unsuccessful, the shell prints an error
+message and returns an exit status of 127.
+
+@item
+If the search is successful, or if the command name contains
+one or more slashes, the shell executes the named program in
+a separate execution environment.
+Argument 0 is set to the name given, and the remaining arguments
+to the command are set to the arguments supplied, if any.
+
+@item
+If this execution fails because the file is not in executable
+format, and the file is not a directory, it is assumed to be a
+@var{shell script} and the shell executes it as described in
+@ref{Shell Scripts}.
+
+@item
+If the command was not begun asynchronously, the shell waits for
+the command to complete and collects its exit status.
+
+@end enumerate
+
+@node Command Execution Environment
+@subsection Command Execution Environment
+@cindex execution environment
+
+The shell has an @var{execution environment}, which consists of the
+following:
+
+@itemize @bullet
+@item
+open files inherited by the shell at invocation, as modified by
+redirections supplied to the @code{exec} builtin
+
+@item
+the current working directory as set by @code{cd}, @code{pushd}, or
+@code{popd}, or inherited by the shell at invocation
+
+@item
+the file creation mode mask as set by @code{umask} or inherited from
+the shell's parent
+
+@item
+current traps set by @code{trap}
+
+@item
+shell parameters that are set by variable assignment or with @code{set}
+or inherited from the shell's parent in the environment
+
+@item
+shell functions defined during execution or inherited from the shell's
+parent in the environment
+
+@item
+options enabled at invocation (either by default or with command-line
+arguments) or by @code{set}
+
+@item
+options enabled by @code{shopt}
+
+@item
+shell aliases defined with @code{alias} (@pxref{Aliases})
+
+@item
+various process @sc{id}s, including those of background jobs
+(@pxref{Lists}), the value of @code{$$}, and the value of
+@env{$PPID}
+
+@end itemize
+
+When a simple command other than a builtin or shell function
+is to be executed, it
+is invoked in a separate execution environment that consists of
+the following. Unless otherwise noted, the values are inherited
+from the shell.
+
+@itemize @bullet
+@item
+the shell's open files, plus any modifications and additions specified
+by redirections to the command
+
+@item
+the current working directory
+
+@item
+the file creation mode mask
+
+@item
+shell variables and functions marked for export, along with variables
+exported for the command, passed in the environment (@pxref{Environment})
+
+@item
+traps caught by the shell are reset to the values inherited from the
+shell's parent, and traps ignored by the shell are ignored
+
+@end itemize
+
+A command invoked in this separate environment cannot affect the
+shell's execution environment.
+
+Command substitution and asynchronous commands are invoked in a
+subshell environment that is a duplicate of the shell environment,
+except that traps caught by the shell are reset to the values
+that the shell inherited from its parent at invocation. Builtin
+commands that are invoked as part of a pipeline are also executed
+in a subshell environment. Changes made to the subshell environment
+cannot affect the shell's execution environment.
+
+If a command is followed by a @samp{&} and job control is not active, the
+default standard input for the command is the empty file @file{/dev/null}.
+Otherwise, the invoked command inherits the file descriptors of the calling
+shell as modified by redirections.
+
+@node Environment
+@subsection Environment
+@cindex environment
+
+When a program is invoked it is given an array of strings
+called the @var{environment}.
+This is a list of name-value pairs, of the form @code{name=value}.
+
+Bash provides several ways to manipulate the environment.
+On invocation, the shell scans its own environment and
+creates a parameter for each name found, automatically marking
+it for @var{export}
+to child processes. Executed commands inherit the environment.
+The @code{export} and @samp{declare -x}
+commands allow parameters and functions to be added to and
+deleted from the environment. If the value of a parameter
+in the environment is modified, the new value becomes part
+of the environment, replacing the old. The environment
+inherited by any executed command consists of the shell's
+initial environment, whose values may be modified in the shell,
+less any pairs removed by the @code{unset} and @samp{export -n}
+commands, plus any additions via the @code{export} and
+@samp{declare -x} commands.
+
+The environment for any simple command
+or function may be augmented temporarily by prefixing it with
+parameter assignments, as described in @ref{Shell Parameters}.
+These assignment statements affect only the environment seen
+by that command.
+
+If the @option{-k} option is set (@pxref{The Set Builtin}), then all
+parameter assignments are placed in the environment for a command,
+not just those that precede the command name.
+
+When Bash invokes an external command, the variable @samp{$_}
+is set to the full path name of the command and passed to that
+command in its environment.
+
+@node Exit Status
+@subsection Exit Status
+@cindex exit status
+
+For the shell's purposes, a command which exits with a
+zero exit status has succeeded.
+A non-zero exit status indicates failure.
+This seemingly counter-intuitive scheme is used so there
+is one well-defined way to indicate success and a variety of
+ways to indicate various failure modes.
+When a command terminates on a fatal signal whose number is @var{N},
+Bash uses the value 128+@var{N} as the exit status.
+
+If a command is not found, the child process created to
+execute it returns a status of 127. If a command is found
+but is not executable, the return status is 126.
+
+If a command fails because of an error during expansion or redirection,
+the exit status is greater than zero.
+
+The exit status is used by the Bash conditional commands
+(@pxref{Conditional Constructs}) and some of the list
+constructs (@pxref{Lists}).
+
+All of the Bash builtins return an exit status of zero if they succeed
+and a non-zero status on failure, so they may be used by the
+conditional and list constructs.
+All builtins return an exit status of 2 to indicate incorrect usage.
+
+@node Signals
+@subsection Signals
+@cindex signal handling
+
+When Bash is interactive, in the absence of any traps, it ignores
+@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell),
+and @code{SIGINT}
+is caught and handled (so that the @code{wait} builtin is interruptible).
+When Bash receives a @code{SIGINT}, it breaks out of any executing loops.
+In all cases, Bash ignores @code{SIGQUIT}.
+If job control is in effect (@pxref{Job Control}), Bash
+ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+Commands started by Bash have signal handlers set to the
+values inherited by the shell from its parent.
+When job control is not in effect, asynchronous commands
+ignore @code{SIGINT} and @code{SIGQUIT} as well.
+Commands run as a result of
+command substitution ignore the keyboard-generated job control signals
+@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+The shell exits by default upon receipt of a @code{SIGHUP}.
+Before exiting, an interactive shell resends the @code{SIGHUP} to
+all jobs, running or stopped.
+Stopped jobs are sent @code{SIGCONT} to ensure that they receive
+the @code{SIGHUP}.
+To prevent the shell from sending the @code{SIGHUP} signal to a
+particular job, it should be removed
+from the jobs table with the @code{disown}
+builtin (@pxref{Job Control Builtins}) or marked
+to not receive @code{SIGHUP} using @code{disown -h}.
+
+If the @code{huponexit} shell option has been set with @code{shopt}
+(@pxref{Bash Builtins}), Bash sends a @code{SIGHUP} to all jobs when
+an interactive login shell exits.
+
+When Bash receives a signal for which a trap has been set while waiting
+for a command to complete, the trap will not be executed until the
+command completes.
+When Bash is waiting for an asynchronous
+command via the @code{wait} builtin, the reception of a signal for
+which a trap has been set will cause the @code{wait} builtin to return
+immediately with an exit status greater than 128, immediately after
+which the trap is executed.
+
+@node Shell Scripts
+@section Shell Scripts
+@cindex shell script
+
+A shell script is a text file containing shell commands. When such
+a file is used as the first non-option argument when invoking Bash,
+and neither the @option{-c} nor @option{-s} option is supplied
+(@pxref{Invoking Bash}),
+Bash reads and executes commands from the file, then exits. This
+mode of operation creates a non-interactive shell. The shell first
+searches for the file in the current directory, and looks in the
+directories in @env{$PATH} if not found there.
+
+When Bash runs
+a shell script, it sets the special parameter @code{0} to the name
+of the file, rather than the name of the shell, and the positional
+parameters are set to the remaining arguments, if any are given.
+If no additional arguments are supplied, the positional parameters
+are unset.
+
+A shell script may be made executable by using the @code{chmod} command
+to turn on the execute bit. When Bash finds such a file while
+searching the @env{$PATH} for a command, it spawns a subshell to
+execute it. In other words, executing
+@example
+filename @var{arguments}
+@end example
+@noindent
+is equivalent to executing
+@example
+bash filename @var{arguments}
+@end example
+
+@noindent
+if @code{filename} is an executable shell script.
+This subshell reinitializes itself, so that the effect is as if a
+new shell had been invoked to interpret the script, with the
+exception that the locations of commands remembered by the parent
+(see the description of @code{hash} in @ref{Bourne Shell Builtins})
+are retained by the child.
+
+Most versions of Unix make this a part of the operating system's command
+execution mechanism. If the first line of a script begins with
+the two characters @samp{#!}, the remainder of the line specifies
+an interpreter for the program.
+Thus, you can specify Bash, @code{awk}, Perl, or some other
+interpreter and write the rest of the script file in that language.
+
+The arguments to the interpreter
+consist of a single optional argument following the interpreter
+name on the first line of the script file, followed by the name of
+the script file, followed by the rest of the arguments. Bash
+will perform this action on operating systems that do not handle it
+themselves. Note that some older versions of Unix limit the interpreter
+name and argument to a maximum of 32 characters.
+
+Bash scripts often begin with @code{#! /bin/bash} (assuming that
+Bash has been installed in @file{/bin}), since this ensures that
+Bash will be used to interpret the script, even if it is executed
+under another shell.
+
+@node Shell Builtin Commands
+@chapter Shell Builtin Commands
+
+@menu
+* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
+ Shell.
+* Bash Builtins:: Table of builtins specific to Bash.
+* The Set Builtin:: This builtin is so overloaded it
+ deserves its own section.
+* Special Builtins:: Builtin commands classified specially by
+ POSIX.2.
+@end menu
+
+Builtin commands are contained within the shell itself.
+When the name of a builtin command is used as the first word of
+a simple command (@pxref{Simple Commands}), the shell executes
+the command directly, without invoking another program.
+Builtin commands are necessary to implement functionality impossible
+or inconvenient to obtain with separate utilities.
+
+This section briefly the builtins which Bash inherits from
+the Bourne Shell, as well as the builtin commands which are unique
+to or have been extended in Bash.
+
+Several builtin commands are described in other chapters: builtin
+commands which provide the Bash interface to the job control
+facilities (@pxref{Job Control Builtins}), the directory stack
+(@pxref{Directory Stack Builtins}), the command history
+(@pxref{Bash History Builtins}), and the programmable completion
+facilities (@pxref{Programmable Completion Builtins}).
+
+Many of the builtins have been extended by @sc{posix} or Bash.
+
+@node Bourne Shell Builtins
+@section Bourne Shell Builtins
+
+The following shell builtin commands are inherited from the Bourne Shell.
+These commands are implemented as specified by the @sc{posix} 1003.2 standard.
+
+@table @code
+@item : @r{(a colon)}
+@btindex :
+@example
+: [@var{arguments}]
+@end example
+Do nothing beyond expanding @var{arguments} and performing redirections.
+The return status is zero.
+
+@item . @r{(a period)}
+@btindex .
+@example
+. @var{filename} [@var{arguments}]
+@end example
+Read and execute commands from the @var{filename} argument in the
+current shell context. If @var{filename} does not contain a slash,
+the @env{PATH} variable is used to find @var{filename}.
+When Bash is not in @sc{posix} mode, the current directory is searched
+if @var{filename} is not found in @env{$PATH}.
+If any @var{arguments} are supplied, they become the positional
+parameters when @var{filename} is executed. Otherwise the positional
+parameters are unchanged.
+The return status is the exit status of the last command executed, or
+zero if no commands are executed. If @var{filename} is not found, or
+cannot be read, the return status is non-zero.
+This builtin is equivalent to @code{source}.
+
+@item break
+@btindex break
+@example
+break [@var{n}]
+@end example
+Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop.
+If @var{n} is supplied, the @var{n}th enclosing loop is exited.
+@var{n} must be greater than or equal to 1.
+The return status is zero unless @var{n} is not greater than or equal to 1.
+
+@item cd
+@btindex cd
+@example
+cd [-L|-P] [@var{directory}]
+@end example
+Change the current working directory to @var{directory}. If @var{directory}
+is not given, the value of the @env{HOME} shell variable is used. If the
+shell variable @env{CDPATH} exists, it is used as a search path. If
+@var{directory} begins with a slash, @env{CDPATH} is not used.
+The @option{-P} option means
+to not follow symbolic links; symbolic links are followed by default
+or with the @option{-L} option.
+If @var{directory} is @samp{-}, it is equivalent to @env{$OLDPWD}.
+The return status is zero if the directory is successfully changed,
+non-zero otherwise.
+
+@item continue
+@btindex continue
+@example
+continue [@var{n}]
+@end example
+Resume the next iteration of an enclosing @code{for}, @code{while},
+@code{until}, or @code{select} loop.
+If @var{n} is supplied, the execution of the @var{n}th enclosing loop
+is resumed.
+@var{n} must be greater than or equal to 1.
+The return status is zero unless @var{n} is not greater than or equal to 1.
+
+@item eval
+@btindex eval
+@example
+eval [@var{arguments}]
+@end example
+The arguments are concatenated together into a single command, which is
+then read and executed, and its exit status returned as the exit status
+of @code{eval}.
+If there are no arguments or only empty arguments, the return status is
+zero.
+
+@item exec
+@btindex exec
+@example
+exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]]
+@end example
+If @var{command}
+is supplied, it replaces the shell without creating a new process.
+If the @option{-l} option is supplied, the shell places a dash at the
+beginning of the zeroth arg passed to @var{command}.
+This is what the @code{login} program does.
+The @option{-c} option causes @var{command} to be executed with an empty
+environment.
+If @option{-a} is supplied, the shell passes @var{name} as the zeroth
+argument to @var{command}.
+If no @var{command} is specified, redirections may be used to affect
+the current shell environment. If there are no redirection errors, the
+return status is zero; otherwise the return status is non-zero.
+
+@item exit
+@btindex exit
+@example
+exit [@var{n}]
+@end example
+Exit the shell, returning a status of @var{n} to the shell's parent.
+If @var{n} is omitted, the exit status is that of the last command executed.
+Any trap on @code{EXIT} is executed before the shell terminates.
+
+@item export
+@btindex export
+@example
+export [-fn] [-p] [@var{name}[=@var{value}]]
+@end example
+Mark each @var{name} to be passed to child processes
+in the environment. If the @option{-f} option is supplied, the @var{name}s
+refer to shell functions; otherwise the names refer to shell variables.
+The @option{-n} option means to no longer mark each @var{name} for export.
+If no @var{names} are supplied, or if the @option{-p} option is given, a
+list of exported names is displayed.
+The @option{-p} option displays output in a form that may be reused as input.
+If a variable name is followed by =@var{value}, the value of
+the variable is set to @var{value}.
+
+The return status is zero unless an invalid option is supplied, one of
+the names is not a valid shell variable name, or @option{-f} is supplied
+with a name that is not a shell function.
+
+@item getopts
+@btindex getopts
+@example
+getopts @var{optstring} @var{name} [@var{args}]
+@end example
+@code{getopts} is used by shell scripts to parse positional parameters.
+@var{optstring} contains the option characters to be recognized; if a
+character is followed by a colon, the option is expected to have an
+argument, which should be separated from it by white space.
+The colon (@samp{:}) and question mark (@samp{?}) may not be
+used as option characters.
+Each time it is invoked, @code{getopts}
+places the next option in the shell variable @var{name}, initializing
+@var{name} if it does not exist,
+and the index of the next argument to be processed into the
+variable @env{OPTIND}.
+@env{OPTIND} is initialized to 1 each time the shell or a shell script
+is invoked.
+When an option requires an argument,
+@code{getopts} places that argument into the variable @env{OPTARG}.
+The shell does not reset @env{OPTIND} automatically; it must be manually
+reset between multiple calls to @code{getopts} within the same shell
+invocation if a new set of parameters is to be used.
+
+When the end of options is encountered, @code{getopts} exits with a
+return value greater than zero.
+@env{OPTIND} is set to the index of the first non-option argument,
+and @code{name} is set to @samp{?}.
+
+@code{getopts}
+normally parses the positional parameters, but if more arguments are
+given in @var{args}, @code{getopts} parses those instead.
+
+@code{getopts} can report errors in two ways. If the first character of
+@var{optstring} is a colon, @var{silent}
+error reporting is used. In normal operation diagnostic messages
+are printed when invalid options or missing option arguments are
+encountered.
+If the variable @env{OPTERR}
+is set to 0, no error messages will be displayed, even if the first
+character of @code{optstring} is not a colon.
+
+If an invalid option is seen,
+@code{getopts} places @samp{?} into @var{name} and, if not silent,
+prints an error message and unsets @env{OPTARG}.
+If @code{getopts} is silent, the option character found is placed in
+@env{OPTARG} and no diagnostic message is printed.
+
+If a required argument is not found, and @code{getopts}
+is not silent, a question mark (@samp{?}) is placed in @var{name},
+@code{OPTARG} is unset, and a diagnostic message is printed.
+If @code{getopts} is silent, then a colon (@samp{:}) is placed in
+@var{name} and @env{OPTARG} is set to the option character found.
+
+@item hash
+@btindex hash
+@example
+hash [-'r] [-p @var{filename}] [-dt] [@var{name}]
+@end example
+Remember the full pathnames of commands specified as @var{name} arguments,
+so they need not be searched for on subsequent invocations.
+The commands are found by searching through the directories listed in
+@env{$PATH}.
+The @option{-p} option inhibits the path search, and @var{filename} is
+used as the location of @var{name}.
+The @option{-r} option causes the shell to forget all remembered locations.
+The @option{-d} option causes the shell to forget the remembered location
+of each @var{name}.
+If the @option{-t} option is supplied, the full pathname to which each
+@var{name} corresponds is printed. If multiple @var{name} arguments are
+supplied with @option{-t} the @var{name} is printed before the hashed
+full pathname.
+The @option{-l} option causes output to be displayed in a format
+that may be reused as input.
+If no arguments are given, or if only @option{-l} is supplied,
+information about remembered commands is printed.
+The return status is zero unless a @var{name} is not found or an invalid
+option is supplied.
+
+@item pwd
+@btindex pwd
+@example
+pwd [-LP]
+@end example
+Print the absolute pathname of the current working directory.
+If the @option{-P} option is supplied, the pathname printed will not
+contain symbolic links.
+If the @option{-L} option is supplied, the pathname printed may contain
+symbolic links.
+The return status is zero unless an error is encountered while
+determining the name of the current directory or an invalid option
+is supplied.
+
+@item readonly
+@btindex readonly
+@example
+readonly [-apf] [@var{name}[=@var{value}]] @dots{}
+@end example
+Mark each @var{name} as readonly.
+The values of these names may not be changed by subsequent assignment.
+If the @option{-f} option is supplied, each @var{name} refers to a shell
+function.
+The @option{-a} option means each @var{name} refers to an array variable.
+If no @var{name} arguments are given, or if the @option{-p}
+option is supplied, a list of all readonly names is printed.
+The @option{-p} option causes output to be displayed in a format that
+may be reused as input.
+If a variable name is followed by =@var{value}, the value of
+the variable is set to @var{value}.
+The return status is zero unless an invalid option is supplied, one of
+the @var{name} arguments is not a valid shell variable or function name,
+or the @option{-f} option is supplied with a name that is not a shell function.
+
+@item return
+@btindex return
+@example
+return [@var{n}]
+@end example
+Cause a shell function to exit with the return value @var{n}.
+If @var{n} is not supplied, the return value is the exit status of the
+last command executed in the function.
+This may also be used to terminate execution of a script being executed
+with the @code{.} (or @code{source}) builtin, returning either @var{n} or
+the exit status of the last command executed within the script as the exit
+status of the script.
+Any command associated with the @code{RETURN} trap is executed
+before execution resumes after the function or script.
+The return status is non-zero if @code{return} is used outside a function
+and not during the execution of a script by @code{.} or @code{source}.
+
+@item shift
+@btindex shift
+@example
+shift [@var{n}]
+@end example
+Shift the positional parameters to the left by @var{n}.
+The positional parameters from @var{n}+1 @dots{} @code{$#} are
+renamed to @code{$1} @dots{} @code{$#}-@var{n}+1.
+Parameters represented by the numbers @code{$#} to @var{n}+1 are unset.
+@var{n} must be a non-negative number less than or equal to @code{$#}.
+If @var{n} is zero or greater than @code{$#}, the positional parameters
+are not changed.
+If @var{n} is not supplied, it is assumed to be 1.
+The return status is zero unless @var{n} is greater than @code{$#} or
+less than zero, non-zero otherwise.
+
+@item test
+@itemx [
+@btindex test
+@btindex [
+Evaluate a conditional expression @var{expr}.
+Each operator and operand must be a separate argument.
+Expressions are composed of the primaries described below in
+@ref{Bash Conditional Expressions}.
+
+When the @code{[} form is used, the last argument to the command must
+be a @code{]}.
+
+Expressions may be combined using the following operators, listed in
+decreasing order of precedence.
+
+@table @code
+@item ! @var{expr}
+True if @var{expr} is false.
+
+@item ( @var{expr} )
+Returns the value of @var{expr}.
+This may be used to override the normal precedence of operators.
+
+@item @var{expr1} -a @var{expr2}
+True if both @var{expr1} and @var{expr2} are true.
+
+@item @var{expr1} -o @var{expr2}
+True if either @var{expr1} or @var{expr2} is true.
+@end table
+
+The @code{test} and @code{[} builtins evaluate conditional
+expressions using a set of rules based on the number of arguments.
+
+@table @asis
+@item 0 arguments
+The expression is false.
+
+@item 1 argument
+The expression is true if and only if the argument is not null.
+
+@item 2 arguments
+If the first argument is @samp{!}, the expression is true if and
+only if the second argument is null.
+If the first argument is one of the unary conditional operators
+(@pxref{Bash Conditional Expressions}), the expression
+is true if the unary test is true.
+If the first argument is not a valid unary operator, the expression is
+false.
+
+@item 3 arguments
+If the second argument is one of the binary conditional
+operators (@pxref{Bash Conditional Expressions}), the
+result of the expression is the result of the binary test using the
+first and third arguments as operands.
+If the first argument is @samp{!}, the value is the negation of
+the two-argument test using the second and third arguments.
+If the first argument is exactly @samp{(} and the third argument is
+exactly @samp{)}, the result is the one-argument test of the second
+argument.
+Otherwise, the expression is false.
+The @samp{-a} and @samp{-o} operators are considered binary operators
+in this case.
+
+@item 4 arguments
+If the first argument is @samp{!}, the result is the negation of
+the three-argument expression composed of the remaining arguments.
+Otherwise, the expression is parsed and evaluated according to
+precedence using the rules listed above.
+
+@item 5 or more arguments
+The expression is parsed and evaluated according to precedence
+using the rules listed above.
+@end table
+
+@item times
+@btindex times
+@example
+times
+@end example
+Print out the user and system times used by the shell and its children.
+The return status is zero.
+
+@item trap
+@btindex trap
+@example
+trap [-lp] [@var{arg}] [@var{sigspec} @dots{}]
+@end example
+The commands in @var{arg} are to be read and executed when the
+shell receives signal @var{sigspec}. If @var{arg} is absent or
+equal to @samp{-}, all specified signals are reset to the values
+they had when the shell was started.
+If @var{arg} is the null string, then the signal specified by
+each @var{sigspec} is ignored by the shell and commands it invokes.
+If @var{arg} is not present and @option{-p} has been supplied,
+the shell displays the trap commands associated with each @var{sigspec}.
+If no arguments are supplied, or
+only @option{-p} is given, @code{trap} prints the list of commands
+associated with each signal number in a form that may be reused as
+shell input.
+The @option{-l} option causes the shell to print a list of signal names
+and their corresponding numbers.
+
+Each @var{sigspec} is either a signal name such as @code{SIGINT} (with
+or without the @code{SIG} prefix) or a signal number.
+If a @var{sigspec}
+is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
+If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
+before every simple command, @code{for} command, @code{case} command,
+@code{select} command, every arithmetic @code{for} command, and before
+the first command executes in a shell function.
+Refer to the description of the @code{extglob} option to the
+@code{shopt} builtin (@pxref{Bash Builtins}) for details of its
+effect on the @code{DEBUG} trap.
+If a @var{sigspec} is @code{ERR}, the command @var{arg}
+is executed whenever a simple command has a non-zero exit status.
+The @code{ERR} trap is not executed if the failed command is part of the
+command list immediately following an @code{until} or @code{while} keyword,
+part of the test in an @code{if} statement,
+part of a @code{&&} or @code{||} list, or if the command's return
+status is being inverted using @code{!}.
+If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed
+each time a shell function or a script executed with the @code{.} or
+@code{source} builtins finishes executing.
+
+Signals ignored upon entry to the shell cannot be trapped or reset.
+Trapped signals are reset to their original values in a child
+process when it is created.
+
+The return status is zero unless a @var{sigspec} does not specify a
+valid signal.
+
+@item umask
+@btindex umask
+@example
+umask [-p] [-S] [@var{mode}]
+@end example
+Set the shell process's file creation mask to @var{mode}. If
+@var{mode} begins with a digit, it is interpreted as an octal number;
+if not, it is interpreted as a symbolic mode mask similar
+to that accepted by the @code{chmod} command. If @var{mode} is
+omitted, the current value of the mask is printed. If the @option{-S}
+option is supplied without a @var{mode} argument, the mask is printed
+in a symbolic format.
+If the @option{-p} option is supplied, and @var{mode}
+is omitted, the output is in a form that may be reused as input.
+The return status is zero if the mode is successfully changed or if
+no @var{mode} argument is supplied, and non-zero otherwise.
+
+Note that when the mode is interpreted as an octal number, each number
+of the umask is subtracted from @code{7}. Thus, a umask of @code{022}
+results in permissions of @code{755}.
+
+@item unset
+@btindex unset
+@example
+unset [-fv] [@var{name}]
+@end example
+Each variable or function @var{name} is removed.
+If no options are supplied, or the @option{-v} option is given, each
+@var{name} refers to a shell variable.
+If the @option{-f} option is given, the @var{name}s refer to shell
+functions, and the function definition is removed.
+Readonly variables and functions may not be unset.
+The return status is zero unless a @var{name} is readonly.
+@end table
+
+@node Bash Builtins
+@section Bash Builtin Commands
+
+This section describes builtin commands which are unique to
+or have been extended in Bash.
+Some of these commands are specified in the @sc{posix} 1003.2 standard.
+
+@table @code
+
+@item alias
+@btindex alias
+@example
+alias [@code{-p}] [@var{name}[=@var{value}] @dots{}]
+@end example
+
+Without arguments or with the @option{-p} option, @code{alias} prints
+the list of aliases on the standard output in a form that allows
+them to be reused as input.
+If arguments are supplied, an alias is defined for each @var{name}
+whose @var{value} is given. If no @var{value} is given, the name
+and value of the alias is printed.
+Aliases are described in @ref{Aliases}.
+
+@item bind
+@btindex bind
+@example
+bind [-m @var{keymap}] [-lpsvPSV]
+bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}]
+bind [-m @var{keymap}] -f @var{filename}
+bind [-m @var{keymap}] -x @var{keyseq:shell-command}
+bind [-m @var{keymap}] @var{keyseq:function-name}
+bind @var{readline-command}
+@end example
+
+Display current Readline (@pxref{Command Line Editing})
+key and function bindings,
+bind a key sequence to a Readline function or macro,
+or set a Readline variable.
+Each non-option argument is a command as it would appear in a
+a Readline initialization file (@pxref{Readline Init File}),
+but each binding or command must be passed as a separate argument; e.g.,
+@samp{"\C-x\C-r":re-read-init-file}.
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -m @var{keymap}
+Use @var{keymap} as the keymap to be affected by
+the subsequent bindings. Acceptable @var{keymap}
+names are
+@code{emacs},
+@code{emacs-standard},
+@code{emacs-meta},
+@code{emacs-ctlx},
+@code{vi},
+@code{vi-move},
+@code{vi-command}, and
+@code{vi-insert}.
+@code{vi} is equivalent to @code{vi-command};
+@code{emacs} is equivalent to @code{emacs-standard}.
+
+@item -l
+List the names of all Readline functions.
+
+@item -p
+Display Readline function names and bindings in such a way that they
+can be used as input or in a Readline initialization file.
+
+@item -P
+List current Readline function names and bindings.
+
+@item -v
+Display Readline variable names and values in such a way that they
+can be used as input or in a Readline initialization file.
+
+@item -V
+List current Readline variable names and values.
+
+@item -s
+Display Readline key sequences bound to macros and the strings they output
+in such a way that they can be used as input or in a Readline
+initialization file.
+
+@item -S
+Display Readline key sequences bound to macros and the strings they output.
+
+@item -f @var{filename}
+Read key bindings from @var{filename}.
+
+@item -q @var{function}
+Query about which keys invoke the named @var{function}.
+
+@item -u @var{function}
+Unbind all keys bound to the named @var{function}.
+
+@item -r @var{keyseq}
+Remove any current binding for @var{keyseq}.
+
+@item -x @var{keyseq:shell-command}
+Cause @var{shell-command} to be executed whenever @var{keyseq} is
+entered.
+
+@end table
+
+@noindent
+The return status is zero unless an invalid option is supplied or an
+error occurs.
+
+@item builtin
+@btindex builtin
+@example
+builtin [@var{shell-builtin} [@var{args}]]
+@end example
+Run a shell builtin, passing it @var{args}, and return its exit status.
+This is useful when defining a shell function with the same
+name as a shell builtin, retaining the functionality of the builtin within
+the function.
+The return status is non-zero if @var{shell-builtin} is not a shell
+builtin command.
+
+@item caller
+@btindex caller
+@example
+caller [@var{expr}]
+@end example
+Returns the context of any active subroutine call (a shell function or
+a script executed with the @code{.} or @code{source} builtins.
+
+Without @var{expr}, @code{caller} displays the line number and source
+filename of the current subroutine call.
+If a non-negative integer is supplied as @var{expr}, @code{caller}
+displays the line number, subroutine name, and source file corresponding
+to that position in the current execution call stack. This extra
+information may be used, for example, to print a stack trace. The
+current frame is frame 0.
+
+The return value is 0 unless the shell is not executing a subroutine
+call or @var{expr} does not correspond to a valid position in the
+call stack.
+
+@item command
+@btindex command
+@example
+command [-pVv] @var{command} [@var{arguments} @dots{}]
+@end example
+Runs @var{command} with @var{arguments} ignoring any shell function
+named @var{command}.
+Only shell builtin commands or commands found by searching the
+@env{PATH} are executed.
+If there is a shell function named @code{ls}, running @samp{command ls}
+within the function will execute the external command @code{ls}
+instead of calling the function recursively.
+The @option{-p} option means to use a default value for @env{PATH}
+that is guaranteed to find all of the standard utilities.
+The return status in this case is 127 if @var{command} cannot be
+found or an error occurred, and the exit status of @var{command}
+otherwise.
+
+If either the @option{-V} or @option{-v} option is supplied, a
+description of @var{command} is printed. The @option{-v} option
+causes a single word indicating the command or file name used to
+invoke @var{command} to be displayed; the @option{-V} option produces
+a more verbose description. In this case, the return status is
+zero if @var{command} is found, and non-zero if not.
+
+@item declare
+@btindex declare
+@example
+declare [-afFirtx] [-p] [@var{name}[=@var{value}] @dots{}]
+@end example
+
+Declare variables and give them attributes. If no @var{name}s
+are given, then display the values of variables instead.
+
+The @option{-p} option will display the attributes and values of each
+@var{name}.
+When @option{-p} is used, additional options are ignored.
+The @option{-F} option inhibits the display of function definitions;
+only the function name and attributes are printed.
+If the @code{extdebug} shell option is enabled using @code{shopt}
+(@pxref{Bash Builtins}), the source file name and line number where
+the function is defined are displayed as well.
+@option{-F} implies @option{-f}.
+The following options can be used to restrict output to variables with
+the specified attributes or to give variables attributes:
+
+@table @code
+@item -a
+Each @var{name} is an array variable (@pxref{Arrays}).
+
+@item -f
+Use function names only.
+
+@item -i
+The variable is to be treated as
+an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is
+performed when the variable is assigned a value.
+
+@item -r
+Make @var{name}s readonly. These names cannot then be assigned values
+by subsequent assignment statements or unset.
+
+@item -t
+Give each @var{name} the @code{trace} attribute.
+Traced functions inherit the @code{DEBUG} trap from the calling shell.
+The trace attribute has no special meaning for variables.
+
+@item -x
+Mark each @var{name} for export to subsequent commands via
+the environment.
+@end table
+
+Using @samp{+} instead of @samp{-} turns off the attribute instead.
+When used in a function, @code{declare} makes each @var{name} local,
+as with the @code{local} command. If a variable name is followed by
+=@var{value}, the value of the variable is set to @var{value}.
+
+The return status is zero unless an invalid option is encountered,
+an attempt is made to define a function using @samp{-f foo=bar},
+an attempt is made to assign a value to a readonly variable,
+an attempt is made to assign a value to an array variable without
+using the compound assignment syntax (@pxref{Arrays}),
+one of the @var{names} is not a valid shell variable name,
+an attempt is made to turn off readonly status for a readonly variable,
+an attempt is made to turn off array status for an array variable,
+or an attempt is made to display a non-existent function with @option{-f}.
+
+@item echo
+@btindex echo
+@example
+echo [-neE] [@var{arg} @dots{}]
+@end example
+Output the @var{arg}s, separated by spaces, terminated with a
+newline.
+The return status is always 0.
+If @option{-n} is specified, the trailing newline is suppressed.
+If the @option{-e} option is given, interpretation of the following
+backslash-escaped characters is enabled.
+The @option{-E} option disables the interpretation of these escape characters,
+even on systems where they are interpreted by default.
+The @code{xpg_echo} shell option may be used to
+dynamically determine whether or not @code{echo} expands these
+escape characters by default.
+@code{echo} interprets the following escape sequences:
+@table @code
+@item \a
+alert (bell)
+@item \b
+backspace
+@item \c
+suppress trailing newline
+@item \e
+escape
+@item \f
+form feed
+@item \n
+new line
+@item \r
+carriage return
+@item \t
+horizontal tab
+@item \v
+vertical tab
+@item \\
+backslash
+@item \0@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(zero to three octal digits)
+@item \@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(one to three octal digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
+@end table
+
+@item enable
+@btindex enable
+@example
+enable [-n] [-p] [-f @var{filename}] [-ads] [@var{name} @dots{}]
+@end example
+Enable and disable builtin shell commands.
+Disabling a builtin allows a disk command which has the same name
+as a shell builtin to be executed without specifying a full pathname,
+even though the shell normally searches for builtins before disk commands.
+If @option{-n} is used, the @var{name}s become disabled. Otherwise
+@var{name}s are enabled. For example, to use the @code{test} binary
+found via @env{$PATH} instead of the shell builtin version, type
+@samp{enable -n test}.
+
+If the @option{-p} option is supplied, or no @var{name} arguments appear,
+a list of shell builtins is printed. With no other arguments, the list
+consists of all enabled shell builtins.
+The @option{-a} option means to list
+each builtin with an indication of whether or not it is enabled.
+
+The @option{-f} option means to load the new builtin command @var{name}
+from shared object @var{filename}, on systems that support dynamic loading.
+The @option{-d} option will delete a builtin loaded with @option{-f}.
+
+If there are no options, a list of the shell builtins is displayed.
+The @option{-s} option restricts @code{enable} to the @sc{posix} special
+builtins. If @option{-s} is used with @option{-f}, the new builtin becomes
+a special builtin (@pxref{Special Builtins}).
+
+The return status is zero unless a @var{name} is not a shell builtin
+or there is an error loading a new builtin from a shared object.
+
+@item help
+@btindex help
+@example
+help [-s] [@var{pattern}]
+@end example
+Display helpful information about builtin commands.
+If @var{pattern} is specified, @code{help} gives detailed help
+on all commands matching @var{pattern}, otherwise a list of
+the builtins is printed.
+The @option{-s} option restricts the information displayed to a short
+usage synopsis.
+The return status is zero unless no command matches @var{pattern}.
+
+@item let
+@btindex let
+@example
+let @var{expression} [@var{expression}]
+@end example
+The @code{let} builtin allows arithmetic to be performed on shell
+variables. Each @var{expression} is evaluated according to the
+rules given below in @ref{Shell Arithmetic}. If the
+last @var{expression} evaluates to 0, @code{let} returns 1;
+otherwise 0 is returned.
+
+@item local
+@btindex local
+@example
+local [@var{option}] @var{name}[=@var{value}] @dots{}
+@end example
+For each argument, a local variable named @var{name} is created,
+and assigned @var{value}.
+The @var{option} can be any of the options accepted by @code{declare}.
+@code{local} can only be used within a function; it makes the variable
+@var{name} have a visible scope restricted to that function and its
+children. The return status is zero unless @code{local} is used outside
+a function, an invalid @var{name} is supplied, or @var{name} is a
+readonly variable.
+
+@item logout
+@btindex logout
+@example
+logout [@var{n}]
+@end example
+Exit a login shell, returning a status of @var{n} to the shell's
+parent.
+
+@item printf
+@btindex printf
+@example
+@code{printf} @var{format} [@var{arguments}]
+@end example
+Write the formatted @var{arguments} to the standard output under the
+control of the @var{format}.
+The @var{format} is a character string which contains three types of objects:
+plain characters, which are simply copied to standard output, character
+escape sequences, which are converted and copied to the standard output, and
+format specifications, each of which causes printing of the next successive
+@var{argument}.
+In addition to the standard @code{printf(1)} formats, @samp{%b} causes
+@code{printf} to expand backslash escape sequences in the corresponding
+@var{argument}, and @samp{%q} causes @code{printf} to output the
+corresponding @var{argument} in a format that can be reused as shell input.
+
+The @var{format} is reused as necessary to consume all of the @var{arguments}.
+If the @var{format} requires more @var{arguments} than are supplied, the
+extra format specifications behave as if a zero value or null string, as
+appropriate, had been supplied. The return value is zero on success,
+non-zero on failure.
+
+@item read
+@btindex read
+@example
+read [-ers] [-a @var{aname}] [-d @var{delim}] [-n @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}]
+@end example
+One line is read from the standard input, or from the file descriptor
+@var{fd} supplied as an argument to the @option{-u} option, and the first word
+is assigned to the first @var{name}, the second word to the second @var{name},
+and so on, with leftover words and their intervening separators assigned
+to the last @var{name}.
+If there are fewer words read from the input stream than names,
+the remaining names are assigned empty values.
+The characters in the value of the @env{IFS} variable
+are used to split the line into words.
+The backslash character @samp{\} may be used to remove any special
+meaning for the next character read and for line continuation.
+If no names are supplied, the line read is assigned to the
+variable @env{REPLY}.
+The return code is zero, unless end-of-file is encountered, @code{read}
+times out, or an invalid file descriptor is supplied as the argument to
+@option{-u}.
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -a @var{aname}
+The words are assigned to sequential indices of the array variable
+@var{aname}, starting at 0.
+All elements are removed from @var{aname} before the assignment.
+Other @var{name} arguments are ignored.
+
+@item -d @var{delim}
+The first character of @var{delim} is used to terminate the input line,
+rather than newline.
+
+@item -e
+Readline (@pxref{Command Line Editing}) is used to obtain the line.
+
+@item -n @var{nchars}
+@code{read} returns after reading @var{nchars} characters rather than
+waiting for a complete line of input.
+
+@item -p @var{prompt}
+Display @var{prompt}, without a trailing newline, before attempting
+to read any input.
+The prompt is displayed only if input is coming from a terminal.
+
+@item -r
+If this option is given, backslash does not act as an escape character.
+The backslash is considered to be part of the line.
+In particular, a backslash-newline pair may not be used as a line
+continuation.
+
+@item -s
+Silent mode. If input is coming from a terminal, characters are
+not echoed.
+
+@item -t @var{timeout}
+Cause @code{read} to time out and return failure if a complete line of
+input is not read within @var{timeout} seconds.
+This option has no effect if @code{read} is not reading input from the
+terminal or a pipe.
+
+@item -u @var{fd}
+Read input from file descriptor @var{fd}.
+
+@end table
+
+@item shopt
+@btindex shopt
+@example
+shopt [-pqsu] [-o] [@var{optname} @dots{}]
+@end example
+Toggle the values of variables controlling optional shell behavior.
+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.
+The @option{-p} option causes output to be displayed in a form that
+may be reused as input.
+Other options have the following meanings:
+
+@table @code
+@item -s
+Enable (set) each @var{optname}.
+
+@item -u
+Disable (unset) each @var{optname}.
+
+@item -q
+Suppresses normal output; the return status
+indicates whether the @var{optname} is set or unset.
+If multiple @var{optname} arguments are given with @option{-q},
+the return status is zero if all @var{optnames} are enabled;
+non-zero otherwise.
+
+@item -o
+Restricts the values of
+@var{optname} to be those defined for the @option{-o} option to the
+@code{set} builtin (@pxref{The Set Builtin}).
+@end table
+
+If either @option{-s} or @option{-u}
+is used with no @var{optname} arguments, the display is limited to
+those options which are set or unset, respectively.
+
+Unless otherwise noted, the @code{shopt} options are disabled (off)
+by default.
+
+The return status when listing options is zero if all @var{optnames}
+are enabled, non-zero otherwise. When setting or unsetting options,
+the return status is zero unless an @var{optname} is not a valid shell
+option.
+
+The list of @code{shopt} options is:
+@table @code
+@item cdable_vars
+If this is set, an argument to the @code{cd}
+builtin command that
+is not a directory is assumed to be the name of a variable whose
+value is the directory to change to.
+
+@item cdspell
+If set, minor errors in the spelling of a directory component in a
+@code{cd} command will be corrected.
+The errors checked for are transposed characters,
+a missing character, and a character too many.
+If a correction is found, the corrected path is printed,
+and the command proceeds.
+This option is only used by interactive shells.
+
+@item checkhash
+If this is set, Bash checks that a command found in the hash
+table exists before trying to execute it. If a hashed command no
+longer exists, a normal path search is performed.
+
+@item checkwinsize
+If set, Bash checks the window size after each command
+and, if necessary, updates the values of
+@env{LINES} and @env{COLUMNS}.
+
+@item cmdhist
+If set, Bash
+attempts to save all lines of a multiple-line
+command in the same history entry. This allows
+easy re-editing of multi-line commands.
+
+@item dotglob
+If set, Bash includes filenames beginning with a `.' in
+the results of filename expansion.
+
+@item execfail
+If this is set, a non-interactive shell will not exit if
+it cannot execute the file specified as an argument to the @code{exec}
+builtin command. An interactive shell does not exit if @code{exec}
+fails.
+
+@item expand_aliases
+If set, aliases are expanded as described below under Aliases,
+@ref{Aliases}.
+This option is enabled by default for interactive shells.
+
+@item extdebug
+If set, behavior intended for use by debuggers is enabled:
+
+@enumerate
+@item
+The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins})
+displays the source file name and line number corresponding to each function
+name supplied as an argument.
+
+@item
+If the command run by the @code{DEBUG} trap returns a non-zero value, the
+next command is skipped and not executed.
+
+@item
+If the command run by the @code{DEBUG} trap returns a value of 2, and the
+shell is executing in a subroutine (a shell function or a shell script
+executed by the @code{.} or @code{source} builtins), a call to
+@code{return} is simulated.
+@end enumerate
+
+@item extglob
+If set, the extended pattern matching features described above
+(@pxref{Pattern Matching}) are enabled.
+
+@item extquote
+If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is
+performed within @code{$@{@var{parameter}@}} expansions
+enclosed in double quotes. This option is enabled by default.
+
+@item histappend
+If set, the history list is appended to the file named by the value
+of the @env{HISTFILE}
+variable when the shell exits, rather than overwriting the file.
+
+@item histreedit
+If set, and Readline
+is being used, a user is given the opportunity to re-edit a
+failed history substitution.
+
+@item histverify
+If set, and Readline
+is being used, the results of history substitution are not immediately
+passed to the shell parser. Instead, the resulting line is loaded into
+the Readline editing buffer, allowing further modification.
+
+@item hostcomplete
+If set, and Readline is being used, Bash will attempt to perform
+hostname completion when a word containing a @samp{@@} is being
+completed (@pxref{Commands For Completion}). This option is enabled
+by default.
+
+@item huponexit
+If set, Bash will send @code{SIGHUP} to all jobs when an interactive
+login shell exits (@pxref{Signals}).
+
+@item interactive_comments
+Allow a word beginning with @samp{#}
+to cause that word and all remaining characters on that
+line to be ignored in an interactive shell.
+This option is enabled by default.
+
+@item lithist
+If enabled, and the @code{cmdhist}
+option is enabled, multi-line commands are saved to the history with
+embedded newlines rather than using semicolon separators where possible.
+
+@item login_shell
+The shell sets this option if it is started as a login shell
+(@pxref{Invoking Bash}).
+The value may not be changed.
+
+@item mailwarn
+If set, and a file that Bash is checking for mail has been
+accessed since the last time it was checked, the message
+@code{"The mail in @var{mailfile} has been read"} is displayed.
+
+@item no_empty_cmd_completion
+If set, and Readline is being used, Bash will not attempt to search
+the @env{PATH} for possible completions when completion is attempted
+on an empty line.
+
+@item nocaseglob
+If set, Bash matches filenames in a case-insensitive fashion when
+performing filename expansion.
+
+@item nullglob
+If set, Bash allows filename patterns which match no
+files to expand to a null string, rather than themselves.
+
+@item progcomp
+If set, the programmable completion facilities
+(@pxref{Programmable Completion}) are enabled.
+This option is enabled by default.
+
+@item promptvars
+If set, prompt strings undergo variable and parameter expansion after
+being expanded (@pxref{Printing a Prompt}).
+This option is enabled by default.
+
+@item restricted_shell
+The shell sets this option if it is started in restricted mode
+(@pxref{The Restricted Shell}).
+The value may not be changed.
+This is not reset when the startup files are executed, allowing
+the startup files to discover whether or not a shell is restricted.
+
+@item shift_verbose
+If this is set, the @code{shift}
+builtin prints an error message when the shift count exceeds the
+number of positional parameters.
+
+@item sourcepath
+If set, the @code{source} builtin uses the value of @env{PATH}
+to find the directory containing the file supplied as an argument.
+This option is enabled by default.
+
+@item xpg_echo
+If set, the @code{echo} builtin expands backslash-escape sequences
+by default.
+
+@end table
+
+@noindent
+The return status when listing options is zero if all @var{optnames}
+are enabled, non-zero otherwise.
+When setting or unsetting options, the return status is zero unless an
+@var{optname} is not a valid shell option.
+
+@item source
+@btindex source
+@example
+source @var{filename}
+@end example
+A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
+
+@item type
+@btindex type
+@example
+type [-afptP] [@var{name} @dots{}]
+@end example
+For each @var{name}, indicate how it would be interpreted if used as a
+command name.
+
+If the @option{-t} option is used, @code{type} prints a single word
+which is one of @samp{alias}, @samp{function}, @samp{builtin},
+@samp{file} or @samp{keyword},
+if @var{name} is an alias, shell function, shell builtin,
+disk file, or shell reserved word, respectively.
+If the @var{name} is not found, then nothing is printed, and
+@code{type} returns a failure status.
+
+If the @option{-p} option is used, @code{type} either returns the name
+of the disk file that would be executed, or nothing if @option{-t}
+would not return @samp{file}.
+
+The @option{-P} option forces a path search for each @var{name}, even if
+@option{-t} would not return @samp{file}.
+
+If a command is hashed, @option{-p} and @option{-P} print the hashed value,
+not necessarily the file that appears first in @code{$PATH}.
+
+If the @option{-a} option is used, @code{type} returns all of the places
+that contain an executable named @var{file}.
+This includes aliases and functions, if and only if the @option{-p} option
+is not also used.
+
+If the @option{-f} option is used, @code{type} does not attempt to find
+shell functions, as with the @code{command} builtin.
+
+The return status is zero if any of the @var{names} are found, non-zero
+if none are found.
+
+@item typeset
+@btindex typeset
+@example
+typeset [-afFrxi] [-p] [@var{name}[=@var{value}] @dots{}]
+@end example
+The @code{typeset} command is supplied for compatibility with the Korn
+shell; however, it has been deprecated in favor of the @code{declare}
+builtin command.
+
+@item ulimit
+@btindex ulimit
+@example
+ulimit [-acdflmnpstuvSH] [@var{limit}]
+@end example
+@code{ulimit} provides control over the resources available to processes
+started by the shell, on systems that allow such control. If an
+option is given, it is interpreted as follows:
+@table @code
+@item -S
+Change and report the soft limit associated with a resource.
+
+@item -H
+Change and report the hard limit associated with a resource.
+
+@item -a
+All current limits are reported.
+
+@item -c
+The maximum size of core files created.
+
+@item -d
+The maximum size of a process's data segment.
+
+@item -f
+The maximum size of files created by the shell.
+
+@item -l
+The maximum size that may be locked into memory.
+
+@item -m
+The maximum resident set size.
+
+@item -n
+The maximum number of open file descriptors.
+
+@item -p
+The pipe buffer size.
+
+@item -s
+The maximum stack size.
+
+@item -t
+The maximum amount of cpu time in seconds.
+
+@item -u
+The maximum number of processes available to a single user.
+
+@item -v
+The maximum amount of virtual memory available to the process.
+
+@end table
+
+If @var{limit} is given, it is the new value of the specified resource;
+the special @var{limit} values @code{hard}, @code{soft}, and
+@code{unlimited} stand for the current hard limit, the current soft limit,
+and no limit, respectively.
+Otherwise, the current value of the soft limit for the specified resource
+is printed, unless the @option{-H} option is supplied.
+When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
+both the hard and soft limits are set.
+If no option is given, then @option{-f} is assumed. Values are in 1024-byte
+increments, except for @option{-t}, which is in seconds, @option{-p},
+which is in units of 512-byte blocks, and @option{-n} and @option{-u}, which
+are unscaled values.
+
+The return status is zero unless an invalid option or argument is supplied,
+or an error occurs while setting a new limit.
+
+@item unalias
+@btindex unalias
+@example
+unalias [-a] [@var{name} @dots{} ]
+@end example
+
+Remove each @var{name} from the list of aliases. If @option{-a} is
+supplied, all aliases are removed.
+Aliases are described in @ref{Aliases}.
+
+@end table
+
+@node The Set Builtin
+@section The Set Builtin
+
+This builtin is so complicated that it deserves its own section.
+
+@table @code
+@item set
+@btindex set
+@example
+set [--abefhkmnptuvxBCHP] [-o @var{option}] [@var{argument} @dots{}]
+@end example
+
+If no options or arguments are supplied, @code{set} displays the names
+and values of all shell variables and functions, sorted according to the
+current locale, in a format that may be reused as input.
+
+When options are supplied, they set or unset shell attributes.
+Options, if specified, have the following meanings:
+
+@table @code
+@item -a
+Mark variables and function which are modified or created for export
+to the environment of subsequent commands.
+
+@item -b
+Cause the status of terminated background jobs to be reported
+immediately, rather than before printing the next primary prompt.
+
+@item -e
+Exit immediately if a simple command (@pxref{Simple Commands}) exits
+with a non-zero status, unless the command that fails is part of the
+command list immediately following a @code{while} or @code{until}
+keyword, part of the test in an @code{if} statement,
+part of a @code{&&} or @code{||} list, or if the command's return
+status is being inverted using @code{!}.
+A trap on @code{ERR}, if set, is executed before the shell exits.
+
+@item -f
+Disable file name generation (globbing).
+
+@item -h
+Locate and remember (hash) commands as they are looked up for execution.
+This option is enabled by default.
+
+@item -k
+All arguments in the form of assignment statements are placed
+in the environment for a command, not just those that precede
+the command name.
+
+@item -m
+Job control is enabled (@pxref{Job Control}).
+
+@item -n
+Read commands but do not execute them; this may be used to check a
+script for syntax errors.
+This option is ignored by interactive shells.
+
+@item -o @var{option-name}
+
+Set the option corresponding to @var{option-name}:
+
+@table @code
+@item allexport
+Same as @code{-a}.
+
+@item braceexpand
+Same as @code{-B}.
+
+@item emacs
+Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}).
+
+@item errexit
+Same as @code{-e}.
+
+@item errtrace
+Same as @code{-E}.
+
+@item functrace
+Same as @code{-T}.
+
+@item hashall
+Same as @code{-h}.
+
+@item histexpand
+Same as @code{-H}.
+
+@item history
+Enable command history, as described in @ref{Bash History Facilities}.
+This option is on by default in interactive shells.
+
+@item ignoreeof
+An interactive shell will not exit upon reading EOF.
+
+@item keyword
+Same as @code{-k}.
+
+@item monitor
+Same as @code{-m}.
+
+@item noclobber
+Same as @code{-C}.
+
+@item noexec
+Same as @code{-n}.
+
+@item noglob
+Same as @code{-f}.
+
+@item nolog
+Currently ignored.
+
+@item notify
+Same as @code{-b}.
+
+@item nounset
+Same as @code{-u}.
+
+@item onecmd
+Same as @code{-t}.
+
+@item physical
+Same as @code{-P}.
+
+@item posix
+Change the behavior of Bash where the default operation differs
+from the @sc{posix} 1003.2 standard to match the standard
+(@pxref{Bash POSIX Mode}).
+This is intended to make Bash behave as a strict superset of that
+standard.
+
+@item privileged
+Same as @code{-p}.
+
+@item verbose
+Same as @code{-v}.
+
+@item vi
+Use a @code{vi}-style line editing interface.
+
+@item xtrace
+Same as @code{-x}.
+@end table
+
+@item -p
+Turn on privileged mode.
+In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not
+processed, shell functions are not inherited from the environment,
+and the @env{SHELLOPTS} variable, if it appears in the environment,
+is ignored.
+If the shell is started with the effective user (group) id not equal to the
+real user (group) id, and the @code{-p} option is not supplied, these actions
+are taken and the effective user id is set to the real user id.
+If the @code{-p} option is supplied at startup, the effective user id is
+not reset.
+Turning this option off causes the effective user
+and group ids to be set to the real user and group ids.
+
+@item -t
+Exit after reading and executing one command.
+
+@item -u
+Treat unset variables as an error when performing parameter expansion.
+An error message will be written to the standard error, and a non-interactive
+shell will exit.
+
+@item -v
+Print shell input lines as they are read.
+
+@item -x
+Print a trace of simple commands, \fBfor\fP commands, \fBcase\fP
+commands, \fBselect\fP commands, and arithmetic \fBfor\fP commands
+and their arguments or associated word lists after they are
+expanded and before they are executed. The value of the @env{PS4}
+variable is expanded and the resultant value is printed before
+the command and its expanded arguments.
+
+@item -B
+The shell will perform brace expansion (@pxref{Brace Expansion}).
+This option is on by default.
+
+@item -C
+Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>}
+from overwriting existing files.
+
+@item -E
+If set, any trap on @code{ERR} is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The @code{ERR} trap is normally not inherited in such cases.
+
+@item -H
+Enable @samp{!} style history substitution (@pxref{History Interaction}).
+This option is on by default for interactive shells.
+
+@item -P
+If set, do not follow symbolic links when performing commands such as
+@code{cd} which change the current directory. The physical directory
+is used instead. By default, Bash follows
+the logical chain of directories when performing commands
+which change the current directory.
+
+For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys}
+then:
+@example
+$ cd /usr/sys; echo $PWD
+/usr/sys
+$ cd ..; pwd
+/usr
+@end example
+
+@noindent
+If @code{set -P} is on, then:
+@example
+$ cd /usr/sys; echo $PWD
+/usr/local/sys
+$ cd ..; pwd
+/usr/local
+@end example
+
+@item -T
+If set, any trap on @code{DEBUG} is inherited by shell functions, command
+substitutions, and commands executed in a subshell environment.
+The @code{DEBUG} trap is normally not inherited in such cases.
+
+@item --
+If no arguments follow this option, then the positional parameters are
+unset. Otherwise, the positional parameters are set to the
+@var{arguments}, even if some of them begin with a @samp{-}.
+
+@item -
+Signal the end of options, cause all remaining @var{arguments}
+to be assigned to the positional parameters. The @option{-x}
+and @option{-v} options are turned off.
+If there are no arguments, the positional parameters remain unchanged.
+@end table
+
+Using @samp{+} rather than @samp{-} causes these options to be
+turned off. The options can also be used upon invocation of the
+shell. The current set of options may be found in @code{$-}.
+
+The remaining N @var{arguments} are positional parameters and are
+assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}.
+The special parameter @code{#} is set to N.
+
+The return status is always zero unless an invalid option is supplied.
+@end table
+
+@node Special Builtins
+@section Special Builtins
+@cindex special builtin
+
+For historical reasons, the @sc{posix} 1003.2 standard has classified
+several builtin commands as @emph{special}.
+When Bash is executing in @sc{posix} mode, the special builtins
+differ from other builtin commands in three respects:
+
+@enumerate
+@item
+Special builtins are found before shell functions during command lookup.
+
+@item
+If a special builtin returns an error status, a non-interactive shell exits.
+
+@item
+Assignment statements preceding the command stay in effect in the shell
+environment after the command completes.
+@end enumerate
+
+When Bash is not executing in @sc{posix} mode, these builtins behave no
+differently than the rest of the Bash builtin commands.
+The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}.
+
+These are the @sc{posix} special builtins:
+@example
+@w{break : . continue eval exec exit export readonly return set}
+@w{shift trap unset}
+@end example
+
+@node Shell Variables
+@chapter Shell Variables
+
+@menu
+* Bourne Shell Variables:: Variables which Bash uses in the same way
+ as the Bourne Shell.
+* Bash Variables:: List of variables that exist in Bash.
+@end menu
+
+This chapter describes the shell variables that Bash uses.
+Bash automatically assigns default values to a number of variables.
+
+@node Bourne Shell Variables
+@section Bourne Shell Variables
+
+Bash uses certain shell variables in the same way as the Bourne shell.
+In some cases, Bash assigns a default value to the variable.
+
+@vtable @code
+
+@item CDPATH
+A colon-separated list of directories used as a search path for
+the @code{cd} builtin command.
+
+@item HOME
+The current user's home directory; the default for the @code{cd} builtin
+command.
+The value of this variable is also used by tilde expansion
+(@pxref{Tilde Expansion}).
+
+@item IFS
+A list of characters that separate fields; used when the shell splits
+words as part of expansion.
+
+@item MAIL
+If this parameter is set to a filename and the @env{MAILPATH} variable
+is not set, Bash informs the user of the arrival of mail in
+the specified file.
+
+@item MAILPATH
+A colon-separated list of filenames which the shell periodically checks
+for new mail.
+Each list entry can specify the message that is printed when new mail
+arrives in the mail file by separating the file name from the message with
+a @samp{?}.
+When used in the text of the message, @code{$_} expands to the name of
+the current mail file.
+
+@item OPTARG
+The value of the last option argument processed by the @code{getopts} builtin.
+
+@item OPTIND
+The index of the last option argument processed by the @code{getopts} builtin.
+
+@item PATH
+A colon-separated list of directories in which the shell looks for
+commands.
+A zero-length (null) directory name in the value of @code{PATH} indicates the
+current directory.
+A null directory name may appear as two adjacent colons, or as an initial
+or trailing colon.
+
+
+@item PS1
+The primary prompt string. The default value is @samp{\s-\v\$ }.
+@xref{Printing a Prompt}, for the complete list of escape
+sequences that are expanded before @env{PS1} is displayed.
+
+@item PS2
+The secondary prompt string. The default value is @samp{> }.
+
+@end vtable
+
+@node Bash Variables
+@section Bash Variables
+
+These variables are set or used by Bash, but other shells
+do not normally treat them specially.
+
+A few variables used by Bash are described in different chapters:
+variables for controlling the job control facilities
+(@pxref{Job Control Variables}).
+
+@vtable @code
+
+@item BASH
+The full pathname used to execute the current instance of Bash.
+
+@item BASH_ARGC
+An array variable whose values are the number of parameters in each
+frame of the current bash execution call stack. The number of
+parameters to the current subroutine (shell function or script executed
+with @code{.} or @code{source}) is at the top of the stack. When a
+subroutine is executed, the number of parameters passed is pushed onto
+@code{BASH_ARGC}.
+
+@item BASH_ARGV
+An array variable containing all of the parameters in the current bash
+execution call stack. The final parameter of the last subroutine call
+is at the top of the stack; the first parameter of the initial call is
+at the bottom. When a subroutine is executed, the parameters supplied
+are pushed onto @code{BASH_ARGV}.
+
+@item BASH_COMMAND
+The command currently being executed or about to be executed, unless the
+shell is executing a command as the result of a trap,
+in which case it is the command executing at the time of the trap.
+
+@item BASH_ENV
+If this variable is set when Bash is invoked to execute a shell
+script, its value is expanded and used as the name of a startup file
+to read before executing the script. @xref{Bash Startup Files}.
+
+@item BASH_EXECUTION_STRING
+The command argument to the @option{-c} invocation option.
+
+@item BASH_LINENO
+An array variable whose members are the line numbers in source files
+corresponding to each member of @var{FUNCNAME}.
+@code{$@{BASH_LINENO[$i]@}} is the line number in the source file where
+@code{$@{FUNCNAME[$i + 1]@}} was called.
+The corresponding source file name is @code{$@{BASH_SOURCE[$i + 1]@}}.
+Use @code{LINENO} to obtain the current line number.
+
+@item BASH_SOURCE
+An array variable whose members are the source filenames corresponding
+to the elements in the @code{FUNCNAME} array variable.
+
+@item BASH_SUBSHELL
+Incremented by one each time a subshell or subshell environment is spawned.
+The initial value is 0.
+
+@item BASH_VERSINFO
+A readonly array variable (@pxref{Arrays})
+whose members hold version information for this instance of Bash.
+The values assigned to the array members are as follows:
+
+@table @code
+
+@item BASH_VERSINFO[0]
+The major version number (the @var{release}).
+
+@item BASH_VERSINFO[1]
+The minor version number (the @var{version}).
+
+@item BASH_VERSINFO[2]
+The patch level.
+
+@item BASH_VERSINFO[3]
+The build version.
+
+@item BASH_VERSINFO[4]
+The release status (e.g., @var{beta1}).
+
+@item BASH_VERSINFO[5]
+The value of @env{MACHTYPE}.
+
+@end table
+
+@item BASH_VERSION
+The version number of the current instance of Bash.
+
+@item COLUMNS
+Used by the @code{select} builtin command to determine the terminal width
+when printing selection lists. Automatically set upon receipt of a
+@code{SIGWINCH}.
+
+@item COMP_CWORD
+An index into @env{$@{COMP_WORDS@}} of the word containing the current
+cursor position.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_LINE
+The current command line.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_POINT
+The index of the current cursor position relative to the beginning of
+the current command.
+If the current cursor position is at the end of the current command,
+the value of this variable is equal to @code{$@{#COMP_LINE@}}.
+This variable is available only in shell functions and external
+commands invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMP_WORDBREAKS
+The set of characters that the Readline library treats as word
+separators when performing word completion.
+If @code{COMP_WORDBREAKS} is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@item COMP_WORDS
+An array variable consisting of the individual
+words in the current command line.
+This variable is available only in shell functions invoked by the
+programmable completion facilities (@pxref{Programmable Completion}).
+
+@item COMPREPLY
+An array variable from which Bash reads the possible completions
+generated by a shell function invoked by the programmable completion
+facility (@pxref{Programmable Completion}).
+
+@item DIRSTACK
+An array variable containing the current contents of the directory stack.
+Directories appear in the stack in the order they are displayed by the
+@code{dirs} builtin.
+Assigning to members of this array variable may be used to modify
+directories already in the stack, but the @code{pushd} and @code{popd}
+builtins must be used to add and remove directories.
+Assignment to this variable will not change the current directory.
+If @env{DIRSTACK} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+@item EMACS
+If Bash finds this variable in the environment when the shell
+starts with value @samp{t}, it assumes that the shell is running in an
+emacs shell buffer and disables line editing.
+
+@item EUID
+The numeric effective user id of the current user. This variable
+is readonly.
+
+@item FCEDIT
+The editor used as a default by the @option{-e} option to the @code{fc}
+builtin command.
+
+@item FIGNORE
+A colon-separated list of suffixes to ignore when performing
+filename completion.
+A file name whose suffix matches one of the entries in
+@env{FIGNORE}
+is excluded from the list of matched file names. A sample
+value is @samp{.o:~}
+
+@item FUNCNAME
+An array variable containing the names of all shell functions
+currently in the execution call stack.
+The element with index 0 is the name of any currently-executing
+shell function.
+The bottom-most element is "main".
+This variable exists only when a shell function is executing.
+Assignments to @env{FUNCNAME} have no effect and return an error status.
+If @env{FUNCNAME} is unset, it loses its special properties, even if
+it is subsequently reset.
+
+@item GLOBIGNORE
+A colon-separated list of patterns defining the set of filenames to
+be ignored by filename expansion.
+If a filename matched by a filename expansion pattern also matches one
+of the patterns in @env{GLOBIGNORE}, it is removed from the list
+of matches.
+
+@item GROUPS
+An array variable containing the list of groups of which the current
+user is a member.
+Assignments to @env{GROUPS} have no effect and return an error status.
+If @env{GROUPS} is unset, it loses its special properties, even if it is
+subsequently reset.
+
+@item histchars
+Up to three characters which control history expansion, quick
+substitution, and tokenization (@pxref{History Interaction}).
+The first character is the
+@var{history expansion} character, that is, the character which signifies the
+start of a history expansion, normally @samp{!}. The second character is the
+character which signifies `quick substitution' when seen as the first
+character on a line, normally @samp{^}. The optional third character is the
+character which indicates that the remainder of the line is a comment when
+found as the first character of a word, usually @samp{#}. The history
+comment character causes history substitution to be skipped for the
+remaining words on the line. It does not necessarily cause the shell
+parser to treat the rest of the line as a comment.
+
+@item HISTCMD
+The history number, or index in the history list, of the current
+command. If @env{HISTCMD} is unset, it loses its special properties,
+even if it is subsequently reset.
+
+@item HISTCONTROL
+A colon-separated list of values controlling how commands are saved on
+the history list.
+If the list of values includes @samp{ignorespace}, lines which begin
+with a space character are not saved in the history list.
+A value of @samp{ignoredups} causes lines which match the previous
+history entry to not be saved.
+A value of @samp{ignoreboth} is shorthand for
+@samp{ignorespace} and @samp{ignoredups}.
+A value of @samp{erasedups} causes all previous lines matching the
+current line to be removed from the history list before that line
+is saved.
+Any value not in the above list is ignored.
+If @env{HISTCONTROL} is unset, or does not include a valid value,
+all lines read by the shell parser are saved on the history list,
+subject to the value of @env{HISTIGNORE}.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+@env{HISTCONTROL}.
+
+@item HISTFILE
+The name of the file to which the command history is saved. The
+default value is @file{~/.bash_history}.
+
+@item HISTFILESIZE
+The maximum number of lines contained in the history file. When this
+variable is assigned a value, the history file is truncated, if
+necessary, to contain no more than that number of lines.
+The history file is also truncated to this size after
+writing it when an interactive shell exits.
+The default value is 500.
+
+@item HISTIGNORE
+A colon-separated list of patterns used to decide which command
+lines should be saved on the history list. Each pattern is
+anchored at the beginning of the line and must match the complete
+line (no implicit @samp{*} is appended). Each pattern is tested
+against the line after the checks specified by @env{HISTCONTROL}
+are applied. In addition to the normal shell pattern matching
+characters, @samp{&} matches the previous history line. @samp{&}
+may be escaped using a backslash; the backslash is removed
+before attempting a match.
+The second and subsequent lines of a multi-line compound command are
+not tested, and are added to the history regardless of the value of
+@env{HISTIGNORE}.
+
+@env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A
+pattern of @samp{&} is identical to @code{ignoredups}, and a
+pattern of @samp{[ ]*} is identical to @code{ignorespace}.
+Combining these two patterns, separating them with a colon,
+provides the functionality of @code{ignoreboth}.
+
+@item HISTSIZE
+The maximum number of commands to remember on the history list.
+The default value is 500.
+
+@item HOSTFILE
+Contains the name of a file in the same format as @file{/etc/hosts} that
+should be read when the shell needs to complete a hostname.
+The list of possible hostname completions may be changed while the shell
+is running;
+the next time hostname completion is attempted after the
+value is changed, Bash adds the contents of the new file to the
+existing list.
+If @env{HOSTFILE} is set, but has no value, Bash attempts to read
+@file{/etc/hosts} to obtain the list of possible hostname completions.
+When @env{HOSTFILE} is unset, the hostname list is cleared.
+
+@item HOSTNAME
+The name of the current host.
+
+@item HOSTTYPE
+A string describing the machine Bash is running on.
+
+@item IGNOREEOF
+Controls the action of the shell on receipt of an @code{EOF} character
+as the sole input. If set, the value denotes the number
+of consecutive @code{EOF} characters that can be read as the
+first character on an input line
+before the shell will exit. If the variable exists but does not
+have a numeric value (or has no value) then the default is 10.
+If the variable does not exist, then @code{EOF} signifies the end of
+input to the shell. This is only in effect for interactive shells.
+
+@item INPUTRC
+The name of the Readline initialization file, overriding the default
+of @file{~/.inputrc}.
+
+@item LANG
+Used to determine the locale category for any category not specifically
+selected with a variable starting with @code{LC_}.
+
+@item LC_ALL
+This variable overrides the value of @env{LANG} and any other
+@code{LC_} variable specifying a locale category.
+
+@item LC_COLLATE
+This variable determines the collation order used when sorting the
+results of filename expansion, and
+determines the behavior of range expressions, equivalence classes,
+and collating sequences within filename expansion and pattern matching
+(@pxref{Filename Expansion}).
+
+@item LC_CTYPE
+This variable determines the interpretation of characters and the
+behavior of character classes within filename expansion and pattern
+matching (@pxref{Filename Expansion}).
+
+@item LC_MESSAGES
+This variable determines the locale used to translate double-quoted
+strings preceded by a @samp{$} (@pxref{Locale Translation}).
+
+@item LC_NUMERIC
+This variable determines the locale category used for number formatting.
+
+@item LINENO
+The line number in the script or shell function currently executing.
+
+@item LINES
+Used by the @code{select} builtin command to determine the column length
+for printing selection lists. Automatically set upon receipt of a
+@code{SIGWINCH}.
+
+@item MACHTYPE
+A string that fully describes the system type on which Bash
+is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
+
+@item MAILCHECK
+How often (in seconds) that the shell should check for mail in the
+files specified in the @env{MAILPATH} or @env{MAIL} variables.
+The default is 60 seconds. When it is time to check
+for mail, the shell does so before displaying the primary prompt.
+If this variable is unset, or set to a value that is not a number
+greater than or equal to zero, the shell disables mail checking.
+
+@item OLDPWD
+The previous working directory as set by the @code{cd} builtin.
+
+@item OPTERR
+If set to the value 1, Bash displays error messages
+generated by the @code{getopts} builtin command.
+
+@item OSTYPE
+A string describing the operating system Bash is running on.
+
+@item PIPESTATUS
+An array variable (@pxref{Arrays})
+containing a list of exit status values from the processes
+in the most-recently-executed foreground pipeline (which may
+contain only a single command).
+
+@item POSIXLY_CORRECT
+If this variable is in the environment when @code{bash} starts, the shell
+enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
+startup files, as if the @option{--posix} invocation option had been supplied.
+If it is set while the shell is running, @code{bash} enables @sc{posix} mode,
+as if the command
+@example
+@code{set -o posix}
+@end example
+@noindent
+had been executed.
+
+@item PPID
+The process @sc{id} of the shell's parent process. This variable
+is readonly.
+
+@item PROMPT_COMMAND
+If set, the value is interpreted as a command to execute
+before the printing of each primary prompt (@env{$PS1}).
+
+@item PS3
+The value of this variable is used as the prompt for the
+@code{select} command. If this variable is not set, the
+@code{select} command prompts with @samp{#? }
+
+@item PS4
+The value 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 @env{PS4} is replicated multiple times, as
+necessary, to indicate multiple levels of indirection.
+The default is @samp{+ }.
+
+@item PWD
+The current working directory as set by the @code{cd} builtin.
+
+@item RANDOM
+Each time this parameter is referenced, a random integer
+between 0 and 32767 is generated. Assigning a value to this
+variable seeds the random number generator.
+
+@item REPLY
+The default variable for the @code{read} builtin.
+
+@item SECONDS
+This variable expands to the number of seconds since the
+shell was started. Assignment to this variable resets
+the count to the value assigned, and the expanded value
+becomes the value assigned plus the number of seconds
+since the assignment.
+
+@item SHELLOPTS
+A colon-separated list of enabled shell options. Each word in
+the list is a valid argument for the @option{-o} option to the
+@code{set} builtin command (@pxref{The Set Builtin}).
+The options appearing in @env{SHELLOPTS} are those reported
+as @samp{on} by @samp{set -o}.
+If this variable is in the environment when Bash
+starts up, each shell option in the list will be enabled before
+reading any startup files. This variable is readonly.
+
+@item SHLVL
+Incremented by one each time a new instance of Bash is started. This is
+intended to be a count of how deeply your Bash shells are nested.
+
+@item TIMEFORMAT
+The value of this parameter is used as a format string specifying
+how the timing information for pipelines prefixed with the @code{time}
+reserved word should be displayed.
+The @samp{%} character introduces an
+escape sequence that is expanded to a time value or other
+information.
+The escape sequences and their meanings are as
+follows; the braces denote optional portions.
+
+@table @code
+
+@item %%
+A literal @samp{%}.
+
+@item %[@var{p}][l]R
+The elapsed time in seconds.
+
+@item %[@var{p}][l]U
+The number of CPU seconds spent in user mode.
+
+@item %[@var{p}][l]S
+The number of CPU seconds spent in system mode.
+
+@item %P
+The CPU percentage, computed as (%U + %S) / %R.
+@end table
+
+The optional @var{p} is a digit specifying the precision, the number of
+fractional digits after a decimal point.
+A value of 0 causes no decimal point or fraction to be output.
+At most three places after the decimal point may be specified; values
+of @var{p} greater than 3 are changed to 3.
+If @var{p} is not specified, the value 3 is used.
+
+The optional @code{l} specifies a longer format, including minutes, of
+the form @var{MM}m@var{SS}.@var{FF}s.
+The value of @var{p} determines whether or not the fraction is included.
+
+If this variable is not set, Bash acts as if it had the value
+@example
+@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'}
+@end example
+If the value is null, no timing information is displayed.
+A trailing newline is added when the format string is displayed.
+
+@item TMOUT
+If set to a value greater than zero, @code{TMOUT} is treated as the
+default timeout for the @code{read} builtin (@pxref{Bash Builtins}).
+The @code{select} command (@pxref{Conditional Constructs}) terminates
+if input does not arrive after @code{TMOUT} seconds when input is coming
+from a terminal.
+
+In an interative shell, the value is interpreted as
+the number of seconds to wait for input after issuing the primary
+prompt when the shell is interactive.
+Bash terminates after that number of seconds if input does
+not arrive.
+
+@item UID
+The numeric real user id of the current user. This variable is readonly.
+
+@end vtable
+
+@node Bash Features
+@chapter Bash Features
+
+This section describes features unique to Bash.
+
+@menu
+* Invoking Bash:: Command line options that you can give
+ to Bash.
+* Bash Startup Files:: When and how Bash executes scripts.
+* Interactive Shells:: What an interactive shell is.
+* Bash Conditional Expressions:: Primitives used in composing expressions for
+ the @code{test} builtin.
+* Shell Arithmetic:: Arithmetic on shell variables.
+* Aliases:: Substituting one command for another.
+* Arrays:: Array Variables.
+* The Directory Stack:: History of visited directories.
+* Printing a Prompt:: Controlling the PS1 string.
+* The Restricted Shell:: A more controlled mode of shell execution.
+* Bash POSIX Mode:: Making Bash behave more closely to what
+ the POSIX standard specifies.
+@end menu
+
+@node Invoking Bash
+@section Invoking Bash
+
+@example
+bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
+bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
+bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
+@end example
+
+In addition to the single-character shell command-line options
+(@pxref{The Set Builtin}), there are several multi-character
+options that you can use. These options must appear on the command
+line before the single-character options to be recognized.
+
+@table @code
+@item --debugger
+Arrange for the debugger profile to be executed before the shell
+starts. Turns on extended debugging mode (see @ref{Bash Builtins}
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin) and shell function tracing
+(see @ref{The Set Builtin} for a description of the @code{-o functrace}
+option).
+
+@item --dump-po-strings
+A list of all double-quoted strings preceded by @samp{$}
+is printed on the standard ouput
+in the @sc{gnu} @code{gettext} PO (portable object) file format.
+Equivalent to @option{-D} except for the output format.
+
+@item --dump-strings
+Equivalent to @option{-D}.
+
+@item --help
+Display a usage message on standard output and exit sucessfully.
+
+@item --init-file @var{filename}
+@itemx --rcfile @var{filename}
+Execute commands from @var{filename} (instead of @file{~/.bashrc})
+in an interactive shell.
+
+@item --login
+Equivalent to @option{-l}.
+
+@item --noediting
+Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing})
+to read command lines when the shell is interactive.
+
+@item --noprofile
+Don't load the system-wide startup file @file{/etc/profile}
+or any of the personal initialization files
+@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile}
+when Bash is invoked as a login shell.
+
+@item --norc
+Don't read the @file{~/.bashrc} initialization file in an
+interactive shell. This is on by default if the shell is
+invoked as @code{sh}.
+
+@item --posix
+Change the behavior of Bash where the default operation differs
+from the @sc{posix} 1003.2 standard to match the standard. This
+is intended to make Bash behave as a strict superset of that
+standard. @xref{Bash POSIX Mode}, for a description of the Bash
+@sc{posix} mode.
+
+@item --restricted
+Make the shell a restricted shell (@pxref{The Restricted Shell}).
+
+@item --verbose
+Equivalent to @option{-v}. Print shell input lines as they're read.
+
+@item --version
+Show version information for this instance of
+Bash on the standard output and exit successfully.
+
+@end table
+
+There are several single-character options that may be supplied at
+invocation which are not available with the @code{set} builtin.
+
+@table @code
+@item -c @var{string}
+Read and execute commands from @var{string} after processing the
+options, then exit. Any remaining arguments are assigned to the
+positional parameters, starting with @code{$0}.
+
+@item -i
+Force the shell to run interactively. Interactive shells are
+described in @ref{Interactive Shells}.
+
+@item -l
+Make this shell act as if it had been directly invoked by login.
+When the shell is interactive, this is equivalent to starting a
+login shell with @samp{exec -l bash}.
+When the shell is not interactive, the login shell startup files will
+be executed.
+@samp{exec bash -l} or @samp{exec bash --login}
+will replace the current shell with a Bash login shell.
+@xref{Bash Startup Files}, for a description of the special behavior
+of a login shell.
+
+@item -r
+Make the shell a restricted shell (@pxref{The Restricted Shell}).
+
+@item -s
+If this option is present, or if no arguments remain after option
+processing, then commands are read from the standard input.
+This option allows the positional parameters to be set
+when invoking an interactive shell.
+
+@item -D
+A list of all double-quoted strings preceded by @samp{$}
+is printed on the standard ouput.
+These are the strings that
+are subject to language translation when the current locale
+is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
+This implies the @option{-n} option; no commands will be executed.
+
+@item [-+]O [@var{shopt_option}]
+@var{shopt_option} is one of the shell options accepted by the
+@code{shopt} builtin (@pxref{Shell Builtin Commands}).
+If @var{shopt_option} is present, @option{-O} sets the value of that option;
+@option{+O} unsets it.
+If @var{shopt_option} is not supplied, the names and values of the shell
+options accepted by @code{shopt} are printed on the standard output.
+If the invocation option is @option{+O}, the output is displayed in a format
+that may be reused as input.
+
+@item --
+A @code{--} signals the end of options and disables further option
+processing.
+Any arguments after the @code{--} are treated as filenames and arguments.
+
+@end table
+
+@cindex login shell
+A @emph{login} shell is one whose first character of argument zero is
+@samp{-}, or one invoked with the @option{--login} option.
+
+@cindex interactive shell
+An @emph{interactive} shell is one started without non-option arguments,
+unless @option{-s} is specified,
+without specifying the @option{-c} option, and whose input and output are both
+connected to terminals (as determined by @code{isatty(3)}), or one
+started with the @option{-i} option. @xref{Interactive Shells}, for more
+information.
+
+If arguments remain after option processing, and neither the
+@option{-c} nor the @option{-s}
+option has been supplied, the first argument is assumed to
+be the name of a file containing shell commands (@pxref{Shell Scripts}).
+When Bash is invoked in this fashion, @code{$0}
+is set to the name of the file, and the positional parameters
+are set to the remaining arguments.
+Bash reads and executes commands from this file, then exits.
+Bash's exit status is the exit status of the last command executed
+in the script. If no commands are executed, the exit status is 0.
+
+@node Bash Startup Files
+@section Bash Startup Files
+@cindex startup files
+
+This section describs how Bash executes its startup files.
+If any of the files exist but cannot be read, Bash reports an error.
+Tildes are expanded in file names as described above under
+Tilde Expansion (@pxref{Tilde Expansion}).
+
+Interactive shells are described in @ref{Interactive Shells}.
+
+@subsubheading Invoked as an interactive login shell, or with @option{--login}
+
+When Bash is invoked as an interactive login shell, or as a
+non-interactive shell with the @option{--login} option, it first reads and
+executes commands from the file @file{/etc/profile}, if that file exists.
+After reading that file, it looks for @file{~/.bash_profile},
+@file{~/.bash_login}, and @file{~/.profile}, in that order, and reads
+and executes commands from the first one that exists and is readable.
+The @option{--noprofile} option may be used when the shell is started to
+inhibit this behavior.
+
+When a login shell exits, Bash reads and executes commands from
+the file @file{~/.bash_logout}, if it exists.
+
+@subsubheading Invoked as an interactive non-login shell
+
+When an interactive shell that is not a login shell is started, Bash
+reads and executes commands from @file{~/.bashrc}, if that file exists.
+This may be inhibited by using the @option{--norc} option.
+The @option{--rcfile @var{file}} option will force Bash to read and
+execute commands from @var{file} instead of @file{~/.bashrc}.
+
+So, typically, your @file{~/.bash_profile} contains the line
+@example
+@code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi}
+@end example
+@noindent
+after (or before) any login-specific initializations.
+
+@subsubheading Invoked non-interactively
+
+When Bash is started non-interactively, to run a shell script,
+for example, it looks for the variable @env{BASH_ENV} in the environment,
+expands its value if it appears there, and uses the expanded value as
+the name of a file to read and execute. Bash behaves as if the
+following command were executed:
+@example
+@code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi}
+@end example
+@noindent
+but the value of the @env{PATH} variable is not used to search for the
+file name.
+
+As noted above, if a non-interactive shell is invoked with the
+@option{--login} option, Bash attempts to read and execute commands from the
+login shell startup files.
+
+@subsubheading Invoked with name @code{sh}
+
+If Bash is invoked with the name @code{sh}, it tries to mimic the
+startup behavior of historical versions of @code{sh} as closely as
+possible, while conforming to the @sc{posix} standard as well.
+
+When invoked as an interactive login shell, or as a non-interactive
+shell with the @option{--login} option, it first attempts to read
+and execute commands from @file{/etc/profile} and @file{~/.profile}, in
+that order.
+The @option{--noprofile} option may be used to inhibit this behavior.
+When invoked as an interactive shell with the name @code{sh}, Bash
+looks for the variable @env{ENV}, expands its value if it is defined,
+and uses the expanded value as the name of a file to read and execute.
+Since a shell invoked as @code{sh} does not attempt to read and execute
+commands from any other startup files, the @option{--rcfile} option has
+no effect.
+A non-interactive shell invoked with the name @code{sh} does not attempt
+to read any other startup files.
+
+When invoked as @code{sh}, Bash enters @sc{posix} mode after
+the startup files are read.
+
+@subsubheading Invoked in @sc{posix} mode
+
+When Bash is started in @sc{posix} mode, as with the
+@option{--posix} command line option, it follows the @sc{posix} standard
+for startup files.
+In this mode, interactive shells expand the @env{ENV} variable
+and commands are read and executed from the file whose name is the
+expanded value.
+No other startup files are read.
+
+@subsubheading Invoked by remote shell daemon
+
+Bash attempts to determine when it is being run by the remote shell
+daemon, usually @code{rshd}. If Bash determines it is being run by
+rshd, it reads and executes commands from @file{~/.bashrc}, if that
+file exists and is readable.
+It will not do this if invoked as @code{sh}.
+The @option{--norc} option may be used to inhibit this behavior, and the
+@option{--rcfile} option may be used to force another file to be read, but
+@code{rshd} does not generally invoke the shell with those options or
+allow them to be specified.
+
+@subsubheading Invoked with unequal effective and real @sc{uid/gid}s
+
+If Bash is started with the effective user (group) id not equal to the
+real user (group) id, and the @code{-p} option is not supplied, no startup
+files are read, shell functions are not inherited from the environment,
+the @env{SHELLOPTS} variable, if it appears in the environment, is ignored,
+and the effective user id is set to the real user id.
+If the @code{-p} option is supplied at invocation, the startup behavior is
+the same, but the effective user id is not reset.
+
+@node Interactive Shells
+@section Interactive Shells
+@cindex interactive shell
+@cindex shell, interactive
+
+@menu
+* What is an Interactive Shell?:: What determines whether a shell is Interactive.
+* Is this Shell Interactive?:: How to tell if a shell is interactive.
+* Interactive Shell Behavior:: What changes in a interactive shell?
+@end menu
+
+@node What is an Interactive Shell?
+@subsection What is an Interactive Shell?
+
+An interactive shell
+is one started without non-option arguments, unless @option{-s} is
+specified, without specifiying the @option{-c} option, and
+whose input and output are both
+connected to terminals (as determined by @code{isatty(3)}),
+or one started with the @option{-i} option.
+
+An interactive shell generally reads from and writes to a user's
+terminal.
+
+The @option{-s} invocation option may be used to set the positional parameters
+when an interactive shell is started.
+
+@node Is this Shell Interactive?
+@subsection Is this Shell Interactive?
+
+To determine within a startup script whether or not Bash is
+running interactively,
+test the value of the @samp{-} special parameter.
+It contains @code{i} when the shell is interactive. For example:
+
+@example
+case "$-" in
+*i*) echo This shell is interactive ;;
+*) echo This shell is not interactive ;;
+esac
+@end example
+
+Alternatively, startup scripts may examine the variable
+@env{PS1}; it is unset in non-interactive shells, and set in
+interactive shells. Thus:
+
+@example
+if [ -z "$PS1" ]; then
+ echo This shell is not interactive
+else
+ echo This shell is interactive
+fi
+@end example
+
+@node Interactive Shell Behavior
+@subsection Interactive Shell Behavior
+
+When the shell is running interactively, it changes its behavior in
+several ways.
+
+@enumerate
+@item
+Startup files are read and executed as described in @ref{Bash Startup Files}.
+
+@item
+Job Control (@pxref{Job Control}) is enabled by default. When job
+control is in effect, Bash ignores the keyboard-generated job control
+signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
+
+@item
+Bash expands and displays @env{PS1} before reading the first line
+of a command, and expands and displays @env{PS2} before reading the
+second and subsequent lines of a multi-line command.
+
+@item
+Bash executes the value of the @env{PROMPT_COMMAND} variable as a command
+before printing the primary prompt, @env{$PS1}
+(@pxref{Bash Variables}).
+
+@item
+Readline (@pxref{Command Line Editing}) is used to read commands from
+the user's terminal.
+
+@item
+Bash inspects the value of the @code{ignoreeof} option to @code{set -o}
+instead of exiting immediately when it receives an @code{EOF} on its
+standard input when reading a command (@pxref{The Set Builtin}).
+
+@item
+Command history (@pxref{Bash History Facilities})
+and history expansion (@pxref{History Interaction})
+are enabled by default.
+Bash will save the command history to the file named by @env{$HISTFILE}
+when an interactive shell exits.
+
+@item
+Alias expansion (@pxref{Aliases}) is performed by default.
+
+@item
+In the absence of any traps, Bash ignores @code{SIGTERM}
+(@pxref{Signals}).
+
+@item
+In the absence of any traps, @code{SIGINT} is caught and handled
+((@pxref{Signals}).
+@code{SIGINT} will interrupt some shell builtins.
+
+@item
+An interactive login shell sends a @code{SIGHUP} to all jobs on exit
+if the @code{hupoxexit} shell option has been enabled (@pxref{Signals}).
+
+@item
+The @option{-n} invocation option is ignored, and @samp{set -n} has
+no effect (@pxref{The Set Builtin}).
+
+@item
+Bash will check for mail periodically, depending on the values of the
+@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables
+(@pxref{Bash Variables}).
+
+@item
+Expansion errors due to references to unbound shell variables after
+@samp{set -u} has been enabled will not cause the shell to exit
+(@pxref{The Set Builtin}).
+
+@item
+The shell will not exit on expansion errors caused by @var{var} being unset
+or null in @code{$@{@var{var}:?@var{word}@}} expansions
+(@pxref{Shell Parameter Expansion}).
+
+@item
+Redirection errors encountered by shell builtins will not cause the
+shell to exit.
+
+@item
+When running in @sc{posix} mode, a special builtin returning an error
+status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
+@item
+A failed @code{exec} will not cause the shell to exit
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Parser syntax errors will not cause the shell to exit.
+
+@item
+Simple spelling correction for directory arguments to the @code{cd}
+builtin is enabled by default (see the description of the @code{cdspell}
+option to the @code{shopt} builtin in @ref{Bash Builtins}).
+
+@item
+The shell will check the value of the @env{TMOUT} variable and exit
+if a command is not read within the specified number of seconds after
+printing @env{$PS1} (@pxref{Bash Variables}).
+
+@end enumerate
+
+@node Bash Conditional Expressions
+@section Bash Conditional Expressions
+@cindex expressions, conditional
+
+Conditional expressions are used by the @code{[[} compound command
+and the @code{test} and @code{[} builtin commands.
+
+Expressions may be unary or binary.
+Unary expressions are often used to examine the status of a file.
+There are string operators and numeric comparison operators as well.
+If the @var{file} argument to one of the primaries is of the form
+@file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked.
+If the @var{file} argument to one of the primaries is one of
+@file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
+descriptor 0, 1, or 2, respectively, is checked.
+
+@table @code
+@item -a @var{file}
+True if @var{file} exists.
+
+@item -b @var{file}
+True if @var{file} exists and is a block special file.
+
+@item -c @var{file}
+True if @var{file} exists and is a character special file.
+
+@item -d @var{file}
+True if @var{file} exists and is a directory.
+
+@item -e @var{file}
+True if @var{file} exists.
+
+@item -f @var{file}
+True if @var{file} exists and is a regular file.
+
+@item -g @var{file}
+True if @var{file} exists and its set-group-id bit is set.
+
+@item -h @var{file}
+True if @var{file} exists and is a symbolic link.
+
+@item -k @var{file}
+True if @var{file} exists and its "sticky" bit is set.
+
+@item -p @var{file}
+True if @var{file} exists and is a named pipe (FIFO).
+
+@item -r @var{file}
+True if @var{file} exists and is readable.
+
+@item -s @var{file}
+True if @var{file} exists and has a size greater than zero.
+
+@item -t @var{fd}
+True if file descriptor @var{fd} is open and refers to a terminal.
+
+@item -u @var{file}
+True if @var{file} exists and its set-user-id bit is set.
+
+@item -w @var{file}
+True if @var{file} exists and is writable.
+
+@item -x @var{file}
+True if @var{file} exists and is executable.
+
+@item -O @var{file}
+True if @var{file} exists and is owned by the effective user id.
+
+@item -G @var{file}
+True if @var{file} exists and is owned by the effective group id.
+
+@item -L @var{file}
+True if @var{file} exists and is a symbolic link.
+
+@item -S @var{file}
+True if @var{file} exists and is a socket.
+
+@item -N @var{file}
+True if @var{file} exists and has been modified since it was last read.
+
+@item @var{file1} -nt @var{file2}
+True if @var{file1} is newer (according to modification date)
+than @var{file2}, or if @var{file1} exists and @var{file2} does not.
+
+@item @var{file1} -ot @var{file2}
+True if @var{file1} is older than @var{file2},
+or if @var{file2} exists and @var{file1} does not.
+
+@item @var{file1} -ef @var{file2}
+True if @var{file1} and @var{file2} refer to the same device and
+inode numbers.
+
+@item -o @var{optname}
+True if shell option @var{optname} is enabled.
+The list of options appears in the description of the @option{-o}
+option to the @code{set} builtin (@pxref{The Set Builtin}).
+
+@item -z @var{string}
+True if the length of @var{string} is zero.
+
+@item -n @var{string}
+@itemx @var{string}
+True if the length of @var{string} is non-zero.
+
+@item @var{string1} == @var{string2}
+True if the strings are equal.
+@samp{=} may be used in place of @samp{==} for strict @sc{posix} compliance.
+
+@item @var{string1} != @var{string2}
+True if the strings are not equal.
+
+@item @var{string1} < @var{string2}
+True if @var{string1} sorts before @var{string2} lexicographically
+in the current locale.
+
+@item @var{string1} > @var{string2}
+True if @var{string1} sorts after @var{string2} lexicographically
+in the current locale.
+
+@item @var{arg1} OP @var{arg2}
+@code{OP} is one of
+@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}.
+These arithmetic binary operators return true if @var{arg1}
+is equal to, not equal to, less than, less than or equal to,
+greater than, or greater than or equal to @var{arg2},
+respectively. @var{Arg1} and @var{arg2}
+may be positive or negative integers.
+
+@end table
+
+@node Shell Arithmetic
+@section Shell Arithmetic
+@cindex arithmetic, shell
+@cindex shell arithmetic
+@cindex expressions, arithmetic
+@cindex evaluation, arithmetic
+@cindex arithmetic evaluation
+
+The shell allows arithmetic expressions to be evaluated, as one of
+the shell expansions or by the @code{let} and the @option{-i} option
+to the @code{declare} builtins.
+
+Evaluation is done in fixed-width integers with no check for overflow,
+though division by 0 is trapped and flagged as an error.
+The operators and their precedence, associativity, and values
+are the same as in the C language.
+The following list of operators is grouped into levels of
+equal-precedence operators.
+The levels are listed in order of decreasing precedence.
+
+@table @code
+
+@item @var{id}++ @var{id}--
+variable post-increment and post-decrement
+
+@item ++@var{id} --@var{id}
+variable pre-increment and pre-decrement
+
+@item - +
+unary minus and plus
+
+@item ! ~
+logical and bitwise negation
+
+@item **
+exponentiation
+
+@item * / %
+multiplication, division, remainder
+
+@item + -
+addition, subtraction
+
+@item << >>
+left and right bitwise shifts
+
+@item <= >= < >
+comparison
+
+@item == !=
+equality and inequality
+
+@item &
+bitwise AND
+
+@item ^
+bitwise exclusive OR
+
+@item |
+bitwise OR
+
+@item &&
+logical AND
+
+@item ||
+logical OR
+
+@item expr ? expr : expr
+conditional operator
+
+@item = *= /= %= += -= <<= >>= &= ^= |=
+assignment
+
+@item expr1 , expr2
+comma
+@end table
+
+Shell variables are allowed as operands; parameter expansion is
+performed before the expression is evaluated.
+Within an expression, shell variables may also be referenced by name
+without using the parameter expansion syntax.
+A shell variable that is null or unset evaluates to 0 when referenced
+by name without using the parameter expansion syntax.
+The value of a variable is evaluated as an arithmetic expression
+when it is referenced, or when a variable which has been given the
+@var{integer} attribute using @samp{declare -i} is assigned a value.
+A null value evaluates to 0.
+A shell variable need not have its integer attribute turned on
+to be used in an expression.
+
+Constants with a leading 0 are interpreted as octal numbers.
+A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise,
+numbers take the form [@var{base}@code{#}]@var{n}, where @var{base}
+is a decimal number between 2 and 64 representing the arithmetic
+base, and @var{n} is a number in that base. If @var{base}@code{#} is
+omitted, then base 10 is used.
+The digits greater than 9 are represented by the lowercase letters,
+the uppercase letters, @samp{@@}, and @samp{_}, in that order.
+If @var{base} is less than or equal to 36, lowercase and uppercase
+letters may be used interchangably to represent numbers between 10
+and 35.
+
+Operators are evaluated in order of precedence. Sub-expressions in
+parentheses are evaluated first and may override the precedence
+rules above.
+
+@node Aliases
+@section Aliases
+@cindex alias expansion
+
+@var{Aliases} allow a string to be substituted for a word when it is used
+as the first word of a simple command.
+The shell maintains a list of aliases that may be set and unset with
+the @code{alias} and @code{unalias} builtin commands.
+
+The first word of each simple command, if unquoted, is checked to see
+if it has an alias.
+If so, that word is replaced by the text of the alias.
+The alias name and the replacement text may contain any valid
+shell input, including shell metacharacters, with the exception
+that the alias name may not contain @samp{=}.
+The first word of the replacement text is tested for
+aliases, but a word that is identical to an alias being expanded
+is not expanded a second time. This means that one may alias
+@code{ls} to @code{"ls -F"},
+for instance, and Bash does not try to recursively expand the
+replacement text. If the last character of the alias value is a
+space or tab character, then the next command word following the
+alias is also checked for alias expansion.
+
+Aliases are created and listed with the @code{alias}
+command, and removed with the @code{unalias} command.
+
+There is no mechanism for using arguments in the replacement text,
+as in @code{csh}.
+If arguments are needed, a shell function should be used
+(@pxref{Shell Functions}).
+
+Aliases are not expanded when the shell is not interactive,
+unless the @code{expand_aliases} shell option is set using
+@code{shopt} (@pxref{Bash Builtins}).
+
+The rules concerning the definition and use of aliases are
+somewhat confusing. Bash
+always reads at least one complete line
+of input before executing any
+of the commands on that line. Aliases are expanded when a
+command is read, not when it is executed. Therefore, an
+alias definition appearing on the same line as another
+command does not take effect until the next line of input is read.
+The commands following the alias definition
+on that line are not affected by the new alias.
+This behavior is also an issue when functions are executed.
+Aliases are expanded when a function definition is read,
+not when the function is executed, because a function definition
+is itself a compound command. As a consequence, aliases
+defined in a function are not available until after that
+function is executed. To be safe, always put
+alias definitions on a separate line, and do not use @code{alias}
+in compound commands.
+
+For almost every purpose, shell functions are preferred over aliases.
+
+@node Arrays
+@section Arrays
+@cindex arrays
+
+Bash provides one-dimensional array variables. Any variable may be used as
+an array; the @code{declare} builtin will explicitly declare an array.
+There is no maximum
+limit on the size of an array, nor any requirement that members
+be indexed or assigned contiguously. Arrays are zero-based.
+
+An array is created automatically if any variable is assigned to using
+the syntax
+@example
+name[@var{subscript}]=@var{value}
+@end example
+
+@noindent
+The @var{subscript}
+is treated as an arithmetic expression that must evaluate to a number
+greater than or equal to zero. To explicitly declare an array, use
+@example
+declare -a @var{name}
+@end example
+@noindent
+The syntax
+@example
+declare -a @var{name}[@var{subscript}]
+@end example
+@noindent
+is also accepted; the @var{subscript} is ignored. Attributes may be
+specified for an array variable using the @code{declare} and
+@code{readonly} builtins. Each attribute applies to all members of
+an array.
+
+Arrays are assigned to using compound assignments of the form
+@example
+name=(value@var{1} @dots{} value@var{n})
+@end example
+@noindent
+where each
+@var{value} is of the form @code{[[@var{subscript}]=]}@var{string}. If
+the optional subscript is supplied, that index is assigned to;
+otherwise the index of the element assigned is the last index assigned
+to by the statement plus one. Indexing starts at zero.
+This syntax is also accepted by the @code{declare}
+builtin. Individual array elements may be assigned to using the
+@code{name[}@var{subscript}@code{]=}@var{value} syntax introduced above.
+
+Any element of an array may be referenced using
+@code{$@{name[}@var{subscript}@code{]@}}.
+The braces are required to avoid
+conflicts with the shell's filename expansion operators. If the
+@var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
+of the array @var{name}. These subscripts differ only when the word
+appears within double quotes. If the word is double-quoted,
+@code{$@{name[*]@}} expands to a single word with
+the value of each array member separated by the first character of the
+@env{IFS} variable, and @code{$@{name[@@]@}} expands each element of
+@var{name} to a separate word. When there are no array members,
+@code{$@{name[@@]@}} expands to nothing. This is analogous to the
+expansion of the special parameters @samp{@@} and @samp{*}.
+@code{$@{#name[}@var{subscript}@code{]@}} expands to the length of
+@code{$@{name[}@var{subscript}@code{]@}}.
+If @var{subscript} is @samp{@@} or
+@samp{*}, the expansion is the number of elements in the array.
+Referencing an array variable without a subscript is equivalent to
+referencing element zero.
+
+The @code{unset} builtin is used to destroy arrays.
+@code{unset} @var{name}[@var{subscript}]
+destroys the array element at index @var{subscript}.
+@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.
+
+The @code{declare}, @code{local}, and @code{readonly}
+builtins each accept a @option{-a}
+option to specify an array. The @code{read}
+builtin accepts a @option{-a}
+option to assign a list of words read from the standard input
+to an array, and can read values from the standard input into
+individual array elements. The @code{set} and @code{declare}
+builtins display array values in a way that allows them to be
+reused as input.
+
+@node The Directory Stack
+@section The Directory Stack
+@cindex directory stack
+
+@menu
+* Directory Stack Builtins:: Bash builtin commands to manipulate
+ the directory stack.
+@end menu
+
+The directory stack is a list of recently-visited directories. The
+@code{pushd} builtin adds directories to the stack as it changes
+the current directory, and the @code{popd} builtin removes specified
+directories from the stack and changes the current directory to
+the directory removed. The @code{dirs} builtin displays the contents
+of the directory stack.
+
+The contents of the directory stack are also visible
+as the value of the @env{DIRSTACK} shell variable.
+
+@node Directory Stack Builtins
+@subsection Directory Stack Builtins
+
+@table @code
+
+@item dirs
+@btindex dirs
+@example
+dirs [+@var{N} | -@var{N}] [-clpv]
+@end example
+Display the list of currently remembered directories. Directories
+are added to the list with the @code{pushd} command; the
+@code{popd} command removes directories from the list.
+@table @code
+@item +@var{N}
+Displays the @var{N}th directory (counting from the left of the
+list printed by @code{dirs} when invoked without options), starting
+with zero.
+@item -@var{N}
+Displays the @var{N}th directory (counting from the right of the
+list printed by @code{dirs} when invoked without options), starting
+with zero.
+@item -c
+Clears the directory stack by deleting all of the elements.
+@item -l
+Produces a longer listing; the default listing format uses a
+tilde to denote the home directory.
+@item -p
+Causes @code{dirs} to print the directory stack with one entry per
+line.
+@item -v
+Causes @code{dirs} to print the directory stack with one entry per
+line, prefixing each entry with its index in the stack.
+@end table
+
+@item popd
+@btindex popd
+@example
+popd [+@var{N} | -@var{N}] [-n]
+@end example
+
+Remove the top entry from the directory stack, and @code{cd}
+to the new top directory.
+When no arguments are given, @code{popd}
+removes the top directory from the stack and
+performs a @code{cd} to the new top directory. The
+elements are numbered from 0 starting at the first directory listed with
+@code{dirs}; i.e., @code{popd} is equivalent to @code{popd +0}.
+@table @code
+@item +@var{N}
+Removes the @var{N}th directory (counting from the left of the
+list printed by @code{dirs}), starting with zero.
+@item -@var{N}
+Removes the @var{N}th directory (counting from the right of the
+list printed by @code{dirs}), starting with zero.
+@item -n
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
+@end table
+
+@btindex pushd
+@item pushd
+@example
+pushd [@var{dir} | @var{+N} | @var{-N}] [-n]
+@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.
+
+@table @code
+@item +@var{N}
+Brings the @var{N}th directory (counting from the left of the
+list printed by @code{dirs}, starting with zero) to the top of
+the list by rotating the stack.
+@item -@var{N}
+Brings the @var{N}th directory (counting from the right of the
+list printed by @code{dirs}, starting with zero) to the top of
+the list by rotating the stack.
+@item -n
+Suppresses the normal change of directory when adding directories
+to the stack, so that only the stack is manipulated.
+@item @var{dir}
+Makes the current working directory be the top of the stack, and then
+executes the equivalent of `@code{cd} @var{dir}'.
+@code{cd}s to @var{dir}.
+@end table
+
+@end table
+
+@node Printing a Prompt
+@section Controlling the Prompt
+@cindex prompting
+
+The value of the variable @env{PROMPT_COMMAND} is examined just before
+Bash prints each primary prompt. If @env{PROMPT_COMMAND} is set and
+has a non-null value, then the
+value is executed just as if it had been typed on the command line.
+
+In addition, the following table describes the special characters which
+can appear in the prompt variables:
+
+@table @code
+@item \a
+A bell character.
+@item \d
+The date, in "Weekday Month Date" format (e.g., "Tue May 26").
+@item \D@{@var{format}@}
+The @var{format} is passed to @code{strftime}(3) and the result is inserted
+into the prompt string; an empty @var{format} results in a locale-specific
+time representation. The braces are required.
+@item \e
+An escape character.
+@item \h
+The hostname, up to the first `.'.
+@item \H
+The hostname.
+@item \j
+The number of jobs currently managed by the shell.
+@item \l
+The basename of the shell's terminal device name.
+@item \n
+A newline.
+@item \r
+A carriage return.
+@item \s
+The name of the shell, the basename of @code{$0} (the portion
+following the final slash).
+@item \t
+The time, in 24-hour HH:MM:SS format.
+@item \T
+The time, in 12-hour HH:MM:SS format.
+@item \@@
+The time, in 12-hour am/pm format.
+@item \A
+The time, in 24-hour HH:MM format.
+@item \u
+The username of the current user.
+@item \v
+The version of Bash (e.g., 2.00)
+@item \V
+The release of Bash, version + patchlevel (e.g., 2.00.0)
+@item \w
+The current working directory.
+@item \W
+The basename of @env{$PWD}.
+@item \!
+The history number of this command.
+@item \#
+The command number of this command.
+@item \$
+If the effective uid is 0, @code{#}, otherwise @code{$}.
+@item \@var{nnn}
+The character whose ASCII code is the octal value @var{nnn}.
+@item \\
+A backslash.
+@item \[
+Begin a sequence of non-printing characters. This could be used to
+embed a terminal control sequence into the prompt.
+@item \]
+End a sequence of non-printing characters.
+@end table
+
+The command number and the history number are usually different:
+the history number of a command is its position in the history
+list, which may include commands restored from the history file
+(@pxref{Bash History Facilities}), while the command number is
+the position in the sequence of commands executed during the current
+shell session.
+
+After the string is decoded, it is expanded via
+parameter expansion, command substitution, arithmetic
+expansion, and quote removal, subject to the value of the
+@code{promptvars} shell option (@pxref{Bash Builtins}).
+
+@node The Restricted Shell
+@section The Restricted Shell
+@cindex restricted shell
+
+If Bash is started with the name @code{rbash}, or the
+@option{--restricted}
+or
+@option{-r}
+option is supplied at invocation, the shell becomes restricted.
+A restricted shell is used to
+set up an environment more controlled than the standard shell.
+A restricted shell behaves identically to @code{bash}
+with the exception that the following are disallowed or not performed:
+
+@itemize @bullet
+@item
+Changing directories with the @code{cd} builtin.
+@item
+Setting or unsetting the values of the @env{SHELL}, @env{PATH},
+@env{ENV}, or @env{BASH_ENV} variables.
+@item
+Specifying command names containing slashes.
+@item
+Specifying a filename containing a slash as an argument to the @code{.}
+builtin command.
+@item
+Specifying a filename containing a slash as an argument to the @option{-p}
+option to the @code{hash} builtin command.
+@item
+Importing function definitions from the shell environment at startup.
+@item
+Parsing the value of @env{SHELLOPTS} from the shell environment at startup.
+@item
+Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&},
+@samp{&>}, and @samp{>>} redirection operators.
+@item
+Using the @code{exec} builtin to replace the shell with another command.
+@item
+Adding or deleting builtin commands with the
+@option{-f} and @option{-d} options to the @code{enable} builtin.
+@item
+Using the @code{enable} builtin command to enable disabled shell builtins.
+@item
+Specifying the @option{-p} option to the @code{command} builtin.
+@item
+Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
+@end itemize
+
+These restrictions are enforced after any startup files are read.
+
+When a command that is found to be a shell script is executed
+(@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in
+the shell spawned to execute the script.
+
+@node Bash POSIX Mode
+@section Bash POSIX Mode
+@cindex POSIX Mode
+
+Starting Bash with the @option{--posix} command-line option or executing
+@samp{set -o posix} while Bash is running will cause Bash to conform more
+closely to the @sc{posix} 1003.2 standard by changing the behavior to
+match that specified by @sc{posix} in areas where the Bash default differs.
+
+When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the
+startup files.
+
+The following list is what's changed when `@sc{posix} mode' is in effect:
+
+@enumerate
+@item
+When a command in the hash table no longer exists, Bash will re-search
+@env{$PATH} to find the new location. This is also available with
+@samp{shopt -s checkhash}.
+
+@item
+The message printed by the job control code and builtins when a job
+exits with a non-zero status is `Done(status)'.
+
+@item
+The message printed by the job control code and builtins when a job
+is stopped is `Stopped(@var{signame})', where @var{signame} is, for
+example, @code{SIGTSTP}.
+
+@item
+Reserved words may not be aliased.
+
+@item
+The @sc{posix} 1003.2 @env{PS1} and @env{PS2} expansions of @samp{!} to
+the history number and @samp{!!} to @samp{!} are enabled,
+and parameter expansion is performed on the values of @env{PS1} and
+@env{PS2} regardless of the setting of the @code{promptvars} option.
+
+@item
+Interactive comments are enabled by default. (Bash has them on by
+default anyway.)
+
+@item
+The @sc{posix} 1003.2 startup files are executed (@env{$ENV}) rather than
+the normal Bash files.
+
+@item
+Tilde expansion is only performed on assignments preceding a command
+name, rather than on all assignment statements on the line.
+
+@item
+The default history file is @file{~/.sh_history} (this is the
+default value of @env{$HISTFILE}).
+
+@item
+The output of @samp{kill -l} prints all the signal names on a single line,
+separated by spaces.
+
+@item
+Non-interactive shells exit if @var{filename} in @code{.} @var{filename}
+is not found.
+
+@item
+Non-interactive shells exit if a syntax error in an arithmetic expansion
+results in an invalid expression.
+
+@item
+Redirection operators do not perform filename expansion on the word
+in the redirection unless the shell is interactive.
+
+@item
+Redirection operators do not perform word splitting on the word in the
+redirection.
+
+@item
+Function names must be valid shell @code{name}s. That is, they may not
+contain characters other than letters, digits, and underscores, and
+may not start with a digit. Declaring a function with an invalid name
+causes a fatal syntax error in non-interactive shells.
+
+@item
+@sc{posix} 1003.2 `special' builtins are found before shell functions
+during command lookup.
+
+@item
+If a @sc{posix} 1003.2 special builtin returns an error status, a
+non-interactive shell exits. The fatal errors are those listed in
+the POSIX.2 standard, and include things like passing incorrect options,
+redirection errors, variable assignment errors for assignments preceding
+the command name, and so on.
+
+@item
+If the @code{cd} builtin finds a directory to change to
+using @env{$CDPATH}, the
+value it assigns to the @env{PWD} variable does not contain any
+symbolic links, as if @samp{cd -P} had been executed.
+
+@item
+If @env{CDPATH} is set, the @code{cd} builtin will not implicitly
+append the current directory to it. This means that @code{cd} will
+fail if no valid directory name can be constructed from
+any of the entries in @env{$CDPATH}, even if the a directory with
+the same name as the name given as an argument to @code{cd} exists
+in the current directory.
+
+@item
+A non-interactive shell exits with an error status if a variable
+assignment error occurs when no command name follows the assignment
+statements.
+A variable assignment error occurs, for example, when trying to assign
+a value to a readonly variable.
+
+@item
+A non-interactive shell exits with an error status if the iteration
+variable in a @code{for} statement or the selection variable in a
+@code{select} statement is a readonly variable.
+
+@item
+Process substitution is not available.
+
+@item
+Assignment statements preceding @sc{posix} 1003.2 special builtins
+persist in the shell environment after the builtin completes.
+
+@item
+Assignment statements preceding shell function calls persist in the
+shell environment after the function returns, as if a @sc{posix}
+special builtin command had been executed.
+
+@item
+The @code{export} and @code{readonly} builtin commands display their
+output in the format required by @sc{posix} 1003.2.
+
+@item
+The @code{trap} builtin displays signal names without the leading
+@code{SIG}.
+
+@item
+The @code{.} and @code{source} builtins do not search the current directory
+for the filename argument if it is not found by searching @env{PATH}.
+
+@item
+Subshells spawned to execute command substitutions inherit the value of
+the @option{-e} option from the parent shell. When not in @sc{posix} mode,
+Bash clears the @option{-e} option in such subshells.
+
+@item
+Alias expansion is always enabled, even in non-interactive shells.
+
+@item
+When the @code{set} builtin is invoked without options, it does not display
+shell function names and definitions.
+
+@item
+When the @code{set} builtin is invoked without options, it displays
+variable values without quotes, unless they contain shell metacharacters,
+even if the result contains nonprinting characters.
+
+@item
+When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
+constructed from @code{$PWD} and the directory name supplied as an argument
+does not refer to an existing directory, @code{cd} will fail instead of
+falling back to @var{physical} mode.
+@end enumerate
+
+There is other @sc{posix} 1003.2 behavior that Bash does not implement.
+Specifically:
+
+@enumerate
+@item
+Assignment statements affect the execution environment of all
+builtins, not just special ones.
+
+@item
+When a subshell is created to execute a shell script with execute permission,
+but without a leading @samp{#!}, Bash sets @code{$0} to the full pathname of
+the script as found by searching @code{$PATH}, rather than the command as
+typed by the user.
+
+@item
+When using @samp{.} to source a shell script found in @code{$PATH}, bash
+checks execute permission bits rather than read permission bits, just as
+if it were searching for a command.
+
+@end enumerate
+
+@node Job Control
+@chapter Job Control
+
+This chapter discusses what job control is, how it works, and how
+Bash allows you to access its facilities.
+
+@menu
+* Job Control Basics:: How job control works.
+* Job Control Builtins:: Bash builtin commands used to interact
+ with job control.
+* Job Control Variables:: Variables Bash uses to customize job
+ control.
+@end menu
+
+@node Job Control Basics
+@section Job Control Basics
+@cindex job control
+@cindex foreground
+@cindex background
+@cindex suspending jobs
+
+Job control
+refers to the ability to selectively stop (suspend)
+the execution of processes and continue (resume)
+their execution at a later point. A user typically employs
+this facility via an interactive interface supplied jointly
+by the system's terminal driver and Bash.
+
+The shell associates a @var{job} with each pipeline. It keeps a
+table of currently executing jobs, which may be listed with the
+@code{jobs} command. When Bash starts a job
+asynchronously, it prints a line that looks
+like:
+@example
+[1] 25647
+@end example
+@noindent
+indicating that this job is job number 1 and that the process @sc{id}
+of the last process in the pipeline associated with this job is
+25647. All of the processes in a single pipeline are members of
+the same job. Bash uses the @var{job} abstraction as the
+basis for job control.
+
+To facilitate the implementation of the user interface to job
+control, the operating system maintains the notion of a current terminal
+process group @sc{id}. Members of this process group (processes whose
+process group @sc{id} is equal to the current terminal process group
+@sc{id}) receive keyboard-generated signals such as @code{SIGINT}.
+These processes are said to be in the foreground. Background
+processes are those whose process group @sc{id} differs from the
+terminal's; such processes are immune to keyboard-generated
+signals. Only foreground processes are allowed to read from or
+write to the terminal. Background processes which attempt to
+read from (write to) the terminal are sent a @code{SIGTTIN}
+(@code{SIGTTOU}) signal by the terminal driver, which, unless
+caught, suspends the process.
+
+If the operating system on which Bash is running supports
+job control, Bash contains facilities to use it. Typing the
+@var{suspend} character (typically @samp{^Z}, Control-Z) while a
+process is running causes that process to be stopped and returns
+control to Bash. Typing the @var{delayed suspend} character
+(typically @samp{^Y}, Control-Y) causes the process to be stopped
+when it attempts to read input from the terminal, and control to
+be returned to Bash. The user then manipulates the state of
+this job, using the @code{bg} command to continue it in the
+background, the @code{fg} command to continue it in the
+foreground, or the @code{kill} command to kill it. A @samp{^Z}
+takes effect immediately, and has the additional side effect of
+causing pending output and typeahead to be discarded.
+
+There are a number of ways to refer to a job in the shell. The
+character @samp{%} introduces a job name.
+
+Job number @code{n} may be referred to as @samp{%n}.
+The symbols @samp{%%} and
+@samp{%+} refer to the shell's notion of the current job, which
+is the last job stopped while it was in the foreground or started
+in the background. The
+previous job may be referenced using @samp{%-}. In output
+pertaining to jobs (e.g., the output of the @code{jobs} command),
+the current job is always flagged with a @samp{+}, and the
+previous job with a @samp{-}.
+
+A job may also be referred to
+using a prefix of the name used to start it, or using a substring
+that appears in its command line. For example, @samp{%ce} refers
+to a stopped @code{ce} job. Using @samp{%?ce}, on the
+other hand, refers to any job containing the string @samp{ce} in
+its command line. If the prefix or substring matches more than one job,
+Bash reports an error.
+
+Simply naming a job can be used to bring it into the foreground:
+@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the
+background into the foreground. Similarly, @samp{%1 &} resumes
+job 1 in the background, equivalent to @samp{bg %1}
+
+The shell learns immediately whenever a job changes state.
+Normally, Bash waits until it is about to print a prompt
+before reporting changes in a job's status so as to not interrupt
+any other output.
+If the @option{-b} option to the @code{set} builtin is enabled,
+Bash reports such changes immediately (@pxref{The Set Builtin}).
+Any trap on @code{SIGCHLD} is executed for each child process
+that exits.
+
+If an attempt to exit Bash is while jobs are stopped, the
+shell prints a message warning that there are stopped jobs.
+The @code{jobs} command may then be used to inspect their status.
+If a second attempt to exit is made without an intervening command,
+Bash does not print another warning, and the stopped jobs are terminated.
+
+@node Job Control Builtins
+@section Job Control Builtins
+
+@table @code
+
+@item bg
+@btindex bg
+@example
+bg [@var{jobspec}]
+@end example
+Resume the suspended job @var{jobspec} in the background, as if it
+had been started with @samp{&}.
+If @var{jobspec} is not supplied, the current job is used.
+The return status is zero unless it is run when job control is not
+enabled, or, when run with job control enabled, if @var{jobspec} was
+not found or @var{jobspec} specifies a job that was started without
+job control.
+
+@item fg
+@btindex fg
+@example
+fg [@var{jobspec}]
+@end example
+Resume the job @var{jobspec} in the foreground and make it the current job.
+If @var{jobspec} is not supplied, the current job is used.
+The return status is that of the command placed into the foreground,
+or non-zero if run when job control is disabled or, when run with
+job control enabled, @var{jobspec} does not specify a valid job or
+@var{jobspec} specifies a job that was started without job control.
+
+@item jobs
+@btindex jobs
+@example
+jobs [-lnprs] [@var{jobspec}]
+jobs -x @var{command} [@var{arguments}]
+@end example
+
+The first form lists the active jobs. The options have the
+following meanings:
+
+@table @code
+@item -l
+List process @sc{id}s in addition to the normal information.
+
+@item -n
+Display information only about jobs that have changed status since
+the user was last notified of their status.
+
+@item -p
+List only the process @sc{id} of the job's process group leader.
+
+@item -r
+Restrict output to running jobs.
+
+@item -s
+Restrict output to stopped jobs.
+@end table
+
+If @var{jobspec} is given,
+output is restricted to information about that job.
+If @var{jobspec} is not supplied, the status of all jobs is
+listed.
+
+If the @option{-x} option is supplied, @code{jobs} replaces any
+@var{jobspec} found in @var{command} or @var{arguments} with the
+corresponding process group @sc{id}, and executes @var{command},
+passing it @var{argument}s, returning its exit status.
+
+@item kill
+@btindex kill
+@example
+kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid}
+kill -l [@var{exit_status}]
+@end example
+Send a signal specified by @var{sigspec} or @var{signum} to the process
+named by job specification @var{jobspec} or process @sc{id} @var{pid}.
+@var{sigspec} is either a signal name such as @code{SIGINT} (with or without
+the @code{SIG} prefix) or a signal number; @var{signum} is a signal number.
+If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
+The @option{-l} option lists the signal names.
+If any arguments are supplied when @option{-l} is given, the names of the
+signals corresponding to the arguments are listed, and the return status
+is zero.
+@var{exit_status} is a number specifying a signal number or the exit
+status of a process terminated by a signal.
+The return status is zero if at least one signal was successfully sent,
+or non-zero if an error occurs or an invalid option is encountered.
+
+@item wait
+@btindex wait
+@example
+wait [@var{jobspec} or @var{pid}]
+@end example
+Wait until the child process specified by process @sc{id} @var{pid} or job
+specification @var{jobspec} exits and return the exit status of the last
+command waited for.
+If a job spec is given, all processes in the job are waited for.
+If no arguments are given, all currently active child processes are
+waited for, and the return status is zero.
+If neither @var{jobspec} nor @var{pid} specifies an active child process
+of the shell, the return status is 127.
+
+@item disown
+@btindex disown
+@example
+disown [-ar] [-h] [@var{jobspec} @dots{}]
+@end example
+Without options, each @var{jobspec} is removed from the table of
+active jobs.
+If the @option{-h} option is given, the job is not removed from the table,
+but is marked so that @code{SIGHUP} is not sent to the job if the shell
+receives a @code{SIGHUP}.
+If @var{jobspec} is not present, and neither the @option{-a} nor @option{-r}
+option is supplied, the current job is used.
+If no @var{jobspec} is supplied, the @option{-a} option means to remove or
+mark all jobs; the @option{-r} option without a @var{jobspec}
+argument restricts operation to running jobs.
+
+@item suspend
+@btindex suspend
+@example
+suspend [-f]
+@end example
+Suspend the execution of this shell until it receives a
+@code{SIGCONT} signal. The @option{-f} option means to suspend
+even if the shell is a login shell.
+
+@end table
+
+When job control is not active, the @code{kill} and @code{wait}
+builtins do not accept @var{jobspec} arguments. They must be
+supplied process @sc{id}s.
+
+@node Job Control Variables
+@section Job Control Variables
+
+@vtable @code
+
+@item auto_resume
+This variable controls how the shell interacts with the user and
+job control. If this variable exists then single word simple
+commands without redirections are treated as candidates for resumption
+of an existing job. There is no ambiguity allowed; if there is
+more than one job beginning with the string typed, then
+the most recently accessed job will be selected.
+The name of a stopped job, in this context, is the command line
+used to start it. If this variable is set to the value @samp{exact},
+the string supplied must match the name of a stopped job exactly;
+if set to @samp{substring},
+the string supplied needs to match a substring of the name of a
+stopped job. The @samp{substring} value provides functionality
+analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}).
+If set to any other value, the supplied string must
+be a prefix of a stopped job's name; this provides functionality
+analogous to the @samp{%} job @sc{id}.
+
+@end vtable
+
+@set readline-appendix
+@set history-appendix
+@cindex Readline, how to use
+@include rluser.texi
+@cindex History, how to use
+@include hsuser.texi
+@clear readline-appendix
+@clear history-appendix
+
+@node Installing Bash
+@chapter Installing Bash
+
+This chapter provides basic instructions for installing Bash on
+the various supported platforms. The distribution supports the
+@sc{gnu} operating systems, nearly every version of Unix, and several
+non-Unix systems such as BeOS and Interix.
+Other independent ports exist for
+@sc{ms-dos}, @sc{os/2}, Windows @sc{95/98}, and Windows @sc{nt}.
+
+@menu
+* Basic Installation:: Installation instructions.
+
+* Compilers and Options:: How to set special options for various
+ systems.
+
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+
+* Installation Names:: How to set the various paths used by the installation.
+
+* Specifying the System Type:: How to configure Bash for a particular system.
+
+* Sharing Defaults:: How to share default configuration values among GNU
+ programs.
+
+* Operation Controls:: Options recognized by the configuration program.
+
+* Optional Features:: How to enable and disable optional features when
+ building Bash.
+@end menu
+
+@node Basic Installation
+@section Basic Installation
+@cindex installation
+@cindex configuration
+@cindex Bash installation
+@cindex Bash configuration
+
+These are installation instructions for Bash.
+
+The simplest way to compile Bash is:
+
+@enumerate
+@item
+@code{cd} to the directory containing the source code and type
+@samp{./configure} to configure Bash for your system. If you're
+using @code{csh} on an old version of System V, you might need to
+type @samp{sh ./configure} instead to prevent @code{csh} from trying
+to execute @code{configure} itself.
+
+Running @code{configure} takes some time.
+While running, it prints messages telling which features it is
+checking for.
+
+@item
+Type @samp{make} to compile Bash and build the @code{bashbug} bug
+reporting script.
+
+@item
+Optionally, type @samp{make tests} to run the Bash test suite.
+
+@item
+Type @samp{make install} to install @code{bash} and @code{bashbug}.
+This will also install the manual pages and Info file.
+
+@end enumerate
+
+The @code{configure} shell script attempts to guess correct
+values for various system-dependent variables used during
+compilation. It uses those values to create a @file{Makefile} in
+each directory of the package (the top directory, the
+@file{builtins}, @file{doc}, and @file{support} directories,
+each directory under @file{lib}, and several others). It also creates a
+@file{config.h} file containing system-dependent definitions.
+Finally, it creates a shell script named @code{config.status} that you
+can run in the future to recreate the current configuration, a
+file @file{config.cache} that saves the results of its tests to
+speed up reconfiguring, and a file @file{config.log} containing
+compiler output (useful mainly for debugging @code{configure}).
+If at some point
+@file{config.cache} contains results you don't want to keep, you
+may remove or edit it.
+
+To find out more about the options and arguments that the
+@code{configure} script understands, type
+
+@example
+bash-2.04$ ./configure --help
+@end example
+
+@noindent
+at the Bash prompt in your Bash source directory.
+
+If you need to do unusual things to compile Bash, please
+try to figure out how @code{configure} could check whether or not
+to do them, and mail diffs or instructions to
+@email{bash-maintainers@@gnu.org} so they can be
+considered for the next release.
+
+The file @file{configure.in} is used to create @code{configure}
+by a program called Autoconf. You only need
+@file{configure.in} if you want to change it or regenerate
+@code{configure} using a newer version of Autoconf. If
+you do this, make sure you are using Autoconf version 2.50 or
+newer.
+
+You can remove the program binaries and object files from the
+source code directory by typing @samp{make clean}. To also remove the
+files that @code{configure} created (so you can compile Bash for
+a different kind of computer), type @samp{make distclean}.
+
+@node Compilers and Options
+@section Compilers and Options
+
+Some systems require unusual options for compilation or linking
+that the @code{configure} script does not know about. You can
+give @code{configure} initial values for variables by setting
+them in the environment. Using a Bourne-compatible shell, you
+can do that on the command line like this:
+
+@example
+CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+@end example
+
+On systems that have the @code{env} program, you can do it like this:
+
+@example
+env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+@end example
+
+The configuration process uses GCC to build Bash if it
+is available.
+
+@node Compiling For Multiple Architectures
+@section Compiling For Multiple Architectures
+
+You can compile Bash for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of @code{make} that
+supports the @code{VPATH} variable, such as GNU @code{make}.
+@code{cd} to the
+directory where you want the object files and executables to go and run
+the @code{configure} script from the source directory. You may need to
+supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
+source files are. @code{configure} automatically checks for the
+source code in the directory that @code{configure} is in and in `..'.
+
+If you have to use a @code{make} that does not supports the @code{VPATH}
+variable, you can compile Bash for one architecture at a
+time in the source code directory. After you have installed
+Bash for one architecture, use @samp{make distclean} before
+reconfiguring for another architecture.
+
+Alternatively, if your system supports symbolic links, you can use the
+@file{support/mkclone} script to create a build tree which has
+symbolic links back to each file in the source directory. Here's an
+example that creates a build directory in the current directory from a
+source directory @file{/usr/gnu/src/bash-2.0}:
+
+@example
+bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
+@end example
+
+@noindent
+The @code{mkclone} script requires Bash, so you must have already built
+Bash for at least one architecture before you can create build
+directories for other architectures.
+
+@node Installation Names
+@section Installation Names
+
+By default, @samp{make install} will install into
+@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
+specify an installation prefix other than @file{/usr/local} by
+giving @code{configure} the option @option{--prefix=@var{PATH}},
+or by specifying a value for the @code{DESTDIR} @samp{make}
+variable when running @samp{make install}.
+
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.
+If you give @code{configure} the option
+@option{--exec-prefix=@var{PATH}}, @samp{make install} will use
+@var{PATH} as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+@node Specifying the System Type
+@section Specifying the System Type
+
+There may be some features @code{configure} can not figure out
+automatically, but need to determine by the type of host Bash
+will run on. Usually @code{configure} can figure that
+out, but if it prints a message saying it can not guess the host
+type, give it the @option{--host=TYPE} option. @samp{TYPE} can
+either be a short name for the system type, such as @samp{sun4},
+or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
+(e.g., @samp{i386-unknown-freebsd4.2}).
+
+See the file @file{support/config.sub} for the possible
+values of each field.
+
+@node Sharing Defaults
+@section Sharing Defaults
+
+If you want to set default values for @code{configure} scripts to
+share, you can create a site shell script called
+@code{config.site} that gives default values for variables like
+@code{CC}, @code{cache_file}, and @code{prefix}. @code{configure}
+looks for @file{PREFIX/share/config.site} if it exists, then
+@file{PREFIX/etc/config.site} if it exists. Or, you can set the
+@code{CONFIG_SITE} environment variable to the location of the site
+script. A warning: the Bash @code{configure} looks for a site script,
+but not all @code{configure} scripts do.
+
+@node Operation Controls
+@section Operation Controls
+
+@code{configure} recognizes the following options to control how it
+operates.
+
+@table @code
+
+@item --cache-file=@var{file}
+Use and save the results of the tests in
+@var{file} instead of @file{./config.cache}. Set @var{file} to
+@file{/dev/null} to disable caching, for debugging
+@code{configure}.
+
+@item --help
+Print a summary of the options to @code{configure}, and exit.
+
+@item --quiet
+@itemx --silent
+@itemx -q
+Do not print messages saying which checks are being made.
+
+@item --srcdir=@var{dir}
+Look for the Bash source code in directory @var{dir}. Usually
+@code{configure} can determine that directory automatically.
+
+@item --version
+Print the version of Autoconf used to generate the @code{configure}
+script, and exit.
+@end table
+
+@code{configure} also accepts some other, not widely used, boilerplate
+options. @samp{configure --help} prints the complete list.
+
+@node Optional Features
+@section Optional Features
+
+The Bash @code{configure} has a number of @option{--enable-@var{feature}}
+options, where @var{feature} indicates an optional part of Bash.
+There are also several @option{--with-@var{package}} options,
+where @var{package} is something like @samp{bash-malloc} or @samp{purify}.
+To turn off the default use of a package, use
+@option{--without-@var{package}}. To configure Bash without a feature
+that is enabled by default, use @option{--disable-@var{feature}}.
+
+Here is a complete list of the @option{--enable-} and
+@option{--with-} options that the Bash @code{configure} recognizes.
+
+@table @code
+@item --with-afs
+Define if you are using the Andrew File System from Transarc.
+
+@item --with-bash-malloc
+Use the Bash version of
+@code{malloc} in @file{lib/malloc/malloc.c}. This is not the same
+@code{malloc} that appears in @sc{gnu} libc, but an older version
+derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc} is
+very fast, but wastes some space on each allocation.
+This option is enabled by default.
+The @file{NOTES} file contains a list of systems for
+which this should be turned off, and @code{configure} disables this
+option automatically for a number of systems.
+
+@item --with-curses
+Use the curses library instead of the termcap library. This should
+be supplied if your system has an inadequate or incomplete termcap
+database.
+
+@item --with-gnu-malloc
+A synonym for @code{--with-bash-malloc}.
+
+@item --with-installed-readline[=@var{PREFIX}]
+Define this to make Bash link with a locally-installed version of Readline
+rather than the version in @file{lib/readline}. This works only with
+Readline 4.3 and later versions. If @var{PREFIX} is @code{yes} or not
+supplied, @code{configure} uses the values of the make variables
+@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
+by default, to find the installed version of Readline if it is not in
+the standard system include and library directories.
+If @var{PREFIX} is @code{no}, Bash links with the version in
+@file{lib/readline}.
+If @var{PREFIX} is set to any other value, @code{configure} treats it as
+a directory pathname and looks for
+the installed version of Readline in subdirectories of that directory
+(include files in @var{PREFIX}/@code{include} and the library in
+@var{PREFIX}/@code{lib}).
+
+@item --with-purify
+Define this to use the Purify memory allocation checker from Rational
+Software.
+
+@item --enable-minimal-config
+This produces a shell with minimal features, close to the historical
+Bourne shell.
+@end table
+
+There are several @option{--enable-} options that alter how Bash is
+compiled and linked, rather than changing run-time features.
+
+@table @code
+@item --enable-largefile
+Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html,
+large files} if the operating system requires special compiler options
+to build programs which can access large files. This is enabled by
+default, if the operating system provides large file support.
+
+@item --enable-profiling
+This builds a Bash binary that produces profiling information to be
+processed by @code{gprof} each time it is executed.
+
+@item --enable-static-link
+This causes Bash to be linked statically, if @code{gcc} is being used.
+This could be used to build a version to use as root's shell.
+@end table
+
+The @samp{minimal-config} option can be used to disable all of
+the following options, but it is processed first, so individual
+options may be enabled using @samp{enable-@var{feature}}.
+
+All of the following options except for @samp{disabled-builtins} and
+@samp{xpg-echo-default} are
+enabled by default, unless the operating system does not provide the
+necessary support.
+
+@table @code
+@item --enable-alias
+Allow alias expansion and include the @code{alias} and @code{unalias}
+builtins (@pxref{Aliases}).
+
+@item --enable-arith-for-command
+Include support for the alternate form of the @code{for} command
+that behaves like the C language @code{for} statement
+(@pxref{Looping Constructs}).
+
+@item --enable-array-variables
+Include support for one-dimensional array shell variables
+(@pxref{Arrays}).
+
+@item --enable-bang-history
+Include support for @code{csh}-like history substitution
+(@pxref{History Interaction}).
+
+@item --enable-brace-expansion
+Include @code{csh}-like brace expansion
+( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
+See @ref{Brace Expansion}, for a complete description.
+
+@item --enable-command-timing
+Include support for recognizing @code{time} as a reserved word and for
+displaying timing statistics for the pipeline following @code{time}
+(@pxref{Pipelines}).
+This allows pipelines as well as shell builtins and functions to be timed.
+
+@item --enable-cond-command
+Include support for the @code{[[} conditional command
+(@pxref{Conditional Constructs}).
+
+@item --enable-directory-stack
+Include support for a @code{csh}-like directory stack and the
+@code{pushd}, @code{popd}, and @code{dirs} builtins
+(@pxref{The Directory Stack}).
+
+@item --enable-disabled-builtins
+Allow builtin commands to be invoked via @samp{builtin xxx}
+even after @code{xxx} has been disabled using @samp{enable -n xxx}.
+See @ref{Bash Builtins}, for details of the @code{builtin} and
+@code{enable} builtin commands.
+
+@item --enable-dparen-arithmetic
+Include support for the @code{((@dots{}))} command
+(@pxref{Conditional Constructs}).
+
+@item --enable-extended-glob
+Include support for the extended pattern matching features described
+above under @ref{Pattern Matching}.
+
+@item --enable-help-builtin
+Include the @code{help} builtin, which displays help on shell builtins and
+variables (@pxref{Bash Builtins}).
+
+@item --enable-history
+Include command history and the @code{fc} and @code{history}
+builtin commands (@pxref{Bash History Facilities}).
+
+@item --enable-job-control
+This enables the job control features (@pxref{Job Control}),
+if the operating system supports them.
+
+@item --enable-multibyte
+This enables support for multibyte characters if the operating
+system provides the necessary support.
+
+@item --enable-net-redirections
+This enables the special handling of filenames of the form
+@code{/dev/tcp/@var{host}/@var{port}} and
+@code{/dev/udp/@var{host}/@var{port}}
+when used in redirections (@pxref{Redirections}).
+
+@item --enable-process-substitution
+This enables process substitution (@pxref{Process Substitution}) if
+the operating system provides the necessary support.
+
+@item --enable-prompt-string-decoding
+Turn on the interpretation of a number of backslash-escaped characters
+in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt
+strings. See @ref{Printing a Prompt}, for a complete list of prompt
+string escape sequences.
+
+@item --enable-progcomp
+Enable the programmable completion facilities
+(@pxref{Programmable Completion}).
+If Readline is not enabled, this option has no effect.
+
+@item --enable-readline
+Include support for command-line editing and history with the Bash
+version of the Readline library (@pxref{Command Line Editing}).
+
+@item --enable-restricted
+Include support for a @dfn{restricted shell}. If this is enabled, Bash,
+when called as @code{rbash}, enters a restricted mode. See
+@ref{The Restricted Shell}, for a description of restricted mode.
+
+@item --enable-select
+Include the @code{select} builtin, which allows the generation of simple
+menus (@pxref{Conditional Constructs}).
+
+@item --enable-usg-echo-default
+A synonym for @code{--enable-xpg-echo-default}.
+
+@item --enable-xpg-echo-default
+Make the @code{echo} builtin expand backslash-escaped characters by default,
+without requiring the @option{-e} option.
+This sets the default value of the @code{xpg_echo} shell option to @code{on},
+which makes the Bash @code{echo} behave more like the version specified in
+the Single Unix Specification, version 2.
+@xref{Bash Builtins}, for a description of the escape sequences that
+@code{echo} recognizes.
+
+@end table
+
+The file @file{config-top.h} contains C Preprocessor
+@samp{#define} statements for options which are not settable from
+@code{configure}.
+Some of these are not meant to be changed; beware of the consequences if
+you do.
+Read the comments associated with each definition for more
+information about its effect.
+
+@node Reporting Bugs
+@appendix Reporting Bugs
+
+Please report all bugs you find in Bash.
+But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of Bash.
+The latest version of Bash is always available for FTP from
+@uref{ftp://ftp.gnu.org/pub/bash/}.
+
+Once you have determined that a bug actually exists, use the
+@code{bashbug} command to submit a bug report.
+If you have a fix, you are encouraged to mail that as well!
+Suggestions and `philosophical' bug reports may be mailed
+to @email{bug-bash@@gnu.org} or posted to the Usenet
+newsgroup @code{gnu.bash.bug}.
+
+All bug reports should include:
+@itemize @bullet
+@item
+The version number of Bash.
+@item
+The hardware and operating system.
+@item
+The compiler used to compile Bash.
+@item
+A description of the bug behaviour.
+@item
+A short script or `recipe' which exercises the bug and may be used
+to reproduce it.
+@end itemize
+
+@noindent
+@code{bashbug} inserts the first three items automatically into
+the template it provides for filing a bug report.
+
+Please send all reports concerning this manual to
+@email{chet@@po.CWRU.Edu}.
+
+@node Major Differences From The Bourne Shell
+@appendix Major Differences From The Bourne Shell
+
+Bash implements essentially the same grammar, parameter and
+variable expansion, redirection, and quoting as the Bourne Shell.
+Bash uses the @sc{posix} 1003.2 standard as the specification of
+how these features are to be implemented. There are some
+differences between the traditional Bourne shell and Bash; this
+section quickly details the differences of significance. A
+number of these differences are explained in greater depth in
+previous sections.
+This section uses the version of @code{sh} included in SVR4.2 as
+the baseline reference.
+
+@itemize @bullet
+
+@item
+Bash is @sc{posix}-conformant, even where the @sc{posix} specification
+differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}).
+
+@item
+Bash has multi-character invocation options (@pxref{Invoking Bash}).
+
+@item
+Bash has command-line editing (@pxref{Command Line Editing}) and
+the @code{bind} builtin.
+
+@item
+Bash provides a programmable word completion mechanism
+(@pxref{Programmable Completion}), and two builtin commands,
+@code{complete} and @code{compgen}, to manipulate it.
+
+@item
+Bash has command history (@pxref{Bash History Facilities}) and the
+@code{history} and @code{fc} builtins to manipulate it.
+
+@item
+Bash implements @code{csh}-like history expansion
+(@pxref{History Interaction}).
+
+@item
+Bash has one-dimensional array variables (@pxref{Arrays}), and the
+appropriate variable expansions and assignment syntax to use them.
+Several of the Bash builtins take options to act on arrays.
+Bash provides a number of built-in array variables.
+
+@item
+The @code{$'@dots{}'} quoting syntax, which expands ANSI-C
+backslash-escaped characters in the text between the single quotes,
+is supported (@pxref{ANSI-C Quoting}).
+
+@item
+Bash supports the @code{$"@dots{}"} quoting syntax to do
+locale-specific translation of the characters between the double
+quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings}
+invocation options list the translatable strings found in a script
+(@pxref{Locale Translation}).
+
+@item
+Bash implements the @code{!} keyword to negate the return value of
+a pipeline (@pxref{Pipelines}).
+Very useful when an @code{if} statement needs to act only if a test fails.
+
+@item
+Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
+The display of the timing statistics may be controlled with the
+@env{TIMEFORMAT} variable.
+
+@item
+Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))}
+arithmetic for command, similar to the C language (@pxref{Looping Constructs}).
+
+@item
+Bash includes the @code{select} compound command, which allows the
+generation of simple menus (@pxref{Conditional Constructs}).
+
+@item
+Bash includes the @code{[[} compound command, which makes conditional
+testing part of the shell grammar (@pxref{Conditional Constructs}).
+
+@item
+Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
+expansion (@pxref{Tilde Expansion}).
+
+@item
+Bash implements command aliases and the @code{alias} and @code{unalias}
+builtins (@pxref{Aliases}).
+
+@item
+Bash provides shell arithmetic, the @code{((} compound command
+(@pxref{Conditional Constructs}),
+and arithmetic expansion (@pxref{Shell Arithmetic}).
+
+@item
+Variables present in the shell's initial environment are automatically
+exported to child processes. The Bourne shell does not normally do
+this unless the variables are explicitly marked using the @code{export}
+command.
+
+@item
+Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
+and @samp{##} expansions to remove leading or trailing substrings from
+variable values (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}},
+is supported (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
+which expands to the substring of @code{var}'s value of length
+@var{length}, beginning at @var{offset}, is present
+(@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion
+@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
+which matches @var{pattern} and replaces it with @var{replacement} in
+the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
+
+@item
+The expansion @code{$@{!@var{prefix@}*}} expansion, which expands to
+the names of all shell variables whose names begin with @var{prefix},
+is available (@pxref{Shell Parameter Expansion}).
+
+@item
+Bash has @var{indirect} variable expansion using @code{$@{!word@}}
+(@pxref{Shell Parameter Expansion}).
+
+@item
+Bash can expand positional parameters beyond @code{$9} using
+@code{$@{@var{num}@}}.
+
+@item
+The @sc{posix} @code{$()} form of command substitution
+is implemented (@pxref{Command Substitution}),
+and preferred to the Bourne shell's @code{``} (which
+is also implemented for backwards compatibility).
+
+@item
+Bash has process substitution (@pxref{Process Substitution}).
+
+@item
+Bash automatically assigns variables that provide information about the
+current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host
+(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}),
+and the instance of Bash that is running (@env{BASH},
+@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables},
+for details.
+
+@item
+The @env{IFS} variable is used to split only the results of expansion,
+not all words (@pxref{Word Splitting}).
+This closes a longstanding shell security hole.
+
+@item
+Bash implements the full set of @sc{posix} 1003.2 filename expansion operators,
+including @var{character classes}, @var{equivalence classes}, and
+@var{collating symbols} (@pxref{Filename Expansion}).
+
+@item
+Bash implements extended pattern matching features when the @code{extglob}
+shell option is enabled (@pxref{Pattern Matching}).
+
+@item
+It is possible to have a variable and a function with the same name;
+@code{sh} does not separate the two name spaces.
+
+@item
+Bash functions are permitted to have local variables using the
+@code{local} builtin, and thus useful recursive functions may be written
+(@pxref{Bash Builtins}).
+
+@item
+Variable assignments preceding commands affect only that command, even
+builtins and functions (@pxref{Environment}).
+In @code{sh}, all variable assignments
+preceding commands are global unless the command is executed from the
+file system.
+
+@item
+Bash performs filename expansion on filenames specified as operands
+to input and output redirection operators (@pxref{Redirections}).
+
+@item
+Bash contains the @samp{<>} redirection operator, allowing a file to be
+opened for both reading and writing, and the @samp{&>} redirection
+operator, for directing standard output and standard error to the same
+file (@pxref{Redirections}).
+
+@item
+Bash treats a number of filenames specially when they are
+used in redirection operators (@pxref{Redirections}).
+
+@item
+Bash can open network connections to arbitrary machines and services
+with the redirection operators (@pxref{Redirections}).
+
+@item
+The @code{noclobber} option is available to avoid overwriting existing
+files with output redirection (@pxref{The Set Builtin}).
+The @samp{>|} redirection operator may be used to override @code{noclobber}.
+
+@item
+The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
+each take @option{-L} and @option{-P} options to switch between logical and
+physical modes.
+
+@item
+Bash allows a function to override a builtin with the same name, and provides
+access to that builtin's functionality within the function via the
+@code{builtin} and @code{command} builtins (@pxref{Bash Builtins}).
+
+@item
+The @code{command} builtin allows selective disabling of functions
+when command lookup is performed (@pxref{Bash Builtins}).
+
+@item
+Individual builtins may be enabled or disabled using the @code{enable}
+builtin (@pxref{Bash Builtins}).
+
+@item
+The Bash @code{exec} builtin takes additional options that allow users
+to control the contents of the environment passed to the executed
+command, and what the zeroth argument to the command is to be
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Shell functions may be exported to children via the environment
+using @code{export -f} (@pxref{Shell Functions}).
+
+@item
+The Bash @code{export}, @code{readonly}, and @code{declare} builtins can
+take a @option{-f} option to act on shell functions, a @option{-p} option to
+display variables with various attributes set in a format that can be
+used as shell input, a @option{-n} option to remove various variable
+attributes, and @samp{name=value} arguments to set variable attributes
+and values simultaneously.
+
+@item
+The Bash @code{hash} builtin allows a name to be associated with
+an arbitrary filename, even when that filename cannot be found by
+searching the @env{$PATH}, using @samp{hash -p}
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Bash includes a @code{help} builtin for quick reference to shell
+facilities (@pxref{Bash Builtins}).
+
+@item
+The @code{printf} builtin is available to display formatted output
+(@pxref{Bash Builtins}).
+
+@item
+The Bash @code{read} builtin (@pxref{Bash Builtins})
+will read a line ending in @samp{\} with
+the @option{-r} option, and will use the @env{REPLY} variable as a
+default if no non-option arguments are supplied.
+The Bash @code{read} builtin
+also accepts a prompt string with the @option{-p} option and will use
+Readline to obtain the line when given the @option{-e} option.
+The @code{read} builtin also has additional options to control input:
+the @option{-s} option will turn off echoing of input characters as
+they are read, the @option{-t} option will allow @code{read} to time out
+if input does not arrive within a specified number of seconds, the
+@option{-n} option will allow reading only a specified number of
+characters rather than a full line, and the @option{-d} option will read
+until a particular character rather than newline.
+
+@item
+The @code{return} builtin may be used to abort execution of scripts
+executed with the @code{.} or @code{source} builtins
+(@pxref{Bourne Shell Builtins}).
+
+@item
+Bash includes the @code{shopt} builtin, for finer control of shell
+optional capabilities (@pxref{Bash Builtins}), and allows these options
+to be set and unset at shell invocation (@pxref{Invoking Bash}).
+
+@item
+Bash has much more optional behavior controllable with the @code{set}
+builtin (@pxref{The Set Builtin}).
+
+@item
+The @code{test} builtin (@pxref{Bourne Shell Builtins})
+is slightly different, as it implements the @sc{posix} algorithm,
+which specifies the behavior based on the number of arguments.
+
+@item
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
+@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
+Commands specified with a @code{DEBUG} trap are executed before every
+simple command, @code{for} command, @code{case} command,
+@code{select} command, every arithmetic @code{for} command, and before
+the first command executes in a shell function.
+The @code{DEBUG} trap is not inherited by shell functions unless the
+function has been given the @code{trace} attribute or the
+@code{functrace} option has been enabled using the @code{shopt} builtin.
+The @code{extdebug} shell option has additional effects on the
+@code{DEBUG} trap.
+
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
+@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
+Commands specified with an @code{ERR} trap are executed after a simple
+command fails, with a few exceptions.
+The @code{ERR} trap is not inherited by shell functions unless the
+@code{-o errtrace} option to the @code{set} builtin is enabled.
+
+The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
+@code{RETURN} pseudo-signal specification, similar to
+@code{EXIT} and @code{DEBUG}.
+Commands specified with an @code{RETURN} trap are executed before
+execution resumes after a shell function or a shell script executed with
+@code{.} or @code{source} returns.
+The @code{RETURN} trap is not inherited by shell functions.
+
+@item
+The Bash @code{type} builtin is more extensive and gives more information
+about the names it finds (@pxref{Bash Builtins}).
+
+@item
+The Bash @code{umask} builtin permits a @option{-p} option to cause
+the output to be displayed in the form of a @code{umask} command
+that may be reused as input (@pxref{Bourne Shell Builtins}).
+
+@item
+Bash implements a @code{csh}-like directory stack, and provides the
+@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
+(@pxref{The Directory Stack}).
+Bash also makes the directory stack visible as the value of the
+@env{DIRSTACK} shell variable.
+
+@item
+Bash interprets special backslash-escaped characters in the prompt
+strings when interactive (@pxref{Printing a Prompt}).
+
+@item
+The Bash restricted mode is more useful (@pxref{The Restricted Shell});
+the SVR4.2 shell restricted mode is too limited.
+
+@item
+The @code{disown} builtin can remove a job from the internal shell
+job table (@pxref{Job Control Builtins}) or suppress the sending
+of @code{SIGHUP} to a job when the shell exits as the result of a
+@code{SIGHUP}.
+
+@item
+The SVR4.2 shell has two privilege-related builtins
+(@code{mldmode} and @code{priv}) not present in Bash.
+
+@item
+Bash does not have the @code{stop} or @code{newgrp} builtins.
+
+@item
+Bash does not use the @env{SHACCT} variable or perform shell accounting.
+
+@item
+The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses
+@env{TMOUT}.
+
+@end itemize
+
+@noindent
+More features unique to Bash may be found in @ref{Bash Features}.
+
+
+@appendixsec Implementation Differences From The SVR4.2 Shell
+
+Since Bash is a completely new implementation, it does not suffer from
+many of the limitations of the SVR4.2 shell. For instance:
+
+@itemize @bullet
+
+@item
+Bash does not fork a subshell when redirecting into or out of
+a shell control structure such as an @code{if} or @code{while}
+statement.
+
+@item
+Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
+insert a needed closing quote at @code{EOF} under certain circumstances.
+This can be the cause of some hard-to-find errors.
+
+@item
+The SVR4.2 shell uses a baroque memory management scheme based on
+trapping @code{SIGSEGV}. If the shell is started from a process with
+@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library
+function call), it misbehaves badly.
+
+@item
+In a questionable attempt at security, the SVR4.2 shell,
+when invoked without the @option{-p} option, will alter its real
+and effective @sc{uid} and @sc{gid} if they are less than some
+magic threshold value, commonly 100.
+This can lead to unexpected results.
+
+@item
+The SVR4.2 shell does not allow users to trap @code{SIGSEGV},
+@code{SIGALRM}, or @code{SIGCHLD}.
+
+@item
+The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK},
+@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset.
+
+@item
+The SVR4.2 shell treats @samp{^} as the undocumented equivalent of
+@samp{|}.
+
+@item
+Bash allows multiple option arguments when it is invoked (@code{-x -v});
+the SVR4.2 shell allows only one option argument (@code{-xv}). In
+fact, some versions of the shell dump core if the second argument begins
+with a @samp{-}.
+
+@item
+The SVR4.2 shell exits a script if any builtin fails; Bash exits
+a script only if one of the @sc{posix} 1003.2 special builtins fails, and
+only for certain failures, as enumerated in the @sc{posix} 1003.2 standard.
+
+@item
+The SVR4.2 shell behaves differently when invoked as @code{jsh}
+(it turns on job control).
+@end itemize
+
+@node Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@include fdl.texi
+
+@node Builtin Index
+@unnumbered Index of Shell Builtin Commands
+@printindex bt
+
+@node Reserved Word Index
+@unnumbered Index of Shell Reserved Words
+@printindex rw
+
+@node Variable Index
+@unnumbered Parameter and Variable Index
+@printindex vr
+
+@node Function Index
+@unnumbered Function Index
+@printindex fn
+
+@node Concept Index
+@unnumbered Concept Index
+@printindex cp
+
+@bye
to _\bl_\ba_\bs_\bt is selected from the history list. _\bF_\bi_\br_\bs_\bt and _\bl_\ba_\bs_\bt may
be specified as a string (to locate the last command beginning
with that string) or as a number (an index into the history
- list, where a negative number is used as an offset from the cur-
- rent command number). If _\bl_\ba_\bs_\bt is not specified it is set to the
- current command for listing (so that ``fc -l -10'' prints the
- last 10 commands) and to _\bf_\bi_\br_\bs_\bt otherwise. If _\bf_\bi_\br_\bs_\bt is not spec-
- ified it is set to the previous command for editing and -16 for
- listing.
+ list, where a negative number is used as an offset from the
+ current command number). If _\bl_\ba_\bs_\bt is not specified it is set to
+ the current command for listing (so that ``fc -l -10'' prints
+ the last 10 commands) and to _\bf_\bi_\br_\bs_\bt otherwise. If _\bf_\bi_\br_\bs_\bt is not
+ specified it is set to the previous command for editing and -16
+ for listing.
The -\b-n\bn option suppresses the command numbers when listing. The
-\b-r\br option reverses the order of the commands. If the -\b-l\bl option
formed.
c\bch\bhe\bec\bck\bkw\bwi\bin\bns\bsi\biz\bze\be
If set, b\bba\bas\bsh\bh checks the window size after each command
- and, if necessary, updates the values of L\bLI\bIN\bNE\bES\bS and C\bCO\bOL\bL-\b-
- U\bUM\bMN\bNS\bS.
+ and, if necessary, updates the values of L\bLI\bIN\bNE\bES\bS and
+ C\bCO\bOL\bLU\bUM\bMN\bNS\bS.
c\bcm\bmd\bdh\bhi\bis\bst\bt If set, b\bba\bas\bsh\bh attempts to save all lines of a multiple-
line command in the same history entry. This allows
easy re-editing of multi-line commands.
%!PS-Adobe-3.0
%%Creator: groff version 1.18.1
-%%CreationDate: Tue Jun 29 10:37:28 2004
+%%CreationDate: Mon Jul 19 16:04:16 2004
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
--- /dev/null
+#! /bin/sh
+#
+# mkinstall - make the INSTALL file from the `Installing Bash' node of the
+# texinfo manual
+#
+
+NODE="Installing Bash"
+SUBNODE="Basic Installation"
+TEXI=bashref.texi
+TMPINFO=temp.info
+TMPOUT=INSTALL.tmp
+
+OUT=${1:-INSTALL}
+
+trap 'rm -f $TMPOUT $TMPINFO $OUT; trap '' 0; exit 1' 1 2 3 6 15
+#trap 'rm -f $TMPOUT $TMPINFO' 0
+
+# create an info file without paragraph indentation
+makeinfo --no-split -I../lib/readline/doc --paragraph-indent 0 -o $TMPINFO $TEXI
+
+# write out the text from the `Installing Bash' node to INSTALL.tmp
+info --file $TMPINFO --node "$NODE" --subnodes --output $TMPOUT
+
+exit 0
+# remove the info traversal information and the initial menu, and squeeze
+# out multiple consecutive blank lines like `cat -s'
+awk 'BEGIN { printline = 0; newlines = 0; }
+
+/^File: '$TMPINFO'/ { next; }
+
+/^'"$SUBNODE"'/ { printline = 1; }
+
+/^$/ { if (printline) newlines = 1; next; }
+
+/$/ { if (printline) {
+ if (newlines) {
+ printf "\n";
+ newlines = 0;
+ }
+ print $0;
+ }
+ }' < $TMPOUT > $OUT
+
+exit 0
+\bo parsing the value of S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS from the shell environment at
startup
- +\bo redirecting output using the >, >|, <>, >&, &>, and >> redirect-
- ion operators
+ +\bo redirecting output using the >, >|, <>, >&, &>, and >> redirec-
+ tion operators
+\bo using the e\bex\bxe\bec\bc builtin command to replace the shell with another
command
%!PS-Adobe-3.0
%%Creator: groff version 1.18.1
-%%CreationDate: Tue Jun 29 10:37:29 2004
+%%CreationDate: Mon Jul 19 16:04:16 2004
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%DocumentSuppliedResources: procset grops 1.18 1
+++ /dev/null
-% texinfo.tex -- TeX macros to handle Texinfo files.
-%
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{2003-02-03.16}
-%
-% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-%
-% This texinfo.tex file is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation; either version 2, or (at
-% your option) any later version.
-%
-% This texinfo.tex file is distributed in the hope that it will be
-% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-% General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this texinfo.tex file; see the file COPYING. If not, write
-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
-%
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them. Help stamp out software-hoarding!
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-% ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
-% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-% ftp://tug.org/tex/texinfo.tex
-% (and all CTAN mirrors, see http://www.ctan.org),
-% and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-%
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-%
-% The texinfo.tex in any given Texinfo distribution could well be out
-% of date, so if that's what you're using, please check.
-%
-% Send bug reports to bug-texinfo@gnu.org. Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem. Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution. For a simple
-% manual foo.texi, however, you can get away with this:
-% tex foo.texi
-% texindex foo.??
-% tex foo.texi
-% tex foo.texi
-% dvips foo.dvi -o # or whatever; this makes foo.ps.
-% The extra TeX runs get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages, to some
-% extent. You can get the existing language-specific files from the
-% full Texinfo distribution.
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
-\message{Basics,}
-\chardef\other=12
-
-% We never want plain's outer \+ definition in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Save some parts of plain tex whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexgtr=>
-\let\ptexhat=^
-\let\ptexi=\i
-\let\ptexlbrace=\{
-\let\ptexless=<
-\let\ptexplus=+
-\let\ptexrbrace=\}
-\let\ptexstar=\*
-\let\ptext=\t
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
-\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-
-% In some macros, we cannot use the `\? notation---the left quote is
-% in some cases the escape char.
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
-\chardef\dotChar = `\.
-\chardef\equalChar = `\=
-\chardef\exclamChar= `\!
-\chardef\questChar = `\?
-\chardef\semiChar = `\;
-\chardef\spaceChar = `\ %
-\chardef\underChar = `\_
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-% True if #1 is the empty string, i.e., called like `\ifempty{}'.
-%
-\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}%
-\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}%
-
-% Hyphenation fixes.
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal. We don't just call \tracingall here,
-% since that produces some useless output on the terminal. We also make
-% some effort to order the tracing commands to reduce output in the log
-% file; cf. trace.sty in LaTeX.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{%
- \tracingstats2
- \tracingpages1
- \tracinglostchars2 % 2 gives us more in etex
- \tracingparagraphs1
- \tracingoutput1
- \tracingmacros2
- \tracingrestores1
- \showboxbreadth\maxdimen \showboxdepth\maxdimen
- \ifx\eTeXversion\undefined\else % etex gives us more logging
- \tracingscantokens1
- \tracingifs1
- \tracinggroups1
- \tracingnesting2
- \tracingassigns1
- \fi
- \tracingcommands3 % 3 gives us more in etex
- \errorcontextlines\maxdimen
-}%
-
-% add check for \lastpenalty to plain's definitions. If the last thing
-% we did was a \nobreak, we don't want to insert more space.
-%
-\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
- \removelastskip\penalty-50\smallskip\fi\fi}
-\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
- \removelastskip\penalty-100\medskip\fi\fi}
-\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
- \removelastskip\penalty-200\bigskip\fi\fi}
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument. Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
- \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
- %
- \ifodd\pageno \advance\hoffset by \bindingoffset
- \else \advance\hoffset by -\bindingoffset\fi
- %
- % Do this outside of the \shipout so @code etc. will be expanded in
- % the headline as they should be, not taken literally (outputting ''code).
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
- %
- {%
- % Have to do this stuff outside the \shipout because we want it to
- % take effect in \write's, yet the group defined by the \vbox ends
- % before the \shipout runs.
- %
- \escapechar = `\\ % use backslash in output files.
- \indexdummies % don't expand commands in the output.
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
- % Do this early so pdf references go to the beginning of the page.
- \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
- %
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
- \vskip-\topandbottommargin
- \vtop to0pt{%
- \line{\ewtop\hfil\ewtop}%
- \nointerlineskip
- \line{%
- \vbox{\moveleft\cornerthick\nstop}%
- \hfill
- \vbox{\moveright\cornerthick\nstop}%
- }%
- \vss}%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
- \ifodd\pageno\hskip\bindingoffset\fi
- \vbox\bgroup
- \fi
- %
- \unvbox\headlinebox
- \pagebody{#1}%
- \ifdim\ht\footlinebox > 0pt
- % Only leave this space if the footline is nonempty.
- % (We lessened \vsize for it in \oddfootingxxx.)
- % The \baselineskip=24pt in plain's \makefootline has no effect.
- \vskip 2\baselineskip
- \unvbox\footlinebox
- \fi
- %
- \ifcropmarks
- \egroup % end of \vbox\bgroup
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
- \vbox to0pt{\vss
- \line{%
- \vbox{\moveleft\cornerthick\nsbot}%
- \hfill
- \vbox{\moveright\cornerthick\nsbot}%
- }%
- \nointerlineskip
- \line{\ewbot\hfil\ewbot}%
- }%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
- }% end of group with \normalturnoffactive
- \advancepageno
- \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
- \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks. Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
- {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
- {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1. The argument is the rest of
-% the input line (except we remove a trailing comment). #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
- \let\next = #1%
- \begingroup
- \obeylines
- \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse. Otherwise, we're done.
-\def\parseargx{%
- % \obeyedspace is defined far below, after the definition of \sepspaces.
- \ifx\obeyedspace\temp
- \expandafter\parseargdiscardspace
- \else
- \expandafter\parseargline
- \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
- \gdef\parseargline#1^^M{%
- \endgroup % End of the group started in \parsearg.
- %
- % First remove any @c comment, then any @comment.
- % Result of each macro is put in \toks0.
- \argremovec #1\c\relax %
- \expandafter\argremovecomment \the\toks0 \comment\relax %
- %
- % Call the caller's macro, saved as \next in \parsearg.
- \expandafter\next\expandafter{\the\toks0}%
- }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us. The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-% @end itemize @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'. Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands. (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.) But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
- \begingroup
- \ignoreactivespaces
- \edef\temp{#1}%
- \global\toks0 = \expandafter{\temp}%
- \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
- \obeyspaces
- \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
- \removeactivespaces{#1}%
- \edef\endthing{\the\toks0}%
- %
- \expandafter\ifx\csname E\endthing\endcsname\relax
- \expandafter\ifx\csname \endthing\endcsname\relax
- % There's no \foo, i.e., no ``environment'' foo.
- \errhelp = \EMsimple
- \errmessage{Undefined command `@end \endthing'}%
- \else
- \unmatchedenderror\endthing
- \fi
- \else
- % Everything's ok; the right environment has been started.
- \csname E\endthing\endcsname
- \fi
-}
-
-% There is an environment #1, but it hasn't been started. Give an error.
-%
-\def\unmatchedenderror#1{%
- \errhelp = \EMsimple
- \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
- \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
- % Definitions to produce \{ and \} commands for indices,
- % and @{ and @} for the aux file.
- \catcode`\{ = \other \catcode`\} = \other
- \catcode`\[ = 1 \catcode`\] = 2
- \catcode`\! = 0 \catcode`\\ = \other
- !gdef!lbracecmd[\{]%
- !gdef!rbracecmd[\}]%
- !gdef!lbraceatcmd[@{]%
- !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
- \def\temp{#1}%
- \ifx\temp\imacro \ptexi
- \else\ifx\temp\jmacro \j
- \else \errmessage{@dotless can be used only with i or j}%
- \fi\fi
-}
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
-
-% @w prevents a word break. Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line. According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0). If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-% Another complication is that the group might be very large. This can
-% cause the glue on the previous page to be unduly stretched, because it
-% does not have much material. In this case, it's better to add an
-% explicit \vfill so that the extra space is at the bottom. The
-% threshold for doing this is if the group is more than \vfilllimit
-% percent of a page (\vfilllimit can be changed inside of @tex).
-%
-\newbox\groupbox
-\def\vfilllimit{0.7}
-%
-\def\group{\begingroup
- \ifnum\catcode13=\active \else
- \errhelp = \groupinvalidhelp
- \errmessage{@group invalid in context where filling is enabled}%
- \fi
- %
- % The \vtop we start below produces a box with normal height and large
- % depth; thus, TeX puts \baselineskip glue before it, and (when the
- % next line of text is done) \lineskip glue after it. (See p.82 of
- % the TeXbook.) Thus, space below is not quite equal to space
- % above. But it's pretty close.
- \def\Egroup{%
- \egroup % End the \vtop.
- % \dimen0 is the vertical size of the group's box.
- \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
- % \dimen2 is how much space is left on the page (more or less).
- \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
- % if the group doesn't fit on the current page, and it's a big big
- % group, force a page break.
- \ifdim \dimen0 > \dimen2
- \ifdim \pagetotal < \vfilllimit\pageheight
- \page
- \fi
- \fi
- \copy\groupbox
- \endgroup % End the \group.
- }%
- %
- \setbox\groupbox = \vtop\bgroup
- % We have to put a strut on the last line in case the @group is in
- % the midst of an example, rather than completely enclosing it.
- % Otherwise, the interline space between the last line of the group
- % and the first line afterwards is too small. But we can't put the
- % strut in \Egroup, since there it would be on a line by itself.
- % Hence this just inserts a strut at the beginning of each line.
- \everypar = {\strut}%
- %
- % Since we have a strut on every line, we don't need any of TeX's
- % normal interline spacing.
- \offinterlineskip
- %
- % OK, but now we have to do something about blank
- % lines in the input in @example-like environments, which normally
- % just turn into \lisppar, which will insert no space now that we've
- % turned off the interline space. Simplest is to make them be an
- % empty paragraph.
- \ifx\par\lisppar
- \edef\par{\leavevmode \par}%
- %
- % Reset ^^M's definition to new definition of \par.
- \obeylines
- \fi
- %
- % Do @comment since we are called inside an environment such as
- % @example, where each end-of-line in the input causes an
- % end-of-line in the output. We don't want the end-of-line after
- % the `@group' to put extra space in the output. Since @group
- % should appear on a line by itself (according to the Texinfo
- % manual), we don't worry about eating any user text.
- \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
- % Ensure vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
- % If the @need value is less than one line space, it's useless.
- \dimen0 = #1\mil
- \dimen2 = \ht\strutbox
- \advance\dimen2 by \dp\strutbox
- \ifdim\dimen0 > \dimen2
- %
- % Do a \strut just to make the height of this box be normal, so the
- % normal leading is inserted relative to the preceding line.
- % And a page break here is fine.
- \vtop to #1\mil{\strut\vfil}%
- %
- % TeX does not even consider page breaks if a penalty added to the
- % main vertical list is 10000 or more. But in order to see if the
- % empty box we just added fits on the page, we must make it consider
- % page breaks. On the other hand, we don't want to actually break the
- % page after the empty box. So we use a penalty of 9999.
- %
- % There is an extremely small chance that TeX will actually break the
- % page at this \penalty, if there are no other feasible breakpoints in
- % sight. (If the user is using lots of big @group commands, which
- % almost-but-not-quite fill up a page, TeX will have a hard time doing
- % good page breaking, for example.) However, I could not construct an
- % example where a page broke at this \penalty; if it happens in a real
- % document, then we can reconsider our strategy.
- \penalty9999
- %
- % Back up by the size of the box, whether we did a page break or not.
- \kern -#1\mil
- %
- % Do not allow a page break right after this kern.
- \nobreak
- \fi
-}
-
-% @br forces paragraph break
-
-\let\br = \par
-
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
- \leavevmode
- \hbox to 1.5em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
- \leavevmode
- \hbox to 2em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
- \spacefactor=3000
-}
-
-
-% @page forces the start of a new page
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-% paragraph. For more general purposes, use the \margin insertion
-% class. WHICH is `l' or `r'.
-%
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-%
-\def\doinmargin#1#2{\strut\vadjust{%
- \nobreak
- \kern-\strutdepth
- \vtop to \strutdepth{%
- \baselineskip=\strutdepth
- \vss
- % if you have multiple lines of stuff to put here, you'll need to
- % make the vbox yourself of the appropriate size.
- \ifx#1l%
- \llap{\ignorespaces #2\hskip\inmarginspacing}%
- \else
- \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
- \fi
- \null
- }%
-}}
-\def\inleftmargin{\doinmargin l}
-\def\inrightmargin{\doinmargin r}
-%
-% @inmargin{TEXT [, RIGHT-TEXT]}
-% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-% else use TEXT for both).
-%
-\def\inmargin#1{\parseinmargin #1,,\finish}
-\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \def\lefttext{#1}% have both texts
- \def\righttext{#2}%
- \else
- \def\lefttext{#1}% have only one text
- \def\righttext{#1}%
- \fi
- %
- \ifodd\pageno
- \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
- \else
- \def\temp{\inleftmargin\lefttext}%
- \fi
- \temp
-}
-
-% @include file insert text of that file as input.
-% Allow normal characters that we make active in the argument (a file name).
-\def\include{\begingroup
- \catcode`\\=\other
- \catcode`~=\other
- \catcode`^=\other
- \catcode`_=\other
- \catcode`|=\other
- \catcode`<=\other
- \catcode`>=\other
- \catcode`+=\other
- \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
- % Read the included file in a group so nested @include's work.
- \def\thisfile{#1}%
- \let\value=\expandablevalue
- \input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line
-% outputs that line, centered.
-%
-\def\center{\parsearg\docenter}
-\def\docenter#1{{%
- \ifhmode \hfil\break \fi
- \advance\hsize by -\leftskip
- \advance\hsize by -\rightskip
- \line{\hfil \ignorespaces#1\unskip \hfil}%
- \ifhmode \break \fi
-}}
-
-% @sp n outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore is another way to write a comment
-
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% We cannot implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\def\paragraphindent{\parsearg\doparagraphindent}
-\def\doparagraphindent#1{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \defaultparindent = 0pt
- \else
- \defaultparindent = #1em
- \fi
- \fi
- \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\def\exampleindent{\parsearg\doexampleindent}
-\def\doexampleindent#1{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \lispnarrowing = 0pt
- \else
- \lispnarrowing = #1em
- \fi
- \fi
-}
-
-% @asis just yields its argument. Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-% We don't use $'s directly in the definition of \math because we need
-% to set catcodes according to plain TeX first, to allow for subscripts,
-% superscripts, special math chars, etc.
-%
-\let\implicitmath = $%$ font-lock fix
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}. So make
-% _ within @math be active (mathcode "8000), and distinguish by seeing
-% if the current family is \slfam, which is what @var uses.
-%
-{\catcode\underChar = \active
-\gdef\mathunderscore{%
- \catcode\underChar=\active
- \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-}}
-%
-% Another complication: we want \\ (and @\) to output a \ character.
-% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-% this is not advertised and we don't care. Texinfo does not
-% otherwise define @\.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
- \tex
- \mathcode`\_="8000 \mathunderscore
- \let\\ = \mathbackslash
- \mathactive
- \implicitmath\finishmath}
-\def\finishmath#1{#1\implicitmath\Etex}
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an
-% argument to a command which set the catcodes (such as @item or @section).
-%
-{
- \catcode`^ = \active
- \catcode`< = \active
- \catcode`> = \active
- \catcode`+ = \active
- \gdef\mathactive{%
- \let^ = \ptexhat
- \let< = \ptexless
- \let> = \ptexgtr
- \let+ = \ptexplus
- }
-}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
- \iflinks
- \readauxfile
- \fi % \openindices needs to do some work in any case.
- \openindices
- \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
- %
- % If texinfo.cnf is present on the system, read it.
- % Useful for site-wide @afourpaper, etc.
- % Just to be on the safe side, close the input stream before the \input.
- \openin 1 texinfo.cnf
- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
- \closein1
- \temp
- %
- \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
- \newindex{cp}%
- \newcodeindex{fn}%
- \newcodeindex{vr}%
- \newcodeindex{tp}%
- \newcodeindex{ky}%
- \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-\newtoks\toksA
-\newtoks\toksB
-\newtoks\toksC
-\newtoks\toksD
-\newbox\boxA
-\newcount\countA
-\newif\ifpdf
-\newif\ifpdfmakepagedest
-
-\ifx\pdfoutput\undefined
- \pdffalse
- \let\pdfmkdest = \gobble
- \let\pdfurl = \gobble
- \let\endlink = \relax
- \let\linkcolor = \relax
- \let\pdfmakeoutlines = \relax
-\else
- \pdftrue
- \pdfoutput = 1
- \input pdfcolor
- \def\dopdfimage#1#2#3{%
- \def\imagewidth{#2}%
- \def\imageheight{#3}%
- % without \immediate, pdftex seg faults when the same image is
- % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
- \ifnum\pdftexversion < 14
- \immediate\pdfimage
- \else
- \immediate\pdfximage
- \fi
- \ifx\empty\imagewidth\else width \imagewidth \fi
- \ifx\empty\imageheight\else height \imageheight \fi
- \ifnum\pdftexversion<13
- #1.pdf%
- \else
- {#1.pdf}%
- \fi
- \ifnum\pdftexversion < 14 \else
- \pdfrefximage \pdflastximage
- \fi}
- \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
- \def\pdfmkpgn#1{#1}
- \let\linkcolor = \Blue % was Cyan, but that seems light?
- \def\endlink{\Black\pdfendlink}
- % Adding outlines to PDF; macros for calculating structure of outlines
- % come from Petr Olsak
- \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
- \else \csname#1\endcsname \fi}
- \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
- \advance\tempnum by1
- \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
- \def\pdfmakeoutlines{{%
- \openin 1 \jobname.toc
- \ifeof 1\else\begingroup
- \closein 1
- % Thanh's hack / proper braces in bookmarks
- \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
- \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
- %
- \def\chapentry ##1##2##3{}
- \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
- \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
- \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
- \let\appendixentry = \chapentry
- \let\unnumbchapentry = \chapentry
- \let\unnumbsecentry = \secentry
- \let\unnumbsubsecentry = \subsecentry
- \let\unnumbsubsubsecentry = \subsubsecentry
- \input \jobname.toc
- \def\chapentry ##1##2##3{%
- \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
- \def\secentry ##1##2##3##4{%
- \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
- \def\subsecentry ##1##2##3##4##5{%
- \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
- \def\subsubsecentry ##1##2##3##4##5##6{%
- \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
- \let\appendixentry = \chapentry
- \let\unnumbchapentry = \chapentry
- \let\unnumbsecentry = \secentry
- \let\unnumbsubsecentry = \subsecentry
- \let\unnumbsubsubsecentry = \subsubsecentry
- %
- % Make special characters normal for writing to the pdf file.
- %
- \indexnofonts
- \let\tt=\relax
- \turnoffactive
- \input \jobname.toc
- \endgroup\fi
- }}
- \def\makelinks #1,{%
- \def\params{#1}\def\E{END}%
- \ifx\params\E
- \let\nextmakelinks=\relax
- \else
- \let\nextmakelinks=\makelinks
- \ifnum\lnkcount>0,\fi
- \picknum{#1}%
- \startlink attr{/Border [0 0 0]}
- goto name{\pdfmkpgn{\the\pgn}}%
- \linkcolor #1%
- \advance\lnkcount by 1%
- \endlink
- \fi
- \nextmakelinks
- }
- \def\picknum#1{\expandafter\pn#1}
- \def\pn#1{%
- \def\p{#1}%
- \ifx\p\lbrace
- \let\nextpn=\ppn
- \else
- \let\nextpn=\ppnn
- \def\first{#1}
- \fi
- \nextpn
- }
- \def\ppn#1{\pgn=#1\gobble}
- \def\ppnn{\pgn=\first}
- \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
- \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
- \def\skipspaces#1{\def\PP{#1}\def\D{|}%
- \ifx\PP\D\let\nextsp\relax
- \else\let\nextsp\skipspaces
- \ifx\p\space\else\addtokens{\filename}{\PP}%
- \advance\filenamelength by 1
- \fi
- \fi
- \nextsp}
- \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
- \ifnum\pdftexversion < 14
- \let \startlink \pdfannotlink
- \else
- \let \startlink \pdfstartlink
- \fi
- \def\pdfurl#1{%
- \begingroup
- \normalturnoffactive\def\@{@}%
- \let\value=\expandablevalue
- \leavevmode\Red
- \startlink attr{/Border [0 0 0]}%
- user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
- % #1
- \endgroup}
- \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
- \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
- \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
- \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
- \def\maketoks{%
- \expandafter\poptoks\the\toksA|ENDTOKS|
- \ifx\first0\adn0
- \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
- \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
- \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
- \else
- \ifnum0=\countA\else\makelink\fi
- \ifx\first.\let\next=\done\else
- \let\next=\maketoks
- \addtokens{\toksB}{\the\toksD}
- \ifx\first,\addtokens{\toksB}{\space}\fi
- \fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \next}
- \def\makelink{\addtokens{\toksB}%
- {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
- \def\pdflink#1{%
- \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
- \linkcolor #1\endlink}
- \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\fi % \ifx\pdfoutput
-
-
-\message{fonts,}
-% Font-change commands.
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
-
-% Default leading.
-\newdimen\textleading \textleading = 13.2pt
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly. There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
- \normalbaselineskip = #1\relax
- \normallineskip = \lineskipfactor\normalbaselineskip
- \normalbaselines
- \setbox\strutbox =\hbox{%
- \vrule width0pt height\strutheightpercent\baselineskip
- depth \strutdepthpercent \baselineskip
- }%
-}
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx} %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-\newcount\mainmagstep
-\ifx\bigger\relax
- % not really supported.
- \mainmagstep=\magstep1
- \setfont\textrm\rmshape{12}{1000}
- \setfont\texttt\ttshape{12}{1000}
-\else
- \mainmagstep=\magstephalf
- \setfont\textrm\rmshape{10}{\mainmagstep}
- \setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you may want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10
-% (in Bob's opinion).
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\setfont\smallrm\rmshape{9}{1000}
-\setfont\smalltt\ttshape{9}{1000}
-\setfont\smallbf\bfshape{10}{900}
-\setfont\smallit\itshape{9}{1000}
-\setfont\smallsl\slshape{9}{1000}
-\setfont\smallsf\sfshape{9}{1000}
-\setfont\smallsc\scshape{10}{900}
-\setfont\smallttsl\ttslshape{10}{900}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-
-% Fonts for small examples (8pt).
-\setfont\smallerrm\rmshape{8}{1000}
-\setfont\smallertt\ttshape{8}{1000}
-\setfont\smallerbf\bfshape{10}{800}
-\setfont\smallerit\itshape{8}{1000}
-\setfont\smallersl\slshape{8}{1000}
-\setfont\smallersf\sfshape{8}{1000}
-\setfont\smallersc\scshape{10}{800}
-\setfont\smallerttsl\ttslshape{10}{800}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-\def\authortt{\sectt}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
- \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
- \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
- \textfont\ttfam=\tentt \textfont\sffam=\tensf
-}
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE. We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example. By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
-\def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
- \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
- \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
- \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
- \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
-\def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
- \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
- \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
- \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\smallfonts{%
- \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
- \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
- \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
- \let\tenttsl=\smallttsl
- \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
- \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
- \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
- \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
- \let\tenttsl=\smallerttsl
- \resetmathfonts \setleading{9.5pt}}
-
-% Set the fonts to use with the @small... environments.
-\let\smallexamplefonts = \smallfonts
-
-% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
-% can fit this many characters:
-% 8.5x11=86 smallbook=72 a4=90 a5=69
-% If we use \smallerfonts (8pt), then we can fit this many characters:
-% 8.5x11=90+ smallbook=80 a4=90+ a5=77
-% For me, subjectively, the few extra characters that fit aren't worth
-% the additional smallness of 8pt. So I'm making the default 9pt.
-%
-% By the way, for comparison, here's what fits with @example (10pt):
-% 8.5x11=71 smallbook=60 a4=75 a5=58
-%
-% I wish we used A4 paper on this side of the Atlantic.
-%
-% --karl, 24jan03.
-
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
-\setfont\shortconttt\ttshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-\let\cite=\smartslanted
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph. Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-% Set sfcode to normal for the chars that usually have another value.
-% Can't use plain's \frenchspacing because it uses the `\x notation, and
-% sometimes \x has an active definition that messes things up.
-%
-\catcode`@=11
- \def\frenchspacing{%
- \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
- \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
- }
-\catcode`@=\other
-
-\def\t#1{%
- {\tt \rawbackslash \frenchspacing #1}%
- \null
-}
-\let\ttfont=\t
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\keyrm\rmshape{8}{1000}
-\font\keysy=cmsy9
-\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
- {%
- % Change normal interword space to be same as for the current font.
- \spaceskip = \fontdimen2\font
- %
- % Switch to typewriter.
- \tt
- %
- % But `\ ' produces the large typewriter interword space.
- \def\ {{\spaceskip = 0pt{} }}%
- %
- % Turn off hyphenation.
- \nohyphenation
- %
- \rawbackslash
- \frenchspacing
- #1%
- }%
- \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-% -- rms.
-{
- \catcode`\-=\active
- \catcode`\_=\active
- %
- \global\def\code{\begingroup
- \catcode`\-=\active \let-\codedash
- \catcode`\_=\active \let_\codeunder
- \codex
- }
- %
- % If we end up with any active - characters when handling the index,
- % just treat them as a normal -.
- \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{%
- % this is all so @math{@code{var_name}+1} can work. In math mode, _
- % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
- % will therefore expand the active definition of _, which is us
- % (inside @code that is), therefore an endless loop.
- \ifusingtt{\ifmmode
- \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
- \else\normalunderscore \fi
- \discretionary{}{}{}}%
- {\_}%
-}
-\def\codex #1{\tclose{#1}\endgroup}
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-% `example' (@kbd uses ttsl only inside of @example and friends),
-% or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
- \def\arg{#1}%
- \ifx\arg\worddistinct
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
- \else\ifx\arg\wordexample
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
- \else\ifx\arg\wordcode
- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
- \else
- \errhelp = \EMsimple
- \errmessage{Unknown @kbdinputstyle `\arg'}%
- \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct.'
-\kbdinputstyle distinct
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @url, @env, @command quotes seem unnecessary, so use \code.
-\let\url=\code
-\let\env=\code
-\let\command=\code
-
-% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-% second argument specifying the text to display and an optional third
-% arg as text to display instead of (rather than in addition to) the url
-% itself. First (mandatory) arg is the url. Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{\begingroup
- \unsepspaces
- \pdfurl{#1}%
- \setbox0 = \hbox{\ignorespaces #3}%
- \ifdim\wd0 > 0pt
- \unhbox0 % third arg given, show only that
- \else
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \ifpdf
- \unhbox0 % PDF: 2nd arg given, show only it
- \else
- \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
- \fi
- \else
- \code{#1}% only url given, so show it
- \fi
- \fi
- \endlink
-\endgroup}
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
- \def\email#1{\doemail#1,,\finish}
- \def\doemail#1,#2,#3\finish{\begingroup
- \unsepspaces
- \pdfurl{mailto:#1}%
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
- \endlink
- \endgroup}
-\else
- \let\email=\uref
-\fi
-
-% Check if we are currently using a typewriter font. Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find. We need it for
-% Polish suppressed-l. --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}} % roman font
-\def\sc#1{{\smallcaps#1}} % smallcaps font
-\def\ii#1{{\it #1}} % italic font
-
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
-
-% @pounds{} is a sterling sign.
-\def\pounds{{\it\$}}
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page. Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
- \let\tt=\authortt}%
- %
- % Leave some space at the very top of the page.
- \vglue\titlepagetopglue
- %
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
- % print a rule at the page bottom also.
- \finishedtitlepagefalse
- \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
- % Now you can put text using @subtitle.
- \def\subtitle{\parsearg\subtitlezzz}%
- \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
- %
- % @author should come last, but may come many times.
- \def\author{\parsearg\authorzzz}%
- \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
- {\authorfont \leftline{##1}}}%
- %
- % Most title ``pages'' are actually two pages long, with space
- % at the top of the second. We don't want the ragged left on the second.
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- \oldpage
- \let\page = \oldpage
- \hbox{}}%
-% \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- % It is important to do the page break before ending the group,
- % because the headline and footline are only empty inside the group.
- % If we use the new definition of \page, we always get a blank page
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
- %
- % Need this before the \...aftertitlepage checks so that if they are
- % in effect the toc pages will come out with page numbers.
- \HEADINGSon
- %
- % If they want short, they certainly want long too.
- \ifsetshortcontentsaftertitlepage
- \shortcontents
- \contents
- \global\let\shortcontents = \relax
- \global\let\contents = \relax
- \fi
- %
- \ifsetcontentsaftertitlepage
- \contents
- \global\let\contents = \relax
- \global\let\shortcontents = \relax
- \fi
-}
-
-\def\finishtitlepage{%
- \vskip4pt \hrule height 2pt width \hsize
- \vskip\titlepagebottomglue
- \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline % headline on even pages
-\newtoks\oddheadline % headline on odd pages
-\newtoks\evenfootline % footline on even pages
-\newtoks\oddfootline % footline on odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
- \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
- \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what @headings on does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
- \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
- %
- % Leave some space for the footline. Hopefully ok to assume
- % @evenfooting will not be used by itself.
- \global\advance\pageheight by -\baselineskip
- \global\advance\vsize by -\baselineskip
-}
-
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
-
-% @headings double turns headings on for double-sided printing.
-% @headings single turns headings on for single-sided printing.
-% @headings off turns them off.
-% @headings on same as @headings double, retained for compatibility.
-% @headings after turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% This produces Day Month Year style of output.
-% Only define if not already defined, in case a txi-??.tex file has set
-% up a different format (e.g., txi-cs.tex does this).
-\ifx\today\undefined
-\def\today{%
- \number\day\space
- \ifcase\month
- \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
- \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
- \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
- \fi
- \space\number\year}
-\fi
-
-% @settitle line... specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
- \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
- \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
- \advance\hsize by -\rightskip
- \advance\hsize by -\tableindent
- \setbox0=\hbox{\itemfont{#1}}%
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
- % command is, e.g., @kindex, the whatsit would get put into the
- % horizontal list on a line by itself, resulting in extra blank space.
- \ifdim \wd0>\itemmax
- %
- % Make this a paragraph so we get the \parskip glue and wrapping,
- % but leave it ragged-right.
- \begingroup
- \advance\leftskip by-\tableindent
- \advance\hsize by\tableindent
- \advance\rightskip by0pt plus1fil
- \leavevmode\unhbox0\par
- \endgroup
- %
- % We're going to be starting a paragraph, but we don't want the
- % \parskip glue -- logically it's part of the @item we just started.
- \nobreak \vskip-\parskip
- %
- % Stop a page break at the \parskip glue coming up. (Unfortunately
- % we can't prevent a possible page break at the following
- % \baselineskip glue.) However, if what follows is an environment
- % such as @example, there will be no \parskip glue; then
- % the negative vskip we just would cause the example and the item to
- % crash together. So we use this bizarre value of 10001 as a signal
- % to \aboveenvbreak to insert \parskip glue after all.
- % (Possibly there are other commands that could be followed by
- % @example which need the same treatment, but not section titles; or
- % maybe section titles are the only special case and they should be
- % penalty 10001...)
- \penalty 10001
- \endgroup
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
- % following text (if any) will end up on the same line.
- \noindent
- % Do this with kerns and \unhbox so that if there is a footnote in
- % the item text, it can migrate to the main vertical list and
- % eventually be printed.
- \nobreak\kern-\tableindent
- \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
- \unhbox0
- \nobreak\kern\dimen0
- \endgroup
- \itemxneedsnegativevskiptrue
- \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-% @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1 \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1 \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1 \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
- \begingroup % ended by the @end itemize
- \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list. No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
- \begingroup % ended by the @end enumerate
- %
- % If we were given no argument, pretend we were given `1'.
- \def\thearg{#1}%
- \ifx\thearg\empty \def\thearg{1}\fi
- %
- % Detect if the argument is a single token. If so, it might be a
- % letter. Otherwise, the only valid thing it can be is a number.
- % (We will always have one token, because of the test we just made.
- % This is a good thing, since \splitoff doesn't work given nothing at
- % all -- the first parameter is undelimited.)
- \expandafter\splitoff\thearg\endmark
- \ifx\rest\empty
- % Only one token in the argument. It could still be anything.
- % A ``lowercase letter'' is one whose \lccode is nonzero.
- % An ``uppercase letter'' is one whose \lccode is both nonzero, and
- % not equal to itself.
- % Otherwise, we assume it's a number.
- %
- % We need the \relax at the end of the \ifnum lines to stop TeX from
- % continuing to look for a <number>.
- %
- \ifnum\lccode\expandafter`\thearg=0\relax
- \numericenumerate % a number (we hope)
- \else
- % It's a letter.
- \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
- \lowercaseenumerate % lowercase letter
- \else
- \uppercaseenumerate % uppercase letter
- \fi
- \fi
- \else
- % Multiple tokens in the argument. We hope it's a number.
- \numericenumerate
- \fi
-}
-
-% An @enumerate whose labels are integers. The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
- \itemno = \thearg
- \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more lowercase letters in @enumerate; get a bigger
- alphabet}%
- \fi
- \char\lccode\itemno
- }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more uppercase letters in @enumerate; get a bigger
- alphabet}
- \fi
- \char\uccode\itemno
- }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments. Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
- \advance\itemno by -1
- \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble. Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-% @multitable @columnfractions .25 .3 .45
-% @item ...
-%
-% Numbers following @columnfractions are the percent of the total
-% current hsize to be used for each column. You may use as many
-% columns as desired.
-
-
-% Or use a template:
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item ...
-% using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-% @multitable {Column 1 template} {Column 2 template} {Column 3
-% template}
-% Not:
-% @multitable {Column 1 template} {Column 2 template}
-% {Column 3 template}
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item first col stuff @tab second col stuff @tab third col
-% @item
-% first col stuff
-% @tab
-% second col stuff
-% @tab
-% third col
-% @item first col stuff @tab second col stuff
-% @tab Many paragraphs of text may be used in any column.
-%
-% They will wrap at the width determined by the template.
-% @item@tab@tab This will be in third column.
-% @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-% to baseline.
-% 0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away). #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
- \global\advance\colcount by 1
- \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
- \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
- \def\firstarg{#1}%
- \ifx\firstarg\xendsetuptable
- \let\go = \relax
- \else
- \ifx\firstarg\xcolumnfractions
- \global\setpercenttrue
- \else
- \ifsetpercent
- \let\go\pickupwholefraction
- \else
- \global\advance\colcount by 1
- \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
- % separator; typically that is always in the input, anyway.
- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
- \fi
- \fi
- \ifx\go\pickupwholefraction
- % Put the argument back for the \pickupwholefraction call, so
- % we'll always have a period there to be parsed.
- \def\go{\pickupwholefraction#1}%
- \else
- \let\go = \setuptable
- \fi%
- \fi
- \go
-}
-
-% @multitable ... @end multitable definitions:
-%
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
- \vskip\parskip
- \let\item=\crcrwithfootnotes
- % A \tab used to include \hskip1sp. But then the space in a template
- % line is not enough. That is bad. So let's go back to just & until
- % we encounter the problem it was intended to solve again. --karl,
- % nathan@acm.org, 20apr99.
- \let\tab=&%
- \let\startfootins=\startsavedfootnote
- \tolerance=9500
- \hbadness=9500
- \setmultitablespacing
- \parskip=\multitableparskip
- \parindent=\multitableparindent
- \overfullrule=0pt
- \global\colcount=0
- \def\Emultitable{%
- \global\setpercentfalse
- \crcrwithfootnotes\crcr
- \egroup\egroup
- }%
- %
- % To parse everything between @multitable and @item:
- \setuptable#1 \endsetuptable
- %
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
- \everycr{\noalign{%
- %
- % \filbreak%% keeps underfull box messages off when table breaks over pages.
- % Maybe so, but it also creates really weird page breaks when the table
- % breaks over pages. Wouldn't \vfil be better? Wait until the problem
- % manifests itself, so it can be fixed for real --karl.
- \global\colcount=0\relax}}%
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
- \halign\bgroup&\global\advance\colcount by 1\relax
- \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- %
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- %
- % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- %
- % If the user has set preamble in terms of percent of \hsize we will
- % use that dimension as the width of the column, and the \leftskip
- % will keep entries from bumping into each other. Table will start at
- % left margin and final column will justify at right margin.
- %
- % Make sure we don't inherit \rightskip from the outer environment.
- \rightskip=0pt
- \ifnum\colcount=1
- % The first column will be indented with the surrounding text.
- \advance\hsize by\leftskip
- \else
- \ifsetpercent \else
- % If user has not set preamble in terms of percent of \hsize
- % we will advance \hsize by \multitablecolspace.
- \advance\hsize by \multitablecolspace
- \fi
- % In either case we will make \leftskip=\multitablecolspace:
- \leftskip=\multitablecolspace
- \fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighting sequences respectively marking
- % characters.
- \noindent\ignorespaces##\unskip\multistrut}\cr
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
-\ifdim\multitablelinespace=0pt
-\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-\global\advance\multitablelinespace by-\ht0
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-\else
-%% FIXME: what is \box0 supposed to be?
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%% If so, set to same dimension as multitablelinespace.
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi}
-
-% In case a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is
-% finished. Otherwise, the insertion is lost, it never migrates to the
-% main vertical list. --kasal, 22jan03.
-%
-\newbox\savedfootnotes
-%
-% \dotable \let's \startfootins to this, so that \dofootnote will call
-% it instead of starting the insertion right away.
-\def\startsavedfootnote{%
- \global\setbox\savedfootnotes = \vbox\bgroup
- \unvbox\savedfootnotes
-}
-\def\crcrwithfootnotes{%
- \crcr
- \ifvoid\savedfootnotes \else
- \noalign{\insert\footins{\box\savedfootnotes}}%
- \fi
-}
-
-\message{conditionals,}
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
- \let\chapter=\relax
- \let\unnumbered=\relax
- \let\top=\relax
- \let\unnumberedsec=\relax
- \let\unnumberedsection=\relax
- \let\unnumberedsubsec=\relax
- \let\unnumberedsubsection=\relax
- \let\unnumberedsubsubsec=\relax
- \let\unnumberedsubsubsection=\relax
- \let\section=\relax
- \let\subsec=\relax
- \let\subsubsec=\relax
- \let\subsection=\relax
- \let\subsubsection=\relax
- \let\appendix=\relax
- \let\appendixsec=\relax
- \let\appendixsection=\relax
- \let\appendixsubsec=\relax
- \let\appendixsubsection=\relax
- \let\appendixsubsubsec=\relax
- \let\appendixsubsubsection=\relax
- \let\contents=\relax
- \let\smallbook=\relax
- \let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-% We use \empty instead of \relax for the @def... commands, so that \end
-% doesn't throw an error. For instance:
-% @ignore
-% @deffn ...
-% @end deffn
-% @end ignore
-%
-% The @end deffn is going to get expanded, because we're trying to allow
-% nested conditionals. But we don't want to expand the actual @deffn,
-% since it might be syntactically correct and intended to be ignored.
-% Since \end checks for \relax, using \empty does not cause an error.
-%
-\def\ignoremorecommands{%
- \let\defcodeindex = \relax
- \let\defcv = \empty
- \let\defcvx = \empty
- \let\Edefcv = \empty
- \let\deffn = \empty
- \let\deffnx = \empty
- \let\Edeffn = \empty
- \let\defindex = \relax
- \let\defivar = \empty
- \let\defivarx = \empty
- \let\Edefivar = \empty
- \let\defmac = \empty
- \let\defmacx = \empty
- \let\Edefmac = \empty
- \let\defmethod = \empty
- \let\defmethodx = \empty
- \let\Edefmethod = \empty
- \let\defop = \empty
- \let\defopx = \empty
- \let\Edefop = \empty
- \let\defopt = \empty
- \let\defoptx = \empty
- \let\Edefopt = \empty
- \let\defspec = \empty
- \let\defspecx = \empty
- \let\Edefspec = \empty
- \let\deftp = \empty
- \let\deftpx = \empty
- \let\Edeftp = \empty
- \let\deftypefn = \empty
- \let\deftypefnx = \empty
- \let\Edeftypefn = \empty
- \let\deftypefun = \empty
- \let\deftypefunx = \empty
- \let\Edeftypefun = \empty
- \let\deftypeivar = \empty
- \let\deftypeivarx = \empty
- \let\Edeftypeivar = \empty
- \let\deftypemethod = \empty
- \let\deftypemethodx = \empty
- \let\Edeftypemethod = \empty
- \let\deftypeop = \empty
- \let\deftypeopx = \empty
- \let\Edeftypeop = \empty
- \let\deftypevar = \empty
- \let\deftypevarx = \empty
- \let\Edeftypevar = \empty
- \let\deftypevr = \empty
- \let\deftypevrx = \empty
- \let\Edeftypevr = \empty
- \let\defun = \empty
- \let\defunx = \empty
- \let\Edefun = \empty
- \let\defvar = \empty
- \let\defvarx = \empty
- \let\Edefvar = \empty
- \let\defvr = \empty
- \let\defvrx = \empty
- \let\Edefvr = \empty
- \let\clear = \relax
- \let\down = \relax
- \let\evenfooting = \relax
- \let\evenheading = \relax
- \let\everyfooting = \relax
- \let\everyheading = \relax
- \let\headings = \relax
- \let\include = \relax
- \let\item = \relax
- \let\lowersections = \relax
- \let\oddfooting = \relax
- \let\oddheading = \relax
- \let\printindex = \relax
- \let\pxref = \relax
- \let\raisesections = \relax
- \let\ref = \relax
- \let\set = \relax
- \let\setchapternewpage = \relax
- \let\setchapterstyle = \relax
- \let\settitle = \relax
- \let\up = \relax
- \let\verbatiminclude = \relax
- \let\xref = \relax
-}
-
-% Ignore @ignore, @ifhtml, @ifinfo, and the like.
-%
-\def\direntry{\doignore{direntry}}
-\def\documentdescriptionword{documentdescription}
-\def\documentdescription{\doignore{documentdescription}}
-\def\html{\doignore{html}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\ifplaintext{\doignore{ifplaintext}}
-\def\ifxml{\doignore{ifxml}}
-\def\ignore{\doignore{ignore}}
-\def\menu{\doignore{menu}}
-\def\xml{\doignore{xml}}
-
-% @dircategory CATEGORY -- specify a category of the dir file
-% which this file should belong to. Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define a command to swallow text until we reach `@end #1'.
- % This @ is a catcode 12 token (that is the normal catcode of @ in
- % this texinfo.tex file). We change the catcode of @ below to match.
- \long\def\doignoretext##1@end #1{\enddoignore}%
- %
- % Make sure that spaces turn into tokens that match what \doignoretext wants.
- \catcode\spaceChar = 10
- %
- % Ignore braces, too, so mismatched braces don't cause trouble.
- \catcode`\{ = 9
- \catcode`\} = 9
- %
- % We must not have @c interpreted as a control sequence.
- \catcode`\@ = 12
- %
- \def\ignoreword{#1}%
- \ifx\ignoreword\documentdescriptionword
- % The c kludge breaks documentdescription, since
- % `documentdescription' contains a `c'. Means not everything will
- % be ignored inside @documentdescription, but oh well...
- \else
- % Make the letter c a comment character so that the rest of the line
- % will be ignored. This way, the document can have (for example)
- % @c @end ifinfo
- % and the @end ifinfo will be properly ignored.
- % (We've just changed @ to catcode 12.)
- \catcode`\c = 14
- \fi
- %
- % And now expand the command defined above.
- \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
- \ifwarnedobs\relax\else
- % We need to warn folks that they may have trouble with TeX 3.0.
- % This uses \immediate\write16 rather than \message to get newlines.
- \immediate\write16{}
- \immediate\write16{WARNING: for users of Unix TeX 3.0!}
- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
- \immediate\write16{If you are running another version of TeX, relax.}
- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
- \immediate\write16{ Then upgrade your TeX installation if you can.}
- \immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)}
- \immediate\write16{If you are stuck with version 3.0, run the}
- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
- \global\warnedobstrue
- \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
- \obstexwarn
- % We must actually expand the ignored text to look for the @end
- % command, so that nested ignore constructs work. Thus, we put the
- % text into a \vbox and then do nothing with the result. To minimize
- % the chance of memory overflow, we follow the approach outlined on
- % page 401 of the TeXbook.
- %
- \setbox0 = \vbox\bgroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define `@end #1' to end the box, which will in turn undefine the
- % @end command again.
- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
- %
- % We are going to be parsing Texinfo commands. Most cause no
- % trouble when they are used incorrectly, but some commands do
- % complicated argument parsing or otherwise get confused, so we
- % undefine them.
- %
- % We can't do anything about stray @-signs, unfortunately;
- % they'll produce `undefined control sequence' errors.
- \ignoremorecommands
- %
- % Set the current font to be \nullfont, a TeX primitive, and define
- % all the font commands to also use \nullfont. We don't use
- % dummy.tfm, as suggested in the TeXbook, because some sites
- % might not have that installed. Therefore, math mode will still
- % produce output, but that should be an extremely small amount of
- % stuff compared to the main input.
- %
- \nullfont
- \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
- \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
- \let\tensf=\nullfont
- % Similarly for index fonts.
- \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
- \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
- \let\smallsf=\nullfont
- % Similarly for smallexample fonts.
- \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
- \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
- \let\smallersf=\nullfont
- %
- % Don't complain when characters are missing from the fonts.
- \tracinglostchars = 0
- %
- % Don't bother to do space factor calculations.
- \frenchspacing
- %
- % Don't report underfull hboxes.
- \hbadness = 10000
- %
- % Do minimal line-breaking.
- \pretolerance = 10000
- %
- % Do not execute instructions in @tex.
- \def\tex{\doignore{tex}}%
- % Do not execute macro definitions.
- % `c' is a comment character, so the word `macro' will get cut off.
- \def\macro{\doignore{ma}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it. Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
- \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
- \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-{
- \catcode`\_ = \active
- %
- % We might end up with active _ or - characters in the argument if
- % we're called from @code, as @code{@value{foo-bar_}}. So \let any
- % such active characters to their normal equivalents.
- \gdef\value{\begingroup
- \catcode`\-=\other \catcode`\_=\other
- \indexbreaks \let_\normalunderscore
- \valuexxx}
-}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies). Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that. The command has to be fully expandable (if the variable
-% is set), since the result winds up in the index file. This means that
-% if the variable's value contains other Texinfo commands, it's almost
-% certain it will fail (although perhaps we could fix that with
-% sufficient work to do a one-level expansion on the result, instead of
-% complete).
-%
-\def\expandablevalue#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- {[No value for ``#1'']}%
- \message{Variable `#1', used in @value, is not set.}%
- \else
- \csname SET#1\endcsname
- \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\doifset}
-\def\doifset#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \let\next=\ifsetfail
- \else
- \let\next=\ifsetsucceed
- \fi
- \next
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\doifclear}
-\def\doifclear#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \let\next=\ifclearsucceed
- \else
- \let\next=\ifclearfail
- \fi
- \next
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
-% read the text following, through the first @end iftex (etc.). Make
-% `@end iftex' (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-\defineunmatchedend{ifnotplaintext}
-
-% True conditional. Since \set globally defines its variables, we can
-% just start and end a group (to keep the @end definition undefined at
-% the outer level).
-%
-\def\conditionalsucceed#1{\begingroup
- \expandafter\def\csname E#1\endcsname{\endgroup}%
-}
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index. The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
- \fi
- \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
- \noexpand\doindex{#1}}
-}
-
-% @defindex foo == \newindex{foo}
-%
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-%
-\def\defcodeindex{\parsearg\newcodeindex}
-%
-\def\newcodeindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1
- \fi
- \expandafter\xdef\csname#1index\endcsname{%
- \noexpand\docodeindex{#1}}%
-}
-
-
-% @synindex foo bar makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-%
-% @syncodeindex foo bar similar, but put all entries made for index foo
-% inside @code.
-%
-\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-
-% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-% #3 the target index (bar).
-\def\dosynindex#1#2#3{%
- % Only do \closeout if we haven't already done it, else we'll end up
- % closing the target index.
- \expandafter \ifx\csname donesynindex#2\endcsname \undefined
- % The \closeout helps reduce unnecessary open files; the limit on the
- % Acorn RISC OS is a mere 16 files.
- \expandafter\closeout\csname#2indfile\endcsname
- \expandafter\let\csname\donesynindex#2\endcsname = 1
- \fi
- % redefine \fooindfile:
- \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
- \expandafter\let\csname#2indfile\endcsname=\temp
- % redefine \fooindex:
- \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-% and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
- \def\@{@}% change to @@ when we switch to @ as escape char in index files.
- \def\ {\realbackslash\space }%
- % Need these in case \tex is in effect and \{ is a \delimiter again.
- % But can't use \lbracecmd and \rbracecmd because texindex assumes
- % braces and backslashes are used only as delimiters.
- \let\{ = \mylbrace
- \let\} = \myrbrace
- %
- % \definedummyword defines \#1 as \realbackslash #1\space, thus
- % effectively preventing its expansion. This is used only for control
- % words, not control letters, because the \space would be incorrect
- % for control characters, but is needed to separate the control word
- % from whatever follows.
- %
- % For control letters, we have \definedummyletter, which omits the
- % space.
- %
- % These can be used both for control words that take an argument and
- % those that do not. If it is followed by {arg} in the input, then
- % that will dutifully get written to the index (or wherever).
- %
- \def\definedummyword##1{%
- \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
- }%
- \def\definedummyletter##1{%
- \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
- }%
- %
- % Do the redefinitions.
- \commondummies
-}
-
-% For the aux file, @ is the escape character. So we want to redefine
-% everything using @ instead of \realbackslash. When everything uses
-% @, this will be simpler.
-%
-\def\atdummies{%
- \def\@{@@}%
- \def\ {@ }%
- \let\{ = \lbraceatcmd
- \let\} = \rbraceatcmd
- %
- % (See comments in \indexdummies.)
- \def\definedummyword##1{%
- \expandafter\def\csname ##1\endcsname{@##1\space}%
- }%
- \def\definedummyletter##1{%
- \expandafter\def\csname ##1\endcsname{@##1}%
- }%
- %
- % Do the redefinitions.
- \commondummies
-}
-
-% Called from \indexdummies and \atdummies. \definedummyword and
-% \definedummyletter must be defined first.
-%
-\def\commondummies{%
- %
- \normalturnoffactive
- %
- % Control letters and accents.
- \definedummyletter{_}%
- \definedummyletter{,}%
- \definedummyletter{"}%
- \definedummyletter{`}%
- \definedummyletter{'}%
- \definedummyletter{^}%
- \definedummyletter{~}%
- \definedummyletter{=}%
- \definedummyword{u}%
- \definedummyword{v}%
- \definedummyword{H}%
- \definedummyword{dotaccent}%
- \definedummyword{ringaccent}%
- \definedummyword{tieaccent}%
- \definedummyword{ubaraccent}%
- \definedummyword{udotaccent}%
- \definedummyword{dotless}%
- %
- % Other non-English letters.
- \definedummyword{AA}%
- \definedummyword{AE}%
- \definedummyword{L}%
- \definedummyword{OE}%
- \definedummyword{O}%
- \definedummyword{aa}%
- \definedummyword{ae}%
- \definedummyword{l}%
- \definedummyword{oe}%
- \definedummyword{o}%
- \definedummyword{ss}%
- %
- % Although these internal commands shouldn't show up, sometimes they do.
- \definedummyword{bf}%
- \definedummyword{gtr}%
- \definedummyword{hat}%
- \definedummyword{less}%
- \definedummyword{sf}%
- \definedummyword{sl}%
- \definedummyword{tclose}%
- \definedummyword{tt}%
- %
- % Texinfo font commands.
- \definedummyword{b}%
- \definedummyword{i}%
- \definedummyword{r}%
- \definedummyword{sc}%
- \definedummyword{t}%
- %
- \definedummyword{TeX}%
- \definedummyword{acronym}%
- \definedummyword{cite}%
- \definedummyword{code}%
- \definedummyword{command}%
- \definedummyword{dfn}%
- \definedummyword{dots}%
- \definedummyword{emph}%
- \definedummyword{env}%
- \definedummyword{file}%
- \definedummyword{kbd}%
- \definedummyword{key}%
- \definedummyword{math}%
- \definedummyword{option}%
- \definedummyword{samp}%
- \definedummyword{strong}%
- \definedummyword{uref}%
- \definedummyword{url}%
- \definedummyword{var}%
- \definedummyword{w}%
- %
- % Assorted special characters.
- \definedummyword{bullet}%
- \definedummyword{copyright}%
- \definedummyword{dots}%
- \definedummyword{enddots}%
- \definedummyword{equiv}%
- \definedummyword{error}%
- \definedummyword{expansion}%
- \definedummyword{minus}%
- \definedummyword{pounds}%
- \definedummyword{point}%
- \definedummyword{print}%
- \definedummyword{result}%
- %
- % Handle some cases of @value -- where the variable name does not
- % contain - or _, and the value does not contain any
- % (non-fully-expandable) commands.
- \let\value = \expandablevalue
- %
- % Normal spaces, not active ones.
- \unsepspaces
- %
- % No macro expansion.
- \turnoffmacros
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-
-% \indexnofonts is used when outputting the strings to sort the index
-% by, and when constructing control sequence names. It eliminates all
-% control sequences and just writes whatever the best ASCII sort string
-% would be for a given command (usually its argument).
-%
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-%
-\def\indexnofonts{%
- \def\ { }%
- \def\@{@}%
- % how to handle braces?
- \def\_{\normalunderscore}%
- %
- \let\,=\asis
- \let\"=\asis
- \let\`=\asis
- \let\'=\asis
- \let\^=\asis
- \let\~=\asis
- \let\==\asis
- \let\u=\asis
- \let\v=\asis
- \let\H=\asis
- \let\dotaccent=\asis
- \let\ringaccent=\asis
- \let\tieaccent=\asis
- \let\ubaraccent=\asis
- \let\udotaccent=\asis
- \let\dotless=\asis
- %
- % Other non-English letters.
- \def\AA{AA}%
- \def\AE{AE}%
- \def\L{L}%
- \def\OE{OE}%
- \def\O{O}%
- \def\aa{aa}%
- \def\ae{ae}%
- \def\l{l}%
- \def\oe{oe}%
- \def\o{o}%
- \def\ss{ss}%
- \def\exclamdown{!}%
- \def\questiondown{?}%
- %
- % Don't no-op \tt, since it isn't a user-level command
- % and is used in the definitions of the active chars like <, >, |, etc.
- % Likewise with the other plain tex font commands.
- %\let\tt=\asis
- %
- % Texinfo font commands.
- \let\b=\asis
- \let\i=\asis
- \let\r=\asis
- \let\sc=\asis
- \let\t=\asis
- %
- \let\TeX=\indexdummytex
- \let\acronym=\asis
- \let\cite=\asis
- \let\code=\asis
- \let\command=\asis
- \let\dfn=\asis
- \let\dots=\indexdummydots
- \let\emph=\asis
- \let\env=\asis
- \let\file=\asis
- \let\kbd=\asis
- \let\key=\asis
- \let\math=\asis
- \let\option=\asis
- \let\samp=\asis
- \let\strong=\asis
- \let\uref=\asis
- \let\url=\asis
- \let\var=\asis
- \let\w=\asis
-}
-
-\let\indexbackslash=0 %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
-% Most index entries go through here, but \dosubind is the general case.
-%
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are. The main exception
-% is with defuns, which call us directly.
-%
-\def\dosubind#1#2#3{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
- \fi
- {%
- \count255=\lastpenalty
- {%
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
- \let\folio = 0% We will expand all macros now EXCEPT \folio.
- \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
- % The main index entry text.
- \toks0 = {#2}%
- %
- % If third arg is present, precede it with space in sort key.
- \def\thirdarg{#3}%
- \ifx\thirdarg\emptymacro \else
- % If the third (subentry) arg is present, add it to the index
- % line to write.
- \toks0 = \expandafter{\the\toks0 \space #3}%
- \fi
- %
- % Process the index entry with all font commands turned off, to
- % get the string to sort by.
- {\indexnofonts
- \edef\temp{\the\toks0}% need full expansion
- \xdef\indexsorttmp{\temp}%
- }%
- %
- % Set up the complete index entry, with both the sort key and
- % the original text, including any font commands. We write
- % three arguments to \entry to the .?? file (four in the
- % subentry case), texindex reduces to two when writing the .??s
- % sorted result.
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
- %
- % If a skip is the last thing on the list now, preserve it
- % by backing up by \lastskip, doing the \write, then inserting
- % the skip again. Otherwise, the whatsit generated by the
- % \write will make \lastskip zero. The result is that sequences
- % like this:
- % @end defun
- % @tindex whatever
- % @defun ...
- % will have extra space inserted, because the \medbreak in the
- % start of the @defun won't see the skip inserted by the @end of
- % the previous defun.
- %
- % But don't do any of this if we're not in vertical mode. We
- % don't want to do a \vskip and prematurely end a paragraph.
- %
- % Avoid page breaks due to these extra skips, too.
- %
- \iflinks
- \ifvmode
- \skip0 = \lastskip
- \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi
- \fi
- %
- \temp % do the write
- %
- \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
- \fi
- }%
- }%
- \penalty\count255
- }%
-}
-
-% The index entry written in the file actually looks like
-% \entry {sortstring}{page}{topic}
-% or
-% \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-% \initial {c}
-% before the first topic whose initial is c
-% \entry {topic}{pagelist}
-% for a topic that is used without subtopics
-% \primary {topic}
-% for the beginning of a topic that is used with subtopics
-% \secondary {subtopic}{pagelist}
-% for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
- \smallfonts \rm
- \tolerance = 9500
- \indexbreaks
- %
- % See if the index file exists and is nonempty.
- % Change catcode of @ here so that if the index file contains
- % \initial {@}
- % as its first line, TeX doesn't complain about mismatched braces
- % (because it thinks @} is a control sequence).
- \catcode`\@ = 11
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- \putwordIndexNonexistent
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
- \putwordIndexIsEmpty
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\rawbackslashxx}%
- \catcode`\\ = 0
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
- \enddoublecolumns
- \fi
- \fi
- \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
- % Some minor font changes for the special characters.
- \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
- %
- % Remove any glue we may have, we'll be inserting our own.
- \removelastskip
- %
- % We like breaks before the index initials, so insert a bonus.
- \penalty -300
- %
- % Typeset the initial. Making this add up to a whole number of
- % baselineskips increases the chance of the dots lining up from column
- % to column. It still won't often be perfect, because of the stretch
- % we need before each entry, but it's better.
- %
- % No shrink because it confuses \balancecolumns.
- \vskip 1.67\baselineskip plus .5\baselineskip
- \leftline{\secbf #1}%
- \vskip .33\baselineskip plus .1\baselineskip
- %
- % Do our best not to break after the initial.
- \nobreak
-}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin. It is used for index and table of contents
-% entries. The paragraph is indented by \leftskip.
-%
-\def\entry#1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
- \par
- %
- % Do not fill out the last line with white space.
- \parfillskip = 0in
- %
- % No extra space above this paragraph.
- \parskip = 0in
- %
- % Do not prefer a separate line ending with a hyphen to fewer lines.
- \finalhyphendemerits = 0
- %
- % \hangindent is only relevant when the entry text and page number
- % don't both fit on one line. In that case, bob suggests starting the
- % dots pretty far over on the line. Unfortunately, a large
- % indentation looks wrong when the entry text itself is broken across
- % lines. So we use a small indentation and put up with long leaders.
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
- \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
- % A bit of stretch before each entry for the benefit of balancing columns.
- \vskip 0pt plus1pt
- %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
- % The following is kludged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
- \def\tempb{#2}%
- \edef\tempc{\tempa}%
- \edef\tempd{\tempb}%
- \ifx\tempc\tempd\ \else%
- %
- % If we must, put the page number on a line of its own, and fill out
- % this line with blank space. (The \hfil is overwhelmed with the
- % fill leaders glue in \indexdotfill if the page number does fit.)
- \hfil\penalty50
- \null\nobreak\indexdotfill % Have leaders before the page number.
- %
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
- \ifpdf
- \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
- \else
- \ #2% The page number ends the paragraph.
- \fi
- \fi%
- \par
-\endgroup}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
- \parfillskip=0in
- \parskip=0in
- \hangindent=1in
- \hangafter=1
- \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
- \ifpdf
- \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
- \else
- #2
- \fi
- \par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
- \output = {%
- %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
- % that case we just ship out what is in \partialpage with the normal
- % output routine. Generally, \partialpage will be empty when this
- % runs and this will be a no-op. See the indexspread.tex test case.
- \ifvoid\partialpage \else
- \onepageout{\pagecontents\partialpage}%
- \fi
- %
- \global\setbox\partialpage = \vbox{%
- % Unvbox the main output page.
- \unvbox\PAGE
- \kern-\topskip \kern\baselineskip
- }%
- }%
- \eject % run that output routine to set \partialpage
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
- % execution time, so we may as well do it in one place.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
- % below is chosen so that the gutter has the same value (well, +-<1pt)
- % as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
- % been clobbered.
- %
- \doublecolumnhsize = \hsize
- \advance\doublecolumnhsize by -.04154\hsize
- \divide\doublecolumnhsize by 2
- \hsize = \doublecolumnhsize
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
- \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
- \dimen@ = \vsize
- \divide\dimen@ by 2
- \advance\dimen@ by -\ht\partialpage
- %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
- \unvbox255
- \penalty\outputpenalty
-}
-%
-% Re-output the contents of the output page -- any previous material,
-% followed by the two boxes we just split, in box0 and box2.
-\def\pagesofar{%
- \unvbox\partialpage
- %
- \hsize = \doublecolumnhsize
- \wd0=\hsize \wd2=\hsize
- \hbox to\pagewidth{\box0\hfil\box2}%
-}
-%
-% All done with double columns.
-\def\enddoublecolumns{%
- \output = {%
- % Split the last of the double-column material. Leave it on the
- % current page, no automatic page break.
- \balancecolumns
- %
- % If we end up splitting too much material for the current page,
- % though, there will be another page break right after this \output
- % invocation ends. Having called \balancecolumns once, we do not
- % want to call it again. Therefore, reset \output to its normal
- % definition right away. (We hope \balancecolumns will never be
- % called on to balance too much material, but if it is, this makes
- % the output somewhat more palatable.)
- \global\output = {\onepageout{\pagecontents\PAGE}}%
- }%
- \eject
- \endgroup % started in \begindoublecolumns
- %
- % \pagegoal was set to the doubled \vsize above, since we restarted
- % the current page. We're now back to normal single-column
- % typesetting, so reset \pagegoal to the normal \vsize (after the
- % \endgroup where \vsize got restored).
- \pagegoal = \vsize
-}
-%
-% Called at the end of the double column material.
-\def\balancecolumns{%
- \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
- \divide\dimen@ by 2 % target to split to
- %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
- {%
- \vbadness = 10000
- \loop
- \global\setbox3 = \copy0
- \global\setbox1 = \vsplit3 to \dimen@
- \ifdim\ht3>\dimen@
- \global\advance\dimen@ by 1pt
- \repeat
- }%
- %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
- %
- \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-\newcount\chapno
-\newcount\secno \secno=0
-\newcount\subsecno \subsecno=0
-\newcount\subsubsecno \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno \appendixno = `\@
-% \def\appendixletter{\char\the\appendixno}
-% We do the following for the sake of pdftex, which needs the actual
-% letter in the expansion, not just typeset.
-\def\appendixletter{%
- \ifnum\appendixno=`A A%
- \else\ifnum\appendixno=`B B%
- \else\ifnum\appendixno=`C C%
- \else\ifnum\appendixno=`D D%
- \else\ifnum\appendixno=`E E%
- \else\ifnum\appendixno=`F F%
- \else\ifnum\appendixno=`G G%
- \else\ifnum\appendixno=`H H%
- \else\ifnum\appendixno=`I I%
- \else\ifnum\appendixno=`J J%
- \else\ifnum\appendixno=`K K%
- \else\ifnum\appendixno=`L L%
- \else\ifnum\appendixno=`M M%
- \else\ifnum\appendixno=`N N%
- \else\ifnum\appendixno=`O O%
- \else\ifnum\appendixno=`P P%
- \else\ifnum\appendixno=`Q Q%
- \else\ifnum\appendixno=`R R%
- \else\ifnum\appendixno=`S S%
- \else\ifnum\appendixno=`T T%
- \else\ifnum\appendixno=`U U%
- \else\ifnum\appendixno=`V V%
- \else\ifnum\appendixno=`W W%
- \else\ifnum\appendixno=`X X%
- \else\ifnum\appendixno=`Y Y%
- \else\ifnum\appendixno=`Z Z%
- % The \the is necessary, despite appearances, because \appendixletter is
- % expanded while writing the .toc file. \char\appendixno is not
- % expandable, thus it is written literally, thus all appendixes come out
- % with the same letter (or @) in the toc without it.
- \else\char\the\appendixno
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it. @section does likewise.
-\def\thischapter{}
-\def\thissection{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \chapterzzz{#2}
-\or
- \seczzz{#2}
-\or
- \numberedsubseczzz{#2}
-\or
- \numberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \chapterzzz{#2}
- \else
- \numberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \appendixzzz{#2}
-\or
- \appendixsectionzzz{#2}
-\or
- \appendixsubseczzz{#2}
-\or
- \appendixsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \appendixzzz{#2}
- \else
- \appendixsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \unnumberedzzz{#2}
-\or
- \unnumberedseczzz{#2}
-\or
- \unnumberedsubseczzz{#2}
-\or
- \unnumberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \unnumberedzzz{#2}
- \else
- \unnumberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
- \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
- \chapmacro {#1}{\the\chapno}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- % We don't substitute the actual chapter name into \thischapter
- % because we don't want its macros evaluated now.
- \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
- \writetocentry{chap}{#1}{{\the\chapno}}
- \donoderef
- \global\let\section = \numberedsec
- \global\let\subsection = \numberedsubsec
- \global\let\subsubsection = \numberedsubsubsec
-}
-
-% we use \chapno to avoid indenting back
-\def\appendixbox#1{%
- \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
- \hbox to \wd0{#1\hss}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
- \global\advance \appendixno by 1
- \message{\putwordAppendix\space \appendixletter}%
- \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
- \writetocentry{appendix}{#1}{{\appendixletter}}
- \appendixnoderef
- \global\let\section = \appendixsec
- \global\let\subsection = \appendixsubsec
- \global\let\subsubsection = \appendixsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
-
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
- %
- % This used to be simply \message{#1}, but TeX fully expands the
- % argument to \message. Therefore, if #1 contained @-commands, TeX
- % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
- % expanded @cite (which turns out to cause errors because \cite is meant
- % to be executed, not expanded).
- %
- % Anyway, we don't want the fully-expanded definition of @cite to appear
- % as a result of the \message, we just want `@cite' itself. We use
- % \the<toks register> to achieve this: TeX expands \the<toks> only once,
- % simply yielding the contents of <toks register>. (We also do this for
- % the toc entries.)
- \toks0 = {#1}\message{(\the\toks0)}%
- %
- \unnumbchapmacro {#1}%
- \gdef\thischapter{#1}\gdef\thissection{#1}%
- \writetocentry{unnumbchap}{#1}{{\the\chapno}}
- \unnumbnoderef
- \global\let\section = \unnumberedsec
- \global\let\subsection = \unnumberedsubsec
- \global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
- \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}}
- \donoderef
- \nobreak
-}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
- \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}}
- \appendixnoderef
- \nobreak
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
- \plainsecheading {#1}\gdef\thissection{#1}%
- \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}}
- \unnumbnoderef
- \nobreak
-}
-
-% Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
- \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
- \donoderef
- \nobreak
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
- \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}}
- \appendixnoderef
- \nobreak
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
- \plainsubsecheading {#1}\gdef\thissection{#1}%
- \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
- \unnumbnoderef
- \nobreak
-}
-
-% Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
- \donoderef
- \nobreak
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
- \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
- \appendixnoderef
- \nobreak
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
- \plainsubsubsecheading {#1}\gdef\thissection{#1}%
- \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
- \unnumbnoderef
- \nobreak
-}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-% 1) We use \vbox rather than the earlier \line to permit
-% overlong headings to fold.
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
-% heading is obnoxious; this forbids it.
-% 3) Likewise, headings look best if no \parindent is used, and
-% if justification is not attempted. Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
- {\advance\chapheadingskip by 10pt \chapbreak }%
- {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
- {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
- \pchapsepmacro
- {%
- \chapfonts \rm
- \def\chapnum{#2}%
- \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 \centerparametersmaybe
- \unhbox0 #1\par}%
- }%
- \nobreak\bigskip % no page break after a chapter title
- \nobreak
-}
-
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
- \def\centerparametersmaybe{%
- \advance\rightskip by 3\rightskip
- \leftskip = \rightskip
- \parfillskip = 0pt
- }%
- \chfplain{#1}{}%
-}}
-
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\nobreak
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-
-
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
- {%
- \expandafter\advance\csname #1headingskip\endcsname by \parskip
- \csname #1headingbreak\endcsname
- }%
- {%
- % Switch to the right set of fonts.
- \csname #1fonts\endcsname \rm
- %
- % Only insert the separating space if we have a section number.
- \def\secnum{#2}%
- \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
- %
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 % zero if no section number
- \unhbox0 #3}%
- }%
- % Add extra space after the heading -- either a line space or a
- % paragraph space, whichever is more. (Some people like to set
- % \parskip to large values for some reason.) Don't allow stretch, though.
- \nobreak
- \ifdim\parskip>\normalbaselineskip
- \kern\parskip
- \else
- \kern\normalbaselineskip
- \fi
- \nobreak
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc. We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
-%
-% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}}
-% We open the .toc file for writing here instead of at @setfilename (or
-% any other fixed time) so that @contents can be anywhere in the document.
-%
-\newif\iftocfileopened
-\def\writetocentry#1#2#3{%
- \iftocfileopened\else
- \immediate\openout\tocfile = \jobname.toc
- \global\tocfileopenedtrue
- \fi
- %
- \iflinks
- \toks0 = {#2}%
- \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}%
- \temp
- \fi
- %
- % Tell \shipout to create a page destination if we're doing pdf, which
- % will be the target of the links in the table of contents. We can't
- % just do it on every page because the title pages are numbered 1 and
- % 2 (the page numbers aren't printed), and so are the first two pages
- % of the document. Thus, we'd have two destinations named `1', and
- % two named `2'.
- \ifpdf \pdfmakepagedesttrue \fi
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
-%
-\def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
- \immediate\closeout\tocfile
- %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
- \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- %
- % Roman numerals for page numbers.
- \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
-}
-
-
-% Normal (long) toc.
-\def\contents{%
- \startcontents{\putwordTOC}%
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \pdfmakeoutlines
- \endgroup
- \lastnegativepageno = \pageno
- \global\pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
- \startcontents{\putwordShortTOC}%
- %
- \let\chapentry = \shortchapentry
- \let\appendixentry = \shortappendixentry
- \let\unnumbchapentry = \shortunnumberedentry
- % We want a true roman here for the page numbers.
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf
- \let\sl=\shortcontsl \let\tt=\shortconttt
- \rm
- \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\secentry ##1##2##3##4{}
- \def\subsecentry ##1##2##3##4##5{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \let\unnumbsecentry = \secentry
- \let\unnumbsubsecentry = \subsecentry
- \let\unnumbsubsubsecentry = \subsubsecentry
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \global\pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-\ifpdf
- \pdfcatalog{/PageMode /UseOutlines}%
-\fi
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapters, in the main contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-%
-% Chapters, in the short toc.
-% See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3{%
- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
-}
-
-% Appendices, in the main contents.
-\def\appendixentry#1#2#3{%
- \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
-%
-% Appendices, in the short toc.
-\let\shortappendixentry = \shortchapentry
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-%
-\newdimen\shortappendixwidth
-%
-\def\shortchaplabel#1{%
- % This space should be enough, since a single number is .5em, and the
- % widest letter (M) is 1em, at least in the Computer Modern fonts.
- % But use \hss just in case.
- % (This space doesn't include the extra space that gets added after
- % the label; that gets put in by \shortchapentry above.)
- \dimen0 = 1em
- \hbox to \dimen0{#1\hss}%
-}
-
-% Unnumbered chapters.
-\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}}
-\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}}
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here. (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
- % Do not use \turnoffactive in these arguments. Since the toc is
- % typeset in cmr, characters such as _ would come out wrong; we
- % have to do the usual translation tricks.
- \entry{#1}{#2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-%
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
- \advance\hsize by -2\dimen2 % Rules.
- \vbox{
- \hrule height\dimen2
- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
- \kern3pt\vrule width\dimen2}% Space to right.
- \hrule height\dimen2}
- \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
- \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
- \catcode `\%=14
- \catcode `\+=\other
- \catcode `\"=\other
- \catcode `\==\other
- \catcode `\|=\other
- \catcode `\<=\other
- \catcode `\>=\other
- \escapechar=`\\
- %
- \let\b=\ptexb
- \let\bullet=\ptexbullet
- \let\c=\ptexc
- \let\,=\ptexcomma
- \let\.=\ptexdot
- \let\dots=\ptexdots
- \let\equiv=\ptexequiv
- \let\!=\ptexexclam
- \let\i=\ptexi
- \let\{=\ptexlbrace
- \let\+=\tabalign
- \let\}=\ptexrbrace
- \let\*=\ptexstar
- \let\t=\ptext
- %
- \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
- \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
- \def\@{@}%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @end lisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @end lisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments. \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output. Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is. This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical. We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip.
-%
-\def\aboveenvbreak{{%
- % =10000 instead of <10000 because of a special case in \itemzzz, q.v.
- \ifnum \lastpenalty=10000 \else
- \advance\envskipamount by \parskip
- \endgraf
- \ifdim\lastskip<\envskipamount
- \removelastskip
- % it's not a good place to break if the last penalty was \nobreak
- % or better ...
- \ifnum\lastpenalty>10000 \else \penalty-50 \fi
- \vskip\envskipamount
- \fi
- \fi
-}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
- \ctl\leaders\hrule height\circthick\hfil\ctr
- \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
- \cbl\leaders\hrule height\circthick\hfil\cbr
- \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\def\cartouche{%
-\par % can't be in the midst of a paragraph.
-\begingroup
- \lskip=\leftskip \rskip=\rightskip
- \leftskip=0pt\rightskip=0pt %we want these *outside*.
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
- \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-% side, and for 6pt waste from
-% each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
- \vbox\bgroup
- \baselineskip=0pt\parskip=0pt\lineskip=0pt
- \carttop
- \hbox\bgroup
- \hskip\lskip
- \vrule\kern3pt
- \vbox\bgroup
- \hsize=\cartinner
- \kern3pt
- \begingroup
- \baselineskip=\normbskip
- \lineskip=\normlskip
- \parskip=\normpskip
- \vskip -\parskip
-\def\Ecartouche{%
- \endgroup
- \kern3pt
- \egroup
- \kern3pt\vrule
- \hskip\rskip
- \egroup
- \cartbot
- \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
- \aboveenvbreak
- \inENV % This group ends at the end of the body
- \hfuzz = 12pt % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
- \let\par = \lisppar % don't ignore blank lines
- \obeylines % each line of input is a line of output
- \parskip = 0pt
- \parindent = 0pt
- \emergencystretch = 0pt % don't try to avoid overfull boxes
- % @cartouche defines \nonarrowing to inhibit narrowing
- % at next level down.
- \ifx\nonarrowing\relax
- \advance \leftskip by \lispnarrowing
- \exdentamount=\lispnarrowing
- \let\exdent=\nofillexdent
- \let\nonarrowing=\relax
- \fi
-}
-
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-%
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group. That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}
-
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
- \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
- \gobble % eat return
-}
-
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-
-% @smallexample and @smalllisp: use smaller fonts.
-% Originally contributed by Pavel@xerox.
-\def\smalllisp{\begingroup
- \def\Esmalllisp{\nonfillfinish\endgroup}%
- \def\Esmallexample{\nonfillfinish\endgroup}%
- \smallexamplefonts
- \lisp
-}
-\let\smallexample = \smalllisp
-
-
-% @display: same as @lisp except keep current font.
-%
-\def\display{\begingroup
- \nonfillstart
- \let\Edisplay = \nonfillfinish
- \gobble
-}
-%
-% @smalldisplay: @display plus smaller fonts.
-%
-\def\smalldisplay{\begingroup
- \def\Esmalldisplay{\nonfillfinish\endgroup}%
- \smallexamplefonts \rm
- \display
-}
-
-% @format: same as @display except don't narrow margins.
-%
-\def\format{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eformat = \nonfillfinish
- \gobble
-}
-%
-% @smallformat: @format plus smaller fonts.
-%
-\def\smallformat{\begingroup
- \def\Esmallformat{\nonfillfinish\endgroup}%
- \smallexamplefonts \rm
- \format
-}
-
-% @flushleft (same as @format).
-%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-
-% @flushright.
-%
-\def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
- \gobble
-}
-
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
- \begingroup\inENV %This group ends at the end of the @quotation body
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
- \parindent=0pt
- % We have retained a nonzero parskip for the environment, since we're
- % doing normal filling. So to avoid extra space below the environment...
- \def\Equotation{\parskip = 0pt \nonfillfinish}%
- %
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
- \ifx\nonarrowing\relax
- \advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
- \exdentamount = \lispnarrowing
- \let\nonarrowing = \relax
- \fi
-}
-
-
-% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter,
-% we need the curly braces so that makeinfo sees the @verb command, eg:
-% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
-%
-% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
-%
-% [Knuth] p.344; only we need to do the other characters Texinfo sets
-% active too. Otherwise, they get lost as the first character on a
-% verbatim line.
-\def\dospecials{%
- \do\ \do\\\do\{\do\}\do\$\do\&%
- \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
- \do\<\do\>\do\|\do\@\do+\do\"%
-}
-%
-% [Knuth] p. 380
-\def\uncatcodespecials{%
- \def\do##1{\catcode`##1=12}\dospecials}
-%
-% [Knuth] pp. 380,381,391
-% Disable Spanish ligatures ?` and !` of \tt font
-\begingroup
- \catcode`\`=\active\gdef`{\relax\lq}
-\endgroup
-%
-% Setup for the @verb command.
-%
-% Eight spaces for a tab
-\begingroup
- \catcode`\^^I=\active
- \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-\endgroup
-%
-\def\setupverb{%
- \tt % easiest (and conventionally used) font for verbatim
- \def\par{\leavevmode\endgraf}%
- \catcode`\`=\active
- \tabeightspaces
- % Respect line breaks,
- % print special symbols as themselves, and
- % make each space count
- % must do in this order:
- \obeylines \uncatcodespecials \sepspaces
-}
-
-% Setup for the @verbatim environment
-%
-% Real tab expansion
-\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-%
-\def\starttabbox{\setbox0=\hbox\bgroup}
-\begingroup
- \catcode`\^^I=\active
- \gdef\tabexpand{%
- \catcode`\^^I=\active
- \def^^I{\leavevmode\egroup
- \dimen0=\wd0 % the width so far, or since the previous tab
- \divide\dimen0 by\tabw
- \multiply\dimen0 by\tabw % compute previous multiple of \tabw
- \advance\dimen0 by\tabw % advance to next multiple of \tabw
- \wd0=\dimen0 \box0 \starttabbox
- }%
- }
-\endgroup
-\def\setupverbatim{%
- % Easiest (and conventionally used) font for verbatim
- \tt
- \def\par{\leavevmode\egroup\box0\endgraf}%
- \catcode`\`=\active
- \tabexpand
- % Respect line breaks,
- % print special symbols as themselves, and
- % make each space count
- % must do in this order:
- \obeylines \uncatcodespecials \sepspaces
- \everypar{\starttabbox}%
-}
-
-% Do the @verb magic: verbatim text is quoted by unique
-% delimiter characters. Before first delimiter expect a
-% right brace, after last delimiter expect closing brace:
-%
-% \def\doverb'{'<char>#1<char>'}'{#1}
-%
-% [Knuth] p. 382; only eat outer {}
-\begingroup
- \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
- \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-\endgroup
-%
-\def\verb{\begingroup\setupverb\doverb}
-%
-%
-% Do the @verbatim magic: define the macro \doverbatim so that
-% the (first) argument ends when '@end verbatim' is reached, ie:
-%
-% \def\doverbatim#1@end verbatim{#1}
-%
-% For Texinfo it's a lot easier than for LaTeX,
-% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-% we need not redefine '\', '{' and '}'.
-%
-% Inspired by LaTeX's verbatim command set [latex.ltx]
-%% Include LaTeX hack for completeness -- never know
-%% \begingroup
-%% \catcode`|=0 \catcode`[=1
-%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
-%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
-%% #1|endgroup|def|Everbatim[]|end[verbatim]]
-%% |endgroup
-%
-\begingroup
- \catcode`\ =\active
- \obeylines %
- % ignore everything up to the first ^^M, that's the newline at the end
- % of the @verbatim input line itself. Otherwise we get an extra blank
- % line in the output.
- \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}%
-\endgroup
-%
-\def\verbatim{%
- \def\Everbatim{\nonfillfinish\endgroup}%
- \begingroup
- \nonfillstart
- \advance\leftskip by -\defbodyindent
- \begingroup\setupverbatim\doverbatim
-}
-
-% @verbatiminclude FILE - insert text of file in verbatim environment.
-%
-% Allow normal characters that we make active in the argument (a file name).
-\def\verbatiminclude{%
- \begingroup
- \catcode`\\=\other
- \catcode`~=\other
- \catcode`^=\other
- \catcode`_=\other
- \catcode`|=\other
- \catcode`<=\other
- \catcode`>=\other
- \catcode`+=\other
- \parsearg\doverbatiminclude
-}
-\def\setupverbatiminclude{%
- \begingroup
- \nonfillstart
- \advance\leftskip by -\defbodyindent
- \begingroup\setupverbatim
-}
-%
-\def\doverbatiminclude#1{%
- % Restore active chars for included file.
- \endgroup
- \begingroup
- \let\value=\expandablevalue
- \def\thisfile{#1}%
- \expandafter\expandafter\setupverbatiminclude\input\thisfile
- \endgroup
- \nonfillfinish
- \endgroup
-}
-
-% @copying ... @end copying.
-% Save the text away for @insertcopying later. Many commands won't be
-% allowed in this context, but that's ok.
-%
-% We save the uninterpreted tokens, rather than creating a box.
-% Saving the text in a box would be much easier, but then all the
-% typesetting commands (@smallbook, font changes, etc.) have to be done
-% beforehand -- and a) we want @copying to be done first in the source
-% file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
-%
-\def\copying{\begingroup
- % Define a command to swallow text until we reach `@end copying'.
- % \ is the escape char in this texinfo.tex file, so it is the
- % delimiter for the command; @ will be the escape char when we read
- % it, but that doesn't matter.
- \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}%
- %
- % We must preserve ^^M's in the input file; see \insertcopying below.
- \catcode`\^^M = \active
- \docopying
-}
-
-% What we do to finish off the copying text.
-%
-\def\enddocopying{\endgroup\ignorespaces}
-
-% @insertcopying. Here we must play games with ^^M's. On the one hand,
-% we need them to delimit commands such as `@end quotation', so they
-% must be active. On the other hand, we certainly don't want every
-% end-of-line to be a \par, as would happen with the normal active
-% definition of ^^M. On the third hand, two ^^M's in a row should still
-% generate a \par.
-%
-% Our approach is to make ^^M insert a space and a penalty1 normally;
-% then it can also check if \lastpenalty=1. If it does, then manually
-% do \par.
-%
-% This messes up the normal definitions of @c[omment], so we redefine
-% it. Similarly for @ignore. (These commands are used in the gcc
-% manual for man page generation.)
-%
-% Seems pretty fragile, most line-oriented commands will presumably
-% fail, but for the limited use of getting the copying text (which
-% should be quite simple) inserted, we can hope it's ok.
-%
-{\catcode`\^^M=\active %
-\gdef\insertcopying{\begingroup %
- \parindent = 0pt % looks wrong on title page
- \def^^M{%
- \ifnum \lastpenalty=1 %
- \par %
- \else %
- \space \penalty 1 %
- \fi %
- }%
- %
- % Fix @c[omment] for catcode 13 ^^M's.
- \def\c##1^^M{\ignorespaces}%
- \let\comment = \c %
- %
- % Don't bother jumping through all the hoops that \doignore does, it
- % would be very hard since the catcodes are already set.
- \long\def\ignore##1\end ignore{\ignorespaces}%
- %
- \copyingtext %
-\endgroup}%
-}
-
-\message{defuns,}
-% @defun etc.
-
-% Allow user to change definition object font (\df) internally
-\def\setdeffont#1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-
-% We want ()&[] to print specially on the defun line.
-%
-\def\activeparens{%
- \catcode`\(=\active \catcode`\)=\active
- \catcode`\&=\active
- \catcode`\[=\active \catcode`\]=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc. For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
- \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
- % also in that case restore the outer-level definition of (.
- \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
- \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text. This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\let\ampnr = \&
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% Active &'s sneak into the index arguments, so make sure it's defined.
-{
- \catcode`& = \active
- \global\let& = \ampnr
-}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the function name.
-% #2 is the type of definition, such as "Function".
-%
-\def\defname#1#2{%
- % How we'll output the type name. Putting it in brackets helps
- % distinguish it from the body text that may end up on the next line
- % just below it.
- \ifempty{#2}%
- \def\defnametype{}%
- \else
- \def\defnametype{[\rm #2]}%
- \fi
- %
- % Get the values of \leftskip and \rightskip as they were outside the @def...
- \dimen2=\leftskip
- \advance\dimen2 by -\defbodyindent
- %
- % Figure out values for the paragraph shape.
- \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}%
- \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
- \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations
- \parshape 2 0in \dimen0 \defargsindent \dimen1
- %
- % Output arg 2 ("Function" or some such) but stuck inside a box of
- % width 0 so it does not interfere with linebreaking.
- \noindent
- %
- {% Adjust \hsize to exclude the ambient margins,
- % so that \rightline will obey them.
- \advance \hsize by -\dimen2
- \dimen3 = 0pt % was -1.25pc
- \rlap{\rightline{\defnametype\kern\dimen3}}%
- }%
- %
- % Allow all lines to be underfull without complaint:
- \tolerance=10000 \hbadness=10000
- \advance\leftskip by -\defbodyindent
- \exdentamount=\defbodyindent
- {\df #1}\enskip % output function name
- % \defunargs will be called next to output the arguments, if any.
-}
-
-% Common pieces to start any @def...
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence (which our caller defines).
-% #3 is the control sequence to process the header, such as \defunheader.
-%
-\def\parsebodycommon#1#2#3{%
- \begingroup\inENV
- % If there are two @def commands in a row, we'll have a \nobreak,
- % which is there to keep the function description together with its
- % header. But if there's nothing but headers, we want to allow a
- % break after all. Check for penalty 10002 (inserted by
- % \defargscommonending) instead of 10000, since the sectioning
- % commands insert a \penalty10000, and we don't want to allow a break
- % between a section heading and a defun.
- \ifnum\lastpenalty=10002 \penalty0 \fi
- \medbreak
- %
- % Define the \E... end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- %
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
-}
-
-% Common part of the \...x definitions.
-%
-\def\defxbodycommon{%
- % As with \parsebodycommon above, allow line break if we have multiple
- % x headers in a row. It's not a great place, though.
- \ifnum\lastpenalty=10000 \penalty1000 \fi
- %
- \begingroup\obeylines
-}
-
-% Process body of @defun, @deffn, @defmac, etc.
-%
-\def\defparsebody#1#2#3{%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2{\defxbodycommon \activeparens \spacesplit#3}%
- \catcode\equalChar=\active
- \begingroup\obeylines\activeparens
- \spacesplit#3%
-}
-
-% #1, #2, #3 are the common arguments (see \parsebodycommon above).
-% #4, delimited by the space, is the class name.
-%
-\def\defmethparsebody#1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}%
- \begingroup\obeylines\activeparens
- % The \empty here prevents misinterpretation of a construct such as
- % @deffn {whatever} {Enharmonic comma}
- % See comments at \deftpparsebody, although in our case we don't have
- % to remove the \empty afterwards, since it is empty.
- \spacesplit{#3{#4}}\empty
-}
-
-% Used for @deftypemethod and @deftypeivar.
-% #1, #2, #3 are the common arguments (see \defparsebody).
-% #4, delimited by a space, is the class name.
-% #5 is the method's return type.
-%
-\def\deftypemethparsebody#1#2#3#4 #5 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}%
- \begingroup\obeylines\activeparens
- \spacesplit{#3{#4}{#5}}%
-}
-
-% Used for @deftypeop. The change from \deftypemethparsebody is an
-% extra argument at the beginning which is the `category', instead of it
-% being the hardwired string `Method' or `Instance Variable'. We have
-% to account for this both in the \...x definition and in parsing the
-% input at hand. Thus also need a control sequence (passed as #5) for
-% the \E... definition to assign the category name to.
-%
-\def\deftypeopparsebody#1#2#3#4#5 #6 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 ##2 ##3 {\def#4{##1}%
- \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}%
- \begingroup\obeylines\activeparens
- \spacesplit{#3{#5}{#6}}%
-}
-
-% For @defop.
-\def\defopparsebody #1#2#3#4#5 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 ##2 {\def#4{##1}%
- \defxbodycommon \activeparens \spacesplit{#3{##2}}}%
- \begingroup\obeylines\activeparens
- \spacesplit{#3{#5}}%
-}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-%
-\def\defvarparsebody #1#2#3{%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2{\defxbodycommon \spacesplit#3}%
- \catcode\equalChar=\active
- \begingroup\obeylines
- \spacesplit#3%
-}
-
-% @defopvar.
-\def\defopvarparsebody #1#2#3#4#5 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 ##2 {\def#4{##1}%
- \defxbodycommon \spacesplit{#3{##2}}}%
- \begingroup\obeylines
- \spacesplit{#3{#5}}%
-}
-
-\def\defvrparsebody#1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
- \begingroup\obeylines
- \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument. Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name. That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
- \begingroup\obeylines
- \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any). That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
- #1{\removeemptybraces#2\relax}{#3}%
-}%
-
-% Split up #2 (the rest of the input line) at the first space token.
-% call #1 with two arguments:
-% the first is all of #2 before the space token,
-% the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-%
-{\obeylines %
- \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}%
- \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{%
- \ifx\relax #3%
- #1{#2}{}%
- \else %
- #1{#2}{#3#4}%
- \fi}%
-}
-
-% Define @defun.
-
-% This is called to end the arguments processing for all the @def... commands.
-%
-\def\defargscommonending{%
- \interlinepenalty = 10000
- \advance\rightskip by 0pt plus 1fil
- \endgraf
- \nobreak\vskip -\parskip
- \penalty 10002 % signal to \parsebodycommon.
-}
-
-% This expands the args and terminates the paragraph they comprise.
-%
-\def\defunargs#1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-{\tensl\hyphenchar\font=0}%
-#1%
-{\tensl\hyphenchar\font=45}%
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
- \defargscommonending
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
- \defargscommonending
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDeffunc}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type. #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
-\deftypefunargs {#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$.$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification. #2 is the data type. #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-% at least some C++ text from working
-\defname {\defheaderxcond#2\relax$.$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefmac}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefspec}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defop CATEGORY CLASS OPERATION ARG...
-%
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-%
-\def\defopheader#1#2#3{%
- \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry
- \begingroup
- \defname{#2}{\defoptype\ \putwordon\ #1}%
- \defunargs{#3}%
- \endgroup
-}
-
-% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
-%
-\def\deftypeop #1 {\def\deftypeopcategory{#1}%
- \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
- \deftypeopcategory}
-%
-% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
-\def\deftypeopheader#1#2#3#4{%
- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{\defheaderxcond#2\relax$.$#3}
- {\deftypeopcategory\ \putwordon\ \code{#1}}%
- \deftypefunargs{#4}%
- \endgroup
-}
-
-% @deftypemethod CLASS TYPE METHOD ARG...
-%
-\def\deftypemethod{%
- \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
- \deftypefunargs{#4}%
- \endgroup
-}
-
-% @deftypeivar CLASS TYPE VARNAME
-%
-\def\deftypeivar{%
- \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-%
-% #1 is the class name, #2 the data type, #3 the variable name.
-\def\deftypeivarheader#1#2#3{%
- \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
- \begingroup
- \defname{\defheaderxcond#2\relax$.$#3}
- {\putwordInstanceVariableof\ \code{#1}}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-%
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
- \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{#2}{\putwordMethodon\ \code{#1}}%
- \defunargs{#3}%
- \endgroup
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
- \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry
- \begingroup
- \defname{#2}{\defcvtype\ \putwordof\ #1}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-%
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-%
-\def\defivarheader#1#2#3{%
- \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index
- \begingroup
- \defname{#2}{\putwordInstanceVariableof\ #1}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defvar
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
- \defargscommonending
-}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefvar}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefopt}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type. #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
- \defargscommonending
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
- \defargscommonending
-\endgroup}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% These definitions are used if you use @defunx (etc.)
-% anywhere other than immediately after a @defun or @defunx.
-%
-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\defopx#1 {\errmessage{@defopx in invalid context}}
-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-\def\defunx#1 {\errmessage{@defunx in invalid context}}
-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
- \begingroup \newlinechar`\^^M
- % Undo catcode changes of \startcontents and \doprintindex
- \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
- % Append \endinput to make sure that TeX does not see the ending newline.
- \toks0={#1\endinput}%
- \immediate\openout\macscribble=\jobname.tmp
- \immediate\write\macscribble{\the\toks0}%
- \immediate\closeout\macscribble
- \let\xeatspaces\eatspaces
- \input \jobname.tmp
- \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-% Undo catcode changes of \startcontents and \doprintindex
-\catcode`\@=0 \catcode`\\=\other \escapechar=`\@
-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-\fi
-
-\newcount\paramno % Count of parameters
-\newtoks\macname % Macro name
-\newif\ifrecursive % Is it recursive?
-\def\macrolist{} % List of all defined macros in the form
- % \do\macro1\do\macro2...
-
-% Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
-\def\cslet#1#2{%
-\expandafter\expandafter
-\expandafter\let
-\expandafter\expandafter
-\csname#1\endcsname
-\csname#2\endcsname}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=\other \catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-
-\def\macrobodyctxt{%
- \catcode`\~=\other
- \catcode`\^=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\+=\other
- \catcode`\{=\other
- \catcode`\}=\other
- \catcode`\@=\other
- \catcode`\^^M=\other
- \usembodybackslash}
-
-\def\macroargctxt{%
- \catcode`\~=\other
- \catcode`\^=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\+=\other
- \catcode`\@=\other
- \catcode`\\=\other}
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
- \getargs{#1}% now \macname is the macname and \argl the arglist
- \ifx\argl\empty % no arguments
- \paramno=0%
- \else
- \expandafter\parsemargdef \argl;%
- \fi
- \if1\csname ismacro.\the\macname\endcsname
- \message{Warning: redefining \the\macname}%
- \else
- \expandafter\ifx\csname \the\macname\endcsname \relax
- \else \errmessage{Macro name \the\macname\space already defined}\fi
- \global\cslet{macsave.\the\macname}{\the\macname}%
- \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
- % Add the macroname to \macrolist
- \toks0 = \expandafter{\macrolist\do}%
- \xdef\macrolist{\the\toks0
- \expandafter\noexpand\csname\the\macname\endcsname}%
- \fi
- \begingroup \macrobodyctxt
- \ifrecursive \expandafter\parsermacbody
- \else \expandafter\parsemacbody
- \fi}
-
-\def\unmacro{\parsearg\dounmacro}
-\def\dounmacro#1{%
- \if1\csname ismacro.#1\endcsname
- \global\cslet{#1}{macsave.#1}%
- \global\expandafter\let \csname ismacro.#1\endcsname=0%
- % Remove the macro name from \macrolist:
- \begingroup
- \expandafter\let\csname#1\endcsname \relax
- \let\do\unmacrodo
- \xdef\macrolist{\macrolist}%
- \endgroup
- \else
- \errmessage{Macro #1 not defined}%
- \fi
-}
-
-% Called by \do from \dounmacro on each macro. The idea is to omit any
-% macro definitions that have been changed to \relax.
-%
-\def\unmacrodo#1{%
- \ifx#1\relax
- % remove this
- \else
- \noexpand\do \noexpand #1%
- \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% Parse the optional {params} list. Set up \paramno and \paramlist
-% so \defmacro knows what to do. Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
-
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
- \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-\def\parsemargdefxxx#1,{%
- \if#1;\let\next=\relax
- \else \let\next=\parsemargdefxxx
- \advance\paramno by 1%
- \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
- {\xeatspaces{\hash\the\paramno}}%
- \edef\paramlist{\paramlist\hash\the\paramno,}%
- \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-\def\defmacro{%
- \let\hash=##% convert placeholders to macro parameter chars
- \ifrecursive
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\scanmacro{\temp}}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup\noexpand\scanmacro{\temp}}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{\egroup\noexpand\scanmacro{\temp}}%
- \fi
- \else
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \expandafter\noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \fi
- \fi}
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {. If so it reads up to the closing }, if not, it reads the whole
-% line. Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
- \ifx\nchar\bgroup\else
- \expandafter\parsearg
- \fi \next}
-
-% We mant to disable all macros during \shipout so that they are not
-% expanded by \write.
-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
- \edef\next{\macrolist}\expandafter\endgroup\next}
-
-
-% @alias.
-% We need some trickery to remove the optional spaces around the equal
-% sign. Just make them active and then expand them all to nothing.
-\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-\def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{\ignoreactivespaces
-\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
- \expandafter\noexpand\csname#2\endcsname}%
-\expandafter\endgroup\next}
-
-
-\message{cross references,}
-% @xref etc.
-
-\newwrite\auxfile
-
-\newif\ifhavexrefs % True if xref values are known.
-\newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Ysectionnumberandtype}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\unnumbnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\appendixnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Yappendixletterandtype}%
- \global\let\lastnode=\relax
- \fi
-}
-
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-\newcount\savesfregister
-\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), namely NAME-title (the corresponding @chapter/etc. name),
-% NAME-pg (the page number), and NAME-snt (section number and type).
-% Called from \foonoderef.
-%
-% We have to set \indexdummies so commands such as @code in a section
-% title aren't expanded. It would be nicer not to expand the titles in
-% the first place, but there's so many layers that that is hard to do.
-%
-% Likewise, use \turnoffactive so that punctuation chars such as underscore
-% and backslash work in node names.
-%
-\def\setref#1#2{{%
- \atdummies
- \pdfmkdest{#1}%
- %
- \turnoffactive
- \dosetq{#1-title}{Ytitle}%
- \dosetq{#1-pg}{Ypagenumber}%
- \dosetq{#1-snt}{#2}%
-}}
-
-% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual. All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
- \unsepspaces
- \def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
- % Use the node name inside the square brackets.
- \def\printednodename{\ignorespaces #1}%
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
- \def\printednodename{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
- \fi%
- \fi
- \fi
- \fi
- %
- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
- % insert empty discretionaries after hyphens, which means that it will
- % not find a line break at a hyphen in a node names. Since some manuals
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
- \ifpdf
- \leavevmode
- \getfilename{#4}%
- {\turnoffactive \otherbackslash
- \ifnum\filenamelength>0
- \startlink attr{/Border [0 0 0]}%
- goto file{\the\filename.pdf} name{#1}%
- \else
- \startlink attr{/Border [0 0 0]}%
- goto name{#1}%
- \fi
- }%
- \linkcolor
- \fi
- %
- \ifdim \wd1 > 0pt
- \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
- {\turnoffactive \otherbackslash
- % Only output a following space if the -snt ref is nonempty; for
- % @unnumbered and @anchor, it won't be.
- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
- \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
- }%
- % [mynode],
- [\printednodename],\space
- % page 3
- \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
- \fi
- \endlink
-\endgroup}
-
-% \dosetq is called from \setref to do the actual \write (\iflinks).
-%
-\def\dosetq#1#2{%
- {\let\folio=0%
- \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
- \iflinks \next \fi
- }%
-}
-
-% \internalsetq{foo}{page} expands into
-% CHARACTERS @xrdef{foo}{...expansion of \page...}
-\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq.
-%
-\def\Ypagenumber{\folio}
-\def\Ytitle{\thissection}
-\def\Ynothing{}
-\def\Ysectionnumberandtype{%
- \ifnum\secno=0
- \putwordChapter@tie \the\chapno
- \else \ifnum\subsecno=0
- \putwordSection@tie \the\chapno.\the\secno
- \else \ifnum\subsubsecno=0
- \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
- \else
- \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
- \fi\fi\fi
-}
-
-\def\Yappendixletterandtype{%
- \ifnum\secno=0
- \putwordAppendix@tie @char\the\appendixno{}%
- \else \ifnum\subsecno=0
- \putwordSection@tie @char\the\appendixno.\the\secno
- \else \ifnum\subsubsecno=0
- \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
- \else
- \putwordSection@tie
- @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
- \fi\fi\fi
-}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
- \let\linenumber = \empty % Pre-3.0.
-\else
- \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
-\def\refx#1#2{%
- {%
- \indexnofonts
- \otherbackslash
- \expandafter\global\expandafter\let\expandafter\thisrefX
- \csname X#1\endcsname
- }%
- \ifx\thisrefX\relax
- % If not defined, say something at least.
- \angleleft un\-de\-fined\angleright
- \iflinks
- \ifhavexrefs
- \message{\linenumber Undefined cross reference `#1'.}%
- \else
- \ifwarnedxrefs\else
- \global\warnedxrefstrue
- \message{Cross reference values unknown; you must run TeX again.}%
- \fi
- \fi
- \fi
- \else
- % It's defined, so just use it.
- \thisrefX
- \fi
- #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.
-%
-\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname}
-
-% Read the last existing aux file, if any. No error if none exists.
-\def\readauxfile{\begingroup
- \catcode`\^^@=\other
- \catcode`\^^A=\other
- \catcode`\^^B=\other
- \catcode`\^^C=\other
- \catcode`\^^D=\other
- \catcode`\^^E=\other
- \catcode`\^^F=\other
- \catcode`\^^G=\other
- \catcode`\^^H=\other
- \catcode`\^^K=\other
- \catcode`\^^L=\other
- \catcode`\^^N=\other
- \catcode`\^^P=\other
- \catcode`\^^Q=\other
- \catcode`\^^R=\other
- \catcode`\^^S=\other
- \catcode`\^^T=\other
- \catcode`\^^U=\other
- \catcode`\^^V=\other
- \catcode`\^^W=\other
- \catcode`\^^X=\other
- \catcode`\^^Z=\other
- \catcode`\^^[=\other
- \catcode`\^^\=\other
- \catcode`\^^]=\other
- \catcode`\^^^=\other
- \catcode`\^^_=\other
- % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
- % in xref tags, i.e., node names. But since ^^e4 notation isn't
- % supported in the main text, it doesn't seem desirable. Furthermore,
- % that is not enough: for node names that actually contain a ^
- % character, we would end up writing a line like this: 'xrdef {'hat
- % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
- % argument, and \hat is not an expandable control sequence. It could
- % all be worked out, but why? Either we support ^^ or we don't.
- %
- % The other change necessary for this was to define \auxhat:
- % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
- % and then to call \auxhat in \setq.
- %
- \catcode`\^=\other
- %
- % Special characters. Should be turned off anyway, but...
- \catcode`\~=\other
- \catcode`\[=\other
- \catcode`\]=\other
- \catcode`\"=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
- \catcode`\%=\other
- \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- %
- % Make the characters 128-255 be printing characters
- {%
- \count 1=128
- \def\loop{%
- \catcode\count 1=\other
- \advance\count 1 by 1
- \ifnum \count 1<256 \loop \fi
- }%
- }%
- %
- % Turn off \ as an escape so we do not lose on
- % entries which were dumped with control sequences in their names.
- % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^
- % Reference to such entries still does not work the way one would wish,
- % but at least they do not bomb out when the aux file is read in.
- \catcode`\\=\other
- %
- % @ is our escape character in .aux files.
- \catcode`\{=1
- \catcode`\}=2
- \catcode`\@=0
- %
- \openin 1 \jobname.aux
- \ifeof 1 \else
- \closein 1
- \input \jobname.aux
- \global\havexrefstrue
- \global\warnedobstrue
- \fi
- % Open the new aux file. TeX will close it automatically at exit.
- \openout\auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes. Otherwise like plain.
-\gdef\footnote{%
- \global\advance\footnoteno by \@ne
- \edef\thisfootno{$^{\the\footnoteno}$}%
- %
- % In case the footnote comes at the end of a sentence, preserve the
- % extra spacing after we do the footnote number.
- \let\@sf\empty
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
- %
- % Remove inadvertent blank space before typesetting the footnote number.
- \unskip
- \thisfootno\@sf
- \dofootnote
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter. Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
-% the footnote is read. --karl, 16nov96.
-%
-% The start of the footnote looks usually like this:
-\gdef\startfootins{\insert\footins\bgroup}
-%
-% ... but this macro is redefined inside @multitable.
-%
-\gdef\dofootnote{%
- \startfootins
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
- \hsize=\pagewidth
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox
- \floatingpenalty\@MM
- \leftskip\z@skip
- \rightskip\z@skip
- \spaceskip\z@skip
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
- \smallfonts \rm
- %
- % Because we use hanging indentation in footnotes, a @noindent appears
- % to exdent this text, so make it be a no-op. makeinfo does not use
- % hanging indentation so @noindent can still be needed within footnote
- % text after an @example or the like (not that this is good style).
- \let\noindent = \relax
- %
- % Hang the footnote text off the number. Use \everypar in case the
- % footnote extends for more than one paragraph.
- \everypar = {\hang}%
- \textindent{\thisfootno}%
- %
- % Don't crash into the line above the footnote text. Since this
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
- \futurelet\next\fo@t
-}
-}%end \catcode `\@=11
-
-% @| inserts a changebar to the left of the current line. It should
-% surround any changed text. This approach does *not* work if the
-% change spans more than two lines of output. To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
- % \vadjust can only be used in horizontal mode.
- \leavevmode
- %
- % Append this vertical mode material after the current line in the output.
- \vadjust{%
- % We want to insert a rule with the height and depth of the current
- % leading; that is exactly what \strutbox is supposed to record.
- \vskip-\baselineskip
- %
- % \vadjust-items are inserted at the left edge of the type. So
- % the \llap here moves out into the left-hand margin.
- \llap{%
- %
- % For a thicker or thinner bar, change the `1pt'.
- \vrule height\baselineskip width1pt
- %
- % This is the space between the bar and the text.
- \hskip 12pt
- }%
- }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @image. We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front. If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
- \closein 1
- % Do not bother showing banner with epsf.tex v2.7k (available in
- % doc/epsf.tex and on ctan).
- \def\epsfannounce{\toks0 = }%
- \input epsf.tex
-\fi
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
- it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
- \errhelp = \noepsfhelp
- \errmessage{epsf.tex not found, images will be ignored}%
- \global\warnednoepsftrue
- \fi
- \else
- \imagexxx #1,,,,,\finish
- \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is (ignored optional) html alt text.
-% #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing this stuff.
-\newif\ifimagevmode
-\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
- \catcode`\^^M = 5 % in case we're inside an example
- \normalturnoffactive % allow _ et al. in names
- % If the image is by itself, center it.
- \ifvmode
- \imagevmodetrue
- \nobreak\bigskip
- % Usually we'll have text after the image which will insert
- % \parskip glue, so insert it here too to equalize the space
- % above and below.
- \nobreak\vskip\parskip
- \nobreak
- \line\bgroup\hss
- \fi
- %
- % Output the image.
- \ifpdf
- \dopdfimage{#1}{#2}{#3}%
- \else
- % \epsfbox itself resets \epsf?size at each figure.
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
- \epsfbox{#1.eps}%
- \fi
- %
- \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
-\endgroup}
-
-
-\message{localization,}
-% and i18n.
-
-% @documentlanguage is usually given very early, just after
-% @setfilename. If done too late, it may not override everything
-% properly. Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
-%
-\def\documentlanguage{\parsearg\dodocumentlanguage}
-\def\dodocumentlanguage#1{%
- \tex % read txi-??.tex file in plain TeX.
- % Read the file if it exists.
- \openin 1 txi-#1.tex
- \ifeof1
- \errhelp = \nolanghelp
- \errmessage{Cannot read language file txi-#1.tex}%
- \let\temp = \relax
- \else
- \def\temp{\input txi-#1.tex }%
- \fi
- \temp
- \endgroup
-}
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty. Maybe you need to install it? In the current directory
-should work if nowhere else does.}
-
-
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
-
-
-% Page size parameters.
-%
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything. We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize. We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
- \ifx\emergencystretch\thisisundefined
- % Allow us to assign to \emergencystretch anyway.
- \def\emergencystretch{\dimen0}%
- \else
- \emergencystretch = .15\hsize
- \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
-% physical page width.
-%
-% We also call \setleading{\textleading}, so the caller should define
-% \textleading. The caller should also set \parskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6#7#8{%
- \voffset = #3\relax
- \topskip = #6\relax
- \splittopskip = \topskip
- %
- \vsize = #1\relax
- \advance\vsize by \topskip
- \outervsize = \vsize
- \advance\outervsize by 2\topandbottommargin
- \pageheight = \vsize
- %
- \hsize = #2\relax
- \outerhsize = \hsize
- \advance\outerhsize by 0.5in
- \pagewidth = \hsize
- %
- \normaloffset = #4\relax
- \bindingoffset = #5\relax
- %
- \ifpdf
- \pdfpageheight #7\relax
- \pdfpagewidth #8\relax
- \fi
- %
- \setleading{\textleading}
- %
- \parindent = \defaultparindent
- \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
- \textleading = 13.2pt
- %
- % If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}%
- {\voffset}{.25in}%
- {\bindingoffset}{36pt}%
- {11in}{8.5in}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-\def\smallbook{{\globaldefs = 1
- \parskip = 2pt plus 1pt
- \textleading = 12pt
- %
- \internalpagesizes{7.5in}{5in}%
- {\voffset}{.25in}%
- {\bindingoffset}{16pt}%
- {9.25in}{7in}%
- %
- \lispnarrowing = 0.3in
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
- \defbodyindent = .5cm
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
- \textleading = 13.2pt
- %
- % Double-side printing via postscript on Laserjet 4050
- % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
- % To change the settings for a different printer or situation, adjust
- % \normaloffset until the front-side and back-side texts align. Then
- % do the same for \bindingoffset. You can set these for testing in
- % your texinfo source file like this:
- % @tex
- % \global\normaloffset = -6mm
- % \global\bindingoffset = 10mm
- % @end tex
- \internalpagesizes{51\baselineskip}{160mm}
- {\voffset}{\hoffset}%
- {\bindingoffset}{44pt}%
- {297mm}{210mm}%
- %
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
- \defbodyindent = 5mm
-}}
-
-% Use @afivepaper to print on European A5 paper.
-% From romildo@urano.iceb.ufop.br, 2 July 2000.
-% He also recommends making @example and @lisp be small.
-\def\afivepaper{{\globaldefs = 1
- \parskip = 2pt plus 1pt minus 0.1pt
- \textleading = 12.5pt
- %
- \internalpagesizes{160mm}{120mm}%
- {\voffset}{\hoffset}%
- {\bindingoffset}{8pt}%
- {210mm}{148mm}%
- %
- \lispnarrowing = 0.2in
- \tolerance = 800
- \hfuzz = 1.2pt
- \contentsrightmargin = 0pt
- \defbodyindent = 2mm
- \tableindent = 12mm
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.
-\def\afourlatex{{\globaldefs = 1
- \afourpaper
- \internalpagesizes{237mm}{150mm}%
- {\voffset}{4.6mm}%
- {\bindingoffset}{7mm}%
- {297mm}{210mm}%
- %
- % Must explicitly reset to 0 because we call \afourpaper.
- \globaldefs = 0
-}}
-
-% Use @afourwide to print on A4 paper in landscape format.
-\def\afourwide{{\globaldefs = 1
- \afourpaper
- \internalpagesizes{241mm}{165mm}%
- {\voffset}{-2.95mm}%
- {\bindingoffset}{7mm}%
- {297mm}{210mm}%
- \globaldefs = 0
-}}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
- \globaldefs = 1
- %
- \parskip = 3pt plus 2pt minus 1pt
- \setleading{\textleading}%
- %
- \dimen0 = #1
- \advance\dimen0 by \voffset
- %
- \dimen2 = \hsize
- \advance\dimen2 by \normaloffset
- %
- \internalpagesizes{#1}{\hsize}%
- {\voffset}{\normaloffset}%
- {\bindingoffset}{44pt}%
- {\dimen0}{\dimen2}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}%$ font-lock fix
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise. Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font. Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts. But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \rawbackslashxx outputs one backslash character in current font,
-% as in \char`\\.
-\global\chardef\rawbackslashxx=`\\
-
-% \rawbackslash defines an active \ to do \rawbackslashxx.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.
-{\catcode`\\=\active
- @gdef@rawbackslash{@let\=@rawbackslashxx}
- @gdef@otherbackslash{@let\=@realbackslash}
-}
-
-% \realbackslash is an actual character `\' with catcode other.
-{\catcode`\\=\other @gdef@realbackslash{\}}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{%
- @let"=@normaldoublequote
- @let\=@realbackslash
- @let~=@normaltilde
- @let^=@normalcaret
- @let_=@normalunderscore
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
- @let+=@normalplus
- @let$=@normaldollar %$ font-lock fix
-}
-
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'. (Thus, \ is not expandable when this is in
-% effect.)
-%
-@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
- @ifx\@eatinput @let\ = @normalbackslash @fi
- @catcode`+=@active
- @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
-
-@c Set initial fonts.
-@textfonts
-@rm
-
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
-@c End:
--- /dev/null
+texinfo.tex.20030205
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+# ash -- "Adventure shell"
+# last edit: 86/04/21 D A Gwyn
+# SCCS ID: @(#)ash.sh 1.4
+
+OPATH=$PATH
+
+ask()
+{
+ echo -n "$@" '[y/n] '
+ read ans
+
+ case "$ans" in
+ y*|Y*)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+CAT=${PAGER:-more}
+
+ash_inst()
+{
+ cat <<- EOF
+
+ Instructions for the Adventure shell
+
+ Welcome to the Adventure shell! In this exploration of the UNIX file
+ system, I will act as your eyes and hands. As you move around, I will
+ describe whatever is visible and will carry out your commands. The
+ general form of a command is
+ Verb Object Extra_stuff.
+ Most commands pay no attention to the "Extra_stuff", and many do not
+ need an "Object". A typical command is
+ get all
+ which picks up all files in the current "room" (directory). You can
+ find out what you are carrying by typing the command
+ inventory
+ The command "help" results in a full description of all commands that I
+ understand. To quit the Adventure shell, type
+ quit
+
+ There are UNIX monsters lurking in the background. These are also
+ known as "commands with arguments".
+
+ Good luck!
+ EOF
+}
+
+ash_help()
+{
+echo "I understand the following commands (synonyms in parentheses):"
+echo ""
+
+echo "change OBJECT to NEW_NAME changes the name of the object"
+echo "clone OBJECT as NEW_NAME duplicates the object"
+echo "drop OBJECTS leaves the objects in the room"
+echo "enter (go) PASSAGE takes the labeled passage"
+echo "examine OBJECTS describes the objects in detail"
+echo "feed OBJECT to MONSTER stuffs the object into a UNIX monster"
+echo "get (take) OBJECTS picks up the specified objects"
+echo "gripe (bug) report a problem with the Adventure shell"
+echo "help prints this summary"
+echo "inventory (i) tells what you are carrying"
+echo "kill (destroy) OBJECTS destroys the objects"
+echo "look (l) describes the room, including hidden objects"
+echo "open (read) OBJECT shows the contents of an object"
+echo "quit (exit) leaves the Adventure shell"
+echo "resurrect OBJECTS attempts to restore dead objects"
+echo "steal OBJECT from MONSTER obtains the object from a UNIX monster"
+echo "throw OBJECT at daemon feeds the object to the printer daemon"
+echo "up takes the overhead passage"
+echo "wake MONSTER awakens a UNIX monster"
+echo "where (w) tells you where you are"
+echo "xyzzy moves you to your home"
+}
+
+MAINT=chet@ins.cwru.edu
+
+PATH=/usr/ucb:/bin:/usr/bin:/usr/local/bin:.
+export PATH
+
+trap 'echo Ouch!' 2 3
+#trap '' 18 # disable Berkeley job control
+
+ash_lk(){ echo " $1 " | fgrep " $2 " >&- 2>&-; }
+ash_pr(){ echo $* | tr ' ' '\012' | pr -5 -t -w75 -l$[ ( $# + 4 ) / 5 ]; }
+ash_rm(){ echo " $1 " | sed -e "s/ $2 / /" -e 's/^ //' -e 's/ $//'; }
+
+# enable history, bang history expansion, and emacs editing
+set -o history
+set -o histexpand
+set -o emacs
+
+cd
+LIM=.limbo # $HOME/$LIM contains "destroyed" objects
+mkdir $LIM >&- 2>&-
+KNAP=.knapsack # $HOME/$KNAP contains objects being "carried"
+if [ ! -d $KNAP ]
+then mkdir $KNAP >&- 2>&-
+ if [ $? = 0 ]
+ then echo 'You found a discarded empty knapsack.'
+ else echo 'You have no knapsack to carry things in.'
+ exit 1
+ fi
+else echo 'One moment while I peek in your old knapsack...'
+fi
+
+kn=`echo \`ls -a $KNAP | sed -e '/^\.$/d' -e '/^\.\.$/d'\``
+
+if ask 'Welcome to the Adventure shell! Do you need instructions?'
+then
+ ash_inst
+ echo -n 'Type a newline to continue: '
+ read
+fi
+
+wiz=false
+cha=false
+prev=$LIM
+while :
+do room=`pwd`
+ if [ $room != $prev ]
+ then if [ $room = $HOME ]
+ then echo 'You are in your own home.'
+ else echo "You have entered $room."
+ fi
+ exs=
+ obs=
+ hexs=
+ hobs=
+ f=false
+ for i in `ls -a`
+ do case $i in
+ .|..) ;;
+ .*) if [ -f $i ]
+ then hobs="$hobs $i"
+ elif [ -d $i ]
+ then hexs="$hexs $i"
+ else f=true
+ fi
+ ;;
+ *) if [ -f $i ]
+ then obs="$obs $i"
+ elif [ -d $i ]
+ then exs="$exs $i"
+ else f=true
+ fi
+ ;;
+ esac
+ done
+ if [ "$obs" ]
+ then echo 'This room contains:'
+ ash_pr $obs
+ else echo 'The room looks empty.'
+ fi
+ if [ "$exs" ]
+ then echo 'There are exits labeled:'
+ ash_pr $exs
+ echo 'as well as a passage overhead.'
+ else echo 'There is a passage overhead.'
+ fi
+ if sh -c $f
+ then echo 'There are shadowy figures in the corner.'
+ fi
+ prev=$room
+ fi
+
+ read -e -p '-advsh> ' verb obj x # prompt is '-advsh> '
+ if [ $? != 0 ]
+ then verb=quit # EOF
+ fi
+
+ case $verb in
+ change) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then set -- $x
+ case "$1" in
+ to) if [ "$2" ]
+ then if [ -f $2 ]
+ then echo "You must destroy $2 first."
+ set --
+ fi
+ if [ "$2" ]
+ then if mv $obj $2 >&- 2>&-
+ then echo "The $obj shimmers and turns into $2."
+ obs=`ash_rm "$2 $obs" "$obj"`
+ else echo "There is a cloud of smoke but the $obj is unchanged."
+ fi
+ fi
+ else echo 'To what?'
+ fi
+ ;;
+ *) echo "Change $obj to what?"
+ ;;
+ esac
+ else if ash_lk "$kn" "$obj"
+ then echo 'You must drop it first.'
+ else echo "I see no $obj here."
+ fi
+ fi
+ else echo 'Change what?'
+ fi
+ ;;
+ clone) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then if [ ! -r $obj ]
+ then echo "The $obj does not wish to be cloned."
+ else set -- $x
+ case "$1" in
+ as) if [ "$2" ]
+ then if [ -f $2 ]
+ then echo "You must destroy $2 first."
+ else if cp $obj $2 >&- 2>&-
+ then echo "Poof! When the smoke clears, you see the new $2."
+ obs="$obs $2"
+ else echo 'You hear a dull thud but no clone appears.'
+ fi
+ fi
+ else echo 'As what?'
+ fi
+ ;;
+ *) echo "Clone $obj as what?"
+ ;;
+ esac
+ fi
+ else if ash_lk "$kn" "$obj"
+ then echo 'You must drop it first.'
+ else echo "I see no $obj here."
+ fi
+ fi
+ else echo 'Clone what?'
+ fi
+ ;;
+ drop) if [ "$obj" ]
+ then for it in $obj $x
+ do if ash_lk "$kn" "$it"
+ then if [ -w $it ]
+ then echo "You must destroy $it first."
+ else if mv $HOME/$KNAP/$it $it >&- 2>&-
+ then echo "$it: dropped."
+ kn=`ash_rm "$kn" "$it"`
+ obs=`echo $it $obs`
+ else echo "The $it is caught in your knapsack."
+ fi
+ fi
+ else echo "You're not carrying the $it!"
+ fi
+ done
+ else echo 'Drop what?'
+ fi
+ ;;
+ enter|go) if [ "$obj" ]
+ then if [ $obj != up ]
+ then if ash_lk "$exs $hexs" "$obj"
+ then if [ -x $obj ]
+ then if cd $obj
+ then echo 'You squeeze through the passage.'
+ else echo "You can't go that direction."
+ fi
+ else echo 'An invisible force blocks your way.'
+ fi
+ else echo 'I see no such passage.'
+ fi
+ else if cd ..
+ then echo 'You struggle upwards.'
+ else echo "You can't reach that high."
+ fi
+ fi
+ else echo 'Which passage?'
+ fi
+ ;;
+ examine) if [ "$obj" ]
+ then if [ $obj = all ]
+ then $obj=`echo $obs $exs`
+ x=
+ fi
+ for it in $obj $x
+ do if ash_lk "$obs $hobs $exs $hexs" "$it"
+ then echo "Upon close inspection of the $it, you see:"
+ ls -ld $it 2>&-
+ if [ $? != 0 ]
+ then echo "-- when you look directly at the $it, it vanishes."
+ fi
+ else if ash_lk "$kn" "$it"
+ then echo 'You must drop it first.'
+ else echo "I see no $it here."
+ fi
+ fi
+ done
+ else echo 'Examine what?'
+ fi
+ ;;
+ feed) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then set -- $x
+ case "$1" in
+ to) if [ "$2" ]
+ then shift
+ if PATH=$OPATH $* <$obj 2>&-
+ then echo "The $1 monster devours your $obj."
+ if rm -f $obj >&- 2>&-
+ then obs=`ash_rm "$obs" "$obj"`
+ else echo 'But he spits it back up.'
+ fi
+ else echo "The $1 monster holds his nose in disdain."
+ fi
+ else echo 'To what?'
+ fi
+ ;;
+ *) echo "Feed $obj to what?"
+ ;;
+ esac
+ else if ash_lk "$kn" "$obj"
+ then echo 'You must drop it first.'
+ else echo "I see no $obj here."
+ fi
+ fi
+ else echo 'Feed what?'
+ fi
+ ;;
+ get|take) if [ "$obj" ]
+ then if [ $obj = all ]
+ then obj="$obs"
+ x=
+ fi
+ for it in $obj $x
+ do if ash_lk "$obs $hobs" "$it"
+ then if ash_lk "$kn" "$it"
+ then echo 'You already have one.'
+ else if mv $it $HOME/$KNAP/$it >&- 2>&-
+ then echo "$it: taken."
+ kn="$it $kn"
+ obs=`ash_rm "$obs" "$it"`
+ else echo "The $it is too heavy."
+ fi
+ fi
+ else echo "I see no $it here."
+ fi
+ done
+ else echo 'Get what?'
+ fi
+ ;;
+ gripe|bug) echo 'Please describe the problem and your situation at the time it failed.\nEnd the bug report with a line containing just a Ctrl-D.'
+ cat | mail $MAINT -s 'ash bug'
+ echo 'Thank you!'
+ ;;
+ help) ash_help
+ ;;
+ inventory|i) if [ "$kn" ]
+ then echo 'Your knapsack contains:'
+ ash_pr $kn
+ else echo 'You are poverty-stricken.'
+ fi
+ ;;
+ kill|destroy) if [ "$obj" ]
+ then if [ $obj = all ]
+ then x=
+ if ask "Do you really want to attempt to $verb them all?"
+ then obj=`echo $obs`
+ else echo 'Chicken!'
+ obj=
+ fi
+ fi
+ for it in $obj $x
+ do if ash_lk "$obs $hobs" "$it"
+ then if mv $it $HOME/$LIM <&- >&- 2>&-
+ then if [ $verb = kill ]
+ then echo "The $it cannot defend himself; he dies."
+ else echo "You have destroyed the $it; it vanishes."
+ fi
+ obs=`ash_rm "$obs" "$it"`
+ else if [ $verb = kill ]
+ then echo "Your feeble blows are no match for the $it."
+ else echo "The $it is indestructible."
+ fi
+ fi
+ else if ash_lk "$kn" "$it"
+ then echo "You must drop the $it first."
+ found=false
+ else echo "I see no $it here."
+ fi
+ fi
+ done
+ else echo 'Kill what?'
+ fi
+ ;;
+ look|l) obs=`echo $obs $hobs`
+ hobs=
+ if [ "$obs" ]
+ then echo 'The room contains:'
+ ash_pr $obs
+ else echo 'The room is empty.'
+ fi
+ exs=`echo $exs $hexs`
+ hexs=
+ if [ "$exs" ]
+ then echo 'There are exits plainly labeled:'
+ ash_pr $exs
+ echo 'and a passage directly overhead.'
+ else echo 'The only exit is directly overhead.'
+ fi
+ ;;
+ magic) if [ "$obj" = mode ]
+ then if sh -c $cha
+ then echo 'You had your chance and you blew it.'
+ else if ask 'Are you a wizard?'
+ then echo -n 'Prove it! Say the magic word: '
+ read obj
+ if [ "$obj" = armadillo ]
+ then echo 'Yes, master!!'
+ wiz=true
+ else echo "Homie says: I don't think so"
+ cha=true
+ fi
+ else echo "I didn't think so."
+ fi
+ fi
+ else echo 'Nice try.'
+ fi
+ ;;
+ open|read) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then if [ -r $obj ]
+ then if [ -s $obj ]
+ then echo "Opening the $obj reveals:"
+ $CAT < $obj
+ if [ $? != 0 ]
+ then echo '-- oops, you lost the contents!'
+ fi
+ else echo "There is nothing inside the $obj."
+ fi
+ else echo "You do not have the proper tools to open the $obj."
+ fi
+ else if ash_lk "$kn" "$obj"
+ then echo 'You must drop it first.'
+ found=false
+ else echo "I see no $obj here."
+ fi
+ fi
+ else echo 'Open what?'
+ fi
+ ;;
+ quit|exit) if ask 'Do you really want to quit now?'
+ then if [ "$kn" ]
+ then echo 'The contents of your knapsack will still be there next time.'
+ fi
+ rm -rf $HOME/$LIM
+ echo 'See you later!'
+ exit 0
+ fi
+ ;;
+ resurrect) if [ "$obj" ]
+ then for it in $obj $x
+ do if ash_lk "$obs $hobs" "$it"
+ then echo "The $it is already alive and well."
+ else if mv $HOME/$LIM/$it $it <&- >&- 2>&-
+ then echo "The $it staggers to his feet."
+ obs=`echo $it $obs`
+ else echo "There are sparks but no $it appears."
+ fi
+ fi
+ done
+ else echo 'Resurrect what?'
+ fi
+ ;;
+ steal) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then echo 'There is already one here.'
+ else set -- $x
+ case "$1" in
+ from) if [ "$2" ]
+ then shift
+ if PATH=$OPATH $* >$obj 2>&-
+ then echo "The $1 monster drops the $obj."
+ obs=`echo $obj $obs`
+ else echo "The $1 monster runs away as you approach."
+ rm -f $obj >&- 2>&-
+ fi
+ else echo 'From what?'
+ fi
+ ;;
+ *) echo "Steal $obj from what?"
+ ;;
+ esac
+ fi
+ else echo 'Steal what?'
+ fi
+ ;;
+ throw) if [ "$obj" ]
+ then if ash_lk "$obs $hobs" "$obj"
+ then set -- $x
+ case "$1" in
+ at) case "$2" in
+ daemon) if sh -c "lpr -r $obj"
+ then echo "The daemon catches the $obj, turns it into paper,\nand leaves it in the basket."
+ obs=`ash_rm "$obs" "$obj"`
+ else echo "The daemon is nowhere to be found."
+ fi
+ ;;
+ *) echo 'At what?'
+ ;;
+ esac
+ ;;
+ *) echo "Throw $obj at what?"
+ ;;
+ esac
+ else if ash_lk "$kn" "$obj"
+ then echo 'It is in your knapsack.'
+ found=false
+ else echo "I see no $obj here."
+ fi
+ fi
+ else echo 'Throw what?'
+ fi
+ ;;
+ u|up) if cd ..
+ then echo 'You pull yourself up a level.'
+ else echo "You can't reach that high."
+ fi
+ ;;
+ wake) if [ "$obj" ]
+ then echo "You awaken the $obj monster:"
+ PATH=$OPATH $obj $x
+ echo 'The monster slithers back into the darkness.'
+ else echo 'Wake what?'
+ fi
+ ;;
+ w|where) echo "You are in $room."
+ ;;
+ xyzzy) if cd
+ then echo 'A strange feeling comes over you.'
+ else echo 'Your spell fizzles out.'
+ fi
+ ;;
+ *) if [ "$verb" ]
+ then if sh -c $wiz
+ then PATH=$OPATH $verb $obj $x
+ else echo "I don't know how to \"$verb\"."
+ echo 'Type "help" for assistance.'
+ fi
+ else echo 'Say something!'
+ fi
+ ;;
+ esac
+done
#undef xstrchr
extern char *xstrchr __P((const char *, int));
+/* declarations for functions defined in lib/sh/zcatfd.c */
+extern int zcatfd __P((int, int, char *));
+
/* declarations for functions defined in lib/sh/zread.c */
extern ssize_t zread __P((int, char *, size_t));
extern ssize_t zreadintr __P((int, char *, size_t));
#include "bashintl.h"
#include "shell.h"
+#include "test.h"
+
#include <tilde/tilde.h>
#if !defined (errno)
--- /dev/null
+/* memalloc.h -- consolidate code for including alloca.h or malloc.h and
+ defining alloca. */
+
+/* Copyright (C) 1993 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 2, 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; see the file COPYING. If not, write to the Free Software
+ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#if !defined (_MEMALLOC_H_)
+# define _MEMALLOC_H_
+
+#if defined (sparc) && defined (sun) && !defined (HAVE_ALLOCA_H)
+# define HAVE_ALLOCA_H
+#endif
+
+#if defined (__GNUC__) && !defined (HAVE_ALLOCA)
+# define HAVE_ALLOCA
+#endif
+
+#if defined (HAVE_ALLOCA_H) && !defined (HAVE_ALLOCA)
+# define HAVE_ALLOCA
+#endif /* HAVE_ALLOCA_H && !HAVE_ALLOCA */
+
+#if defined (__GNUC__) && !defined (C_ALLOCA)
+# undef alloca
+# define alloca __builtin_alloca
+#else /* !__GNUC__ || C_ALLOCA */
+# if defined (HAVE_ALLOCA_H) && !defined (C_ALLOCA)
+# if defined (IBMESA)
+# include <malloc.h>
+# else /* !IBMESA */
+# include <alloca.h>
+# endif /* !IBMESA */
+# else /* !HAVE_ALLOCA_H || C_ALLOCA */
+# if defined (__hpux) && defined (__STDC__) && !defined (alloca)
+extern void *alloca ();
+# else
+# if !defined (alloca)
+extern char *alloca ();
+# endif /* !alloca */
+# endif /* !__hpux || !__STDC__ && !alloca */
+# endif /* !HAVE_ALLOCA_H || C_ALLOCA */
+#endif /* !__GNUC__ || C_ALLOCA */
+
+#endif /* _MEMALLOC_H_ */
--- /dev/null
+/* malloc.c - dynamic memory allocation for bash. */
+
+/* Copyright (C) 1985, 1987, 1997 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+In other words, you are welcome to use, share and improve this program.
+You are forbidden to forbid anyone else to use, share and improve
+what you give them. Help stamp out software-hoarding! */
+
+/*
+ * @(#)nmalloc.c 1 (Caltech) 2/21/82
+ *
+ * U of M Modified: 20 Jun 1983 ACT: strange hacks for Emacs
+ *
+ * Nov 1983, Mike@BRL, Added support for 4.1C/4.2 BSD.
+ *
+ * This is a very fast storage allocator. It allocates blocks of a small
+ * number of different sizes, and keeps free lists of each size. Blocks
+ * that don't exactly fit are passed up to the next larger size. In this
+ * implementation, the available sizes are (2^n)-4 (or -16) bytes long.
+ * This is designed for use in a program that uses vast quantities of
+ * memory, but bombs when it runs out. To make it a little better, it
+ * warns the user when he starts to get near the end.
+ *
+ * June 84, ACT: modified rcheck code to check the range given to malloc,
+ * rather than the range determined by the 2-power used.
+ *
+ * Jan 85, RMS: calls malloc_warning to issue warning on nearly full.
+ * No longer Emacs-specific; can serve as all-purpose malloc for GNU.
+ * You should call malloc_init to reinitialize after loading dumped Emacs.
+ * Call malloc_stats to get info on memory stats if MALLOC_STATS turned on.
+ * realloc knows how to return same block given, just changing its size,
+ * if the power of 2 is correct.
+ */
+
+/*
+ * 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.
+ */
+
+/* Define MEMSCRAMBLE to have free() write 0xcf into memory as it's freed, to
+ uncover callers that refer to freed memory, and to have malloc() write 0xdf
+ into memory as it's allocated to avoid referring to previous contents. */
+
+/* SCO 3.2v4 getcwd and possibly other libc routines fail with MEMSCRAMBLE;
+ handled by configure. */
+
+#if defined (HAVE_CONFIG_H)
+# include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#if defined (SHELL)
+# include "bashtypes.h"
+# include "stdc.h"
+#else
+# include <sys/types.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+# include <unistd.h>
+#endif
+
+/* Determine which kind of system this is. */
+#include <signal.h>
+
+#if defined (HAVE_STRING_H)
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#include <stdio.h>
+
+/* Define getpagesize () if the system does not. */
+#ifndef HAVE_GETPAGESIZE
+# include "getpagesize.h"
+#endif
+
+#include "imalloc.h"
+#ifdef MALLOC_STATS
+# include "mstats.h"
+#endif
+#ifdef MALLOC_REGISTER
+# include "table.h"
+#endif
+#ifdef MALLOC_WATCH
+# include "watch.h"
+#endif
+
+/* System-specific omissions. */
+#ifdef HPUX
+# define NO_VALLOC
+#endif
+
+#define NBUCKETS 30
+
+#define ISALLOC ((char) 0xf7) /* magic byte that implies allocation */
+#define ISFREE ((char) 0x54) /* magic byte that implies free block */
+ /* this is for error checking only */
+#define ISMEMALIGN ((char) 0xd6) /* Stored before the value returned by
+ memalign, with the rest of the word
+ being the distance to the true
+ beginning of the block. */
+
+
+/* We have a flag indicating whether memory is allocated, an index in
+ nextf[], a size field, and a sentinel value to determine whether or
+ not a caller wrote before the start of allocated memory; to realloc()
+ memory we either copy mh_nbytes or just change mh_nbytes if there is
+ enough room in the block for the new size. Range checking is always
+ done. */
+union mhead {
+ bits64_t mh_align; /* 8 */
+ 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 */
+ } minfo;
+};
+#define mh_alloc minfo.mi_alloc
+#define mh_index minfo.mi_index
+#define mh_nbytes minfo.mi_nbytes
+#define mh_magic2 minfo.mi_magic2
+
+#define MOVERHEAD sizeof(union mhead)
+#define MALIGN_MASK 7 /* one less than desired alignment */
+
+/* Access free-list pointer of a block.
+ It is stored at block + sizeof (char *).
+ This is not a field in the minfo structure member of union mhead
+ 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. */
+
+#define CHAIN(a) \
+ (*(union mhead **) (sizeof (char *) + (char *) (a)))
+
+/* To implement range checking, we write magic values in at the beginning
+ and end of each allocated block, and make sure they are undisturbed
+ whenever a free or a realloc occurs. */
+
+/* Written in the 2 bytes before the block's real space (-4 bytes) */
+#define MAGIC2 0x5555
+#define MSLOP 4 /* 4 bytes extra for u_bits32_t size */
+
+/* How many bytes are actually allocated for a request of size N --
+ rounded up to nearest multiple of 8 after accounting for malloc
+ overhead. */
+#define ALLOCATED_BYTES(n) \
+ (((n) + MOVERHEAD + MSLOP + MALIGN_MASK) & ~MALIGN_MASK)
+
+#define ASSERT(p) \
+ do \
+ { \
+ if (!(p)) xbotch((PTR_T)0, ERR_ASSERT_FAILED, __STRING(p), file, line); \
+ } \
+ while (0)
+
+/* 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
+
+/* Minimum and maximum bucket indices for block coalescing. */
+#define COMBINE_MIN 2
+#define COMBINE_MAX (pagebucket - 1) /* XXX */
+
+#define LESSCORE_MIN 10
+#define LESSCORE_FRC 13
+
+#define STARTBUCK 1
+
+/* Flags for the internal functions. */
+#define MALLOC_WRAPPER 0x01 /* wrapper function */
+#define MALLOC_INTERNAL 0x02 /* internal function calling another */
+#define MALLOC_NOTRACE 0x04 /* don't trace this allocation or free */
+#define MALLOC_NOREG 0x08 /* don't register this allocation or free */
+
+/* Future use. */
+#define ERR_DUPFREE 0x01
+#define ERR_UNALLOC 0x02
+#define ERR_UNDERFLOW 0x04
+#define ERR_ASSERT_FAILED 0x08
+
+/* Evaluates to true if NB is appropriate for bucket NU. NB is adjusted
+ appropriately by the caller to account for malloc overhead. This only
+ checks that the recorded size is not too big for the bucket. We
+ can't check whether or not it's in between NU and NU-1 because we
+ might have encountered a busy bucket when allocating and moved up to
+ the next size. */
+#define IN_BUCKET(nb, nu) ((nb) <= binsizes[(nu)])
+
+/* Use this when we want to be sure that NB is in bucket NU. */
+#define RIGHT_BUCKET(nb, nu) \
+ (((nb) > binsizes[(nu)-1]) && ((nb) <= binsizes[(nu)]))
+
+/* nextf[i] is free list of blocks of size 2**(i + 3) */
+
+static union mhead *nextf[NBUCKETS];
+
+/* busy[i] is nonzero while allocation of block size i is in progress. */
+
+static char busy[NBUCKETS];
+
+static int pagesz; /* system page size. */
+static int pagebucket; /* bucket for requests a page in size */
+static int maxbuck; /* highest bucket receiving allocation request. */
+
+static char *memtop; /* top of heap */
+
+static unsigned long binsizes[NBUCKETS] = {
+ 8UL, 16UL, 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, 4294967296UL-1
+};
+
+/* binsizes[x] == (1 << ((x) + 3)) */
+#define binsize(x) binsizes[(x)]
+
+/* Declarations for internal functions */
+static PTR_T internal_malloc __P((size_t, const char *, int, int));
+static PTR_T internal_realloc __P((PTR_T, size_t, const char *, int, int));
+static void internal_free __P((PTR_T, const char *, int, int));
+static PTR_T internal_memalign __P((unsigned int, size_t, const char *, int, int));
+#ifndef NO_CALLOC
+static PTR_T internal_calloc __P((size_t, size_t, const char *, int, int));
+static void internal_cfree __P((PTR_T, const char *, int, int));
+#endif
+#ifndef NO_VALLOC
+static PTR_T internal_valloc __P((size_t, const char *, int, int));
+#endif
+
+#if defined (botch)
+extern void botch ();
+#else
+static void botch __P((const char *, const char *, int));
+#endif
+static void xbotch __P((PTR_T, int, const char *, const char *, int));
+
+#if !HAVE_DECL_SBRK
+extern char *sbrk ();
+#endif /* !HAVE_DECL_SBRK */
+
+#ifdef SHELL
+extern int interrupt_immediately;
+extern int signal_is_trapped __P((int));
+#endif
+
+#ifdef MALLOC_STATS
+struct _malstats _mstats;
+#endif /* MALLOC_STATS */
+
+/* Debugging variables available to applications. */
+int malloc_flags = 0; /* future use */
+int malloc_trace = 0; /* trace allocations and frees to stderr */
+int malloc_register = 0; /* future use */
+
+#ifdef MALLOC_TRACE
+char _malloc_trace_buckets[NBUCKETS];
+
+/* These should really go into a header file. */
+extern void mtrace_alloc __P((const char *, PTR_T, size_t, const char *, int));
+extern void mtrace_free __P((PTR_T, int, const char *, int));
+#endif
+
+#if !defined (botch)
+static void
+botch (s, file, line)
+{
+ fprintf (stderr, "malloc: failed assertion: %s\n", s);
+ (void)fflush (stderr);
+ abort ();
+}
+#endif
+
+/* print the file and line number that caused the assertion failure and
+ call botch() to do whatever the application wants with the information */
+static void
+xbotch (mem, e, s, file, line)
+ PTR_T mem;
+ int e;
+ const char *s;
+ const char *file;
+ int line;
+{
+ fprintf (stderr, "\r\nmalloc: %s:%d: assertion botched\r\n",
+ file ? file : "unknown", line);
+#ifdef MALLOC_REGISTER
+ if (mem != NULL && malloc_register)
+ mregister_describe_mem (mem, stderr);
+#endif
+ (void)fflush (stderr);
+ botch(s, file, line);
+}
+
+/* Coalesce two adjacent free blocks off the free list for size NU - 1,
+ as long as we can find two adjacent free blocks. nextf[NU -1] is
+ assumed to not be busy; the caller (morecore()) checks for this. */
+static void
+bcoalesce (nu)
+ register int nu;
+{
+ register union mhead *mp, *mp1, *mp2;
+ register int nbuck;
+ unsigned long siz;
+
+ nbuck = nu - 1;
+ if (nextf[nbuck] == 0)
+ return;
+
+ siz = binsize (nbuck);
+
+ mp2 = mp1 = nextf[nbuck];
+ mp = CHAIN (mp1);
+ while (mp && mp != (union mhead *)((char *)mp1 + siz))
+ {
+ mp2 = mp1;
+ mp1 = mp;
+ mp = CHAIN (mp);
+ }
+ if (mp == 0)
+ return;
+
+ /* OK, now we have mp1 pointing to the block we want to add to nextf[NU].
+ CHAIN(mp2) must equal mp1. Check that mp1 and mp are adjacent. */
+ if (mp2 != mp1 && CHAIN(mp2) != mp1)
+ xbotch ((PTR_T)0, 0, "bcoalesce: CHAIN(mp2) != mp1", (char *)NULL, 0);
+
+#ifdef MALLOC_DEBUG
+ if (CHAIN (mp1) != (union mhead *)((char *)mp1 + siz))
+ return; /* not adjacent */
+#endif
+
+#ifdef MALLOC_STATS
+ _mstats.tbcoalesce++;
+ _mstats.ncoalesce[nbuck]++;
+#endif
+
+ /* Since they are adjacent, remove them from the free list */
+ if (mp1 == nextf[nbuck])
+ nextf[nbuck] = CHAIN (mp);
+ else
+ CHAIN (mp2) = CHAIN (mp);
+
+ /* And add the combined two blocks to nextf[NU]. */
+ mp1->mh_alloc = ISFREE;
+ mp1->mh_index = nu;
+ CHAIN (mp1) = nextf[nu];
+ nextf[nu] = mp1;
+}
+
+/* Split a block at index > NU (but less than SPLIT_MAX) into a set of
+ blocks of the correct size, and attach them to nextf[NU]. nextf[NU]
+ is assumed to be empty. Must be called with signals blocked (e.g.,
+ by morecore()). */
+static void
+bsplit (nu)
+ register int nu;
+{
+ register union mhead *mp;
+ int nbuck, nblks, split_max;
+ unsigned long siz;
+
+ split_max = (maxbuck > SPLIT_MAX) ? maxbuck : SPLIT_MAX;
+
+ if (nu >= SPLIT_MID)
+ {
+ for (nbuck = split_max; nbuck > nu; nbuck--)
+ {
+ if (busy[nbuck] || nextf[nbuck] == 0)
+ continue;
+ break;
+ }
+ }
+ else
+ {
+ for (nbuck = nu + 1; nbuck <= split_max; nbuck++)
+ {
+ if (busy[nbuck] || nextf[nbuck] == 0)
+ continue;
+ break;
+ }
+ }
+
+ if (nbuck > split_max || nbuck <= nu)
+ return;
+
+ /* XXX might want to split only if nextf[nbuck] has >= 2 blocks free
+ and nbuck is below some threshold. */
+
+#ifdef MALLOC_STATS
+ _mstats.tbsplit++;
+ _mstats.nsplit[nbuck]++;
+#endif
+
+ /* Figure out how many blocks we'll get. */
+ siz = binsize (nu);
+ nblks = binsize (nbuck) / siz;
+
+ /* Remove the block from the chain of larger blocks. */
+ mp = nextf[nbuck];
+ nextf[nbuck] = CHAIN (mp);
+
+ /* Split the block and put it on the requested chain. */
+ nextf[nu] = mp;
+ while (1)
+ {
+ mp->mh_alloc = ISFREE;
+ mp->mh_index = nu;
+ if (--nblks <= 0) break;
+ CHAIN (mp) = (union mhead *)((char *)mp + siz);
+ mp = (union mhead *)((char *)mp + siz);
+ }
+ CHAIN (mp) = 0;
+}
+
+static void
+block_signals (setp, osetp)
+ sigset_t *setp, *osetp;
+{
+#ifdef HAVE_POSIX_SIGNALS
+ sigfillset (setp);
+ sigemptyset (osetp);
+ sigprocmask (SIG_BLOCK, setp, osetp);
+#else
+# if defined (HAVE_BSD_SIGNALS)
+ *osetp = sigsetmask (-1);
+# endif
+#endif
+}
+
+static void
+unblock_signals (setp, osetp)
+ sigset_t *setp, *osetp;
+{
+#ifdef HAVE_POSIX_SIGNALS
+ sigprocmask (SIG_SETMASK, osetp, (sigset_t *)NULL);
+#else
+# if defined (HAVE_BSD_SIGNALS)
+ sigsetmask (*osetp);
+# endif
+#endif
+}
+
+/* Return some memory to the system by reducing the break. This is only
+ called with NU > pagebucket, so we're always assured of giving back
+ more than one page of memory. */
+static void
+lesscore (nu) /* give system back some memory */
+ register int nu; /* size index we're discarding */
+{
+ long siz;
+
+ siz = binsize (nu);
+ /* Should check for errors here, I guess. */
+ sbrk (-siz);
+ memtop -= siz;
+
+#ifdef MALLOC_STATS
+ _mstats.nsbrk++;
+ _mstats.tsbrk -= siz;
+ _mstats.nlesscore[nu]++;
+#endif
+}
+
+static void
+morecore (nu) /* ask system for more memory */
+ register int nu; /* size index to get more of */
+{
+ register union mhead *mp;
+ register int nblks;
+ register long siz;
+ long sbrk_amt; /* amount to get via sbrk() */
+ sigset_t set, oset;
+ int blocked_sigs;
+
+ /* Block all signals in case we are executed from a signal handler. */
+ blocked_sigs = 0;
+#ifdef SHELL
+ if (interrupt_immediately || signal_is_trapped (SIGINT) || signal_is_trapped (SIGCHLD))
+#endif
+ {
+ block_signals (&set, &oset);
+ blocked_sigs = 1;
+ }
+
+ siz = binsize (nu); /* size of desired block for nextf[nu] */
+
+ if (siz < 0)
+ goto morecore_done; /* oops */
+
+#ifdef MALLOC_STATS
+ _mstats.nmorecore[nu]++;
+#endif
+
+ /* Try to split a larger block here, if we're within the range of sizes
+ to split. */
+ if (nu >= SPLIT_MIN)
+ {
+ bsplit (nu);
+ if (nextf[nu] != 0)
+ goto morecore_done;
+ }
+
+ /* Try to coalesce two adjacent blocks from the free list on nextf[nu - 1],
+ if we can, and we're withing the range of the block coalescing limits. */
+ if (nu >= COMBINE_MIN && nu < COMBINE_MAX && busy[nu - 1] == 0 && nextf[nu - 1])
+ {
+ bcoalesce (nu);
+ if (nextf[nu] != 0)
+ goto morecore_done;
+ }
+
+ /* Take at least a page, and figure out how many blocks of the requested
+ size we're getting. */
+ if (siz <= pagesz)
+ {
+ sbrk_amt = pagesz;
+ nblks = sbrk_amt / siz;
+ }
+ else
+ {
+ /* We always want to request an integral multiple of the page size
+ from the kernel, so let's compute whether or not `siz' is such
+ an amount. If it is, we can just request it. If not, we want
+ the smallest integral multiple of pagesize that is larger than
+ `siz' and will satisfy the request. */
+ sbrk_amt = siz & (pagesz - 1);
+ if (sbrk_amt == 0)
+ sbrk_amt = siz;
+ else
+ sbrk_amt = siz + pagesz - sbrk_amt;
+ nblks = 1;
+ }
+
+#ifdef MALLOC_STATS
+ _mstats.nsbrk++;
+ _mstats.tsbrk += sbrk_amt;
+#endif
+
+ mp = (union mhead *) sbrk (sbrk_amt);
+
+ /* Totally out of memory. */
+ if ((long)mp == -1)
+ goto morecore_done;
+
+ memtop += sbrk_amt;
+
+ /* shouldn't happen, but just in case -- require 8-byte alignment */
+ if ((long)mp & MALIGN_MASK)
+ {
+ mp = (union mhead *) (((long)mp + MALIGN_MASK) & ~MALIGN_MASK);
+ nblks--;
+ }
+
+ /* save new header and link the nblks blocks together */
+ nextf[nu] = mp;
+ while (1)
+ {
+ mp->mh_alloc = ISFREE;
+ mp->mh_index = nu;
+ if (--nblks <= 0) break;
+ CHAIN (mp) = (union mhead *)((char *)mp + siz);
+ mp = (union mhead *)((char *)mp + siz);
+ }
+ CHAIN (mp) = 0;
+
+morecore_done:
+ if (blocked_sigs)
+ unblock_signals (&set, &oset);
+}
+
+static void
+malloc_debug_dummy ()
+{
+ write (1, "malloc_debug_dummy\n", 19);
+}
+
+#define PREPOP_BIN 2
+#define PREPOP_SIZE 32
+
+static int
+pagealign ()
+{
+ register long nbytes;
+ register int nunits;
+ register union mhead *mp;
+ long sbrk_needed;
+ char *curbrk;
+
+ pagesz = getpagesize ();
+ if (pagesz < 1024)
+ pagesz = 1024;
+
+ /* 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
+ much as we can. Once we figure out how much to advance the break
+ pointer, go ahead and do it. */
+ memtop = curbrk = sbrk (0);
+ sbrk_needed = pagesz - ((long)curbrk & (pagesz - 1)); /* sbrk(0) % pagesz */
+ if (sbrk_needed < 0)
+ sbrk_needed += pagesz;
+
+ /* Now allocate the wasted space. */
+ if (sbrk_needed)
+ {
+#ifdef MALLOC_STATS
+ _mstats.nsbrk++;
+ _mstats.tsbrk += sbrk_needed;
+#endif
+ curbrk = sbrk (sbrk_needed);
+ if ((long)curbrk == -1)
+ return -1;
+ memtop += sbrk_needed;
+
+ /* Take the memory which would otherwise be wasted and populate the most
+ popular bin (2 == 32 bytes) with it. Add whatever we need to curbrk
+ to make things 32-byte aligned, compute how many 32-byte chunks we're
+ going to get, and set up the bin. */
+ curbrk += sbrk_needed & (PREPOP_SIZE - 1);
+ sbrk_needed -= sbrk_needed & (PREPOP_SIZE - 1);
+ nunits = sbrk_needed / PREPOP_SIZE;
+
+ mp = (union mhead *)curbrk;
+
+ nextf[PREPOP_BIN] = mp;
+ while (1)
+ {
+ mp->mh_alloc = ISFREE;
+ mp->mh_index = PREPOP_BIN;
+ if (--nunits <= 0) break;
+ CHAIN(mp) = (union mhead *)((char *)mp + PREPOP_SIZE);
+ mp = (union mhead *)((char *)mp + PREPOP_SIZE);
+ }
+ CHAIN(mp) = 0;
+ }
+
+ /* compute which bin corresponds to the page size. */
+ for (nunits = 7; nunits < NBUCKETS; nunits++)
+ if (pagesz <= binsize(nunits))
+ break;
+ pagebucket = nunits;
+
+ return 0;
+}
+
+static PTR_T
+internal_malloc (n, file, line, flags) /* get a block */
+ size_t n;
+ const char *file;
+ int line, flags;
+{
+ register union mhead *p;
+ register int nunits;
+ register char *m;
+ long nbytes;
+
+ /* Get the system page size and align break pointer so future sbrks will
+ be page-aligned. The page size must be at least 1K -- anything
+ smaller is increased. */
+ if (pagesz == 0)
+ if (pagealign () < 0)
+ return ((PTR_T)NULL);
+
+ /* Figure out how many bytes are required, rounding up to the nearest
+ 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. */
+ nbytes = ALLOCATED_BYTES(n);
+ nunits = (nbytes <= (pagesz >> 1)) ? STARTBUCK : pagebucket;
+ for ( ; nunits < NBUCKETS; nunits++)
+ if (nbytes <= binsize(nunits))
+ break;
+
+ /* Silently reject too-large requests. */
+ if (nunits >= NBUCKETS)
+ return ((PTR_T) NULL);
+
+ /* In case this is reentrant use of malloc from signal handler,
+ pick a block size that no other malloc level is currently
+ trying to allocate. That's the easiest harmless way not to
+ interfere with the other level of execution. */
+#ifdef MALLOC_STATS
+ if (busy[nunits]) _mstats.nrecurse++;
+#endif
+ while (busy[nunits]) nunits++;
+ busy[nunits] = 1;
+
+ if (nunits > maxbuck)
+ maxbuck = nunits;
+
+ /* If there are no blocks of the appropriate size, go get some */
+ if (nextf[nunits] == 0)
+ morecore (nunits);
+
+ /* Get one block off the list, and set the new list head */
+ if ((p = nextf[nunits]) == NULL)
+ {
+ busy[nunits] = 0;
+ return NULL;
+ }
+ nextf[nunits] = CHAIN (p);
+ busy[nunits] = 0;
+
+ /* Check for free block clobbered */
+ /* If not for this check, we would gobble a clobbered free chain ptr
+ and bomb out on the NEXT allocate of this size block */
+ if (p->mh_alloc != ISFREE || p->mh_index != nunits)
+ xbotch ((PTR_T)(p+1), 0, "malloc: block on free list clobbered", file, line);
+
+ /* Fill in the info, and set up the magic numbers for range checking. */
+ p->mh_alloc = ISALLOC;
+ p->mh_magic2 = MAGIC2;
+ p->mh_nbytes = n;
+
+ /* End guard */
+ m = (char *) (p + 1) + n;
+ *(u_bits32_t *)m = n;
+
+#ifdef MEMSCRAMBLE
+ MALLOC_MEMSET ((char *)(p + 1), 0xdf, n); /* scramble previous contents */
+#endif
+#ifdef MALLOC_STATS
+ _mstats.nmalloc[nunits]++;
+ _mstats.tmalloc[nunits]++;
+ _mstats.nmal++;
+ _mstats.bytesreq += n;
+#endif /* MALLOC_STATS */
+
+#ifdef MALLOC_TRACE
+ if (malloc_trace && (flags & MALLOC_NOTRACE) == 0)
+ mtrace_alloc ("malloc", p + 1, n, file, line);
+ else if (_malloc_trace_buckets[nunits])
+ mtrace_alloc ("malloc", p + 1, n, file, line);
+#endif
+
+#ifdef MALLOC_REGISTER
+ if (malloc_register && (flags & MALLOC_NOREG) == 0)
+ mregister_alloc ("malloc", p + 1, n, file, line);
+#endif
+
+#ifdef MALLOC_WATCH
+ if (_malloc_nwatch > 0)
+ _malloc_ckwatch (p + 1, file, line, W_ALLOC, n);
+#endif
+
+ return (PTR_T) (p + 1);
+}
+
+static void
+internal_free (mem, file, line, flags)
+ PTR_T mem;
+ const char *file;
+ int line, flags;
+{
+ register union mhead *p;
+ register char *ap;
+ register int nunits;
+ register unsigned int nbytes;
+ int ubytes; /* caller-requested size */
+
+ if ((ap = (char *)mem) == 0)
+ return;
+
+ p = (union mhead *) ap - 1;
+
+ if (p->mh_alloc == ISMEMALIGN)
+ {
+ ap -= p->mh_nbytes;
+ p = (union mhead *) ap - 1;
+ }
+
+#if defined (MALLOC_TRACE) || defined (MALLOC_REGISTER)
+ if (malloc_trace || malloc_register)
+ ubytes = p->mh_nbytes;
+#endif
+
+ if (p->mh_alloc != ISALLOC)
+ {
+ if (p->mh_alloc == ISFREE)
+ xbotch (mem, ERR_DUPFREE,
+ "free: called with already freed block argument", file, line);
+ else
+ xbotch (mem, ERR_UNALLOC,
+ "free: called with unallocated block argument", file, line);
+ }
+
+ ASSERT (p->mh_magic2 == MAGIC2);
+
+ 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'.
+ 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
+ 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);
+
+ ap += p->mh_nbytes;
+ if (*(u_bits32_t *)ap != p->mh_nbytes)
+ xbotch (mem, ERR_ASSERT_FAILED, "free: start and end chunk sizes differ", file, line);
+
+#if 1
+ if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == memtop))
+#else
+ if (((char *)p + binsize(nunits) == memtop) && nunits >= LESSCORE_MIN)
+#endif
+ {
+ /* If above LESSCORE_FRC, give back unconditionally. This should be set
+ high enough to be infrequently encountered. If between LESSCORE_MIN
+ and LESSCORE_FRC, call lesscore if the bucket is marked as busy (in
+ which case we would punt below and leak memory) or if there's already
+ a block on the free list. */
+ if ((nunits >= LESSCORE_FRC) || busy[nunits] || nextf[nunits] != 0)
+ {
+ lesscore (nunits);
+ /* keeps the tracing and registering code in one place */
+ goto free_return;
+ }
+ }
+
+#ifdef MEMSCRAMBLE
+ MALLOC_MEMSET (mem, 0xcf, p->mh_nbytes);
+#endif
+
+ ASSERT (nunits < NBUCKETS);
+ p->mh_alloc = ISFREE;
+
+ if (busy[nunits] == 1)
+ return; /* this is bogus, but at least it won't corrupt the chains */
+
+ /* Protect against signal handlers calling malloc. */
+ busy[nunits] = 1;
+ /* Put this block on the free list. */
+ CHAIN (p) = nextf[nunits];
+ nextf[nunits] = p;
+ busy[nunits] = 0;
+
+free_return:
+
+#ifdef MALLOC_STATS
+ _mstats.nmalloc[nunits]--;
+ _mstats.nfre++;
+#endif /* MALLOC_STATS */
+
+#ifdef MALLOC_TRACE
+ if (malloc_trace && (flags & MALLOC_NOTRACE) == 0)
+ mtrace_free (mem, ubytes, file, line);
+ else if (_malloc_trace_buckets[nunits])
+ mtrace_free (mem, ubytes, file, line);
+#endif
+
+#ifdef MALLOC_REGISTER
+ if (malloc_register && (flags & MALLOC_NOREG) == 0)
+ mregister_free (mem, ubytes, file, line);
+#endif
+
+#ifdef MALLOC_WATCH
+ if (_malloc_nwatch > 0)
+ _malloc_ckwatch (mem, file, line, W_FREE, ubytes);
+#endif
+
+}
+
+static PTR_T
+internal_realloc (mem, n, file, line, flags)
+ PTR_T mem;
+ register size_t n;
+ const char *file;
+ int line, flags;
+{
+ register union mhead *p;
+ register u_bits32_t tocopy;
+ register unsigned int nbytes;
+ register int nunits;
+ register char *m;
+
+#ifdef MALLOC_STATS
+ _mstats.nrealloc++;
+#endif
+
+ if (n == 0)
+ {
+ internal_free (mem, file, line, MALLOC_INTERNAL);
+ return (NULL);
+ }
+ if ((p = (union mhead *) mem) == 0)
+ return internal_malloc (n, file, line, MALLOC_INTERNAL);
+
+ p--;
+ nunits = p->mh_index;
+ ASSERT (nunits < NBUCKETS);
+
+ if (p->mh_alloc != ISALLOC)
+ xbotch (mem, ERR_UNALLOC,
+ "realloc: called with unallocated block argument", file, line);
+
+ ASSERT (p->mh_magic2 == MAGIC2);
+ 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'.
+ 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
+ original number of bytes requested. */
+ if (IN_BUCKET(nbytes, nunits) == 0)
+ xbotch (mem, ERR_UNDERFLOW,
+ "realloc: underflow detected; mh_nbytes out of range", file, line);
+
+ m = (char *)mem + (tocopy = p->mh_nbytes);
+ if (*(u_bits32_t *)m != p->mh_nbytes)
+ xbotch (mem, ERR_ASSERT_FAILED, "realloc: start and end chunk sizes differ", file, line);
+
+#ifdef MALLOC_WATCH
+ if (_malloc_nwatch > 0)
+ _malloc_ckwatch (p + 1, file, line, W_REALLOC, n);
+#endif
+#ifdef MALLOC_STATS
+ _mstats.bytesreq += (n < tocopy) ? 0 : n - tocopy;
+#endif
+
+ /* See if desired size rounds to same power of 2 as actual size. */
+ nbytes = ALLOCATED_BYTES(n);
+
+ /* If ok, use the same block, just marking its size as changed. */
+ if (RIGHT_BUCKET(nbytes, nunits))
+ {
+ *m++ = 0; *m++ = 0; *m++ = 0; *m++ = 0;
+ m = (char *)mem + (p->mh_nbytes = n);
+ *(u_bits32_t *)m = p->mh_nbytes;
+ return mem;
+ }
+
+ if (n < tocopy)
+ tocopy = n;
+
+#ifdef MALLOC_STATS
+ _mstats.nrcopy++;
+#endif
+
+ 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)
+ mtrace_alloc ("realloc", m, n, file, line);
+ else if (_malloc_trace_buckets[nunits])
+ mtrace_alloc ("realloc", m, n, file, line);
+#endif
+
+#ifdef MALLOC_REGISTER
+ if (malloc_register && (flags & MALLOC_NOREG) == 0)
+ mregister_alloc ("realloc", m, n, file, line);
+#endif
+
+#ifdef MALLOC_WATCH
+ if (_malloc_nwatch > 0)
+ _malloc_ckwatch (m, file, line, W_RESIZED, n);
+#endif
+
+ return m;
+}
+
+static PTR_T
+internal_memalign (alignment, size, file, line, flags)
+ unsigned int alignment;
+ size_t size;
+ const char *file;
+ int line, flags;
+{
+ register char *ptr;
+ register char *aligned;
+ register union mhead *p;
+
+ ptr = internal_malloc (size + alignment, file, line, MALLOC_INTERNAL);
+
+ if (ptr == 0)
+ return 0;
+ /* If entire block has the desired alignment, just accept it. */
+ if (((long) ptr & (alignment - 1)) == 0)
+ return ptr;
+ /* Otherwise, get address of byte in the block that has that alignment. */
+#if 0
+ aligned = (char *) (((long) ptr + alignment - 1) & -alignment);
+#else
+ aligned = (char *) (((long) ptr + alignment - 1) & (~alignment + 1));
+#endif
+
+ /* Store a suitable indication of how to free the block,
+ so that free can find the true beginning of it. */
+ p = (union mhead *) aligned - 1;
+ p->mh_nbytes = aligned - ptr;
+ p->mh_alloc = ISMEMALIGN;
+
+ return aligned;
+}
+
+#if !defined (NO_VALLOC)
+/* This runs into trouble with getpagesize on HPUX, and Multimax machines.
+ Patching out seems cleaner than the ugly fix needed. */
+static PTR_T
+internal_valloc (size, file, line, flags)
+ size_t size;
+ const char *file;
+ int line, flags;
+{
+ return internal_memalign (getpagesize (), size, file, line, flags|MALLOC_INTERNAL);
+}
+#endif /* !NO_VALLOC */
+
+#ifndef NO_CALLOC
+static PTR_T
+internal_calloc (n, s, file, line, flags)
+ size_t n, s;
+ const char *file;
+ int line, flags;
+{
+ size_t total;
+ PTR_T result;
+
+ total = n * s;
+ result = internal_malloc (total, file, line, flags|MALLOC_INTERNAL);
+ if (result)
+ memset (result, 0, total);
+ return result;
+}
+
+static void
+internal_cfree (p, file, line, flags)
+ PTR_T p;
+ const char *file;
+ int line, flags;
+{
+ internal_free (p, file, line, flags|MALLOC_INTERNAL);
+}
+#endif /* !NO_CALLOC */
+
+#ifdef MALLOC_STATS
+int
+malloc_free_blocks (size)
+ int size;
+{
+ int nfree;
+ register union mhead *p;
+
+ nfree = 0;
+ for (p = nextf[size]; p; p = CHAIN (p))
+ nfree++;
+
+ return nfree;
+}
+#endif
+
+#if defined (MALLOC_WRAPFUNCS)
+PTR_T
+sh_malloc (bytes, file, line)
+ size_t bytes;
+ const char *file;
+ int line;
+{
+ return internal_malloc (bytes, file, line, MALLOC_WRAPPER);
+}
+
+PTR_T
+sh_realloc (ptr, size, file, line)
+ PTR_T ptr;
+ size_t size;
+ const char *file;
+ int line;
+{
+ return internal_realloc (ptr, size, file, line, MALLOC_WRAPPER);
+}
+
+void
+sh_free (mem, file, line)
+ PTR_T mem;
+ const char *file;
+ int line;
+{
+ internal_free (mem, file, line, MALLOC_WRAPPER);
+}
+
+PTR_T
+sh_memalign (alignment, size, file, line)
+ unsigned int alignment;
+ size_t size;
+ const char *file;
+ int line;
+{
+ return internal_memalign (alignment, size, file, line, MALLOC_WRAPPER);
+}
+
+#ifndef NO_CALLOC
+PTR_T
+sh_calloc (n, s, file, line)
+ size_t n, s;
+ const char *file;
+ int line;
+{
+ return internal_calloc (n, s, file, line, MALLOC_WRAPPER);
+}
+
+void
+sh_cfree (mem, file, line)
+ PTR_T mem;
+ const char *file;
+ int line;
+{
+ internal_cfree (mem, file, line, MALLOC_WRAPPER);
+}
+#endif
+
+#ifndef NO_VALLOC
+PTR_T
+sh_valloc (size, file, line)
+ size_t size;
+ const char *file;
+ int line;
+{
+ return internal_valloc (size, file, line, MALLOC_WRAPPER);
+}
+#endif /* !NO_VALLOC */
+
+#endif /* MALLOC_WRAPFUNCS */
+
+/* Externally-available functions that call their internal counterparts. */
+
+PTR_T
+malloc (size)
+ size_t size;
+{
+ return internal_malloc (size, (char *)NULL, 0, 0);
+}
+
+PTR_T
+realloc (mem, nbytes)
+ PTR_T mem;
+ size_t nbytes;
+{
+ return internal_realloc (mem, nbytes, (char *)NULL, 0, 0);
+}
+
+void
+free (mem)
+ PTR_T mem;
+{
+ internal_free (mem, (char *)NULL, 0, 0);
+}
+
+PTR_T
+memalign (alignment, size)
+ unsigned int alignment;
+ size_t size;
+{
+ return internal_memalign (alignment, size, (char *)NULL, 0, 0);
+}
+
+#ifndef NO_VALLOC
+PTR_T
+valloc (size)
+ size_t size;
+{
+ return internal_valloc (size, (char *)NULL, 0, 0);
+}
+#endif
+
+#ifndef NO_CALLOC
+PTR_T
+calloc (n, s)
+ size_t n, s;
+{
+ return internal_calloc (n, s, (char *)NULL, 0, 0);
+}
+
+void
+cfree (mem)
+ PTR_T mem;
+{
+ internal_cfree (mem, (char *)NULL, 0, 0);
+}
+#endif
+++ /dev/null
-/* ansi_stdlib.h -- An ANSI Standard stdlib.h. */
-/* A minimal stdlib.h containing extern declarations for those functions
- that bash uses. */
-
-/* Copyright (C) 1993 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 2, 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; see the file COPYING. If not, write to the Free Software
- Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#if !defined (_STDLIB_H_)
-#define _STDLIB_H_ 1
-
-/* String conversion functions. */
-extern int atoi ();
-
-extern double atof ();
-extern double strtod ();
-
-/* Memory allocation functions. */
-/* Generic pointer type. */
-#ifndef PTR_T
-
-#if defined (__STDC__)
-# define PTR_T void *
-#else
-# define PTR_T char *
-#endif
-
-#endif /* PTR_T */
-
-extern PTR_T malloc ();
-extern PTR_T realloc ();
-extern void free ();
-
-/* Other miscellaneous functions. */
-extern void abort ();
-extern void exit ();
-extern char *getenv ();
-extern void qsort ();
-
-#endif /* _STDLIB_H */
--- /dev/null
+../../include/ansi_stdlib.h
\ No newline at end of file
local_prompt = expand_prompt (p, &prompt_visible_length,
&prompt_last_invisible,
(int *)NULL,
- (int *)NULL);
+ &prompt_physical_chars);
c = *t; *t = '\0';
/* The portion of the prompt string up to and including the
final newline is now null-terminated. */
local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
(int *)NULL,
&prompt_invis_chars_first_line,
- &prompt_physical_chars);
+ (int *)NULL);
*t = c;
return (prompt_prefix_length);
}
--- /dev/null
+/* display.c -- readline redisplay facility. */
+
+/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+
+ This file is part of the GNU Readline Library, a library for
+ reading lines of text with interactive input and history editing.
+
+ The GNU Readline Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2, or
+ (at your option) any later version.
+
+ The GNU Readline Library 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.
+
+ The GNU General Public License is often shipped with GNU software, and
+ is generally kept in a file called COPYING or LICENSE. If you do not
+ have a copy of the license, write to the Free Software Foundation,
+ 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if defined (HAVE_UNISTD_H)
+# include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#include "posixstat.h"
+
+#if defined (HAVE_STDLIB_H)
+# include <stdlib.h>
+#else
+# include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#include <stdio.h>
+
+/* System-specific feature definitions and include files. */
+#include "rldefs.h"
+#include "rlmbutil.h"
+
+/* Termcap library stuff. */
+#include "tcap.h"
+
+/* Some standard library routines. */
+#include "readline.h"
+#include "history.h"
+
+#include "rlprivate.h"
+#include "xmalloc.h"
+
+#if !defined (strchr) && !defined (__STDC__)
+extern char *strchr (), *strrchr ();
+#endif /* !strchr && !__STDC__ */
+
+#if defined (HACK_TERMCAP_MOTION)
+extern char *_rl_term_forward_char;
+#endif
+
+static void update_line PARAMS((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 cr PARAMS((void));
+
+#if defined (HANDLE_MULTIBYTE)
+static int _rl_col_width PARAMS((const char *, int, int));
+static int *_rl_wrapped_line;
+#else
+# define _rl_col_width(l, s, e) (((e) <= (s)) ? 0 : (e) - (s))
+#endif
+
+static int *inv_lbreaks, *vis_lbreaks;
+static int inv_lbsize, vis_lbsize;
+
+/* Heuristic used to decide whether it is faster to move from CUR to NEW
+ by backing up or outputting a carriage return and moving forward. */
+#define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new)))
+
+/* **************************************************************** */
+/* */
+/* Display stuff */
+/* */
+/* **************************************************************** */
+
+/* This is the stuff that is hard for me. I never seem to write good
+ display routines in C. Let's see how I do this time. */
+
+/* (PWP) Well... Good for a simple line updater, but totally ignores
+ the problems of input lines longer than the screen width.
+
+ update_line and the code that calls it makes a multiple line,
+ automatically wrapping line update. Careful attention needs
+ to be paid to the vertical position variables. */
+
+/* Keep two buffers; one which reflects the current contents of the
+ screen, and the other to draw what we think the new contents should
+ be. Then compare the buffers, and make whatever changes to the
+ screen itself that we should. Finally, make the buffer that we
+ just drew into be the one which reflects the current contents of the
+ screen, and place the cursor where it belongs.
+
+ Commands that want to can fix the display themselves, and then let
+ this function know that the display has been fixed by setting the
+ RL_DISPLAY_FIXED variable. This is good for efficiency. */
+
+/* Application-specific redisplay function. */
+rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
+
+/* Global variables declared here. */
+/* What YOU turn on when you have handled all redisplay yourself. */
+int rl_display_fixed = 0;
+
+int _rl_suppress_redisplay = 0;
+
+/* The stuff that gets printed out before the actual text of the line.
+ This is usually pointing to rl_prompt. */
+char *rl_display_prompt = (char *)NULL;
+
+/* Pseudo-global variables declared here. */
+/* The visible cursor position. If you print some text, adjust this. */
+int _rl_last_c_pos = 0;
+int _rl_last_v_pos = 0;
+
+/* Number of lines currently on screen minus 1. */
+int _rl_vis_botlin = 0;
+
+/* Variables used only in this file. */
+/* The last left edge of text that was displayed. This is used when
+ doing horizontal scrolling. It shifts in thirds of a screenwidth. */
+static int last_lmargin;
+
+/* The line display buffers. One is the line currently displayed on
+ the screen. The other is the line about to be displayed. */
+static char *visible_line = (char *)NULL;
+static char *invisible_line = (char *)NULL;
+
+/* A buffer for `modeline' messages. */
+static char msg_buf[128];
+
+/* Non-zero forces the redisplay even if we thought it was unnecessary. */
+static int forced_display;
+
+/* Default and initial buffer size. Can grow. */
+static int line_size = 1024;
+
+/* Variables to keep track of the expanded prompt string, which may
+ include invisible characters. */
+
+static char *local_prompt, *local_prompt_prefix;
+static int prompt_visible_length, prompt_prefix_length;
+
+/* The number of invisible characters in the line currently being
+ displayed on the screen. */
+static int visible_wrap_offset;
+
+/* The number of invisible characters in the prompt string. Static so it
+ can be shared between rl_redisplay and update_line */
+static int wrap_offset;
+
+/* The index of the last invisible character in the prompt string. */
+static int prompt_last_invisible;
+
+/* The length (buffer offset) of the first line of the last (possibly
+ multi-line) buffer displayed on the screen. */
+static int visible_first_line_len;
+
+/* Number of invisible characters on the first physical line of the prompt.
+ Only valid when the number of physical characters in the prompt exceeds
+ (or is equal to) _rl_screenwidth. */
+static int prompt_invis_chars_first_line;
+
+static int prompt_last_screen_line;
+
+static int prompt_physical_chars;
+
+/* Expand the prompt string S and return the number of visible
+ characters in *LP, if LP is not null. This is currently more-or-less
+ a placeholder for expansion. LIP, if non-null is a place to store the
+ index of the last invisible character in the returned string. NIFLP,
+ if non-zero, is a place to store the number of invisible characters in
+ the first prompt line. The previous are used as byte counts -- indexes
+ into a character buffer. */
+
+/* Current implementation:
+ \001 (^A) start non-visible characters
+ \002 (^B) end non-visible characters
+ all characters except \001 and \002 (following a \001) are copied to
+ the returned string; all characters except those between \001 and
+ \002 are assumed to be `visible'. */
+
+static char *
+expand_prompt (pmt, lp, lip, niflp, vlp)
+ char *pmt;
+ int *lp, *lip, *niflp, *vlp;
+{
+ char *r, *ret, *p;
+ int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
+
+ /* Short-circuit if we can. */
+ if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
+ {
+ r = savestring (pmt);
+ if (lp)
+ *lp = strlen (r);
+ if (lip)
+ *lip = 0;
+ if (niflp)
+ *niflp = 0;
+ if (vlp)
+ *vlp = lp ? *lp : strlen (r);
+ return r;
+ }
+
+ l = strlen (pmt);
+ r = ret = (char *)xmalloc (l + 1);
+
+ invfl = 0; /* invisible chars in first line of prompt */
+
+ for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
+ {
+ /* This code strips the invisible character string markers
+ RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */
+ if (*p == RL_PROMPT_START_IGNORE)
+ {
+ ignoring++;
+ continue;
+ }
+ else if (ignoring && *p == RL_PROMPT_END_IGNORE)
+ {
+ ignoring = 0;
+ last = r - ret - 1;
+ continue;
+ }
+ else
+ {
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ pind = p - pmt;
+ ind = _rl_find_next_mbchar (pmt, pind, 1, MB_FIND_NONZERO);
+ l = ind - pind;
+ while (l--)
+ *r++ = *p++;
+ if (!ignoring)
+ rl += ind - pind;
+ else
+ ninvis += ind - pind;
+ p--; /* compensate for later increment */
+ }
+ else
+#endif
+ {
+ *r++ = *p;
+ if (!ignoring)
+ rl++; /* visible length byte counter */
+ else
+ ninvis++; /* invisible chars byte counter */
+ }
+
+ if (rl >= _rl_screenwidth)
+ invfl = ninvis;
+
+ if (ignoring == 0)
+ physchars++;
+ }
+ }
+
+ if (rl < _rl_screenwidth)
+ invfl = ninvis;
+
+ *r = '\0';
+ if (lp)
+ *lp = rl;
+ if (lip)
+ *lip = last;
+ if (niflp)
+ *niflp = invfl;
+ if (vlp)
+ *vlp = physchars;
+ return ret;
+}
+
+/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from
+ PMT and return the rest of PMT. */
+char *
+_rl_strip_prompt (pmt)
+ char *pmt;
+{
+ char *ret;
+
+ ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL);
+ return ret;
+}
+
+/*
+ * Expand the prompt string into the various display components, if
+ * necessary.
+ *
+ * local_prompt = expanded last line of string in rl_display_prompt
+ * (portion after the final newline)
+ * local_prompt_prefix = portion before last newline of rl_display_prompt,
+ * expanded via expand_prompt
+ * prompt_visible_length = number of visible characters in local_prompt
+ * prompt_prefix_length = number of visible characters in local_prompt_prefix
+ *
+ * This function is called once per call to readline(). It may also be
+ * called arbitrarily to expand the primary prompt.
+ *
+ * The return value is the number of visible characters on the last line
+ * of the (possibly multi-line) prompt.
+ */
+int
+rl_expand_prompt (prompt)
+ char *prompt;
+{
+ char *p, *t;
+ int c;
+
+ /* Clear out any saved values. */
+ FREE (local_prompt);
+ FREE (local_prompt_prefix);
+
+ local_prompt = local_prompt_prefix = (char *)0;
+ prompt_last_invisible = prompt_visible_length = 0;
+
+ if (prompt == 0 || *prompt == 0)
+ return (0);
+
+ p = strrchr (prompt, '\n');
+ if (!p)
+ {
+ /* The prompt is only one logical line, though it might wrap. */
+ local_prompt = expand_prompt (prompt, &prompt_visible_length,
+ &prompt_last_invisible,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
+ local_prompt_prefix = (char *)0;
+ return (prompt_visible_length);
+ }
+ else
+ {
+ /* The prompt spans multiple lines. */
+ t = ++p;
+ local_prompt = expand_prompt (p, &prompt_visible_length,
+ &prompt_last_invisible,
+ (int *)NULL,
+ (int *)NULL);
+ c = *t; *t = '\0';
+ /* The portion of the prompt string up to and including the
+ final newline is now null-terminated. */
+ local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
+ (int *)NULL,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
+ *t = c;
+ return (prompt_prefix_length);
+ }
+}
+
+/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated
+ arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE
+ and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is
+ increased. If the lines have already been allocated, this ensures that
+ they can hold at least MINSIZE characters. */
+static void
+init_line_structures (minsize)
+ int minsize;
+{
+ register int n;
+
+ if (invisible_line == 0) /* initialize it */
+ {
+ if (line_size < minsize)
+ line_size = minsize;
+ visible_line = (char *)xmalloc (line_size);
+ invisible_line = (char *)xmalloc (line_size);
+ }
+ else if (line_size < minsize) /* ensure it can hold MINSIZE chars */
+ {
+ line_size *= 2;
+ if (line_size < minsize)
+ line_size = minsize;
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ invisible_line = (char *)xrealloc (invisible_line, line_size);
+ }
+
+ for (n = minsize; n < line_size; n++)
+ {
+ visible_line[n] = 0;
+ invisible_line[n] = 1;
+ }
+
+ if (vis_lbreaks == 0)
+ {
+ /* should be enough. */
+ inv_lbsize = vis_lbsize = 256;
+ inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int));
+ vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int));
+#if defined (HANDLE_MULTIBYTE)
+ _rl_wrapped_line = (int *)xmalloc (vis_lbsize * sizeof (int));
+#endif
+ inv_lbreaks[0] = vis_lbreaks[0] = 0;
+ }
+}
+
+/* Basic redisplay algorithm. */
+void
+rl_redisplay ()
+{
+ register int in, out, c, linenum, cursor_linenum;
+ register char *line;
+ int c_pos, inv_botlin, lb_botlin, lb_linenum;
+ int newlines, lpos, temp, modmark;
+ char *prompt_this_line;
+#if defined (HANDLE_MULTIBYTE)
+ wchar_t wc;
+ size_t wc_bytes;
+ int wc_width;
+ mbstate_t ps;
+ int _rl_wrapped_multicolumn = 0;
+#endif
+
+ if (!readline_echoing_p)
+ return;
+
+ if (!rl_display_prompt)
+ rl_display_prompt = "";
+
+ if (invisible_line == 0)
+ {
+ init_line_structures (0);
+ rl_on_new_line ();
+ }
+
+ /* Draw the line into the buffer. */
+ c_pos = -1;
+
+ line = invisible_line;
+ out = inv_botlin = 0;
+
+ /* Mark the line as modified or not. We only do this for history
+ lines. */
+ modmark = 0;
+ if (_rl_mark_modified_lines && current_history () && rl_undo_list)
+ {
+ line[out++] = '*';
+ line[out] = '\0';
+ modmark = 1;
+ }
+
+ /* If someone thought that the redisplay was handled, but the currently
+ visible line has a different modification state than the one about
+ to become visible, then correct the caller's misconception. */
+ if (visible_line[0] != invisible_line[0])
+ rl_display_fixed = 0;
+
+ /* If the prompt to be displayed is the `primary' readline prompt (the
+ one passed to readline()), use the values we have already expanded.
+ If not, use what's already in rl_display_prompt. WRAP_OFFSET is the
+ number of non-visible characters in the prompt string. */
+ if (rl_display_prompt == rl_prompt || local_prompt)
+ {
+ int local_len = local_prompt ? strlen (local_prompt) : 0;
+ if (local_prompt_prefix && forced_display)
+ _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix));
+
+ if (local_len > 0)
+ {
+ temp = local_len + out + 2;
+ if (temp >= line_size)
+ {
+ line_size = (temp + 1024) - (temp % 1024);
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ line = invisible_line = (char *)xrealloc (invisible_line, line_size);
+ }
+ strncpy (line + out, local_prompt, local_len);
+ out += local_len;
+ }
+ line[out] = '\0';
+ wrap_offset = local_len - prompt_visible_length;
+ }
+ else
+ {
+ int pmtlen;
+ prompt_this_line = strrchr (rl_display_prompt, '\n');
+ if (!prompt_this_line)
+ prompt_this_line = rl_display_prompt;
+ else
+ {
+ prompt_this_line++;
+ pmtlen = prompt_this_line - rl_display_prompt; /* temp var */
+ if (forced_display)
+ {
+ _rl_output_some_chars (rl_display_prompt, pmtlen);
+ /* Make sure we are at column zero even after a newline,
+ regardless of the state of terminal output processing. */
+ if (pmtlen < 2 || prompt_this_line[-2] != '\r')
+ cr ();
+ }
+ }
+
+ prompt_physical_chars = pmtlen = strlen (prompt_this_line);
+ temp = pmtlen + out + 2;
+ if (temp >= line_size)
+ {
+ line_size = (temp + 1024) - (temp % 1024);
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ line = invisible_line = (char *)xrealloc (invisible_line, line_size);
+ }
+ strncpy (line + out, prompt_this_line, pmtlen);
+ out += pmtlen;
+ line[out] = '\0';
+ wrap_offset = prompt_invis_chars_first_line = 0;
+ }
+
+#define CHECK_INV_LBREAKS() \
+ do { \
+ if (newlines >= (inv_lbsize - 2)) \
+ { \
+ inv_lbsize *= 2; \
+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ } \
+ } while (0)
+
+#if defined (HANDLE_MULTIBYTE)
+#define CHECK_LPOS() \
+ do { \
+ lpos++; \
+ if (lpos >= _rl_screenwidth) \
+ { \
+ if (newlines >= (inv_lbsize - 2)) \
+ { \
+ inv_lbsize *= 2; \
+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
+ } \
+ inv_lbreaks[++newlines] = out; \
+ _rl_wrapped_line[newlines] = _rl_wrapped_multicolumn; \
+ lpos = 0; \
+ } \
+ } while (0)
+#else
+#define CHECK_LPOS() \
+ do { \
+ lpos++; \
+ if (lpos >= _rl_screenwidth) \
+ { \
+ if (newlines >= (inv_lbsize - 2)) \
+ { \
+ inv_lbsize *= 2; \
+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ } \
+ inv_lbreaks[++newlines] = out; \
+ lpos = 0; \
+ } \
+ } while (0)
+#endif
+
+ /* inv_lbreaks[i] is where line i starts in the buffer. */
+ inv_lbreaks[newlines = 0] = 0;
+#if 0
+ lpos = out - wrap_offset;
+#else
+ lpos = prompt_physical_chars + modmark;
+#endif
+
+#if defined (HANDLE_MULTIBYTE)
+ memset (_rl_wrapped_line, 0, vis_lbsize);
+#endif
+
+ /* prompt_invis_chars_first_line is the number of invisible characters in
+ the first physical line of the prompt.
+ wrap_offset - prompt_invis_chars_first_line is the number of invis
+ chars on the second line. */
+
+ /* what if lpos is already >= _rl_screenwidth before we start drawing the
+ contents of the command line? */
+ while (lpos >= _rl_screenwidth)
+ {
+ /* fix from Darin Johnson <darin@acuson.com> for prompt string with
+ invisible characters that is longer than the screen width. The
+ prompt_invis_chars_first_line variable could be made into an array
+ saying how many invisible characters there are per line, but that's
+ probably too much work for the benefit gained. How many people have
+ prompts that exceed two physical lines?
+ Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
+ temp = ((newlines + 1) * _rl_screenwidth) +
+ ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
+ : ((newlines == 1) ? wrap_offset : 0))
+ : ((newlines == 0) ? wrap_offset :0));
+
+ inv_lbreaks[++newlines] = temp;
+ lpos -= _rl_screenwidth;
+ }
+
+ prompt_last_screen_line = newlines;
+
+ /* Draw the rest of the line (after the prompt) into invisible_line, keeping
+ track of where the cursor is (c_pos), the number of the line containing
+ the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin).
+ It maintains an array of line breaks for display (inv_lbreaks).
+ This handles expanding tabs for display and displaying meta characters. */
+ lb_linenum = 0;
+#if defined (HANDLE_MULTIBYTE)
+ in = 0;
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ memset (&ps, 0, sizeof (mbstate_t));
+ wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps);
+ }
+ else
+ wc_bytes = 1;
+ while (in < rl_end)
+#else
+ for (in = 0; in < rl_end; in++)
+#endif
+ {
+ c = (unsigned char)rl_line_buffer[in];
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ if (MB_INVALIDCH (wc_bytes))
+ {
+ /* Byte sequence is invalid or shortened. Assume that the
+ first byte represents a character. */
+ wc_bytes = 1;
+ /* Assume that a character occupies a single column. */
+ wc_width = 1;
+ memset (&ps, 0, sizeof (mbstate_t));
+ }
+ else if (MB_NULLWCH (wc_bytes))
+ break; /* Found '\0' */
+ else
+ {
+ temp = wcwidth (wc);
+ wc_width = (temp >= 0) ? temp : 1;
+ }
+ }
+#endif
+
+ if (out + 8 >= line_size) /* XXX - 8 for \t */
+ {
+ line_size *= 2;
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ invisible_line = (char *)xrealloc (invisible_line, line_size);
+ line = invisible_line;
+ }
+
+ if (in == rl_point)
+ {
+ c_pos = out;
+ lb_linenum = newlines;
+ }
+
+#if defined (HANDLE_MULTIBYTE)
+ if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */
+#else
+ if (META_CHAR (c))
+#endif
+ {
+ if (_rl_output_meta_chars == 0)
+ {
+ sprintf (line + out, "\\%o", c);
+
+ if (lpos + 4 >= _rl_screenwidth)
+ {
+ temp = _rl_screenwidth - lpos;
+ CHECK_INV_LBREAKS ();
+ inv_lbreaks[++newlines] = out + temp;
+ lpos = 4 - temp;
+ }
+ else
+ lpos += 4;
+
+ out += 4;
+ }
+ else
+ {
+ line[out++] = c;
+ CHECK_LPOS();
+ }
+ }
+#if defined (DISPLAY_TABS)
+ else if (c == '\t')
+ {
+ register int newout;
+
+#if 0
+ newout = (out | (int)7) + 1;
+#else
+ newout = out + 8 - lpos % 8;
+#endif
+ temp = newout - out;
+ if (lpos + temp >= _rl_screenwidth)
+ {
+ register int temp2;
+ temp2 = _rl_screenwidth - lpos;
+ CHECK_INV_LBREAKS ();
+ inv_lbreaks[++newlines] = out + temp2;
+ lpos = temp - temp2;
+ while (out < newout)
+ line[out++] = ' ';
+ }
+ else
+ {
+ while (out < newout)
+ line[out++] = ' ';
+ lpos += temp;
+ }
+ }
+#endif
+ else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
+ {
+ line[out++] = '\0'; /* XXX - sentinel */
+ CHECK_INV_LBREAKS ();
+ inv_lbreaks[++newlines] = out;
+ lpos = 0;
+ }
+ else if (CTRL_CHAR (c) || c == RUBOUT)
+ {
+ line[out++] = '^';
+ CHECK_LPOS();
+ line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+ CHECK_LPOS();
+ }
+ else
+ {
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ register int i;
+
+ _rl_wrapped_multicolumn = 0;
+
+ if (_rl_screenwidth < lpos + wc_width)
+ for (i = lpos; i < _rl_screenwidth; i++)
+ {
+ /* The space will be removed in update_line() */
+ line[out++] = ' ';
+ _rl_wrapped_multicolumn++;
+ CHECK_LPOS();
+ }
+ if (in == rl_point)
+ {
+ c_pos = out;
+ lb_linenum = newlines;
+ }
+ for (i = in; i < in+wc_bytes; i++)
+ line[out++] = rl_line_buffer[i];
+ for (i = 0; i < wc_width; i++)
+ CHECK_LPOS();
+ }
+ else
+ {
+ line[out++] = c;
+ CHECK_LPOS();
+ }
+#else
+ line[out++] = c;
+ CHECK_LPOS();
+#endif
+ }
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ in += wc_bytes;
+ wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps);
+ }
+ else
+ in++;
+#endif
+
+ }
+ line[out] = '\0';
+ if (c_pos < 0)
+ {
+ c_pos = out;
+ lb_linenum = newlines;
+ }
+
+ inv_botlin = lb_botlin = newlines;
+ CHECK_INV_LBREAKS ();
+ inv_lbreaks[newlines+1] = out;
+ cursor_linenum = lb_linenum;
+
+ /* C_POS == position in buffer where cursor should be placed.
+ CURSOR_LINENUM == line number where the cursor should be placed. */
+
+ /* PWP: now is when things get a bit hairy. The visible and invisible
+ line buffers are really multiple lines, which would wrap every
+ (screenwidth - 1) characters. Go through each in turn, finding
+ the changed region and updating it. The line order is top to bottom. */
+
+ /* If we can move the cursor up and down, then use multiple lines,
+ otherwise, let long lines display in a single terminal line, and
+ horizontally scroll it. */
+
+ if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
+ {
+ int nleft, pos, changed_screen_line;
+
+ if (!rl_display_fixed || forced_display)
+ {
+ forced_display = 0;
+
+ /* If we have more than a screenful of material to display, then
+ only display a screenful. We should display the last screen,
+ not the first. */
+ if (out >= _rl_screenchars)
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY);
+ else
+ out = _rl_screenchars - 1;
+ }
+
+ /* The first line is at character position 0 in the buffer. The
+ second and subsequent lines start at inv_lbreaks[N], offset by
+ OFFSET (which has already been calculated above). */
+
+#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0)
+#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
+#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l])
+#define VIS_CHARS(line) (visible_line + vis_lbreaks[line])
+#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line)
+#define INV_LINE(line) (invisible_line + inv_lbreaks[line])
+
+ /* For each line in the buffer, do the updating display. */
+ for (linenum = 0; linenum <= inv_botlin; linenum++)
+ {
+ update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
+ VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
+
+ /* If this is the line with the prompt, we might need to
+ compensate for invisible characters in the new line. Do
+ this only if there is not more than one new line (which
+ implies that we completely overwrite the old visible line)
+ and the new line is shorter than the old. Make sure we are
+ at the end of the new line before clearing. */
+ if (linenum == 0 &&
+ inv_botlin == 0 && _rl_last_c_pos == out &&
+ (wrap_offset > visible_wrap_offset) &&
+ (_rl_last_c_pos < visible_first_line_len))
+ {
+ nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+ if (nleft)
+ _rl_clear_to_eol (nleft);
+ }
+
+ /* Since the new first line is now visible, save its length. */
+ if (linenum == 0)
+ visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset;
+ }
+
+ /* We may have deleted some lines. If so, clear the left over
+ blank ones at the bottom out. */
+ if (_rl_vis_botlin > inv_botlin)
+ {
+ char *tt;
+ for (; linenum <= _rl_vis_botlin; linenum++)
+ {
+ tt = VIS_CHARS (linenum);
+ _rl_move_vert (linenum);
+ _rl_move_cursor_relative (0, tt);
+ _rl_clear_to_eol
+ ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
+ }
+ }
+ _rl_vis_botlin = inv_botlin;
+
+ /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a
+ different screen line during this redisplay. */
+ changed_screen_line = _rl_last_v_pos != cursor_linenum;
+ if (changed_screen_line)
+ {
+ _rl_move_vert (cursor_linenum);
+ /* If we moved up to the line with the prompt using _rl_term_up,
+ the physical cursor position on the screen stays the same,
+ but the buffer position needs to be adjusted to account
+ for invisible characters. */
+ if (cursor_linenum == 0 && wrap_offset)
+ _rl_last_c_pos += wrap_offset;
+ }
+
+ /* We have to reprint the prompt if it contains invisible
+ characters, since it's not generally OK to just reprint
+ the characters from the current cursor position. But we
+ only need to reprint it if the cursor is before the last
+ invisible character in the prompt string. */
+ nleft = prompt_visible_length + wrap_offset;
+ if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
+ _rl_last_c_pos <= prompt_last_invisible && local_prompt)
+ {
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ if (_rl_term_cr)
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+ _rl_output_some_chars (local_prompt, nleft);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft);
+ else
+ _rl_last_c_pos = nleft;
+ }
+
+ /* Where on that line? And where does that line start
+ in the buffer? */
+ pos = inv_lbreaks[cursor_linenum];
+ /* nleft == number of characters in the line buffer between the
+ start of the line and the cursor position. */
+ nleft = c_pos - pos;
+
+ /* Since _rl_backspace() doesn't know about invisible characters in the
+ prompt, and there's no good way to tell it, we compensate for
+ those characters here and call _rl_backspace() directly. */
+ if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
+ {
+ _rl_backspace (_rl_last_c_pos - nleft);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
+ else
+ _rl_last_c_pos = nleft;
+ }
+
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+ else if (nleft != _rl_last_c_pos)
+ _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+ }
+ }
+ else /* Do horizontal scrolling. */
+ {
+#define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0)
+ int lmargin, ndisp, nleft, phys_c_pos, t;
+
+ /* Always at top line. */
+ _rl_last_v_pos = 0;
+
+ /* Compute where in the buffer the displayed line should start. This
+ will be LMARGIN. */
+
+ /* The number of characters that will be displayed before the cursor. */
+ ndisp = c_pos - wrap_offset;
+ nleft = prompt_visible_length + wrap_offset;
+ /* Where the new cursor position will be on the screen. This can be
+ longer than SCREENWIDTH; if it is, lmargin will be adjusted. */
+ phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset);
+ t = _rl_screenwidth / 3;
+
+ /* If the number of characters had already exceeded the screenwidth,
+ last_lmargin will be > 0. */
+
+ /* If the number of characters to be displayed is more than the screen
+ width, compute the starting offset so that the cursor is about
+ two-thirds of the way across the screen. */
+ if (phys_c_pos > _rl_screenwidth - 2)
+ {
+ lmargin = c_pos - (2 * t);
+ if (lmargin < 0)
+ lmargin = 0;
+ /* If the left margin would be in the middle of a prompt with
+ invisible characters, don't display the prompt at all. */
+ if (wrap_offset && lmargin > 0 && lmargin < nleft)
+ lmargin = nleft;
+ }
+ else if (ndisp < _rl_screenwidth - 2) /* XXX - was -1 */
+ lmargin = 0;
+ else if (phys_c_pos < 1)
+ {
+ /* If we are moving back towards the beginning of the line and
+ the last margin is no longer correct, compute a new one. */
+ lmargin = ((c_pos - 1) / t) * t; /* XXX */
+ if (wrap_offset && lmargin > 0 && lmargin < nleft)
+ lmargin = nleft;
+ }
+ else
+ lmargin = last_lmargin;
+
+ /* If the first character on the screen isn't the first character
+ in the display line, indicate this with a special character. */
+ if (lmargin > 0)
+ line[lmargin] = '<';
+
+ /* If SCREENWIDTH characters starting at LMARGIN do not encompass
+ the whole line, indicate that with a special character at the
+ right edge of the screen. If LMARGIN is 0, we need to take the
+ wrap offset into account. */
+ t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth;
+ if (t < out)
+ line[t - 1] = '>';
+
+ if (!rl_display_fixed || forced_display || lmargin != last_lmargin)
+ {
+ forced_display = 0;
+ update_line (&visible_line[last_lmargin],
+ &invisible_line[lmargin],
+ 0,
+ _rl_screenwidth + visible_wrap_offset,
+ _rl_screenwidth + (lmargin ? 0 : wrap_offset),
+ 0);
+
+ /* If the visible new line is shorter than the old, but the number
+ of invisible characters is greater, and we are at the end of
+ the new line, we need to clear to eol. */
+ t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset);
+ if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) &&
+ (_rl_last_c_pos == out) &&
+ t < visible_first_line_len)
+ {
+ nleft = _rl_screenwidth - t;
+ _rl_clear_to_eol (nleft);
+ }
+ visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset);
+ if (visible_first_line_len > _rl_screenwidth)
+ visible_first_line_len = _rl_screenwidth;
+
+ _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
+ last_lmargin = lmargin;
+ }
+ }
+ fflush (rl_outstream);
+
+ /* Swap visible and non-visible lines. */
+ {
+ char *vtemp = visible_line;
+ int *itemp = vis_lbreaks, ntemp = vis_lbsize;
+
+ visible_line = invisible_line;
+ invisible_line = vtemp;
+
+ vis_lbreaks = inv_lbreaks;
+ inv_lbreaks = itemp;
+
+ vis_lbsize = inv_lbsize;
+ inv_lbsize = ntemp;
+
+ rl_display_fixed = 0;
+ /* If we are displaying on a single line, and last_lmargin is > 0, we
+ are not displaying any invisible characters, so set visible_wrap_offset
+ to 0. */
+ if (_rl_horizontal_scroll_mode && last_lmargin)
+ visible_wrap_offset = 0;
+ else
+ visible_wrap_offset = wrap_offset;
+ }
+}
+
+/* PWP: update_line() is based on finding the middle difference of each
+ line on the screen; vis:
+
+ /old first difference
+ /beginning of line | /old last same /old EOL
+ v v v v
+old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as
+new: eddie> Oh, my little buggy says to me, as lurgid as
+ ^ ^ ^ ^
+ \beginning of line | \new last same \new end of line
+ \new first difference
+
+ All are character pointers for the sake of speed. Special cases for
+ no differences, as well as for end of line additions must be handled.
+
+ Could be made even smarter, but this works well enough */
+static void
+update_line (old, new, current_line, omax, nmax, inv_botlin)
+ register char *old, *new;
+ int current_line, omax, nmax, inv_botlin;
+{
+ register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+ int temp, lendiff, wsatend, od, nd;
+ int current_invis_chars;
+ int col_lendiff, col_temp;
+#if defined (HANDLE_MULTIBYTE)
+ mbstate_t ps_new, ps_old;
+ int new_offset, old_offset, tmp;
+#endif
+
+ /* If we're at the right edge of a terminal that supports xn, we're
+ ready to wrap around, so do so. This fixes problems with knowing
+ the exact cursor position and cut-and-paste with certain terminal
+ emulators. In this calculation, TEMP is the physical screen
+ position of the cursor. */
+ temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+ if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
+ && _rl_last_v_pos == current_line - 1)
+ {
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ wchar_t wc;
+ mbstate_t ps;
+ int tempwidth, bytes;
+ size_t ret;
+
+ /* This fixes only double-column characters, but if the wrapped
+ character comsumes more than three columns, spaces will be
+ inserted in the string buffer. */
+ if (_rl_wrapped_line[current_line] > 0)
+ _rl_clear_to_eol (_rl_wrapped_line[current_line]);
+
+ memset (&ps, 0, sizeof (mbstate_t));
+ ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps);
+ if (MB_INVALIDCH (ret))
+ {
+ tempwidth = 1;
+ ret = 1;
+ }
+ else if (MB_NULLWCH (ret))
+ tempwidth = 0;
+ else
+ tempwidth = wcwidth (wc);
+
+ if (tempwidth > 0)
+ {
+ int count;
+ bytes = ret;
+ for (count = 0; count < bytes; count++)
+ putc (new[count], rl_outstream);
+ _rl_last_c_pos = tempwidth;
+ _rl_last_v_pos++;
+ memset (&ps, 0, sizeof (mbstate_t));
+ ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps);
+ if (ret != 0 && bytes != 0)
+ {
+ if (MB_INVALIDCH (ret))
+ memmove (old+bytes, old+1, strlen (old+1));
+ else
+ memmove (old+bytes, old+ret, strlen (old+ret));
+ memcpy (old, new, bytes);
+ }
+ }
+ else
+ {
+ putc (' ', rl_outstream);
+ _rl_last_c_pos = 1;
+ _rl_last_v_pos++;
+ if (old[0] && new[0])
+ old[0] = new[0];
+ }
+ }
+ else
+#endif
+ {
+ if (new[0])
+ putc (new[0], rl_outstream);
+ else
+ putc (' ', rl_outstream);
+ _rl_last_c_pos = 1; /* XXX */
+ _rl_last_v_pos++;
+ if (old[0] && new[0])
+ old[0] = new[0];
+ }
+ }
+
+
+ /* Find first difference. */
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ /* See if the old line is a subset of the new line, so that the
+ only change is adding characters. */
+ temp = (omax < nmax) ? omax : nmax;
+ if (memcmp (old, new, temp) == 0)
+ {
+ ofd = old + temp;
+ nfd = new + temp;
+ }
+ else
+ {
+ memset (&ps_new, 0, sizeof(mbstate_t));
+ memset (&ps_old, 0, sizeof(mbstate_t));
+
+ if (omax == nmax && STREQN (new, old, omax))
+ {
+ ofd = old + omax;
+ nfd = new + nmax;
+ }
+ else
+ {
+ new_offset = old_offset = 0;
+ for (ofd = old, nfd = new;
+ (ofd - old < omax) && *ofd &&
+ _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); )
+ {
+ old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY);
+ new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY);
+ ofd = old + old_offset;
+ nfd = new + new_offset;
+ }
+ }
+ }
+ }
+ else
+#endif
+ for (ofd = old, nfd = new;
+ (ofd - old < omax) && *ofd && (*ofd == *nfd);
+ ofd++, nfd++)
+ ;
+
+ /* Move to the end of the screen line. ND and OD are used to keep track
+ of the distance between ne and new and oe and old, respectively, to
+ move a subtraction out of each loop. */
+ for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++);
+ for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++);
+
+ /* If no difference, continue to next line. */
+ if (ofd == oe && nfd == ne)
+ return;
+
+ wsatend = 1; /* flag for trailing whitespace */
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY);
+ nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY);
+ while ((ols > ofd) && (nls > nfd))
+ {
+ memset (&ps_old, 0, sizeof (mbstate_t));
+ memset (&ps_new, 0, sizeof (mbstate_t));
+
+#if 0
+ /* On advice from jir@yamato.ibm.com */
+ _rl_adjust_point (old, ols - old, &ps_old);
+ _rl_adjust_point (new, nls - new, &ps_new);
+#endif
+
+ if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0)
+ break;
+
+ if (*ols == ' ')
+ wsatend = 0;
+
+ ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY);
+ nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY);
+ }
+ }
+ else
+ {
+#endif /* HANDLE_MULTIBYTE */
+ ols = oe - 1; /* find last same */
+ nls = ne - 1;
+ while ((ols > ofd) && (nls > nfd) && (*ols == *nls))
+ {
+ if (*ols != ' ')
+ wsatend = 0;
+ ols--;
+ nls--;
+ }
+#if defined (HANDLE_MULTIBYTE)
+ }
+#endif
+
+ if (wsatend)
+ {
+ ols = oe;
+ nls = ne;
+ }
+#if defined (HANDLE_MULTIBYTE)
+ /* This may not work for stateful encoding, but who cares? To handle
+ stateful encoding properly, we have to scan each string from the
+ beginning and compare. */
+ else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0)
+#else
+ else if (*ols != *nls)
+#endif
+ {
+ if (*ols) /* don't step past the NUL */
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY);
+ else
+ ols++;
+ }
+ if (*nls)
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY);
+ else
+ nls++;
+ }
+ }
+
+ /* count of invisible characters in the current invisible line. */
+ current_invis_chars = W_OFFSET (current_line, wrap_offset);
+ if (_rl_last_v_pos != current_line)
+ {
+ _rl_move_vert (current_line);
+ if (current_line == 0 && visible_wrap_offset)
+ _rl_last_c_pos += visible_wrap_offset;
+ }
+
+ /* If this is the first line and there are invisible characters in the
+ prompt string, and the prompt string has not changed, and the current
+ cursor position is before the last invisible character in the prompt,
+ and the index of the character to move to is past the end of the prompt
+ string, then redraw the entire prompt string. We can only do this
+ reliably if the terminal supports a `cr' capability.
+
+ This is not an efficiency hack -- there is a problem with redrawing
+ portions of the prompt string if they contain terminal escape
+ sequences (like drawing the `unbold' sequence without a corresponding
+ `bold') that manifests itself on certain terminals. */
+
+ lendiff = local_prompt ? strlen (local_prompt) : 0;
+ od = ofd - old; /* index of first difference in visible line */
+ if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+ _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 &&
+ od >= lendiff && _rl_last_c_pos <= prompt_last_invisible)
+ {
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+ _rl_output_some_chars (local_prompt, lendiff);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+ else
+ _rl_last_c_pos = lendiff;
+ }
+
+ _rl_move_cursor_relative (od, old);
+
+ /* if (len (new) > len (old))
+ lendiff == difference in buffer
+ col_lendiff == difference on screen
+ When not using multibyte characters, these are equal */
+ lendiff = (nls - nfd) - (ols - ofd);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ col_lendiff = _rl_col_width (new, nfd - new, nls - new) - _rl_col_width (old, ofd - old, ols - old);
+ else
+ col_lendiff = lendiff;
+
+ /* If we are changing the number of invisible characters in a line, and
+ the spot of first difference is before the end of the invisible chars,
+ lendiff needs to be adjusted. */
+ if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+ current_invis_chars != visible_wrap_offset)
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ lendiff += visible_wrap_offset - current_invis_chars;
+ col_lendiff += visible_wrap_offset - current_invis_chars;
+ }
+ else
+ {
+ lendiff += visible_wrap_offset - current_invis_chars;
+ col_lendiff = lendiff;
+ }
+ }
+
+ /* Insert (diff (len (old), len (new)) ch. */
+ temp = ne - nfd;
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ col_temp = _rl_col_width (new, nfd - new, ne - new);
+ else
+ col_temp = temp;
+
+ if (col_lendiff > 0) /* XXX - was lendiff */
+ {
+ /* Non-zero if we're increasing the number of lines. */
+ int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
+ /* Sometimes it is cheaper to print the characters rather than
+ use the terminal's capabilities. If we're growing the number
+ of lines, make sure we actually cause the new line to wrap
+ around on auto-wrapping terminals. */
+ if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
+ {
+ /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
+ _rl_horizontal_scroll_mode == 1, inserting the characters with
+ _rl_term_IC or _rl_term_ic will screw up the screen because of the
+ invisible characters. We need to just draw them. */
+ if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 ||
+ lendiff <= prompt_visible_length || !current_invis_chars))
+ {
+ insert_some_chars (nfd, lendiff, col_lendiff);
+ _rl_last_c_pos += col_lendiff;
+ }
+ else if (*ols == 0 && lendiff > 0)
+ {
+ /* At the end of a line the characters do not have to
+ be "inserted". They can just be placed on the screen. */
+ /* However, this screws up the rest of this block, which
+ assumes you've done the insert because you can. */
+ _rl_output_some_chars (nfd, lendiff);
+ _rl_last_c_pos += col_lendiff;
+ }
+ else
+ {
+ /* We have horizontal scrolling and we are not inserting at
+ the end. We have invisible characters in this line. This
+ is a dumb update. */
+ _rl_output_some_chars (nfd, temp);
+ _rl_last_c_pos += col_temp;
+ return;
+ }
+ /* Copy (new) chars to screen from first diff to last match. */
+ temp = nls - nfd;
+ if ((temp - lendiff) > 0)
+ {
+ _rl_output_some_chars (nfd + lendiff, temp - lendiff);
+#if 1
+ /* XXX -- this bears closer inspection. Fixes a redisplay bug
+ reported against bash-3.0-alpha by Andreas Schwab involving
+ multibyte characters and prompt strings with invisible
+ characters, but was previously disabled. */
+ _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
+#else
+ _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff);
+#endif
+ }
+ }
+ else
+ {
+ /* cannot insert chars, write to EOL */
+ _rl_output_some_chars (nfd, temp);
+ _rl_last_c_pos += col_temp;
+ }
+ }
+ else /* Delete characters from line. */
+ {
+ /* If possible and inexpensive to use terminal deletion, then do so. */
+ if (_rl_term_dc && (2 * col_temp) >= -col_lendiff)
+ {
+ /* If all we're doing is erasing the invisible characters in the
+ prompt string, don't bother. It screws up the assumptions
+ about what's on the screen. */
+ if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 &&
+ -lendiff == visible_wrap_offset)
+ col_lendiff = 0;
+
+ if (col_lendiff)
+ delete_chars (-col_lendiff); /* delete (diff) characters */
+
+ /* Copy (new) chars to screen from first diff to last match */
+ temp = nls - nfd;
+ if (temp > 0)
+ {
+ _rl_output_some_chars (nfd, temp);
+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
+ }
+ }
+ /* Otherwise, print over the existing material. */
+ else
+ {
+ if (temp > 0)
+ {
+ _rl_output_some_chars (nfd, temp);
+ _rl_last_c_pos += col_temp;
+ }
+ lendiff = (oe - old) - (ne - new);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ col_lendiff = _rl_col_width (old, 0, oe - old) - _rl_col_width (new, 0, ne - new);
+ else
+ col_lendiff = lendiff;
+
+ if (col_lendiff)
+ {
+ if (_rl_term_autowrap && current_line < inv_botlin)
+ space_to_eol (col_lendiff);
+ else
+ _rl_clear_to_eol (col_lendiff);
+ }
+ }
+ }
+}
+
+/* Tell the update routines that we have moved onto a new (empty) line. */
+int
+rl_on_new_line ()
+{
+ if (visible_line)
+ visible_line[0] = '\0';
+
+ _rl_last_c_pos = _rl_last_v_pos = 0;
+ _rl_vis_botlin = last_lmargin = 0;
+ if (vis_lbreaks)
+ vis_lbreaks[0] = vis_lbreaks[1] = 0;
+ visible_wrap_offset = 0;
+ return 0;
+}
+
+/* Tell the update routines that we have moved onto a new line with the
+ prompt already displayed. Code originally from the version of readline
+ distributed with CLISP. rl_expand_prompt must have already been called
+ (explicitly or implicitly). This still doesn't work exactly right. */
+int
+rl_on_new_line_with_prompt ()
+{
+ int prompt_size, i, l, real_screenwidth, newlines;
+ char *prompt_last_line, *lprompt;
+
+ /* Initialize visible_line and invisible_line to ensure that they can hold
+ the already-displayed prompt. */
+ prompt_size = strlen (rl_prompt) + 1;
+ init_line_structures (prompt_size);
+
+ /* Make sure the line structures hold the already-displayed prompt for
+ redisplay. */
+ lprompt = local_prompt ? local_prompt : rl_prompt;
+ strcpy (visible_line, lprompt);
+ strcpy (invisible_line, lprompt);
+
+ /* If the prompt contains newlines, take the last tail. */
+ prompt_last_line = strrchr (rl_prompt, '\n');
+ if (!prompt_last_line)
+ prompt_last_line = rl_prompt;
+
+ l = strlen (prompt_last_line);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+ else
+ _rl_last_c_pos = l;
+
+ /* Dissect prompt_last_line into screen lines. Note that here we have
+ to use the real screenwidth. Readline's notion of screenwidth might be
+ one less, see terminal.c. */
+ real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1);
+ _rl_last_v_pos = l / real_screenwidth;
+ /* If the prompt length is a multiple of real_screenwidth, we don't know
+ whether the cursor is at the end of the last line, or already at the
+ beginning of the next line. Output a newline just to be safe. */
+ if (l > 0 && (l % real_screenwidth) == 0)
+ _rl_output_some_chars ("\n", 1);
+ last_lmargin = 0;
+
+ newlines = 0; i = 0;
+ while (i <= l)
+ {
+ _rl_vis_botlin = newlines;
+ vis_lbreaks[newlines++] = i;
+ i += real_screenwidth;
+ }
+ vis_lbreaks[newlines] = l;
+ visible_wrap_offset = 0;
+
+ rl_display_prompt = rl_prompt; /* XXX - make sure it's set */
+
+ return 0;
+}
+
+/* Actually update the display, period. */
+int
+rl_forced_update_display ()
+{
+ if (visible_line)
+ {
+ register char *temp = visible_line;
+
+ while (*temp)
+ *temp++ = '\0';
+ }
+ rl_on_new_line ();
+ forced_display++;
+ (*rl_redisplay_function) ();
+ return 0;
+}
+
+/* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+ DATA is the contents of the screen line of interest; i.e., where
+ the movement is being done. */
+void
+_rl_move_cursor_relative (new, data)
+ int new;
+ const char *data;
+{
+ register int i;
+
+ /* If we don't have to do anything, then return. */
+#if defined (HANDLE_MULTIBYTE)
+ /* If we have multibyte characters, NEW is indexed by the buffer point in
+ a multibyte string, but _rl_last_c_pos is the display position. In
+ this case, NEW's display position is not obvious and must be
+ calculated. */
+ if (MB_CUR_MAX == 1 || rl_byte_oriented)
+ {
+ if (_rl_last_c_pos == new)
+ return;
+ }
+ else if (_rl_last_c_pos == _rl_col_width (data, 0, new))
+ return;
+#else
+ if (_rl_last_c_pos == new) return;
+#endif
+
+ /* It may be faster to output a CR, and then move forwards instead
+ of moving backwards. */
+ /* i == current physical cursor position. */
+ i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+ if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
+ (_rl_term_autowrap && i == _rl_screenwidth))
+ {
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif /* !__MSDOS__ */
+ _rl_last_c_pos = 0;
+ }
+
+ if (_rl_last_c_pos < new)
+ {
+ /* Move the cursor forward. We do it by printing the command
+ to move the cursor forward if there is one, else print that
+ portion of the output buffer again. Which is cheaper? */
+
+ /* The above comment is left here for posterity. It is faster
+ to print one character (non-control) than to print a control
+ sequence telling the terminal to move forward one character.
+ That kind of control is for people who don't know what the
+ data is underneath the cursor. */
+#if defined (HACK_TERMCAP_MOTION)
+ if (_rl_term_forward_char)
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ int width;
+ width = _rl_col_width (data, _rl_last_c_pos, new);
+ for (i = 0; i < width; i++)
+ tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+ }
+ else
+ {
+ for (i = _rl_last_c_pos; i < new; i++)
+ tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+ }
+ }
+ else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+ for (i = 0; i < new; i++)
+ putc (data[i], rl_outstream);
+ }
+ else
+ for (i = _rl_last_c_pos; i < new; i++)
+ putc (data[i], rl_outstream);
+
+#else /* !HACK_TERMCAP_MOTION */
+
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+ for (i = 0; i < new; i++)
+ putc (data[i], rl_outstream);
+ }
+ else
+ for (i = _rl_last_c_pos; i < new; i++)
+ putc (data[i], rl_outstream);
+
+#endif /* !HACK_TERMCAP_MOTION */
+
+ }
+#if defined (HANDLE_MULTIBYTE)
+ /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
+ The byte length of the string is probably bigger than the column width
+ of the string, which means that if NEW == _rl_last_c_pos, then NEW's
+ display point is less than _rl_last_c_pos. */
+ else if (_rl_last_c_pos >= new)
+#else
+ else if (_rl_last_c_pos > new)
+#endif
+ {
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
+ else
+ _rl_backspace (_rl_last_c_pos - new);
+ }
+
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = _rl_col_width (data, 0, new);
+ else
+ _rl_last_c_pos = new;
+}
+
+/* PWP: move the cursor up or down. */
+void
+_rl_move_vert (to)
+ int to;
+{
+ register int delta, i;
+
+ if (_rl_last_v_pos == to || to > _rl_screenheight)
+ return;
+
+ if ((delta = to - _rl_last_v_pos) > 0)
+ {
+ for (i = 0; i < delta; i++)
+ putc ('\n', rl_outstream);
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+ _rl_last_c_pos = 0;
+ }
+ else
+ { /* delta < 0 */
+ if (_rl_term_up && *_rl_term_up)
+ for (i = 0; i < -delta; i++)
+ tputs (_rl_term_up, 1, _rl_output_character_function);
+ }
+
+ _rl_last_v_pos = to; /* Now TO is here */
+}
+
+/* Physically print C on rl_outstream. This is for functions which know
+ how to optimize the display. Return the number of characters output. */
+int
+rl_show_char (c)
+ int c;
+{
+ int n = 1;
+ if (META_CHAR (c) && (_rl_output_meta_chars == 0))
+ {
+ fprintf (rl_outstream, "M-");
+ n += 2;
+ c = UNMETA (c);
+ }
+
+#if defined (DISPLAY_TABS)
+ if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT)
+#else
+ if (CTRL_CHAR (c) || c == RUBOUT)
+#endif /* !DISPLAY_TABS */
+ {
+ fprintf (rl_outstream, "C-");
+ n += 2;
+ c = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+ }
+
+ putc (c, rl_outstream);
+ fflush (rl_outstream);
+ return n;
+}
+
+int
+rl_character_len (c, pos)
+ register int c, pos;
+{
+ unsigned char uc;
+
+ uc = (unsigned char)c;
+
+ if (META_CHAR (uc))
+ return ((_rl_output_meta_chars == 0) ? 4 : 1);
+
+ if (uc == '\t')
+ {
+#if defined (DISPLAY_TABS)
+ return (((pos | 7) + 1) - pos);
+#else
+ return (2);
+#endif /* !DISPLAY_TABS */
+ }
+
+ if (CTRL_CHAR (c) || c == RUBOUT)
+ return (2);
+
+ return ((ISPRINT (uc)) ? 1 : 2);
+}
+
+/* How to print things in the "echo-area". The prompt is treated as a
+ mini-modeline. */
+
+#if defined (USE_VARARGS)
+int
+#if defined (PREFER_STDARG)
+rl_message (const char *format, ...)
+#else
+rl_message (va_alist)
+ va_dcl
+#endif
+{
+ va_list args;
+#if defined (PREFER_VARARGS)
+ char *format;
+#endif
+
+#if defined (PREFER_STDARG)
+ va_start (args, format);
+#else
+ va_start (args);
+ format = va_arg (args, char *);
+#endif
+
+#if defined (HAVE_VSNPRINTF)
+ vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args);
+#else
+ vsprintf (msg_buf, format, args);
+ msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+#endif
+ va_end (args);
+
+ rl_display_prompt = msg_buf;
+ (*rl_redisplay_function) ();
+ return 0;
+}
+#else /* !USE_VARARGS */
+int
+rl_message (format, arg1, arg2)
+ char *format;
+{
+ sprintf (msg_buf, format, arg1, arg2);
+ msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+ rl_display_prompt = msg_buf;
+ (*rl_redisplay_function) ();
+ return 0;
+}
+#endif /* !USE_VARARGS */
+
+/* How to clear things from the "echo-area". */
+int
+rl_clear_message ()
+{
+ rl_display_prompt = rl_prompt;
+ (*rl_redisplay_function) ();
+ return 0;
+}
+
+int
+rl_reset_line_state ()
+{
+ rl_on_new_line ();
+
+ rl_display_prompt = rl_prompt ? rl_prompt : "";
+ forced_display = 1;
+ return 0;
+}
+
+/* These are getting numerous enough that it's time to create a struct. */
+
+static char *saved_local_prompt;
+static char *saved_local_prefix;
+static int saved_last_invisible;
+static int saved_visible_length;
+static int saved_invis_chars_first_line;
+static int saved_physical_chars;
+
+void
+rl_save_prompt ()
+{
+ saved_local_prompt = local_prompt;
+ saved_local_prefix = local_prompt_prefix;
+ saved_last_invisible = prompt_last_invisible;
+ saved_visible_length = prompt_visible_length;
+ saved_invis_chars_first_line = prompt_invis_chars_first_line;
+ saved_physical_chars = prompt_physical_chars;
+
+ local_prompt = local_prompt_prefix = (char *)0;
+ prompt_last_invisible = prompt_visible_length = 0;
+ prompt_invis_chars_first_line = prompt_physical_chars = 0;
+}
+
+void
+rl_restore_prompt ()
+{
+ FREE (local_prompt);
+ FREE (local_prompt_prefix);
+
+ local_prompt = saved_local_prompt;
+ local_prompt_prefix = saved_local_prefix;
+ prompt_last_invisible = saved_last_invisible;
+ prompt_visible_length = saved_visible_length;
+ prompt_invis_chars_first_line = saved_invis_chars_first_line;
+ prompt_physical_chars = saved_physical_chars;
+}
+
+char *
+_rl_make_prompt_for_search (pchar)
+ int pchar;
+{
+ int len;
+ char *pmt;
+
+ rl_save_prompt ();
+
+ if (saved_local_prompt == 0)
+ {
+ len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
+ pmt = (char *)xmalloc (len + 2);
+ if (len)
+ strcpy (pmt, rl_prompt);
+ pmt[len] = pchar;
+ pmt[len+1] = '\0';
+ }
+ else
+ {
+ len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
+ pmt = (char *)xmalloc (len + 2);
+ if (len)
+ strcpy (pmt, saved_local_prompt);
+ pmt[len] = pchar;
+ pmt[len+1] = '\0';
+ local_prompt = savestring (pmt);
+ prompt_last_invisible = saved_last_invisible;
+ prompt_visible_length = saved_visible_length + 1;
+ }
+
+ return pmt;
+}
+
+/* Quick redisplay hack when erasing characters at the end of the line. */
+void
+_rl_erase_at_end_of_line (l)
+ int l;
+{
+ register int i;
+
+ _rl_backspace (l);
+ for (i = 0; i < l; i++)
+ putc (' ', rl_outstream);
+ _rl_backspace (l);
+ for (i = 0; i < l; i++)
+ visible_line[--_rl_last_c_pos] = '\0';
+ rl_display_fixed++;
+}
+
+/* Clear to the end of the line. COUNT is the minimum
+ number of character spaces to clear, */
+void
+_rl_clear_to_eol (count)
+ int count;
+{
+ if (_rl_term_clreol)
+ tputs (_rl_term_clreol, 1, _rl_output_character_function);
+ else if (count)
+ space_to_eol (count);
+}
+
+/* Clear to the end of the line using spaces. COUNT is the minimum
+ number of character spaces to clear, */
+static void
+space_to_eol (count)
+ int count;
+{
+ register int i;
+
+ for (i = 0; i < count; i++)
+ putc (' ', rl_outstream);
+
+ _rl_last_c_pos += count;
+}
+
+void
+_rl_clear_screen ()
+{
+ if (_rl_term_clrpag)
+ tputs (_rl_term_clrpag, 1, _rl_output_character_function);
+ else
+ rl_crlf ();
+}
+
+/* Insert COUNT characters from STRING to the output stream at column COL. */
+static void
+insert_some_chars (string, count, col)
+ char *string;
+ int count, col;
+{
+ /* DEBUGGING */
+ if (MB_CUR_MAX == 1 || rl_byte_oriented)
+ if (count != col)
+ fprintf(stderr, "readline: debug: insert_some_chars: count (%d) != col (%d)\n", count, col);
+
+ /* If IC is defined, then we do not have to "enter" insert mode. */
+ if (_rl_term_IC)
+ {
+ char *buffer;
+
+ buffer = tgoto (_rl_term_IC, 0, col);
+ tputs (buffer, 1, _rl_output_character_function);
+ _rl_output_some_chars (string, count);
+ }
+ else
+ {
+ register int i;
+
+ /* If we have to turn on insert-mode, then do so. */
+ if (_rl_term_im && *_rl_term_im)
+ tputs (_rl_term_im, 1, _rl_output_character_function);
+
+ /* If there is a special command for inserting characters, then
+ use that first to open up the space. */
+ if (_rl_term_ic && *_rl_term_ic)
+ {
+ for (i = col; i--; )
+ tputs (_rl_term_ic, 1, _rl_output_character_function);
+ }
+
+ /* Print the text. */
+ _rl_output_some_chars (string, count);
+
+ /* If there is a string to turn off insert mode, we had best use
+ it now. */
+ if (_rl_term_ei && *_rl_term_ei)
+ tputs (_rl_term_ei, 1, _rl_output_character_function);
+ }
+}
+
+/* Delete COUNT characters from the display line. */
+static void
+delete_chars (count)
+ int count;
+{
+ if (count > _rl_screenwidth) /* XXX */
+ return;
+
+ if (_rl_term_DC && *_rl_term_DC)
+ {
+ char *buffer;
+ buffer = tgoto (_rl_term_DC, count, count);
+ tputs (buffer, count, _rl_output_character_function);
+ }
+ else
+ {
+ if (_rl_term_dc && *_rl_term_dc)
+ while (count--)
+ tputs (_rl_term_dc, 1, _rl_output_character_function);
+ }
+}
+
+void
+_rl_update_final ()
+{
+ int full_lines;
+
+ full_lines = 0;
+ /* If the cursor is the only thing on an otherwise-blank last line,
+ compensate so we don't print an extra CRLF. */
+ if (_rl_vis_botlin && _rl_last_c_pos == 0 &&
+ visible_line[vis_lbreaks[_rl_vis_botlin]] == 0)
+ {
+ _rl_vis_botlin--;
+ full_lines = 1;
+ }
+ _rl_move_vert (_rl_vis_botlin);
+ /* If we've wrapped lines, remove the final xterm line-wrap flag. */
+ if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth))
+ {
+ char *last_line;
+
+ last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]];
+ _rl_move_cursor_relative (_rl_screenwidth - 1, last_line);
+ _rl_clear_to_eol (0);
+ putc (last_line[_rl_screenwidth - 1], rl_outstream);
+ }
+ _rl_vis_botlin = 0;
+ rl_crlf ();
+ fflush (rl_outstream);
+ rl_display_fixed++;
+}
+
+/* Move to the start of the current line. */
+static void
+cr ()
+{
+ if (_rl_term_cr)
+ {
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+ _rl_last_c_pos = 0;
+ }
+}
+
+/* Redraw the last line of a multi-line prompt that may possibly contain
+ terminal escape sequences. Called with the cursor at column 0 of the
+ line to draw the prompt on. */
+static void
+redraw_prompt (t)
+ char *t;
+{
+ char *oldp, *oldl, *oldlprefix;
+ int oldlen, oldlast, oldplen, oldninvis, oldphyschars;
+
+ /* Geez, I should make this a struct. */
+ oldp = rl_display_prompt;
+ oldl = local_prompt;
+ oldlprefix = local_prompt_prefix;
+ oldlen = prompt_visible_length;
+ oldplen = prompt_prefix_length;
+ oldlast = prompt_last_invisible;
+ oldninvis = prompt_invis_chars_first_line;
+ oldphyschars = prompt_physical_chars;
+
+ rl_display_prompt = t;
+ local_prompt = expand_prompt (t, &prompt_visible_length,
+ &prompt_last_invisible,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
+ local_prompt_prefix = (char *)NULL;
+ rl_forced_update_display ();
+
+ rl_display_prompt = oldp;
+ local_prompt = oldl;
+ local_prompt_prefix = oldlprefix;
+ prompt_visible_length = oldlen;
+ prompt_prefix_length = oldplen;
+ prompt_last_invisible = oldlast;
+ prompt_invis_chars_first_line = oldninvis;
+ prompt_physical_chars = oldphyschars;
+}
+
+/* Redisplay the current line after a SIGWINCH is received. */
+void
+_rl_redisplay_after_sigwinch ()
+{
+ char *t;
+
+ /* Clear the current line and put the cursor at column 0. Make sure
+ the right thing happens if we have wrapped to a new screen line. */
+ if (_rl_term_cr)
+ {
+#if defined (__MSDOS__)
+ putc ('\r', rl_outstream);
+#else
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+ _rl_last_c_pos = 0;
+#if defined (__MSDOS__)
+ space_to_eol (_rl_screenwidth);
+ putc ('\r', rl_outstream);
+#else
+ if (_rl_term_clreol)
+ tputs (_rl_term_clreol, 1, _rl_output_character_function);
+ else
+ {
+ space_to_eol (_rl_screenwidth);
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+ }
+#endif
+ if (_rl_last_v_pos > 0)
+ _rl_move_vert (0);
+ }
+ else
+ rl_crlf ();
+
+ /* Redraw only the last line of a multi-line prompt. */
+ t = strrchr (rl_display_prompt, '\n');
+ if (t)
+ redraw_prompt (++t);
+ else
+ rl_forced_update_display ();
+}
+
+void
+_rl_clean_up_for_exit ()
+{
+ if (readline_echoing_p)
+ {
+ _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+ rl_restart_output (1, 0);
+ }
+}
+
+void
+_rl_erase_entire_line ()
+{
+ cr ();
+ _rl_clear_to_eol (0);
+ cr ();
+ fflush (rl_outstream);
+}
+
+/* return the `current display line' of the cursor -- the number of lines to
+ move up to get to the first screen line of the current readline line. */
+int
+_rl_current_display_line ()
+{
+ int ret, nleft;
+
+ /* Find out whether or not there might be invisible characters in the
+ editing buffer. */
+ if (rl_display_prompt == rl_prompt)
+ nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length;
+ else
+ nleft = _rl_last_c_pos - _rl_screenwidth;
+
+ if (nleft > 0)
+ ret = 1 + nleft / _rl_screenwidth;
+ else
+ ret = 0;
+
+ return ret;
+}
+
+#if defined (HANDLE_MULTIBYTE)
+/* Calculate the number of screen columns occupied by STR from START to END.
+ In the case of multibyte characters with stateful encoding, we have to
+ scan from the beginning of the string to take the state into account. */
+static int
+_rl_col_width (str, start, end)
+ const char *str;
+ int start, end;
+{
+ wchar_t wc;
+ mbstate_t ps = {0};
+ int tmp, point, width, max;
+
+ if (end <= start)
+ return 0;
+
+ point = 0;
+ max = end;
+
+ while (point < start)
+ {
+ tmp = mbrlen (str + point, max, &ps);
+ if (MB_INVALIDCH ((size_t)tmp))
+ {
+ /* In this case, the bytes are invalid or too short to compose a
+ multibyte character, so we assume that the first byte represents
+ a single character. */
+ point++;
+ max--;
+
+ /* Clear the state of the byte sequence, because in this case the
+ effect of mbstate is undefined. */
+ memset (&ps, 0, sizeof (mbstate_t));
+ }
+ else if (MB_NULLWCH (tmp))
+ break; /* Found '\0' */
+ else
+ {
+ point += tmp;
+ max -= tmp;
+ }
+ }
+
+ /* If START is not a byte that starts a character, then POINT will be
+ greater than START. In this case, assume that (POINT - START) gives
+ a byte count that is the number of columns of difference. */
+ width = point - start;
+
+ while (point < end)
+ {
+ 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
+ multibyte character, so we assume that the first byte represents
+ a single character. */
+ point++;
+ max--;
+
+ /* and assume that the byte occupies a single column. */
+ width++;
+
+ /* Clear the state of the byte sequence, because in this case the
+ effect of mbstate is undefined. */
+ memset (&ps, 0, sizeof (mbstate_t));
+ }
+ else if (MB_NULLWCH (tmp))
+ break; /* Found '\0' */
+ else
+ {
+ point += tmp;
+ max -= tmp;
+ tmp = wcwidth(wc);
+ width += (tmp >= 0) ? tmp : 1;
+ }
+ }
+
+ width += point - end;
+
+ return width;
+}
+#endif /* HANDLE_MULTIBYTE */
+++ /dev/null
-
-@node GNU Free Documentation License
-@appendixsec GNU Free Documentation License
-
-@cindex FDL, GNU Free Documentation License
-@center Version 1.2, November 2002
-
-@display
-Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@enumerate 0
-@item
-PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document @dfn{free} in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of ``copyleft'', which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-@item
-APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The ``Document'', below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as ``you''. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A ``Modified Version'' of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A ``Secondary Section'' is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The ``Invariant Sections'' are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The ``Cover Texts'' are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A ``Transparent'' copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not ``Transparent'' is called ``Opaque''.
-
-Examples of suitable formats for Transparent copies include plain
-@sc{ascii} without markup, Texinfo input format, La@TeX{} input
-format, @acronym{SGML} or @acronym{XML} using a publicly available
-@acronym{DTD}, and standard-conforming simple @acronym{HTML},
-PostScript or @acronym{PDF} designed for human modification. Examples
-of transparent image formats include @acronym{PNG}, @acronym{XCF} and
-@acronym{JPG}. Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, @acronym{SGML} or
-@acronym{XML} for which the @acronym{DTD} and/or processing tools are
-not generally available, and the machine-generated @acronym{HTML},
-PostScript or @acronym{PDF} produced by some word processors for
-output purposes only.
-
-The ``Title Page'' means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, ``Title Page'' means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section ``Entitled XYZ'' means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as ``Acknowledgements'',
-``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
-of such a section when you modify the Document means that it remains a
-section ``Entitled XYZ'' according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-@item
-VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-@item
-COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-@item
-MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-@enumerate A
-@item
-Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
-@item
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
-@item
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
-@item
-Preserve all the copyright notices of the Document.
-
-@item
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
-@item
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
-@item
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
-@item
-Include an unaltered copy of this License.
-
-@item
-Preserve the section Entitled ``History'', Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled ``History'' in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
-@item
-Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the ``History'' section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
-@item
-For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
-@item
-Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
-@item
-Delete any section Entitled ``Endorsements''. Such a section
-may not be included in the Modified Version.
-
-@item
-Do not retitle any existing section to be Entitled ``Endorsements'' or
-to conflict in title with any Invariant Section.
-
-@item
-Preserve any Warranty Disclaimers.
-@end enumerate
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled ``Endorsements'', provided it contains
-nothing but endorsements of your Modified Version by various
-parties---for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-@item
-COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled ``History''
-in the various original documents, forming one section Entitled
-``History''; likewise combine any sections Entitled ``Acknowledgements'',
-and any sections Entitled ``Dedications''. You must delete all
-sections Entitled ``Endorsements.''
-
-@item
-COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-@item
-AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an ``aggregate'' if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-@item
-TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled ``Acknowledgements'',
-``Dedications'', or ``History'', the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-@item
-TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-@uref{http://www.gnu.org/copyleft/}.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License ``or any later version'' applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-@end enumerate
-
-@page
-@appendixsubsec ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-@smallexample
-@group
- Copyright (C) @var{year} @var{your name}.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-@end group
-@end smallexample
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the ``with...Texts.'' line with this:
-
-@smallexample
-@group
- with the Invariant Sections being @var{list their titles}, with
- the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
- being @var{list}.
-@end group
-@end smallexample
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-@c Local Variables:
-@c ispell-local-pdict: "ispell-dict"
-@c End:
-
--- /dev/null
+../../../doc/fdl.texi
\ No newline at end of file
<HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on September, 22 2003 by texi2html 1.64 -->
+<!-- Created on July, 27 2004 by texi2html 1.64 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
Karl Berry <karl@freefriends.org>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
<P></P>
<BR>
<FONT SIZE="-1">
This document was generated
-by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
This is history.info, produced by makeinfo version 4.5 from
./history.texi.
-This document describes the GNU History library (version 5.0, 19
-September 2003), a programming tool that provides a consistent user
+This document describes the GNU History library (version 5.0, 28
+January 2004), a programming tool that provides a consistent user
interface for recalling lines of previously typed input.
- Copyright (C) 1988-2003 Free Software Foundation, Inc.
+ Copyright (C) 1988-2004 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
\1f
Tag Table:
-Node: Top\7f1282
-Node: Using History Interactively\7f1910
-Node: History Interaction\7f2417
-Node: Event Designators\7f3836
-Node: Word Designators\7f4760
-Node: Modifiers\7f6390
-Node: Programming with GNU History\7f7608
-Node: Introduction to History\7f8339
-Node: History Storage\7f10024
-Node: History Functions\7f11159
-Node: Initializing History and State Management\7f12143
-Node: History List Management\7f12943
-Node: Information About the History List\7f14957
-Node: Moving Around the History List\7f16439
-Node: Searching the History List\7f17428
-Node: Managing the History File\7f19346
-Node: History Expansion\7f21152
-Node: History Variables\7f23047
-Node: History Programming Example\7f25836
-Node: Copying This Manual\7f28558
-Node: GNU Free Documentation License\7f28796
-Node: Concept Index\7f51189
-Node: Function and Variable Index\7f51739
+Node: Top\7f1280
+Node: Using History Interactively\7f1908
+Node: History Interaction\7f2415
+Node: Event Designators\7f3834
+Node: Word Designators\7f4758
+Node: Modifiers\7f6388
+Node: Programming with GNU History\7f7606
+Node: Introduction to History\7f8337
+Node: History Storage\7f10022
+Node: History Functions\7f11157
+Node: Initializing History and State Management\7f12141
+Node: History List Management\7f12941
+Node: Information About the History List\7f14955
+Node: Moving Around the History List\7f16437
+Node: Searching the History List\7f17426
+Node: Managing the History File\7f19344
+Node: History Expansion\7f21150
+Node: History Variables\7f23045
+Node: History Programming Example\7f25834
+Node: Copying This Manual\7f28556
+Node: GNU Free Documentation License\7f28794
+Node: Concept Index\7f51187
+Node: Function and Variable Index\7f51737
\1f
End Tag Table
-This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04
-**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/history.
-texi
+This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31
+**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/his
+tory.texi
-(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/history.t
-exi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
+(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/hist
+ory.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
\bindingoffset=\dimen16
\normaloffset=\dimen17
\pagewidth=\dimen18
\toksD=\toks18
\boxA=\box19
\countA=\count30
- fonts,
+
+fonts,
\sffam=\fam8
\textleading=\dimen26
\mainmagstep=\count31
\fontdepth=\count32
-
-page headings,
+ page headings,
\titlepagetopglue=\skip20
\titlepagebottomglue=\skip21
\evenheadline=\toks19
\lastnegativepageno=\count43
\shortappendixwidth=\dimen33
\tocindent=\dimen34
- environments,
+
+environments,
\errorbox=\box22
\lispnarrowing=\skip30
\envskipamount=\skip31
\lskip=\skip35
\rskip=\skip36
\tabw=\dimen38
-
-defuns,
+ defuns,
\defbodyindent=\skip37
\defargsindent=\skip38
\deflastargmargin=\skip39
[22] (history.vrs) [23] [24] )
Here is how much of TeX's memory you used:
1399 strings out of 13013
- 16305 string characters out of 97233
- 45527 words of memory out of 263001
+ 16315 string characters out of 97233
+ 45523 words of memory out of 263001
2271 multiletter control sequences out of 10000+0
31953 words of font info for 111 fonts, out of 400000 for 1000
19 hyphenation exceptions out of 1000
- 15i,6n,17p,306b,649s stack positions out of 300i,100n,500p,50000b,4000s
+ 15i,6n,17p,311b,649s stack positions out of 300i,100n,500p,50000b,4000s
-Output written on history.dvi (28 pages, 79868 bytes).
+Output written on history.dvi (28 pages, 79856 bytes).
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2003.09.22:0904
+%DVIPSSource: TeX output 2004.07.27:0931
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
%%Page: 1 1
1 0 bop 75 659 a Fs(GNU)33 b(History)f(Library)p 75 709
1800 17 v 960 757 a Fr(Edition)16 b(5.0,)e(for)h Fq(History)f(Library)g
-Fr(V)l(ersion)i(5.0.)1559 811 y(Septem)o(b)q(er)g(2003)75
+Fr(V)l(ersion)i(5.0.)1609 811 y(Jan)o(uary)f(2004)75
2467 y Fp(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
b(Reserv)n(e)f(Univ)n(ersit)n(y)75 2534 y(Brian)h(F)-6
b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p
75 2570 1800 9 v eop
%%Page: 2 2
-2 1 bop 75 1512 a Fr(This)22 b(do)q(cumen)o(t)h(describ)q(es)g(the)f
-(GNU)g(History)f(library)i(\(v)o(ersion)f(5.0,)g(19)f(Septem)o(b)q(er)i
-(2003\),)e(a)75 1567 y(programming)15 b(to)q(ol)h(that)g(pro)o(vides)g
-(a)g(consisten)o(t)g(user)g(in)o(terface)g(for)g(recalling)h(lines)h
-(of)e(previously)75 1621 y(t)o(yp)q(ed)g(input.)75 1689
-y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fo(\015)e Fr(1988-2003)f(F)l
-(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75 1756
-y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g(distribute)i
-(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o(vided)h(the)75
-1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q(ermission)g(notice)g
-(are)f(preserv)o(ed)h(on)f(all)h(copies.)195 1878 y(P)o(ermission)i(is)
-g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute)h(and/or)e(mo)q(dify)h
-(this)g(do)q(cumen)o(t)g(under)195 1933 y(the)h(terms)f(of)h(the)g(GNU)
-g(F)l(ree)g(Do)q(cumen)o(tation)g(License,)i(V)l(ersion)f(1.1)e(or)g
-(an)o(y)h(later)195 1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F)
-l(ree)f(Soft)o(w)o(are)g(F)l(oundation;)h(with)g(no)f(In)o(v)m(arian)o
-(t)i(Sections,)195 2042 y(with)h(the)f(F)l(ron)o(t-Co)o(v)o(er)e(texts)
-i(b)q(eing)i(\\A)e(GNU)g(Man)o(ual,")g(and)g(with)h(the)f(Bac)o(k-Co)o
-(v)o(er)195 2097 y(T)l(exts)h(as)g(in)h(\(a\))e(b)q(elo)o(w.)24
-b(A)16 b(cop)o(y)g(of)g(the)g(license)i(is)f(included)i(in)e(the)f
-(section)h(en)o(titled)195 2152 y(\\GNU)e(F)l(ree)g(Do)q(cumen)o
-(tation)g(License.")195 2219 y(\(a\))j(The)h(FSF's)f(Bac)o(k-Co)o(v)o
-(er)g(T)l(ext)h(is:)28 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop)
-o(y)h(and)g(mo)q(dify)195 2274 y(this)e(GNU)f(Man)o(ual,)g(lik)o(e)h
-(GNU)f(soft)o(w)o(are.)22 b(Copies)17 b(published)h(b)o(y)f(the)f(F)l
-(ree)g(Soft)o(w)o(are)195 2329 y(F)l(oundation)g(raise)f(funds)h(for)e
-(GNU)h(dev)o(elopmen)o(t.")75 2451 y(Published)i(b)o(y)f(the)f(F)l(ree)
-g(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)h(Place,)f
+2 1 bop 75 1512 a Fr(This)19 b(do)q(cumen)o(t)f(describ)q(es)h(the)f
+(GNU)g(History)g(library)h(\(v)o(ersion)e(5.0,)h(28)f(Jan)o(uary)h
+(2004\),)e(a)i(pro-)75 1567 y(gramming)11 b(to)q(ol)g(that)f(pro)o
+(vides)i(a)f(consisten)o(t)g(user)h(in)o(terface)f(for)g(recalling)i
+(lines)f(of)f(previously)i(t)o(yp)q(ed)75 1621 y(input.)75
+1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fo(\015)h
+Fr(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75
+1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g
+(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o
+(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q
+(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)195
+1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute)
+h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195
+1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g
+(License,)i(V)l(ersion)f(1.1)e(or)g(an)o(y)h(later)195
+1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F)l(ree)f(Soft)o(w)o
+(are)g(F)l(oundation;)h(with)g(no)f(In)o(v)m(arian)o(t)i(Sections,)195
+2042 y(with)h(the)f(F)l(ron)o(t-Co)o(v)o(er)e(texts)i(b)q(eing)i(\\A)e
+(GNU)g(Man)o(ual,")g(and)g(with)h(the)f(Bac)o(k-Co)o(v)o(er)195
+2097 y(T)l(exts)h(as)g(in)h(\(a\))e(b)q(elo)o(w.)24 b(A)16
+b(cop)o(y)g(of)g(the)g(license)i(is)f(included)i(in)e(the)f(section)h
+(en)o(titled)195 2152 y(\\GNU)e(F)l(ree)g(Do)q(cumen)o(tation)g
+(License.")195 2219 y(\(a\))j(The)h(FSF's)f(Bac)o(k-Co)o(v)o(er)g(T)l
+(ext)h(is:)28 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop)o(y)h
+(and)g(mo)q(dify)195 2274 y(this)e(GNU)f(Man)o(ual,)g(lik)o(e)h(GNU)f
+(soft)o(w)o(are.)22 b(Copies)17 b(published)h(b)o(y)f(the)f(F)l(ree)g
+(Soft)o(w)o(are)195 2329 y(F)l(oundation)g(raise)f(funds)h(for)e(GNU)h
+(dev)o(elopmen)o(t.")75 2451 y(Published)i(b)o(y)f(the)f(F)l(ree)g
+(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)h(Place,)f
(Suite)i(330,)75 2560 y(Boston,)d(MA)h(02111-1307)75
2615 y(USA)p eop
%%Page: -1 3
<HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on September, 22 2003 by texi2html 1.64 -->
+<!-- Created on July, 27 2004 by texi2html 1.64 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
Karl Berry <karl@freefriends.org>
<P>
<A NAME="IDX107"></A>
-<DT><CODE>delete-horizontal-space ()</CODE>
+<DT><CODE>unix-filename-rubout ()</CODE>
<DD><A NAME="IDX108"></A>
-Delete all spaces and tabs around point. By default, this is unbound.
+Kill the word behind point, using white space and the slash character
+as the word boundaries.
+The killed text is saved on the kill-ring.
<P>
<A NAME="IDX109"></A>
-<DT><CODE>kill-region ()</CODE>
+<DT><CODE>delete-horizontal-space ()</CODE>
<DD><A NAME="IDX110"></A>
+Delete all spaces and tabs around point. By default, this is unbound.
+<P>
+
+<A NAME="IDX111"></A>
+<DT><CODE>kill-region ()</CODE>
+<DD><A NAME="IDX112"></A>
Kill the text in the current region.
By default, this command is unbound.
<P>
-<A NAME="IDX111"></A>
+<A NAME="IDX113"></A>
<DT><CODE>copy-region-as-kill ()</CODE>
-<DD><A NAME="IDX112"></A>
+<DD><A NAME="IDX114"></A>
Copy the text in the region to the kill buffer, so it can be yanked
right away. By default, this command is unbound.
<P>
-<A NAME="IDX113"></A>
+<A NAME="IDX115"></A>
<DT><CODE>copy-backward-word ()</CODE>
-<DD><A NAME="IDX114"></A>
+<DD><A NAME="IDX116"></A>
Copy the word before point to the kill buffer.
The word boundaries are the same as <CODE>backward-word</CODE>.
By default, this command is unbound.
<P>
-<A NAME="IDX115"></A>
+<A NAME="IDX117"></A>
<DT><CODE>copy-forward-word ()</CODE>
-<DD><A NAME="IDX116"></A>
+<DD><A NAME="IDX118"></A>
Copy the word following point to the kill buffer.
The word boundaries are the same as <CODE>forward-word</CODE>.
By default, this command is unbound.
<P>
-<A NAME="IDX117"></A>
+<A NAME="IDX119"></A>
<DT><CODE>yank (C-y)</CODE>
-<DD><A NAME="IDX118"></A>
+<DD><A NAME="IDX120"></A>
Yank the top of the kill ring into the buffer at point.
<P>
-<A NAME="IDX119"></A>
+<A NAME="IDX121"></A>
<DT><CODE>yank-pop (M-y)</CODE>
-<DD><A NAME="IDX120"></A>
+<DD><A NAME="IDX122"></A>
Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
</DL>
<!--docid::SEC18::-->
<DL COMPACT>
-<A NAME="IDX121"></A>
+<A NAME="IDX123"></A>
<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
-<DD><A NAME="IDX122"></A>
+<DD><A NAME="IDX124"></A>
Add this digit to the argument already accumulating, or start a new
argument. <KBD>M--</KBD> starts a negative argument.
<P>
-<A NAME="IDX123"></A>
+<A NAME="IDX125"></A>
<DT><CODE>universal-argument ()</CODE>
-<DD><A NAME="IDX124"></A>
+<DD><A NAME="IDX126"></A>
This is another way to specify an argument.
If this command is followed by one or more digits, optionally with a
leading minus sign, those digits define the argument.
<P>
<DL COMPACT>
-<A NAME="IDX125"></A>
+<A NAME="IDX127"></A>
<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
-<DD><A NAME="IDX126"></A>
+<DD><A NAME="IDX128"></A>
Attempt to perform completion on the text before point.
The actual completion performed is application-specific.
The default is filename completion.
<P>
-<A NAME="IDX127"></A>
+<A NAME="IDX129"></A>
<DT><CODE>possible-completions (M-?)</CODE>
-<DD><A NAME="IDX128"></A>
+<DD><A NAME="IDX130"></A>
List the possible completions of the text before point.
<P>
-<A NAME="IDX129"></A>
+<A NAME="IDX131"></A>
<DT><CODE>insert-completions (M-*)</CODE>
-<DD><A NAME="IDX130"></A>
+<DD><A NAME="IDX132"></A>
Insert all completions of the text before point that would have
been generated by <CODE>possible-completions</CODE>.
<P>
-<A NAME="IDX131"></A>
+<A NAME="IDX133"></A>
<DT><CODE>menu-complete ()</CODE>
-<DD><A NAME="IDX132"></A>
+<DD><A NAME="IDX134"></A>
Similar to <CODE>complete</CODE>, but replaces the word to be completed
with a single match from the list of possible completions.
Repeated execution of <CODE>menu-complete</CODE> steps through the list
by default.
<P>
-<A NAME="IDX133"></A>
+<A NAME="IDX135"></A>
<DT><CODE>delete-char-or-list ()</CODE>
-<DD><A NAME="IDX134"></A>
+<DD><A NAME="IDX136"></A>
Deletes the character under the cursor if not at the beginning or
end of the line (like <CODE>delete-char</CODE>).
If at the end of the line, behaves identically to
<!--docid::SEC20::-->
<DL COMPACT>
-<A NAME="IDX135"></A>
+<A NAME="IDX137"></A>
<DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD><A NAME="IDX136"></A>
+<DD><A NAME="IDX138"></A>
Begin saving the characters typed into the current keyboard macro.
<P>
-<A NAME="IDX137"></A>
+<A NAME="IDX139"></A>
<DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD><A NAME="IDX138"></A>
+<DD><A NAME="IDX140"></A>
Stop saving the characters typed into the current keyboard macro
and save the definition.
<P>
-<A NAME="IDX139"></A>
+<A NAME="IDX141"></A>
<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD><A NAME="IDX140"></A>
+<DD><A NAME="IDX142"></A>
Re-execute the last keyboard macro defined, by making the characters
in the macro appear as if typed at the keyboard.
<P>
<!--docid::SEC21::-->
<DL COMPACT>
-<A NAME="IDX141"></A>
+<A NAME="IDX143"></A>
<DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD><A NAME="IDX142"></A>
+<DD><A NAME="IDX144"></A>
Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
any bindings or variable assignments found there.
<P>
-<A NAME="IDX143"></A>
+<A NAME="IDX145"></A>
<DT><CODE>abort (C-g)</CODE>
-<DD><A NAME="IDX144"></A>
+<DD><A NAME="IDX146"></A>
Abort the current editing command and
ring the terminal's bell (subject to the setting of
<CODE>bell-style</CODE>).
<P>
-<A NAME="IDX145"></A>
+<A NAME="IDX147"></A>
<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
-<DD><A NAME="IDX146"></A>
+<DD><A NAME="IDX148"></A>
If the metafied character <VAR>x</VAR> is lowercase, run the command
that is bound to the corresponding uppercase character.
<P>
-<A NAME="IDX147"></A>
+<A NAME="IDX149"></A>
<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
-<DD><A NAME="IDX148"></A>
+<DD><A NAME="IDX150"></A>
Metafy the next character typed. This is for keyboards
without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
<KBD>M-f</KBD>.
<P>
-<A NAME="IDX149"></A>
+<A NAME="IDX151"></A>
<DT><CODE>undo (C-_ or C-x C-u)</CODE>
-<DD><A NAME="IDX150"></A>
+<DD><A NAME="IDX152"></A>
Incremental undo, separately remembered for each line.
<P>
-<A NAME="IDX151"></A>
+<A NAME="IDX153"></A>
<DT><CODE>revert-line (M-r)</CODE>
-<DD><A NAME="IDX152"></A>
+<DD><A NAME="IDX154"></A>
Undo all changes made to this line. This is like executing the <CODE>undo</CODE>
command enough times to get back to the beginning.
<P>
-<A NAME="IDX153"></A>
+<A NAME="IDX155"></A>
<DT><CODE>tilde-expand (M-~)</CODE>
-<DD><A NAME="IDX154"></A>
+<DD><A NAME="IDX156"></A>
Perform tilde expansion on the current word.
<P>
-<A NAME="IDX155"></A>
+<A NAME="IDX157"></A>
<DT><CODE>set-mark (C-@)</CODE>
-<DD><A NAME="IDX156"></A>
+<DD><A NAME="IDX158"></A>
Set the mark to the point. If a
numeric argument is supplied, the mark is set to that position.
<P>
-<A NAME="IDX157"></A>
+<A NAME="IDX159"></A>
<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD><A NAME="IDX158"></A>
+<DD><A NAME="IDX160"></A>
Swap the point with the mark. The current cursor position is set to
the saved position, and the old cursor position is saved as the mark.
<P>
-<A NAME="IDX159"></A>
+<A NAME="IDX161"></A>
<DT><CODE>character-search (C-])</CODE>
-<DD><A NAME="IDX160"></A>
+<DD><A NAME="IDX162"></A>
A character is read and point is moved to the next occurrence of that
character. A negative count searches for previous occurrences.
<P>
-<A NAME="IDX161"></A>
+<A NAME="IDX163"></A>
<DT><CODE>character-search-backward (M-C-])</CODE>
-<DD><A NAME="IDX162"></A>
+<DD><A NAME="IDX164"></A>
A character is read and point is moved to the previous occurrence
of that character. A negative count searches for subsequent
occurrences.
<P>
-<A NAME="IDX163"></A>
+<A NAME="IDX165"></A>
<DT><CODE>insert-comment (M-#)</CODE>
-<DD><A NAME="IDX164"></A>
+<DD><A NAME="IDX166"></A>
Without a numeric argument, the value of the <CODE>comment-begin</CODE>
variable is inserted at the beginning of the current line.
If a numeric argument is supplied, this command acts as a toggle: if
In either case, the line is accepted as if a newline had been typed.
<P>
-<A NAME="IDX165"></A>
+<A NAME="IDX167"></A>
<DT><CODE>dump-functions ()</CODE>
-<DD><A NAME="IDX166"></A>
+<DD><A NAME="IDX168"></A>
Print all of the functions and their key bindings to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX167"></A>
+<A NAME="IDX169"></A>
<DT><CODE>dump-variables ()</CODE>
-<DD><A NAME="IDX168"></A>
+<DD><A NAME="IDX170"></A>
Print all of the settable variables and their values to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX169"></A>
+<A NAME="IDX171"></A>
<DT><CODE>dump-macros ()</CODE>
-<DD><A NAME="IDX170"></A>
+<DD><A NAME="IDX172"></A>
Print all of the Readline key sequences bound to macros and the
strings they output. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX171"></A>
+<A NAME="IDX173"></A>
<DT><CODE>emacs-editing-mode (C-e)</CODE>
-<DD><A NAME="IDX172"></A>
+<DD><A NAME="IDX174"></A>
When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE>
editing mode.
<P>
-<A NAME="IDX173"></A>
+<A NAME="IDX175"></A>
<DT><CODE>vi-editing-mode (M-C-j)</CODE>
-<DD><A NAME="IDX174"></A>
+<DD><A NAME="IDX176"></A>
When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE>
editing mode.
<P>
to provide a command line interface.
</P><P>
-Copyright (C) 1988-2002 Free Software Foundation, Inc.
+Copyright (C) 1988-2004 Free Software Foundation, Inc.
</P><P>
Permission is granted to make and distribute verbatim copies of
<CODE>gets()</CODE> or <CODE>fgets()</CODE>.
</P><P>
-<A NAME="IDX175"></A>
-<A NAME="IDX176"></A>
+<A NAME="IDX177"></A>
+<A NAME="IDX178"></A>
</P><P>
The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR>
These variables are available to function writers.
</P><P>
-<A NAME="IDX177"></A>
+<A NAME="IDX179"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_line_buffer</B>
<DD>This is the line gathered so far. You are welcome to modify the
</DL>
</P><P>
-<A NAME="IDX178"></A>
+<A NAME="IDX180"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_point</B>
<DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
</DL>
</P><P>
-<A NAME="IDX179"></A>
+<A NAME="IDX181"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_end</B>
<DD>The number of characters present in <CODE>rl_line_buffer</CODE>. When
</DL>
</P><P>
-<A NAME="IDX180"></A>
+<A NAME="IDX182"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_mark</B>
<DD>The <VAR>mark</VAR> (saved position) in the current line. If set, the mark
</DL>
</P><P>
-<A NAME="IDX181"></A>
+<A NAME="IDX183"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_done</B>
<DD>Setting this to a non-zero value causes Readline to return the current
</DL>
</P><P>
-<A NAME="IDX182"></A>
+<A NAME="IDX184"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_num_chars_to_read</B>
<DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes
</DL>
</P><P>
-<A NAME="IDX183"></A>
+<A NAME="IDX185"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_pending_input</B>
<DD>Setting this to a value makes it the next keystroke read. This is a
</DL>
</P><P>
-<A NAME="IDX184"></A>
+<A NAME="IDX186"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_dispatching</B>
<DD>Set to a non-zero value if a function is being called from a key binding;
</DL>
</P><P>
-<A NAME="IDX185"></A>
+<A NAME="IDX187"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_erase_empty_line</B>
<DD>Setting this to a non-zero value causes Readline to completely erase
</DL>
</P><P>
-<A NAME="IDX186"></A>
+<A NAME="IDX188"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_prompt</B>
<DD>The prompt Readline uses. This is set from the argument to
</DL>
</P><P>
-<A NAME="IDX187"></A>
+<A NAME="IDX189"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_already_prompted</B>
<DD>If an application wishes to display the prompt itself, rather than have
</DL>
</P><P>
-<A NAME="IDX188"></A>
+<A NAME="IDX190"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_library_version</B>
<DD>The version number of this revision of the library.
</DL>
</P><P>
-<A NAME="IDX189"></A>
+<A NAME="IDX191"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_readline_version</B>
<DD>An integer encoding the current version of the library. The encoding is
</DL>
</P><P>
-<A NAME="IDX190"></A>
+<A NAME="IDX192"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_gnu_readline_p</B>
<DD>Always set to 1, denoting that this is GNU readline rather than some
</DL>
</P><P>
-<A NAME="IDX191"></A>
+<A NAME="IDX193"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_terminal_name</B>
<DD>The terminal type, used for initialization. If not set by the application,
</DL>
</P><P>
-<A NAME="IDX192"></A>
+<A NAME="IDX194"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_readline_name</B>
<DD>This variable is set to a unique name by each application using Readline.
</DL>
</P><P>
-<A NAME="IDX193"></A>
+<A NAME="IDX195"></A>
<DL>
<DT><U>Variable:</U> FILE * <B>rl_instream</B>
<DD>The stdio stream from which Readline reads input.
</DL>
</P><P>
-<A NAME="IDX194"></A>
+<A NAME="IDX196"></A>
<DL>
<DT><U>Variable:</U> FILE * <B>rl_outstream</B>
<DD>The stdio stream to which Readline performs output.
</DL>
</P><P>
-<A NAME="IDX195"></A>
+<A NAME="IDX197"></A>
<DL>
<DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B>
<DD>The address of the last command function Readline executed. May be used to
</DL>
</P><P>
-<A NAME="IDX196"></A>
+<A NAME="IDX198"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B>
<DD>If non-zero, this is the address of a function to call just
</DL>
</P><P>
-<A NAME="IDX197"></A>
+<A NAME="IDX199"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B>
<DD>If non-zero, this is the address of a function to call after
</DL>
</P><P>
-<A NAME="IDX198"></A>
+<A NAME="IDX200"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B>
<DD>If non-zero, this is the address of a function to call periodically
</DL>
</P><P>
-<A NAME="IDX199"></A>
+<A NAME="IDX201"></A>
<DL>
<DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B>
<DD>If non-zero, Readline will call indirectly through this pointer
</DL>
</P><P>
-<A NAME="IDX200"></A>
+<A NAME="IDX202"></A>
<DL>
<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B>
<DD>If non-zero, Readline will call indirectly through this pointer
</DL>
</P><P>
-<A NAME="IDX201"></A>
+<A NAME="IDX203"></A>
<DL>
<DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B>
<DD>If non-zero, Readline will call indirectly through this pointer
</DL>
</P><P>
-<A NAME="IDX202"></A>
+<A NAME="IDX204"></A>
<DL>
<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B>
<DD>If non-zero, Readline will call indirectly through this pointer
</DL>
</P><P>
-<A NAME="IDX203"></A>
+<A NAME="IDX205"></A>
<DL>
<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B>
<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
</DL>
</P><P>
-<A NAME="IDX204"></A>
+<A NAME="IDX206"></A>
<DL>
<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B>
<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
</DL>
</P><P>
-<A NAME="IDX205"></A>
+<A NAME="IDX207"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_executing_macro</B>
<DD>This variable is set to the text of any currently-executing macro.
</DL>
</P><P>
-<A NAME="IDX206"></A>
+<A NAME="IDX208"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_readline_state</B>
<DD>A variable with bit values that encapsulate the current Readline state.
</DL>
</P><P>
-<A NAME="IDX207"></A>
+<A NAME="IDX209"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_explicit_arg</B>
<DD>Set to a non-zero value if an explicit numeric argument was specified by
</DL>
</P><P>
-<A NAME="IDX208"></A>
+<A NAME="IDX210"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_numeric_arg</B>
<DD>Set to the value of any numeric argument explicitly specified by the user
</DL>
</P><P>
-<A NAME="IDX209"></A>
+<A NAME="IDX211"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_editing_mode</B>
<DD>Set to a value denoting Readline's current editing mode. A value of
well. Readline provides a function for doing that:
</P><P>
-<A NAME="IDX210"></A>
+<A NAME="IDX212"></A>
<DL>
<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I>
<DD>Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be
Readline which keymap to use.
</P><P>
-<A NAME="IDX211"></A>
+<A NAME="IDX213"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I>
<DD>Returns a new, empty keymap. The space for the keymap is allocated with
</DL>
</P><P>
-<A NAME="IDX212"></A>
+<A NAME="IDX214"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I>
<DD>Return a new keymap which is a copy of <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX213"></A>
+<A NAME="IDX215"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I>
<DD>Return a new keymap with the printing characters bound to rl_insert,
</DL>
</P><P>
-<A NAME="IDX214"></A>
+<A NAME="IDX216"></A>
<DL>
<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I>
<DD>Free the storage associated with <VAR>keymap</VAR>.
change which keymap is active.
</P><P>
-<A NAME="IDX215"></A>
+<A NAME="IDX217"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I>
<DD>Returns the currently active keymap.
</DL>
</P><P>
-<A NAME="IDX216"></A>
+<A NAME="IDX218"></A>
<DL>
<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I>
<DD>Makes <VAR>keymap</VAR> the currently active keymap.
</DL>
</P><P>
-<A NAME="IDX217"></A>
+<A NAME="IDX219"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I>
<DD>Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would
</DL>
</P><P>
-<A NAME="IDX218"></A>
+<A NAME="IDX220"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I>
<DD>Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would
These functions manage key bindings.
</P><P>
-<A NAME="IDX219"></A>
+<A NAME="IDX221"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I>
<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
</DL>
</P><P>
-<A NAME="IDX220"></A>
+<A NAME="IDX222"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I>
<DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX221"></A>
+<A NAME="IDX223"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_key_if_unbound</B> <I>(int key, rl_command_func_t *function)</I>
<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in the
</DL>
</P><P>
-<A NAME="IDX222"></A>
+<A NAME="IDX224"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_key_if_unbound_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I>
<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX223"></A>
+<A NAME="IDX225"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I>
<DD>Bind <VAR>key</VAR> to the null function in the currently active keymap.
</DL>
</P><P>
-<A NAME="IDX224"></A>
+<A NAME="IDX226"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I>
<DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX225"></A>
+<A NAME="IDX227"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
<DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX226"></A>
+<A NAME="IDX228"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I>
<DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX227"></A>
+<A NAME="IDX229"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_keyseq</B> <I>(const char *keyseq, rl_command_func_t *function)</I>
<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
</DL>
</P><P>
-<A NAME="IDX228"></A>
+<A NAME="IDX230"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_keyseq_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
</DL>
</P><P>
-<A NAME="IDX229"></A>
+<A NAME="IDX231"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
<DD>Equivalent to <CODE>rl_bind_keyseq_in_map</CODE>.
</DL>
</P><P>
-<A NAME="IDX230"></A>
+<A NAME="IDX232"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound</B> <I>(const char *keyseq, rl_command_func_t *function)</I>
<DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in the
</DL>
</P><P>
-<A NAME="IDX231"></A>
+<A NAME="IDX233"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
<DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX232"></A>
+<A NAME="IDX234"></A>
<DL>
<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I>
<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
</DL>
</P><P>
-<A NAME="IDX233"></A>
+<A NAME="IDX235"></A>
<DL>
<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I>
<DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
</DL>
</P><P>
-<A NAME="IDX234"></A>
+<A NAME="IDX236"></A>
<DL>
<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I>
<DD>Read keybindings and variable assignments from <VAR>filename</VAR>
associate a new function name with an arbitrary function.
</P><P>
-<A NAME="IDX235"></A>
+<A NAME="IDX237"></A>
<DL>
<DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I>
<DD>Return the function with name <VAR>name</VAR>.
</DL>
</P><P>
-<A NAME="IDX236"></A>
+<A NAME="IDX238"></A>
<DL>
<DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I>
<DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
</DL>
</P><P>
-<A NAME="IDX237"></A>
+<A NAME="IDX239"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I>
<DD>Return an array of strings representing the key sequences used to
</DL>
</P><P>
-<A NAME="IDX238"></A>
+<A NAME="IDX240"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
<DD>Return an array of strings representing the key sequences used to
</DL>
</P><P>
-<A NAME="IDX239"></A>
+<A NAME="IDX241"></A>
<DL>
<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I>
<DD>Print the readline function names and the key sequences currently
</DL>
</P><P>
-<A NAME="IDX240"></A>
+<A NAME="IDX242"></A>
<DL>
<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I>
<DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
</DL>
</P><P>
-<A NAME="IDX241"></A>
+<A NAME="IDX243"></A>
<DL>
<DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I>
<DD>Return a NULL terminated array of known function names. The array is
</DL>
</P><P>
-<A NAME="IDX242"></A>
+<A NAME="IDX244"></A>
<DL>
<DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I>
<DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make
<CODE>rl_end_undo_group()</CODE>.
</P><P>
-<A NAME="IDX243"></A>
+<A NAME="IDX245"></A>
<DL>
<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I>
<DD>Begins saving undo information in a group construct. The undo
</DL>
</P><P>
-<A NAME="IDX244"></A>
+<A NAME="IDX246"></A>
<DL>
<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I>
<DD>Closes the current undo group started with <CODE>rl_begin_undo_group
</DL>
</P><P>
-<A NAME="IDX245"></A>
+<A NAME="IDX247"></A>
<DL>
<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I>
<DD>Remember how to undo an event (according to <VAR>what</VAR>). The affected
</DL>
</P><P>
-<A NAME="IDX246"></A>
+<A NAME="IDX248"></A>
<DL>
<DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I>
<DD>Free the existing undo list.
</DL>
</P><P>
-<A NAME="IDX247"></A>
+<A NAME="IDX249"></A>
<DL>
<DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I>
<DD>Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was
the text range that you are going to modify.
</P><P>
-<A NAME="IDX248"></A>
+<A NAME="IDX250"></A>
<DL>
<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I>
<DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
<!--docid::SEC35::-->
<P>
-<A NAME="IDX249"></A>
+<A NAME="IDX251"></A>
<DL>
<DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I>
<DD>Change what's displayed on the screen to reflect the current contents
</DL>
</P><P>
-<A NAME="IDX250"></A>
+<A NAME="IDX252"></A>
<DL>
<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I>
<DD>Force the line to be updated and redisplayed, whether or not
</DL>
</P><P>
-<A NAME="IDX251"></A>
+<A NAME="IDX253"></A>
<DL>
<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I>
<DD>Tell the update functions that we have moved onto a new (empty) line,
</DL>
</P><P>
-<A NAME="IDX252"></A>
+<A NAME="IDX254"></A>
<DL>
<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I>
<DD>Tell the update functions that we have moved onto a new line, with
</DL>
</P><P>
-<A NAME="IDX253"></A>
+<A NAME="IDX255"></A>
<DL>
<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I>
<DD>Reset the display state to a clean state and redisplay the current line
</DL>
</P><P>
-<A NAME="IDX254"></A>
+<A NAME="IDX256"></A>
<DL>
<DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I>
<DD>Move the cursor to the start of the next screen line.
</DL>
</P><P>
-<A NAME="IDX255"></A>
+<A NAME="IDX257"></A>
<DL>
<DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I>
<DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>.
</DL>
</P><P>
-<A NAME="IDX256"></A>
+<A NAME="IDX258"></A>
<DL>
<DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I>
<DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>,
</DL>
</P><P>
-<A NAME="IDX257"></A>
+<A NAME="IDX259"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I>
<DD>Clear the message in the echo area.
</DL>
</P><P>
-<A NAME="IDX258"></A>
+<A NAME="IDX260"></A>
<DL>
<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I>
<DD>Save the local Readline prompt display state in preparation for
</DL>
</P><P>
-<A NAME="IDX259"></A>
+<A NAME="IDX261"></A>
<DL>
<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I>
<DD>Restore the local Readline prompt display state saved by the most
</DL>
</P><P>
-<A NAME="IDX260"></A>
+<A NAME="IDX262"></A>
<DL>
<DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I>
<DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the
function or <CODE>rl_already_prompted</CODE> variable is used.
It returns the number of visible characters on the last line of the
(possibly multi-line) prompt.
+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</CODE>
+and <CODE>RL_PROMPT_END_IGNORE</CODE> (declared in <TT>`readline.h'</TT>. This may
+be used to embed terminal-specific escape sequences in prompts.
</DL>
</P><P>
-<A NAME="IDX261"></A>
+<A NAME="IDX263"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I>
<DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls
<!--docid::SEC36::-->
<P>
-<A NAME="IDX262"></A>
+<A NAME="IDX264"></A>
<DL>
<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I>
<DD>Insert <VAR>text</VAR> into the line at the current cursor position.
</DL>
</P><P>
-<A NAME="IDX263"></A>
+<A NAME="IDX265"></A>
<DL>
<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I>
<DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
</DL>
</P><P>
-<A NAME="IDX264"></A>
+<A NAME="IDX266"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I>
<DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
</DL>
</P><P>
-<A NAME="IDX265"></A>
+<A NAME="IDX267"></A>
<DL>
<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I>
<DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
</DL>
</P><P>
-<A NAME="IDX266"></A>
+<A NAME="IDX268"></A>
<DL>
<DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I>
<DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked
<!--docid::SEC37::-->
<P>
-<A NAME="IDX267"></A>
+<A NAME="IDX269"></A>
<DL>
<DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I>
<DD>Return the next character available from Readline's current input stream.
</DL>
</P><P>
-<A NAME="IDX268"></A>
+<A NAME="IDX270"></A>
<DL>
<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I>
<DD>Return the next character available from <VAR>stream</VAR>, which is assumed to
</DL>
</P><P>
-<A NAME="IDX269"></A>
+<A NAME="IDX271"></A>
<DL>
<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I>
<DD>Insert <VAR>c</VAR> into the Readline input stream. It will be "read"
</DL>
</P><P>
-<A NAME="IDX270"></A>
+<A NAME="IDX272"></A>
<DL>
<DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I>
<DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE>
</DL>
</P><P>
-<A NAME="IDX271"></A>
+<A NAME="IDX273"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I>
<DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any
</DL>
</P><P>
-<A NAME="IDX272"></A>
+<A NAME="IDX274"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I>
<DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will
<!--docid::SEC38::-->
<P>
-<A NAME="IDX273"></A>
+<A NAME="IDX275"></A>
<DL>
<DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I>
<DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE>
</DL>
</P><P>
-<A NAME="IDX274"></A>
+<A NAME="IDX276"></A>
<DL>
<DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I>
<DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in
</DL>
</P><P>
-<A NAME="IDX275"></A>
+<A NAME="IDX277"></A>
<DL>
<DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I>
<DD>Read the operating system's terminal editing characters (as would be
</DL>
</P><P>
-<A NAME="IDX276"></A>
+<A NAME="IDX278"></A>
<DL>
<DT><U>Function:</U> void <B>rl_tty_unset_default_bindings</B> <I>(Keymap kmap)</I>
<DD>Reset the bindings manipulated by <CODE>rl_tty_set_default_bindings</CODE> so
</DL>
</P><P>
-<A NAME="IDX277"></A>
+<A NAME="IDX279"></A>
<DL>
<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I>
<DD>Reinitialize Readline's idea of the terminal settings using
<!--docid::SEC39::-->
<P>
-<A NAME="IDX278"></A>
+<A NAME="IDX280"></A>
<DL>
<DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I>
<DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>.
</DL>
</P><P>
-<A NAME="IDX279"></A>
+<A NAME="IDX281"></A>
<DL>
<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I>
<DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
</DL>
</P><P>
-<A NAME="IDX280"></A>
+<A NAME="IDX282"></A>
<DL>
<DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I>
<DD>Initialize or re-initialize Readline's internal state.
</DL>
</P><P>
-<A NAME="IDX281"></A>
+<A NAME="IDX283"></A>
<DL>
<DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I>
<DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
</DL>
</P><P>
-<A NAME="IDX282"></A>
+<A NAME="IDX284"></A>
<DL>
<DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I>
<DD>Return 1 if <VAR>c</VAR> is an alphabetic character.
</DL>
</P><P>
-<A NAME="IDX283"></A>
+<A NAME="IDX285"></A>
<DL>
<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I>
<DD>A convenience function for displaying a list of strings in
Applications should refrain from using them.
</P><P>
-<A NAME="IDX284"></A>
+<A NAME="IDX286"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I>
<DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
</DL>
</P><P>
-<A NAME="IDX285"></A>
+<A NAME="IDX287"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I>
<DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
</DL>
</P><P>
-<A NAME="IDX286"></A>
+<A NAME="IDX288"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I>
<DD>Return 1 if <VAR>c</VAR> is a numeric character.
</DL>
</P><P>
-<A NAME="IDX287"></A>
+<A NAME="IDX289"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I>
<DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
</DL>
</P><P>
-<A NAME="IDX288"></A>
+<A NAME="IDX290"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I>
<DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
</DL>
</P><P>
-<A NAME="IDX289"></A>
+<A NAME="IDX291"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I>
<DD>If <VAR>c</VAR> is a number, return the value it represents.
<!--docid::SEC40::-->
<P>
-<A NAME="IDX290"></A>
+<A NAME="IDX292"></A>
<DL>
<DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I>
<DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>.
</DL>
</P><P>
-<A NAME="IDX291"></A>
+<A NAME="IDX293"></A>
<DL>
<DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I>
<DD>Print the key sequences bound to macros and their values, using
</DL>
</P><P>
-<A NAME="IDX292"></A>
+<A NAME="IDX294"></A>
<DL>
<DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I>
<DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>.
</DL>
</P><P>
-<A NAME="IDX293"></A>
+<A NAME="IDX295"></A>
<DL>
<DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I>
<DD>Print the readline variable names and their current values
</DL>
</P><P>
-<A NAME="IDX294"></A>
+<A NAME="IDX296"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I>
<DD>Set the time interval (in microseconds) that Readline waits when showing
</DL>
</P><P>
-<A NAME="IDX295"></A>
+<A NAME="IDX297"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I>
<DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>.
are functions available to make this easy.
</P><P>
-<A NAME="IDX296"></A>
+<A NAME="IDX298"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I>
<DD>Set up the terminal for readline I/O and display the initial
</DL>
</P><P>
-<A NAME="IDX297"></A>
+<A NAME="IDX299"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I>
<DD>Whenever an application determines that keyboard input is available, it
</DL>
</P><P>
-<A NAME="IDX298"></A>
+<A NAME="IDX300"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I>
<DD>Restore the terminal to its initial state and remove the line handler.
a signal handler, so Readline's internal signal state is not corrupted.
</P><P>
-<A NAME="IDX299"></A>
+<A NAME="IDX301"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_catch_signals</B>
<DD>If this variable is non-zero, Readline will install signal handlers for
</DL>
</P><P>
-<A NAME="IDX300"></A>
+<A NAME="IDX302"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B>
<DD>If this variable is non-zero, Readline will install a signal handler for
and internal state cleanup upon receipt of a signal.
</P><P>
-<A NAME="IDX301"></A>
+<A NAME="IDX303"></A>
<DL>
<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I>
<DD>This function will reset the state of the terminal to what it was before
</DL>
</P><P>
-<A NAME="IDX302"></A>
+<A NAME="IDX304"></A>
<DL>
<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I>
<DD>This will free any partial state associated with the current input line
</DL>
</P><P>
-<A NAME="IDX303"></A>
+<A NAME="IDX305"></A>
<DL>
<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I>
<DD>This will reinitialize the terminal and reinstall any Readline signal
is received.
</P><P>
-<A NAME="IDX304"></A>
+<A NAME="IDX306"></A>
<DL>
<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I>
<DD>Update Readline's internal screen size by reading values from the kernel.
</DL>
</P><P>
-<A NAME="IDX305"></A>
+<A NAME="IDX307"></A>
<DL>
<DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I>
<DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and
size may be queried.
</P><P>
-<A NAME="IDX306"></A>
+<A NAME="IDX308"></A>
<DL>
<DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I>
<DD>Return Readline's idea of the terminal's size in the
The following functions install and remove Readline's signal handlers.
</P><P>
-<A NAME="IDX307"></A>
+<A NAME="IDX309"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I>
<DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
</DL>
</P><P>
-<A NAME="IDX308"></A>
+<A NAME="IDX310"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I>
<DD>Remove all of the Readline signal handlers installed by
</OL>
<P>
-<A NAME="IDX309"></A>
+<A NAME="IDX311"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
<DD>Complete the word at or before point. You have supplied the function
</DL>
</P><P>
-<A NAME="IDX310"></A>
+<A NAME="IDX312"></A>
<DL>
<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
<DD>This is a pointer to the generator function for
Readline.
</P><P>
-<A NAME="IDX311"></A>
+<A NAME="IDX313"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I>
<DD>Complete the word at or before point. <VAR>what_to_do</VAR> says what to do
</DL>
</P><P>
-<A NAME="IDX312"></A>
+<A NAME="IDX314"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
<DD>Complete the word at or before point. You have supplied the function
</DL>
</P><P>
-<A NAME="IDX313"></A>
+<A NAME="IDX315"></A>
<DL>
<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I>
<DD>List the possible completions. See description of <CODE>rl_complete
</DL>
</P><P>
-<A NAME="IDX314"></A>
+<A NAME="IDX316"></A>
<DL>
<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I>
<DD>Insert the list of possible completions into the line, deleting the
</DL>
</P><P>
-<A NAME="IDX315"></A>
+<A NAME="IDX317"></A>
<DL>
<DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I>
<DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE>
</DL>
</P><P>
-<A NAME="IDX316"></A>
+<A NAME="IDX318"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I>
<DD>Returns an array of strings which is a list of completions for
</DL>
</P><P>
-<A NAME="IDX317"></A>
+<A NAME="IDX319"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I>
<DD>A generator function for filename completion in the general case.
</DL>
</P><P>
-<A NAME="IDX318"></A>
+<A NAME="IDX320"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I>
<DD>A completion generator for usernames. <VAR>text</VAR> contains a partial
<!--docid::SEC47::-->
<P>
-<A NAME="IDX319"></A>
+<A NAME="IDX321"></A>
<DL>
<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
<DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>.
</DL>
</P><P>
-<A NAME="IDX320"></A>
+<A NAME="IDX322"></A>
<DL>
<DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B>
<DD>A pointer to an alternative function to create matches.
</DL>
</P><P>
-<A NAME="IDX321"></A>
+<A NAME="IDX323"></A>
<DL>
<DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B>
<DD>A pointer to a function that will quote a filename in an
</DL>
</P><P>
-<A NAME="IDX322"></A>
+<A NAME="IDX324"></A>
<DL>
<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B>
<DD>A pointer to a function that will remove application-specific quoting
</DL>
</P><P>
-<A NAME="IDX323"></A>
+<A NAME="IDX325"></A>
<DL>
<DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B>
<DD>A pointer to a function to call that determines whether or not a specific
</DL>
</P><P>
-<A NAME="IDX324"></A>
+<A NAME="IDX326"></A>
<DL>
<DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B>
<DD>This function, if defined, is called by the completer when real filename
</DL>
</P><P>
-<A NAME="IDX325"></A>
+<A NAME="IDX327"></A>
<DL>
<DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B>
<DD>This function, if defined, is allowed to modify the directory portion
</DL>
</P><P>
-<A NAME="IDX326"></A>
+<A NAME="IDX328"></A>
<DL>
<DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B>
<DD>If non-zero, then this is the address of a function to call when
</DL>
</P><P>
-<A NAME="IDX327"></A>
+<A NAME="IDX329"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B>
<DD>The basic list of characters that signal a break between words for the
</DL>
</P><P>
-<A NAME="IDX328"></A>
+<A NAME="IDX330"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B>
<DD>A list of quote characters which can cause a word break.
</DL>
</P><P>
-<A NAME="IDX329"></A>
+<A NAME="IDX331"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B>
<DD>The list of characters that signal a break between words for
</DL>
</P><P>
-<A NAME="IDX330"></A>
+<A NAME="IDX332"></A>
+<DL>
+<DT><U>Variable:</U> rl_cpvfunc_t * <B>rl_completion_word_break_hook</B>
+<DD>If non-zero, this is the address of a function to call when Readline is
+deciding where to separate words for word completion. It should return
+a character string like <CODE>rl_completer_word_break_characters</CODE> to be
+used to perform the current completion. The function may choose to set
+<CODE>rl_completer_word_break_characters</CODE> itself. If the function
+returns <CODE>NULL</CODE>, <CODE>rl_completer_word_break_characters</CODE> is used.
+</DL>
+</P><P>
+
+<A NAME="IDX333"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B>
<DD>A list of characters which can be used to quote a substring of the line.
</DL>
</P><P>
-<A NAME="IDX331"></A>
+<A NAME="IDX334"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B>
<DD>A list of characters that cause a filename to be quoted by the completer
</DL>
</P><P>
-<A NAME="IDX332"></A>
+<A NAME="IDX335"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_special_prefixes</B>
<DD>The list of characters that are word break characters, but should be
</DL>
</P><P>
-<A NAME="IDX333"></A>
+<A NAME="IDX336"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_query_items</B>
<DD>Up to this many items will be displayed in response to a
</DL>
</P><P>
-<A NAME="IDX334"></A>
+<A NAME="IDX337"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_append_character</B>
<DD>When a single completion alternative matches at the end of the command
</DL>
</P><P>
-<A NAME="IDX335"></A>
+<A NAME="IDX338"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_suppress_append</B>
<DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to
-matches at the end of the command line, as described above. It is
-set to 0 before any application-specific completion function is called,
-and may only be changed within such a function.
+matches at the end of the command line, as described above.
+It is set to 0 before any application-specific completion function
+is called, and may only be changed within such a function.
</DL>
</P><P>
-<A NAME="IDX336"></A>
+<A NAME="IDX339"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_quote_character</B>
+<DD>When Readline is completing quoted text, as delimited by one of the
+characters in <VAR>rl_completer_quote_characters</VAR>, it sets this variable
+to the quoting character found.
+This is set before any application-specific completion function is called.
+</DL>
+</P><P>
+
+<A NAME="IDX340"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_suppress_quote</B>
+<DD>If non-zero, Readline does not append a matching quote character when
+performing completion on a quoted string.
+It is set to 0 before any application-specific completion function
+is called, and may only be changed within such a function.
+</DL>
+</P><P>
+
+<A NAME="IDX341"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_found_quote</B>
+<DD>When Readline is completing quoted text, it sets this variable
+to a non-zero value if the word being completed contains or is delimited
+by any quoting characters, including backslashes.
+This is set before any application-specific completion function is called.
+</DL>
+</P><P>
+
+<A NAME="IDX342"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B>
<DD>If non-zero, a slash will be appended to completed filenames that are
</DL>
</P><P>
-<A NAME="IDX337"></A>
+<A NAME="IDX343"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
<DD>If non-zero, then duplicates in the matches are removed.
</DL>
</P><P>
-<A NAME="IDX338"></A>
+<A NAME="IDX344"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
<DD>Non-zero means that the results of the matches are to be treated as
</DL>
</P><P>
-<A NAME="IDX339"></A>
+<A NAME="IDX345"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
<DD>Non-zero means that the results of the matches are to be quoted using
</DL>
</P><P>
-<A NAME="IDX340"></A>
+<A NAME="IDX346"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_attempted_completion_over</B>
<DD>If an application-specific completion function assigned to
</DL>
</P><P>
-<A NAME="IDX341"></A>
+<A NAME="IDX347"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_type</B>
<DD>Set to a character describing the type of completion Readline is currently
</DL>
</P><P>
-<A NAME="IDX342"></A>
+<A NAME="IDX348"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
<DD>If this variable is non-zero, completion is inhibited. The completion
<!--docid::SEC50::-->
<P>
-<A NAME="IDX343"></A>
+<A NAME="IDX349"></A>
<center>
Version 1.2, November 2002
</center>
<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="rlman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="cp_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX349">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC9">1.3 Readline Init File</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176">readline, function</A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">readline, function</A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">comment-begin</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">completion-query-items</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">convert-meta</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">disable-completion</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">editing-mode</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">enable-keypad</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">expand-tilde</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">input-meta</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">isearch-terminators</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">mark-modified-lines</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">mark-symlinked-directories</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">match-hidden-files</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">meta-flag</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">page-completions</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX76"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_already_prompted</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_dispatching</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_done</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_end</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_erase_empty_line</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_instream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_library_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177">rl_line_buffer</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_mark</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_outstream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_pending_input</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">rl_point</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_prompt</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_readline_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_readline_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_terminal_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_already_prompted</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX346">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_found_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_completion_quote_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_completion_suppress_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX347">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_completion_word_break_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_dispatching</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_done</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_end</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_erase_empty_line</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX344">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX345">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX348">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_instream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_library_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_line_buffer</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_mark</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_outstream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_pending_input</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_point</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_prompt</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_readline_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_readline_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_terminal_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25">show-all-if-unmodified</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26">visible-stats</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
<TR><TD COLSPAN=3> <HR></TD></TR>
</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
<P></P>
<BR>
<FONT SIZE="-1">
This document was generated
-by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
This is readline.info, produced by makeinfo version 4.5 from
./rlman.texi.
-This manual describes the GNU Readline Library (version 5.0, 19
-September 2003), a library which aids in the consistency of user
-interface across discrete programs which provide a command line
-interface.
+This manual describes the GNU Readline Library (version 5.0, 28 January
+2004), a library which aids in the consistency of user interface across
+discrete programs which provide a command line interface.
- Copyright (C) 1988-2003 Free Software Foundation, Inc.
+ Copyright (C) 1988-2004 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
+`unix-filename-rubout ()'
+ Kill the word behind point, using white space and the slash
+ character as the word boundaries. The killed text is saved on the
+ kill-ring.
+
`delete-horizontal-space ()'
Delete all spaces and tabs around point. By default, this is
unbound.
aiding in the consitency of user interface across discrete programs
that need to provide a command line interface.
- Copyright (C) 1988-2002 Free Software Foundation, Inc.
+ Copyright (C) 1988-2004 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice pare
primary prompt if the `rl_on_new_line_with_prompt()' function or
`rl_already_prompted' variable is used. It returns the number of
visible characters on the last line of the (possibly multi-line)
- prompt.
+ prompt. 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
+ `RL_PROMPT_START_IGNORE' and `RL_PROMPT_END_IGNORE' (declared in
+ `readline.h'. This may be used to embed terminal-specific escape
+ sequences in prompts.
- Function: int rl_set_prompt (const char *prompt)
Make Readline use PROMPT for subsequent redisplay. This calls
`rl_complete_internal()'. The default list is the value of
`rl_basic_word_break_characters'.
+ - Variable: rl_cpvfunc_t * rl_completion_word_break_hook
+ If non-zero, this is the address of a function to call when
+ Readline is deciding where to separate words for word completion.
+ It should return a character string like
+ `rl_completer_word_break_characters' to be used to perform the
+ current completion. The function may choose to set
+ `rl_completer_word_break_characters' itself. If the function
+ returns `NULL', `rl_completer_word_break_characters' is used.
+
- Variable: const char * rl_completer_quote_characters
A list of characters which can be used to quote a substring of the
line. Completion occurs on the entire substring, and within the
set to 0 before any application-specific completion function is
called, and may only be changed within such a function.
+ - Variable: int rl_completion_quote_character
+ When Readline is completing quoted text, as delimited by one of the
+ characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable
+ to the quoting character found. This is set before any
+ application-specific completion function is called.
+
+ - Variable: int rl_completion_suppress_quote
+ If non-zero, Readline does not append a matching quote character
+ when performing completion on a quoted string. It is set to 0
+ before any application-specific completion function is called, and
+ may only be changed within such a function.
+
+ - Variable: int rl_completion_found_quote
+ When Readline is completing quoted text, it sets this variable to
+ a non-zero value if the word being completed contains or is
+ delimited by any quoting characters, including backslashes. This
+ is set before any application-specific completion function is
+ called.
+
- Variable: int rl_completion_mark_symlink_dirs
If non-zero, a slash will be appended to completed filenames that
are symbolic links to directory names, subject to the value of the
* rl_clear_message: Redisplay.
* rl_clear_pending_input: Character Input.
* rl_clear_signals: Readline Signal Handling.
-* rl_complete <1>: Completion Functions.
-* rl_complete: How Completing Works.
+* rl_complete <1>: How Completing Works.
+* rl_complete: Completion Functions.
* rl_complete_internal: Completion Functions.
* rl_completer_quote_characters: Completion Variables.
* rl_completer_word_break_characters: Completion Variables.
* rl_completion_append_character: Completion Variables.
* rl_completion_display_matches_hook: Completion Variables.
-* rl_completion_entry_function <1>: How Completing Works.
-* rl_completion_entry_function: Completion Variables.
+* rl_completion_entry_function <1>: Completion Variables.
+* rl_completion_entry_function: How Completing Works.
+* rl_completion_found_quote: Completion Variables.
* rl_completion_mark_symlink_dirs: Completion Variables.
* rl_completion_matches: Completion Functions.
* rl_completion_mode: Completion Functions.
* rl_completion_query_items: Completion Variables.
+* rl_completion_quote_character: Completion Variables.
* rl_completion_suppress_append: Completion Variables.
+* rl_completion_suppress_quote: Completion Variables.
* rl_completion_type: Completion Variables.
+* rl_completion_word_break_hook: Completion Variables.
* rl_copy_keymap: Keymaps.
* rl_copy_text: Modifying Text.
* rl_crlf: Redisplay.
* transpose-words (M-t): Commands For Text.
* undo (C-_ or C-x C-u): Miscellaneous Commands.
* universal-argument (): Numeric Arguments.
+* unix-filename-rubout (): Commands For Killing.
* unix-line-discard (C-u): Commands For Killing.
* unix-word-rubout (C-w): Commands For Killing.
* upcase-word (M-u): Commands For Text.
\1f
Tag Table:
-Node: Top\7f1298
-Node: Command Line Editing\7f1939
-Node: Introduction and Notation\7f2590
-Node: Readline Interaction\7f4208
-Node: Readline Bare Essentials\7f5395
-Node: Readline Movement Commands\7f7176
-Node: Readline Killing Commands\7f8133
-Node: Readline Arguments\7f10043
-Node: Searching\7f11079
-Node: Readline Init File\7f13222
-Node: Readline Init File Syntax\7f14283
-Node: Conditional Init Constructs\7f25646
-Node: Sample Init File\7f28171
-Node: Bindable Readline Commands\7f31355
-Node: Commands For Moving\7f32405
-Node: Commands For History\7f33255
-Node: Commands For Text\7f36114
-Node: Commands For Killing\7f38829
-Node: Numeric Arguments\7f40780
-Node: Commands For Completion\7f41908
-Node: Keyboard Macros\7f43441
-Node: Miscellaneous Commands\7f44001
-Node: Readline vi Mode\7f47351
-Node: Programming with GNU Readline\7f49169
-Node: Basic Behavior\7f50143
-Node: Custom Functions\7f53573
-Node: Readline Typedefs\7f55051
-Node: Function Writing\7f56681
-Node: Readline Variables\7f57889
-Node: Readline Convenience Functions\7f67312
-Node: Function Naming\7f68294
-Node: Keymaps\7f69546
-Node: Binding Keys\7f71302
-Node: Associating Function Names and Bindings\7f75824
-Node: Allowing Undoing\7f78069
-Node: Redisplay\7f80604
-Node: Modifying Text\7f83675
-Node: Character Input\7f84904
-Node: Terminal Management\7f86684
-Node: Utility Functions\7f88103
-Node: Miscellaneous Functions\7f90442
-Node: Alternate Interface\7f92506
-Node: A Readline Example\7f94651
-Node: Readline Signal Handling\7f96588
-Node: Custom Completers\7f102191
-Node: How Completing Works\7f102906
-Node: Completion Functions\7f106209
-Node: Completion Variables\7f109764
-Node: A Short Completion Example\7f120386
-Node: Copying This Manual\7f132939
-Node: GNU Free Documentation License\7f133179
-Node: Concept Index\7f155573
-Node: Function and Variable Index\7f156522
+Node: Top\7f1296
+Node: Command Line Editing\7f1937
+Node: Introduction and Notation\7f2588
+Node: Readline Interaction\7f4206
+Node: Readline Bare Essentials\7f5393
+Node: Readline Movement Commands\7f7174
+Node: Readline Killing Commands\7f8131
+Node: Readline Arguments\7f10041
+Node: Searching\7f11077
+Node: Readline Init File\7f13220
+Node: Readline Init File Syntax\7f14281
+Node: Conditional Init Constructs\7f25644
+Node: Sample Init File\7f28169
+Node: Bindable Readline Commands\7f31353
+Node: Commands For Moving\7f32403
+Node: Commands For History\7f33253
+Node: Commands For Text\7f36112
+Node: Commands For Killing\7f38827
+Node: Numeric Arguments\7f40958
+Node: Commands For Completion\7f42086
+Node: Keyboard Macros\7f43619
+Node: Miscellaneous Commands\7f44179
+Node: Readline vi Mode\7f47529
+Node: Programming with GNU Readline\7f49347
+Node: Basic Behavior\7f50321
+Node: Custom Functions\7f53751
+Node: Readline Typedefs\7f55229
+Node: Function Writing\7f56859
+Node: Readline Variables\7f58067
+Node: Readline Convenience Functions\7f67490
+Node: Function Naming\7f68472
+Node: Keymaps\7f69724
+Node: Binding Keys\7f71480
+Node: Associating Function Names and Bindings\7f76002
+Node: Allowing Undoing\7f78247
+Node: Redisplay\7f80782
+Node: Modifying Text\7f84216
+Node: Character Input\7f85445
+Node: Terminal Management\7f87225
+Node: Utility Functions\7f88644
+Node: Miscellaneous Functions\7f90983
+Node: Alternate Interface\7f93047
+Node: A Readline Example\7f95192
+Node: Readline Signal Handling\7f97129
+Node: Custom Completers\7f102732
+Node: How Completing Works\7f103447
+Node: Completion Functions\7f106750
+Node: Completion Variables\7f110305
+Node: A Short Completion Example\7f122375
+Node: Copying This Manual\7f134928
+Node: GNU Free Documentation License\7f135168
+Node: Concept Index\7f157562
+Node: Function and Variable Index\7f158511
\1f
End Tag Table
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
%%Title: readline.dvi
-%%Pages: 72
+%%Pages: 74
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2003.09.22:0904
+%DVIPSSource: TeX output 2004.07.27:0931
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0
D900FEC7FC272B7DA02E>13 D E
%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fr cmbx12 14.4 53
-/Fr 53 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
+%DVIPSBitmapFont: Fr cmbx12 14.4 54
+/Fr 54 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46
D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49
D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2
22>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F130048EB0F
8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A24814E0A4
127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B277DA622
->I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480
-A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F08049130300
-0181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F800
-1FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE
-00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8
-B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F
-9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9
-FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397F
-F007C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC
-001FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A2
-17C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A3
-3903FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EB
-FC0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A32729
-7EA82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A3160014
-03A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE0
-03903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848804848804848
-80485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C
-7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8
-F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>
-I<B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00
-161E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFD
-E79038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F
-80B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A2
-1507A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D
-0003EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8
-130EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE3
-80A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8
-FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380
-147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF115
-0F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>
-I<ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F81
-48486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C
-6C14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC
-010013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FE
-A716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<
-ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48
-486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C
-6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0
-90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F
-5A6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A6
-5E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170E
-A21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0
-000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F
-FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0
-1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8
-25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815
-01A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA
-0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7
-FC2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B
-017F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE03
-01015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230
-297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E
-13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F16
-0E17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC7003
-5BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E8002
-1E141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D
-6C130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7
-FC6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89
+>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC6485AA249
+5A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822>I<EC
+0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A24948
+6C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F08049130300018149
+1301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001FE0ED
+0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00EDFF
+C09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B712E0
+16C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039
+FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9FC5AA9
+7E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0
+011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC001FF8
+ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217C016
+1FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A33903FC
+001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC0F14
+03A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297EA82C
+>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403A214
+0F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE0039039
+07FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880485A
+82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E
+6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5
+FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512
+F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00161E5E
+5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE79038
+FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80B539
+F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A21507A2
+150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D0003EF
+E000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2
+D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380A291
+3807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FFFCEC
+7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380147F15
+C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F16F9
+ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>I<ECFF
+C0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148486D
+7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C14FE
+A26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC010013
+C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC
+150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<ECFFC0
+010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48486D7E
+A24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C14FE
+143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090263F
+C07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F5A6F5A
+6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A
+1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503
+923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0000F13
+F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFF
+E06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A4
+6C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I<
+007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A2481501A5C7
+91C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED
+07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC2F29
+7EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B017F14
+0E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301015C
+ECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230297FA8
+33>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C
+604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F0
+9126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA291
+3AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141E
+A242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D6C130E
+6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7FC6D13
+8FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89
D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA
0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21
>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F89038E0
%%Page: 1 1
1 0 bop 75 659 a Fu(GNU)33 b(Readline)h(Library)p 75
709 1800 17 v 936 757 a Ft(Edition)17 b(5.0,)c(for)i
-Fs(Readline)f(Library)g Ft(V)l(ersion)i(5.0.)1559 811
-y(Septem)o(b)q(er)g(2003)75 2467 y Fr(Chet)22 b(Ramey)-6
-b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75
+Fs(Readline)f(Library)g Ft(V)l(ersion)i(5.0.)1609 811
+y(Jan)o(uary)f(2004)75 2467 y Fr(Chet)22 b(Ramey)-6 b(,)23
+b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75
2534 y(Brian)h(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6
b(oundation)p 75 2570 1800 9 v eop
%%Page: 2 2
-2 1 bop 75 1512 a Ft(This)11 b(man)o(ual)g(describ)q(es)h(the)f(GNU)g
-(Readline)h(Library)f(\(v)o(ersion)f(5.0,)h(19)f(Septem)o(b)q(er)h
-(2003\),)f(a)g(library)75 1567 y(whic)o(h)20 b(aids)h(in)f(the)g
-(consistency)g(of)f(user)h(in)o(terface)g(across)f(discrete)h(programs)
-f(whic)o(h)h(pro)o(vide)g(a)75 1621 y(command)15 b(line)i(in)o
-(terface.)75 1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289
-1689 y Fq(\015)d Ft(1988-2003)f(F)l(ree)i(Soft)o(w)o(are)f(F)l
-(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f
-(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o
-(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f
-(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h
-(copies.)195 1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)
-h(distribute)h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195
+2 1 bop 75 1512 a Ft(This)15 b(man)o(ual)g(describ)q(es)h(the)f(GNU)f
+(Readline)i(Library)g(\(v)o(ersion)e(5.0,)f(28)i(Jan)o(uary)f(2004\),)f
+(a)h(library)75 1567 y(whic)o(h)20 b(aids)h(in)f(the)g(consistency)g
+(of)f(user)h(in)o(terface)g(across)f(discrete)h(programs)f(whic)o(h)h
+(pro)o(vide)g(a)75 1621 y(command)15 b(line)i(in)o(terface.)75
+1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fq(\015)d
+Ft(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75
+1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g
+(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o
+(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q
+(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)195
+1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute)
+h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195
1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g
(License,)i(V)l(ersion)f(1.1)e(or)g(an)o(y)h(later)195
1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F)l(ree)f(Soft)o(w)o
(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Ft(43)374 315
y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b
Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)20 b Ft(46)75 437 y Fr(App)r(endix)k(A)50 b(Cop)n(ying)23
+(.)f(.)20 b Ft(47)75 437 y Fr(App)r(endix)k(A)50 b(Cop)n(ying)23
b(This)g(Man)n(ual)15 b Fo(.)c(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)37
-b Fr(55)224 505 y Ft(A.1)45 b(GNU)15 b(F)l(ree)h(Do)q(cumen)o(tation)f
+b Fr(57)224 505 y Ft(A.1)45 b(GNU)15 b(F)l(ree)h(Do)q(cumen)o(tation)f
(License)g Fn(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)28 b Ft(55)374 560 y(A.1.1)44
+(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)28 b Ft(57)374 560 y(A.1.1)44
b(ADDENDUM:)14 b(Ho)o(w)g(to)h(use)h(this)f(License)i(for)e(y)o(our)465
615 y(do)q(cumen)o(ts)f Fn(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)29 b Ft(61)75
+(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)29 b Ft(63)75
736 y Fr(Concept)22 b(Index)10 b Fo(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)h(.)f(.)33 b Fr(63)75 871 y(F)-6 b(unction)25
+g(.)g(.)h(.)f(.)33 b Fr(65)75 871 y(F)-6 b(unction)25
b(and)d(V)-6 b(ariable)24 b(Index)9 b Fo(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)32 b Fr(65)p
+h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)32 b Fr(67)p
eop
%%Page: 1 5
1 4 bop 75 -58 a Ft(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
Fs(emacs)e Ft(mo)q(de;)h Fs(vi)g Ft(mo)q(de)h(do)q(es)g(o)o(v)o
(erwrite)315 204 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15
b(call)h(to)f Fs(readline\(\))f Ft(starts)f(in)k(insert)e(mo)q(de.)315
-271 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
+269 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
Fs(self-insert)f Ft(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315
-326 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
-b(Characters)20 b(b)q(ound)i(to)e Fs(backward-)315 381
+324 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
+b(Characters)20 b(b)q(ound)i(to)e Fs(backward-)315 379
y(delete-char)14 b Ft(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q
-(oin)o(t)h(with)f(a)g(space.)315 448 y(By)g(default,)h(this)f(command)g
-(is)h(un)o(b)q(ound.)75 559 y Fh(1.4.4)30 b(Killing)20
-b(And)h(Y)-5 b(anking)75 680 y Fs(kill-line)14 b(\(C-k\))315
-735 y Ft(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
-(the)g(line.)75 814 y Fs(backward-kill-line)e(\(C-x)h(Rubout\))315
-869 y Ft(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
-(line.)75 948 y Fs(unix-line-discard)e(\(C-u\))315 1003
+(oin)o(t)h(with)f(a)g(space.)315 444 y(By)g(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 550 y Fh(1.4.4)30 b(Killing)20
+b(And)h(Y)-5 b(anking)75 669 y Fs(kill-line)14 b(\(C-k\))315
+724 y Ft(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
+(the)g(line.)75 800 y Fs(backward-kill-line)e(\(C-x)h(Rubout\))315
+854 y Ft(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
+(line.)75 930 y Fs(unix-line-discard)e(\(C-u\))315 985
y Ft(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
-(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1082 y Fs(kill-whole-line)
-e(\(\))315 1137 y Ft(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
+(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1060 y Fs(kill-whole-line)
+e(\(\))315 1115 y Ft(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29
-b(By)19 b(default,)315 1192 y(this)d(is)f(un)o(b)q(ound.)75
-1271 y Fs(kill-word)f(\(M-d\))315 1325 y Ft(Kill)j(from)d(p)q(oin)o(t)h
+b(By)19 b(default,)315 1170 y(this)d(is)f(un)o(b)q(ound.)75
+1245 y Fs(kill-word)f(\(M-d\))315 1300 y Ft(Kill)j(from)d(p)q(oin)o(t)h
(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o
-(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1380 y(of)h(the)g(next)g(w)o
+(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1355 y(of)h(the)g(next)g(w)o
(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g
-Fs(forward-word)p Ft(.)75 1459 y Fs(backward-kill-word)e(\(M-)592
-1457 y Fk(h)p 603 1431 73 2 v 603 1459 a Fj(DEL)p 603
-1467 V 674 1457 a Fk(i)689 1459 y Fs(\))315 1514 y Ft(Kill)k(the)d(w)o
+Fs(forward-word)p Ft(.)75 1430 y Fs(backward-kill-word)e(\(M-)592
+1428 y Fk(h)p 603 1402 73 2 v 603 1430 a Fj(DEL)p 603
+1438 V 674 1428 a Fk(i)689 1430 y Fs(\))315 1485 y Ft(Kill)k(the)d(w)o
(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f
-(the)h(same)f(as)g Fs(backward-word)p Ft(.)75 1593 y
-Fs(unix-word-rubout)f(\(C-w\))315 1648 y Ft(Kill)18 b(the)e(w)o(ord)f
+(the)h(same)f(as)g Fs(backward-word)p Ft(.)75 1560 y
+Fs(unix-word-rubout)f(\(C-w\))315 1615 y Ft(Kill)18 b(the)e(w)o(ord)f
(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g
-(b)q(oundary)l(.)23 b(The)16 b(killed)315 1703 y(text)f(is)g(sa)o(v)o
-(ed)g(on)g(the)h(kill-ring.)75 1782 y Fs(delete-horizontal-space)c
-(\(\))315 1836 y Ft(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q
-(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75
-1915 y Fs(kill-region)e(\(\))315 1970 y Ft(Kill)j(the)f(text)e(in)i
-(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g
-(is)h(un)o(b)q(ound.)75 2049 y Fs(copy-region-as-kill)d(\(\))315
-2104 y Ft(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
-(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o
-(a)o(y)l(.)315 2159 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
-(ound.)75 2238 y Fs(copy-backward-word)d(\(\))315 2293
-y Ft(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i
-(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
-2348 y(same)c(as)g Fs(backward-word)p Ft(.)j(By)d(default,)g(this)h
-(command)f(is)h(un)o(b)q(ound.)75 2427 y Fs(copy-forward-word)d(\(\))
-315 2481 y Ft(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
+(b)q(oundary)l(.)23 b(The)16 b(killed)315 1670 y(text)f(is)g(sa)o(v)o
+(ed)g(on)g(the)h(kill-ring.)75 1745 y Fs(unix-filename-rubout)c(\(\))
+315 1800 y Ft(Kill)20 b(the)f(w)o(ord)e(b)q(ehind)j(p)q(oin)o(t,)f
+(using)g(white)g(space)f(and)h(the)f(slash)h(c)o(haracter)e(as)h(the)
+315 1855 y(w)o(ord)d(b)q(oundaries.)21 b(The)15 b(killed)j(text)c(is)i
+(sa)o(v)o(ed)f(on)g(the)g(kill-ring.)75 1930 y Fs
+(delete-horizontal-space)d(\(\))315 1985 y Ft(Delete)k(all)g(spaces)f
+(and)h(tabs)e(around)i(p)q(oin)o(t.)k(By)15 b(default,)h(this)f(is)h
+(un)o(b)q(ound.)75 2060 y Fs(kill-region)e(\(\))315 2115
+y Ft(Kill)j(the)f(text)e(in)i(the)g(curren)o(t)f(region.)20
+b(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+2190 y Fs(copy-region-as-kill)d(\(\))315 2245 y Ft(Cop)o(y)j(the)i
+(text)e(in)i(the)f(region)g(to)g(the)g(kill)h(bu\013er,)f(so)g(it)g
+(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o(a)o(y)l(.)315
+2300 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+2375 y Fs(copy-backward-word)d(\(\))315 2430 y Ft(Cop)o(y)19
+b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i(kill)h
+(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
+2485 y(same)c(as)g Fs(backward-word)p Ft(.)j(By)d(default,)g(this)h
+(command)f(is)h(un)o(b)q(ound.)75 2560 y Fs(copy-forward-word)d(\(\))
+315 2615 y Ft(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e
-(the)315 2536 y(same)g(as)g Fs(forward-word)p Ft(.)j(By)d(default,)h
-(this)f(command)g(is)h(un)o(b)q(ound.)75 2615 y Fs(yank)f(\(C-y\))315
-2670 y Ft(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the)
-h(bu\013er)f(at)f(p)q(oin)o(t.)p eop
+(the)315 2670 y(same)g(as)g Fs(forward-word)p Ft(.)j(By)d(default,)h
+(this)f(command)g(is)h(un)o(b)q(ound.)p eop
%%Page: 17 21
17 20 bop 75 -58 a Ft(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(17)75 149 y Fs(yank-pop)14 b(\(M-y\))315 204 y Ft(Rotate)i(the)h
-(kill-ring,)j(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17
-b(can)h(only)g(do)f(this)h(if)f(the)h(prior)315 259 y(command)d(is)h
-Fs(yank)e Ft(or)h Fs(yank-pop)p Ft(.)75 382 y Fh(1.4.5)30
-b(Sp)r(ecifying)20 b(Numeric)h(Argumen)n(ts)75 507 y
-Fs(digit-argument)13 b(\()p Fl(M-0)p Fs(,)i Fl(M-1)p
-Fs(,)f(...)h Fl(M--)p Fs(\))315 562 y Ft(Add)f(this)g(digit)g(to)f(the)
-h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h
-(argumen)o(t.)315 616 y Fl(M--)h Ft(starts)f(a)h(negativ)o(e)g(argumen)
-o(t.)75 702 y Fs(universal-argument)e(\(\))315 756 y
-Ft(This)g(is)h(another)e(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o
-(t.)18 b(If)13 b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
-811 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us)
-f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 866
+b(17)75 149 y Fs(yank)15 b(\(C-y\))315 204 y Ft(Y)l(ank)g(the)h(top)f
+(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.)
+75 276 y Fs(yank-pop)g(\(M-y\))315 331 y Ft(Rotate)i(the)h(kill-ring,)j
+(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
+(this)h(if)f(the)h(prior)315 386 y(command)d(is)h Fs(yank)e
+Ft(or)h Fs(yank-pop)p Ft(.)75 486 y Fh(1.4.5)30 b(Sp)r(ecifying)20
+b(Numeric)h(Argumen)n(ts)75 604 y Fs(digit-argument)13
+b(\()p Fl(M-0)p Fs(,)i Fl(M-1)p Fs(,)f(...)h Fl(M--)p
+Fs(\))315 658 y Ft(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e
+(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315
+713 y Fl(M--)h Ft(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75
+785 y Fs(universal-argument)e(\(\))315 840 y Ft(This)g(is)h(another)e
+(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
+b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
+895 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us)
+f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 949
y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
-(digits,)g(executing)g Fs(universal-argument)315 921
+(digits,)g(executing)g Fs(universal-argument)315 1004
y Ft(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h
(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
-976 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f
-(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
-1030 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
+1059 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
+f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
+1114 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
-1085 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
+1169 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
(executing)i(this)f(function)h(the)e(\014rst)h(time)315
-1140 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
+1223 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315
-1195 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
-(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1318 y Fh(1.4.6)30
+1278 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
+(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1378 y Fh(1.4.6)30
b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5
-b(ou)75 1443 y Fs(complete)14 b(\()305 1441 y Fk(h)p
-317 1414 74 2 v 317 1443 a Fj(T)m(AB)p 317 1450 V 389
-1441 a Fk(i)404 1443 y Fs(\))315 1497 y Ft(A)o(ttempt)c(to)h(p)q
+b(ou)75 1496 y Fs(complete)14 b(\()305 1494 y Fk(h)p
+317 1468 74 2 v 317 1496 a Fj(T)m(AB)p 317 1504 V 389
+1494 a Fk(i)404 1496 y Fs(\))315 1551 y Ft(A)o(ttempt)c(to)h(p)q
(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19
-b(The)11 b(actual)h(completion)315 1552 y(p)q(erformed)j(is)h
+b(The)11 b(actual)h(completion)315 1606 y(p)q(erformed)j(is)h
(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename)
-g(completion.)75 1637 y Fs(possible-completions)c(\(M-?\))315
-1692 y Ft(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
-q(efore)h(p)q(oin)o(t.)75 1777 y Fs(insert-completions)d(\(M-*\))315
-1832 y Ft(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
+g(completion.)75 1678 y Fs(possible-completions)c(\(M-?\))315
+1732 y Ft(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
+q(efore)h(p)q(oin)o(t.)75 1804 y Fs(insert-completions)d(\(M-*\))315
+1859 y Ft(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315
-1887 y(b)o(y)f Fs(possible-completions)p Ft(.)75 1972
-y Fs(menu-complete)e(\(\))315 2027 y Ft(Similar)g(to)f
+1914 y(b)o(y)f Fs(possible-completions)p Ft(.)75 1985
+y Fs(menu-complete)e(\(\))315 2040 y Ft(Similar)g(to)f
Fs(complete)p Ft(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
-(completed)f(with)h(a)e(single)j(matc)o(h)315 2082 y(from)k(the)h(list)
+(completed)f(with)h(a)e(single)j(matc)o(h)315 2095 y(from)k(the)h(list)
h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19
-b(execution)h(of)f Fs(menu-complete)315 2136 y Ft(steps)h(through)g
+b(execution)h(of)f Fs(menu-complete)315 2150 y Ft(steps)h(through)g
(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f
-(matc)o(h)f(in)i(turn.)315 2191 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
+(matc)o(h)f(in)i(turn.)315 2205 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f
-(the)i(setting)315 2246 y(of)f Fs(bell-style)p Ft(\))e(and)i(the)g
+(the)i(setting)315 2259 y(of)f Fs(bell-style)p Ft(\))e(and)i(the)g
(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g
-Fi(n)i Ft(mo)o(v)o(es)e Fi(n)315 2301 y Ft(p)q(ositions)h(forw)o(ard)e
+Fi(n)i Ft(mo)o(v)o(es)e Fi(n)315 2314 y Ft(p)q(ositions)h(forw)o(ard)e
(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g
-(ma)o(y)g(b)q(e)h(used)g(to)315 2356 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
+(ma)o(y)g(b)q(e)h(used)g(to)315 2369 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f
-(b)q(e)h(b)q(ound)g(to)315 2408 y Fk(h)p 327 2382 V 327
-2410 a Fj(T)m(AB)p 327 2418 V 399 2408 a Fk(i)414 2410
+(b)q(e)h(b)q(ound)g(to)315 2422 y Fk(h)p 327 2396 V 327
+2424 a Fj(T)m(AB)p 327 2431 V 399 2422 a Fk(i)414 2424
y Ft(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75
2496 y Fs(delete-char-or-list)e(\(\))315 2550 y Ft(Deletes)h(the)f(c)o
(haracter)g(under)h(the)g(cursor)f(if)h(not)f(at)g(the)g(b)q(eginning)j
594 149 V 24 w(displa)n(y)25 b Fe(\()p Fs(void)p Fe(\))195
204 y Ft(F)l(orce)20 b(the)g(line)h(to)e(b)q(e)i(up)q(dated)f(and)g
(redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)i(thinks)g(the)195
-259 y(screen)16 b(displa)o(y)g(is)g(correct.)1675 358
-y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 358 V
-25 w(on)p 302 358 V 25 w(new)p 426 358 V 26 w(line)k
-Fe(\()p Fs(void)p Fe(\))195 412 y Ft(T)l(ell)16 b(the)f(up)q(date)h
+259 y(screen)16 b(displa)o(y)g(is)g(correct.)1675 352
+y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 352 V
+25 w(on)p 302 352 V 25 w(new)p 426 352 V 26 w(line)k
+Fe(\()p Fs(void)p Fe(\))195 407 y Ft(T)l(ell)16 b(the)f(up)q(date)h
(functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h
-(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 467
-y(ouputting)f(a)e(newline.)1675 566 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 566 V 25 w(on)p 302 566 V 25
-w(new)p 426 566 V 26 w(line)p 540 566 V 27 w(with)p 677
-566 V 26 w(prompt)h Fe(\()p Fs(void)p Fe(\))195 621 y
+(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 462
+y(ouputting)f(a)e(newline.)1675 555 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 555 V 25 w(on)p 302 555 V 25
+w(new)p 426 555 V 26 w(line)p 540 555 V 27 w(with)p 677
+555 V 26 w(prompt)h Fe(\()p Fs(void)p Fe(\))195 610 y
Ft(T)l(ell)13 b(the)g(up)q(date)f(functions)h(that)e(w)o(e)h(ha)o(v)o
(e)g(mo)o(v)o(ed)f(on)o(to)g(a)h(new)g(line,)i(with)f
-Fi(rl)p 1553 621 14 2 v 20 w(prompt)g Ft(already)195
-675 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f
+Fi(rl)p 1553 610 14 2 v 20 w(prompt)g Ft(already)195
+665 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f
(applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g
-(string)195 730 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)e
+(string)195 719 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)e
(kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21
-b(It)195 785 y(should)16 b(b)q(e)g(used)g(after)e(setting)i
-Fi(rl)p 795 785 V 20 w(already)p 960 785 V 20 w(prompted)p
-Ft(.)1675 884 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p
-216 884 18 3 v 25 w(reset)p 362 884 V 25 w(line)p 475
-884 V 28 w(state)j Fe(\()p Fs(void)p Fe(\))195 938 y
+b(It)195 774 y(should)16 b(b)q(e)g(used)g(after)e(setting)i
+Fi(rl)p 795 774 V 20 w(already)p 960 774 V 20 w(prompted)p
+Ft(.)1675 867 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p
+216 867 18 3 v 25 w(reset)p 362 867 V 25 w(line)p 475
+867 V 28 w(state)j Fe(\()p Fs(void)p Fe(\))195 922 y
Ft(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f(and)g
(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195
-993 y(new)e(line.)1675 1092 y([F)l(unction])-1800 b Fg(int)20
-b Ff(rl)p 216 1092 V 25 w(crlf)j Fe(\()p Fs(void)p Fe(\))195
-1147 y Ft(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g
-(next)g(screen)h(line.)1675 1245 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 1245 V 25 w(sho)n(w)p 364 1245
-V 25 w(c)n(har)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 1300
+977 y(new)e(line.)1675 1070 y([F)l(unction])-1800 b Fg(int)20
+b Ff(rl)p 216 1070 V 25 w(crlf)j Fe(\()p Fs(void)p Fe(\))195
+1125 y Ft(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g
+(next)g(screen)h(line.)1675 1218 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 1218 V 25 w(sho)n(w)p 364 1218
+V 25 w(c)n(har)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 1273
y Ft(Displa)o(y)i(c)o(haracter)e Fi(c)20 b Ft(on)c Fs(rl_outstream)p
Ft(.)21 b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j
-(meta)195 1355 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o
+(meta)195 1328 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o
(v)o(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g
-(sequence.)195 1410 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g
+(sequence.)195 1382 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g
(applications)i(whic)o(h)f(wish)g(to)f(do)g(their)g(o)o(wn)g(redispla)o
-(y)l(.)1675 1508 y([F)l(unction])-1800 b Fg(int)20 b
-Ff(rl)p 216 1508 V 25 w(message)h Fe(\()p Fs(const)14
-b(char)h(*,)g(...)o Fe(\))195 1563 y Ft(The)c(argumen)o(ts)e(are)h(a)g
+(y)l(.)1675 1475 y([F)l(unction])-1800 b Fg(int)20 b
+Ff(rl)p 216 1475 V 25 w(message)h Fe(\()p Fs(const)14
+b(char)h(*,)g(...)o Fe(\))195 1530 y Ft(The)c(argumen)o(ts)e(are)h(a)g
(format)f(string)h(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)c
-Fs(printf)p Ft(,)h(p)q(ossibly)i(con)o(taining)195 1618
+Fs(printf)p Ft(,)h(p)q(ossibly)i(con)o(taining)195 1585
y(con)o(v)o(ersion)22 b(sp)q(eci\014cations)i(suc)o(h)f(as)e(`)p
Fs(\045d)p Ft(',)i(and)f(an)o(y)g(additional)h(argumen)o(ts)e
-(necessary)i(to)195 1673 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q
+(necessary)i(to)195 1640 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q
(eci\014cations.)38 b(The)21 b(resulting)h(string)e(is)i(displa)o(y)o
-(ed)g(in)f(the)g Fi(ec)o(ho)195 1728 y(area)p Ft(.)e(The)d(ec)o(ho)f
+(ed)g(in)f(the)g Fi(ec)o(ho)195 1695 y(area)p Ft(.)e(The)d(ec)o(ho)f
(area)g(is)g(also)g(used)h(to)f(displa)o(y)h(n)o(umeric)g(argumen)o(ts)
-f(and)g(searc)o(h)g(strings.)1675 1826 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 1826 V 25 w(clear)p 359 1826
-V 27 w(message)g Fe(\()p Fs(void)p Fe(\))195 1881 y Ft(Clear)15
-b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1675 1980
-y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 1980
-V 25 w(sa)n(v)n(e)p 370 1980 V 26 w(prompt)h Fe(\()p
-Fs(void)p Fe(\))195 2034 y Ft(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h
+f(and)g(searc)o(h)g(strings.)1675 1788 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 1788 V 25 w(clear)p 359 1788
+V 27 w(message)g Fe(\()p Fs(void)p Fe(\))195 1843 y Ft(Clear)15
+b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1675 1936
+y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 1936
+V 25 w(sa)n(v)n(e)p 370 1936 V 26 w(prompt)h Fe(\()p
+Fs(void)p Fe(\))195 1991 y Ft(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h
(prompt)e(displa)o(y)i(state)e(in)h(preparation)f(for)g(displa)o(ying)j
-(a)d(new)195 2089 y(message)15 b(in)h(the)f(message)g(area)f(with)i
-Fs(rl_message\(\))p Ft(.)1675 2188 y([F)l(unction])-1800
-b Fg(void)20 b Ff(rl)p 242 2188 V 25 w(restore)p 441
-2188 V 25 w(prompt)g Fe(\()p Fs(void)p Fe(\))195 2243
+(a)d(new)195 2045 y(message)15 b(in)h(the)f(message)g(area)f(with)i
+Fs(rl_message\(\))p Ft(.)1675 2138 y([F)l(unction])-1800
+b Fg(void)20 b Ff(rl)p 242 2138 V 25 w(restore)p 441
+2138 V 25 w(prompt)g Fe(\()p Fs(void)p Fe(\))195 2193
y Ft(Restore)g(the)i(lo)q(cal)g(Readline)h(prompt)e(displa)o(y)h(state)
f(sa)o(v)o(ed)g(b)o(y)g(the)g(most)g(recen)o(t)g(call)i(to)195
-2297 y Fs(rl_save_prompt)p Ft(.)1675 2396 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 2396 V 25 w(expand)p 421 2396
+2248 y Fs(rl_save_prompt)p Ft(.)1675 2341 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 2341 V 25 w(expand)p 421 2341
V 25 w(prompt)h Fe(\()p Fs(char)14 b(*prompt)p Fe(\))195
-2451 y Ft(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h
+2396 y Ft(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h
(in)g Fi(prompt)g Ft(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195
-2506 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18
+2451 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18
b(function)h(is)f(called)i(b)o(y)e Fs(readline\(\))p
-Ft(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 2560 y(called)12
+Ft(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 2506 y(called)12
b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Fs
-(rl_on_new_line_with_prompt\(\))d Ft(function)195 2615
+(rl_on_new_line_with_prompt\(\))d Ft(function)195 2560
y(or)12 b Fs(rl_already_prompted)e Ft(v)m(ariable)k(is)g(used.)19
b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o
-(haracters)195 2670 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q
-(ossibly)i(m)o(ulti-line\))g(prompt.)p eop
+(haracters)195 2615 y(on)i(the)g(last)g(line)h(of)f(the)g(\(p)q
+(ossibly)h(m)o(ulti-line\))h(prompt.)24 b(Applications)19
+b(ma)o(y)d(indicate)j(that)195 2670 y(the)14 b(prompt)f(con)o(tains)i
+(c)o(haracters)e(that)g(tak)o(e)g(up)h(no)g(ph)o(ysical)i(screen)e
+(space)g(when)h(displa)o(y)o(ed)p eop
%%Page: 34 38
-34 37 bop 75 -58 a Ft(34)1299 b(GNU)15 b(Readline)h(Library)1675
-149 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 149
-18 3 v 25 w(set)p 312 149 V 26 w(prompt)g Fe(\()p Fs(const)14
-b(char)h(*prompt)p Fe(\))195 204 y Ft(Mak)o(e)e(Readline)i(use)e
-Fi(prompt)h Ft(for)f(subsequen)o(t)h(redispla)o(y)l(.)21
-b(This)14 b(calls)g Fs(rl_expand_prompt\(\))195 259 y
-Ft(to)h(expand)g(the)h(prompt)e(and)i(sets)f Fs(rl_prompt)f
-Ft(to)g(the)h(result.)75 375 y Fh(2.4.7)30 b(Mo)r(difying)20
-b(T)-5 b(ext)1675 499 y Ft([F)l(unction])-1800 b Fg(int)20
-b Ff(rl)p 216 499 V 25 w(insert)p 383 499 V 26 w(text)k
-Fe(\()p Fs(const)14 b(char)g(*text)p Fe(\))195 554 y
-Ft(Insert)i Fi(text)g Ft(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f
-(cursor)h(p)q(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f
-(c)o(har-)195 608 y(acters)g(inserted.)1675 704 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 704 V 25 w(delete)p 388 704
+34 37 bop 75 -58 a Ft(34)1299 b(GNU)15 b(Readline)h(Library)195
+149 y(b)o(y)k(brac)o(k)o(eting)h(a)f(sequence)i(of)e(suc)o(h)g(c)o
+(haracters)g(with)h(the)g(sp)q(ecial)h(mark)o(ers)d Fs(RL_PROMPT_)195
+204 y(START_IGNORE)14 b Ft(and)h Fs(RL_PROMPT_END_IGNORE)e
+Ft(\(declared)j(in)g(`)p Fs(readline.h)p Ft('.)j(This)d(ma)o(y)e(b)q(e)
+195 259 y(used)i(to)e(em)o(b)q(ed)i(terminal-sp)q(eci\014c)i(escap)q(e)
+e(sequences)h(in)f(prompts.)1675 355 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 355 18 3 v 25 w(set)p 312 355
+V 26 w(prompt)g Fe(\()p Fs(const)14 b(char)h(*prompt)p
+Fe(\))195 410 y Ft(Mak)o(e)e(Readline)i(use)e Fi(prompt)h
+Ft(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 b(This)14
+b(calls)g Fs(rl_expand_prompt\(\))195 465 y Ft(to)h(expand)g(the)h
+(prompt)e(and)i(sets)f Fs(rl_prompt)f Ft(to)g(the)h(result.)75
+580 y Fh(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1675
+704 y Ft([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
+704 V 25 w(insert)p 383 704 V 26 w(text)k Fe(\()p Fs(const)14
+b(char)g(*text)p Fe(\))195 759 y Ft(Insert)i Fi(text)g
+Ft(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f(cursor)h(p)q
+(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f(c)o(har-)195
+814 y(acters)g(inserted.)1675 910 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 910 V 25 w(delete)p 388 910
V 27 w(text)k Fe(\()p Fs(int)14 b(start,)h(int)g(end)p
-Fe(\))195 759 y Ft(Delete)k(the)g(text)g(b)q(et)o(w)o(een)g
+Fe(\))195 965 y Ft(Delete)k(the)g(text)g(b)q(et)o(w)o(een)g
Fi(start)g Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)f(line.)33
-b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 814 y(c)o(haracters)14
-b(deleted.)1675 910 y([F)l(unction])-1800 b Fg(char)20
-b(*)f Ff(rl)p 287 910 V 26 w(cop)n(y)p 427 910 V 25 w(text)24
-b Fe(\()p Fs(int)15 b(start,)f(int)h(end)p Fe(\))195
-965 y Ft(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i
-Fi(start)f Ft(and)g Fi(end)j Ft(in)e(the)f(curren)o(t)g(line.)1675
-1060 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
-1060 V 25 w(kill)p 316 1060 V 28 w(text)k Fe(\()p Fs(int)15
-b(start,)f(int)h(end)p Fe(\))195 1115 y Ft(Cop)o(y)i(the)g(text)f(b)q
-(et)o(w)o(een)i Fi(start)f Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)g
-(line)i(to)e(the)g(kill)i(ring,)e(app)q(ending)195 1170
-y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e(the)g(last)g
-(command)g(w)o(as)f(a)h(kill)i(command.)25 b(The)17 b(text)f(is)195
-1225 y(deleted.)26 b(If)17 b Fi(start)g Ft(is)g(less)g(than)g
-Fi(end)p Ft(,)g(the)g(text)g(is)g(app)q(ended,)h(otherwise)f(prep)q
-(ended.)27 b(If)17 b(the)195 1280 y(last)e(command)g(w)o(as)g(not)f(a)h
-(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)h(used.)1675
-1375 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
-1375 V 25 w(push)p 360 1375 V 25 w(macro)p 540 1375 V
-23 w(input)j Fe(\()p Fs(char)15 b(*macro)p Fe(\))195
-1430 y Ft(Cause)f Fi(macro)i Ft(to)d(b)q(e)i(inserted)g(in)o(to)f(the)g
-(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o(v)o(ok)o(ed)g(b)o(y)f(a)g
-(k)o(ey)g(b)q(ound)h(to)195 1485 y(a)g(macro.)k(Not)c(esp)q(ecially)i
-(useful;)f(use)g Fs(rl_insert_text\(\))d Ft(instead.)75
-1601 y Fh(2.4.8)30 b(Character)21 b(Input)1675 1725 y
-Ft([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 1725
-V 25 w(read)p 351 1725 V 25 w(k)n(ey)k Fe(\()p Fs(void)p
-Fe(\))195 1780 y Ft(Return)14 b(the)h(next)g(c)o(haracter)f(a)o(v)m
-(ailable)i(from)e(Readline's)i(curren)o(t)f(input)g(stream.)k(This)d
-(han-)195 1834 y(dles)e(input)g(inserted)h(in)o(to)e(the)g(input)h
-(stream)f(via)g Fi(rl)p 1112 1834 14 2 v 21 w(p)q(ending)p
-1289 1834 V 22 w(input)i Ft(\(see)e(Section)h(2.3)f([Read-)195
-1889 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h
+b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 1019 y(c)o(haracters)14
+b(deleted.)1675 1115 y([F)l(unction])-1800 b Fg(char)20
+b(*)f Ff(rl)p 287 1115 V 26 w(cop)n(y)p 427 1115 V 25
+w(text)24 b Fe(\()p Fs(int)15 b(start,)f(int)h(end)p
+Fe(\))195 1170 y Ft(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o
+(w)o(een)i Fi(start)f Ft(and)g Fi(end)j Ft(in)e(the)f(curren)o(t)g
+(line.)1675 1266 y([F)l(unction])-1800 b Fg(int)20 b
+Ff(rl)p 216 1266 V 25 w(kill)p 316 1266 V 28 w(text)k
+Fe(\()p Fs(int)15 b(start,)f(int)h(end)p Fe(\))195 1321
+y Ft(Cop)o(y)i(the)g(text)f(b)q(et)o(w)o(een)i Fi(start)f
+Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)g(line)i(to)e(the)g(kill)i
+(ring,)e(app)q(ending)195 1375 y(or)f(prep)q(ending)k(to)c(the)h(last)g
+(kill)i(if)e(the)g(last)g(command)g(w)o(as)f(a)h(kill)i(command.)25
+b(The)17 b(text)f(is)195 1430 y(deleted.)26 b(If)17 b
+Fi(start)g Ft(is)g(less)g(than)g Fi(end)p Ft(,)g(the)g(text)g(is)g(app)
+q(ended,)h(otherwise)f(prep)q(ended.)27 b(If)17 b(the)195
+1485 y(last)e(command)g(w)o(as)g(not)f(a)h(kill,)i(a)e(new)g(kill)i
+(ring)f(slot)f(is)h(used.)1675 1581 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 1581 V 25 w(push)p 360 1581
+V 25 w(macro)p 540 1581 V 23 w(input)j Fe(\()p Fs(char)15
+b(*macro)p Fe(\))195 1636 y Ft(Cause)f Fi(macro)i Ft(to)d(b)q(e)i
+(inserted)g(in)o(to)f(the)g(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o
+(v)o(ok)o(ed)g(b)o(y)f(a)g(k)o(ey)g(b)q(ound)h(to)195
+1691 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g
+Fs(rl_insert_text\(\))d Ft(instead.)75 1806 y Fh(2.4.8)30
+b(Character)21 b(Input)1675 1930 y Ft([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 1930 V 25 w(read)p 351 1930
+V 25 w(k)n(ey)k Fe(\()p Fs(void)p Fe(\))195 1985 y Ft(Return)14
+b(the)h(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e(Readline's)i
+(curren)o(t)f(input)g(stream.)k(This)d(han-)195 2040
+y(dles)e(input)g(inserted)h(in)o(to)e(the)g(input)h(stream)f(via)g
+Fi(rl)p 1112 2040 14 2 v 21 w(p)q(ending)p 1289 2040
+V 22 w(input)i Ft(\(see)e(Section)h(2.3)f([Read-)195
+2095 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h
Fs(rl_stuff_char\(\))p Ft(,)e(macros,)h(and)h(c)o(haracters)f(read)h
-(from)195 1944 y(the)d(k)o(eyb)q(oard.)25 b(While)19
+(from)195 2149 y(the)d(k)o(eyb)q(oard.)25 b(While)19
b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)f(an)o(y)e
-(function)i(assigned)195 1999 y(to)d(the)g Fs(rl_event_hook)e
-Ft(v)m(ariable.)1675 2095 y([F)l(unction])-1800 b Fg(int)20
-b Ff(rl)p 216 2095 18 3 v 25 w(getc)k Fe(\()p Fs(FILE)14
-b(*stream)p Fe(\))195 2149 y Ft(Return)c(the)h(next)g(c)o(haracter)f(a)
+(function)i(assigned)195 2204 y(to)d(the)g Fs(rl_event_hook)e
+Ft(v)m(ariable.)1675 2300 y([F)l(unction])-1800 b Fg(int)20
+b Ff(rl)p 216 2300 18 3 v 25 w(getc)k Fe(\()p Fs(FILE)14
+b(*stream)p Fe(\))195 2355 y Ft(Return)c(the)h(next)g(c)o(haracter)f(a)
o(v)m(ailable)i(from)e Fi(stream)p Ft(,)g(whic)o(h)i(is)f(assumed)f(to)
-g(b)q(e)i(the)e(k)o(eyb)q(oard.)1675 2245 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 2245 V 25 w(stu\013)p 351 2245
-V 26 w(c)n(har)i Fe(\()p Fs(int)15 b(c)p Fe(\))195 2300
+g(b)q(e)i(the)e(k)o(eyb)q(oard.)1675 2451 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 2451 V 25 w(stu\013)p 351 2451
+V 26 w(c)n(har)i Fe(\()p Fs(int)15 b(c)p Fe(\))195 2506
y Ft(Insert)i Fi(c)i Ft(in)o(to)d(the)h(Readline)h(input)f(stream.)23
b(It)16 b(will)i(b)q(e)f Fs(")p Ft(read)p Fs(")g Ft(b)q(efore)f
-(Readline)i(attempts)195 2355 y(to)13 b(read)g(c)o(haracters)g(from)f
+(Readline)i(attempts)195 2560 y(to)13 b(read)g(c)o(haracters)g(from)f
(the)i(terminal)g(with)g Fs(rl_read_key\(\))p Ft(.)j(Up)d(to)f(512)f(c)
-o(haracters)h(ma)o(y)195 2410 y(b)q(e)j(pushed)g(bac)o(k.)k
+o(haracters)h(ma)o(y)195 2615 y(b)q(e)j(pushed)g(bac)o(k.)k
Fs(rl_stuff_char)14 b Ft(returns)h(1)g(if)h(the)f(c)o(haracter)g(w)o
-(as)f(successfully)j(inserted;)195 2465 y(0)e(otherwise.)1675
-2560 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
-2560 V 25 w(execute)p 428 2560 V 27 w(next)j Fe(\()p
-Fs(int)15 b(c)p Fe(\))195 2615 y Ft(Mak)o(e)i Fi(c)k
-Ft(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h
-Fs(rl_read_key\(\))d Ft(is)i(called.)29 b(This)195 2670
-y(sets)15 b Fi(rl)p 317 2670 14 2 v 20 w(p)q(ending)p
-493 2670 V 22 w(input)p Ft(.)p eop
+(as)f(successfully)j(inserted;)195 2670 y(0)e(otherwise.)p
+eop
%%Page: 35 39
35 38 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
(Readline)843 b(35)1675 149 y([F)l(unction])-1800 b Fg(int)20
-b Ff(rl)p 216 149 18 3 v 25 w(clear)p 359 149 V 27 w(p)r(ending)p
-586 149 V 24 w(input)k Fe(\()p Fs(void)p Fe(\))195 204
-y Ft(Unset)d Fi(rl)p 364 204 14 2 v 20 w(p)q(ending)p
-540 204 V 22 w(input)p Ft(,)i(e\013ectiv)o(ely)f(negating)f(the)g
-(e\013ect)g(of)f(an)o(y)h(previous)g(call)h(to)e Fs(rl_)195
-259 y(execute_next\(\))p Ft(.)29 b(This)19 b(w)o(orks)f(only)h(if)h
-(the)e(p)q(ending)j(input)f(has)f(not)f(already)h(b)q(een)h(read)195
-314 y(with)c Fs(rl_read_key\(\))p Ft(.)1675 404 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 404 18 3 v 25 w(set)p 312 404
-V 26 w(k)n(eyb)r(oard)p 569 404 V 24 w(input)p 726 404
-V 26 w(timeout)j Fe(\()p Fs(int)14 b(u)p Fe(\))195 459
-y Ft(While)21 b(w)o(aiting)g(for)e(k)o(eyb)q(oard)h(input)h(in)g
-Fs(rl_read_key\(\))p Ft(,)e(Readline)i(will)h(w)o(ait)e(for)f
-Fi(u)h Ft(mi-)195 514 y(croseconds)h(for)e(input)j(b)q(efore)f(calling)
-h(an)o(y)e(function)h(assigned)g(to)f Fs(rl_event_hook)p
-Ft(.)34 b(The)195 569 y(default)16 b(w)o(aiting)f(p)q(erio)q(d)i(is)e
-(one-ten)o(th)h(of)e(a)h(second.)21 b(Returns)14 b(the)i(old)f(timeout)
-h(v)m(alue.)75 679 y Fh(2.4.9)30 b(T)-5 b(erminal)20
-b(Managemen)n(t)1675 800 y Ft([F)l(unction])-1800 b Fg(void)20
-b Ff(rl)p 242 800 V 25 w(prep)p 381 800 V 25 w(terminal)j
-Fe(\()p Fs(int)15 b(meta_flag)p Fe(\))195 855 y Ft(Mo)q(dify)22
+b Ff(rl)p 216 149 18 3 v 25 w(execute)p 428 149 V 27
+w(next)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 204 y Ft(Mak)o(e)i
+Fi(c)k Ft(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h
+Fs(rl_read_key\(\))d Ft(is)i(called.)29 b(This)195 259
+y(sets)15 b Fi(rl)p 317 259 14 2 v 20 w(p)q(ending)p
+493 259 V 22 w(input)p Ft(.)1675 349 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 349 18 3 v 25 w(clear)p 359
+349 V 27 w(p)r(ending)p 586 349 V 24 w(input)k Fe(\()p
+Fs(void)p Fe(\))195 404 y Ft(Unset)d Fi(rl)p 364 404
+14 2 v 20 w(p)q(ending)p 540 404 V 22 w(input)p Ft(,)i(e\013ectiv)o
+(ely)f(negating)f(the)g(e\013ect)g(of)f(an)o(y)h(previous)g(call)h(to)e
+Fs(rl_)195 459 y(execute_next\(\))p Ft(.)29 b(This)19
+b(w)o(orks)f(only)h(if)h(the)e(p)q(ending)j(input)f(has)f(not)f
+(already)h(b)q(een)h(read)195 514 y(with)c Fs(rl_read_key\(\))p
+Ft(.)1675 604 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p
+216 604 18 3 v 25 w(set)p 312 604 V 26 w(k)n(eyb)r(oard)p
+569 604 V 24 w(input)p 726 604 V 26 w(timeout)j Fe(\()p
+Fs(int)14 b(u)p Fe(\))195 659 y Ft(While)21 b(w)o(aiting)g(for)e(k)o
+(eyb)q(oard)h(input)h(in)g Fs(rl_read_key\(\))p Ft(,)e(Readline)i(will)
+h(w)o(ait)e(for)f Fi(u)h Ft(mi-)195 714 y(croseconds)h(for)e(input)j(b)
+q(efore)f(calling)h(an)o(y)e(function)h(assigned)g(to)f
+Fs(rl_event_hook)p Ft(.)34 b(The)195 768 y(default)16
+b(w)o(aiting)f(p)q(erio)q(d)i(is)e(one-ten)o(th)h(of)e(a)h(second.)21
+b(Returns)14 b(the)i(old)f(timeout)h(v)m(alue.)75 879
+y Fh(2.4.9)30 b(T)-5 b(erminal)20 b(Managemen)n(t)1675
+1000 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p
+242 1000 V 25 w(prep)p 381 1000 V 25 w(terminal)j Fe(\()p
+Fs(int)15 b(meta_flag)p Fe(\))195 1055 y Ft(Mo)q(dify)22
b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d
-Fs(readline\(\))g Ft(can)i(read)f(a)g(single)195 910
+Fs(readline\(\))g Ft(can)i(read)f(a)g(single)195 1110
y(c)o(haracter)15 b(at)g(a)g(time)g(from)g(the)h(k)o(eyb)q(oard.)k(The)
-c Fi(meta)p 1189 910 14 2 v 19 w(\015ag)j Ft(argumen)o(t)c(should)i(b)q
-(e)f(non-zero)195 965 y(if)g(Readline)g(should)g(read)f(eigh)o(t-bit)i
-(input.)1675 1055 y([F)l(unction])-1800 b Fg(void)20
-b Ff(rl)p 242 1055 18 3 v 25 w(deprep)p 439 1055 V 25
-w(terminal)j Fe(\()p Fs(void)p Fe(\))195 1110 y Ft(Undo)16
+c Fi(meta)p 1189 1110 14 2 v 19 w(\015ag)j Ft(argumen)o(t)c(should)i(b)
+q(e)f(non-zero)195 1165 y(if)g(Readline)g(should)g(read)f(eigh)o(t-bit)
+i(input.)1675 1255 y([F)l(unction])-1800 b Fg(void)20
+b Ff(rl)p 242 1255 18 3 v 25 w(deprep)p 439 1255 V 25
+w(terminal)j Fe(\()p Fs(void)p Fe(\))195 1310 y Ft(Undo)16
b(the)g(e\013ects)f(of)h Fs(rl_prep_terminal\(\))p Ft(,)d(lea)o(ving)k
(the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h)195
-1165 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i(to)d
-Fs(rl_prep_terminal\(\))p Ft(.)1675 1255 y([F)l(unction])-1800
-b Fg(void)20 b Ff(rl)p 242 1255 V 25 w(tt)n(y)p 339 1255
-V 27 w(set)p 437 1255 V 25 w(default)p 635 1255 V 26
+1365 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i(to)d
+Fs(rl_prep_terminal\(\))p Ft(.)1675 1455 y([F)l(unction])-1800
+b Fg(void)20 b Ff(rl)p 242 1455 V 25 w(tt)n(y)p 339 1455
+V 27 w(set)p 437 1455 V 25 w(default)p 635 1455 V 26
w(bindings)j Fe(\()p Fs(Keymap)14 b(kmap)p Fe(\))195
-1310 y Ft(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h
+1510 y Ft(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h
(c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195
-1365 y Fs(stty)p Ft(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.)
+1564 y Fs(stty)p Ft(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.)
22 b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h Fi(kmap)p
-Ft(.)1675 1455 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p
-242 1455 V 25 w(tt)n(y)p 339 1455 V 27 w(unset)p 501
-1455 V 25 w(default)p 699 1455 V 25 w(bindings)k Fe(\()p
-Fs(Keymap)14 b(kmap)p Fe(\))195 1510 y Ft(Reset)h(the)h(bindings)i
+Ft(.)1675 1655 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p
+242 1655 V 25 w(tt)n(y)p 339 1655 V 27 w(unset)p 501
+1655 V 25 w(default)p 699 1655 V 25 w(bindings)k Fe(\()p
+Fs(Keymap)14 b(kmap)p Fe(\))195 1710 y Ft(Reset)h(the)h(bindings)i
(manipulated)f(b)o(y)f Fs(rl_tty_set_default_bindings)c
-Ft(so)k(that)f(the)h(ter-)195 1564 y(minal)21 b(editing)g(c)o
+Ft(so)k(that)f(the)h(ter-)195 1764 y(minal)21 b(editing)g(c)o
(haracters)e(are)h(b)q(ound)g(to)f Fs(rl_insert)p Ft(.)33
-b(The)20 b(bindings)i(are)d(p)q(erformed)h(in)195 1619
-y Fi(kmap)p Ft(.)1675 1710 y([F)l(unction])-1800 b Fg(int)20
-b Ff(rl)p 216 1710 V 25 w(reset)p 362 1710 V 25 w(terminal)k
+b(The)20 b(bindings)i(are)d(p)q(erformed)h(in)195 1819
+y Fi(kmap)p Ft(.)1675 1910 y([F)l(unction])-1800 b Fg(int)20
+b Ff(rl)p 216 1910 V 25 w(reset)p 362 1910 V 25 w(terminal)k
Fe(\()p Fs(const)14 b(char)g(*terminal_name)p Fe(\))195
-1764 y Ft(Reinitialize)h(Readline's)d(idea)h(of)f(the)g(terminal)g
-(settings)g(using)h Fi(terminal)p 1488 1764 14 2 v 21
-w(name)h Ft(as)e(the)g(termi-)195 1819 y(nal)k(t)o(yp)q(e)g(\(e.g.,)f
-Fs(vt100)p Ft(\).)21 b(If)16 b Fi(terminal)p 876 1819
+1964 y Ft(Reinitialize)h(Readline's)d(idea)h(of)f(the)g(terminal)g
+(settings)g(using)h Fi(terminal)p 1488 1964 14 2 v 21
+w(name)h Ft(as)e(the)g(termi-)195 2019 y(nal)k(t)o(yp)q(e)g(\(e.g.,)f
+Fs(vt100)p Ft(\).)21 b(If)16 b Fi(terminal)p 876 2019
V 21 w(name)i Ft(is)f Fs(NULL)p Ft(,)e(the)h(v)m(alue)h(of)e(the)h
-Fs(TERM)g Ft(en)o(vironmen)o(t)195 1874 y(v)m(ariable)h(is)e(used.)75
-1984 y Fh(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1675
-2106 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p
-242 2106 18 3 v 25 w(replace)p 443 2106 V 27 w(line)k
+Fs(TERM)g Ft(en)o(vironmen)o(t)195 2074 y(v)m(ariable)h(is)e(used.)75
+2184 y Fh(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1675
+2306 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p
+242 2306 18 3 v 25 w(replace)p 443 2306 V 27 w(line)k
Fe(\()p Fs(const)15 b(char)f(*text,)g(int)h(clear_undo)p
-Fe(\))195 2161 y Ft(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g
+Fe(\))195 2360 y Ft(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g
Fs(rl_line_buffer)f Ft(with)i Fi(text)p Ft(.)33 b(The)20
-b(p)q(oin)o(t)g(and)g(mark)f(are)h(pre-)195 2215 y(serv)o(ed,)13
-b(if)g(p)q(ossible.)21 b(If)13 b Fi(clear)p 711 2215
+b(p)q(oin)o(t)g(and)g(mark)f(are)h(pre-)195 2415 y(serv)o(ed,)13
+b(if)g(p)q(ossible.)21 b(If)13 b Fi(clear)p 711 2415
14 2 v 21 w(undo)i Ft(is)e(non-zero,)h(the)e(undo)i(list)f(asso)q
-(ciated)g(with)g(the)g(curren)o(t)195 2270 y(line)k(is)f(cleared.)1675
-2360 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
-2360 18 3 v 25 w(extend)p 409 2360 V 26 w(line)p 523
-2360 V 27 w(bu\013er)j Fe(\()p Fs(int)14 b(len)p Fe(\))195
-2415 y Ft(Ensure)h(that)g Fs(rl_line_buffer)e Ft(has)i(enough)g(space)h
+(ciated)g(with)g(the)g(curren)o(t)195 2470 y(line)k(is)f(cleared.)1675
+2560 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216
+2560 18 3 v 25 w(extend)p 409 2560 V 26 w(line)p 523
+2560 V 27 w(bu\013er)j Fe(\()p Fs(int)14 b(len)p Fe(\))195
+2615 y Ft(Ensure)h(that)g Fs(rl_line_buffer)e Ft(has)i(enough)g(space)h
(to)e(hold)i Fi(len)g Ft(c)o(haracters,)e(p)q(ossibly)i(real-)195
-2470 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1675 2560
-y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 2560
-V 25 w(initial)q(i)q(ze)26 b Fe(\()p Fs(void)p Fe(\))195
-2615 y Ft(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o
-(ternal)h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)
-195 2670 y(this;)d Fs(readline\(\))f Ft(calls)i(it)g(b)q(efore)f
-(reading)h(an)o(y)f(input.)p eop
+2670 y(lo)q(cating)g(it)f(if)h(necessary)l(.)p eop
%%Page: 36 40
36 39 bop 75 -58 a Ft(36)1299 b(GNU)15 b(Readline)h(Library)1675
149 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 149
-18 3 v 25 w(ding)j Fe(\()p Fs(void)p Fe(\))195 204 y
-Ft(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g(setting)f
-(of)g Fs(bell-style)p Ft(.)1675 305 y([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 305 V 25 w(alphab)r(etic)25
-b Fe(\()p Fs(int)14 b(c)p Fe(\))195 360 y Ft(Return)h(1)g(if)g
+18 3 v 25 w(initial)q(i)q(ze)26 b Fe(\()p Fs(void)p Fe(\))195
+204 y Ft(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o(ternal)
+h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)195
+259 y(this;)d Fs(readline\(\))f Ft(calls)i(it)g(b)q(efore)f(reading)h
+(an)o(y)f(input.)1675 343 y([F)l(unction])-1800 b Fg(int)20
+b Ff(rl)p 216 343 V 25 w(ding)j Fe(\()p Fs(void)p Fe(\))195
+398 y Ft(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g
+(setting)f(of)g Fs(bell-style)p Ft(.)1675 482 y([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 482 V 25 w(alphab)r(etic)25
+b Fe(\()p Fs(int)14 b(c)p Fe(\))195 537 y Ft(Return)h(1)g(if)g
Fi(c)j Ft(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1675
-462 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242
-462 V 25 w(displa)n(y)p 440 462 V 27 w(matc)n(h)p 621
-462 V 25 w(list)k Fe(\()p Fs(char)15 b(**matches,)e(int)i(len,)g(int)g
-(max)p Fe(\))195 516 y Ft(A)i(con)o(v)o(enience)i(function)f(for)f
+621 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242
+621 V 25 w(displa)n(y)p 440 621 V 27 w(matc)n(h)p 621
+621 V 25 w(list)k Fe(\()p Fs(char)15 b(**matches,)e(int)i(len,)g(int)g
+(max)p Fe(\))195 676 y Ft(A)i(con)o(v)o(enience)i(function)f(for)f
(displa)o(ying)i(a)e(list)h(of)e(strings)h(in)i(columnar)e(format)f(on)
-h(Read-)195 571 y(line's)h(output)f(stream.)23 b Fs(matches)16
+h(Read-)195 731 y(line's)h(output)f(stream.)23 b Fs(matches)16
b Ft(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h
-(as)f(a)h(list)g(of)195 626 y(completion)c(matc)o(hes.)19
+(as)f(a)h(list)g(of)195 786 y(completion)c(matc)o(hes.)19
b Fs(len)11 b Ft(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h
Fs(matches)p Ft(,)f(and)g Fs(max)g Ft(is)g(the)h(length)f(of)195
-681 y(the)h(longest)g(string)g(in)h Fs(matches)p Ft(.)19
+841 y(the)h(longest)g(string)g(in)h Fs(matches)p Ft(.)19
b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Fs
-(print-completions-)195 736 y(horizontally)k Ft(to)i(select)h(ho)o(w)e
+(print-completions-)195 895 y(horizontally)k Ft(to)i(select)h(ho)o(w)e
(the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d
-([Readline)195 790 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137
-892 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f
+([Readline)195 950 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137
+1034 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f
(de\014ned)i(in)g Fs(chardefs.h)p Ft(.)k(Applications)d(should)75
-946 y(refrain)d(from)g(using)h(them.)1675 1048 y([F)l(unction])-1800
-b Fg(int)p 177 1048 V 45 w Ff(rl)p 241 1048 V 25 w(upp)r(ercase)p
-516 1048 V 25 w(p)22 b Fe(\()p Fs(int)15 b(c)p Fe(\))195
-1102 y Ft(Return)g(1)g(if)g Fi(c)j Ft(is)e(an)f(upp)q(ercase)i(alphab)q
-(etic)f(c)o(haracter.)1675 1204 y([F)l(unction])-1800
-b Fg(int)p 177 1204 V 45 w Ff(rl)p 241 1204 V 25 w(lo)n(w)n(ercase)p
-499 1204 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195
-1258 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(lo)o(w)o(ercase)g
-(alphab)q(etic)i(c)o(haracter.)1675 1360 y([F)l(unction])-1800
-b Fg(int)p 177 1360 V 45 w Ff(rl)p 241 1360 V 25 w(digit)p
-379 1360 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195
-1414 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(n)o(umeric)h(c)o
-(haracter.)1675 1516 y([F)l(unction])-1800 b Fg(int)p
-177 1516 V 45 w Ff(rl)p 241 1516 V 25 w(to)p 317 1516
+1089 y(refrain)d(from)g(using)h(them.)1675 1174 y([F)l(unction])-1800
+b Fg(int)p 177 1174 V 45 w Ff(rl)p 241 1174 V 25 w(upp)r(ercase)p
+516 1174 V 25 w(p)22 b Fe(\()p Fs(int)15 b(c)p Fe(\))195
+1228 y Ft(Return)g(1)g(if)g Fi(c)j Ft(is)e(an)f(upp)q(ercase)i(alphab)q
+(etic)f(c)o(haracter.)1675 1313 y([F)l(unction])-1800
+b Fg(int)p 177 1313 V 45 w Ff(rl)p 241 1313 V 25 w(lo)n(w)n(ercase)p
+499 1313 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195
+1367 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(lo)o(w)o(ercase)g
+(alphab)q(etic)i(c)o(haracter.)1675 1452 y([F)l(unction])-1800
+b Fg(int)p 177 1452 V 45 w Ff(rl)p 241 1452 V 25 w(digit)p
+379 1452 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195
+1507 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(n)o(umeric)h(c)o
+(haracter.)1675 1591 y([F)l(unction])-1800 b Fg(int)p
+177 1591 V 45 w Ff(rl)p 241 1591 V 25 w(to)p 317 1591
V 26 w(upp)r(er)21 b Fe(\()p Fs(int)15 b(c)p Fe(\))195
-1571 y Ft(If)d Fi(c)j Ft(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o
+1646 y Ft(If)d Fi(c)j Ft(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o
(haracter,)d(return)h(the)g(corresp)q(onding)h(upp)q(ercase)g(c)o
-(haracter.)1675 1672 y([F)l(unction])-1800 b Fg(int)p
-177 1672 V 45 w Ff(rl)p 241 1672 V 25 w(to)p 317 1672
+(haracter.)1675 1730 y([F)l(unction])-1800 b Fg(int)p
+177 1730 V 45 w Ff(rl)p 241 1730 V 25 w(to)p 317 1730
V 26 w(lo)n(w)n(er)24 b Fe(\()p Fs(int)14 b(c)p Fe(\))195
-1727 y Ft(If)h Fi(c)i Ft(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o
+1785 y Ft(If)h Fi(c)i Ft(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o
(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o(ercase)f(c)o
-(harac-)195 1781 y(ter.)1675 1883 y([F)l(unction])-1800
-b Fg(int)p 177 1883 V 45 w Ff(rl)p 241 1883 V 25 w(digit)p
-379 1883 V 27 w(v)m(alue)24 b Fe(\()p Fs(int)14 b(c)p
-Fe(\))195 1937 y Ft(If)h Fi(c)k Ft(is)c(a)g(n)o(um)o(b)q(er,)g(return)g
-(the)h(v)m(alue)g(it)g(represen)o(ts.)75 2059 y Fh(2.4.11)29
-b(Miscellaneous)22 b(F)-5 b(unctions)1675 2185 y Ft([F)l(unction])-1800
-b Fg(int)20 b Ff(rl)p 216 2185 V 25 w(macro)p 396 2185
+(harac-)195 1839 y(ter.)1675 1924 y([F)l(unction])-1800
+b Fg(int)p 177 1924 V 45 w Ff(rl)p 241 1924 V 25 w(digit)p
+379 1924 V 27 w(v)m(alue)24 b Fe(\()p Fs(int)14 b(c)p
+Fe(\))195 1979 y Ft(If)h Fi(c)k Ft(is)c(a)g(n)o(um)o(b)q(er,)g(return)g
+(the)h(v)m(alue)g(it)g(represen)o(ts.)75 2083 y Fh(2.4.11)29
+b(Miscellaneous)22 b(F)-5 b(unctions)1675 2202 y Ft([F)l(unction])-1800
+b Fg(int)20 b Ff(rl)p 216 2202 V 25 w(macro)p 396 2202
V 24 w(bind)j Fe(\()p Fs(const)14 b(char)h(*keyseq,)f(const)g(char)h
-(*macro,)f(Keymap)283 2240 y(map)p Fe(\))195 2295 y Ft(Bind)f(the)f(k)o
+(*macro,)f(Keymap)283 2257 y(map)p Fe(\))195 2312 y Ft(Bind)f(the)f(k)o
(ey)f(sequence)i Fi(k)o(eyseq)g Ft(to)e(in)o(v)o(ok)o(e)g(the)h(macro)f
Fi(macro)p Ft(.)18 b(The)12 b(binding)h(is)f(p)q(erformed)g(in)195
-2350 y Fi(map)p Ft(.)19 b(When)14 b Fi(k)o(eyseq)h Ft(is)f(in)o(v)o(ok)
+2367 y Fi(map)p Ft(.)19 b(When)14 b Fi(k)o(eyseq)h Ft(is)f(in)o(v)o(ok)
o(ed,)g(the)g Fi(macro)i Ft(will)f(b)q(e)f(inserted)h(in)o(to)f(the)g
-(line.)21 b(This)14 b(function)195 2404 y(is)i(deprecated;)f(use)h
+(line.)21 b(This)14 b(function)195 2421 y(is)i(deprecated;)f(use)h
Fs(rl_generic_bind\(\))d Ft(instead.)1675 2506 y([F)l(unction])-1800
b Fg(void)20 b Ff(rl)p 242 2506 V 25 w(macro)p 422 2506
V 24 w(dump)r(er)g Fe(\()p Fs(int)15 b(readable)p Fe(\))195
(for)g Fs(rl_complete_)195 259 y(internal\(\))p Ft(.)18
b(The)e(default)g(list)g(is)f(the)h(v)m(alue)g(of)f Fs
(rl_basic_word_break_chara)o(cters)p Ft(.)1685 355 y([V)l(ariable])
--1799 b Fg(const)20 b(char)g(*)f Ff(rl)p 437 355 V 26
-w(completer)p 711 355 V 25 w(quote)p 875 355 V 25 w(c)n(haracters)195
-410 y Ft(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g(used)
-h(to)e(quote)h(a)f(substring)h(of)g(the)g(line.)26 b(Completion)195
-465 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within)i
-(the)e(substring)g Fs(rl_completer_word_break_)195 519
+-1799 b Fg(rl_cpvfunc_t)21 b(*)e Ff(rl)p 496 355 V 26
+w(completion)p 796 355 V 26 w(w)n(ord)p 946 355 V 25
+w(break)p 1111 355 V 25 w(ho)r(ok)195 410 y Ft(If)d(non-zero,)g(this)g
+(is)g(the)g(address)g(of)f(a)h(function)g(to)f(call)i(when)g(Readline)g
+(is)f(deciding)i(where)195 465 y(to)f(separate)f(w)o(ords)h(for)f(w)o
+(ord)g(completion.)27 b(It)18 b(should)g(return)f(a)g(c)o(haracter)f
+(string)h(lik)o(e)h Fs(rl_)195 519 y(completer_word_break_chara)o
+(cters)13 b Ft(to)j(b)q(e)h(used)g(to)f(p)q(erform)g(the)h(curren)o(t)f
+(completion.)195 574 y(The)d(function)g(ma)o(y)e(c)o(ho)q(ose)i(to)f
+(set)g Fs(rl_completer_word_break_)o(charact)o(ers)d
+Ft(itself.)20 b(If)13 b(the)195 629 y(function)j(returns)f
+Fs(NULL)p Ft(,)f Fs(rl_completer_word_break_chara)o(cters)e
+Ft(is)k(used.)1685 725 y([V)l(ariable])-1799 b Fg(const)20
+b(char)g(*)f Ff(rl)p 437 725 V 26 w(completer)p 711 725
+V 25 w(quote)p 875 725 V 25 w(c)n(haracters)195 780 y
+Ft(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g(used)h(to)e
+(quote)h(a)f(substring)h(of)g(the)g(line.)26 b(Completion)195
+834 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within)i
+(the)e(substring)g Fs(rl_completer_word_break_)195 889
y(characters)j Ft(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g
(unless)i(they)e(also)h(app)q(ear)g(within)h(this)195
-574 y(list.)1685 670 y([V)l(ariable])-1799 b Fg(const)20
-b(char)g(*)f Ff(rl)p 437 670 V 26 w(\014lename)p 671
-670 V 24 w(quote)p 834 670 V 26 w(c)n(haracters)195 725
-y Ft(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g(\014lename)h
-(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f(they)195
-780 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21
+944 y(list.)1685 1040 y([V)l(ariable])-1799 b Fg(const)20
+b(char)g(*)f Ff(rl)p 437 1040 V 26 w(\014lename)p 671
+1040 V 24 w(quote)p 834 1040 V 26 w(c)n(haracters)195
+1095 y Ft(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g
+(\014lename)h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f
+(they)195 1149 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21
b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1685
-875 y([V)l(ariable])-1799 b Fg(const)20 b(char)g(*)f
-Ff(rl)p 437 875 V 26 w(sp)r(ecial)p 629 875 V 26 w(pre\014xes)195
-930 y Ft(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f
+1245 y([V)l(ariable])-1799 b Fg(const)20 b(char)g(*)f
+Ff(rl)p 437 1245 V 26 w(sp)r(ecial)p 629 1245 V 26 w(pre\014xes)195
+1300 y Ft(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f
(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h
-Fi(text)f Ft(when)195 985 y(it)f(is)f(passed)h(to)f(the)g(completion)h
+Fi(text)f Ft(when)195 1355 y(it)f(is)f(passed)h(to)f(the)g(completion)h
(function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine)
-h(what)195 1040 y(kind)i(of)e(completing)i(to)e(do.)19
+h(what)195 1410 y(kind)i(of)e(completing)i(to)e(do.)19
b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e
-Fs(")p Ft($)p Fs(@")g Ft(so)g(that)g(it)h(can)195 1095
+Fs(")p Ft($)p Fs(@")g Ft(so)g(that)g(it)h(can)195 1465
y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1685
-1191 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216
-1191 V 25 w(completion)p 515 1191 V 26 w(query)p 683
-1191 V 25 w(items)195 1245 y Ft(Up)e(to)g(this)g(man)o(y)g(items)g
+1560 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216
+1560 V 25 w(completion)p 515 1560 V 26 w(query)p 683
+1560 V 25 w(items)195 1615 y Ft(Up)e(to)g(this)g(man)o(y)g(items)g
(will)i(b)q(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)e(a)h(p)q
-(ossible-completions)j(call.)195 1300 y(After)14 b(that,)f(w)o(e)h(ask)
+(ossible-completions)j(call.)195 1670 y(After)14 b(that,)f(w)o(e)h(ask)
g(the)h(user)f(if)h(she)f(is)h(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h
-(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 1355
-y(is)h(100.)1685 1451 y([V)l(ariable])-1799 b Fg(int)20
-b Ff(rl)p 216 1451 V 25 w(completion)p 515 1451 V 26
-w(app)r(end)p 725 1451 V 24 w(c)n(haracter)195 1506 y
+(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 1725
+y(is)h(100.)1685 1821 y([V)l(ariable])-1799 b Fg(int)20
+b Ff(rl)p 216 1821 V 25 w(completion)p 515 1821 V 26
+w(app)r(end)p 725 1821 V 24 w(c)n(haracter)195 1875 y
Ft(When)d(a)f(single)i(completion)g(alternativ)o(e)f(matc)o(hes)f(at)g
-(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 1560
+(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 1930
y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g(inserted)i
(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g(c)o
-(haracter)195 1615 y(\(`)j('\).)42 b(Setting)23 b(this)g(to)f(the)h(n)o
+(haracter)195 1985 y(\(`)j('\).)42 b(Setting)23 b(this)g(to)f(the)h(n)o
(ull)h(c)o(haracter)e(\(`)p Fs(\\0)p Ft('\))f(prev)o(en)o(ts)i(an)o
-(ything)f(b)q(eing)i(app)q(ended)195 1670 y(automatically)l(.)32
+(ything)f(b)q(eing)i(app)q(ended)195 2040 y(automatically)l(.)32
b(This)19 b(can)g(b)q(e)h(c)o(hanged)f(in)g(application-sp)q(eci)q
-(\014c)j(completion)e(functions)g(to)195 1725 y(pro)o(vide)g(the)g
+(\014c)j(completion)e(functions)g(to)195 2095 y(pro)o(vide)g(the)g
(\\most)f(sensible)j(w)o(ord)d(separator)g(c)o(haracter")g(according)h
-(to)f(an)h(application-)195 1780 y(sp)q(eci\014c)d(command)e(line)i
-(syn)o(tax)d(sp)q(eci\014cation.)1685 1875 y([V)l(ariable])-1799
-b Fg(int)20 b Ff(rl)p 216 1875 V 25 w(completion)p 515
-1875 V 26 w(suppress)p 756 1875 V 23 w(app)r(end)195
-1930 y Ft(If)d(non-zero,)g Fi(rl)p 474 1930 14 2 v 20
-w(completion)p 710 1930 V 21 w(app)q(end)p 875 1930 V
+(to)f(an)h(application-)195 2149 y(sp)q(eci\014c)d(command)e(line)i
+(syn)o(tax)d(sp)q(eci\014cation.)1685 2245 y([V)l(ariable])-1799
+b Fg(int)20 b Ff(rl)p 216 2245 V 25 w(completion)p 515
+2245 V 26 w(suppress)p 756 2245 V 23 w(app)r(end)195
+2300 y Ft(If)d(non-zero,)g Fi(rl)p 474 2300 14 2 v 20
+w(completion)p 710 2300 V 21 w(app)q(end)p 875 2300 V
22 w(c)o(haracter)i Ft(is)e(not)f(app)q(ended)i(to)e(matc)o(hes)h(at)f
-(the)g(end)195 1985 y(of)d(the)h(command)g(line,)h(as)f(describ)q(ed)h
+(the)g(end)195 2355 y(of)d(the)h(command)g(line,)h(as)f(describ)q(ed)h
(ab)q(o)o(v)o(e.)k(It)14 b(is)h(set)e(to)g(0)h(b)q(efore)g(an)o(y)f
-(application-sp)q(eci)q(\014c)195 2040 y(completion)j(function)g(is)g
+(application-sp)q(eci)q(\014c)195 2410 y(completion)j(function)g(is)g
(called,)g(and)g(ma)o(y)e(only)i(b)q(e)g(c)o(hanged)f(within)i(suc)o(h)
-e(a)g(function.)1685 2136 y([V)l(ariable])-1799 b Fg(int)20
-b Ff(rl)p 216 2136 18 3 v 25 w(completion)p 515 2136
-V 26 w(mark)p 672 2136 V 24 w(symlink)p 890 2136 V 25
-w(dirs)195 2191 y Ft(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e(app)q
-(ended)i(to)d(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q(olic)j
-(links)195 2245 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f(the)i
-(v)m(alue)g(of)f(the)g(user-settable)g Fi(mark-directories)j
-Ft(v)m(ariable.)195 2300 y(This)f(v)m(ariable)h(exists)f(so)g(that)f
-(application-sp)q(eci\014c)k(completion)e(functions)f(can)g(o)o(v)o
-(erride)g(the)195 2355 y(user's)21 b(global)h(preference)g(\(set)e(via)
-i(the)f Fi(mark-symlink)o(ed-directories)k Ft(Readline)e(v)m(ariable\))
-195 2410 y(if)c(appropriate.)31 b(This)19 b(v)m(ariable)h(is)g(set)e
-(to)g(the)h(user's)g(preference)h(b)q(efore)f(an)o(y)f(application-)195
-2465 y(sp)q(eci\014c)g(completion)f(function)f(is)h(called,)g(so)e
-(unless)i(that)e(function)i(mo)q(di\014es)g(the)f(v)m(alue,)h(the)195
-2519 y(user's)e(preferences)h(are)f(honored.)1685 2615
-y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 2615
-V 25 w(ignore)p 396 2615 V 25 w(completion)p 695 2615
-V 26 w(duplicates)195 2670 y Ft(If)15 b(non-zero,)h(then)f(duplicates)i
-(in)f(the)f(matc)o(hes)g(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f
-(1.)p eop
+e(a)g(function.)1685 2506 y([V)l(ariable])-1799 b Fg(int)20
+b Ff(rl)p 216 2506 18 3 v 25 w(completion)p 515 2506
+V 26 w(quote)p 680 2506 V 25 w(c)n(haracter)195 2560
+y Ft(When)e(Readline)i(is)e(completing)i(quoted)e(text,)g(as)f
+(delimited)k(b)o(y)d(one)g(of)g(the)g(c)o(haracters)f(in)195
+2615 y Fi(rl)p 228 2615 14 2 v 20 w(completer)p 442 2615
+V 21 w(quote)p 573 2615 V 20 w(c)o(haracters)p Ft(,)i(it)h(sets)f(this)
+h(v)m(ariable)h(to)e(the)h(quoting)f(c)o(haracter)g(found.)195
+2670 y(This)d(is)f(set)g(b)q(efore)h(an)o(y)f(application-sp)q
+(eci\014c)k(completion)d(function)g(is)g(called.)p eop
%%Page: 46 50
46 49 bop 75 -58 a Ft(46)1299 b(GNU)15 b(Readline)h(Library)1685
149 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 149
-18 3 v 25 w(\014lename)p 449 149 V 25 w(completion)p
-748 149 V 26 w(desired)195 204 y Ft(Non-zero)c(means)g(that)f(the)h
+18 3 v 25 w(completion)p 515 149 V 26 w(suppress)p 756
+149 V 23 w(quote)195 204 y Ft(If)c(non-zero,)h(Readline)g(do)q(es)g
+(not)e(app)q(end)j(a)d(matc)o(hing)i(quote)f(c)o(haracter)f(when)i(p)q
+(erforming)195 259 y(completion)c(on)f(a)f(quoted)h(string.)19
+b(It)11 b(is)i(set)e(to)g(0)h(b)q(efore)g(an)o(y)f(application-sp)q
+(eci)q(\014c)k(completion)195 314 y(function)h(is)g(called,)g(and)g(ma)
+o(y)e(only)i(b)q(e)g(c)o(hanged)f(within)i(suc)o(h)e(a)g(function.)1685
+400 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 400
+V 25 w(completion)p 515 400 V 26 w(found)p 684 400 V
+24 w(quote)195 455 y Ft(When)c(Readline)h(is)g(completing)g(quoted)e
+(text,)h(it)g(sets)f(this)h(v)m(ariable)i(to)d(a)g(non-zero)h(v)m(alue)
+h(if)195 510 y(the)11 b(w)o(ord)e(b)q(eing)j(completed)g(con)o(tains)e
+(or)h(is)g(delimited)h(b)o(y)f(an)o(y)f(quoting)h(c)o(haracters,)f
+(including)195 564 y(bac)o(kslashes.)20 b(This)c(is)g(set)f(b)q(efore)g
+(an)o(y)g(application-sp)q(eci\014)q(c)j(completion)e(function)g(is)g
+(called.)1685 650 y([V)l(ariable])-1799 b Fg(int)20 b
+Ff(rl)p 216 650 V 25 w(completion)p 515 650 V 26 w(mark)p
+672 650 V 24 w(symlink)p 890 650 V 25 w(dirs)195 705
+y Ft(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e(app)q(ended)i(to)d
+(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q(olic)j(links)195
+760 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f(the)i(v)m(alue)g
+(of)f(the)g(user-settable)g Fi(mark-directories)j Ft(v)m(ariable.)195
+815 y(This)f(v)m(ariable)h(exists)f(so)g(that)f(application-sp)q
+(eci\014c)k(completion)e(functions)f(can)g(o)o(v)o(erride)g(the)195
+870 y(user's)21 b(global)h(preference)g(\(set)e(via)i(the)f
+Fi(mark-symlink)o(ed-directories)k Ft(Readline)e(v)m(ariable\))195
+924 y(if)c(appropriate.)31 b(This)19 b(v)m(ariable)h(is)g(set)e(to)g
+(the)h(user's)g(preference)h(b)q(efore)f(an)o(y)f(application-)195
+979 y(sp)q(eci\014c)g(completion)f(function)f(is)h(called,)g(so)e
+(unless)i(that)e(function)i(mo)q(di\014es)g(the)f(v)m(alue,)h(the)195
+1034 y(user's)e(preferences)h(are)f(honored.)1685 1120
+y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 1120
+V 25 w(ignore)p 396 1120 V 25 w(completion)p 695 1120
+V 26 w(duplicates)195 1175 y Ft(If)15 b(non-zero,)h(then)f(duplicates)i
+(in)f(the)f(matc)o(hes)g(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f
+(1.)1685 1261 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p
+216 1261 V 25 w(\014lename)p 449 1261 V 25 w(completion)p
+748 1261 V 26 w(desired)195 1316 y Ft(Non-zero)c(means)g(that)f(the)h
(results)g(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g
-(\014lenames.)23 b(This)195 259 y(is)d Fn(always)k Ft(zero)c(when)g
+(\014lenames.)23 b(This)195 1371 y(is)d Fn(always)k Ft(zero)c(when)g
(completion)h(is)g(attempted,)f(and)g(can)g(only)h(b)q(e)g(c)o(hanged)f
-(within)h(an)195 314 y(application-sp)q(eci\014)q(c)h(completion)f
+(within)h(an)195 1425 y(application-sp)q(eci\014)q(c)h(completion)f
(function.)35 b(If)20 b(it)f(is)i(set)e(to)g(a)h(non-zero)g(v)m(alue)h
-(b)o(y)e(suc)o(h)h(a)195 369 y(function,)12 b(directory)g(names)f(ha)o
+(b)o(y)e(suc)o(h)h(a)195 1480 y(function,)12 b(directory)g(names)f(ha)o
(v)o(e)g(a)f(slash)i(app)q(ended)h(and)e(Readline)h(attempts)f(to)f
-(quote)h(com-)195 423 y(pleted)19 b(\014lenames)f(if)g(they)g(con)o
+(quote)h(com-)195 1535 y(pleted)19 b(\014lenames)f(if)g(they)g(con)o
(tain)g(an)o(y)f(c)o(haracters)f(in)j Fs(rl_filename_quote_charact)o
-(ers)195 478 y Ft(and)c Fs(rl_filename_quoting_desired)d
-Ft(is)k(set)f(to)f(a)h(non-zero)g(v)m(alue.)1685 570
-y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 570 V
-25 w(\014lename)p 449 570 V 25 w(quoting)p 663 570 V
-26 w(desired)195 625 y Ft(Non-zero)14 b(means)g(that)f(the)i(results)f
-(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g
-(quotes)195 680 y(\(or)20 b(an)i(application-sp)q(eci\014c)i(quoting)e
-(mec)o(hanism\))f(if)h(the)f(completed)i(\014lename)f(con)o(tains)195
-735 y(an)o(y)13 b(c)o(haracters)h(in)g Fs(rl_filename_quote_chars)p
-Ft(.)i(This)f(is)f Fn(always)k Ft(non-zero)c(when)g(comple-)195
-790 y(tion)g(is)g(attempted,)g(and)g(can)g(only)g(b)q(e)g(c)o(hanged)h
-(within)g(an)e(application-sp)q(eci)q(\014c)k(completion)195
-844 y(function.)i(The)11 b(quoting)g(is)g(e\013ected)f(via)h(a)f(call)i
-(to)e(the)h(function)g(p)q(oin)o(ted)g(to)f(b)o(y)h Fs(rl_filename_)195
-899 y(quoting_function)p Ft(.)1685 991 y([V)l(ariable])-1799
-b Fg(int)20 b Ff(rl)p 216 991 V 25 w(attempted)p 500
-991 V 25 w(completion)p 799 991 V 26 w(o)n(v)n(er)195
-1046 y Ft(If)47 b(an)g(application-sp)q(eci\014)q(c)j(completion)e
-(function)g(assigned)f(to)g Fs(rl_attempted_)195 1101
-y(completion_function)24 b Ft(sets)i(this)h(v)m(ariable)h(to)e(a)g
-(non-zero)h(v)m(alue,)j(Readline)e(will)g(not)195 1156
-y(p)q(erform)15 b(its)g(default)g(\014lename)h(completion)g(ev)o(en)f
-(if)g(the)g(application's)h(completion)g(function)195
-1210 y(returns)f(no)g(matc)o(hes.)20 b(It)15 b(should)h(b)q(e)g(set)f
-(only)h(b)o(y)f(an)g(application's)h(completion)h(function.)1685
-1303 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216
-1303 V 25 w(completion)p 515 1303 V 26 w(t)n(yp)r(e)195
-1357 y Ft(Set)e(to)e(a)i(c)o(haracter)f(describing)i(the)e(t)o(yp)q(e)h
-(of)f(completion)i(Readline)g(is)f(curren)o(tly)g(attempt-)195
-1412 y(ing;)g(see)f(the)f(description)i(of)f Fs
-(rl_complete_internal\(\))c Ft(\(see)k(Section)h(2.6.2)d([Completion)
-195 1467 y(F)l(unctions],)k(page)f(42\))g(for)f(the)i(list)g(of)f(c)o
-(haracters.)28 b(This)19 b(is)g(set)f(to)g(the)g(appropriate)h(v)m
-(alue)195 1522 y(b)q(efore)d(an)o(y)g(application-sp)q(eci\014c)j
-(completion)e(function)g(is)f(called,)h(allo)o(wing)g(suc)o(h)f
-(functions)195 1577 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g(as)
-g Fs(rl_complete\(\))p Ft(.)1685 1669 y([V)l(ariable])-1799
-b Fg(int)20 b Ff(rl)p 216 1669 V 25 w(inhibit)p 404 1669
-V 28 w(completion)195 1724 y Ft(If)14 b(this)h(v)m(ariable)g(is)g
-(non-zero,)f(completion)i(is)e(inhibited.)22 b(The)15
-b(completion)g(c)o(haracter)e(will)j(b)q(e)195 1778 y(inserted)g(as)f
-(an)o(y)g(other)g(b)q(ound)h(to)e Fs(self-insert)p Ft(.)75
-1890 y Fh(2.6.4)30 b(A)21 b(Short)f(Completion)g(Example)137
-2012 y Ft(Here)11 b(is)f(a)g(small)h(application)h(demonstrating)e(the)
-g(use)h(of)e(the)i(GNU)f(Readline)h(library)l(.)19 b(It)11
-b(is)f(called)75 2067 y Fs(fileman)p Ft(,)17 b(and)h(the)g(source)g(co)
-q(de)g(resides)h(in)f(`)p Fs(examples/fileman.c)p Ft('.)25
-b(This)18 b(sample)g(application)75 2122 y(pro)o(vides)c(completion)g
-(of)e(command)h(names,)g(line)i(editing)g(features,)d(and)i(access)f
-(to)f(the)h(history)h(list.)p eop
+(ers)195 1590 y Ft(and)c Fs(rl_filename_quoting_desired)d
+Ft(is)k(set)f(to)f(a)h(non-zero)g(v)m(alue.)1685 1676
+y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 1676
+V 25 w(\014lename)p 449 1676 V 25 w(quoting)p 663 1676
+V 26 w(desired)195 1731 y Ft(Non-zero)14 b(means)g(that)f(the)i
+(results)f(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h
+(double)g(quotes)195 1785 y(\(or)20 b(an)i(application-sp)q(eci\014c)i
+(quoting)e(mec)o(hanism\))f(if)h(the)f(completed)i(\014lename)f(con)o
+(tains)195 1840 y(an)o(y)13 b(c)o(haracters)h(in)g Fs
+(rl_filename_quote_chars)p Ft(.)i(This)f(is)f Fn(always)k
+Ft(non-zero)c(when)g(comple-)195 1895 y(tion)g(is)g(attempted,)g(and)g
+(can)g(only)g(b)q(e)g(c)o(hanged)h(within)g(an)e(application-sp)q(eci)q
+(\014c)k(completion)195 1950 y(function.)i(The)11 b(quoting)g(is)g
+(e\013ected)f(via)h(a)f(call)i(to)e(the)h(function)g(p)q(oin)o(ted)g
+(to)f(b)o(y)h Fs(rl_filename_)195 2005 y(quoting_function)p
+Ft(.)1685 2091 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p
+216 2091 V 25 w(attempted)p 500 2091 V 25 w(completion)p
+799 2091 V 26 w(o)n(v)n(er)195 2146 y Ft(If)47 b(an)g(application-sp)q
+(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g
+Fs(rl_attempted_)195 2200 y(completion_function)24 b
+Ft(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j
+(Readline)e(will)g(not)195 2255 y(p)q(erform)15 b(its)g(default)g
+(\014lename)h(completion)g(ev)o(en)f(if)g(the)g(application's)h
+(completion)g(function)195 2310 y(returns)f(no)g(matc)o(hes.)20
+b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h
+(completion)h(function.)1685 2396 y([V)l(ariable])-1799
+b Fg(int)20 b Ff(rl)p 216 2396 V 25 w(completion)p 515
+2396 V 26 w(t)n(yp)r(e)195 2451 y Ft(Set)e(to)e(a)i(c)o(haracter)f
+(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)g(is)f
+(curren)o(tly)g(attempt-)195 2506 y(ing;)g(see)f(the)f(description)i
+(of)f Fs(rl_complete_internal\(\))c Ft(\(see)k(Section)h(2.6.2)d
+([Completion)195 2560 y(F)l(unctions],)k(page)f(42\))g(for)f(the)i
+(list)g(of)f(c)o(haracters.)28 b(This)19 b(is)g(set)f(to)g(the)g
+(appropriate)h(v)m(alue)195 2615 y(b)q(efore)d(an)o(y)g(application-sp)
+q(eci\014c)j(completion)e(function)g(is)f(called,)h(allo)o(wing)g(suc)o
+(h)f(functions)195 2670 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g
+(as)g Fs(rl_complete\(\))p Ft(.)p eop
%%Page: 47 51
47 50 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(47)195 149 y Fd(/*)19 b(fileman.c)d(--)j(A)g(tiny)f
-(applicatio)o(n)e(which)i(demonstrat)o(es)e(how)j(to)f(use)h(the)254
-193 y(GNU)f(Readline)f(library.)36 b(This)18 b(applicatio)o(n)e
-(interactive)o(ly)g(allows)h(users)254 237 y(to)i(manipulat)o(e)d
-(files)i(and)h(their)e(modes.)h(*/)195 324 y(#include)f(<stdio.h)o(>)
-195 367 y(#include)g(<sys/typ)o(es.)o(h>)195 411 y(#include)g(<sys/fil)
-o(e.h)o(>)195 455 y(#include)g(<sys/sta)o(t.h)o(>)195
-498 y(#include)g(<sys/err)o(no.)o(h>)195 585 y(#include)g(<readlin)o
-(e/r)o(ea)o(dli)o(ne.)o(h>)195 629 y(#include)g(<readlin)o(e/h)o(is)o
-(tor)o(y.h)o(>)195 716 y(extern)g(char)h(*xmalloc)f(\(\);)195
-803 y(/*)i(The)f(names)g(of)h(functions)d(that)i(actually)f(do)h(the)h
-(manipulat)o(ion)o(.)d(*/)195 847 y(int)i(com_list)f(__P\(\(char)f
-(*\)\);)195 890 y(int)i(com_view)f(__P\(\(char)f(*\)\);)195
-934 y(int)i(com_rename)e(__P\(\(char)g(*\)\);)195 978
-y(int)i(com_stat)f(__P\(\(char)f(*\)\);)195 1021 y(int)i(com_pwd)f
-(__P\(\(char)f(*\)\);)195 1065 y(int)i(com_delete)e(__P\(\(char)g
-(*\)\);)195 1108 y(int)i(com_help)f(__P\(\(char)f(*\)\);)195
-1152 y(int)i(com_cd)g(__P\(\(char)e(*\)\);)195 1196 y(int)i(com_quit)f
-(__P\(\(char)f(*\)\);)195 1283 y(/*)j(A)g(structure)d(which)i(contains)
-e(information)g(on)j(the)f(commands)f(this)h(program)254
-1326 y(can)g(understand)o(.)f(*/)195 1413 y(typedef)g(struct)g({)234
-1457 y(char)h(*name;)g(/*)g(User)g(printable)f(name)h(of)h(the)f
-(function.)e(*/)234 1501 y(rl_icpfunc)o(_t)g(*func;)h(/*)i(Function)e
-(to)i(call)f(to)h(do)f(the)h(job.)f(*/)234 1544 y(char)g(*doc;)g(/*)h
-(Documenta)o(tio)o(n)d(for)j(this)f(function.)36 b(*/)195
-1588 y(})19 b(COMMAND;)195 1675 y(COMMAND)e(commands[)o(])g(=)i({)234
-1719 y({)g("cd",)f(com_cd,)f("Change)g(to)i(directory)d(DIR")i(},)234
-1762 y({)h("delete",)e(com_dele)o(te,)f("Delete)h(FILE")h(},)234
-1806 y({)h("help",)e(com_help,)f("Display)h(this)h(text")g(},)234
-1849 y({)h("?",)g(com_help)o(,)e("Synonym)f(for)j(`help'")e(},)234
-1893 y({)i("list",)e(com_list,)f("List)i(files)g(in)h(DIR")f(},)234
+(Readline)843 b(47)1685 149 y([V)l(ariable])-1799 b Fg(int)20
+b Ff(rl)p 216 149 18 3 v 25 w(inhibit)p 404 149 V 28
+w(completion)195 204 y Ft(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f
+(completion)i(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e
+(will)j(b)q(e)195 259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)
+e Fs(self-insert)p Ft(.)75 371 y Fh(2.6.4)30 b(A)21 b(Short)f
+(Completion)g(Example)137 493 y Ft(Here)11 b(is)f(a)g(small)h
+(application)h(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)h
+(library)l(.)19 b(It)11 b(is)f(called)75 548 y Fs(fileman)p
+Ft(,)17 b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p
+Fs(examples/fileman.c)p Ft('.)25 b(This)18 b(sample)g(application)75
+603 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i
+(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p
+eop
+%%Page: 48 52
+48 51 bop 75 -58 a Ft(48)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Fd(/*)j(fileman.c)d(--)j(A)g(tiny)f(applicatio)o(n)e(which)i
+(demonstrat)o(es)e(how)j(to)f(use)h(the)254 193 y(GNU)f(Readline)f
+(library.)36 b(This)18 b(applicatio)o(n)e(interactive)o(ly)g(allows)h
+(users)254 237 y(to)i(manipulat)o(e)d(files)i(and)h(their)e(modes.)h
+(*/)195 324 y(#include)f(<stdio.h)o(>)195 367 y(#include)g(<sys/typ)o
+(es.)o(h>)195 411 y(#include)g(<sys/fil)o(e.h)o(>)195
+455 y(#include)g(<sys/sta)o(t.h)o(>)195 498 y(#include)g(<sys/err)o
+(no.)o(h>)195 585 y(#include)g(<readlin)o(e/r)o(ea)o(dli)o(ne.)o(h>)195
+629 y(#include)g(<readlin)o(e/h)o(is)o(tor)o(y.h)o(>)195
+716 y(extern)g(char)h(*xmalloc)f(\(\);)195 803 y(/*)i(The)f(names)g(of)
+h(functions)d(that)i(actually)f(do)h(the)h(manipulat)o(ion)o(.)d(*/)195
+847 y(int)i(com_list)f(__P\(\(char)f(*\)\);)195 890 y(int)i(com_view)f
+(__P\(\(char)f(*\)\);)195 934 y(int)i(com_rename)e(__P\(\(char)g
+(*\)\);)195 978 y(int)i(com_stat)f(__P\(\(char)f(*\)\);)195
+1021 y(int)i(com_pwd)f(__P\(\(char)f(*\)\);)195 1065
+y(int)i(com_delete)e(__P\(\(char)g(*\)\);)195 1108 y(int)i(com_help)f
+(__P\(\(char)f(*\)\);)195 1152 y(int)i(com_cd)g(__P\(\(char)e(*\)\);)
+195 1196 y(int)i(com_quit)f(__P\(\(char)f(*\)\);)195
+1283 y(/*)j(A)g(structure)d(which)i(contains)e(information)g(on)j(the)f
+(commands)f(this)h(program)254 1326 y(can)g(understand)o(.)f(*/)195
+1413 y(typedef)g(struct)g({)234 1457 y(char)h(*name;)g(/*)g(User)g
+(printable)f(name)h(of)h(the)f(function.)e(*/)234 1501
+y(rl_icpfunc)o(_t)g(*func;)h(/*)i(Function)e(to)i(call)f(to)h(do)f(the)
+h(job.)f(*/)234 1544 y(char)g(*doc;)g(/*)h(Documenta)o(tio)o(n)d(for)j
+(this)f(function.)36 b(*/)195 1588 y(})19 b(COMMAND;)195
+1675 y(COMMAND)e(commands[)o(])g(=)i({)234 1719 y({)g("cd",)f(com_cd,)f
+("Change)g(to)i(directory)d(DIR")i(},)234 1762 y({)h("delete",)e
+(com_dele)o(te,)f("Delete)h(FILE")h(},)234 1806 y({)h("help",)e
+(com_help,)f("Display)h(this)h(text")g(},)234 1849 y({)h("?",)g
+(com_help)o(,)e("Synonym)f(for)j(`help'")e(},)234 1893
+y({)i("list",)e(com_list,)f("List)i(files)g(in)h(DIR")f(},)234
1936 y({)h("ls",)f(com_list,)e("Synonym)h(for)h(`list'")f(},)234
1980 y({)i("pwd",)f(com_pwd,)e("Print)i(the)g(current)f(working)g
(directory)o(")g(},)234 2024 y({)i("quit",)e(com_quit,)f("Quit)i(using)
(argv[0].)f(*/)195 2547 y(char)h(*progname;)195 2634
y(/*)h(When)f(non-zero,)e(this)i(means)g(the)g(user)g(is)h(done)f
(using)g(this)g(program.)f(*/)p eop
-%%Page: 48 52
-48 51 bop 75 -58 a Ft(48)1299 b(GNU)15 b(Readline)h(Library)195
-149 y Fd(int)i(done;)195 237 y(char)g(*)195 280 y(dupstr)f(\(s\))293
-324 y(int)i(s;)195 367 y({)234 411 y(char)f(*r;)234 498
-y(r)h(=)h(xmalloc)d(\(strlen)f(\(s\))j(+)g(1\);)234 542
-y(strcpy)f(\(r,)g(s\);)234 585 y(return)g(\(r\);)195
-629 y(})195 716 y(main)g(\(argc,)f(argv\))293 760 y(int)i(argc;)293
-803 y(char)f(**argv;)195 847 y({)234 890 y(char)g(*line,)g(*s;)234
-978 y(progname)f(=)i(argv[0];)234 1065 y(initialize)o(_re)o(ad)o(lin)o
-(e)d(\(\);)j(/*)g(Bind)f(our)g(completer.)e(*/)234 1152
-y(/*)j(Loop)f(reading)f(and)h(executing)f(lines)g(until)h(the)g(user)h
-(quits.)e(*/)234 1196 y(for)i(\()g(;)g(done)f(==)h(0;)g(\))273
-1239 y({)313 1283 y(line)f(=)h(readline)d(\("FileMan:)g("\);)313
-1370 y(if)j(\(!line\))352 1413 y(break;)313 1501 y(/*)g(Remove)e
-(leading)g(and)h(trailing)f(whitespac)o(e)f(from)j(the)f(line.)372
-1544 y(Then,)f(if)i(there)f(is)h(anything)d(left,)i(add)g(it)h(to)g
-(the)f(history)f(list)372 1588 y(and)h(execute)f(it.)h(*/)313
-1631 y(s)h(=)g(stripwhite)d(\(line\);)313 1719 y(if)j(\(*s\))352
-1762 y({)391 1806 y(add_histor)o(y)d(\(s\);)391 1849
-y(execute_li)o(ne)g(\(s\);)352 1893 y(})313 1980 y(free)i(\(line\);)273
-2024 y(})234 2067 y(exit)g(\(0\);)195 2111 y(})195 2198
-y(/*)h(Execute)e(a)i(command)e(line.)h(*/)195 2242 y(int)195
-2285 y(execute_li)o(ne)e(\(line\))293 2329 y(char)i(*line;)195
-2372 y({)234 2416 y(register)f(int)h(i;)234 2460 y(COMMAND)f(*command;)
-234 2503 y(char)h(*word;)234 2590 y(/*)h(Isolate)e(the)h(command)f
-(word.)h(*/)234 2634 y(i)h(=)h(0;)p eop
%%Page: 49 53
49 52 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(49)234 149 y Fd(while)18 b(\(line[i])e(&&)j(whitespace)
-d(\(line[i]\)\))273 193 y(i++;)234 237 y(word)i(=)i(line)e(+)h(i;)234
-324 y(while)f(\(line[i])e(&&)j(!whitespac)o(e)e(\(line[i]\))o(\))273
+(Readline)843 b(49)195 149 y Fd(int)18 b(done;)195 237
+y(char)g(*)195 280 y(dupstr)f(\(s\))293 324 y(int)i(s;)195
+367 y({)234 411 y(char)f(*r;)234 498 y(r)h(=)h(xmalloc)d(\(strlen)f
+(\(s\))j(+)g(1\);)234 542 y(strcpy)f(\(r,)g(s\);)234
+585 y(return)g(\(r\);)195 629 y(})195 716 y(main)g(\(argc,)f(argv\))293
+760 y(int)i(argc;)293 803 y(char)f(**argv;)195 847 y({)234
+890 y(char)g(*line,)g(*s;)234 978 y(progname)f(=)i(argv[0];)234
+1065 y(initialize)o(_re)o(ad)o(lin)o(e)d(\(\);)j(/*)g(Bind)f(our)g
+(completer.)e(*/)234 1152 y(/*)j(Loop)f(reading)f(and)h(executing)f
+(lines)g(until)h(the)g(user)h(quits.)e(*/)234 1196 y(for)i(\()g(;)g
+(done)f(==)h(0;)g(\))273 1239 y({)313 1283 y(line)f(=)h(readline)d
+(\("FileMan:)g("\);)313 1370 y(if)j(\(!line\))352 1413
+y(break;)313 1501 y(/*)g(Remove)e(leading)g(and)h(trailing)f(whitespac)
+o(e)f(from)j(the)f(line.)372 1544 y(Then,)f(if)i(there)f(is)h(anything)
+d(left,)i(add)g(it)h(to)g(the)f(history)f(list)372 1588
+y(and)h(execute)f(it.)h(*/)313 1631 y(s)h(=)g(stripwhite)d(\(line\);)
+313 1719 y(if)j(\(*s\))352 1762 y({)391 1806 y(add_histor)o(y)d(\(s\);)
+391 1849 y(execute_li)o(ne)g(\(s\);)352 1893 y(})313
+1980 y(free)i(\(line\);)273 2024 y(})234 2067 y(exit)g(\(0\);)195
+2111 y(})195 2198 y(/*)h(Execute)e(a)i(command)e(line.)h(*/)195
+2242 y(int)195 2285 y(execute_li)o(ne)e(\(line\))293
+2329 y(char)i(*line;)195 2372 y({)234 2416 y(register)f(int)h(i;)234
+2460 y(COMMAND)f(*command;)234 2503 y(char)h(*word;)234
+2590 y(/*)h(Isolate)e(the)h(command)f(word.)h(*/)234
+2634 y(i)h(=)h(0;)p eop
+%%Page: 50 54
+50 53 bop 75 -58 a Ft(50)1299 b(GNU)15 b(Readline)h(Library)234
+149 y Fd(while)i(\(line[i])e(&&)j(whitespace)d(\(line[i]\)\))273
+193 y(i++;)234 237 y(word)i(=)i(line)e(+)h(i;)234 324
+y(while)f(\(line[i])e(&&)j(!whitespac)o(e)e(\(line[i]\))o(\))273
367 y(i++;)234 455 y(if)i(\(line[i]\))273 498 y(line[i++])e(=)i('\\0';)
234 585 y(command)e(=)i(find_comma)o(nd)d(\(word\);)234
672 y(if)j(\(!command\))273 716 y({)313 760 y(fprintf)e(\(stderr,)f
273 2416 y(;)234 2503 y(if)h(\(*s)g(==)f(0\))273 2547
y(return)g(\(s\);)234 2634 y(t)h(=)h(s)f(+)g(strlen)e(\(s\))i(-)g(1;)p
eop
-%%Page: 50 54
-50 53 bop 75 -58 a Ft(50)1299 b(GNU)15 b(Readline)h(Library)234
-149 y Fd(while)i(\(t)h(>)g(s)g(&&)g(whitespace)d(\(*t\)\))273
-193 y(t--;)234 237 y(*++t)i(=)i('\\0';)234 324 y(return)e(s;)195
-367 y(})195 455 y(/*)h(*********)o(***)o(**)o(***)o(**)o(***)o(***)o
-(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)
-o(***)o(***)d(*/)195 498 y(/*)1294 b(*/)195 542 y(/*)352
-b(Interface)16 b(to)j(Readline)e(Completio)o(n)311 b(*/)195
-585 y(/*)1294 b(*/)195 629 y(/*)19 b(*********)o(***)o(**)o(***)o(**)o
-(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o
-(**)o(***)o(**)o(***)o(***)d(*/)195 716 y(char)i(*command_g)o(en)o(era)
-o(to)o(r)f(__P\(\(cons)o(t)f(char)j(*,)f(int\)\);)195
-760 y(char)g(**fileman_)o(co)o(mpl)o(et)o(ion)e(__P\(\(cons)o(t)h(char)
-h(*,)h(int,)f(int\)\);)195 847 y(/*)h(Tell)f(the)g(GNU)h(Readline)d
-(library)h(how)i(to)g(complete)o(.)36 b(We)19 b(want)f(to)h(try)g(to)
-254 890 y(complete)d(on)j(command)e(names)h(if)h(this)f(is)h(the)f
-(first)g(word)g(in)h(the)f(line,)g(or)254 934 y(on)h(filenames)d(if)j
-(not.)f(*/)195 978 y(initialize)o(_r)o(ead)o(li)o(ne)e(\(\))195
-1021 y({)234 1065 y(/*)j(Allow)f(condition)o(al)e(parsing)h(of)i(the)f
-(~/.inputrc)e(file.)i(*/)234 1108 y(rl_readlin)o(e_n)o(am)o(e)f(=)i
-("FileMan")o(;)234 1196 y(/*)g(Tell)f(the)h(complete)o(r)e(that)h(we)h
-(want)f(a)h(crack)f(first.)f(*/)234 1239 y(rl_attempt)o(ed_)o(co)o(mpl)
-o(et)o(ion)o(_fu)o(nc)o(tio)o(n)f(=)k(fileman_c)o(om)o(ple)o(tio)o(n;)
-195 1283 y(})195 1370 y(/*)f(Attempt)e(to)i(complete)d(on)j(the)f
-(contents)f(of)i(TEXT.)37 b(START)18 b(and)g(END)254
-1413 y(bound)g(the)g(region)f(of)i(rl_line_bu)o(ff)o(er)d(that)i
-(contains)f(the)h(word)g(to)254 1457 y(complete.)36 b(TEXT)18
-b(is)g(the)h(word)f(to)h(complete.)36 b(We)18 b(can)h(use)f(the)h
-(entire)254 1501 y(contents)d(of)j(rl_line_bu)o(ffe)o(r)d(in)j(case)f
-(we)h(want)f(to)h(do)g(some)f(simple)254 1544 y(parsing.)36
-b(Returnthe)16 b(array)i(of)h(matches,)d(or)j(NULL)f(if)h(there)f
-(aren't)f(any.)h(*/)195 1588 y(char)g(**)195 1631 y(fileman_co)o(mp)o
-(let)o(io)o(n)f(\(text,)g(start,)g(end\))293 1675 y(const)h(char)g
-(*text;)293 1719 y(int)h(start,)e(end;)195 1762 y({)234
-1806 y(char)h(**matches;)234 1893 y(matches)f(=)i(\(char)f(**\)NULL;)
-234 1980 y(/*)h(If)g(this)f(word)g(is)h(at)g(the)f(start)g(of)h(the)f
-(line,)g(then)g(it)h(is)g(a)g(command)293 2024 y(to)g(complete.)36
+%%Page: 51 55
+51 54 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(51)234 149 y Fd(while)18 b(\(t)h(>)g(s)g(&&)g
+(whitespace)d(\(*t\)\))273 193 y(t--;)234 237 y(*++t)i(=)i('\\0';)234
+324 y(return)e(s;)195 367 y(})195 455 y(/*)h(*********)o(***)o(**)o
+(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o
+(***)o(***)o(**)o(***)o(**)o(***)o(***)d(*/)195 498 y(/*)1294
+b(*/)195 542 y(/*)352 b(Interface)16 b(to)j(Readline)e(Completio)o(n)
+311 b(*/)195 585 y(/*)1294 b(*/)195 629 y(/*)19 b(*********)o(***)o(**)
+o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o
+(***)o(***)o(**)o(***)o(**)o(***)o(***)d(*/)195 716 y(char)i
+(*command_g)o(en)o(era)o(to)o(r)f(__P\(\(cons)o(t)f(char)j(*,)f
+(int\)\);)195 760 y(char)g(**fileman_)o(co)o(mpl)o(et)o(ion)e
+(__P\(\(cons)o(t)h(char)h(*,)h(int,)f(int\)\);)195 847
+y(/*)h(Tell)f(the)g(GNU)h(Readline)d(library)h(how)i(to)g(complete)o(.)
+36 b(We)19 b(want)f(to)h(try)g(to)254 890 y(complete)d(on)j(command)e
+(names)h(if)h(this)f(is)h(the)f(first)g(word)g(in)h(the)f(line,)g(or)
+254 934 y(on)h(filenames)d(if)j(not.)f(*/)195 978 y(initialize)o(_r)o
+(ead)o(li)o(ne)e(\(\))195 1021 y({)234 1065 y(/*)j(Allow)f(condition)o
+(al)e(parsing)h(of)i(the)f(~/.inputrc)e(file.)i(*/)234
+1108 y(rl_readlin)o(e_n)o(am)o(e)f(=)i("FileMan")o(;)234
+1196 y(/*)g(Tell)f(the)h(complete)o(r)e(that)h(we)h(want)f(a)h(crack)f
+(first.)f(*/)234 1239 y(rl_attempt)o(ed_)o(co)o(mpl)o(et)o(ion)o(_fu)o
+(nc)o(tio)o(n)f(=)k(fileman_c)o(om)o(ple)o(tio)o(n;)195
+1283 y(})195 1370 y(/*)f(Attempt)e(to)i(complete)d(on)j(the)f(contents)
+f(of)i(TEXT.)37 b(START)18 b(and)g(END)254 1413 y(bound)g(the)g(region)
+f(of)i(rl_line_bu)o(ff)o(er)d(that)i(contains)f(the)h(word)g(to)254
+1457 y(complete.)36 b(TEXT)18 b(is)g(the)h(word)f(to)h(complete.)36
+b(We)18 b(can)h(use)f(the)h(entire)254 1501 y(contents)d(of)j
+(rl_line_bu)o(ffe)o(r)d(in)j(case)f(we)h(want)f(to)h(do)g(some)f
+(simple)254 1544 y(parsing.)36 b(Returnthe)16 b(array)i(of)h(matches,)d
+(or)j(NULL)f(if)h(there)f(aren't)f(any.)h(*/)195 1588
+y(char)g(**)195 1631 y(fileman_co)o(mp)o(let)o(io)o(n)f(\(text,)g
+(start,)g(end\))293 1675 y(const)h(char)g(*text;)293
+1719 y(int)h(start,)e(end;)195 1762 y({)234 1806 y(char)h(**matches;)
+234 1893 y(matches)f(=)i(\(char)f(**\)NULL;)234 1980
+y(/*)h(If)g(this)f(word)g(is)h(at)g(the)f(start)g(of)h(the)f(line,)g
+(then)g(it)h(is)g(a)g(command)293 2024 y(to)g(complete.)36
b(Otherwise)16 b(it)j(is)f(the)h(name)f(of)h(a)g(file)f(in)h(the)f
(current)293 2067 y(directory.)e(*/)234 2111 y(if)j(\(start)e(==)i(0\))
273 2154 y(matches)e(=)j(rl_compl)o(eti)o(on_)o(ma)o(tch)o(es)c
2503 y(char)g(*)195 2547 y(command_ge)o(ne)o(rat)o(or)e(\(text,)h
(state\))293 2590 y(const)h(char)g(*text;)293 2634 y(int)h(state;)p
eop
-%%Page: 51 55
-51 54 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(51)195 149 y Fd({)234 193 y(static)18
-b(int)g(list_inde)o(x,)e(len;)234 237 y(char)i(*name;)234
-324 y(/*)h(If)g(this)f(is)h(a)g(new)f(word)h(to)f(complete,)f(initiali)
-o(ze)f(now.)38 b(This)293 367 y(includes)17 b(saving)g(the)h(length)g
-(of)g(TEXT)h(for)f(efficiency)o(,)e(and)293 411 y(initializi)o(ng)g
-(the)i(index)g(variable)f(to)i(0.)f(*/)234 455 y(if)h(\(!state\))273
+%%Page: 52 56
+52 55 bop 75 -58 a Ft(52)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Fd({)234 193 y(static)i(int)g(list_inde)o(x,)e(len;)234
+237 y(char)i(*name;)234 324 y(/*)h(If)g(this)f(is)h(a)g(new)f(word)h
+(to)f(complete,)f(initiali)o(ze)f(now.)38 b(This)293
+367 y(includes)17 b(saving)g(the)h(length)g(of)g(TEXT)h(for)f
+(efficiency)o(,)e(and)293 411 y(initializi)o(ng)g(the)i(index)g
+(variable)f(to)i(0.)f(*/)234 455 y(if)h(\(!state\))273
498 y({)313 542 y(list_inde)o(x)d(=)k(0;)313 585 y(len)e(=)h(strlen)f
(\(text\);)273 629 y(})234 716 y(/*)h(Return)e(the)i(next)f(name)g
(which)g(partially)e(matches)h(from)h(the)293 760 y(command)f(list.)h
(arg\)\))273 2416 y(return)h(1;)234 2503 y(sprintf)f(\(syscom,)g("more)
g(\045s",)h(arg\);)234 2547 y(return)g(\(system)e(\(syscom\)\);)195
2590 y(})p eop
-%%Page: 52 56
-52 55 bop 75 -58 a Ft(52)1299 b(GNU)15 b(Readline)h(Library)195
-149 y Fd(com_rename)g(\(arg\))293 193 y(char)i(*arg;)195
-237 y({)234 280 y(too_danger)o(ous)e(\("rename")o(\);)234
-324 y(return)i(\(1\);)195 367 y(})195 455 y(com_stat)f(\(arg\))293
-498 y(char)h(*arg;)195 542 y({)234 585 y(struct)g(stat)g(finfo;)234
-672 y(if)h(\(!valid_ar)o(gu)o(men)o(t)d(\("stat",)h(arg\)\))273
-716 y(return)h(\(1\);)234 803 y(if)h(\(stat)f(\(arg,)f(&finfo\))g(==)i
-(-1\))273 847 y({)313 890 y(perror)e(\(arg\);)313 934
-y(return)g(\(1\);)273 978 y(})234 1065 y(printf)h(\("Statis)o(tic)o(s)e
-(for)j(`\045s':\\n",)d(arg\);)234 1152 y(printf)i(\("\045s)g(has)g
+%%Page: 53 57
+53 56 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(53)195 149 y Fd(com_rename)16 b(\(arg\))293
+193 y(char)i(*arg;)195 237 y({)234 280 y(too_danger)o(ous)e(\("rename")
+o(\);)234 324 y(return)i(\(1\);)195 367 y(})195 455 y(com_stat)f
+(\(arg\))293 498 y(char)h(*arg;)195 542 y({)234 585 y(struct)g(stat)g
+(finfo;)234 672 y(if)h(\(!valid_ar)o(gu)o(men)o(t)d(\("stat",)h
+(arg\)\))273 716 y(return)h(\(1\);)234 803 y(if)h(\(stat)f(\(arg,)f
+(&finfo\))g(==)i(-1\))273 847 y({)313 890 y(perror)e(\(arg\);)313
+934 y(return)g(\(1\);)273 978 y(})234 1065 y(printf)h(\("Statis)o(tic)o
+(s)e(for)j(`\045s':\\n",)d(arg\);)234 1152 y(printf)i(\("\045s)g(has)g
(\045d)h(link\045s,)e(and)h(is)h(\045d)g(byte\045s)e(in)i(length.\\n")o
(,)d(arg,)391 1196 y(finfo.st_n)o(li)o(nk,)391 1239 y(\(finfo.st_)o(nl)
o(ink)g(==)j(1\))g(?)g("")g(:)g("s",)391 1283 y(finfo.st_s)o(iz)o(e,)
2460 y(printf)e(\("\045s\\t\\t\045s.)o(\\n)o(",)f(commands[i)o(].n)o
(am)o(e,)g(commands[i)o(].d)o(oc\))o(;)391 2503 y(printed++;)352
2547 y(})273 2590 y(})p eop
-%%Page: 53 57
-53 56 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(53)234 149 y Fd(if)19 b(\(!printed\))273
-193 y({)313 237 y(printf)e(\("No)h(commands)f(match)g(`\045s'.)38
-b(Possibil)o(tie)o(s)17 b(are:\\n",)f(arg\);)313 324
-y(for)i(\(i)h(=)g(0;)g(commands[i)o(].)o(nam)o(e;)d(i++\))352
-367 y({)391 411 y(/*)j(Print)f(in)g(six)h(columns.)d(*/)391
-455 y(if)j(\(printed)d(==)j(6\))430 498 y({)470 542 y(printed)d(=)k(0;)
-470 585 y(printf)d(\("\\n"\);)430 629 y(})391 716 y(printf)g
-(\("\045s\\t",)g(commands[)o(i].)o(nam)o(e\))o(;)391
-760 y(printed++;)352 803 y(})313 890 y(if)i(\(printed)o(\))352
+%%Page: 54 58
+54 57 bop 75 -58 a Ft(54)1299 b(GNU)15 b(Readline)h(Library)234
+149 y Fd(if)j(\(!printed\))273 193 y({)313 237 y(printf)e(\("No)h
+(commands)f(match)g(`\045s'.)38 b(Possibil)o(tie)o(s)17
+b(are:\\n",)f(arg\);)313 324 y(for)i(\(i)h(=)g(0;)g(commands[i)o(].)o
+(nam)o(e;)d(i++\))352 367 y({)391 411 y(/*)j(Print)f(in)g(six)h
+(columns.)d(*/)391 455 y(if)j(\(printed)d(==)j(6\))430
+498 y({)470 542 y(printed)d(=)k(0;)470 585 y(printf)d(\("\\n"\);)430
+629 y(})391 716 y(printf)g(\("\045s\\t",)g(commands[)o(i].)o(nam)o(e\))
+o(;)391 760 y(printed++;)352 803 y(})313 890 y(if)i(\(printed)o(\))352
934 y(printf)e(\("\\n"\);)273 978 y(})234 1021 y(return)h(\(0\);)195
1065 y(})195 1152 y(/*)h(Change)e(to)i(the)f(directory)f(ARG.)h(*/)195
1196 y(com_cd)f(\(arg\))293 1239 y(char)h(*arg;)195 1283
y(})195 2503 y(/*)h(The)f(user)g(wishes)g(to)g(quit)h(using)e(this)h
(program.)36 b(Just)19 b(set)f(DONE)254 2547 y(non-zero.)e(*/)195
2590 y(com_quit)h(\(arg\))293 2634 y(char)h(*arg;)p eop
-%%Page: 54 58
-54 57 bop 75 -58 a Ft(54)1299 b(GNU)15 b(Readline)h(Library)195
-149 y Fd({)234 193 y(done)i(=)i(1;)234 237 y(return)e(\(0\);)195
-280 y(})195 367 y(/*)h(Function)d(which)i(tells)g(you)g(that)g(you)h
-(can't)e(do)i(this.)f(*/)195 411 y(too_danger)o(ou)o(s)f(\(caller\))293
-455 y(char)h(*caller;)195 498 y({)234 542 y(fprintf)f(\(stderr,)411
-585 y("\045s:)h(Too)g(dangerous)e(for)j(me)g(to)g(distribu)o(te.)o
-(\\n")411 629 y(caller\);)234 672 y(fprintf)e(\(stderr,)g("Write)g(it)i
+%%Page: 55 59
+55 58 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(55)195 149 y Fd({)234 193 y(done)18 b(=)i(1;)234
+237 y(return)e(\(0\);)195 280 y(})195 367 y(/*)h(Function)d(which)i
+(tells)g(you)g(that)g(you)h(can't)e(do)i(this.)f(*/)195
+411 y(too_danger)o(ou)o(s)f(\(caller\))293 455 y(char)h(*caller;)195
+498 y({)234 542 y(fprintf)f(\(stderr,)411 585 y("\045s:)h(Too)g
+(dangerous)e(for)j(me)g(to)g(distribu)o(te.)o(\\n")411
+629 y(caller\);)234 672 y(fprintf)e(\(stderr,)g("Write)g(it)i
(yourself.)o(\\n")o(\);)195 716 y(})195 803 y(/*)g(Return)e(non-zero)g
(if)h(ARG)h(is)g(a)g(valid)f(argument)e(for)j(CALLER,)254
847 y(else)f(print)g(an)g(error)g(message)f(and)h(return)g(zero.)f(*/)
(Argument)f(required.)o(\\n)o(",)f(caller\);)313 1196
y(return)h(\(0\);)273 1239 y(})234 1326 y(return)h(\(1\);)195
1370 y(})p eop
-%%Page: 55 59
-55 58 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
-(ual)1053 b(55)75 149 y Fp(App)r(endix)25 b(A)20 b(Cop)n(ying)26
+%%Page: 56 60
+56 59 bop 75 -58 a Ft(56)1299 b(GNU)15 b(Readline)h(Library)p
+eop
+%%Page: 57 61
+57 60 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
+(ual)1053 b(57)75 149 y Fp(App)r(endix)25 b(A)20 b(Cop)n(ying)26
b(This)g(Man)n(ual)75 345 y Fr(A.1)33 b(GNU)21 b(F)-6
b(ree)23 b(Do)r(cumen)n(tation)g(License)698 455 y Ft(V)l(ersion)16
b(1.2,)e(No)o(v)o(em)o(b)q(er)h(2002)195 526 y(Cop)o(yrigh)o(t)421
b(The)165 2670 y(relationship)d(could)g(b)q(e)f(a)g(matter)e(of)i
(historical)g(connection)h(with)f(the)g(sub)s(ject)f(or)h(with)g
(related)p eop
-%%Page: 56 60
-56 59 bop 75 -58 a Ft(56)1299 b(GNU)15 b(Readline)h(Library)165
+%%Page: 58 62
+58 61 bop 75 -58 a Ft(58)1299 b(GNU)15 b(Readline)h(Library)165
149 y(matters,)h(or)g(of)g(legal,)i(commercial,)g(philosophical,)i
(ethical)e(or)e(p)q(olitical)j(p)q(osition)f(regarding)165
204 y(them.)165 275 y(The)13 b(\\In)o(v)m(arian)o(t)g(Sections")g(are)g
d(ha)o(v)o(e)h(is)h(v)o(oid)g(and)g(has)f(no)165 2670
y(e\013ect)d(on)g(the)g(meaning)h(of)f(this)h(License.)p
eop
-%%Page: 57 61
-57 60 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
-(ual)1053 b(57)100 149 y(2.)29 b(VERBA)l(TIM)15 b(COPYING)165
+%%Page: 59 63
+59 62 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
+(ual)1053 b(59)100 149 y(2.)29 b(VERBA)l(TIM)15 b(COPYING)165
222 y(Y)l(ou)k(ma)o(y)g(cop)o(y)f(and)i(distribute)g(the)f(Do)q(cumen)o
(t)g(in)h(an)o(y)f(medium,)h(either)g(commercially)g(or)165
277 y(noncommercially)l(,)k(pro)o(vided)e(that)f(this)h(License,)i(the)
(er)h(p)q(ossesses)h(a)e(cop)o(y)h(of)165 2670 y(it.)j(In)c(addition,)g
(y)o(ou)f(m)o(ust)f(do)h(these)h(things)g(in)g(the)f(Mo)q(di\014ed)h(V)
l(ersion:)p eop
-%%Page: 58 62
-58 61 bop 75 -58 a Ft(58)1299 b(GNU)15 b(Readline)h(Library)178
+%%Page: 60 64
+60 63 bop 75 -58 a Ft(60)1299 b(GNU)15 b(Readline)h(Library)178
149 y(A.)30 b(Use)17 b(in)g(the)f(Title)h(P)o(age)f(\(and)g(on)h(the)f
(co)o(v)o(ers,)g(if)g(an)o(y\))g(a)g(title)h(distinct)h(from)d(that)h
(of)g(the)255 204 y(Do)q(cumen)o(t,)h(and)g(from)f(those)h(of)f
(that)d(qualify)165 2670 y(as)e(Secondary)g(Sections)h(and)f(con)o
(tain)g(no)g(material)g(copied)h(from)e(the)h(Do)q(cumen)o(t,)g(y)o(ou)
f(ma)o(y)h(at)p eop
-%%Page: 59 63
-59 62 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
-(ual)1053 b(59)165 149 y(y)o(our)16 b(option)g(designate)h(some)f(or)f
+%%Page: 61 65
+61 64 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
+(ual)1053 b(61)165 149 y(y)o(our)16 b(option)g(designate)h(some)f(or)f
(all)i(of)f(these)h(sections)f(as)g(in)o(v)m(arian)o(t.)24
b(T)l(o)15 b(do)i(this,)f(add)g(their)165 204 y(titles)i(to)f(the)h
(list)h(of)e(In)o(v)m(arian)o(t)h(Sections)h(in)f(the)g(Mo)q(di\014ed)h
2615 y(do)q(cumen)o(t,)g(and)f(follo)o(w)g(this)h(License)h(in)f(all)h
(other)d(resp)q(ects)i(regarding)g(v)o(erbatim)f(cop)o(ying)g(of)165
2670 y(that)e(do)q(cumen)o(t.)p eop
-%%Page: 60 64
-60 63 bop 75 -58 a Ft(60)1299 b(GNU)15 b(Readline)h(Library)100
+%%Page: 62 66
+62 65 bop 75 -58 a Ft(62)1299 b(GNU)15 b(Readline)h(Library)100
149 y(7.)29 b(A)o(GGREGA)l(TION)14 b(WITH)i(INDEPENDENT)e(W)o(ORKS)165
214 y(A)g(compilation)h(of)f(the)g(Do)q(cumen)o(t)g(or)f(its)i(deriv)m
(ativ)o(es)g(with)f(other)g(separate)f(and)i(indep)q(enden)o(t)165
(ma)o(y)f(c)o(ho)q(ose)i(an)o(y)e(v)o(ersion)i(ev)o(er)f(published)j
(\(not)c(as)h(a)g(draft\))f(b)o(y)i(the)f(F)l(ree)165
2660 y(Soft)o(w)o(are)d(F)l(oundation.)p eop
-%%Page: 61 65
-61 64 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
-(ual)1053 b(61)75 149 y Fh(A.1.1)30 b(ADDENDUM:)22 b(Ho)n(w)f(to)f(use)
+%%Page: 63 67
+63 66 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o
+(ual)1053 b(63)75 149 y Fh(A.1.1)30 b(ADDENDUM:)22 b(Ho)n(w)f(to)f(use)
h(this)f(License)h(for)f(y)n(our)h(do)r(cumen)n(ts)137
271 y Ft(T)l(o)14 b(use)g(this)g(License)h(in)g(a)e(do)q(cumen)o(t)h(y)
o(ou)f(ha)o(v)o(e)h(written,)f(include)j(a)d(cop)o(y)h(of)f(the)h
(license,)k(suc)o(h)e(as)g(the)f(GNU)75 1196 y(General)16
b(Public)h(License,)f(to)f(p)q(ermit)h(their)f(use)h(in)g(free)f(soft)o
(w)o(are.)p eop
-%%Page: 62 66
-62 65 bop 75 -58 a Ft(62)1299 b(GNU)15 b(Readline)h(Library)p
+%%Page: 64 68
+64 67 bop 75 -58 a Ft(64)1299 b(GNU)15 b(Readline)h(Library)p
eop
-%%Page: 63 67
-63 66 bop 75 -58 a Ft(Concept)15 b(Index)1466 b(63)75
+%%Page: 65 69
+65 68 bop 75 -58 a Ft(Concept)15 b(Index)1466 b(65)75
149 y Fp(Concept)27 b(Index)75 319 y Fr(A)75 380 y Fb(application)q
(-sp)q(eci)q(\014c)16 b(completion)f(functions)5 b Fa(.)j(.)e(.)g(.)g
(.)g(.)h(.)17 b Fb(41)75 511 y Fr(C)75 571 y Fb(command)d(editing)e
Fa(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Fb(1)75 895 y Fr(F)75
955 y Fb(FDL,)13 b(GNU)f(F)m(ree)h(Do)q(cumen)o(tation)j(License)6
-b Fa(.)h(.)f(.)g(.)g(.)g(.)h(.)18 b Fb(55)75 1086 y Fr(I)75
+b Fa(.)h(.)f(.)g(.)g(.)g(.)h(.)18 b Fb(57)75 1086 y Fr(I)75
1147 y Fb(initiali)q(zati)q(on)e(\014le,)e(readline)t
Fa(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)17 b Fb(4)75 1192 y(in)o(teraction,)e(readline)5
Fa(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17
b Fb(2)p eop
-%%Page: 64 68
-64 67 bop 75 -58 a Ft(64)1299 b(GNU)15 b(Readline)h(Library)p
+%%Page: 66 70
+66 69 bop 75 -58 a Ft(66)1299 b(GNU)15 b(Readline)h(Library)p
eop
-%%Page: 65 69
-65 68 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(65)75 149 y Fp(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
+%%Page: 67 71
+67 70 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(67)75 149 y Fp(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
b(Index)p 80 305 21 3 v 75 366 a Fd(_rl_digit_)o(p)7
b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)20 b Fb(14)p eop
-%%Page: 66 70
-66 69 bop 75 -58 a Ft(66)1299 b(GNU)15 b(Readline)h(Library)75
+%%Page: 68 72
+68 71 bop 75 -58 a Ft(68)1299 b(GNU)15 b(Readline)h(Library)75
149 y Fr(O)75 209 y Fb(output-meta)5 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Fb(7)75 253
o(s_)o(hoo)o(k)9 b Fa(.)d(.)g(.)g(.)g(.)g(.)h(.)24 b
Fb(44)1012 149 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s
Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Fb(42,)c(43)1012
-194 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o(_di)o(rs)t
-Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(45)1012
-238 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fa(.)f(.)f(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
-b Fb(42)1012 282 y Fd(rl_completi)o(on)o(_mo)o(de)t Fa(.)t(.)6
-b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(42)1012 326 y Fd(rl_completi)o(on)o(_qu)
-o(er)o(y_i)o(te)o(ms)9 b Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)23 b Fb(45)1012 371 y Fd(rl_completi)o(on)o(_su)
-o(pp)o(res)o(s_)o(app)o(end)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)20 b Fb(45)1012 415 y Fd(rl_completi)o(on)o(_ty)o(pe)t
+194 y Fd(rl_completi)o(on)o(_fo)o(un)o(d_q)o(uo)o(te)c
+Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23
+b Fb(46)1012 238 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o
+(_di)o(rs)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
+b Fb(46)1012 282 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8
+b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)25 b Fb(42)1012 326 y Fd(rl_completi)o(on)o(_mo)o(de)t
Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(46)1012 459 y
-Fd(rl_copy_key)o(ma)o(p)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)21 b Fb(28)1012 503 y Fd(rl_copy_tex)o(t)6 b Fa(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)1012 547 y
-Fd(rl_crlf)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(33)1012 592 y Fd(rl_delete_t)o(ex)o(t)8
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(42)1012 371 y
+Fd(rl_completi)o(on)o(_qu)o(er)o(y_i)o(te)o(ms)9 b Fa(.)s(.)d(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23
+b Fb(45)1012 415 y Fd(rl_completi)o(on)o(_qu)o(ot)o(e_c)o(ha)o(rac)o
+(ter)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20
+b Fb(45)1012 459 y Fd(rl_completi)o(on)o(_su)o(pp)o(res)o(s_)o(app)o
+(end)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20
+b Fb(45)1012 503 y Fd(rl_completi)o(on)o(_su)o(pp)o(res)o(s_)o(quo)o
+(te)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
+b Fb(46)1012 547 y Fd(rl_completi)o(on)o(_ty)o(pe)t Fa(.)t(.)6
+b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(46)1012 592 y Fd(rl_completi)o(on)o(_wo)
+o(rd)o(_br)o(ea)o(k_h)o(ook)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)20 b Fb(45)1012 636 y Fd(rl_copy_key)o(ma)o(p)8
+b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
+Fb(28)1012 680 y Fd(rl_copy_tex)o(t)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)1012 724 y Fd(rl_crlf)t
+Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)17 b Fb(33)1012 769 y Fd(rl_delete_t)o(ex)o(t)8
b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
-Fb(34)1012 636 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7
+Fb(34)1012 813 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7
b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)24 b Fb(26)1012 680 y Fd(rl_deprep_t)o(er)o(min)o(al)t
+g(.)g(.)24 b Fb(26)1012 857 y Fd(rl_deprep_t)o(er)o(min)o(al)t
Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(35)1012 724 y
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(35)1012 901 y
Fd(rl_ding)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(36)1012 769 y Fd(rl_director)o(y_)o
+f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(36)1012 945 y Fd(rl_director)o(y_)o
(com)o(pl)o(eti)o(on)o(_ho)o(ok)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(44)1012 813 y Fd(rl_discard_)o(ke)o(yma)
+(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(44)1012 990 y Fd(rl_discard_)o(ke)o(yma)
o(p)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(29)1012
-857 y Fd(rl_dispatch)o(in)o(g)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)21 b Fb(24)1012 901 y Fd(rl_display_)o(ma)o(tch)o(_l)o(ist)8
-b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)25 b Fb(36)1012 945 y Fd(rl_do_undo)8
+1034 y Fd(rl_dispatch)o(in)o(g)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)21 b Fb(24)1012 1078 y Fd(rl_display_)o(ma)o(tch)o(_l)o
+(ist)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(36)1012 1122 y Fd(rl_do_undo)8
b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24
-b Fb(32)1012 990 y Fd(rl_done)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(24)1012
-1034 y Fd(rl_editing_)o(mo)o(de)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+b Fb(32)1012 1167 y Fd(rl_done)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(24)1012
+1211 y Fd(rl_editing_)o(mo)o(de)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)21 b Fb(28)1012 1078 y Fd(rl_end)5 b Fa(.)t(.)h(.)g(.)h(.)f(.)g
+g(.)g(.)21 b Fb(28)1012 1255 y Fd(rl_end)5 b Fa(.)t(.)h(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
-b Fb(24)1012 1122 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b
+b Fb(24)1012 1299 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b
Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(32)1012 1167
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(32)1012 1343
y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18
-b Fb(24)1012 1211 y Fd(rl_event_ho)o(ok)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g
+b Fb(24)1012 1388 y Fd(rl_event_ho)o(ok)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(26)1012 1255 y Fd(rl_execute_)o(ne)o
+g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(26)1012 1432 y Fd(rl_execute_)o(ne)o
(xt)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fb(34)1012 1299 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t
+b Fb(35)1012 1476 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t
Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(26)1012 1343 y Fd(rl_executin)o(g_)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(26)1012 1520 y Fd(rl_executin)o(g_)
o(mac)o(ro)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(26)1012
-1388 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+1564 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)20 b Fb(33)1012 1432 y Fd(rl_explicit)o(_a)o(rg)7
+g(.)20 b Fb(33)1012 1609 y Fd(rl_explicit)o(_a)o(rg)7
b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(27)1012
-1476 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fa(.)f(.)f(.)g(.)g(.)g
+1653 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fa(.)f(.)f(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
-b Fb(35)1012 1520 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o
+b Fb(35)1012 1697 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o
(ire)o(d)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Fb(46)1012 1564 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o
+b Fb(46)1012 1741 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o
(cti)o(on)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
-b Fb(43)1012 1609 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o
+b Fb(43)1012 1786 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o
(tio)o(n)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Fb(43)1012 1653 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o
+b Fb(43)1012 1830 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o
(rs)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
-b Fb(45)1012 1697 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o
+b Fb(45)1012 1874 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o
(d)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
-b Fb(46)1012 1741 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o
+b Fb(46)1012 1918 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o
(on)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
-b Fb(43)1012 1786 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7
+b Fb(43)1012 1962 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7
b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)23 b Fb(33)1012 1830 y Fd(rl_free_lin)o(e_)o(sta)o(te)t
+f(.)23 b Fb(33)1012 2007 y Fd(rl_free_lin)o(e_)o(sta)o(te)t
Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 1874
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 2051
y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-19 b Fb(32)1012 1918 y Fd(rl_function)o(_d)o(ump)o(er)t
+19 b Fb(32)1012 2095 y Fd(rl_function)o(_d)o(ump)o(er)t
Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(31)1012 1962
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(31)1012 2139
y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
-b Fb(31)1012 2007 y Fd(rl_funmap_n)o(am)o(es)7 b Fa(.)s(.)f(.)g(.)h(.)f
+b Fb(31)1012 2184 y Fd(rl_funmap_n)o(am)o(es)7 b Fa(.)s(.)f(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)21 b Fb(31)1012 2051 y Fd(rl_generic_)o(bi)o(nd)7
+h(.)f(.)g(.)g(.)g(.)21 b Fb(31)1012 2228 y Fd(rl_generic_)o(bi)o(nd)7
b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(30)1012
-2095 y Fd(rl_get_keym)o(ap)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+2272 y Fd(rl_get_keym)o(ap)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)22 b Fb(29)1012 2139 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o
+h(.)f(.)g(.)22 b Fb(29)1012 2316 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o
(ame)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(29)1012 2184 y Fd(rl_get_keym)o(ap)o
+(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(29)1012 2360 y Fd(rl_get_keym)o(ap)o
(_na)o(me)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(29)1012
-2228 y Fd(rl_get_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)
+2405 y Fd(rl_get_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)19 b Fb(40)1012 2272 y Fd(rl_get_term)o(ca)o(p)8 b
+(.)19 b Fb(40)1012 2449 y Fd(rl_get_term)o(ca)o(p)8 b
Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b Fb(37)1012
-2316 y Fd(rl_getc)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+2493 y Fd(rl_getc)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(34)1012 2360 y
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(34)1012 2537 y
Fd(rl_getc_fun)o(ct)o(ion)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20
-b Fb(26)1012 2405 y Fd(rl_gnu_read)o(li)o(ne_)o(p)6 b
+b Fb(26)1012 2582 y Fd(rl_gnu_read)o(li)o(ne_)o(p)6 b
Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(25)1012 2449
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(25)1012 2626
y Fd(rl_ignore_c)o(om)o(ple)o(ti)o(on_)o(du)o(pli)o(cat)o(es)t
-Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(45)1012
-2493 y Fd(rl_ignore_s)o(om)o(e_c)o(om)o(ple)o(ti)o(ons)o(_fu)o(nc)o
-(tio)o(n)8 b Fa(.)e(.)g(.)g(.)g(.)h(.)24 b Fb(44)1012
-2537 y Fd(rl_inhibit_)o(co)o(mpl)o(et)o(ion)8 b Fa(.)f(.)f(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
-b Fb(46)1012 2582 y Fd(rl_initiali)o(ze)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(35)1012 2626 y Fd(rl_insert_c)o(om)o
-(ple)o(ti)o(ons)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(42)1012 2670
-y Fd(rl_insert_t)o(ex)o(t)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)21 b Fb(34)p eop
-%%Page: 67 71
-67 70 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(67)75 149 y Fd(rl_instrea)o(m)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(46)1012
+2670 y Fd(rl_ignore_s)o(om)o(e_c)o(om)o(ple)o(ti)o(ons)o(_fu)o(nc)o
+(tio)o(n)8 b Fa(.)e(.)g(.)g(.)g(.)h(.)24 b Fb(44)p eop
+%%Page: 69 73
+69 72 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(69)75 149 y Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9
+b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Fb(47)75 193 y Fd(rl_initial)o(iz)o(e)9
+b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
+b Fb(36)75 237 y Fd(rl_insert_)o(co)o(mpl)o(et)o(ion)o(s)9
+b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Fb(42)75 280 y Fd(rl_insert_)o(te)o(xt)8
+b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b
+Fb(34)75 324 y Fd(rl_instrea)o(m)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(25)75 194 y Fd(rl_invokin)o(g_)o(key)o
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(25)75 368 y Fd(rl_invokin)o(g_)o(key)o
(se)o(qs)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(31)75
-238 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8
+411 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8
b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
-b Fb(31)75 282 y Fd(rl_kill_te)o(xt)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+b Fb(31)75 455 y Fd(rl_kill_te)o(xt)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(34)75 326 y Fd(rl_last_fu)o(nc)6
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(34)75 499 y Fd(rl_last_fu)o(nc)6
b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Fb(25)75 371 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5
+b Fb(25)75 542 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5
b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(25)75 415 y Fd(rl_line_bu)o(ff)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(25)75 586 y Fd(rl_line_bu)o(ff)
o(er)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fb(24)75 459 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s
+b Fb(24)75 629 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s
Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(31)75 503 y Fd(rl_macro_b)o(in)o(d)9
+f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(31)75 673 y Fd(rl_macro_b)o(in)o(d)9
b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Fb(36)75 548 y Fd(rl_macro_d)o(um)o(per)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)
+b Fb(36)75 717 y Fd(rl_macro_d)o(um)o(per)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)20 b Fb(36)75 592 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o
+(.)g(.)h(.)f(.)g(.)20 b Fb(36)75 760 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o
(ap)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(28)75 636
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(28)75 804
y Fd(rl_make_ke)o(ym)o(ap)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)21 b Fb(28)75 680 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)
+(.)g(.)21 b Fb(28)75 848 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17
-b Fb(24)75 725 y Fd(rl_message)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+b Fb(24)75 891 y Fd(rl_message)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 769 y Fd(rl_modifyi)o(ng)6
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 935 y Fd(rl_modifyi)o(ng)6
b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Fb(32)75 813 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g
+b Fb(32)75 979 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)19 b Fb(31)75 858 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
+g(.)g(.)g(.)g(.)19 b Fb(31)75 1022 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
(ead)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(24)75 902 y Fd(rl_numeric)o(_a)o
-(rg)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(24)75 1066 y Fd(rl_numeric)o(_a)
+o(rg)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fb(28)75 946 y Fd(rl_on_new_)o(li)o(ne)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 990 y Fd(rl_on_new_)o(li)o(ne_)o(wi)o
-(th_)o(pro)o(mp)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1035 y Fd(rl_outstre)o(am)6
+b Fb(28)75 1109 y Fd(rl_on_new_)o(li)o(ne)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 1153 y Fd(rl_on_new_)o(li)o(ne_)o
+(wi)o(th_)o(pro)o(mp)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1197 y Fd(rl_outstre)o(am)6
b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Fb(25)75 1079 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g
+b Fb(25)75 1240 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)19 b Fb(30)75 1123 y Fd(rl_pending)o(_i)o(npu)o(t)6
+g(.)g(.)g(.)g(.)19 b Fb(30)75 1284 y Fd(rl_pending)o(_i)o(npu)o(t)6
b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(24)75
-1167 y Fd(rl_point)s Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+1328 y Fd(rl_point)s Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Fb(24)75 1212 y Fd(rl_possibl)o(e_)o
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Fb(24)75 1371 y Fd(rl_possibl)o(e_)o
(com)o(pl)o(eti)o(ons)7 b Fa(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(42)75 1256 y
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(42)75 1415 y
Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(25)75 1300 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
+b Fb(25)75 1459 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Fb(26)75 1344 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
+f(.)g(.)g(.)g(.)25 b Fb(26)75 1502 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(35)75
-1389 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+1546 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1433 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
+g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1589 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
o(ut)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(34)75 1477
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(34)75 1633
y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-19 b Fb(31)75 1521 y Fd(rl_read_ke)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g
+19 b Fb(31)75 1677 y Fd(rl_read_ke)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)75 1566 y
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)75 1720 y
Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
-19 b Fb(25)75 1610 y Fd(rl_readlin)o(e_)o(sta)o(te)5
+19 b Fb(25)75 1764 y Fd(rl_readlin)o(e_)o(sta)o(te)5
b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75 1654
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75 1808
y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17
-b Fb(25)75 1698 y Fd(rl_redispl)o(ay)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+b Fb(25)75 1851 y Fd(rl_redispl)o(ay)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(32)75 1743 y Fd(rl_redispl)o(ay)o(_fu)o
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(32)75 1895 y Fd(rl_redispl)o(ay)o(_fu)o
(nc)o(tio)o(n)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1787 y
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1939 y
Fd(rl_replace)o(_l)o(ine)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-20 b Fb(35)75 1831 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9
+20 b Fb(35)75 1982 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9
b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Fb(40)75 1875 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o
+f(.)g(.)g(.)g(.)25 b Fb(40)75 2026 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o
(te)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 1920
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 2069
y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-19 b Fb(35)75 1964 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5
+19 b Fb(35)75 2113 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5
b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)75 2008 y
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)75 2157 y
Fd(rl_restore)o(_p)o(rom)o(pt)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(33)75 2052 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
+b Fb(33)75 2200 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2097 y Fd(rl_set_key)7
+(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2244 y Fd(rl_set_key)7
b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Fb(30)75 2141 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou)
+b Fb(30)75 2288 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou)
o(t)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Fb(35)75 2185 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f
+b Fb(35)75 2331 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2229 y Fd(rl_set_par)o(en)o(_bl)o
+h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2375 y Fd(rl_set_par)o(en)o(_bl)o
(in)o(k_t)o(ime)o(ou)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)75 2274 y Fd(rl_set_pro)o(mp)o(t)9
+(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)75 2419 y Fd(rl_set_pro)o(mp)o(t)9
b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Fb(34)75 2318 y Fd(rl_set_scr)o(ee)o(n_s)o(iz)o(e)5
-b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)1012 149 y
-Fd(rl_set_sign)o(al)o(s)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)21 b Fb(41)1012 193 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 237 y
-Fd(rl_special_)o(pr)o(efi)o(xe)o(s)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18
-b Fb(45)1012 280 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)21 b Fb(25)1012 324 y Fd(rl_stuff_ch)o(ar)8
-b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Fb(34)1012 367 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h
+b Fb(34)1012 149 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6
+b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 193 y Fd(rl_set_sign)o(al)o(s)8
+b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
+Fb(41)1012 237 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 281 y Fd(rl_special_)o(pr)o
+(efi)o(xe)o(s)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(45)1012
+325 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)21 b Fb(25)1012 368 y Fd(rl_stuff_ch)o(ar)8 b
+Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
+b Fb(34)1012 412 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)20 b Fb(25)1012 411 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
+h(.)f(.)g(.)g(.)20 b Fb(25)1012 456 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
(_bi)o(nd)o(ing)o(s)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)21 b Fb(35)1012 455 y Fd(rl_tty_unse)o(t_)o(def)o(au)o
+(.)h(.)f(.)g(.)21 b Fb(35)1012 500 y Fd(rl_tty_unse)o(t_)o(def)o(au)o
(lt_)o(bi)o(ndi)o(ngs)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)20 b Fb(35)1012 498 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o
+g(.)g(.)20 b Fb(35)1012 544 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o
(ma)o(p)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)23 b Fb(30)1012 542 y Fd(rl_unbind_f)o(un)o(cti)o(on)o
+(.)g(.)h(.)f(.)23 b Fb(30)1012 587 y Fd(rl_unbind_f)o(un)o(cti)o(on)o
(_in)o(_m)o(ap)9 b Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 585 y Fd(rl_unbind_k)o(ey)8
+(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 631 y Fd(rl_unbind_k)o(ey)8
b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Fb(30)1012 629 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
+b Fb(30)1012 675 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 673 y Fd(rl_username)o(_c)o
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 719 y Fd(rl_username)o(_c)o
(omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)18 b Fb(43)1012 716 y Fd(rl_variable)o(_b)o(ind)6
+g(.)h(.)f(.)g(.)18 b Fb(43)1012 763 y Fd(rl_variable)o(_b)o(ind)6
b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Fb(37)1012
-760 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
+806 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-19 b Fb(37)1012 886 y Fr(S)1012 944 y Fd(self-insert)9
+19 b Fb(37)1012 933 y Fr(S)1012 992 y Fd(self-insert)9
b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 b Fa(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 987 y Fd(set-mark)10
+h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1035 y Fd(set-mark)10
b(\(C-@\))g Fa(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
-b Fb(18)1012 1031 y(sho)o(w-all-if-am)o(bigu)q(ous)14
+b Fb(18)1012 1079 y(sho)o(w-all-if-am)o(bigu)q(ous)14
b Fa(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(7)1012 1074
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(7)1012 1123
y(sho)o(w-all-if-unmo)q(di)q(\014ed)7 b Fa(.)i(.)d(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-19 b Fb(7)1012 1118 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c
+19 b Fb(7)1012 1167 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c
Fa(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)22 b Fb(18)1012 1238 y Fr(T)1012 1296 y Fd(tab-insert)9
-b(\(M-)1281 1294 y Fk(h)p 1292 1268 74 2 v 1292 1296
-a Fj(T)m(AB)p 1292 1304 V 1364 1294 a Fk(i)1379 1296
+(.)g(.)g(.)22 b Fb(18)1012 1288 y Fr(T)1012 1347 y Fd(tab-insert)9
+b(\(M-)1281 1345 y Fk(h)p 1292 1319 74 2 v 1292 1347
+a Fj(T)m(AB)p 1292 1354 V 1364 1345 a Fk(i)1379 1347
y Fd(\))e Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1340
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1391
y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fa(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
-b Fb(18)1012 1384 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
+b Fb(18)1012 1434 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1427 y Fd(transpose-w)o(or)o(ds)9
+(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1478 y Fd(transpose-w)o(or)o(ds)9
b(\(M-t\))d Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1553 y
-Fr(U)1012 1611 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1605 y
+Fr(U)1012 1663 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
Fa(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1655 y Fd(universal-a)o(rg)o
+(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1707 y Fd(universal-a)o(rg)o
(ume)o(nt)9 b(\(\))d Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(17)1012
-1698 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b
-Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)18 b Fb(16)1012 1742 y Fd(unix-word-r)o(ub)o(out)9
-b(\(C-w\))d Fa(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1785 y Fd(upcase-word)9
-b(\(M-u\))e Fa(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fb(15)1012
-1911 y Fr(V)1012 1969 y Fd(vi-editing-)o(mo)o(de)9 b(\(M-C-j\))c
-Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)18 b Fb(19)1012 2013 y(visible-stats)c Fa(.)6
-b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Fb(7)1012 2129 y Fr(Y)1012 2187 y Fd(yank)12 b(\(C-y\))5
+1751 y Fd(unix-filena)o(me)o(-ru)o(bo)o(ut)9 b(\(\))c
+Fa(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)18 b Fb(16)1012 1795 y Fd(unix-line-d)o(is)o(car)o(d)10
+b(\(C-u\))5 b Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(16)1012 1839 y Fd(unix-word-r)o(ub)o
+(out)9 b(\(C-w\))d Fa(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1882
+y Fd(upcase-word)9 b(\(M-u\))e Fa(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
+b Fb(15)1012 2009 y Fr(V)1012 2068 y Fd(vi-editing-)o(mo)o(de)9
+b(\(M-C-j\))c Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(19)1012 2111 y(visible-stats)c
+Fa(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
+b Fb(7)1012 2229 y Fr(Y)1012 2287 y Fd(yank)12 b(\(C-y\))5
b Fa(.)t(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(16)1012 2231 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
+b Fb(17)1012 2331 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Fb(14)1012 2274 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
+b Fb(14)1012 2375 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2318 y Fd(yank-pop)10
+(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2419 y Fd(yank-pop)10
b(\(M-y\))g Fa(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
b Fb(17)p eop
-%%Page: 68 72
-68 71 bop 75 -58 a Ft(68)1299 b(GNU)15 b(Readline)h(Library)p
+%%Page: 70 74
+70 73 bop 75 -58 a Ft(70)1299 b(GNU)15 b(Readline)h(Library)p
eop
%%Trailer
end
@xrdef{Completion Variables-pg}{43}
@xrdef{Completion Variables-snt}{Section@tie 2.6.3}
@xrdef{A Short Completion Example-title}{A Short Completion Example}
-@xrdef{A Short Completion Example-pg}{46}
+@xrdef{A Short Completion Example-pg}{47}
@xrdef{A Short Completion Example-snt}{Section@tie 2.6.4}
@xrdef{Copying This Manual-title}{Copying This Manual}
-@xrdef{Copying This Manual-pg}{55}
+@xrdef{Copying This Manual-pg}{57}
@xrdef{Copying This Manual-snt}{Appendix@tie @char65{}}
@xrdef{GNU Free Documentation License-title}{GNU Free Documentation License}
-@xrdef{GNU Free Documentation License-pg}{55}
+@xrdef{GNU Free Documentation License-pg}{57}
@xrdef{GNU Free Documentation License-snt}{Section@tie @char65.1}
@xrdef{Concept Index-title}{Concept Index}
-@xrdef{Concept Index-pg}{63}
+@xrdef{Concept Index-pg}{65}
@xrdef{Concept Index-snt}{}
@xrdef{Function and Variable Index-title}{Function and Variable Index}
-@xrdef{Function and Variable Index-pg}{65}
+@xrdef{Function and Variable Index-pg}{67}
@xrdef{Function and Variable Index-snt}{}
\entry{variables, readline}{5}{variables, readline}
\entry{readline, function}{21}{readline, function}
\entry{application-specific completion functions}{41}{application-specific completion functions}
-\entry{FDL, GNU Free Documentation License}{55}{FDL, GNU Free Documentation License}
+\entry{FDL, GNU Free Documentation License}{57}{FDL, GNU Free Documentation License}
\initial {E}
\entry {editing command lines}{1}
\initial {F}
-\entry {FDL, GNU Free Documentation License}{55}
+\entry {FDL, GNU Free Documentation License}{57}
\initial {I}
\entry {initialization file, readline}{4}
\entry {interaction, readline}{1}
\entry{kill-word (M-d)}{16}{\code {kill-word (M-d)}}
\entry{backward-kill-word (M-DEL)}{16}{\code {backward-kill-word (M-\key {DEL})}}
\entry{unix-word-rubout (C-w)}{16}{\code {unix-word-rubout (C-w)}}
+\entry{unix-filename-rubout ()}{16}{\code {unix-filename-rubout ()}}
\entry{delete-horizontal-space ()}{16}{\code {delete-horizontal-space ()}}
\entry{kill-region ()}{16}{\code {kill-region ()}}
\entry{copy-region-as-kill ()}{16}{\code {copy-region-as-kill ()}}
\entry{copy-backward-word ()}{16}{\code {copy-backward-word ()}}
\entry{copy-forward-word ()}{16}{\code {copy-forward-word ()}}
-\entry{yank (C-y)}{16}{\code {yank (C-y)}}
+\entry{yank (C-y)}{17}{\code {yank (C-y)}}
\entry{yank-pop (M-y)}{17}{\code {yank-pop (M-y)}}
\entry{digit-argument (M-0, M-1, ...{} M--)}{17}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
\entry{universal-argument ()}{17}{\code {universal-argument ()}}
\entry{rl_read_key}{34}{\code {rl_read_key}}
\entry{rl_getc}{34}{\code {rl_getc}}
\entry{rl_stuff_char}{34}{\code {rl_stuff_char}}
-\entry{rl_execute_next}{34}{\code {rl_execute_next}}
+\entry{rl_execute_next}{35}{\code {rl_execute_next}}
\entry{rl_clear_pending_input}{35}{\code {rl_clear_pending_input}}
\entry{rl_set_keyboard_input_timeout}{35}{\code {rl_set_keyboard_input_timeout}}
\entry{rl_prep_terminal}{35}{\code {rl_prep_terminal}}
\entry{rl_reset_terminal}{35}{\code {rl_reset_terminal}}
\entry{rl_replace_line}{35}{\code {rl_replace_line}}
\entry{rl_extend_line_buffer}{35}{\code {rl_extend_line_buffer}}
-\entry{rl_initialize}{35}{\code {rl_initialize}}
+\entry{rl_initialize}{36}{\code {rl_initialize}}
\entry{rl_ding}{36}{\code {rl_ding}}
\entry{rl_alphabetic}{36}{\code {rl_alphabetic}}
\entry{rl_display_match_list}{36}{\code {rl_display_match_list}}
\entry{rl_basic_word_break_characters}{44}{\code {rl_basic_word_break_characters}}
\entry{rl_basic_quote_characters}{44}{\code {rl_basic_quote_characters}}
\entry{rl_completer_word_break_characters}{45}{\code {rl_completer_word_break_characters}}
+\entry{rl_completion_word_break_hook}{45}{\code {rl_completion_word_break_hook}}
\entry{rl_completer_quote_characters}{45}{\code {rl_completer_quote_characters}}
\entry{rl_filename_quote_characters}{45}{\code {rl_filename_quote_characters}}
\entry{rl_special_prefixes}{45}{\code {rl_special_prefixes}}
\entry{rl_completion_query_items}{45}{\code {rl_completion_query_items}}
\entry{rl_completion_append_character}{45}{\code {rl_completion_append_character}}
\entry{rl_completion_suppress_append}{45}{\code {rl_completion_suppress_append}}
-\entry{rl_completion_mark_symlink_dirs}{45}{\code {rl_completion_mark_symlink_dirs}}
-\entry{rl_ignore_completion_duplicates}{45}{\code {rl_ignore_completion_duplicates}}
+\entry{rl_completion_quote_character}{45}{\code {rl_completion_quote_character}}
+\entry{rl_completion_suppress_quote}{46}{\code {rl_completion_suppress_quote}}
+\entry{rl_completion_found_quote}{46}{\code {rl_completion_found_quote}}
+\entry{rl_completion_mark_symlink_dirs}{46}{\code {rl_completion_mark_symlink_dirs}}
+\entry{rl_ignore_completion_duplicates}{46}{\code {rl_ignore_completion_duplicates}}
\entry{rl_filename_completion_desired}{46}{\code {rl_filename_completion_desired}}
\entry{rl_filename_quoting_desired}{46}{\code {rl_filename_quoting_desired}}
\entry{rl_attempted_completion_over}{46}{\code {rl_attempted_completion_over}}
\entry{rl_completion_type}{46}{\code {rl_completion_type}}
-\entry{rl_inhibit_completion}{46}{\code {rl_inhibit_completion}}
+\entry{rl_inhibit_completion}{47}{\code {rl_inhibit_completion}}
\entry {\code {rl_completion_append_character}}{45}
\entry {\code {rl_completion_display_matches_hook}}{44}
\entry {\code {rl_completion_entry_function}}{42, 43}
-\entry {\code {rl_completion_mark_symlink_dirs}}{45}
+\entry {\code {rl_completion_found_quote}}{46}
+\entry {\code {rl_completion_mark_symlink_dirs}}{46}
\entry {\code {rl_completion_matches}}{42}
\entry {\code {rl_completion_mode}}{42}
\entry {\code {rl_completion_query_items}}{45}
+\entry {\code {rl_completion_quote_character}}{45}
\entry {\code {rl_completion_suppress_append}}{45}
+\entry {\code {rl_completion_suppress_quote}}{46}
\entry {\code {rl_completion_type}}{46}
+\entry {\code {rl_completion_word_break_hook}}{45}
\entry {\code {rl_copy_keymap}}{28}
\entry {\code {rl_copy_text}}{34}
\entry {\code {rl_crlf}}{33}
\entry {\code {rl_end_undo_group}}{32}
\entry {\code {rl_erase_empty_line}}{24}
\entry {\code {rl_event_hook}}{26}
-\entry {\code {rl_execute_next}}{34}
+\entry {\code {rl_execute_next}}{35}
\entry {\code {rl_executing_keymap}}{26}
\entry {\code {rl_executing_macro}}{26}
\entry {\code {rl_expand_prompt}}{33}
\entry {\code {rl_getc}}{34}
\entry {\code {rl_getc_function}}{26}
\entry {\code {rl_gnu_readline_p}}{25}
-\entry {\code {rl_ignore_completion_duplicates}}{45}
+\entry {\code {rl_ignore_completion_duplicates}}{46}
\entry {\code {rl_ignore_some_completions_function}}{44}
-\entry {\code {rl_inhibit_completion}}{46}
-\entry {\code {rl_initialize}}{35}
+\entry {\code {rl_inhibit_completion}}{47}
+\entry {\code {rl_initialize}}{36}
\entry {\code {rl_insert_completions}}{42}
\entry {\code {rl_insert_text}}{34}
\entry {\code {rl_instream}}{25}
\initial {U}
\entry {\code {undo (C-_ or C-x C-u)}}{18}
\entry {\code {universal-argument ()}}{17}
+\entry {\code {unix-filename-rubout ()}}{16}
\entry {\code {unix-line-discard (C-u)}}{16}
\entry {\code {unix-word-rubout (C-w)}}{16}
\entry {\code {upcase-word (M-u)}}{15}
\entry {\code {vi-editing-mode (M-C-j)}}{19}
\entry {visible-stats}{7}
\initial {Y}
-\entry {\code {yank (C-y)}}{16}
+\entry {\code {yank (C-y)}}{17}
\entry {\code {yank-last-arg (M-. or M-_)}}{14}
\entry {\code {yank-nth-arg (M-C-y)}}{14}
\entry {\code {yank-pop (M-y)}}{17}
-This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04
-**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlman.te
-xi
+This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31
+**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlm
+an.texi
-(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlman.tex
-i (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
+(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlma
+n.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
\bindingoffset=\dimen16
\normaloffset=\dimen17
\pagewidth=\dimen18
\toksD=\toks18
\boxA=\box19
\countA=\count30
- fonts,
+
+fonts,
\sffam=\fam8
\textleading=\dimen26
\mainmagstep=\count31
\fontdepth=\count32
-
-page headings,
+ page headings,
\titlepagetopglue=\skip20
\titlepagebottomglue=\skip21
\evenheadline=\toks19
\lastnegativepageno=\count43
\shortappendixwidth=\dimen33
\tocindent=\dimen34
- environments,
+
+environments,
\errorbox=\box22
\lispnarrowing=\skip30
\envskipamount=\skip31
\lskip=\skip35
\rskip=\skip36
\tabw=\dimen38
-
-defuns,
+ defuns,
\defbodyindent=\skip37
\defargsindent=\skip38
\deflastargmargin=\skip39
[11] [12] [13] [14] [15] [16] [17] [18]) (rltech.texi Chapter 2 [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]
-Underfull \hbox (badness 7379) in paragraph at lines 1757--1762
+Underfull \hbox (badness 7379) in paragraph at lines 1792--1797
[]@textrm If an application-specific com-ple-tion func-tion as-signed to @text
tt rl_attempted_
.@glue 3.65 plus 1.825 minus 1.21666
.etc.
-[46] [47] [48] [49] [50] [51] [52] [53]) Appendix A [54] (fdl.texi [55]
-[56] [57] [58] [59] [60]) (Concept Index) [61] [62] (rlman.cps)
-(Function and Variable Index) [63] [64] (rlman.fns [65] [66]) [67] [68] )
+[46] [47] [48] [49] [50] [51] [52] [53] [54]) Appendix A [55] [56] (fdl.texi
+[57] [58] [59] [60] [61] [62]) (Concept Index) [63] [64] (rlman.cps)
+(Function and Variable Index) [65] [66] (rlman.fns [67] [68]) [69] [70] )
Here is how much of TeX's memory you used:
1489 strings out of 13013
- 18350 string characters out of 97233
- 56934 words of memory out of 263001
+ 18360 string characters out of 97233
+ 58248 words of memory out of 263001
2361 multiletter control sequences out of 10000+0
31953 words of font info for 111 fonts, out of 400000 for 1000
19 hyphenation exceptions out of 1000
- 15i,8n,17p,304b,695s stack positions out of 300i,100n,500p,50000b,4000s
+ 15i,8n,17p,309b,695s stack positions out of 300i,100n,500p,50000b,4000s
-Output written on rlman.dvi (72 pages, 270424 bytes).
+Output written on rlman.dvi (74 pages, 274068 bytes).
\subsecentry{How Completing Works}{2}{6}{1}{41}
\subsecentry{Completion Functions}{2}{6}{2}{42}
\subsecentry{Completion Variables}{2}{6}{3}{43}
-\subsecentry{A Short Completion Example}{2}{6}{4}{46}
-\appendixentry{Copying This Manual}{A}{55}
-\secentry{GNU Free Documentation License}{A}{1}{55}
-\subsecentry{ADDENDUM: How to use this License for your documents}{A}{1}{1}{61}
-\unnumbchapentry{Concept Index}{2}{63}
-\unnumbchapentry{Function and Variable Index}{2}{65}
+\subsecentry{A Short Completion Example}{2}{6}{4}{47}
+\appendixentry{Copying This Manual}{A}{57}
+\secentry{GNU Free Documentation License}{A}{1}{57}
+\subsecentry{ADDENDUM: How to use this License for your documents}{A}{1}{1}{63}
+\unnumbchapentry{Concept Index}{2}{65}
+\unnumbchapentry{Function and Variable Index}{2}{67}
\entry{kill-word (M-d)}{16}{\code {kill-word (M-d)}}
\entry{backward-kill-word (M-DEL)}{16}{\code {backward-kill-word (M-\key {DEL})}}
\entry{unix-word-rubout (C-w)}{16}{\code {unix-word-rubout (C-w)}}
+\entry{unix-filename-rubout ()}{16}{\code {unix-filename-rubout ()}}
\entry{delete-horizontal-space ()}{16}{\code {delete-horizontal-space ()}}
\entry{kill-region ()}{16}{\code {kill-region ()}}
\entry{copy-region-as-kill ()}{16}{\code {copy-region-as-kill ()}}
\entry{copy-backward-word ()}{16}{\code {copy-backward-word ()}}
\entry{copy-forward-word ()}{16}{\code {copy-forward-word ()}}
-\entry{yank (C-y)}{16}{\code {yank (C-y)}}
+\entry{yank (C-y)}{17}{\code {yank (C-y)}}
\entry{yank-pop (M-y)}{17}{\code {yank-pop (M-y)}}
\entry{digit-argument (M-0, M-1, ...{} M--)}{17}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
\entry{universal-argument ()}{17}{\code {universal-argument ()}}
\initial {U}
\entry {\code {undo (C-_ or C-x C-u)}}{18}
\entry {\code {universal-argument ()}}{17}
+\entry {\code {unix-filename-rubout ()}}{16}
\entry {\code {unix-line-discard (C-u)}}{16}
\entry {\code {unix-word-rubout (C-w)}}{16}
\entry {\code {upcase-word (M-u)}}{15}
\initial {V}
\entry {\code {vi-editing-mode (M-C-j)}}{19}
\initial {Y}
-\entry {\code {yank (C-y)}}{16}
+\entry {\code {yank (C-y)}}{17}
\entry {\code {yank-last-arg (M-. or M-_)}}{14}
\entry {\code {yank-nth-arg (M-C-y)}}{14}
\entry {\code {yank-pop (M-y)}}{17}
<HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on September, 22 2003 by texi2html 1.64 -->
+<!-- Created on July, 27 2004 by texi2html 1.64 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
Karl Berry <karl@freefriends.org>
<P>
<A NAME="IDX107"></A>
-<DT><CODE>delete-horizontal-space ()</CODE>
+<DT><CODE>unix-filename-rubout ()</CODE>
<DD><A NAME="IDX108"></A>
-Delete all spaces and tabs around point. By default, this is unbound.
+Kill the word behind point, using white space and the slash character
+as the word boundaries.
+The killed text is saved on the kill-ring.
<P>
<A NAME="IDX109"></A>
-<DT><CODE>kill-region ()</CODE>
+<DT><CODE>delete-horizontal-space ()</CODE>
<DD><A NAME="IDX110"></A>
+Delete all spaces and tabs around point. By default, this is unbound.
+<P>
+
+<A NAME="IDX111"></A>
+<DT><CODE>kill-region ()</CODE>
+<DD><A NAME="IDX112"></A>
Kill the text in the current region.
By default, this command is unbound.
<P>
-<A NAME="IDX111"></A>
+<A NAME="IDX113"></A>
<DT><CODE>copy-region-as-kill ()</CODE>
-<DD><A NAME="IDX112"></A>
+<DD><A NAME="IDX114"></A>
Copy the text in the region to the kill buffer, so it can be yanked
right away. By default, this command is unbound.
<P>
-<A NAME="IDX113"></A>
+<A NAME="IDX115"></A>
<DT><CODE>copy-backward-word ()</CODE>
-<DD><A NAME="IDX114"></A>
+<DD><A NAME="IDX116"></A>
Copy the word before point to the kill buffer.
The word boundaries are the same as <CODE>backward-word</CODE>.
By default, this command is unbound.
<P>
-<A NAME="IDX115"></A>
+<A NAME="IDX117"></A>
<DT><CODE>copy-forward-word ()</CODE>
-<DD><A NAME="IDX116"></A>
+<DD><A NAME="IDX118"></A>
Copy the word following point to the kill buffer.
The word boundaries are the same as <CODE>forward-word</CODE>.
By default, this command is unbound.
<P>
-<A NAME="IDX117"></A>
+<A NAME="IDX119"></A>
<DT><CODE>yank (C-y)</CODE>
-<DD><A NAME="IDX118"></A>
+<DD><A NAME="IDX120"></A>
Yank the top of the kill ring into the buffer at point.
<P>
-<A NAME="IDX119"></A>
+<A NAME="IDX121"></A>
<DT><CODE>yank-pop (M-y)</CODE>
-<DD><A NAME="IDX120"></A>
+<DD><A NAME="IDX122"></A>
Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
</DL>
<!--docid::SEC18::-->
<DL COMPACT>
-<A NAME="IDX121"></A>
+<A NAME="IDX123"></A>
<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
-<DD><A NAME="IDX122"></A>
+<DD><A NAME="IDX124"></A>
Add this digit to the argument already accumulating, or start a new
argument. <KBD>M--</KBD> starts a negative argument.
<P>
-<A NAME="IDX123"></A>
+<A NAME="IDX125"></A>
<DT><CODE>universal-argument ()</CODE>
-<DD><A NAME="IDX124"></A>
+<DD><A NAME="IDX126"></A>
This is another way to specify an argument.
If this command is followed by one or more digits, optionally with a
leading minus sign, those digits define the argument.
<P>
<DL COMPACT>
-<A NAME="IDX125"></A>
+<A NAME="IDX127"></A>
<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
-<DD><A NAME="IDX126"></A>
+<DD><A NAME="IDX128"></A>
Attempt to perform completion on the text before point.
The actual completion performed is application-specific.
The default is filename completion.
<P>
-<A NAME="IDX127"></A>
+<A NAME="IDX129"></A>
<DT><CODE>possible-completions (M-?)</CODE>
-<DD><A NAME="IDX128"></A>
+<DD><A NAME="IDX130"></A>
List the possible completions of the text before point.
<P>
-<A NAME="IDX129"></A>
+<A NAME="IDX131"></A>
<DT><CODE>insert-completions (M-*)</CODE>
-<DD><A NAME="IDX130"></A>
+<DD><A NAME="IDX132"></A>
Insert all completions of the text before point that would have
been generated by <CODE>possible-completions</CODE>.
<P>
-<A NAME="IDX131"></A>
+<A NAME="IDX133"></A>
<DT><CODE>menu-complete ()</CODE>
-<DD><A NAME="IDX132"></A>
+<DD><A NAME="IDX134"></A>
Similar to <CODE>complete</CODE>, but replaces the word to be completed
with a single match from the list of possible completions.
Repeated execution of <CODE>menu-complete</CODE> steps through the list
by default.
<P>
-<A NAME="IDX133"></A>
+<A NAME="IDX135"></A>
<DT><CODE>delete-char-or-list ()</CODE>
-<DD><A NAME="IDX134"></A>
+<DD><A NAME="IDX136"></A>
Deletes the character under the cursor if not at the beginning or
end of the line (like <CODE>delete-char</CODE>).
If at the end of the line, behaves identically to
<!--docid::SEC20::-->
<DL COMPACT>
-<A NAME="IDX135"></A>
+<A NAME="IDX137"></A>
<DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD><A NAME="IDX136"></A>
+<DD><A NAME="IDX138"></A>
Begin saving the characters typed into the current keyboard macro.
<P>
-<A NAME="IDX137"></A>
+<A NAME="IDX139"></A>
<DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD><A NAME="IDX138"></A>
+<DD><A NAME="IDX140"></A>
Stop saving the characters typed into the current keyboard macro
and save the definition.
<P>
-<A NAME="IDX139"></A>
+<A NAME="IDX141"></A>
<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD><A NAME="IDX140"></A>
+<DD><A NAME="IDX142"></A>
Re-execute the last keyboard macro defined, by making the characters
in the macro appear as if typed at the keyboard.
<P>
<!--docid::SEC21::-->
<DL COMPACT>
-<A NAME="IDX141"></A>
+<A NAME="IDX143"></A>
<DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD><A NAME="IDX142"></A>
+<DD><A NAME="IDX144"></A>
Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
any bindings or variable assignments found there.
<P>
-<A NAME="IDX143"></A>
+<A NAME="IDX145"></A>
<DT><CODE>abort (C-g)</CODE>
-<DD><A NAME="IDX144"></A>
+<DD><A NAME="IDX146"></A>
Abort the current editing command and
ring the terminal's bell (subject to the setting of
<CODE>bell-style</CODE>).
<P>
-<A NAME="IDX145"></A>
+<A NAME="IDX147"></A>
<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
-<DD><A NAME="IDX146"></A>
+<DD><A NAME="IDX148"></A>
If the metafied character <VAR>x</VAR> is lowercase, run the command
that is bound to the corresponding uppercase character.
<P>
-<A NAME="IDX147"></A>
+<A NAME="IDX149"></A>
<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
-<DD><A NAME="IDX148"></A>
+<DD><A NAME="IDX150"></A>
Metafy the next character typed. This is for keyboards
without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
<KBD>M-f</KBD>.
<P>
-<A NAME="IDX149"></A>
+<A NAME="IDX151"></A>
<DT><CODE>undo (C-_ or C-x C-u)</CODE>
-<DD><A NAME="IDX150"></A>
+<DD><A NAME="IDX152"></A>
Incremental undo, separately remembered for each line.
<P>
-<A NAME="IDX151"></A>
+<A NAME="IDX153"></A>
<DT><CODE>revert-line (M-r)</CODE>
-<DD><A NAME="IDX152"></A>
+<DD><A NAME="IDX154"></A>
Undo all changes made to this line. This is like executing the <CODE>undo</CODE>
command enough times to get back to the beginning.
<P>
-<A NAME="IDX153"></A>
+<A NAME="IDX155"></A>
<DT><CODE>tilde-expand (M-~)</CODE>
-<DD><A NAME="IDX154"></A>
+<DD><A NAME="IDX156"></A>
Perform tilde expansion on the current word.
<P>
-<A NAME="IDX155"></A>
+<A NAME="IDX157"></A>
<DT><CODE>set-mark (C-@)</CODE>
-<DD><A NAME="IDX156"></A>
+<DD><A NAME="IDX158"></A>
Set the mark to the point. If a
numeric argument is supplied, the mark is set to that position.
<P>
-<A NAME="IDX157"></A>
+<A NAME="IDX159"></A>
<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD><A NAME="IDX158"></A>
+<DD><A NAME="IDX160"></A>
Swap the point with the mark. The current cursor position is set to
the saved position, and the old cursor position is saved as the mark.
<P>
-<A NAME="IDX159"></A>
+<A NAME="IDX161"></A>
<DT><CODE>character-search (C-])</CODE>
-<DD><A NAME="IDX160"></A>
+<DD><A NAME="IDX162"></A>
A character is read and point is moved to the next occurrence of that
character. A negative count searches for previous occurrences.
<P>
-<A NAME="IDX161"></A>
+<A NAME="IDX163"></A>
<DT><CODE>character-search-backward (M-C-])</CODE>
-<DD><A NAME="IDX162"></A>
+<DD><A NAME="IDX164"></A>
A character is read and point is moved to the previous occurrence
of that character. A negative count searches for subsequent
occurrences.
<P>
-<A NAME="IDX163"></A>
+<A NAME="IDX165"></A>
<DT><CODE>insert-comment (M-#)</CODE>
-<DD><A NAME="IDX164"></A>
+<DD><A NAME="IDX166"></A>
Without a numeric argument, the value of the <CODE>comment-begin</CODE>
variable is inserted at the beginning of the current line.
If a numeric argument is supplied, this command acts as a toggle: if
In either case, the line is accepted as if a newline had been typed.
<P>
-<A NAME="IDX165"></A>
+<A NAME="IDX167"></A>
<DT><CODE>dump-functions ()</CODE>
-<DD><A NAME="IDX166"></A>
+<DD><A NAME="IDX168"></A>
Print all of the functions and their key bindings to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX167"></A>
+<A NAME="IDX169"></A>
<DT><CODE>dump-variables ()</CODE>
-<DD><A NAME="IDX168"></A>
+<DD><A NAME="IDX170"></A>
Print all of the settable variables and their values to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX169"></A>
+<A NAME="IDX171"></A>
<DT><CODE>dump-macros ()</CODE>
-<DD><A NAME="IDX170"></A>
+<DD><A NAME="IDX172"></A>
Print all of the Readline key sequences bound to macros and the
strings they output. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
<P>
-<A NAME="IDX171"></A>
+<A NAME="IDX173"></A>
<DT><CODE>emacs-editing-mode (C-e)</CODE>
-<DD><A NAME="IDX172"></A>
+<DD><A NAME="IDX174"></A>
When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE>
editing mode.
<P>
-<A NAME="IDX173"></A>
+<A NAME="IDX175"></A>
<DT><CODE>vi-editing-mode (M-C-j)</CODE>
-<DD><A NAME="IDX174"></A>
+<DD><A NAME="IDX176"></A>
When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE>
editing mode.
<P>
<!--docid::SEC24::-->
<P>
-<A NAME="IDX175"></A>
+<A NAME="IDX177"></A>
<center>
Version 1.2, November 2002
</center>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
<P></P>
<BR>
<FONT SIZE="-1">
This document was generated
-by <I>Chet Ramey</I> on <I>September, 22 2003</I>
+by <I>Chet Ramey</I> on <I>July, 27 2004</I>
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>
./rluserman.texi.
This manual describes the end user interface of the GNU Readline Library
-(version 5.0, 19 September 2003), a library which aids in the
-consistency of user interface across discrete programs which provide a
-command line interface.
+(version 5.0, 28 January 2004), a library which aids in the consistency
+of user interface across discrete programs which provide a command line
+interface.
- Copyright (C) 1988-2003 Free Software Foundation, Inc.
+ Copyright (C) 1988-2004 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
+`unix-filename-rubout ()'
+ Kill the word behind point, using white space and the slash
+ character as the word boundaries. The killed text is saved on the
+ kill-ring.
+
`delete-horizontal-space ()'
Delete all spaces and tabs around point. By default, this is
unbound.
\1f
Tag Table:
-Node: Top\7f1341
-Node: Command Line Editing\7f1776
-Node: Introduction and Notation\7f2418
-Node: Readline Interaction\7f4037
-Node: Readline Bare Essentials\7f5225
-Node: Readline Movement Commands\7f7007
-Node: Readline Killing Commands\7f7965
-Node: Readline Arguments\7f9876
-Node: Searching\7f10913
-Node: Readline Init File\7f13057
-Node: Readline Init File Syntax\7f14119
-Node: Conditional Init Constructs\7f25483
-Node: Sample Init File\7f28009
-Node: Bindable Readline Commands\7f31194
-Node: Commands For Moving\7f32245
-Node: Commands For History\7f33096
-Node: Commands For Text\7f35956
-Node: Commands For Killing\7f38672
-Node: Numeric Arguments\7f40624
-Node: Commands For Completion\7f41753
-Node: Keyboard Macros\7f43287
-Node: Miscellaneous Commands\7f43848
-Node: Readline vi Mode\7f47199
-Node: Copying This Manual\7f48115
-Node: GNU Free Documentation License\7f48325
+Node: Top\7f1339
+Node: Command Line Editing\7f1774
+Node: Introduction and Notation\7f2416
+Node: Readline Interaction\7f4035
+Node: Readline Bare Essentials\7f5223
+Node: Readline Movement Commands\7f7005
+Node: Readline Killing Commands\7f7963
+Node: Readline Arguments\7f9874
+Node: Searching\7f10911
+Node: Readline Init File\7f13055
+Node: Readline Init File Syntax\7f14117
+Node: Conditional Init Constructs\7f25481
+Node: Sample Init File\7f28007
+Node: Bindable Readline Commands\7f31192
+Node: Commands For Moving\7f32243
+Node: Commands For History\7f33094
+Node: Commands For Text\7f35954
+Node: Commands For Killing\7f38670
+Node: Numeric Arguments\7f40802
+Node: Commands For Completion\7f41931
+Node: Keyboard Macros\7f43465
+Node: Miscellaneous Commands\7f44026
+Node: Readline vi Mode\7f47377
+Node: Copying This Manual\7f48293
+Node: GNU Free Documentation License\7f48503
\1f
End Tag Table
-This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04
-**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rluserma
-n.texi
+This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31
+**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlu
+serman.texi
-(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rluserman
-.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
+(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlus
+erman.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics,
\bindingoffset=\dimen16
\normaloffset=\dimen17
\pagewidth=\dimen18
[21] [22] [23] [24] [25] [26]) [27] [28] )
Here is how much of TeX's memory you used:
1398 strings out of 13013
- 16279 string characters out of 97233
- 44937 words of memory out of 263001
+ 16289 string characters out of 97233
+ 44933 words of memory out of 263001
2276 multiletter control sequences out of 10000+0
31953 words of font info for 111 fonts, out of 400000 for 1000
19 hyphenation exceptions out of 1000
- 13i,8n,10p,308b,695s stack positions out of 300i,100n,500p,50000b,4000s
+ 13i,8n,10p,313b,695s stack positions out of 300i,100n,500p,50000b,4000s
-Output written on rluserman.dvi (32 pages, 91652 bytes).
+Output written on rluserman.dvi (32 pages, 91852 bytes).
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -o rluserman.ps rluserman.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2003.09.22:0904
+%DVIPSSource: TeX output 2004.07.27:0931
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
%%Page: 1 1
1 0 bop 75 659 a Fp(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p
75 709 1800 17 v 936 757 a Fo(Edition)17 b(5.0,)c(for)i
-Fn(Readline)f(Library)g Fo(V)l(ersion)i(5.0.)1559 811
-y(Septem)o(b)q(er)g(2003)75 2467 y Fm(Chet)22 b(Ramey)-6
-b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75
+Fn(Readline)f(Library)g Fo(V)l(ersion)i(5.0.)1609 811
+y(Jan)o(uary)f(2004)75 2467 y Fm(Chet)22 b(Ramey)-6 b(,)23
+b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75
2534 y(Brian)h(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6
b(oundation)p 75 2570 1800 9 v eop
%%Page: 2 2
-2 1 bop 75 1512 a Fo(This)15 b(man)o(ual)g(describ)q(es)i(the)d(end)i
-(user)f(in)o(terface)g(of)f(the)h(GNU)f(Readline)i(Library)f(\(v)o
-(ersion)g(5.0,)f(19)75 1567 y(Septem)o(b)q(er)19 b(2003\),)e(a)h
-(library)h(whic)o(h)g(aids)g(in)g(the)f(consistency)h(of)f(user)g(in)o
-(terface)h(across)e(discrete)75 1621 y(programs)d(whic)o(h)i(pro)o
-(vide)g(a)f(command)g(line)i(in)o(terface.)75 1689 y(Cop)o(yrigh)o(t)
-301 1688 y(c)289 1689 y Fl(\015)d Fo(1988-2003)f(F)l(ree)i(Soft)o(w)o
-(are)f(F)l(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted)
-g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h
-(man)o(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h
-(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h
+2 1 bop 75 1512 a Fo(This)20 b(man)o(ual)f(describ)q(es)i(the)f(end)g
+(user)f(in)o(terface)h(of)f(the)g(GNU)g(Readline)i(Library)f(\(v)o
+(ersion)f(5.0,)75 1567 y(28)e(Jan)o(uary)g(2004\),)f(a)h(library)h
+(whic)o(h)g(aids)f(in)h(the)g(consistency)g(of)f(user)g(in)o(terface)h
+(across)e(discrete)75 1621 y(programs)e(whic)o(h)i(pro)o(vide)g(a)f
+(command)g(line)i(in)o(terface.)75 1689 y(Cop)o(yrigh)o(t)301
+1688 y(c)289 1689 y Fl(\015)d Fo(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f
+(F)l(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f
+(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o
+(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f
+(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h
(copies.)195 1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)
h(distribute)h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195
1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g
Fn(emacs)e Fo(mo)q(de;)h Fn(vi)g Fo(mo)q(de)h(do)q(es)g(o)o(v)o
(erwrite)315 204 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15
b(call)h(to)f Fn(readline\(\))f Fo(starts)f(in)k(insert)e(mo)q(de.)315
-271 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
+269 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
Fn(self-insert)f Fo(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315
-326 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
-b(Characters)20 b(b)q(ound)i(to)e Fn(backward-)315 381
+324 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
+b(Characters)20 b(b)q(ound)i(to)e Fn(backward-)315 379
y(delete-char)14 b Fo(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q
-(oin)o(t)h(with)f(a)g(space.)315 448 y(By)g(default,)h(this)f(command)g
-(is)h(un)o(b)q(ound.)75 559 y Fc(1.4.4)30 b(Killing)20
-b(And)h(Y)-5 b(anking)75 680 y Fn(kill-line)14 b(\(C-k\))315
-735 y Fo(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
-(the)g(line.)75 814 y Fn(backward-kill-line)e(\(C-x)h(Rubout\))315
-869 y Fo(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
-(line.)75 948 y Fn(unix-line-discard)e(\(C-u\))315 1003
+(oin)o(t)h(with)f(a)g(space.)315 444 y(By)g(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 550 y Fc(1.4.4)30 b(Killing)20
+b(And)h(Y)-5 b(anking)75 669 y Fn(kill-line)14 b(\(C-k\))315
+724 y Fo(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
+(the)g(line.)75 800 y Fn(backward-kill-line)e(\(C-x)h(Rubout\))315
+854 y Fo(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
+(line.)75 930 y Fn(unix-line-discard)e(\(C-u\))315 985
y Fo(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
-(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1082 y Fn(kill-whole-line)
-e(\(\))315 1137 y Fo(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
+(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1060 y Fn(kill-whole-line)
+e(\(\))315 1115 y Fo(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29
-b(By)19 b(default,)315 1192 y(this)d(is)f(un)o(b)q(ound.)75
-1271 y Fn(kill-word)f(\(M-d\))315 1325 y Fo(Kill)j(from)d(p)q(oin)o(t)h
+b(By)19 b(default,)315 1170 y(this)d(is)f(un)o(b)q(ound.)75
+1245 y Fn(kill-word)f(\(M-d\))315 1300 y Fo(Kill)j(from)d(p)q(oin)o(t)h
(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o
-(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1380 y(of)h(the)g(next)g(w)o
+(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1355 y(of)h(the)g(next)g(w)o
(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g
-Fn(forward-word)p Fo(.)75 1459 y Fn(backward-kill-word)e(\(M-)592
-1457 y Ff(h)p 603 1431 73 2 v 603 1459 a Fe(DEL)p 603
-1467 V 674 1457 a Ff(i)689 1459 y Fn(\))315 1514 y Fo(Kill)k(the)d(w)o
+Fn(forward-word)p Fo(.)75 1430 y Fn(backward-kill-word)e(\(M-)592
+1428 y Ff(h)p 603 1402 73 2 v 603 1430 a Fe(DEL)p 603
+1438 V 674 1428 a Ff(i)689 1430 y Fn(\))315 1485 y Fo(Kill)k(the)d(w)o
(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f
-(the)h(same)f(as)g Fn(backward-word)p Fo(.)75 1593 y
-Fn(unix-word-rubout)f(\(C-w\))315 1648 y Fo(Kill)18 b(the)e(w)o(ord)f
+(the)h(same)f(as)g Fn(backward-word)p Fo(.)75 1560 y
+Fn(unix-word-rubout)f(\(C-w\))315 1615 y Fo(Kill)18 b(the)e(w)o(ord)f
(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g
-(b)q(oundary)l(.)23 b(The)16 b(killed)315 1703 y(text)f(is)g(sa)o(v)o
-(ed)g(on)g(the)h(kill-ring.)75 1782 y Fn(delete-horizontal-space)c
-(\(\))315 1836 y Fo(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q
-(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75
-1915 y Fn(kill-region)e(\(\))315 1970 y Fo(Kill)j(the)f(text)e(in)i
-(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g
-(is)h(un)o(b)q(ound.)75 2049 y Fn(copy-region-as-kill)d(\(\))315
-2104 y Fo(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
-(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o
-(a)o(y)l(.)315 2159 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
-(ound.)75 2238 y Fn(copy-backward-word)d(\(\))315 2293
-y Fo(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i
-(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
-2348 y(same)c(as)g Fn(backward-word)p Fo(.)j(By)d(default,)g(this)h
-(command)f(is)h(un)o(b)q(ound.)75 2427 y Fn(copy-forward-word)d(\(\))
-315 2481 y Fo(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
+(b)q(oundary)l(.)23 b(The)16 b(killed)315 1670 y(text)f(is)g(sa)o(v)o
+(ed)g(on)g(the)h(kill-ring.)75 1745 y Fn(unix-filename-rubout)c(\(\))
+315 1800 y Fo(Kill)20 b(the)f(w)o(ord)e(b)q(ehind)j(p)q(oin)o(t,)f
+(using)g(white)g(space)f(and)h(the)f(slash)h(c)o(haracter)e(as)h(the)
+315 1855 y(w)o(ord)d(b)q(oundaries.)21 b(The)15 b(killed)j(text)c(is)i
+(sa)o(v)o(ed)f(on)g(the)g(kill-ring.)75 1930 y Fn
+(delete-horizontal-space)d(\(\))315 1985 y Fo(Delete)k(all)g(spaces)f
+(and)h(tabs)e(around)i(p)q(oin)o(t.)k(By)15 b(default,)h(this)f(is)h
+(un)o(b)q(ound.)75 2060 y Fn(kill-region)e(\(\))315 2115
+y Fo(Kill)j(the)f(text)e(in)i(the)g(curren)o(t)f(region.)20
+b(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+2190 y Fn(copy-region-as-kill)d(\(\))315 2245 y Fo(Cop)o(y)j(the)i
+(text)e(in)i(the)f(region)g(to)g(the)g(kill)h(bu\013er,)f(so)g(it)g
+(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o(a)o(y)l(.)315
+2300 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+2375 y Fn(copy-backward-word)d(\(\))315 2430 y Fo(Cop)o(y)19
+b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i(kill)h
+(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
+2485 y(same)c(as)g Fn(backward-word)p Fo(.)j(By)d(default,)g(this)h
+(command)f(is)h(un)o(b)q(ound.)75 2560 y Fn(copy-forward-word)d(\(\))
+315 2615 y Fo(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e
-(the)315 2536 y(same)g(as)g Fn(forward-word)p Fo(.)j(By)d(default,)h
-(this)f(command)g(is)h(un)o(b)q(ound.)75 2615 y Fn(yank)f(\(C-y\))315
-2670 y Fo(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the)
-h(bu\013er)f(at)f(p)q(oin)o(t.)p eop
+(the)315 2670 y(same)g(as)g Fn(forward-word)p Fo(.)j(By)d(default,)h
+(this)f(command)g(is)h(un)o(b)q(ound.)p eop
%%Page: 17 21
17 20 bop 75 -58 a Fo(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(17)75 149 y Fn(yank-pop)14 b(\(M-y\))315 204 y Fo(Rotate)i(the)h
-(kill-ring,)j(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17
-b(can)h(only)g(do)f(this)h(if)f(the)h(prior)315 259 y(command)d(is)h
-Fn(yank)e Fo(or)h Fn(yank-pop)p Fo(.)75 382 y Fc(1.4.5)30
-b(Sp)r(ecifying)20 b(Numeric)h(Argumen)n(ts)75 507 y
-Fn(digit-argument)13 b(\()p Fg(M-0)p Fn(,)i Fg(M-1)p
-Fn(,)f(...)h Fg(M--)p Fn(\))315 562 y Fo(Add)f(this)g(digit)g(to)f(the)
-h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h
-(argumen)o(t.)315 616 y Fg(M--)h Fo(starts)f(a)h(negativ)o(e)g(argumen)
-o(t.)75 702 y Fn(universal-argument)e(\(\))315 756 y
-Fo(This)g(is)h(another)e(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o
-(t.)18 b(If)13 b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
-811 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us)
-f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 866
+b(17)75 149 y Fn(yank)15 b(\(C-y\))315 204 y Fo(Y)l(ank)g(the)h(top)f
+(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.)
+75 276 y Fn(yank-pop)g(\(M-y\))315 331 y Fo(Rotate)i(the)h(kill-ring,)j
+(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
+(this)h(if)f(the)h(prior)315 386 y(command)d(is)h Fn(yank)e
+Fo(or)h Fn(yank-pop)p Fo(.)75 486 y Fc(1.4.5)30 b(Sp)r(ecifying)20
+b(Numeric)h(Argumen)n(ts)75 604 y Fn(digit-argument)13
+b(\()p Fg(M-0)p Fn(,)i Fg(M-1)p Fn(,)f(...)h Fg(M--)p
+Fn(\))315 658 y Fo(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e
+(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315
+713 y Fg(M--)h Fo(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75
+785 y Fn(universal-argument)e(\(\))315 840 y Fo(This)g(is)h(another)e
+(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
+b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
+895 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us)
+f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 949
y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
-(digits,)g(executing)g Fn(universal-argument)315 921
+(digits,)g(executing)g Fn(universal-argument)315 1004
y Fo(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h
(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
-976 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f
-(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
-1030 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
+1059 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
+f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
+1114 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
-1085 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
+1169 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
(executing)i(this)f(function)h(the)e(\014rst)h(time)315
-1140 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
+1223 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315
-1195 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
-(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1318 y Fc(1.4.6)30
+1278 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
+(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1378 y Fc(1.4.6)30
b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5
-b(ou)75 1443 y Fn(complete)14 b(\()305 1441 y Ff(h)p
-317 1414 74 2 v 317 1443 a Fe(T)m(AB)p 317 1450 V 389
-1441 a Ff(i)404 1443 y Fn(\))315 1497 y Fo(A)o(ttempt)c(to)h(p)q
+b(ou)75 1496 y Fn(complete)14 b(\()305 1494 y Ff(h)p
+317 1468 74 2 v 317 1496 a Fe(T)m(AB)p 317 1504 V 389
+1494 a Ff(i)404 1496 y Fn(\))315 1551 y Fo(A)o(ttempt)c(to)h(p)q
(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19
-b(The)11 b(actual)h(completion)315 1552 y(p)q(erformed)j(is)h
+b(The)11 b(actual)h(completion)315 1606 y(p)q(erformed)j(is)h
(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename)
-g(completion.)75 1637 y Fn(possible-completions)c(\(M-?\))315
-1692 y Fo(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
-q(efore)h(p)q(oin)o(t.)75 1777 y Fn(insert-completions)d(\(M-*\))315
-1832 y Fo(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
+g(completion.)75 1678 y Fn(possible-completions)c(\(M-?\))315
+1732 y Fo(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
+q(efore)h(p)q(oin)o(t.)75 1804 y Fn(insert-completions)d(\(M-*\))315
+1859 y Fo(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315
-1887 y(b)o(y)f Fn(possible-completions)p Fo(.)75 1972
-y Fn(menu-complete)e(\(\))315 2027 y Fo(Similar)g(to)f
+1914 y(b)o(y)f Fn(possible-completions)p Fo(.)75 1985
+y Fn(menu-complete)e(\(\))315 2040 y Fo(Similar)g(to)f
Fn(complete)p Fo(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
-(completed)f(with)h(a)e(single)j(matc)o(h)315 2082 y(from)k(the)h(list)
+(completed)f(with)h(a)e(single)j(matc)o(h)315 2095 y(from)k(the)h(list)
h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19
-b(execution)h(of)f Fn(menu-complete)315 2136 y Fo(steps)h(through)g
+b(execution)h(of)f Fn(menu-complete)315 2150 y Fo(steps)h(through)g
(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f
-(matc)o(h)f(in)i(turn.)315 2191 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
+(matc)o(h)f(in)i(turn.)315 2205 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f
-(the)i(setting)315 2246 y(of)f Fn(bell-style)p Fo(\))e(and)i(the)g
+(the)i(setting)315 2259 y(of)f Fn(bell-style)p Fo(\))e(and)i(the)g
(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g
-Fd(n)i Fo(mo)o(v)o(es)e Fd(n)315 2301 y Fo(p)q(ositions)h(forw)o(ard)e
+Fd(n)i Fo(mo)o(v)o(es)e Fd(n)315 2314 y Fo(p)q(ositions)h(forw)o(ard)e
(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g
-(ma)o(y)g(b)q(e)h(used)g(to)315 2356 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
+(ma)o(y)g(b)q(e)h(used)g(to)315 2369 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f
-(b)q(e)h(b)q(ound)g(to)315 2408 y Ff(h)p 327 2382 V 327
-2410 a Fe(T)m(AB)p 327 2418 V 399 2408 a Ff(i)414 2410
+(b)q(e)h(b)q(ound)g(to)315 2422 y Ff(h)p 327 2396 V 327
+2424 a Fe(T)m(AB)p 327 2431 V 399 2422 a Ff(i)414 2424
y Fo(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75
2496 y Fn(delete-char-or-list)e(\(\))315 2550 y Fo(Deletes)h(the)f(c)o
(haracter)g(under)h(the)g(cursor)f(if)h(not)f(at)g(the)g(b)q(eginning)j
+++ /dev/null
-/* posixdir.h -- Posix directory reading includes and defines. */
-
-/* Copyright (C) 1987,1991 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 2, 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; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
-
-#if !defined (_POSIXDIR_H_)
-#define _POSIXDIR_H_
-
-#if defined (HAVE_DIRENT_H)
-# include <dirent.h>
-# if defined (HAVE_STRUCT_DIRENT_D_NAMLEN)
-# define D_NAMLEN(d) ((d)->d_namlen)
-# else
-# define D_NAMLEN(d) (strlen ((d)->d_name))
-# endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */
-#else
-# if defined (HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# endif
-# if defined (HAVE_SYS_DIR_H)
-# include <sys/dir.h>
-# endif
-# if defined (HAVE_NDIR_H)
-# include <ndir.h>
-# endif
-# if !defined (dirent)
-# define dirent direct
-# endif /* !dirent */
-# define D_NAMLEN(d) ((d)->d_namlen)
-#endif /* !HAVE_DIRENT_H */
-
-#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO)
-# define d_fileno d_ino
-#endif
-
-#if defined (_POSIX_SOURCE) && (!defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO))
-/* Posix does not require that the d_ino field be present, and some
- systems do not provide it. */
-# define REAL_DIR_ENTRY(dp) 1
-#else
-# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
-#endif /* _POSIX_SOURCE */
-
-#endif /* !_POSIXDIR_H_ */
--- /dev/null
+../../include/posixdir.h
\ No newline at end of file
+++ /dev/null
-/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */
-
-/* Copyright (C) 1987,1991 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 2, 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; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#ifndef _POSIXJMP_H_
-#define _POSIXJMP_H_
-
-#include <setjmp.h>
-
-/* This *must* be included *after* config.h */
-
-#if defined (HAVE_POSIX_SIGSETJMP)
-# define procenv_t sigjmp_buf
-# if !defined (__OPENNT)
-# undef setjmp
-# define setjmp(x) sigsetjmp((x), 1)
-# undef longjmp
-# define longjmp(x, n) siglongjmp((x), (n))
-# endif /* !__OPENNT */
-#else
-# define procenv_t jmp_buf
-#endif
-
-#endif /* _POSIXJMP_H_ */
--- /dev/null
+../../include/posixjmp.h
\ No newline at end of file
+++ /dev/null
-/* posixstat.h -- Posix stat(2) definitions for systems that
- don't have them. */
-
-/* Copyright (C) 1987,1991 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 2, 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; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-/* This file should be included instead of <sys/stat.h>.
- It relies on the local sys/stat.h to work though. */
-#if !defined (_POSIXSTAT_H_)
-#define _POSIXSTAT_H_
-
-#include <sys/stat.h>
-
-#if defined (STAT_MACROS_BROKEN)
-# undef S_ISBLK
-# undef S_ISCHR
-# undef S_ISDIR
-# undef S_ISFIFO
-# undef S_ISREG
-# undef S_ISLNK
-#endif /* STAT_MACROS_BROKEN */
-
-/* These are guaranteed to work only on isc386 */
-#if !defined (S_IFDIR) && !defined (S_ISDIR)
-# define S_IFDIR 0040000
-#endif /* !S_IFDIR && !S_ISDIR */
-#if !defined (S_IFMT)
-# define S_IFMT 0170000
-#endif /* !S_IFMT */
-
-/* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */
-
-/* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
- do not provide the S_IS* macros that Posix requires. */
-
-#if defined (_S_IFMT) && !defined (S_IFMT)
-#define S_IFMT _S_IFMT
-#endif
-#if defined (_S_IFIFO) && !defined (S_IFIFO)
-#define S_IFIFO _S_IFIFO
-#endif
-#if defined (_S_IFCHR) && !defined (S_IFCHR)
-#define S_IFCHR _S_IFCHR
-#endif
-#if defined (_S_IFDIR) && !defined (S_IFDIR)
-#define S_IFDIR _S_IFDIR
-#endif
-#if defined (_S_IFBLK) && !defined (S_IFBLK)
-#define S_IFBLK _S_IFBLK
-#endif
-#if defined (_S_IFREG) && !defined (S_IFREG)
-#define S_IFREG _S_IFREG
-#endif
-#if defined (_S_IFLNK) && !defined (S_IFLNK)
-#define S_IFLNK _S_IFLNK
-#endif
-#if defined (_S_IFSOCK) && !defined (S_IFSOCK)
-#define S_IFSOCK _S_IFSOCK
-#endif
-
-/* Test for each symbol individually and define the ones necessary (some
- systems claiming Posix compatibility define some but not all). */
-
-#if defined (S_IFBLK) && !defined (S_ISBLK)
-#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */
-#endif
-
-#if defined (S_IFCHR) && !defined (S_ISCHR)
-#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */
-#endif
-
-#if defined (S_IFDIR) && !defined (S_ISDIR)
-#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */
-#endif
-
-#if defined (S_IFREG) && !defined (S_ISREG)
-#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */
-#endif
-
-#if defined (S_IFIFO) && !defined (S_ISFIFO)
-#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */
-#endif
-
-#if defined (S_IFLNK) && !defined (S_ISLNK)
-#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */
-#endif
-
-#if defined (S_IFSOCK) && !defined (S_ISSOCK)
-#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */
-#endif
-
-/*
- * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes
- */
-
-#if !defined (S_IRWXU)
-# if !defined (S_IREAD)
-# define S_IREAD 00400
-# define S_IWRITE 00200
-# define S_IEXEC 00100
-# endif /* S_IREAD */
-
-# if !defined (S_IRUSR)
-# define S_IRUSR S_IREAD /* read, owner */
-# define S_IWUSR S_IWRITE /* write, owner */
-# define S_IXUSR S_IEXEC /* execute, owner */
-
-# define S_IRGRP (S_IREAD >> 3) /* read, group */
-# define S_IWGRP (S_IWRITE >> 3) /* write, group */
-# define S_IXGRP (S_IEXEC >> 3) /* execute, group */
-
-# define S_IROTH (S_IREAD >> 6) /* read, other */
-# define S_IWOTH (S_IWRITE >> 6) /* write, other */
-# define S_IXOTH (S_IEXEC >> 6) /* execute, other */
-# endif /* !S_IRUSR */
-
-# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
-# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
-# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
-#endif /* !S_IRWXU */
-
-/* These are non-standard, but are used in builtins.c$symbolic_umask() */
-#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
-#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
-#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
-
-#endif /* _POSIXSTAT_H_ */
--- /dev/null
+../../include/posixstat.h
\ No newline at end of file
+++ /dev/null
-/* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */
-
-/* Copyright (C) 1988,1989 Free Software Foundation, Inc.
-
- This file is part of GNU Readline, a library 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 the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- Readline is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#if defined (HAVE_UNISTD_H)
-# ifdef _MINIX
-# include <sys/types.h>
-# endif
-# include <unistd.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <sys/types.h>
-#include <pwd.h>
-
-#include "tilde.h"
-
-#if defined (TEST) || defined (STATIC_MALLOC)
-static void *xmalloc (), *xrealloc ();
-#else
-# include "xmalloc.h"
-#endif /* TEST || STATIC_MALLOC */
-
-#if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid PARAMS((uid_t));
-extern struct passwd *getpwnam PARAMS((const char *));
-#endif /* !HAVE_GETPW_DECLS */
-
-#if !defined (savestring)
-#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
-#endif /* !savestring */
-
-#if !defined (NULL)
-# if defined (__STDC__)
-# define NULL ((void *) 0)
-# else
-# define NULL 0x0
-# endif /* !__STDC__ */
-#endif /* !NULL */
-
-/* If being compiled as part of bash, these will be satisfied from
- variables.o. If being compiled as part of readline, they will
- be satisfied from shell.o. */
-extern char *sh_get_home_dir PARAMS((void));
-extern char *sh_get_env_value PARAMS((const char *));
-
-/* The default value of tilde_additional_prefixes. This is set to
- whitespace preceding a tilde so that simple programs which do not
- perform any word separation get desired behaviour. */
-static const char *default_prefixes[] =
- { " ~", "\t~", (const char *)NULL };
-
-/* The default value of tilde_additional_suffixes. This is set to
- whitespace or newline so that simple programs which do not
- perform any word separation get desired behaviour. */
-static const char *default_suffixes[] =
- { " ", "\n", (const char *)NULL };
-
-/* If non-null, this contains the address of a function that the application
- wants called before trying the standard tilde expansions. The function
- is called with the text sans tilde, and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if the expansion fails. */
-tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL;
-
-/* If non-null, this contains the address of a function to call if the
- standard meaning for expanding a tilde fails. The function is called
- with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if there is no expansion. */
-tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL;
-
-/* When non-null, this is a NULL terminated array of strings which
- are duplicates for a tilde prefix. Bash uses this to expand
- `=~' and `:~'. */
-char **tilde_additional_prefixes = (char **)default_prefixes;
-
-/* When non-null, this is a NULL terminated array of strings which match
- the end of a username, instead of just "/". Bash sets this to
- `:' and `=~'. */
-char **tilde_additional_suffixes = (char **)default_suffixes;
-
-static int tilde_find_prefix PARAMS((const char *, int *));
-static int tilde_find_suffix PARAMS((const char *));
-static char *isolate_tilde_prefix PARAMS((const char *, int *));
-static char *glue_prefix_and_suffix PARAMS((char *, const char *, int));
-
-/* Find the start of a tilde expansion in STRING, and return the index of
- the tilde which starts the expansion. Place the length of the text
- which identified this tilde starter in LEN, excluding the tilde itself. */
-static int
-tilde_find_prefix (string, len)
- const char *string;
- int *len;
-{
- register int i, j, string_len;
- register char **prefixes;
-
- prefixes = tilde_additional_prefixes;
-
- string_len = strlen (string);
- *len = 0;
-
- if (*string == '\0' || *string == '~')
- return (0);
-
- if (prefixes)
- {
- for (i = 0; i < string_len; i++)
- {
- for (j = 0; prefixes[j]; j++)
- {
- if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0)
- {
- *len = strlen (prefixes[j]) - 1;
- return (i + *len);
- }
- }
- }
- }
- return (string_len);
-}
-
-/* Find the end of a tilde expansion in STRING, and return the index of
- the character which ends the tilde definition. */
-static int
-tilde_find_suffix (string)
- const char *string;
-{
- register int i, j, string_len;
- register char **suffixes;
-
- suffixes = tilde_additional_suffixes;
- string_len = strlen (string);
-
- for (i = 0; i < string_len; i++)
- {
-#if defined (__MSDOS__)
- if (string[i] == '/' || string[i] == '\\' /* || !string[i] */)
-#else
- if (string[i] == '/' /* || !string[i] */)
-#endif
- break;
-
- for (j = 0; suffixes && suffixes[j]; j++)
- {
- if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0)
- return (i);
- }
- }
- return (i);
-}
-
-/* Return a new string which is the result of tilde expanding STRING. */
-char *
-tilde_expand (string)
- const char *string;
-{
- char *result;
- int result_size, result_index;
-
- result_index = result_size = 0;
- if (result = strchr (string, '~'))
- result = (char *)xmalloc (result_size = (strlen (string) + 16));
- else
- result = (char *)xmalloc (result_size = (strlen (string) + 1));
-
- /* Scan through STRING expanding tildes as we come to them. */
- while (1)
- {
- register int start, end;
- char *tilde_word, *expansion;
- int len;
-
- /* Make START point to the tilde which starts the expansion. */
- start = tilde_find_prefix (string, &len);
-
- /* Copy the skipped text into the result. */
- if ((result_index + start + 1) > result_size)
- result = (char *)xrealloc (result, 1 + (result_size += (start + 20)));
-
- strncpy (result + result_index, string, start);
- result_index += start;
-
- /* Advance STRING to the starting tilde. */
- string += start;
-
- /* Make END be the index of one after the last character of the
- username. */
- end = tilde_find_suffix (string);
-
- /* If both START and END are zero, we are all done. */
- if (!start && !end)
- break;
-
- /* Expand the entire tilde word, and copy it into RESULT. */
- tilde_word = (char *)xmalloc (1 + end);
- strncpy (tilde_word, string, end);
- tilde_word[end] = '\0';
- string += end;
-
- expansion = tilde_expand_word (tilde_word);
- free (tilde_word);
-
- len = strlen (expansion);
-#ifdef __CYGWIN__
- /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
- $HOME for `user' is /. On cygwin, // denotes a network drive. */
- if (len > 1 || *expansion != '/' || *string != '/')
-#endif
- {
- if ((result_index + len + 1) > result_size)
- result = (char *)xrealloc (result, 1 + (result_size += (len + 20)));
-
- strcpy (result + result_index, expansion);
- result_index += len;
- }
- free (expansion);
- }
-
- result[result_index] = '\0';
-
- return (result);
-}
-
-/* Take FNAME and return the tilde prefix we want expanded. If LENP is
- non-null, the index of the end of the prefix into FNAME is returned in
- the location it points to. */
-static char *
-isolate_tilde_prefix (fname, lenp)
- const char *fname;
- int *lenp;
-{
- char *ret;
- int i;
-
- ret = (char *)xmalloc (strlen (fname));
-#if defined (__MSDOS__)
- for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
-#else
- for (i = 1; fname[i] && fname[i] != '/'; i++)
-#endif
- ret[i - 1] = fname[i];
- ret[i - 1] = '\0';
- if (lenp)
- *lenp = i;
- return ret;
-}
-
-/* Return a string that is PREFIX concatenated with SUFFIX starting at
- SUFFIND. */
-static char *
-glue_prefix_and_suffix (prefix, suffix, suffind)
- char *prefix;
- const char *suffix;
- int suffind;
-{
- char *ret;
- int plen, slen;
-
- plen = (prefix && *prefix) ? strlen (prefix) : 0;
- slen = strlen (suffix + suffind);
- ret = (char *)xmalloc (plen + slen + 1);
- if (plen)
- strcpy (ret, prefix);
- strcpy (ret + plen, suffix + suffind);
- return ret;
-}
-
-/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
- tilde. If there is no expansion, call tilde_expansion_failure_hook.
- This always returns a newly-allocated string, never static storage. */
-char *
-tilde_expand_word (filename)
- const char *filename;
-{
- char *dirname, *expansion, *username;
- int user_len;
- struct passwd *user_entry;
-
- if (filename == 0)
- return ((char *)NULL);
-
- if (*filename != '~')
- return (savestring (filename));
-
- /* A leading `~/' or a bare `~' is *always* translated to the value of
- $HOME or the home directory of the current user, regardless of any
- preexpansion hook. */
- if (filename[1] == '\0' || filename[1] == '/')
- {
- /* Prefix $HOME to the rest of the string. */
- expansion = sh_get_env_value ("HOME");
-
- /* If there is no HOME variable, look up the directory in
- the password database. */
- if (expansion == 0)
- expansion = sh_get_home_dir ();
-
- return (glue_prefix_and_suffix (expansion, filename, 1));
- }
-
- username = isolate_tilde_prefix (filename, &user_len);
-
- if (tilde_expansion_preexpansion_hook)
- {
- expansion = (*tilde_expansion_preexpansion_hook) (username);
- if (expansion)
- {
- dirname = glue_prefix_and_suffix (expansion, filename, user_len);
- free (username);
- free (expansion);
- return (dirname);
- }
- }
-
- /* No preexpansion hook, or the preexpansion hook failed. Look in the
- password database. */
- dirname = (char *)NULL;
- user_entry = getpwnam (username);
- if (user_entry == 0)
- {
- /* If the calling program has a special syntax for expanding tildes,
- and we couldn't find a standard expansion, then let them try. */
- if (tilde_expansion_failure_hook)
- {
- expansion = (*tilde_expansion_failure_hook) (username);
- if (expansion)
- {
- dirname = glue_prefix_and_suffix (expansion, filename, user_len);
- free (expansion);
- }
- }
- free (username);
- /* If we don't have a failure hook, or if the failure hook did not
- expand the tilde, return a copy of what we were passed. */
- if (dirname == 0)
- dirname = savestring (filename);
- }
- else
- {
- free (username);
- dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
- }
-
- endpwent ();
- return (dirname);
-}
-
-\f
-#if defined (TEST)
-#undef NULL
-#include <stdio.h>
-
-main (argc, argv)
- int argc;
- char **argv;
-{
- char *result, line[512];
- int done = 0;
-
- while (!done)
- {
- printf ("~expand: ");
- fflush (stdout);
-
- if (!gets (line))
- strcpy (line, "done");
-
- if ((strcmp (line, "done") == 0) ||
- (strcmp (line, "quit") == 0) ||
- (strcmp (line, "exit") == 0))
- {
- done = 1;
- break;
- }
-
- result = tilde_expand (line);
- printf (" --> %s\n", result);
- free (result);
- }
- exit (0);
-}
-
-static void memory_error_and_abort ();
-
-static void *
-xmalloc (bytes)
- size_t bytes;
-{
- void *temp = (char *)malloc (bytes);
-
- if (!temp)
- memory_error_and_abort ();
- return (temp);
-}
-
-static void *
-xrealloc (pointer, bytes)
- void *pointer;
- int bytes;
-{
- void *temp;
-
- if (!pointer)
- temp = malloc (bytes);
- else
- temp = realloc (pointer, bytes);
-
- if (!temp)
- memory_error_and_abort ();
-
- return (temp);
-}
-
-static void
-memory_error_and_abort ()
-{
- fprintf (stderr, "readline: out of virtual memory\n");
- abort ();
-}
-
-/*
- * Local variables:
- * compile-command: "gcc -g -DTEST -o tilde tilde.c"
- * end:
- */
-#endif /* TEST */
--- /dev/null
+../tilde/tilde.c
\ No newline at end of file
+++ /dev/null
-/* tilde.h: Externally available variables and function in libtilde.a. */
-
-/* Copyright (C) 1992 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The Library is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- The Library 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.
-
- The GNU General Public License is often shipped with GNU software, and
- is generally kept in a file called COPYING or LICENSE. If you do not
- have a copy of the license, write to the Free Software Foundation,
- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#if !defined (_TILDE_H_)
-# define _TILDE_H_
-
-#ifdef __cplusplus
-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 *));
-
-/* If non-null, this contains the address of a function that the application
- wants called before trying the standard tilde expansions. The function
- is called with the text sans tilde, and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if the expansion fails. */
-extern tilde_hook_func_t *tilde_expansion_preexpansion_hook;
-
-/* If non-null, this contains the address of a function to call if the
- standard meaning for expanding a tilde fails. The function is called
- with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if there is no expansion. */
-extern tilde_hook_func_t *tilde_expansion_failure_hook;
-
-/* When non-null, this is a NULL terminated array of strings which
- are duplicates for a tilde prefix. Bash uses this to expand
- `=~' and `:~'. */
-extern char **tilde_additional_prefixes;
-
-/* When non-null, this is a NULL terminated array of strings which match
- the end of a username, instead of just "/". Bash sets this to
- `:' and `=~'. */
-extern char **tilde_additional_suffixes;
-
-/* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand PARAMS((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 *));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _TILDE_H_ */
--- /dev/null
+../tilde/tilde.h
\ No newline at end of file
make_case_command (word, clauses, lineno)
WORD_DESC *word;
PATTERN_LIST *clauses;
+ int lineno;
{
CASE_COM *temp;
+++ /dev/null
-/* pathnames.h -- absolute filenames that bash wants for various defaults. */
-
-/* Copyright (C) 1987,1991 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 2, 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; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#if !defined (_PATHNAMES_H_)
-#define _PATHNAMES_H_
-
-/* The default file for hostname completion. */
-#define DEFAULT_HOSTS_FILE "/etc/hosts"
-
-/* The default login shell startup file. */
-#define SYS_PROFILE "/etc/profile"
-
-#endif /* _PATHNAMES_H */
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#: array.c:695 array.c:755 array.c:879 bashhist.c:661 bashline.c:801
+#: bashline.c:1416 error.c:88 error.c:318 error.c:320 error.c:322
+#: execute_cmd.c:2005 execute_cmd.c:2007 execute_cmd.c:2195 execute_cmd.c:2441
+#: execute_cmd.c:2580 execute_cmd.c:3186 execute_cmd.c:3838 expr.c:1092
+#: expr.c:1093 general.c:132 jobs.c:1128 jobs.c:1143 jobs.c:2318 jobs.c:2319
+#: locale.c:64 locale.c:422 parse.y:1209 pcomplete.c:937 pcomplete.c:947
+#: pcomplete.c:1076 print_cmd.c:142 print_cmd.c:305 print_cmd.c:364
+#: print_cmd.c:368 print_cmd.c:374 print_cmd.c:378 print_cmd.c:548
+#: print_cmd.c:733 print_cmd.c:847 print_cmd.c:851 subst.c:1483 subst.c:1510
+#: subst.c:1734 subst.c:1754 subst.c:4238 subst.c:4274 subst.c:6391
+#: syntax.h:43 unwind_prot.c:173 variables.c:1631 variables.c:2381
+#: /usr/homes/chet/src/bash/src/parse.y:1209 builtins/common.c:144
+#: builtins/common.c:640 builtins/getopt.c:204 builtins/mkbuiltins.c:1067
+#: builtins/mkbuiltins.c:1070 builtins/mkbuiltins.c:1072
+#: builtins/mkbuiltins.c:1074 builtins/mkbuiltins.c:1079
+#: builtins/mkbuiltins.c:1084 builtins/mkbuiltins.c:1088
+#: builtins/mkbuiltins.c:1094 builtins/mkbuiltins.c:1100
+#: builtins/mkbuiltins.c:1108 builtins/mkbuiltins.c:1111
+#: builtins/mkbuiltins.c:1207 builtins/mkbuiltins.c:1208
+#: builtins/caller.def:127 builtins/caller.def:131 builtins/command.def:134
+#: builtins/complete.def:567 builtins/declare.def:238 builtins/declare.def:355
+#: builtins/declare.def:438 builtins/fc.def:338 builtins/getopts.def:310
+#: builtins/help.def:105 builtins/help.def:110 builtins/history.def:291
+#: builtins/printf.def:123 builtins/printf.def:726 builtins/pushd.def:330
+#: builtins/pushd.def:371 builtins/pushd.def:654 builtins/pushd.def:662
+#: builtins/pushd.def:665 builtins/pushd.def:675 builtins/pushd.def:679
+#: builtins/pushd.def:683 builtins/pushd.def:686 builtins/pushd.def:689
+#: builtins/pushd.def:698 builtins/pushd.def:702 builtins/pushd.def:706
+#: builtins/pushd.def:709 builtins/read.def:258 builtins/read.def:386
+#: builtins/read.def:595 builtins/setattr.def:353 builtins/setattr.def:396
+#: builtins/ulimit.def:111 builtins/umask.def:131 lib/sh/snprintf.c:394
+#: lib/sh/snprintf.c:1691 lib/sh/stringlist.c:235 lib/sh/stringvec.c:223
+#: lib/malloc/stats.c:99
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2003-12-04 16:07-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: arrayfunc.c:43
+msgid "bad array subscript"
+msgstr ""
+
+#: arrayfunc.c:304
+#, c-format
+msgid "%s: cannot assign to non-numeric index"
+msgstr ""
+
+#: bashhist.c:319
+#, c-format
+msgid "%s: cannot create: %s"
+msgstr ""
+
+#: bashline.c:2789
+msgid "bash_execute_unix_command: cannot find keymap for command"
+msgstr ""
+
+#: bashline.c:2838
+#, c-format
+msgid "%s: first non-whitespace character is not `\"'"
+msgstr ""
+
+#: bashline.c:2867 braces.c:129
+#, c-format
+msgid "no closing `%c' in %s"
+msgstr ""
+
+#: bashline.c:2901
+#, c-format
+msgid "%s: missing colon separator"
+msgstr ""
+
+#: error.c:163
+#, c-format
+msgid "last command: %s\n"
+msgstr ""
+
+#: error.c:168
+#, c-format
+msgid "Report this to %s\n"
+msgstr ""
+
+#: error.c:171
+msgid "Stopping myself..."
+msgstr ""
+
+#: error.c:258
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: error.c:403
+msgid "unknown command error"
+msgstr ""
+
+#: error.c:404
+msgid "bad command type"
+msgstr ""
+
+#: error.c:405
+msgid "bad connector"
+msgstr ""
+
+#: error.c:406
+msgid "bad jump"
+msgstr ""
+
+#: error.c:444
+#, c-format
+msgid "%s: unbound variable"
+msgstr ""
+
+#: error.c:451 builtins/common.c:221
+#, c-format
+msgid "%s: readonly variable"
+msgstr ""
+
+#: eval.c:173
+msgid "\atimed out waiting for input: auto-logout\n"
+msgstr ""
+
+#: execute_cmd.c:447
+msgid "close"
+msgstr ""
+
+#: execute_cmd.c:447
+msgid "open"
+msgstr ""
+
+#: execute_cmd.c:465
+#, c-format
+msgid "cannot redirect standard input from /dev/null: %s"
+msgstr ""
+
+#: execute_cmd.c:1035
+#, c-format
+msgid "TIMEFORMAT: `%c': invalid format character"
+msgstr ""
+
+#: execute_cmd.c:3520
+#, c-format
+msgid "%s: restricted: cannot specify `/' in command names"
+msgstr ""
+
+#: execute_cmd.c:3608
+#, c-format
+msgid "%s: command not found"
+msgstr ""
+
+#: execute_cmd.c:3820 shell.c:1393 builtins/evalfile.c:127
+#: builtins/hash.def:158
+#, c-format
+msgid "%s: is a directory"
+msgstr ""
+
+#: execute_cmd.c:3838
+#, c-format
+msgid "%s: %s: bad interpreter"
+msgstr ""
+
+#: execute_cmd.c:3875 shell.c:1403 builtins/evalfile.c:172
+#, c-format
+msgid "%s: cannot execute binary file"
+msgstr ""
+
+#: execute_cmd.c:3948 builtins/declare.def:306
+#, c-format
+msgid "%s: readonly function"
+msgstr ""
+
+#: execute_cmd.c:3987
+#, c-format
+msgid "cannot duplicate fd %d to fd %d"
+msgstr ""
+
+#: expr.c:238
+msgid "expression recursion level exceeded"
+msgstr ""
+
+#: expr.c:262
+msgid "recursion stack underflow"
+msgstr ""
+
+#: expr.c:373
+msgid "syntax error in expression"
+msgstr ""
+
+#: expr.c:413
+msgid "attempted assignment to non-variable"
+msgstr ""
+
+#: expr.c:434 expr.c:439 expr.c:749
+msgid "division by 0"
+msgstr ""
+
+#: expr.c:465
+msgid "bug: bad expassign token"
+msgstr ""
+
+#: expr.c:495 expr.c:510 builtins/let.def:92 builtins/let.def:117
+msgid "expression expected"
+msgstr ""
+
+#: expr.c:507
+msgid "`:' expected for conditional expression"
+msgstr ""
+
+#: expr.c:774
+msgid "exponent less than 0"
+msgstr ""
+
+#: expr.c:818
+msgid "identifier expected after pre-increment or pre-decrement"
+msgstr ""
+
+#: expr.c:846
+msgid "missing `)'"
+msgstr ""
+
+#: expr.c:870
+msgid "syntax error: operand expected"
+msgstr ""
+
+#: expr.c:1091
+#, c-format
+msgid "%s%s%s: %s (error token is \"%s\")"
+msgstr ""
+
+#: expr.c:1145
+msgid "bad number"
+msgstr ""
+
+#: expr.c:1149
+msgid "invalid arithmetic base"
+msgstr ""
+
+#: expr.c:1169
+msgid "value too great for base"
+msgstr ""
+
+#: expr.c:1217
+#, c-format
+msgid "%s: expression error\n"
+msgstr ""
+
+#: general.c:58
+msgid "getcwd: cannot access parent directories"
+msgstr ""
+
+#: general.c:227 general.c:232 builtins/common.c:193
+#, c-format
+msgid "`%s': not a valid identifier"
+msgstr ""
+
+#: input.c:229
+#, c-format
+msgid "cannot allocate new file descriptor for bash input from fd %d"
+msgstr ""
+
+#: input.c:237
+#, c-format
+msgid "save_bash_input: buffer already exists for new fd %d"
+msgstr ""
+
+#: jobs.c:692
+#, c-format
+msgid "deleting stopped job %d with process group %ld"
+msgstr ""
+
+#: jobs.c:1631 nojobs.c:646
+#, c-format
+msgid "wait: pid %ld is not a child of this shell"
+msgstr ""
+
+#: jobs.c:1814
+#, c-format
+msgid "wait_for: No record of process %ld"
+msgstr ""
+
+#: jobs.c:1957
+#, c-format
+msgid "wait_for: job == NO_JOB, giving the terminal to shell_pgrp (%ld)"
+msgstr ""
+
+#: jobs.c:2061
+#, c-format
+msgid "wait_for_job: job %d is stopped"
+msgstr ""
+
+#: jobs.c:2283
+#, c-format
+msgid "%s: job has terminated"
+msgstr ""
+
+#: jobs.c:2292
+#, c-format
+msgid "%s: job %d already in background"
+msgstr ""
+
+#: jobs.c:3036
+msgid "no job control in this shell"
+msgstr ""
+
+#: jobs.c:3250
+#, c-format
+msgid "tcsetpgrp(%d) failed: pid %ld to pgrp %ld"
+msgstr ""
+
+#: mailcheck.c:381
+msgid "You have mail in $_"
+msgstr ""
+
+#: mailcheck.c:406
+msgid "You have new mail in $_"
+msgstr ""
+
+#: mailcheck.c:422
+#, c-format
+msgid "The mail in %s has been read\n"
+msgstr ""
+
+#: make_cmd.c:316
+msgid "syntax error: arithmetic expression required"
+msgstr ""
+
+#: make_cmd.c:318
+msgid "syntax error: `;' unexpected"
+msgstr ""
+
+#: make_cmd.c:558
+#, c-format
+msgid "make_here_document: bad instruction type %d"
+msgstr ""
+
+#: make_cmd.c:728
+#, c-format
+msgid "make_redirection: redirection instruction `%d' out of range"
+msgstr ""
+
+#: mksyntax.c:334
+#, c-format
+msgid "%s: %s: cannot open: %s\n"
+msgstr ""
+
+#: parse.y:1663 /usr/homes/chet/src/bash/src/parse.y:1663
+msgid "read_a_line: ignored null byte in input"
+msgstr ""
+
+#: parse.y:1928 /usr/homes/chet/src/bash/src/parse.y:1928
+msgid "shell_getc: ignored null byte in input"
+msgstr ""
+
+#: parse.y:2724 /usr/homes/chet/src/bash/src/parse.y:2724
+#, c-format
+msgid "unexpected EOF while looking for matching `%c'"
+msgstr ""
+
+#: parse.y:3009 /usr/homes/chet/src/bash/src/parse.y:3009
+msgid "unexpected EOF while looking for `]]'"
+msgstr ""
+
+#: parse.y:3014 /usr/homes/chet/src/bash/src/parse.y:3014
+#, c-format
+msgid "syntax error in conditional expression: unexpected token `%s'"
+msgstr ""
+
+#: parse.y:3018 /usr/homes/chet/src/bash/src/parse.y:3018
+msgid "syntax error in conditional expression"
+msgstr ""
+
+#: parse.y:3096 /usr/homes/chet/src/bash/src/parse.y:3096
+#, c-format
+msgid "unexpected token `%s', expected `)'"
+msgstr ""
+
+#: parse.y:3100 /usr/homes/chet/src/bash/src/parse.y:3100
+msgid "expected `)'"
+msgstr ""
+
+#: parse.y:3128 /usr/homes/chet/src/bash/src/parse.y:3128
+#, c-format
+msgid "unexpected argument `%s' to conditional unary operator"
+msgstr ""
+
+#: parse.y:3132 /usr/homes/chet/src/bash/src/parse.y:3132
+msgid "unexpected argument to conditional unary operator"
+msgstr ""
+
+#: parse.y:3160 /usr/homes/chet/src/bash/src/parse.y:3160
+msgid "-n"
+msgstr ""
+
+#: parse.y:3169 /usr/homes/chet/src/bash/src/parse.y:3169
+#, c-format
+msgid "unexpected token `%s', conditional binary operator expected"
+msgstr ""
+
+#: parse.y:3173 /usr/homes/chet/src/bash/src/parse.y:3173
+msgid "conditional binary operator expected"
+msgstr ""
+
+#: parse.y:3189 /usr/homes/chet/src/bash/src/parse.y:3189
+#, c-format
+msgid "unexpected argument `%s' to conditional binary operator"
+msgstr ""
+
+#: parse.y:3193 /usr/homes/chet/src/bash/src/parse.y:3193
+msgid "unexpected argument to conditional binary operator"
+msgstr ""
+
+#: parse.y:3204 /usr/homes/chet/src/bash/src/parse.y:3204
+#, c-format
+msgid "unexpected token `%c' in conditional command"
+msgstr ""
+
+#: parse.y:3207 /usr/homes/chet/src/bash/src/parse.y:3207
+#, c-format
+msgid "unexpected token `%s' in conditional command"
+msgstr ""
+
+#: parse.y:3211 /usr/homes/chet/src/bash/src/parse.y:3211
+#, c-format
+msgid "unexpected token %d in conditional command"
+msgstr ""
+
+#: parse.y:4398 /usr/homes/chet/src/bash/src/parse.y:4398
+#, c-format
+msgid "syntax error near unexpected token `%s'"
+msgstr ""
+
+#: parse.y:4416 /usr/homes/chet/src/bash/src/parse.y:4416
+#, c-format
+msgid "syntax error near `%s'"
+msgstr ""
+
+#: parse.y:4426 /usr/homes/chet/src/bash/src/parse.y:4426
+msgid "syntax error: unexpected end of file"
+msgstr ""
+
+#: parse.y:4426 /usr/homes/chet/src/bash/src/parse.y:4426
+msgid "syntax error"
+msgstr ""
+
+#: parse.y:4488 /usr/homes/chet/src/bash/src/parse.y:4488
+#, c-format
+msgid "Use \"%s\" to leave the shell.\n"
+msgstr ""
+
+#: parse.y:4647 /usr/homes/chet/src/bash/src/parse.y:4647
+msgid "unexpected EOF while looking for matching `)'"
+msgstr ""
+
+#: pcomplete.c:987
+#, c-format
+msgid "completion: function `%s' not found"
+msgstr ""
+
+#: pcomplete.c:1222
+msgid "ERROR: command_line_to_word_list returns NULL"
+msgstr ""
+
+#: pcomplib.c:177
+#, c-format
+msgid "progcomp_insert: %s: NULL COMPSPEC"
+msgstr ""
+
+#: print_cmd.c:259
+#, c-format
+msgid "print_command: bad connector `%d'"
+msgstr ""
+
+#: print_cmd.c:1171
+#, c-format
+msgid "cprintf: `%c': invalid format character"
+msgstr ""
+
+#: redir.c:98 redir.c:133
+msgid "file descriptor out of range"
+msgstr ""
+
+#: redir.c:140
+#, c-format
+msgid "%s: ambiguous redirect"
+msgstr ""
+
+#: redir.c:144
+#, c-format
+msgid "%s: cannot overwrite existing file"
+msgstr ""
+
+#: redir.c:149
+#, c-format
+msgid "%s: restricted: cannot redirect output"
+msgstr ""
+
+#: redir.c:154
+#, c-format
+msgid "cannot create temp file for here document: %s"
+msgstr ""
+
+#: redir.c:508
+msgid "/dev/(tcp|udp)/host/port not supported without networking"
+msgstr ""
+
+#: redir.c:948
+msgid "redirection error: cannot duplicate fd"
+msgstr ""
+
+#: shell.c:300
+msgid "could not find /tmp, please create!"
+msgstr ""
+
+#: shell.c:304
+msgid "/tmp must be a valid directory name"
+msgstr ""
+
+#: shell.c:463 shell.c:735 builtins/common.c:156
+#, c-format
+msgid "%s: option requires an argument"
+msgstr ""
+
+#: shell.c:748 builtins/common.c:179
+#, c-format
+msgid "%s: invalid option"
+msgstr ""
+
+#: shell.c:837
+#, c-format
+msgid "%c%c: invalid option"
+msgstr ""
+
+#: shell.c:1588
+msgid "I have no name!"
+msgstr ""
+
+#: shell.c:1721
+#, c-format
+msgid "GNU bash, version %s-(%s)\n"
+msgstr ""
+
+#: shell.c:1722
+#, c-format
+msgid ""
+"Usage:\t%s [GNU long option] [option] ...\n"
+"\t%s [GNU long option] [option] script-file ...\n"
+msgstr ""
+
+#: shell.c:1724
+msgid "GNU long options:\n"
+msgstr ""
+
+#: shell.c:1726
+#, c-format
+msgid "\t--%s\n"
+msgstr ""
+
+#: shell.c:1728
+msgid "Shell options:\n"
+msgstr ""
+
+#: shell.c:1729
+msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
+msgstr ""
+
+#: shell.c:1732 builtins/mkbuiltins.c:131 builtins/set.def:2
+msgid "set"
+msgstr ""
+
+#: shell.c:1744
+#, c-format
+msgid "\t-%s or -o option\n"
+msgstr ""
+
+#: shell.c:1750
+#, c-format
+msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
+msgstr ""
+
+#: shell.c:1751
+#, c-format
+msgid "Type `%s -c help' for more information about shell builtin commands.\n"
+msgstr ""
+
+#: shell.c:1752
+msgid "Use the `bashbug' command to report bugs.\n"
+msgstr ""
+
+#: sig.c:483
+msgid "Bad code in sig.c: sigprocmask"
+msgstr ""
+
+#: siglist.c:47
+msgid "Bogus signal"
+msgstr ""
+
+#: siglist.c:50
+msgid "Hangup"
+msgstr ""
+
+#: siglist.c:54
+msgid "Interrupt"
+msgstr ""
+
+#: siglist.c:58
+msgid "Quit"
+msgstr ""
+
+#: siglist.c:62
+msgid "Illegal instruction"
+msgstr ""
+
+#: siglist.c:66
+msgid "BPT trace/trap"
+msgstr ""
+
+#: siglist.c:74
+msgid "ABORT instruction"
+msgstr ""
+
+#: siglist.c:78
+msgid "EMT instruction"
+msgstr ""
+
+#: siglist.c:82
+msgid "Floating point exception"
+msgstr ""
+
+#: siglist.c:86
+msgid "Killed"
+msgstr ""
+
+#: siglist.c:90
+msgid "Bus error"
+msgstr ""
+
+#: siglist.c:94
+msgid "Segmentation fault"
+msgstr ""
+
+#: siglist.c:98
+msgid "Bad system call"
+msgstr ""
+
+#: siglist.c:102
+msgid "Broken pipe"
+msgstr ""
+
+#: siglist.c:106
+msgid "Alarm clock"
+msgstr ""
+
+#: siglist.c:110
+msgid "Terminated"
+msgstr ""
+
+#: siglist.c:114
+msgid "Urgent IO condition"
+msgstr ""
+
+#: siglist.c:118
+msgid "Stopped (signal)"
+msgstr ""
+
+#: siglist.c:126
+msgid "Continue"
+msgstr ""
+
+#: siglist.c:134
+msgid "Child death or stop"
+msgstr ""
+
+#: siglist.c:138
+msgid "Stopped (tty input)"
+msgstr ""
+
+#: siglist.c:142
+msgid "Stopped (tty output)"
+msgstr ""
+
+#: siglist.c:146
+msgid "I/O ready"
+msgstr ""
+
+#: siglist.c:150
+msgid "CPU limit"
+msgstr ""
+
+#: siglist.c:154
+msgid "File limit"
+msgstr ""
+
+#: siglist.c:158
+msgid "Alarm (virtual)"
+msgstr ""
+
+#: siglist.c:162
+msgid "Alarm (profile)"
+msgstr ""
+
+#: siglist.c:166
+msgid "Window changed"
+msgstr ""
+
+#: siglist.c:170
+msgid "Record lock"
+msgstr ""
+
+#: siglist.c:174
+msgid "User signal 1"
+msgstr ""
+
+#: siglist.c:178
+msgid "User signal 2"
+msgstr ""
+
+#: siglist.c:182
+msgid "HFT input data pending"
+msgstr ""
+
+#: siglist.c:186
+msgid "power failure imminent"
+msgstr ""
+
+#: siglist.c:190
+msgid "system crash imminent"
+msgstr ""
+
+#: siglist.c:194
+msgid "migrate process to another CPU"
+msgstr ""
+
+#: siglist.c:198
+msgid "programming error"
+msgstr ""
+
+#: siglist.c:202
+msgid "HFT monitor mode granted"
+msgstr ""
+
+#: siglist.c:206
+msgid "HFT monitor mode retracted"
+msgstr ""
+
+#: siglist.c:210
+msgid "HFT sound sequence has completed"
+msgstr ""
+
+#: siglist.c:214
+msgid "Information request"
+msgstr ""
+
+#: siglist.c:222
+msgid "Unknown Signal #"
+msgstr ""
+
+#: siglist.c:224
+#, c-format
+msgid "Unknown Signal #%d"
+msgstr ""
+
+#: subst.c:666 subst.c:752 subst.c:865 subst.c:1107 subst.c:1370
+msgid "$("
+msgstr ""
+
+#: subst.c:876
+msgid "$["
+msgstr ""
+
+#: subst.c:876
+msgid "["
+msgstr ""
+
+#: subst.c:876
+msgid "]"
+msgstr ""
+
+#: subst.c:1010 subst.c:1131
+#, c-format
+msgid "bad substitution: no closing `%s' in %s"
+msgstr ""
+
+#: subst.c:2006
+#, c-format
+msgid "%s%s=(%s)\n"
+msgstr ""
+
+#: subst.c:2009 variables.c:2123
+#, c-format
+msgid "%s%s=%s\n"
+msgstr ""
+
+#: subst.c:2019
+#, c-format
+msgid "%s: cannot assign list to array member"
+msgstr ""
+
+#: subst.c:3381
+msgid "sh-np"
+msgstr ""
+
+#: subst.c:3449
+#, c-format
+msgid "pid %ld: dev_fd_list:"
+msgstr ""
+
+#: subst.c:3455 /usr/local/share/bison/bison.simple:719
+#: /usr/local/share/bison/bison.simple:864
+#, c-format
+msgid " %d"
+msgstr ""
+
+#: subst.c:3515 subst.c:3531
+msgid "cannot make pipe for process substitution"
+msgstr ""
+
+#: subst.c:3562
+msgid "cannot make child for process substitution"
+msgstr ""
+
+#: subst.c:3605
+#, c-format
+msgid "cannot open named pipe %s for %s"
+msgstr ""
+
+#: subst.c:3606
+msgid "reading"
+msgstr ""
+
+#: subst.c:3606
+msgid "writing"
+msgstr ""
+
+#: subst.c:3613
+#, c-format
+msgid "cannout reset nodelay mode for fd %d"
+msgstr ""
+
+#: subst.c:3623
+#, c-format
+msgid "cannot duplicate named pipe %s as fd %d"
+msgstr ""
+
+#: subst.c:3647
+msgid "process substitution"
+msgstr ""
+
+#: subst.c:3697
+msgid "read_comsub: ignored null byte in input"
+msgstr ""
+
+#: subst.c:3798
+msgid "cannot make pipe for command substitution"
+msgstr ""
+
+#: subst.c:3827
+msgid "cannot make child for command substitution"
+msgstr ""
+
+#: subst.c:3844
+msgid "command_substitute: cannot duplicate pipe as fd 1"
+msgstr ""
+
+#: subst.c:3901
+msgid "command substitution"
+msgstr ""
+
+#: subst.c:4279
+#, c-format
+msgid "%s: parameter null or not set"
+msgstr ""
+
+#: subst.c:4524
+#, c-format
+msgid "%s: substring expression < 0"
+msgstr ""
+
+#: subst.c:4966 subst.c:4983
+msgid "#%:-=?+/}"
+msgstr ""
+
+#: subst.c:5033
+msgid "%:=+/"
+msgstr ""
+
+#: subst.c:5204
+#, c-format
+msgid "%s: bad substitution"
+msgstr ""
+
+#: subst.c:5204 builtins/history.def:247
+msgid "??"
+msgstr ""
+
+#: subst.c:5278
+#, c-format
+msgid "$%s: cannot assign in this way"
+msgstr ""
+
+#: subst.c:5792
+msgid "<("
+msgstr ""
+
+#: subst.c:5792
+msgid ">("
+msgstr ""
+
+#: subst.c:6647
+#, c-format
+msgid "no match: %s"
+msgstr ""
+
+#: syntax.h:26
+msgid "\\`$\"\n"
+msgstr ""
+
+#: syntax.h:27
+msgid "\\`$"
+msgstr ""
+
+#: syntax.h:29
+msgid "()<>;&|"
+msgstr ""
+
+#: syntax.h:32
+msgid "\"`'"
+msgstr ""
+
+#: syntax.h:35
+msgid "$<>"
+msgstr ""
+
+#: syntax.h:41
+msgid "@*+?!"
+msgstr ""
+
+#: syntax.h:45
+msgid "*?[]^"
+msgstr ""
+
+#: test.c:152
+msgid "argument expected"
+msgstr ""
+
+#: test.c:161
+#, c-format
+msgid "%s: integer expression expected"
+msgstr ""
+
+#: test.c:176
+msgid "/dev/fd/"
+msgstr ""
+
+#: test.c:202
+msgid "/dev/std"
+msgstr ""
+
+#: test.c:206
+msgid "out"
+msgstr ""
+
+#: test.c:208
+msgid "err"
+msgstr ""
+
+#: test.c:359
+msgid "`)' expected"
+msgstr ""
+
+#: test.c:361
+#, c-format
+msgid "`)' expected, found %s"
+msgstr ""
+
+#: test.c:376 test.c:785 test.c:788
+#, c-format
+msgid "%s: unary operator expected"
+msgstr ""
+
+#: test.c:541 test.c:828
+#, c-format
+msgid "%s: binary operator expected"
+msgstr ""
+
+#: test.c:903 builtins/test.def:134
+msgid "missing `]'"
+msgstr ""
+
+#: test.c:919 builtins/common.c:132
+msgid "too many arguments"
+msgstr ""
+
+#: trap.c:171
+msgid "DEFAULT_SIG"
+msgstr ""
+
+#: trap.c:173
+msgid "IGNORE_SIG"
+msgstr ""
+
+#: trap.c:175
+msgid "IMPOSSIBLE_TRAP_HANDLER"
+msgstr ""
+
+#: trap.c:179 builtins/caller.def:94
+msgid "NULL"
+msgstr ""
+
+#: trap.c:192
+msgid "invalid signal number"
+msgstr ""
+
+#: trap.c:222 builtins/common.c:638 builtins/trap.def:218
+msgid "SIG"
+msgstr ""
+
+#: trap.c:307
+#, c-format
+msgid "run_pending_traps: bad value in trap_list[%d]: %p"
+msgstr ""
+
+#: trap.c:311
+#, c-format
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr ""
+
+#: trap.c:347
+#, c-format
+msgid "trap_handler: bad signal %d"
+msgstr ""
+
+#: trap.c:673
+msgid "exit trap"
+msgstr ""
+
+#: trap.c:781
+msgid "debug trap"
+msgstr ""
+
+#: trap.c:800
+msgid "error trap"
+msgstr ""
+
+#: trap.c:811
+msgid "return trap"
+msgstr ""
+
+#: trap.c:821
+msgid "interrupt trap"
+msgstr ""
+
+#: variables.c:287
+msgid "() {"
+msgstr ""
+
+#: variables.c:309
+#, c-format
+msgid "error importing function definition for `%s'"
+msgstr ""
+
+#: variables.c:370
+msgid "NODE"
+msgstr ""
+
+#: variables.c:383
+msgid "# "
+msgstr ""
+
+#: variables.c:387
+msgid "+ "
+msgstr ""
+
+#: variables.c:390 variables.c:2867 variables.c:3464 variables.c:3500
+#: variables.c:3632 variables.c:3735
+msgid "IFS"
+msgstr ""
+
+#: variables.c:401
+msgid "600"
+msgstr ""
+
+#: variables.c:401
+msgid "60"
+msgstr ""
+
+#: variables.c:409 variables.c:3647 variables.c:3955 builtins/getopts.def:231
+msgid "OPTIND"
+msgstr ""
+
+#: variables.c:411 variables.c:3646 variables.c:3976
+msgid "OPTERR"
+msgstr ""
+
+#: variables.c:420
+msgid "BASH"
+msgstr ""
+
+#: variables.c:430
+msgid "BASH_VERSION"
+msgstr ""
+
+#: variables.c:436
+msgid "BASH_EXECUTION_STRING"
+msgstr ""
+
+#: variables.c:452
+msgid "~/.sh_history"
+msgstr ""
+
+#: variables.c:452
+msgid "~/.bash_history"
+msgstr ""
+
+#: variables.c:457
+msgid "500"
+msgstr ""
+
+#: variables.c:469 variables.c:3633 builtins/set.def:313 builtins/set.def:315
+#: builtins/set.def:316
+msgid "IGNOREEOF"
+msgstr ""
+
+#: variables.c:471 variables.c:3669 builtins/set.def:191 builtins/set.def:311
+msgid "ignoreeof"
+msgstr ""
+
+#: variables.c:527
+msgid "HOSTTYPE"
+msgstr ""
+
+#: variables.c:528
+msgid "OSTYPE"
+msgstr ""
+
+#: variables.c:529
+msgid "MACHTYPE"
+msgstr ""
+
+#: variables.c:531
+msgid "HOSTNAME"
+msgstr ""
+
+#: variables.c:660 variables.c:694
+msgid "SHLVL"
+msgstr ""
+
+#: variables.c:669
+#, c-format
+msgid "shell level (%d) too high, resetting to 1"
+msgstr ""
+
+#: variables.c:734
+msgid "shell-init"
+msgstr ""
+
+#: variables.c:758 variables.c:761
+msgid "PPID"
+msgstr ""
+
+#: variables.c:772 variables.c:775
+msgid "UID"
+msgstr ""
+
+#: variables.c:782 variables.c:785
+msgid "EUID"
+msgstr ""
+
+#: variables.c:798 variables.c:800
+msgid "BASH_VERSINFO"
+msgstr ""
+
+#: variables.c:893
+#, c-format
+msgid "%s="
+msgstr ""
+
+#: variables.c:1087 variables.c:1093
+msgid "SECONDS"
+msgstr ""
+
+#: variables.c:1395
+msgid "BASH_COMMAND"
+msgstr ""
+
+#: variables.c:1396
+msgid "BASH_SUBSHELL"
+msgstr ""
+
+#: variables.c:1398
+msgid "RANDOM"
+msgstr ""
+
+#: variables.c:1399
+msgid "LINENO"
+msgstr ""
+
+#: variables.c:1402
+msgid "HISTCMD"
+msgstr ""
+
+#: variables.c:1406
+msgid "COMP_WORDBREAKS"
+msgstr ""
+
+#: variables.c:1410
+msgid "DIRSTACK"
+msgstr ""
+
+#: variables.c:1414
+msgid "GROUPS"
+msgstr ""
+
+#: variables.c:1417 variables.c:3554 variables.c:3578 builtins/evalfile.c:101
+msgid "BASH_ARGC"
+msgstr ""
+
+#: variables.c:1418 variables.c:3553 variables.c:3577 builtins/evalfile.c:100
+msgid "BASH_ARGV"
+msgstr ""
+
+#: variables.c:1609
+msgid "make_local_variable: no function context at current scope"
+msgstr ""
+
+#: variables.c:2708
+msgid "all_local_variables: no function context at current scope"
+msgstr ""
+
+#: variables.c:2922 variables.c:2931
+#, c-format
+msgid "invalid character %d in exportstr for %s"
+msgstr ""
+
+#: variables.c:2937
+#, c-format
+msgid "no `=' in exportstr for %s"
+msgstr ""
+
+#: variables.c:3071
+msgid ") {"
+msgstr ""
+
+#: variables.c:3222
+msgid "_="
+msgstr ""
+
+#: variables.c:3242
+msgid "_GNU_nonoption_argv_flags_"
+msgstr ""
+
+#: variables.c:3362
+msgid "pop_var_context: head of shell_variables not a function context"
+msgstr ""
+
+#: variables.c:3375
+msgid "pop_var_context: no global_variables context"
+msgstr ""
+
+#: variables.c:3441
+msgid "pop_scope: head of shell_variables not a temporary environment scope"
+msgstr ""
+
+#: variables.c:3625 builtins/history.def:282
+msgid "HISTTIMEFORMAT"
+msgstr ""
+
+#: variables.c:3635
+msgid "LANG"
+msgstr ""
+
+#: variables.c:3636
+msgid "LC_ALL"
+msgstr ""
+
+#: variables.c:3654
+msgid "TERMCAP"
+msgstr ""
+
+#: variables.c:3655
+msgid "TERMINFO"
+msgstr ""
+
+#: variables.c:3662 lib/sh/strftime.c:185 lib/sh/strftime.c:187
+msgid "TZ"
+msgstr ""
+
+#: variables.c:3867
+msgid "ignorespace"
+msgstr ""
+
+#: variables.c:3869
+msgid "ignoredups"
+msgstr ""
+
+#: variables.c:3871
+msgid "ignoreboth"
+msgstr ""
+
+#: variables.c:3873
+msgid "erasedups"
+msgstr ""
+
+#: version.c:60 version.c:62
+#, c-format
+msgid "%s.%d(%d)-%s"
+msgstr ""
+
+#: version.c:66 version.c:68
+#, c-format
+msgid "%s.%d(%d)"
+msgstr ""
+
+#: version.c:78
+#, c-format
+msgid "GNU bash, version %s (%s)\n"
+msgstr ""
+
+#: version.c:80
+msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n"
+msgstr ""
+
+#: xmalloc.c:91
+#, c-format
+msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)"
+msgstr ""
+
+#: xmalloc.c:93
+#, c-format
+msgid "xmalloc: cannot allocate %lu bytes"
+msgstr ""
+
+#: xmalloc.c:113
+#, c-format
+msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
+msgstr ""
+
+#: xmalloc.c:115
+#, c-format
+msgid "xrealloc: cannot allocate %lu bytes"
+msgstr ""
+
+#: xmalloc.c:149
+#, c-format
+msgid "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
+msgstr ""
+
+#: xmalloc.c:151
+#, c-format
+msgid "xmalloc: %s:%d: cannot allocate %lu bytes"
+msgstr ""
+
+#: xmalloc.c:173
+#, c-format
+msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"
+msgstr ""
+
+#: xmalloc.c:175
+#, c-format
+msgid "xrealloc: %s:%d: cannot allocate %lu bytes"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "error"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "$undefined."
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "IF"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "THEN"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "ELSE"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "ELIF"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "FI"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:469
+msgid "CASE"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "ESAC"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "FOR"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "SELECT"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "WHILE"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "UNTIL"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "DO"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470
+msgid "DONE"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:470 builtins/mkbuiltins.c:425
+msgid "FUNCTION"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "COND_START"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "COND_END"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "COND_ERROR"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "IN"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "BANG"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "TIME"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:471
+msgid "TIMEOPT"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:472
+msgid "WORD"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:472
+msgid "ASSIGNMENT_WORD"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:472
+msgid "NUMBER"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:472
+msgid "ARITH_CMD"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:472
+msgid "ARITH_FOR_EXPRS"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:473
+msgid "COND_CMD"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:473
+msgid "AND_AND"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:473
+msgid "OR_OR"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:473
+msgid "GREATER_GREATER"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:473
+msgid "LESS_LESS"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:474
+msgid "LESS_AND"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:474
+msgid "LESS_LESS_LESS"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:474
+msgid "GREATER_AND"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:474
+msgid "SEMI_SEMI"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:475
+msgid "LESS_LESS_MINUS"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:475
+msgid "AND_GREATER"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:475
+msgid "LESS_GREATER"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:475
+msgid "GREATER_BAR"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:475
+msgid "'&'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "';'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'\\n'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "yacc_EOF"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'|'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'>'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'<'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'-'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'{'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:476
+msgid "'}'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:477
+msgid "'('"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:477
+msgid "')'"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:477
+msgid "inputunit"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:477
+msgid "word_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:477
+msgid "redirection"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:478
+msgid "simple_command_element"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:478
+msgid "redirection_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:478
+msgid "simple_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:479 builtins/command.def:2
+#: builtins/complete.def:82
+msgid "command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:479
+msgid "shell_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:479
+msgid "for_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:479
+msgid "arith_for_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:480
+msgid "select_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:480
+msgid "case_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:480
+msgid "function_def"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:480
+msgid "function_body"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:481
+msgid "subshell"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:481
+msgid "if_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:481
+msgid "group_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:481
+msgid "arith_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:482
+msgid "cond_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:482
+msgid "elif_clause"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:482
+msgid "case_clause"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:482
+msgid "pattern_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:483
+msgid "case_clause_sequence"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:483
+msgid "pattern"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:483
+msgid "list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:483
+msgid "compound_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:483
+msgid "list0"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:484
+msgid "list1"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:484
+msgid "simple_list_terminator"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:484
+msgid "list_terminator"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:484
+msgid "newline_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:485
+msgid "simple_list"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:485
+msgid "simple_list1"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:485
+msgid "pipeline_command"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:485
+msgid "pipeline"
+msgstr ""
+
+#: /usr/homes/chet/src/bash/src/parse.y:486
+msgid "timespec"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:156
+msgid "syntax error: cannot back up"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:442
+msgid "Starting parse\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:492
+#: /usr/local/share/bison/bison.simple:499
+#: /usr/local/share/bison/bison.simple:924
+msgid "parser stack overflow"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:538
+#, c-format
+msgid "Stack size increased to %lu\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:545
+#, c-format
+msgid "Entering state %d\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:572
+msgid "Reading a token: "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:583
+msgid "Now at end of input.\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:594
+#, c-format
+msgid "Next token is %d (%s"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:633
+#, c-format
+msgid "Shifting token %d (%s), "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:695
+#, c-format
+msgid "Reducing via rule %d (line %d), "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:701
+#, c-format
+msgid " -> %s\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:717
+msgid "state stack now"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:769
+#: /usr/local/share/bison/bison.simple:774
+msgid "parse error, unexpected "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:785
+msgid ", expecting "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:785
+msgid " or "
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:795
+msgid "parse error; also virtual memory exhausted"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:799
+msgid "parse error"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:816
+#, c-format
+msgid "Discarding token %d (%s).\n"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:862
+msgid "Error: state stack now"
+msgstr ""
+
+#: /usr/local/share/bison/bison.simple:895
+msgid "Shifting error token, "
+msgstr ""
+
+#: builtins/common.c:102
+#, c-format
+msgid "line %d: "
+msgstr ""
+
+#: builtins/common.c:119
+#, c-format
+msgid "%s: usage: "
+msgstr ""
+
+#: builtins/common.c:163
+#, c-format
+msgid "%s: numeric argument required"
+msgstr ""
+
+#: builtins/common.c:170
+#, c-format
+msgid "%s: not found"
+msgstr ""
+
+#: builtins/common.c:186
+#, c-format
+msgid "%s: invalid option name"
+msgstr ""
+
+#: builtins/common.c:200
+#, c-format
+msgid "%s: invalid number"
+msgstr ""
+
+#: builtins/common.c:207
+#, c-format
+msgid "%s: invalid signal specification"
+msgstr ""
+
+#: builtins/common.c:214
+#, c-format
+msgid "`%s': not a pid or valid job spec"
+msgstr ""
+
+#: builtins/common.c:229
+#, c-format
+msgid "%s: %s out of range"
+msgstr ""
+
+#: builtins/common.c:229 builtins/common.c:231
+msgid "argument"
+msgstr ""
+
+#: builtins/common.c:231
+#, c-format
+msgid "%s out of range"
+msgstr ""
+
+#: builtins/common.c:239
+#, c-format
+msgid "%s: no such job"
+msgstr ""
+
+#: builtins/common.c:247
+#, c-format
+msgid "%s: no job control"
+msgstr ""
+
+#: builtins/common.c:249
+msgid "no job control"
+msgstr ""
+
+#: builtins/common.c:259
+#, c-format
+msgid "%s: restricted"
+msgstr ""
+
+#: builtins/common.c:269
+#, c-format
+msgid "%s: not a shell builtin"
+msgstr ""
+
+#: builtins/common.c:417
+msgid "`'"
+msgstr ""
+
+#: builtins/common.c:480
+#, c-format
+msgid "%s: could not get current directory: %s: %s\n"
+msgstr ""
+
+#: builtins/common.c:547 builtins/common.c:549
+#, c-format
+msgid "%s: ambiguous job spec"
+msgstr ""
+
+#: builtins/common.c:631 builtins/common.c:680 builtins/trap.def:214
+msgid "SIGJUNK"
+msgstr ""
+
+#: builtins/common.c:631 builtins/common.c:680
+msgid "Unknown"
+msgstr ""
+
+#: builtins/common.c:644
+#, c-format
+msgid "%2d) %s"
+msgstr ""
+
+#: builtins/evalfile.c:132
+#, c-format
+msgid "%s: not a regular file"
+msgstr ""
+
+#: builtins/evalfile.c:140
+#, c-format
+msgid "%s: file is too large"
+msgstr ""
+
+#: builtins/evalfile.c:178 builtins/evalfile.c:237
+msgid "_evalfile"
+msgstr ""
+
+#: builtins/evalfile.c:204 builtins/mkbuiltins.c:130 builtins/source.def:2
+#: builtins/source.def:143 builtins/source.def:170
+msgid "source"
+msgstr ""
+
+#: builtins/evalstring.c:76 builtins/evalstring.c:103
+#: builtins/evalstring.c:287
+msgid "parse_and_execute_top"
+msgstr ""
+
+#: builtins/evalstring.c:181 builtins/evalstring.c:189
+#: builtins/evalstring.c:223 builtins/evalstring.c:272
+msgid "pe_dispose"
+msgstr ""
+
+#: builtins/evalstring.c:205
+msgid "parse_and_execute"
+msgstr ""
+
+#: builtins/getopt.c:108
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: builtins/getopt.c:109
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: builtins/getopt.c:231
+msgid "sh_getopt_debug_restore_state: resetting nextchar"
+msgstr ""
+
+#: builtins/getopt.c:254
+msgid "abc:d:0123456789"
+msgstr ""
+
+#: builtins/getopt.c:271
+msgid "digits occur in two different argv-elements.\n"
+msgstr ""
+
+#: builtins/getopt.c:273
+#, c-format
+msgid "option %c\n"
+msgstr ""
+
+#: builtins/getopt.c:277
+msgid "option a\n"
+msgstr ""
+
+#: builtins/getopt.c:281
+msgid "option b\n"
+msgstr ""
+
+#: builtins/getopt.c:285
+#, c-format
+msgid "option c with value `%s'\n"
+msgstr ""
+
+#: builtins/getopt.c:292
+#, c-format
+msgid "?? sh_getopt returned character code 0%o ??\n"
+msgstr ""
+
+#: builtins/getopt.c:298
+msgid "non-option ARGV-elements: "
+msgstr ""
+
+#: builtins/mkbuiltins.c:47
+msgid "builtins.texi"
+msgstr ""
+
+#: builtins/mkbuiltins.c:130 builtins/break.def:2
+msgid "break"
+msgstr ""
+
+#: builtins/mkbuiltins.c:130 builtins/break.def:2
+msgid "continue"
+msgstr ""
+
+#: builtins/mkbuiltins.c:130 builtins/eval.def:2 builtins/eval.def:52
+msgid "eval"
+msgstr ""
+
+#: builtins/mkbuiltins.c:130 builtins/exec.def:2
+msgid "exec"
+msgstr ""
+
+#: builtins/mkbuiltins.c:131 builtins/mkbuiltins.c:138
+#: builtins/complete.def:86 builtins/setattr.def:2
+msgid "export"
+msgstr ""
+
+#: builtins/mkbuiltins.c:131 builtins/mkbuiltins.c:138 builtins/setattr.def:2
+msgid "readonly"
+msgstr ""
+
+#: builtins/mkbuiltins.c:131 builtins/return.def:2
+msgid "return"
+msgstr ""
+
+#: builtins/mkbuiltins.c:131 builtins/shift.def:2
+msgid "shift"
+msgstr ""
+
+#: builtins/mkbuiltins.c:131 builtins/set.def:2
+msgid "unset"
+msgstr ""
+
+#: builtins/mkbuiltins.c:138 builtins/alias.def:2 builtins/complete.def:78
+#: builtins/type.def:228
+msgid "alias"
+msgstr ""
+
+#: builtins/mkbuiltins.c:138 builtins/declare.def:2
+msgid "declare"
+msgstr ""
+
+#: builtins/mkbuiltins.c:138 builtins/declare.def:2
+msgid "local"
+msgstr ""
+
+#: builtins/mkbuiltins.c:138
+msgid "typeset"
+msgstr ""
+
+#: builtins/mkbuiltins.c:194
+msgid "-externfile"
+msgstr ""
+
+#: builtins/mkbuiltins.c:196
+msgid "-structfile"
+msgstr ""
+
+#: builtins/mkbuiltins.c:198
+msgid "-noproduction"
+msgstr ""
+
+#: builtins/mkbuiltins.c:200
+msgid "-document"
+msgstr ""
+
+#: builtins/mkbuiltins.c:202
+msgid "-D"
+msgstr ""
+
+#: builtins/mkbuiltins.c:218
+msgid "-documentonly"
+msgstr ""
+
+#: builtins/mkbuiltins.c:223
+msgid "-H"
+msgstr ""
+
+#: builtins/mkbuiltins.c:230
+#, c-format
+msgid "%s: Unknown flag %s.\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:245
+#, c-format
+msgid "mk-%ld"
+msgstr ""
+
+#: builtins/mkbuiltins.c:266
+#, c-format
+msgid "@c Table of builtins created with %s.\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:268
+msgid "@ftable @asis\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:305
+msgid "@end ftable\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:423
+msgid "BUILTIN"
+msgstr ""
+
+#: builtins/mkbuiltins.c:424
+msgid "DOCNAME"
+msgstr ""
+
+#: builtins/mkbuiltins.c:426
+msgid "SHORT_DOC"
+msgstr ""
+
+#: builtins/mkbuiltins.c:428
+msgid "COMMENT"
+msgstr ""
+
+#: builtins/mkbuiltins.c:429
+msgid "DEPENDS_ON"
+msgstr ""
+
+#: builtins/mkbuiltins.c:430
+msgid "PRODUCES"
+msgstr ""
+
+#: builtins/mkbuiltins.c:431
+msgid "END"
+msgstr ""
+
+#: builtins/mkbuiltins.c:500
+#, c-format
+msgid "mkbuiltins: %s: skipping zero-length file\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:551
+#, c-format
+msgid "Unknown directive `%s'"
+msgstr ""
+
+#: builtins/mkbuiltins.c:577
+#, c-format
+msgid "#line %d \"%s\"\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:580
+#, c-format
+msgid "#line %d \"%s%s\"\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:582 builtins/mkbuiltins.c:954
+msgid "./"
+msgstr ""
+
+#: builtins/mkbuiltins.c:703
+#, c-format
+msgid "%s requires an argument"
+msgstr ""
+
+#: builtins/mkbuiltins.c:715
+#, c-format
+msgid "%s must be inside of a $BUILTIN block"
+msgstr ""
+
+#: builtins/mkbuiltins.c:740
+msgid "(implied LONGDOC)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:766
+#, c-format
+msgid "%s found before $END"
+msgstr ""
+
+#: builtins/mkbuiltins.c:812
+msgid "syntax error: no current builtin for $FUNCTION directive"
+msgstr ""
+
+#: builtins/mkbuiltins.c:816
+#, c-format
+msgid "%s already has a function (%s)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:836
+#, c-format
+msgid "%s already had a docname (%s)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:856
+#, c-format
+msgid "%s already has short documentation (%s)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:910
+#, c-format
+msgid "%s already has a %s definition"
+msgstr ""
+
+#: builtins/mkbuiltins.c:923
+#, c-format
+msgid "/* %s, created from %s. */\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:955
+#, c-format
+msgid "%s:%d:"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1010
+msgid "mkbuiltins: out of virtual memory\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1066
+msgid "/* builtins.c -- the built in shell commands. */"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1068
+msgid "/* This file is manufactured by ./mkbuiltins, and should not be"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1069
+msgid " edited by hand. See the source to mkbuiltins for details. */"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1071
+msgid "/* Copyright (C) 1987-2002 Free Software Foundation, Inc."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1073
+msgid " This file is part of GNU Bash, the Bourne Again SHell."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1075
+msgid " Bash is free software; you can redistribute it and/or modify it"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1076
+msgid " under the terms of the GNU General Public License as published by"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1077
+msgid " the Free Software Foundation; either version 2, or (at your option)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1078
+msgid " any later version."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1080
+msgid " Bash is distributed in the hope that it will be useful, but WITHOUT"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1081
+msgid " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1082
+msgid " or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1083
+msgid " License for more details."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1085
+msgid " You should have received a copy of the GNU General Public License"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1086
+msgid " along with Bash; see the file COPYING. If not, write to the Free"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1087
+msgid ""
+" Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1089
+msgid "/* The list of shell builtins. Each element is name, function, flags,"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1090
+msgid ""
+" long-doc, short-doc. The long-doc field contains a pointer to an array"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1091
+msgid ""
+" of help lines. The function takes a WORD_LIST *; the first word in the"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1092
+msgid " list is the first arg to the command. The list has already had word"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1093
+msgid " expansion performed."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1095
+msgid " Functions which need to look at only the simple commands (e.g."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1096
+msgid " the enable_builtin ()), should ignore entries where"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1097
+msgid ""
+" (array[i].function == (sh_builtin_func_t *)NULL). Such entries are for"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1098
+msgid ""
+" the list of shell reserved control structures, like `if' and `while'."
+msgstr ""
+
+#: builtins/mkbuiltins.c:1099
+msgid " The end of the list is denoted with a NULL name field. */"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1101
+msgid "#include \"../builtins.h\""
+msgstr ""
+
+#: builtins/mkbuiltins.c:1106
+msgid ""
+" { (char *)0x0, (sh_builtin_func_t *)0x0, 0, (char **)0x0, (char *)0x0 }"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1107
+msgid "};"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1109
+msgid "struct builtin *shell_builtins = static_shell_builtins;"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1110
+msgid "struct builtin *current_builtin;"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1112
+msgid "int num_shell_builtins ="
+msgstr ""
+
+#: builtins/mkbuiltins.c:1113
+msgid "\tsizeof (static_shell_builtins) / sizeof (struct builtin) - 1;"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1130
+#, c-format
+msgid "#include \"%s\"\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1131 builtins/mkbuiltins.c:1138
+msgid "builtext.h"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1132
+msgid ""
+"\n"
+"struct builtin static_shell_builtins[] = {\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1137
+#, c-format
+msgid "/* %s - The list of builtins found in libbuiltins.a. */\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1188
+#, c-format
+msgid "extern int %s __P((WORD_LIST *));\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1191
+#, c-format
+msgid "extern char * const %s_doc[];\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1198
+#, c-format
+msgid " { \"%s\", "
+msgstr ""
+
+#: builtins/mkbuiltins.c:1201
+#, c-format
+msgid "%s, "
+msgstr ""
+
+#: builtins/mkbuiltins.c:1203
+msgid "(sh_builtin_func_t *)0x0, "
+msgstr ""
+
+#: builtins/mkbuiltins.c:1205
+#, c-format
+msgid "%s%s%s, %s_doc,\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1206
+msgid "BUILTIN_ENABLED | STATIC_BUILTIN"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1207
+msgid " | SPECIAL_BUILTIN"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1208
+msgid " | ASSIGNMENT_BUILTIN"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1212
+#, c-format
+msgid " \"%s\", (char *)NULL },\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1235
+#, c-format
+msgid "@item %s\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1263
+#, c-format
+msgid "char * const %s_doc[] ="
+msgstr ""
+
+#: builtins/mkbuiltins.c:1269 lib/sh/mailstat.c:126
+#, c-format
+msgid "%s/%s"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1299
+msgid "#if "
+msgstr ""
+
+#: builtins/mkbuiltins.c:1306
+#, c-format
+msgid "!defined (%s)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1308
+#, c-format
+msgid "defined (%s)"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1330
+msgid "#endif /* "
+msgstr ""
+
+#: builtins/mkbuiltins.c:1340
+msgid " */\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1360
+msgid ""
+" {\n"
+"#if defined (HELP_BUILTIN)\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1373
+msgid " \""
+msgstr ""
+
+#: builtins/mkbuiltins.c:1387
+#, c-format
+msgid "\\%c"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1391 builtins/mkbuiltins.c:1410
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1395
+msgid "\",\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1406
+#, c-format
+msgid "@%c"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1420
+msgid ""
+"#endif /* HELP_BUILTIN */\n"
+" (char *)NULL\n"
+"};\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1432
+msgid "helpfiles"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1435
+msgid "write_helpfiles: helpfiles: cannot create directory\n"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1439
+msgid "helpfiles/"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1446
+#, c-format
+msgid "helpfiles/%s"
+msgstr ""
+
+#: builtins/mkbuiltins.c:1451
+#, c-format
+msgid "write_helpfiles: cannot open %s\n"
+msgstr ""
+
+#: builtins/alias.def:2
+msgid "unalias"
+msgstr ""
+
+#: builtins/alias.def:73
+msgid "p"
+msgstr ""
+
+#: builtins/alias.def:160
+msgid "a"
+msgstr ""
+
+#: builtins/alias.def:210
+msgid "alias "
+msgstr ""
+
+#: builtins/bind.def:2
+msgid "bind"
+msgstr ""
+
+#: builtins/bind.def:121 builtins/bind.def:265
+msgid "bind_builtin"
+msgstr ""
+
+#: builtins/bind.def:127
+msgid "lvpVPsSf:q:u:m:r:x:"
+msgstr ""
+
+#: builtins/bind.def:192
+#, c-format
+msgid "`%s': invalid keymap name"
+msgstr ""
+
+#: builtins/bind.def:231
+#, c-format
+msgid "%s: cannot read: %s"
+msgstr ""
+
+#: builtins/bind.def:246
+#, c-format
+msgid "`%s': cannot unbind"
+msgstr ""
+
+#: builtins/bind.def:281 builtins/bind.def:311
+#, c-format
+msgid "`%s': unknown function name"
+msgstr ""
+
+#: builtins/bind.def:289
+#, c-format
+msgid "%s is not bound to any keys.\n"
+msgstr ""
+
+#: builtins/bind.def:293
+#, c-format
+msgid "%s can be invoked via "
+msgstr ""
+
+#: builtins/bind.def:295
+#, c-format
+msgid "\"%s\"%s"
+msgstr ""
+
+#: builtins/bind.def:295 builtins/help.def:106
+msgid ", "
+msgstr ""
+
+#: builtins/bind.def:295
+msgid ".\n"
+msgstr ""
+
+#: builtins/bind.def:297
+msgid "...\n"
+msgstr ""
+
+#: builtins/break.def:71 builtins/break.def:106
+msgid "loop count"
+msgstr ""
+
+#: builtins/break.def:126
+msgid "only meaningful in a `for', `while', or `until' loop"
+msgstr ""
+
+#: builtins/builtin.def:2 builtins/complete.def:81 builtins/type.def:294
+msgid "builtin"
+msgstr ""
+
+#: builtins/caller.def:2 builtins/caller.def:138
+msgid "caller"
+msgstr ""
+
+#: builtins/caller.def:31
+msgid "$line $filename"
+msgstr ""
+
+#: builtins/caller.def:32
+msgid "$line $subroutine $filename"
+msgstr ""
+
+#: builtins/caller.def:70
+msgid "1 NULL\n"
+msgstr ""
+
+#: builtins/caller.def:94
+#, c-format
+msgid "%s %s\n"
+msgstr ""
+
+#: builtins/caller.def:110
+#, c-format
+msgid "%s %s %s\n"
+msgstr ""
+
+#: builtins/caller.def:126
+msgid "Returns the context of the current subroutine call."
+msgstr ""
+
+#: builtins/caller.def:128
+msgid "Without EXPR, returns returns \"$line $filename\". With EXPR,"
+msgstr ""
+
+#: builtins/caller.def:129
+msgid "returns \"$line $subroutine $filename\"; this extra information"
+msgstr ""
+
+#: builtins/caller.def:130
+msgid "can be used used to provide a stack trace."
+msgstr ""
+
+#: builtins/caller.def:132
+msgid "The value of EXPR indicates how many call frames to go back before the"
+msgstr ""
+
+#: builtins/caller.def:133
+msgid "current one; the top frame is frame 0."
+msgstr ""
+
+#: builtins/caller.def:142
+msgid "caller [EXPR]"
+msgstr ""
+
+#: builtins/cd.def:2 builtins/cd.def:96 builtins/cd.def:130
+msgid "cd"
+msgstr ""
+
+#: builtins/cd.def:2 builtins/cd.def:338
+msgid "pwd"
+msgstr ""
+
+#: builtins/cd.def:105
+msgid "OLDPWD="
+msgstr ""
+
+#: builtins/cd.def:112
+msgid "PWD="
+msgstr ""
+
+#: builtins/cd.def:160 builtins/cd.def:318
+msgid "LP"
+msgstr ""
+
+#: builtins/cd.def:187
+msgid "HOME not set"
+msgstr ""
+
+#: builtins/cd.def:199
+msgid "OLDPWD not set"
+msgstr ""
+
+#: builtins/cd.def:210
+msgid "CDPATH"
+msgstr ""
+
+#: builtins/cd.def:349
+#, c-format
+msgid "write error: %s"
+msgstr ""
+
+#: builtins/cd.def:378
+msgid "chdir"
+msgstr ""
+
+#: builtins/command.def:29
+msgid "command ls"
+msgstr ""
+
+#: builtins/command.def:73
+msgid "pvV"
+msgstr ""
+
+#: builtins/command.def:120 builtins/command.def:160
+msgid "command_builtin"
+msgstr ""
+
+#: builtins/complete.def:2
+msgid "complete"
+msgstr ""
+
+#: builtins/complete.def:2 builtins/complete.def:589
+msgid "compgen"
+msgstr ""
+
+#: builtins/complete.def:79 builtins/complete.def:458
+msgid "arrayvar"
+msgstr ""
+
+#: builtins/complete.def:80 builtins/complete.def:459
+msgid "binding"
+msgstr ""
+
+#: builtins/complete.def:83
+msgid "directory"
+msgstr ""
+
+#: builtins/complete.def:84 builtins/complete.def:460
+msgid "disabled"
+msgstr ""
+
+#: builtins/complete.def:85 builtins/complete.def:461
+msgid "enabled"
+msgstr ""
+
+#: builtins/complete.def:87 builtins/type.def:315 builtins/type.def:335
+#: builtins/type.def:380
+msgid "file"
+msgstr ""
+
+#: builtins/complete.def:89 builtins/complete.def:463
+msgid "helptopic"
+msgstr ""
+
+#: builtins/complete.def:90 builtins/complete.def:464
+msgid "hostname"
+msgstr ""
+
+#: builtins/complete.def:91
+msgid "group"
+msgstr ""
+
+#: builtins/complete.def:92
+msgid "job"
+msgstr ""
+
+#: builtins/complete.def:93 builtins/set.def:193 builtins/type.def:249
+msgid "keyword"
+msgstr ""
+
+#: builtins/complete.def:94 builtins/complete.def:465
+msgid "running"
+msgstr ""
+
+#: builtins/complete.def:95
+msgid "service"
+msgstr ""
+
+#: builtins/complete.def:96 builtins/complete.def:466
+msgid "setopt"
+msgstr ""
+
+#: builtins/complete.def:97 builtins/complete.def:467
+msgid "shopt"
+msgstr ""
+
+#: builtins/complete.def:98 builtins/complete.def:468
+msgid "signal"
+msgstr ""
+
+#: builtins/complete.def:99 builtins/complete.def:469
+msgid "stopped"
+msgstr ""
+
+#: builtins/complete.def:100
+msgid "user"
+msgstr ""
+
+#: builtins/complete.def:101 builtins/set.def:787
+msgid "variable"
+msgstr ""
+
+#: builtins/complete.def:110 builtins/complete.def:434
+msgid "bashdefault"
+msgstr ""
+
+#: builtins/complete.def:111 builtins/complete.def:435
+msgid "default"
+msgstr ""
+
+#: builtins/complete.def:112 builtins/complete.def:436
+msgid "dirnames"
+msgstr ""
+
+#: builtins/complete.def:113 builtins/complete.def:437
+msgid "filenames"
+msgstr ""
+
+#: builtins/complete.def:114 builtins/complete.def:438
+msgid "nospace"
+msgstr ""
+
+#: builtins/complete.def:115 builtins/complete.def:439
+msgid "plusdirs"
+msgstr ""
+
+#: builtins/complete.def:170
+msgid "abcdefgjko:prsuvA:G:W:P:S:X:F:C:"
+msgstr ""
+
+#: builtins/complete.def:183
+msgid "-r"
+msgstr ""
+
+#: builtins/complete.def:250
+#, c-format
+msgid "%s: invalid action name"
+msgstr ""
+
+#: builtins/complete.def:380 builtins/complete.def:523
+#, c-format
+msgid "%s: no completion specification"
+msgstr ""
+
+#: builtins/complete.def:392 builtins/complete.def:400
+#, c-format
+msgid "%s %s "
+msgstr ""
+
+#: builtins/complete.def:412
+#, c-format
+msgid "-A %s "
+msgstr ""
+
+#: builtins/complete.def:418
+#, c-format
+msgid "-o %s "
+msgstr ""
+
+#: builtins/complete.def:429
+msgid "complete "
+msgstr ""
+
+#: builtins/complete.def:444
+msgid "-a"
+msgstr ""
+
+#: builtins/complete.def:445
+msgid "-b"
+msgstr ""
+
+#: builtins/complete.def:447
+msgid "-d"
+msgstr ""
+
+#: builtins/complete.def:448
+msgid "-e"
+msgstr ""
+
+#: builtins/complete.def:449
+msgid "-f"
+msgstr ""
+
+#: builtins/complete.def:450
+msgid "-g"
+msgstr ""
+
+#: builtins/complete.def:451
+msgid "-j"
+msgstr ""
+
+#: builtins/complete.def:452
+msgid "-k"
+msgstr ""
+
+#: builtins/complete.def:453 builtins/shopt.def:325
+msgid "-s"
+msgstr ""
+
+#: builtins/complete.def:454 builtins/shopt.def:325
+msgid "-u"
+msgstr ""
+
+#: builtins/complete.def:455
+msgid "-v"
+msgstr ""
+
+#: builtins/complete.def:474
+msgid "-G"
+msgstr ""
+
+#: builtins/complete.def:475
+msgid "-W"
+msgstr ""
+
+#: builtins/complete.def:476
+msgid "-P"
+msgstr ""
+
+#: builtins/complete.def:477
+msgid "-S"
+msgstr ""
+
+#: builtins/complete.def:478
+msgid "-X"
+msgstr ""
+
+#: builtins/complete.def:481
+msgid "-F"
+msgstr ""
+
+#: builtins/complete.def:482
+msgid "-C"
+msgstr ""
+
+#: builtins/complete.def:570
+msgid "warning: -F option may not work as you expect"
+msgstr ""
+
+#: builtins/complete.def:572
+msgid "warning: -C option may not work as you expect"
+msgstr ""
+
+#: builtins/declare.def:104
+msgid "can only be used in a function"
+msgstr ""
+
+#: builtins/declare.def:110
+msgid "+afiprtxF"
+msgstr ""
+
+#: builtins/declare.def:112
+msgid "+fiprtxF"
+msgstr ""
+
+#: builtins/declare.def:294
+msgid "cannot use `-f' to make functions"
+msgstr ""
+
+#: builtins/declare.def:319
+#, c-format
+msgid "%s %d %s\n"
+msgstr ""
+
+#: builtins/declare.def:388
+#, c-format
+msgid "%s: cannot destroy array variables in this way"
+msgstr ""
+
+#: builtins/echo.def:2
+msgid "echo"
+msgstr ""
+
+#: builtins/echo.def:65
+msgid "neE"
+msgstr ""
+
+#: builtins/echo.def:67
+msgid "n"
+msgstr ""
+
+#: builtins/enable.def:2
+msgid "enable"
+msgstr ""
+
+#: builtins/enable.def:104
+msgid "adnpsf:"
+msgstr ""
+
+#: builtins/enable.def:126 builtins/enable.def:134
+msgid "dynamic loading not available"
+msgstr ""
+
+#: builtins/enable.def:227
+#, c-format
+msgid "enable %s\n"
+msgstr ""
+
+#: builtins/enable.def:230
+#, c-format
+msgid "enable -n %s\n"
+msgstr ""
+
+#: builtins/enable.def:301
+#, c-format
+msgid "cannot open shared object %s: %s"
+msgstr ""
+
+#: builtins/enable.def:319
+msgid "_struct"
+msgstr ""
+
+#: builtins/enable.def:324
+#, c-format
+msgid "cannot find %s in shared object %s: %s"
+msgstr ""
+
+#: builtins/enable.def:448
+#, c-format
+msgid "%s: not dynamically loaded"
+msgstr ""
+
+#: builtins/enable.def:463
+#, c-format
+msgid "%s: cannot delete: %s"
+msgstr ""
+
+#: builtins/exec.def:100
+msgid "cla:"
+msgstr ""
+
+#: builtins/exec.def:204
+#, c-format
+msgid "%s: cannot execute: %s"
+msgstr ""
+
+#: builtins/exit.def:61
+msgid "logout\n"
+msgstr ""
+
+#: builtins/exit.def:61
+msgid "exit\n"
+msgstr ""
+
+#: builtins/exit.def:81
+msgid "not login shell: use `exit'"
+msgstr ""
+
+#: builtins/exit.def:109
+msgid "There are stopped jobs.\n"
+msgstr ""
+
+#: builtins/exit.def:145
+msgid "~/.bash_logout"
+msgstr ""
+
+#: builtins/fc.def:2 builtins/fc.def:269 builtins/fc.def:370
+msgid "fc"
+msgstr ""
+
+#: builtins/fc.def:157
+msgid "${FCEDIT:-${EDITOR:-vi}}"
+msgstr ""
+
+#: builtins/fc.def:181
+msgid ":e:lnrs"
+msgstr ""
+
+#: builtins/fc.def:252
+msgid "no command found"
+msgstr ""
+
+#: builtins/fc.def:317
+msgid "history specification"
+msgstr ""
+
+#: builtins/fc.def:335
+msgid "bash-fc"
+msgstr ""
+
+#: builtins/fc.def:338
+#, c-format
+msgid "cannot open temp file %s"
+msgstr ""
+
+#: builtins/fc.def:350
+#, c-format
+msgid "\t%c"
+msgstr ""
+
+#: builtins/fc.def:363 builtins/fc.def:368
+#, c-format
+msgid "%s %s"
+msgstr ""
+
+#: builtins/fc.def:386 builtins/fc.def:394
+msgid "fc builtin"
+msgstr ""
+
+#: builtins/fg_bg.def:123 builtins/jobs.def:264
+msgid "current"
+msgstr ""
+
+#: builtins/fg_bg.def:131
+#, c-format
+msgid "job %%%d started without job control"
+msgstr ""
+
+#: builtins/getopts.def:2
+msgid "getopts"
+msgstr ""
+
+#: builtins/getopts.def:248 builtins/getopts.def:255 builtins/getopts.def:282
+#: lib/sh/strftime.c:235 lib/sh/strftime.c:242 lib/sh/strftime.c:250
+#: lib/sh/strftime.c:257
+msgid "?"
+msgstr ""
+
+#: builtins/getopts.def:261 builtins/getopts.def:264 builtins/getopts.def:278
+#: builtins/getopts.def:283 builtins/getopts.def:288
+msgid "OPTARG"
+msgstr ""
+
+#: builtins/hash.def:2
+msgid "hash"
+msgstr ""
+
+#: builtins/hash.def:82
+msgid "hashing disabled"
+msgstr ""
+
+#: builtins/hash.def:89
+msgid "dlp:rt"
+msgstr ""
+
+#: builtins/hash.def:118
+msgid "-t"
+msgstr ""
+
+#: builtins/hash.def:127
+#, c-format
+msgid "%s: hash table empty\n"
+msgstr ""
+
+#: builtins/hash.def:210
+#, c-format
+msgid "%4d\t%s\n"
+msgstr ""
+
+#: builtins/hash.def:218 builtins/hash.def:257
+#, c-format
+msgid "builtin hash -p %s %s\n"
+msgstr ""
+
+#: builtins/hash.def:230
+msgid "hits\tcommand\n"
+msgstr ""
+
+#: builtins/hash.def:261
+#, c-format
+msgid "%s\t"
+msgstr ""
+
+#: builtins/help.def:80 builtins/help.def:105
+msgid "s"
+msgstr ""
+
+#: builtins/help.def:105
+#, c-format
+msgid "Shell commands matching keyword%s `"
+msgstr ""
+
+#: builtins/help.def:107
+msgid ""
+"'\n"
+"\n"
+msgstr ""
+
+#: builtins/help.def:121
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+#: builtins/help.def:133
+#, c-format
+msgid ""
+"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'."
+msgstr ""
+
+#: builtins/help.def:159
+#, c-format
+msgid "%s: cannot open: %s"
+msgstr ""
+
+#: builtins/help.def:167
+#, c-format
+msgid " %s\n"
+msgstr ""
+
+#: builtins/help.def:177
+msgid ""
+"These shell commands are defined internally. Type `help' to see this list.\n"
+"Type `help name' to find out more about the function `name'.\n"
+"Use `info bash' to find out more about the shell in general.\n"
+"Use `man -k' or `info' to find out more about commands not in this list.\n"
+"\n"
+"A star (*) next to a name means that the command is disabled.\n"
+"\n"
+msgstr ""
+
+#: builtins/history.def:2 builtins/set.def:189
+msgid "history"
+msgstr ""
+
+#: builtins/history.def:106
+msgid "acd:npsrw"
+msgstr ""
+
+#: builtins/history.def:147
+msgid "cannot use more than one of -anrw"
+msgstr ""
+
+#: builtins/history.def:179
+msgid "history position"
+msgstr ""
+
+#: builtins/history.def:289
+#, c-format
+msgid "%5d%c %s%s\n"
+msgstr ""
+
+#: builtins/history.def:389
+#, c-format
+msgid "%s: history expansion failed"
+msgstr ""
+
+#: builtins/inlib.def:2
+msgid "inlib"
+msgstr ""
+
+#: builtins/inlib.def:67
+#, c-format
+msgid "%s: inlib failed"
+msgstr ""
+
+#: builtins/jobs.def:2
+msgid "jobs"
+msgstr ""
+
+#: builtins/jobs.def:2
+msgid "disown"
+msgstr ""
+
+#: builtins/jobs.def:85
+msgid "lpnxrs"
+msgstr ""
+
+#: builtins/jobs.def:101
+msgid "no other options allowed with `-x'"
+msgstr ""
+
+#: builtins/jobs.def:185 builtins/jobs.def:197
+msgid "jobs_builtin"
+msgstr ""
+
+#: builtins/jobs.def:224
+msgid "ahr"
+msgstr ""
+
+#: builtins/kill.def:2
+msgid "kill"
+msgstr ""
+
+#: builtins/kill.def:186
+#, c-format
+msgid "%s: arguments must be process or job IDs"
+msgstr ""
+
+#: builtins/kill.def:247
+msgid "Unknown error"
+msgstr ""
+
+#: builtins/kill.def:248
+#, c-format
+msgid "(%ld) - %s"
+msgstr ""
+
+#: builtins/let.def:2
+msgid "let"
+msgstr ""
+
+#: builtins/printf.def:2
+msgid "printf"
+msgstr ""
+
+#: builtins/printf.def:66
+msgid "<PRIdMAX>lld"
+msgstr ""
+
+#: builtins/printf.def:68
+msgid "<PRIdMAX>ld"
+msgstr ""
+
+#: builtins/printf.def:103
+msgid "#'-+ 0"
+msgstr ""
+
+#: builtins/printf.def:104
+msgid "hjlLtz"
+msgstr ""
+
+#: builtins/printf.def:119
+msgid "L"
+msgstr ""
+
+#: builtins/printf.def:248
+#, c-format
+msgid "`%s': missing format character"
+msgstr ""
+
+#: builtins/printf.def:346 builtins/printf.def:373
+msgid "<PRIdMAX>"
+msgstr ""
+
+#: builtins/printf.def:355 builtins/printf.def:378
+msgid "l"
+msgstr ""
+
+#: builtins/printf.def:407
+#, c-format
+msgid "`%c': invalid format character"
+msgstr ""
+
+#: builtins/printf.def:427
+#, c-format
+msgid "warning: %s: %s"
+msgstr ""
+
+#: builtins/printf.def:504
+#, c-format
+msgid "format parsing problem: %s"
+msgstr ""
+
+#: builtins/printf.def:600
+msgid "missing hex digit for \\x"
+msgstr ""
+
+#: builtins/pushd.def:2 builtins/pushd.def:171 builtins/pushd.def:230
+#: builtins/pushd.def:263 builtins/pushd.def:715
+msgid "pushd"
+msgstr ""
+
+#: builtins/pushd.def:2 builtins/pushd.def:724
+msgid "popd"
+msgstr ""
+
+#: builtins/pushd.def:2 builtins/pushd.def:432 builtins/pushd.def:733
+msgid "dirs"
+msgstr ""
+
+#: builtins/pushd.def:167
+msgid "no other directory"
+msgstr ""
+
+#: builtins/pushd.def:434
+msgid "<no current directory>"
+msgstr ""
+
+#: builtins/pushd.def:436 builtins/pushd.def:455
+#, c-format
+msgid "%2d %s"
+msgstr ""
+
+#: builtins/pushd.def:463
+#, c-format
+msgid ""
+"\n"
+"%2d %s"
+msgstr ""
+
+#: builtins/pushd.def:478
+msgid "directory stack empty"
+msgstr ""
+
+#: builtins/pushd.def:480
+msgid "directory stack index"
+msgstr ""
+
+#: builtins/pushd.def:625
+msgid "dirstack"
+msgstr ""
+
+#: builtins/pushd.def:651
+msgid "Display the list of currently remembered directories. Directories"
+msgstr ""
+
+#: builtins/pushd.def:652
+msgid "find their way onto the list with the `pushd' command; you can get"
+msgstr ""
+
+#: builtins/pushd.def:653
+msgid "back up through the list with the `popd' command."
+msgstr ""
+
+#: builtins/pushd.def:655
+msgid "The -l flag specifies that `dirs' should not print shorthand versions"
+msgstr ""
+
+#: builtins/pushd.def:656
+msgid "of directories which are relative to your home directory. This means"
+msgstr ""
+
+#: builtins/pushd.def:657
+msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag"
+msgstr ""
+
+#: builtins/pushd.def:658
+msgid "causes `dirs' to print the directory stack with one entry per line,"
+msgstr ""
+
+#: builtins/pushd.def:659
+msgid "prepending the directory name with its position in the stack. The -p"
+msgstr ""
+
+#: builtins/pushd.def:660
+msgid "flag does the same thing, but the stack position is not prepended."
+msgstr ""
+
+#: builtins/pushd.def:661
+msgid "The -c flag clears the directory stack by deleting all of the elements."
+msgstr ""
+
+#: builtins/pushd.def:663
+msgid "+N displays the Nth entry counting from the left of the list shown by"
+msgstr ""
+
+#: builtins/pushd.def:664 builtins/pushd.def:667
+msgid " dirs when invoked without options, starting with zero."
+msgstr ""
+
+#: builtins/pushd.def:666
+msgid ""
+"-N displays the Nth entry counting from the right of the list shown by"
+msgstr ""
+
+#: builtins/pushd.def:672
+msgid "Adds a directory to the top of the directory stack, or rotates"
+msgstr ""
+
+#: builtins/pushd.def:673
+msgid "the stack, making the new top of the stack the current working"
+msgstr ""
+
+#: builtins/pushd.def:674
+msgid "directory. With no arguments, exchanges the top two directories."
+msgstr ""
+
+#: builtins/pushd.def:676
+msgid "+N Rotates the stack so that the Nth directory (counting"
+msgstr ""
+
+#: builtins/pushd.def:677
+msgid " from the left of the list shown by `dirs', starting with"
+msgstr ""
+
+#: builtins/pushd.def:678 builtins/pushd.def:682
+msgid " zero) is at the top."
+msgstr ""
+
+#: builtins/pushd.def:680
+msgid "-N Rotates the stack so that the Nth directory (counting"
+msgstr ""
+
+#: builtins/pushd.def:681
+msgid " from the right of the list shown by `dirs', starting with"
+msgstr ""
+
+#: builtins/pushd.def:684
+msgid "-n suppress the normal change of directory when adding directories"
+msgstr ""
+
+#: builtins/pushd.def:685
+msgid " to the stack, so only the stack is manipulated."
+msgstr ""
+
+#: builtins/pushd.def:687
+msgid "dir adds DIR to the directory stack at the top, making it the"
+msgstr ""
+
+#: builtins/pushd.def:688
+msgid " new current working directory."
+msgstr ""
+
+#: builtins/pushd.def:690 builtins/pushd.def:710
+msgid "You can see the directory stack with the `dirs' command."
+msgstr ""
+
+#: builtins/pushd.def:695
+msgid "Removes entries from the directory stack. With no arguments,"
+msgstr ""
+
+#: builtins/pushd.def:696
+msgid "removes the top directory from the stack, and cd's to the new"
+msgstr ""
+
+#: builtins/pushd.def:697
+msgid "top directory."
+msgstr ""
+
+#: builtins/pushd.def:699
+msgid "+N removes the Nth entry counting from the left of the list"
+msgstr ""
+
+#: builtins/pushd.def:700
+msgid " shown by `dirs', starting with zero. For example: `popd +0'"
+msgstr ""
+
+#: builtins/pushd.def:701
+msgid " removes the first directory, `popd +1' the second."
+msgstr ""
+
+#: builtins/pushd.def:703
+msgid "-N removes the Nth entry counting from the right of the list"
+msgstr ""
+
+#: builtins/pushd.def:704
+msgid " shown by `dirs', starting with zero. For example: `popd -0'"
+msgstr ""
+
+#: builtins/pushd.def:705
+msgid " removes the last directory, `popd -1' the next to last."
+msgstr ""
+
+#: builtins/pushd.def:707
+msgid "-n suppress the normal change of directory when removing directories"
+msgstr ""
+
+#: builtins/pushd.def:708
+msgid " from the stack, so only the stack is manipulated."
+msgstr ""
+
+#: builtins/pushd.def:719
+msgid "pushd [+N | -N] [-n] [dir]"
+msgstr ""
+
+#: builtins/pushd.def:728
+msgid "popd [+N | -N] [-n]"
+msgstr ""
+
+#: builtins/pushd.def:737
+msgid "dirs [-clpv] [+N] [-N]"
+msgstr ""
+
+#: builtins/read.def:2
+msgid "read"
+msgstr ""
+
+#: builtins/read.def:178
+msgid "ersa:d:n:p:t:u:"
+msgstr ""
+
+#: builtins/read.def:205
+#, c-format
+msgid "%s: invalid timeout specification"
+msgstr ""
+
+#: builtins/read.def:228
+#, c-format
+msgid "%s: invalid file descriptor specification"
+msgstr ""
+
+#: builtins/read.def:235
+#, c-format
+msgid "%d: invalid file descriptor: %s"
+msgstr ""
+
+#: builtins/read.def:272 builtins/read.def:317 builtins/read.def:491
+msgid "read_builtin"
+msgstr ""
+
+#: builtins/read.def:461
+#, c-format
+msgid "read error: %d: %s"
+msgstr ""
+
+#: builtins/reserved.def:123
+msgid "let EXPRESSION"
+msgstr ""
+
+#: builtins/return.def:61
+msgid "can only `return' from a function or sourced script"
+msgstr ""
+
+#: builtins/set.def:161 builtins/shopt.def:170
+msgid "on"
+msgstr ""
+
+#: builtins/set.def:162 builtins/shopt.def:171
+msgid "off"
+msgstr ""
+
+#: builtins/set.def:174
+msgid "allexport"
+msgstr ""
+
+#: builtins/set.def:176
+msgid "braceexpand"
+msgstr ""
+
+#: builtins/set.def:181
+msgid "errexit"
+msgstr ""
+
+#: builtins/set.def:182
+msgid "errtrace"
+msgstr ""
+
+#: builtins/set.def:183
+msgid "functrace"
+msgstr ""
+
+#: builtins/set.def:184
+msgid "hashall"
+msgstr ""
+
+#: builtins/set.def:186
+msgid "histexpand"
+msgstr ""
+
+#: builtins/set.def:192
+msgid "interactive-comments"
+msgstr ""
+
+#: builtins/set.def:194
+msgid "monitor"
+msgstr ""
+
+#: builtins/set.def:195
+msgid "noclobber"
+msgstr ""
+
+#: builtins/set.def:196
+msgid "noexec"
+msgstr ""
+
+#: builtins/set.def:197
+msgid "noglob"
+msgstr ""
+
+#: builtins/set.def:199
+msgid "nolog"
+msgstr ""
+
+#: builtins/set.def:202
+msgid "notify"
+msgstr ""
+
+#: builtins/set.def:204
+msgid "nounset"
+msgstr ""
+
+#: builtins/set.def:205
+msgid "onecmd"
+msgstr ""
+
+#: builtins/set.def:206
+msgid "physical"
+msgstr ""
+
+#: builtins/set.def:207
+msgid "pipefail"
+msgstr ""
+
+#: builtins/set.def:209
+msgid "privileged"
+msgstr ""
+
+#: builtins/set.def:212
+msgid "vi"
+msgstr ""
+
+#: builtins/set.def:214
+msgid "xtrace"
+msgstr ""
+
+#: builtins/set.def:252 builtins/shopt.def:56
+#, c-format
+msgid "%-15s\t%s\n"
+msgstr ""
+
+#: builtins/set.def:262 builtins/shopt.def:414
+#, c-format
+msgid "set %co %s\n"
+msgstr ""
+
+#: builtins/set.def:313
+msgid "10"
+msgstr ""
+
+#: builtins/set.def:345
+msgid "editing-mode"
+msgstr ""
+
+#: builtins/set.def:493 builtins/set.def:505 builtins/set.def:541
+msgid "SHELLOPTS"
+msgstr ""
+
+#: builtins/set.def:722
+msgid "fv"
+msgstr ""
+
+#: builtins/set.def:742
+msgid "cannot simultaneously unset a function and a variable"
+msgstr ""
+
+#: builtins/set.def:779
+#, c-format
+msgid "%s: cannot unset"
+msgstr ""
+
+#: builtins/set.def:786
+#, c-format
+msgid "%s: cannot unset: readonly %s"
+msgstr ""
+
+#: builtins/set.def:797
+#, c-format
+msgid "%s: not an array variable"
+msgstr ""
+
+#: builtins/setattr.def:98
+msgid "afnp"
+msgstr ""
+
+#: builtins/setattr.def:100
+msgid "fnp"
+msgstr ""
+
+#: builtins/setattr.def:164
+#, c-format
+msgid "%s: not a function"
+msgstr ""
+
+#: builtins/setattr.def:201
+msgid "-ra"
+msgstr ""
+
+#: builtins/setattr.def:332
+#, c-format
+msgid "declare -%s "
+msgstr ""
+
+#: builtins/setattr.def:334
+#, c-format
+msgid "%s -%s "
+msgstr ""
+
+#: builtins/shift.def:65 builtins/shift.def:71
+msgid "shift count"
+msgstr ""
+
+#: builtins/shopt.def:115
+msgid "cdable_vars"
+msgstr ""
+
+#: builtins/shopt.def:116
+msgid "cdspell"
+msgstr ""
+
+#: builtins/shopt.def:117
+msgid "checkhash"
+msgstr ""
+
+#: builtins/shopt.def:118
+msgid "checkwinsize"
+msgstr ""
+
+#: builtins/shopt.def:120
+msgid "cmdhist"
+msgstr ""
+
+#: builtins/shopt.def:122
+msgid "dotglob"
+msgstr ""
+
+#: builtins/shopt.def:123
+msgid "execfail"
+msgstr ""
+
+#: builtins/shopt.def:124
+msgid "expand_aliases"
+msgstr ""
+
+#: builtins/shopt.def:126
+msgid "extdebug"
+msgstr ""
+
+#: builtins/shopt.def:129
+msgid "extglob"
+msgstr ""
+
+#: builtins/shopt.def:131
+msgid "extquote"
+msgstr ""
+
+#: builtins/shopt.def:132
+msgid "failglob"
+msgstr ""
+
+#: builtins/shopt.def:134
+msgid "force_fignore"
+msgstr ""
+
+#: builtins/shopt.def:135
+msgid "gnu_errfmt"
+msgstr ""
+
+#: builtins/shopt.def:136
+msgid "histreedit"
+msgstr ""
+
+#: builtins/shopt.def:139
+msgid "histappend"
+msgstr ""
+
+#: builtins/shopt.def:142
+msgid "histverify"
+msgstr ""
+
+#: builtins/shopt.def:143
+msgid "hostcomplete"
+msgstr ""
+
+#: builtins/shopt.def:145
+msgid "huponexit"
+msgstr ""
+
+#: builtins/shopt.def:146
+msgid "interactive_comments"
+msgstr ""
+
+#: builtins/shopt.def:148
+msgid "lithist"
+msgstr ""
+
+#: builtins/shopt.def:150
+msgid "login_shell"
+msgstr ""
+
+#: builtins/shopt.def:151
+msgid "mailwarn"
+msgstr ""
+
+#: builtins/shopt.def:153
+msgid "no_empty_cmd_completion"
+msgstr ""
+
+#: builtins/shopt.def:155
+msgid "nocaseglob"
+msgstr ""
+
+#: builtins/shopt.def:156
+msgid "nullglob"
+msgstr ""
+
+#: builtins/shopt.def:158
+msgid "progcomp"
+msgstr ""
+
+#: builtins/shopt.def:160
+msgid "promptvars"
+msgstr ""
+
+#: builtins/shopt.def:162
+msgid "restricted_shell"
+msgstr ""
+
+#: builtins/shopt.def:164
+msgid "shift_verbose"
+msgstr ""
+
+#: builtins/shopt.def:165
+msgid "sourcepath"
+msgstr ""
+
+#: builtins/shopt.def:166
+msgid "xpg_echo"
+msgstr ""
+
+#: builtins/shopt.def:196
+msgid "psuoq"
+msgstr ""
+
+#: builtins/shopt.def:224
+msgid "cannot set and unset shell options simultaneously"
+msgstr ""
+
+#: builtins/shopt.def:289
+#, c-format
+msgid "%s: invalid shell option name"
+msgstr ""
+
+#: builtins/shopt.def:325
+#, c-format
+msgid "shopt %s %s\n"
+msgstr ""
+
+#: builtins/source.def:116
+msgid "filename argument required"
+msgstr ""
+
+#: builtins/source.def:136
+#, c-format
+msgid "%s: file not found"
+msgstr ""
+
+#: builtins/suspend.def:2
+msgid "suspend"
+msgstr ""
+
+#: builtins/suspend.def:77
+msgid "f"
+msgstr ""
+
+#: builtins/suspend.def:92
+msgid "cannot suspend"
+msgstr ""
+
+#: builtins/suspend.def:102
+msgid "cannot suspend a login shell"
+msgstr ""
+
+#: builtins/test.def:2 builtins/test.def:98
+msgid "test"
+msgstr ""
+
+#: builtins/times.def:2
+msgid "times"
+msgstr ""
+
+#: builtins/times.def:109
+msgid ""
+"0.00 0.00\n"
+"0.00 0.00\n"
+msgstr ""
+
+#: builtins/trap.def:39
+msgid "kill -signal $$"
+msgstr ""
+
+#: builtins/trap.def:94
+msgid "lp"
+msgstr ""
+
+#: builtins/trap.def:215
+#, c-format
+msgid "trap -- %s %d\n"
+msgstr ""
+
+#: builtins/trap.def:219 builtins/trap.def:221 builtins/trap.def:224
+#, c-format
+msgid "trap -- %s %s\n"
+msgstr ""
+
+#: builtins/type.def:2 builtins/type.def:127
+msgid "type"
+msgstr ""
+
+#: builtins/type.def:127
+msgid "-type"
+msgstr ""
+
+#: builtins/type.def:132
+msgid "path"
+msgstr ""
+
+#: builtins/type.def:132
+msgid "-path"
+msgstr ""
+
+#: builtins/type.def:137
+msgid "all"
+msgstr ""
+
+#: builtins/type.def:137
+msgid "-all"
+msgstr ""
+
+#: builtins/type.def:145
+msgid "afptP"
+msgstr ""
+
+#: builtins/type.def:230
+#, c-format
+msgid "%s is aliased to `%s'\n"
+msgstr ""
+
+#: builtins/type.def:234
+#, c-format
+msgid "alias %s=%s\n"
+msgstr ""
+
+#: builtins/type.def:251
+#, c-format
+msgid "%s is a shell keyword\n"
+msgstr ""
+
+#: builtins/type.def:271
+#, c-format
+msgid "%s is a function\n"
+msgstr ""
+
+#: builtins/type.def:296
+#, c-format
+msgid "%s is a shell builtin\n"
+msgstr ""
+
+#: builtins/type.def:317 builtins/type.def:382
+#, c-format
+msgid "%s is %s\n"
+msgstr ""
+
+#: builtins/type.def:337
+#, c-format
+msgid "%s is hashed (%s)\n"
+msgstr ""
+
+#: builtins/ulimit.def:2
+msgid "ulimit"
+msgstr ""
+
+#: builtins/ulimit.def:111
+#, c-format
+msgid "%ld%s"
+msgstr ""
+
+#: builtins/ulimit.def:195
+msgid "core file size"
+msgstr ""
+
+#: builtins/ulimit.def:195 builtins/ulimit.def:200
+msgid "blocks"
+msgstr ""
+
+#: builtins/ulimit.def:198
+msgid "data seg size"
+msgstr ""
+
+#: builtins/ulimit.def:198 builtins/ulimit.def:202 builtins/ulimit.def:205
+#: builtins/ulimit.def:210 builtins/ulimit.def:217 builtins/ulimit.def:220
+msgid "kbytes"
+msgstr ""
+
+#: builtins/ulimit.def:200
+msgid "file size"
+msgstr ""
+
+#: builtins/ulimit.def:202
+msgid "max locked memory"
+msgstr ""
+
+#: builtins/ulimit.def:205
+msgid "max memory size"
+msgstr ""
+
+#: builtins/ulimit.def:207
+msgid "open files"
+msgstr ""
+
+#: builtins/ulimit.def:208
+msgid "pipe size"
+msgstr ""
+
+#: builtins/ulimit.def:208
+msgid "512 bytes"
+msgstr ""
+
+#: builtins/ulimit.def:210
+msgid "stack size"
+msgstr ""
+
+#: builtins/ulimit.def:213
+msgid "cpu time"
+msgstr ""
+
+#: builtins/ulimit.def:213
+msgid "seconds"
+msgstr ""
+
+#: builtins/ulimit.def:215
+msgid "max user processes"
+msgstr ""
+
+#: builtins/ulimit.def:217
+msgid "virtual memory"
+msgstr ""
+
+#: builtins/ulimit.def:220
+msgid "swap size"
+msgstr ""
+
+#: builtins/ulimit.def:328 builtins/ulimit.def:401 builtins/ulimit.def:674
+msgid "unlimited"
+msgstr ""
+
+#: builtins/ulimit.def:330
+#, c-format
+msgid "%s: invalid limit argument"
+msgstr ""
+
+#: builtins/ulimit.def:356
+#, c-format
+msgid "`%c': bad command"
+msgstr ""
+
+#: builtins/ulimit.def:385 builtins/ulimit.def:649
+#, c-format
+msgid "%s: cannot get limit: %s"
+msgstr ""
+
+#: builtins/ulimit.def:397 builtins/ulimit.def:676
+msgid "hard"
+msgstr ""
+
+#: builtins/ulimit.def:399 builtins/ulimit.def:678
+msgid "soft"
+msgstr ""
+
+#: builtins/ulimit.def:411
+msgid "limit"
+msgstr ""
+
+#: builtins/ulimit.def:423 builtins/ulimit.def:716
+#, c-format
+msgid "%s: cannot modify limit: %s"
+msgstr ""
+
+#: builtins/ulimit.def:667
+#, c-format
+msgid "(%s, -%c) "
+msgstr ""
+
+#: builtins/ulimit.def:669
+#, c-format
+msgid "(-%c) "
+msgstr ""
+
+#: builtins/ulimit.def:671
+#, c-format
+msgid "%-18s %16s"
+msgstr ""
+
+#: builtins/umask.def:2
+msgid "umask"
+msgstr ""
+
+#: builtins/umask.def:80
+msgid "Sp"
+msgstr ""
+
+#: builtins/umask.def:110
+msgid "octal number"
+msgstr ""
+
+#: builtins/umask.def:131
+#, c-format
+msgid "umask%s "
+msgstr ""
+
+#: builtins/umask.def:131
+msgid " -S"
+msgstr ""
+
+#: builtins/umask.def:135
+#, c-format
+msgid "%04lo\n"
+msgstr ""
+
+#: builtins/umask.def:178
+#, c-format
+msgid "u=%s,g=%s,o=%s\n"
+msgstr ""
+
+#: builtins/umask.def:194
+msgid "agou"
+msgstr ""
+
+#: builtins/umask.def:224
+#, c-format
+msgid "`%c': invalid symbolic mode operator"
+msgstr ""
+
+#: builtins/umask.def:229
+msgid "rwx"
+msgstr ""
+
+#: builtins/umask.def:277
+#, c-format
+msgid "`%c': invalid symbolic mode character"
+msgstr ""
+
+#: lib/sh/clock.c:79 lib/sh/timeval.c:143
+#, c-format
+msgid "%ldm%d.%03ds"
+msgstr ""
+
+#: lib/sh/fmtulong.c:55 lib/sh/snprintf.c:167
+msgid "0123456789abcdef"
+msgstr ""
+
+#: lib/sh/fmtulong.c:56 lib/sh/snprintf.c:168
+msgid "0123456789ABCDEF"
+msgstr ""
+
+#: lib/sh/fmtulong.c:99
+msgid "invalid base"
+msgstr ""
+
+#: lib/sh/getcwd.c:75
+msgid "../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../.."
+msgstr ""
+
+#: lib/sh/getcwd.c:304
+msgid "cwd: getcwd"
+msgstr ""
+
+#: lib/sh/inet_aton.c:59
+msgid "@(#)inet_addr.c\t8.1 (Berkeley) 6/17/93"
+msgstr ""
+
+#: lib/sh/inet_aton.c:60
+msgid "$Id: inet_addr.c,v 1.5 1996/08/14 03:48:37 drepper Exp $"
+msgstr ""
+
+#: lib/sh/mailstat.c:95
+#, c-format
+msgid "%s/cur"
+msgstr ""
+
+#: lib/sh/mailstat.c:101
+#, c-format
+msgid "%s/tmp"
+msgstr ""
+
+#: lib/sh/mailstat.c:107
+#, c-format
+msgid "%s/new"
+msgstr ""
+
+#: lib/sh/mailstat.c:126
+msgid "cur"
+msgstr ""
+
+#: lib/sh/mailstat.c:126
+msgid "new"
+msgstr ""
+
+#: lib/sh/mailstat.c:127
+#, c-format
+msgid "%s/"
+msgstr ""
+
+#: lib/sh/makepath.c:77
+msgid "sh_makepath"
+msgstr ""
+
+#: lib/sh/mktime.c:330
+#, c-format
+msgid "%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d"
+msgstr ""
+
+#: lib/sh/mktime.c:345
+msgid "mktime ("
+msgstr ""
+
+#: lib/sh/mktime.c:347
+msgid ""
+")\n"
+"yields ("
+msgstr ""
+
+#: lib/sh/mktime.c:349
+#, c-format
+msgid ") == %ld, should be %ld\n"
+msgstr ""
+
+#: lib/sh/mktime.c:367
+#, c-format
+msgid "%d-%d-%d%c"
+msgstr ""
+
+#: lib/sh/mktime.c:370
+#, c-format
+msgid "%d:%d:%d%c"
+msgstr ""
+
+#: lib/sh/mktime.c:380
+#, c-format
+msgid "mktime returns %ld == "
+msgstr ""
+
+#: lib/sh/mktime.c:410
+#, c-format
+msgid ""
+"Usage:\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n"
+"\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n"
+"\t%s FROM BY TO - # Do not test those values (for benchmark).\n"
+msgstr ""
+
+#: lib/sh/netopen.c:128
+msgid "tcp"
+msgstr ""
+
+#: lib/sh/netopen.c:128
+msgid "udp"
+msgstr ""
+
+#: lib/sh/netopen.c:156
+#, c-format
+msgid "%s: host unknown"
+msgstr ""
+
+#: lib/sh/netopen.c:163
+#, c-format
+msgid "%s: invalid service"
+msgstr ""
+
+#: lib/sh/netopen.c:176 lib/sh/netopen.c:234
+msgid "socket"
+msgstr ""
+
+#: lib/sh/netopen.c:183 lib/sh/netopen.c:246
+msgid "connect"
+msgstr ""
+
+#: lib/sh/netopen.c:294
+#, c-format
+msgid "%s: bad network path specification"
+msgstr ""
+
+#: lib/sh/netopen.c:334
+msgid "network operations not supported"
+msgstr ""
+
+#: lib/sh/pathphys.c:269
+msgid "sh_realpath"
+msgstr ""
+
+#: lib/sh/shmatch.c:95 lib/sh/shmatch.c:96
+msgid "BASH_REMATCH"
+msgstr ""
+
+#: lib/sh/snprintf.c:402
+msgid "\ 3"
+msgstr ""
+
+#: lib/sh/snprintf.c:892
+msgid "INF"
+msgstr ""
+
+#: lib/sh/snprintf.c:892
+msgid "NAN"
+msgstr ""
+
+#: lib/sh/snprintf.c:893
+msgid "inf"
+msgstr ""
+
+#: lib/sh/snprintf.c:893
+msgid "nan"
+msgstr ""
+
+#: lib/sh/snprintf.c:1646
+msgid "out of virtual memory\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1695 lib/sh/snprintf.c:1697 lib/sh/snprintf.c:1699
+msgid "abcde\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1696
+#, c-format
+msgid "snprintf returns %d with NULL first argument and size of 0\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1698
+#, c-format
+msgid "snprintf returns %d with non-NULL first argument and size of 0\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1700
+#, c-format
+msgid "snprintf returns %d with NULL first argument and non-zero size\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1710
+#, c-format
+msgid "/%%ld %%ld/, 336, 336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1711 lib/sh/snprintf.c:1712 lib/sh/snprintf.c:1713
+#, c-format
+msgid "/%ld %ld/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1717
+#, c-format
+msgid "/%%d/, 336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1718 lib/sh/snprintf.c:1719 lib/sh/snprintf.c:1720
+#, c-format
+msgid "/%d/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1724
+#, c-format
+msgid "/%%2d/, 336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1725 lib/sh/snprintf.c:1726 lib/sh/snprintf.c:1727
+#, c-format
+msgid "/%2d/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1731
+#, c-format
+msgid "/%%10d/, 336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1732 lib/sh/snprintf.c:1733 lib/sh/snprintf.c:1734
+#, c-format
+msgid "/%10d/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1738
+#, c-format
+msgid "/%%-10d/, 336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1739 lib/sh/snprintf.c:1740 lib/sh/snprintf.c:1741
+#, c-format
+msgid "/%-10d/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1748
+#, c-format
+msgid "/%%f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1749 lib/sh/snprintf.c:1750 lib/sh/snprintf.c:1751
+#, c-format
+msgid "/%f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1755
+#, c-format
+msgid "/%%e/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1756 lib/sh/snprintf.c:1757 lib/sh/snprintf.c:1758
+#, c-format
+msgid "/%e/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1762
+#, c-format
+msgid "/%%4.2f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1763 lib/sh/snprintf.c:1764 lib/sh/snprintf.c:1765
+#, c-format
+msgid "/%4.2f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1769
+#, c-format
+msgid "/%%3.1f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1770 lib/sh/snprintf.c:1771 lib/sh/snprintf.c:1772
+#, c-format
+msgid "/%3.1f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1776
+#, c-format
+msgid "/%%10.3f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1777 lib/sh/snprintf.c:1778 lib/sh/snprintf.c:1779
+#, c-format
+msgid "/%10.3f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1783
+#, c-format
+msgid "/%%10.3e/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1784 lib/sh/snprintf.c:1785 lib/sh/snprintf.c:1786
+#, c-format
+msgid "/%10.3e/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1790
+#, c-format
+msgid "/%%+4.2f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1791 lib/sh/snprintf.c:1792 lib/sh/snprintf.c:1793
+#, c-format
+msgid "/%+4.2f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1797
+#, c-format
+msgid "/%%010.2f/, 1234.56\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1798 lib/sh/snprintf.c:1799 lib/sh/snprintf.c:1800
+#, c-format
+msgid "/%010.2f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1804
+msgid "Outstanding acting !"
+msgstr ""
+
+#: lib/sh/snprintf.c:1807
+#, c-format
+msgid "/%%2s/, \"%s\"\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1808 lib/sh/snprintf.c:1809 lib/sh/snprintf.c:1810
+#, c-format
+msgid "/%2s/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1814
+#, c-format
+msgid "/%%22s/ %s\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1815 lib/sh/snprintf.c:1816 lib/sh/snprintf.c:1817
+#, c-format
+msgid "/%22s/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1821
+#, c-format
+msgid "/%%22.5s/ %s\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1822 lib/sh/snprintf.c:1823 lib/sh/snprintf.c:1824
+#, c-format
+msgid "/%22.5s/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1828
+#, c-format
+msgid "/%%-22.5s/ %s\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1829 lib/sh/snprintf.c:1830 lib/sh/snprintf.c:1831
+#, c-format
+msgid "/%-22.5s/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1837
+#, c-format
+msgid "%%x %%X %%#x, 31, 31, 31\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1838 lib/sh/snprintf.c:1839 lib/sh/snprintf.c:1840
+#, c-format
+msgid "%x %X %#x\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1844
+#, c-format
+msgid "**%%d**%% d**%% d**, 42, 42, -42\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1845 lib/sh/snprintf.c:1846 lib/sh/snprintf.c:1847
+#, c-format
+msgid "**%d**% d**% d**\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1853
+#, c-format
+msgid "/%%g/, 31.4\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1854 lib/sh/snprintf.c:1855 lib/sh/snprintf.c:1856
+#: lib/sh/snprintf.c:1975 lib/sh/snprintf.c:1976 lib/sh/snprintf.c:1977
+#: lib/sh/snprintf.c:1982 lib/sh/snprintf.c:1983 lib/sh/snprintf.c:1984
+#, c-format
+msgid "/%g/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1860
+#, c-format
+msgid "/%%.6g/, 31.4\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1861 lib/sh/snprintf.c:1862 lib/sh/snprintf.c:1863
+#, c-format
+msgid "/%.6g/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1867
+#, c-format
+msgid "/%%.1G/, 31.4\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1868 lib/sh/snprintf.c:1869 lib/sh/snprintf.c:1870
+#: lib/sh/snprintf.c:1875 lib/sh/snprintf.c:1876 lib/sh/snprintf.c:1877
+#, c-format
+msgid "/%.1G/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1874
+#, c-format
+msgid "/%%.1G/, 3100000000.4\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1881
+#, c-format
+msgid "abc%%n\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1882 lib/sh/snprintf.c:1883 lib/sh/snprintf.c:1885
+#, c-format
+msgid "abc%n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1884 lib/sh/snprintf.c:1886
+#, c-format
+msgid ""
+"%d\n"
+"\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1888
+#, c-format
+msgid "%%*.*s --> 10.10\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1889 lib/sh/snprintf.c:1890 lib/sh/snprintf.c:1891
+#, c-format
+msgid "%*.*s\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1895
+#, c-format
+msgid "%%%%%%%%\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1896 lib/sh/snprintf.c:1897 lib/sh/snprintf.c:1898
+#, c-format
+msgid "%%%%\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1902
+msgid "Hello this is a too big string for the buffer"
+msgstr ""
+
+#: lib/sh/snprintf.c:1904
+#, c-format
+msgid "<%%>, %s\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1907 lib/sh/snprintf.c:1908 lib/sh/snprintf.c:1915
+#: lib/sh/snprintf.c:1922 lib/sh/snprintf.c:1930 lib/sh/snprintf.c:1939
+#: lib/sh/snprintf.c:1948 lib/sh/snprintf.c:1955
+#, c-format
+msgid "<%s>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1909 lib/sh/snprintf.c:1916 lib/sh/snprintf.c:1923
+#: lib/sh/snprintf.c:1931 lib/sh/snprintf.c:1940 lib/sh/snprintf.c:1949
+#: lib/sh/snprintf.c:1956
+#, c-format
+msgid ""
+"<%s>\n"
+"\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1911
+#, c-format
+msgid "<%%p> vsnprintf\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1912 lib/sh/snprintf.c:1913
+#, c-format
+msgid "%p"
+msgstr ""
+
+#: lib/sh/snprintf.c:1914
+#, c-format
+msgid "<%p>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1918
+#, c-format
+msgid "<%%lu> LONG_MAX+1\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1919 lib/sh/snprintf.c:1920
+#, c-format
+msgid "%lu"
+msgstr ""
+
+#: lib/sh/snprintf.c:1921
+#, c-format
+msgid "<%lu>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1926
+#, c-format
+msgid "<%%llu> LLONG_MAX+1\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1927 lib/sh/snprintf.c:1928
+#, c-format
+msgid "%llu"
+msgstr ""
+
+#: lib/sh/snprintf.c:1929
+#, c-format
+msgid "<%llu>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1935
+#, c-format
+msgid "<%%6.2LE> 42.42\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1936 lib/sh/snprintf.c:1937
+#, c-format
+msgid "%6.2LE"
+msgstr ""
+
+#: lib/sh/snprintf.c:1938
+#, c-format
+msgid "<%6.2LE>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1944
+#, c-format
+msgid "<%%6.2A> 42.42\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1945 lib/sh/snprintf.c:1946
+#, c-format
+msgid "%6.2A"
+msgstr ""
+
+#: lib/sh/snprintf.c:1947
+#, c-format
+msgid "<%6.2A>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1951
+#, c-format
+msgid "<%%6.2LA> 42.42\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1952 lib/sh/snprintf.c:1953
+#, c-format
+msgid "%6.2LA"
+msgstr ""
+
+#: lib/sh/snprintf.c:1954
+#, c-format
+msgid "<%6.2LA>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1959
+#, c-format
+msgid "<%%.10240f> DBL_MAX\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1960 lib/sh/snprintf.c:1961
+#, c-format
+msgid "%.10240f"
+msgstr ""
+
+#: lib/sh/snprintf.c:1962
+#, c-format
+msgid "<%.10240f>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1963 lib/sh/snprintf.c:1970
+#, c-format
+msgid "<%d> <%s>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1964 lib/sh/snprintf.c:1971
+#, c-format
+msgid ""
+"<%d> <%s>\n"
+"\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1966
+#, c-format
+msgid "<%%.10240Lf> LDBL_MAX\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1967 lib/sh/snprintf.c:1968
+#, c-format
+msgid "%.10240Lf"
+msgstr ""
+
+#: lib/sh/snprintf.c:1969
+#, c-format
+msgid "<%.10240Lf>\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1974
+#, c-format
+msgid "/%%g/, 421.2345\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1981
+#, c-format
+msgid "/%%g/, 4214.2345\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1988
+#, c-format
+msgid "/%%.5g/, 4214.2345\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1989 lib/sh/snprintf.c:1990 lib/sh/snprintf.c:1991
+#, c-format
+msgid "/%.5g/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1995
+#, c-format
+msgid "/%%.4g/, 4214.2345\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:1996 lib/sh/snprintf.c:1997 lib/sh/snprintf.c:1998
+#, c-format
+msgid "/%.4g/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2002
+#, c-format
+msgid "/%%'ld %%'ld/, 12345, 1234567\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2003 lib/sh/snprintf.c:2004 lib/sh/snprintf.c:2005
+#: lib/sh/snprintf.c:2010 lib/sh/snprintf.c:2011 lib/sh/snprintf.c:2012
+#: lib/sh/snprintf.c:2017 lib/sh/snprintf.c:2018 lib/sh/snprintf.c:2019
+#, c-format
+msgid "/%'ld %'ld/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2009
+#, c-format
+msgid "/%%'ld %%'ld/, 336, 3336\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2016
+#, c-format
+msgid "/%%'ld %%'ld/, -42786, -142786\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2023
+#, c-format
+msgid "/%%'f %%'f/, 421.2345, 421234.56789\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2024 lib/sh/snprintf.c:2025 lib/sh/snprintf.c:2026
+#: lib/sh/snprintf.c:2031 lib/sh/snprintf.c:2032 lib/sh/snprintf.c:2033
+#, c-format
+msgid "/%'f %'f/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2030
+#, c-format
+msgid "/%%'f %%'f/, -421.2345, -421234.56789\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2037
+#, c-format
+msgid "/%%'g %%'g/, 421.2345, 421234.56789\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2038 lib/sh/snprintf.c:2039 lib/sh/snprintf.c:2040
+#: lib/sh/snprintf.c:2045 lib/sh/snprintf.c:2046 lib/sh/snprintf.c:2047
+#, c-format
+msgid "/%'g %'g/\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2044
+#, c-format
+msgid "/%%'g %%'g/, -421.2345, -421234.56789\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2052
+#, c-format
+msgid "/%%'g/, 4213455.8392\n"
+msgstr ""
+
+#: lib/sh/snprintf.c:2053 lib/sh/snprintf.c:2054 lib/sh/snprintf.c:2055
+#, c-format
+msgid "/%'g/\n"
+msgstr ""
+
+#: lib/sh/strerror.c:49
+msgid "Unknown system error "
+msgstr ""
+
+#: lib/sh/strftime.c:153
+msgid "Sun"
+msgstr ""
+
+#: lib/sh/strftime.c:153
+msgid "Mon"
+msgstr ""
+
+#: lib/sh/strftime.c:153
+msgid "Tue"
+msgstr ""
+
+#: lib/sh/strftime.c:153
+msgid "Wed"
+msgstr ""
+
+#: lib/sh/strftime.c:154
+msgid "Thu"
+msgstr ""
+
+#: lib/sh/strftime.c:154
+msgid "Fri"
+msgstr ""
+
+#: lib/sh/strftime.c:154
+msgid "Sat"
+msgstr ""
+
+#: lib/sh/strftime.c:157
+msgid "Sunday"
+msgstr ""
+
+#: lib/sh/strftime.c:157
+msgid "Monday"
+msgstr ""
+
+#: lib/sh/strftime.c:157
+msgid "Tuesday"
+msgstr ""
+
+#: lib/sh/strftime.c:157
+msgid "Wednesday"
+msgstr ""
+
+#: lib/sh/strftime.c:158
+msgid "Thursday"
+msgstr ""
+
+#: lib/sh/strftime.c:158
+msgid "Friday"
+msgstr ""
+
+#: lib/sh/strftime.c:158
+msgid "Saturday"
+msgstr ""
+
+#: lib/sh/strftime.c:161
+msgid "Jan"
+msgstr ""
+
+#: lib/sh/strftime.c:161
+msgid "Feb"
+msgstr ""
+
+#: lib/sh/strftime.c:161
+msgid "Mar"
+msgstr ""
+
+#: lib/sh/strftime.c:161
+msgid "Apr"
+msgstr ""
+
+#: lib/sh/strftime.c:161 lib/sh/strftime.c:166
+msgid "May"
+msgstr ""
+
+#: lib/sh/strftime.c:161
+msgid "Jun"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Jul"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Aug"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Sep"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Oct"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Nov"
+msgstr ""
+
+#: lib/sh/strftime.c:162
+msgid "Dec"
+msgstr ""
+
+#: lib/sh/strftime.c:165
+msgid "January"
+msgstr ""
+
+#: lib/sh/strftime.c:165
+msgid "February"
+msgstr ""
+
+#: lib/sh/strftime.c:165
+msgid "March"
+msgstr ""
+
+#: lib/sh/strftime.c:165
+msgid "April"
+msgstr ""
+
+#: lib/sh/strftime.c:166
+msgid "June"
+msgstr ""
+
+#: lib/sh/strftime.c:166
+msgid "July"
+msgstr ""
+
+#: lib/sh/strftime.c:166
+msgid "August"
+msgstr ""
+
+#: lib/sh/strftime.c:166
+msgid "September"
+msgstr ""
+
+#: lib/sh/strftime.c:167
+msgid "October"
+msgstr ""
+
+#: lib/sh/strftime.c:167
+msgid "November"
+msgstr ""
+
+#: lib/sh/strftime.c:167
+msgid "December"
+msgstr ""
+
+#: lib/sh/strftime.c:169
+msgid "AM"
+msgstr ""
+
+#: lib/sh/strftime.c:169
+msgid "PM"
+msgstr ""
+
+#: lib/sh/strftime.c:270
+msgid "%A %B %d %T %Y"
+msgstr ""
+
+#: lib/sh/strftime.c:275 lib/sh/strftime.c:280 lib/sh/strftime.c:321
+#: lib/sh/strftime.c:329 lib/sh/strftime.c:338 lib/sh/strftime.c:347
+#: lib/sh/strftime.c:352 lib/sh/strftime.c:393 lib/sh/strftime.c:413
+#: lib/sh/strftime.c:417 lib/sh/strftime.c:426 lib/sh/strftime.c:440
+#, c-format
+msgid "%02d"
+msgstr ""
+
+#: lib/sh/strftime.c:284
+msgid "%m/%d/%y"
+msgstr ""
+
+#: lib/sh/strftime.c:288 lib/sh/strftime.c:519 lib/sh/strftime.c:528
+#, c-format
+msgid "%2d"
+msgstr ""
+
+#: lib/sh/strftime.c:296
+msgid "%Y-%m-%d"
+msgstr ""
+
+#: lib/sh/strftime.c:342
+#, c-format
+msgid "%03d"
+msgstr ""
+
+#: lib/sh/strftime.c:373
+msgid "%I:%M:%S %p"
+msgstr ""
+
+#: lib/sh/strftime.c:386 lib/malloc/stats.c:181
+#, c-format
+msgid "%ld"
+msgstr ""
+
+#: lib/sh/strftime.c:430
+msgid "%A %B %d %Y"
+msgstr ""
+
+#: lib/sh/strftime.c:495
+#, c-format
+msgid "%02d%02d"
+msgstr ""
+
+#: lib/sh/strftime.c:544
+#, c-format
+msgid "%2d-%3.3s-%4d"
+msgstr ""
+
+#: lib/sh/strftime.c:786
+#, c-format
+msgid "(%%A) full weekday name, var length (Sunday..Saturday) %A"
+msgstr ""
+
+#: lib/sh/strftime.c:787
+msgid "(%%B) full month name, var length (January..December) %B"
+msgstr ""
+
+#: lib/sh/strftime.c:788
+#, c-format
+msgid "(%%C) Century %C"
+msgstr ""
+
+#: lib/sh/strftime.c:789
+msgid "(%%D) date (%%m/%%d/%%y) %D"
+msgstr ""
+
+#: lib/sh/strftime.c:790
+#, c-format
+msgid "(%%E) Locale extensions (ignored) %E"
+msgstr ""
+
+#: lib/sh/strftime.c:791
+#, c-format
+msgid "(%%F) full month name, var length (January..December) %F"
+msgstr ""
+
+#: lib/sh/strftime.c:792
+msgid "(%%H) hour (24-hour clock, 00..23) %H"
+msgstr ""
+
+#: lib/sh/strftime.c:793
+msgid "(%%I) hour (12-hour clock, 01..12) %I"
+msgstr ""
+
+#: lib/sh/strftime.c:794
+msgid "(%%M) minute (00..59) %M"
+msgstr ""
+
+#: lib/sh/strftime.c:795
+msgid "(%%N) Emporer/Era Name %N"
+msgstr ""
+
+#: lib/sh/strftime.c:796
+msgid "(%%O) Locale extensions (ignored) %O"
+msgstr ""
+
+#: lib/sh/strftime.c:797
+msgid "(%%R) time, 24-hour (%%H:%%M) %R"
+msgstr ""
+
+#: lib/sh/strftime.c:798
+#, c-format
+msgid "(%%S) second (00..60) %S"
+msgstr ""
+
+#: lib/sh/strftime.c:799
+msgid "(%%T) time, 24-hour (%%H:%%M:%%S) %T"
+msgstr ""
+
+#: lib/sh/strftime.c:800
+msgid "(%%U) week of year, Sunday as first day of week (00..53) %U"
+msgstr ""
+
+#: lib/sh/strftime.c:801
+msgid "(%%V) week of year according to ISO 8601 %V"
+msgstr ""
+
+#: lib/sh/strftime.c:802
+msgid "(%%W) week of year, Monday as first day of week (00..53) %W"
+msgstr ""
+
+#: lib/sh/strftime.c:803
+msgid "(%%X) appropriate locale time representation (%H:%M:%S) %X"
+msgstr ""
+
+#: lib/sh/strftime.c:804
+msgid "(%%Y) year with century (1970...) %Y"
+msgstr ""
+
+#: lib/sh/strftime.c:805
+msgid "(%%Z) timezone (EDT), or blank if timezone not determinable %Z"
+msgstr ""
+
+#: lib/sh/strftime.c:806
+#, c-format
+msgid "(%%a) locale's abbreviated weekday name (Sun..Sat) %a"
+msgstr ""
+
+#: lib/sh/strftime.c:807
+msgid "(%%b) locale's abbreviated month name (Jan..Dec) %b"
+msgstr ""
+
+#: lib/sh/strftime.c:808
+msgid "(%%c) full date (Sat Nov 4 12:02:33 1989)%n%t%t%t %c"
+msgstr ""
+
+#: lib/sh/strftime.c:809
+#, c-format
+msgid "(%%d) day of the month (01..31) %d"
+msgstr ""
+
+#: lib/sh/strftime.c:810
+#, c-format
+msgid "(%%e) day of the month, blank-padded ( 1..31) %e"
+msgstr ""
+
+#: lib/sh/strftime.c:811
+msgid "(%%h) should be same as (%%b) %h"
+msgstr ""
+
+#: lib/sh/strftime.c:812
+msgid "(%%j) day of the year (001..366) %j"
+msgstr ""
+
+#: lib/sh/strftime.c:813
+msgid "(%%k) hour, 24-hour clock, blank pad ( 0..23) %k"
+msgstr ""
+
+#: lib/sh/strftime.c:814
+msgid "(%%l) hour, 12-hour clock, blank pad ( 0..12) %l"
+msgstr ""
+
+#: lib/sh/strftime.c:815
+#, c-format
+msgid "(%%m) month (01..12) %m"
+msgstr ""
+
+#: lib/sh/strftime.c:816
+#, c-format
+msgid "(%%o) Emporer/Era Year %o"
+msgstr ""
+
+#: lib/sh/strftime.c:817
+#, c-format
+msgid "(%%p) locale's AM or PM based on 12-hour clock %p"
+msgstr ""
+
+#: lib/sh/strftime.c:818
+msgid "(%%r) time, 12-hour (same as %%I:%%M:%%S %%p) %r"
+msgstr ""
+
+#: lib/sh/strftime.c:819
+#, c-format
+msgid "(%%u) ISO 8601: Weekday as decimal number [1 (Monday) - 7] %u"
+msgstr ""
+
+#: lib/sh/strftime.c:820
+msgid "(%%v) VMS date (dd-bbb-YYYY) %v"
+msgstr ""
+
+#: lib/sh/strftime.c:821
+msgid "(%%w) day of week (0..6, Sunday == 0) %w"
+msgstr ""
+
+#: lib/sh/strftime.c:822
+#, c-format
+msgid "(%%x) appropriate locale date representation %x"
+msgstr ""
+
+#: lib/sh/strftime.c:823
+msgid "(%%y) last two digits of year (00..99) %y"
+msgstr ""
+
+#: lib/sh/strftime.c:824
+msgid "(%%z) timezone offset east of GMT as HHMM (e.g. -0500) %z"
+msgstr ""
+
+#: lib/sh/stringlist.c:235
+#, c-format
+msgid "%s%s\n"
+msgstr ""
+
+#: lib/sh/strtoimax.c:38 lib/sh/strtoimax.c:45 lib/sh/strtoumax.c:38
+#: lib/sh/strtoumax.c:45
+msgid "this configure-time declaration test was not run"
+msgstr ""
+
+#: lib/sh/strtoimax.c:83
+#, c-format
+msgid "sizeof intmax_t: %d\n"
+msgstr ""
+
+#: lib/sh/strtoimax.c:86
+#, c-format
+msgid "sizeof long long: %d\n"
+msgstr ""
+
+#: lib/sh/strtoimax.c:88
+#, c-format
+msgid "sizeof long: %d\n"
+msgstr ""
+
+#: lib/sh/strtoimax.c:98
+#, c-format
+msgid "%lld %lld %ld\n"
+msgstr ""
+
+#: lib/sh/strtoumax.c:83
+#, c-format
+msgid "sizeof uintmax_t: %d\n"
+msgstr ""
+
+#: lib/sh/strtoumax.c:86
+#, c-format
+msgid "sizeof unsigned long long: %d\n"
+msgstr ""
+
+#: lib/sh/strtoumax.c:88
+#, c-format
+msgid "sizeof unsigned long: %d\n"
+msgstr ""
+
+#: lib/sh/strtoumax.c:98
+#, c-format
+msgid "%llu %llu %lu\n"
+msgstr ""
+
+#: lib/sh/tmpfile.c:46
+msgid "shtmp"
+msgstr ""
+
+#: lib/sh/tmpfile.c:73
+msgid "/var/tmp"
+msgstr ""
+
+#: lib/sh/tmpfile.c:77
+msgid "/usr/tmp"
+msgstr ""
+
+#: lib/sh/tmpfile.c:92
+msgid "TMPDIR"
+msgstr ""
+
+#: lib/sh/tmpfile.c:122 lib/sh/tmpfile.c:167
+#, c-format
+msgid "%s/%s.XXXXXX"
+msgstr ""
+
+#: lib/sh/tmpfile.c:135 lib/sh/tmpfile.c:184
+#, c-format
+msgid "%s/%s-%lu"
+msgstr ""
+
+#: lib/sh/tmpfile.c:212
+msgid "w+"
+msgstr ""
+
+#: lib/malloc/alloca.c:446
+#, c-format
+msgid "%011o %011o %011o\n"
+msgstr ""
+
+#: lib/malloc/alloca.c:467
+#, c-format
+msgid "%011o %011o\n"
+msgstr ""
+
+#: lib/malloc/i386-alloca.s:1
+msgid "alloca.s"
+msgstr ""
+
+#: lib/malloc/imalloc.h:52
+msgid "x"
+msgstr ""
+
+#: lib/malloc/malloc.c:298
+#, c-format
+msgid "malloc: failed assertion: %s\n"
+msgstr ""
+
+#: lib/malloc/malloc.c:314
+#, c-format
+msgid ""
+"\r\n"
+"malloc: %s:%d: assertion botched\r\n"
+msgstr ""
+
+#: lib/malloc/malloc.c:355
+msgid "bcoalesce: CHAIN(mp2) != mp1"
+msgstr ""
+
+#: lib/malloc/malloc.c:604
+msgid "malloc_debug_dummy\n"
+msgstr ""
+
+#: lib/malloc/malloc.c:740
+msgid "malloc: block on free list clobbered"
+msgstr ""
+
+#: lib/malloc/malloc.c:766 lib/malloc/malloc.c:768 lib/malloc/malloc.c:773
+msgid "malloc"
+msgstr ""
+
+#: lib/malloc/malloc.c:817
+msgid "free: called with already freed block argument"
+msgstr ""
+
+#: lib/malloc/malloc.c:820
+msgid "free: called with unallocated block argument"
+msgstr ""
+
+#: lib/malloc/malloc.c:839
+msgid "free: underflow detected; mh_nbytes out of range"
+msgstr ""
+
+#: lib/malloc/malloc.c:845
+msgid "free: start and end chunk sizes differ"
+msgstr ""
+
+#: lib/malloc/malloc.c:942
+msgid "realloc: called with unallocated block argument"
+msgstr ""
+
+#: lib/malloc/malloc.c:957
+msgid "realloc: underflow detected; mh_nbytes out of range"
+msgstr ""
+
+#: lib/malloc/malloc.c:963
+msgid "realloc: start and end chunk sizes differ"
+msgstr ""
+
+#: lib/malloc/malloc.c:1009 lib/malloc/malloc.c:1011 lib/malloc/malloc.c:1016
+msgid "realloc"
+msgstr ""
+
+#: lib/malloc/memtest.c:125 lib/malloc/memtest.c:138
+msgid "malloc-test: "
+msgstr ""
+
+#: lib/malloc/stats.c:99
+#, c-format
+msgid ""
+"Memory allocation statistics: %s\n"
+" size\tfree\tin use\ttotal\tmorecore lesscore split\tcoalesce\n"
+msgstr ""
+
+#: lib/malloc/stats.c:104
+#, c-format
+msgid "%8lu\t%4d\t%6d\t%5d\t%8d\t%d %5d %8d\n"
+msgstr ""
+
+#: lib/malloc/stats.c:108
+#, c-format
+msgid ""
+"\n"
+"Total bytes in use: %lu, total bytes free: %lu\n"
+msgstr ""
+
+#: lib/malloc/stats.c:110
+#, c-format
+msgid ""
+"\n"
+"Total bytes requested by application: %lu\n"
+msgstr ""
+
+#: lib/malloc/stats.c:111
+#, c-format
+msgid "Total mallocs: %d, total frees: %d, total reallocs: %d (%d copies)\n"
+msgstr ""
+
+#: lib/malloc/stats.c:113
+#, c-format
+msgid "Total sbrks: %d, total bytes via sbrk: %d\n"
+msgstr ""
+
+#: lib/malloc/stats.c:115
+#, c-format
+msgid "Total blocks split: %d, total block coalesces: %d\n"
+msgstr ""
+
+#: lib/malloc/stats.c:134
+msgid "/var/tmp/maltrace/stats."
+msgstr ""
+
+#: lib/malloc/stats.c:172
+#, c-format
+msgid "%s%ld"
+msgstr ""
+
+#: lib/malloc/table.c:152
+#, c-format
+msgid "malloc: %p: %s: last %s from %s:%d\n"
+msgstr ""
+
+#: lib/malloc/table.c:154 lib/malloc/table.c:155 lib/malloc/table.c:239
+#: lib/malloc/watch.c:46
+msgid "allocated"
+msgstr ""
+
+#: lib/malloc/table.c:154 lib/malloc/table.c:222 lib/malloc/table.c:237
+msgid "free"
+msgstr ""
+
+#: lib/malloc/table.c:155 lib/malloc/watch.c:48
+msgid "freed"
+msgstr ""
+
+#: lib/malloc/table.c:175
+msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
+msgstr ""
+
+#: lib/malloc/table.c:182
+#, c-format
+msgid "register_alloc: %p already in table as allocated?\n"
+msgstr ""
+
+#: lib/malloc/table.c:211
+#, c-format
+msgid "register_free: %p not in allocation table?\n"
+msgstr ""
+
+#: lib/malloc/table.c:218
+#, c-format
+msgid "register_free: %p already in table as free?\n"
+msgstr ""
+
+#: lib/malloc/table.c:241
+msgid "undetermined?"
+msgstr ""
+
+#: lib/malloc/table.c:255
+#, c-format
+msgid "[%d] %p:%d:%s:%s:%s:%d:%d:%d\n"
+msgstr ""
+
+#: lib/malloc/trace.c:51
+#, c-format
+msgid "alloc: %s: %p (%d bytes) from '%s:%d'\n"
+msgstr ""
+
+#: lib/malloc/trace.c:54
+#, c-format
+msgid "alloc:%p:%d:%s:%d\n"
+msgstr ""
+
+#: lib/malloc/trace.c:69
+#, c-format
+msgid "free: %p (%d bytes) from '%s:%d'\n"
+msgstr ""
+
+#: lib/malloc/trace.c:72
+#, c-format
+msgid "free:%p:%d:%s:%d\n"
+msgstr ""
+
+#: lib/malloc/trace.c:107
+msgid "/var/tmp/maltrace/trace."
+msgstr ""
+
+#: lib/malloc/watch.c:50
+msgid "requesting resize"
+msgstr ""
+
+#: lib/malloc/watch.c:52
+msgid "just resized"
+msgstr ""
+
+#: lib/malloc/watch.c:54
+msgid "bug: unknown operation"
+msgstr ""
+
+#: lib/malloc/watch.c:56
+#, c-format
+msgid "malloc: watch alert: %p %s "
+msgstr ""
+
+#: lib/malloc/watch.c:58
+#, c-format
+msgid "(size %lu) "
+msgstr ""
+
+#: lib/malloc/watch.c:59
+#, c-format
+msgid "from '%s:%d'\n"
+msgstr ""
+
+#: lib/malloc/x386-alloca.s:10
+msgid "masm"
+msgstr ""
+
+#: lib/malloc/xmalloc.c:55
+#, c-format
+msgid "%s: out of virtual memory\n"
+msgstr ""
+
+#: lib/malloc/xmalloc.c:70
+msgid "xmalloc"
+msgstr ""
+
+#: lib/malloc/xmalloc.c:84
+msgid "xrealloc"
+msgstr ""
--- /dev/null
+/* subst.c -- The part of the shell that does parameter, command, and
+ globbing substitutions. */
+
+/* ``Have a little faith, there's magic in the night. You ain't a
+ beauty, but, hey, you're alright.'' */
+
+/* Copyright (C) 1987-2004 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 2, 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; see the file COPYING. If not, write to the Free Software
+ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#include "bashtypes.h"
+#include <stdio.h>
+#include "chartypes.h"
+#include <pwd.h>
+#include <signal.h>
+#include <errno.h>
+
+#if defined (HAVE_UNISTD_H)
+# include <unistd.h>
+#endif
+
+#include "bashansi.h"
+#include "posixstat.h"
+#include "bashintl.h"
+
+#include "shell.h"
+#include "flags.h"
+#include "jobs.h"
+#include "execute_cmd.h"
+#include "filecntl.h"
+#include "trap.h"
+#include "pathexp.h"
+#include "mailcheck.h"
+
+#include "shmbutil.h"
+
+#include "builtins/getopt.h"
+#include "builtins/common.h"
+
+#include <tilde/tilde.h>
+#include <glob/strmatch.h>
+
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+/* The size that strings change by. */
+#define DEFAULT_INITIAL_ARRAY_SIZE 112
+#define DEFAULT_ARRAY_SIZE 128
+
+/* Variable types. */
+#define VT_VARIABLE 0
+#define VT_POSPARMS 1
+#define VT_ARRAYVAR 2
+#define VT_ARRAYMEMBER 3
+
+#define VT_STARSUB 128 /* $* or ${array[*]} -- used to split */
+
+/* Flags for quoted_strchr */
+#define ST_BACKSL 0x01
+#define ST_CTLESC 0x02
+#define ST_SQUOTE 0x04 /* unused yet */
+#define ST_DQUOTE 0x08 /* unused yet */
+
+/* Flags for the string extraction functions. */
+#define EX_NOALLOC 0x01 /* just skip; don't return substring */
+#define EX_VARNAME 0x02 /* variable name; for string_extract () */
+
+/* Flags for the `pflags' argument to param_expand() */
+#define PF_NOCOMSUB 0x01 /* Do not perform command substitution */
+
+/* These defs make it easier to use the editor. */
+#define LBRACE '{'
+#define RBRACE '}'
+#define LPAREN '('
+#define RPAREN ')'
+
+/* Evaluates to 1 if C is one of the shell's special parameters whose length
+ can be taken, but is also one of the special expansion characters. */
+#define VALID_SPECIAL_LENGTH_PARAM(c) \
+ ((c) == '-' || (c) == '?' || (c) == '#')
+
+/* Evaluates to 1 if C is one of the shell's special parameters for which an
+ indirect variable reference may be made. */
+#define VALID_INDIR_PARAM(c) \
+ ((c) == '#' || (c) == '?' || (c) == '@' || (c) == '*')
+
+/* Evaluates to 1 if C is one of the OP characters that follows the parameter
+ in ${parameter[:]OPword}. */
+#define VALID_PARAM_EXPAND_CHAR(c) (sh_syntaxtab[(unsigned char)c] & CSUBSTOP)
+
+/* Evaluates to 1 if this is one of the shell's special variables. */
+#define SPECIAL_VAR(name, wi) \
+ ((DIGIT (*name) && all_digits (name)) || \
+ (name[1] == '\0' && (sh_syntaxtab[(unsigned char)*name] & CSPECVAR)) || \
+ (wi && name[2] == '\0' && VALID_INDIR_PARAM (name[1])))
+
+/* An expansion function that takes a string and a quoted flag and returns
+ a WORD_LIST *. Used as the type of the third argument to
+ expand_string_if_necessary(). */
+typedef WORD_LIST *EXPFUNC __P((char *, int));
+
+/* Process ID of the last command executed within command substitution. */
+pid_t last_command_subst_pid = NO_PID;
+pid_t current_command_subst_pid = NO_PID;
+
+/* Variables used to keep track of the characters in IFS. */
+SHELL_VAR *ifs_var;
+char *ifs_value;
+unsigned char ifs_cmap[UCHAR_MAX + 1];
+unsigned char ifs_firstc;
+
+/* Extern functions and variables from different files. */
+extern int last_command_exit_value, last_command_exit_signal;
+extern int subshell_environment;
+extern int subshell_level;
+extern int eof_encountered;
+extern int return_catch_flag, return_catch_value;
+extern pid_t dollar_dollar_pid;
+extern int posixly_correct;
+extern char *this_command_name;
+extern struct fd_bitmap *current_fds_to_close;
+extern int wordexp_only;
+extern int expanding_redir;
+
+/* Non-zero means to allow unmatched globbed filenames to expand to
+ a null file. */
+int allow_null_glob_expansion;
+
+/* Non-zero means to throw an error when globbing fails to match anything. */
+int fail_glob_expansion;
+
+#if 0
+/* Variables to keep track of which words in an expanded word list (the
+ output of expand_word_list_internal) are the result of globbing
+ expansions. GLOB_ARGV_FLAGS is used by execute_cmd.c.
+ (CURRENTLY UNUSED). */
+char *glob_argv_flags;
+static int glob_argv_flags_size;
+#endif
+
+static WORD_LIST expand_word_error, expand_word_fatal;
+static char expand_param_error, expand_param_fatal;
+
+/* Tell the expansion functions to not longjmp back to top_level on fatal
+ errors. Enabled when doing completion and prompt string expansion. */
+static int no_longjmp_on_fatal_error = 0;
+
+/* Set by expand_word_unsplit; used to inhibit splitting and re-joining
+ $* on $IFS, primarily when doing assignment statements. */
+static int expand_no_split_dollar_star = 0;
+
+/* Used to hold a list of variable assignments preceding a command. Global
+ so the SIGCHLD handler in jobs.c can unwind-protect it when it runs a
+ SIGCHLD trap. */
+WORD_LIST *subst_assign_varlist = (WORD_LIST *)NULL;
+
+/* A WORD_LIST of words to be expanded by expand_word_list_internal,
+ without any leading variable assignments. */
+static WORD_LIST *garglist = (WORD_LIST *)NULL;
+
+static char *quoted_substring __P((char *, int, int));
+static int quoted_strlen __P((char *));
+static char *quoted_strchr __P((char *, int, int));
+
+static char *expand_string_if_necessary __P((char *, int, EXPFUNC *));
+static inline char *expand_string_to_string_internal __P((char *, int, EXPFUNC *));
+static WORD_LIST *call_expand_word_internal __P((WORD_DESC *, int, int, int *, int *));
+static WORD_LIST *expand_string_internal __P((char *, int));
+static WORD_LIST *expand_string_leave_quoted __P((char *, int));
+static WORD_LIST *expand_string_for_rhs __P((char *, int, int *, int *));
+
+static WORD_LIST *list_quote_escapes __P((WORD_LIST *));
+static char *dequote_escapes __P((char *));
+static char *make_quoted_char __P((int));
+static WORD_LIST *quote_list __P((WORD_LIST *));
+static WORD_LIST *dequote_list __P((WORD_LIST *));
+static char *remove_quoted_escapes __P((char *));
+static char *remove_quoted_nulls __P((char *));
+
+static int unquoted_substring __P((char *, char *));
+static int unquoted_member __P((int, char *));
+
+static int do_assignment_internal __P((const char *, int));
+
+static char *string_extract_verbatim __P((char *, int *, char *));
+static char *string_extract __P((char *, int *, char *, int));
+static char *string_extract_double_quoted __P((char *, int *, int));
+static inline char *string_extract_single_quoted __P((char *, int *));
+static inline int skip_single_quoted __P((char *, size_t, int));
+static int skip_double_quoted __P((char *, size_t, int));
+static char *extract_delimited_string __P((char *, int *, char *, char *, char *, int));
+static char *extract_dollar_brace_string __P((char *, int *, int, int));
+
+static char *pos_params __P((char *, int, int, int));
+
+static unsigned char *mb_getcharlens __P((char *, int));
+
+static char *remove_upattern __P((char *, char *, int));
+#if defined (HANDLE_MULTIBYTE)
+# if !defined (HAVE_WCSDUP)
+static wchar_t *wcsdup __P((wchar_t *));
+# endif
+static wchar_t *remove_wpattern __P((wchar_t *, size_t, wchar_t *, int));
+#endif
+static char *remove_pattern __P((char *, char *, int));
+
+static int match_pattern_char __P((char *, char *));
+static int match_upattern __P((char *, char *, int, char **, char **));
+#if defined (HANDLE_MULTIBYTE)
+static int match_pattern_wchar __P((wchar_t *, wchar_t *));
+static int match_wpattern __P((wchar_t *, char **, size_t, wchar_t *, int, char **, char **));
+#endif
+static int match_pattern __P((char *, char *, int, char **, char **));
+static int getpatspec __P((int, char *));
+static char *getpattern __P((char *, int, int));
+static char *variable_remove_pattern __P((char *, char *, int, int));
+static char *list_remove_pattern __P((WORD_LIST *, char *, int, int, int));
+static char *parameter_list_remove_pattern __P((int, char *, int, int));
+#ifdef ARRAY_VARS
+static char *array_remove_pattern __P((ARRAY *, char *, int, char *, int));
+#endif
+static char *parameter_brace_remove_pattern __P((char *, char *, char *, int, int));
+
+static char *process_substitute __P((char *, int));
+
+static char *read_comsub __P((int, int));
+
+#ifdef ARRAY_VARS
+static arrayind_t array_length_reference __P((char *));
+#endif
+
+static int valid_brace_expansion_word __P((char *, int));
+static int chk_atstar __P((char *, int, int *, int *));
+
+static char *parameter_brace_expand_word __P((char *, int, int));
+static char *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
+static char *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
+static void parameter_brace_expand_error __P((char *, char *));
+
+static int valid_length_expression __P((char *));
+static intmax_t parameter_brace_expand_length __P((char *));
+
+static char *skiparith __P((char *, int));
+static int verify_substring_values __P((char *, char *, int, intmax_t *, intmax_t *));
+static int get_var_and_type __P((char *, char *, int, SHELL_VAR **, char **));
+static char *mb_substring __P((char *, int, int));
+static char *parameter_brace_substring __P((char *, char *, char *, int));
+
+static char *pos_params_pat_subst __P((char *, char *, char *, int));
+
+static char *parameter_brace_patsub __P((char *, char *, char *, int));
+
+static char *parameter_brace_expand __P((char *, int *, int, int *, int *));
+static char *param_expand __P((char *, int *, int, int *, int *, int *, int *, int));
+
+static WORD_LIST *expand_word_internal __P((WORD_DESC *, int, int, int *, int *));
+
+static WORD_LIST *word_list_split __P((WORD_LIST *));
+
+static void exp_jump_to_top_level __P((int));
+
+static WORD_LIST *separate_out_assignments __P((WORD_LIST *));
+static WORD_LIST *glob_expand_word_list __P((WORD_LIST *, int));
+#ifdef BRACE_EXPANSION
+static WORD_LIST *brace_expand_word_list __P((WORD_LIST *, int));
+#endif
+static WORD_LIST *shell_expand_word_list __P((WORD_LIST *, int));
+static WORD_LIST *expand_word_list_internal __P((WORD_LIST *, int));
+
+/* **************************************************************** */
+/* */
+/* Utility Functions */
+/* */
+/* **************************************************************** */
+
+#ifdef INCLUDE_UNUSED
+static char *
+quoted_substring (string, start, end)
+ char *string;
+ int start, end;
+{
+ register int len, l;
+ register char *result, *s, *r;
+
+ len = end - start;
+
+ /* Move to string[start], skipping quoted characters. */
+ for (s = string, l = 0; *s && l < start; )
+ {
+ if (*s == CTLESC)
+ {
+ s++;
+ continue;
+ }
+ l++;
+ if (*s == 0)
+ break;
+ }
+
+ r = result = (char *)xmalloc (2*len + 1); /* save room for quotes */
+
+ /* Copy LEN characters, including quote characters. */
+ s = string + l;
+ for (l = 0; l < len; s++)
+ {
+ if (*s == CTLESC)
+ *r++ = *s++;
+ *r++ = *s;
+ l++;
+ if (*s == 0)
+ break;
+ }
+ *r = '\0';
+ return result;
+}
+#endif
+
+#ifdef INCLUDE_UNUSED
+/* Return the length of S, skipping over quoted characters */
+static int
+quoted_strlen (s)
+ char *s;
+{
+ register char *p;
+ int i;
+
+ i = 0;
+ for (p = s; *p; p++)
+ {
+ if (*p == CTLESC)
+ {
+ p++;
+ if (*p == 0)
+ return (i + 1);
+ }
+ i++;
+ }
+
+ return i;
+}
+#endif
+
+/* Find the first occurrence of character C in string S, obeying shell
+ quoting rules. If (FLAGS & ST_BACKSL) is non-zero, backslash-escaped
+ characters are skipped. If (FLAGS & ST_CTLESC) is non-zero, characters
+ escaped with CTLESC are skipped. */
+static char *
+quoted_strchr (s, c, flags)
+ char *s;
+ int c, flags;
+{
+ register char *p;
+
+ for (p = s; *p; p++)
+ {
+ if (((flags & ST_BACKSL) && *p == '\\')
+ || ((flags & ST_CTLESC) && *p == CTLESC))
+ {
+ p++;
+ if (*p == '\0')
+ return ((char *)NULL);
+ continue;
+ }
+ else if (*p == c)
+ return p;
+ }
+ return ((char *)NULL);
+}
+
+/* Return 1 if CHARACTER appears in an unquoted portion of
+ STRING. Return 0 otherwise. CHARACTER must be a single-byte character. */
+static int
+unquoted_member (character, string)
+ int character;
+ char *string;
+{
+ size_t slen;
+ int sindex, c;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ sindex = 0;
+ while (c = string[sindex])
+ {
+ if (c == character)
+ return (1);
+
+ switch (c)
+ {
+ default:
+ ADVANCE_CHAR (string, slen, sindex);
+ break;
+
+ case '\\':
+ sindex++;
+ if (string[sindex])
+ ADVANCE_CHAR (string, slen, sindex);
+ break;
+
+ case '\'':
+ sindex = skip_single_quoted (string, slen, ++sindex);
+ break;
+
+ case '"':
+ sindex = skip_double_quoted (string, slen, ++sindex);
+ break;
+ }
+ }
+ return (0);
+}
+
+/* Return 1 if SUBSTR appears in an unquoted portion of STRING. */
+static int
+unquoted_substring (substr, string)
+ char *substr, *string;
+{
+ size_t slen;
+ int sindex, c, sublen;
+ DECLARE_MBSTATE;
+
+ if (substr == 0 || *substr == '\0')
+ return (0);
+
+ slen = strlen (string);
+ sublen = strlen (substr);
+ for (sindex = 0; c = string[sindex]; )
+ {
+ if (STREQN (string + sindex, substr, sublen))
+ return (1);
+
+ switch (c)
+ {
+ case '\\':
+ sindex++;
+
+ if (string[sindex])
+ ADVANCE_CHAR (string, slen, sindex);
+ break;
+
+ case '\'':
+ sindex = skip_single_quoted (string, slen, ++sindex);
+ break;
+
+ case '"':
+ sindex = skip_double_quoted (string, slen, ++sindex);
+ break;
+
+ default:
+ ADVANCE_CHAR (string, slen, sindex);
+ break;
+ }
+ }
+ return (0);
+}
+
+/* Most of the substitutions must be done in parallel. In order
+ to avoid using tons of unclear goto's, I have some functions
+ for manipulating malloc'ed strings. They all take INDX, a
+ pointer to an integer which is the offset into the string
+ where manipulation is taking place. They also take SIZE, a
+ pointer to an integer which is the current length of the
+ character array for this string. */
+
+/* Append SOURCE to TARGET at INDEX. SIZE is the current amount
+ of space allocated to TARGET. SOURCE can be NULL, in which
+ case nothing happens. Gets rid of SOURCE by freeing it.
+ Returns TARGET in case the location has changed. */
+INLINE char *
+sub_append_string (source, target, indx, size)
+ char *source, *target;
+ int *indx, *size;
+{
+ if (source)
+ {
+ int srclen, n;
+
+ srclen = STRLEN (source);
+ if (srclen >= (int)(*size - *indx))
+ {
+ n = srclen + *indx;
+ n = (n + DEFAULT_ARRAY_SIZE) - (n % DEFAULT_ARRAY_SIZE);
+ target = (char *)xrealloc (target, (*size = n));
+ }
+
+ FASTCOPY (source, target + *indx, srclen);
+ *indx += srclen;
+ target[*indx] = '\0';
+
+ free (source);
+ }
+ return (target);
+}
+
+#if 0
+/* UNUSED */
+/* Append the textual representation of NUMBER to TARGET.
+ INDX and SIZE are as in SUB_APPEND_STRING. */
+char *
+sub_append_number (number, target, indx, size)
+ intmax_t number;
+ int *indx, *size;
+ char *target;
+{
+ char *temp;
+
+ temp = itos (number);
+ return (sub_append_string (temp, target, indx, size));
+}
+#endif
+
+/* Extract a substring from STRING, starting at SINDEX and ending with
+ one of the characters in CHARLIST. Don't make the ending character
+ part of the string. Leave SINDEX pointing at the ending character.
+ Understand about backslashes in the string. If (flags & EX_VARNAME)
+ is non-zero, and array variables have been compiled into the shell,
+ everything between a `[' and a corresponding `]' is skipped over.
+ If (flags & EX_NOALLOC) is non-zero, don't return the substring, just
+ update SINDEX. */
+static char *
+string_extract (string, sindex, charlist, flags)
+ char *string;
+ int *sindex;
+ char *charlist;
+ int flags;
+{
+ register int c, i;
+ size_t slen;
+ char *temp;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string + *sindex) + *sindex;
+ i = *sindex;
+ while (c = string[i])
+ {
+ if (c == '\\')
+ {
+ if (string[i + 1])
+ i++;
+ else
+ break;
+ }
+#if defined (ARRAY_VARS)
+ else if ((flags & EX_VARNAME) && c == '[')
+ {
+ int ni;
+ /* If this is an array subscript, skip over it and continue. */
+ ni = skipsubscript (string, i);
+ if (string[ni] == ']')
+ i = ni;
+ }
+#endif
+ else if (MEMBER (c, charlist))
+ break;
+
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ temp = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i);
+ *sindex = i;
+ return (temp);
+}
+
+/* Extract the contents of STRING as if it is enclosed in double quotes.
+ SINDEX, when passed in, is the offset of the character immediately
+ following the opening double quote; on exit, SINDEX is left pointing after
+ the closing double quote. If STRIPDQ is non-zero, unquoted double
+ quotes are stripped and the string is terminated by a null byte.
+ Backslashes between the embedded double quotes are processed. If STRIPDQ
+ is zero, an unquoted `"' terminates the string. */
+static char *
+string_extract_double_quoted (string, sindex, stripdq)
+ char *string;
+ int *sindex, stripdq;
+{
+ size_t slen;
+ char *send;
+ int j, i, t;
+ unsigned char c;
+ char *temp, *ret; /* The new string we return. */
+ int pass_next, backquote, si; /* State variables for the machine. */
+ int dquote;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string + *sindex) + *sindex;
+ send = string + slen;
+
+ pass_next = backquote = dquote = 0;
+ temp = (char *)xmalloc (1 + slen - *sindex);
+
+ j = 0;
+ i = *sindex;
+ while (c = string[i])
+ {
+ /* Process a character that was quoted by a backslash. */
+ if (pass_next)
+ {
+ /* Posix.2 sez:
+
+ ``The backslash shall retain its special meaning as an escape
+ character only when followed by one of the characters:
+ $ ` " \ <newline>''.
+
+ If STRIPDQ is zero, we handle the double quotes here and let
+ expand_word_internal handle the rest. If STRIPDQ is non-zero,
+ we have already been through one round of backslash stripping,
+ and want to strip these backslashes only if DQUOTE is non-zero,
+ indicating that we are inside an embedded double-quoted string. */
+
+ /* If we are in an embedded quoted string, then don't strip
+ backslashes before characters for which the backslash
+ retains its special meaning, but remove backslashes in
+ front of other characters. If we are not in an
+ embedded quoted string, don't strip backslashes at all.
+ This mess is necessary because the string was already
+ surrounded by double quotes (and sh has some really weird
+ quoting rules).
+ The returned string will be run through expansion as if
+ it were double-quoted. */
+ if ((stripdq == 0 && c != '"') ||
+ (stripdq && ((dquote && (sh_syntaxtab[c] & CBSDQUOTE)) || dquote == 0)))
+ temp[j++] = '\\';
+ pass_next = 0;
+
+add_one_character:
+ COPY_CHAR_I (temp, j, string, send, i);
+ continue;
+ }
+
+ /* A backslash protects the next character. The code just above
+ handles preserving the backslash in front of any character but
+ a double quote. */
+ if (c == '\\')
+ {
+ pass_next++;
+ i++;
+ continue;
+ }
+
+ /* Inside backquotes, ``the portion of the quoted string from the
+ initial backquote and the characters up to the next backquote
+ that is not preceded by a backslash, having escape characters
+ removed, defines that command''. */
+ if (backquote)
+ {
+ if (c == '`')
+ backquote = 0;
+ temp[j++] = c;
+ i++;
+ continue;
+ }
+
+ if (c == '`')
+ {
+ temp[j++] = c;
+ backquote++;
+ i++;
+ continue;
+ }
+
+ /* Pass everything between `$(' and the matching `)' or a quoted
+ ${ ... } pair through according to the Posix.2 specification. */
+ if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE)))
+ {
+ int free_ret = 1;
+
+ si = i + 2;
+ if (string[i + 1] == LPAREN)
+ ret = extract_delimited_string (string, &si, "$(", "(", ")", 0); /*)*/
+ else
+ ret = extract_dollar_brace_string (string, &si, 1, 0);
+
+ temp[j++] = '$';
+ temp[j++] = string[i + 1];
+
+ /* Just paranoia; ret will not be 0 unless no_longjmp_on_fatal_error
+ is set. */
+ if (ret == 0 && no_longjmp_on_fatal_error)
+ {
+ free_ret = 0;
+ ret = string + i + 2;
+ }
+
+ for (t = 0; ret[t]; t++, j++)
+ temp[j] = ret[t];
+ temp[j++] = string[si];
+
+ i = si + 1;
+ if (free_ret)
+ free (ret);
+ continue;
+ }
+
+ /* Add any character but a double quote to the quoted string we're
+ accumulating. */
+ if (c != '"')
+ goto add_one_character;
+
+ /* c == '"' */
+ if (stripdq)
+ {
+ dquote ^= 1;
+ i++;
+ continue;
+ }
+
+ break;
+ }
+ temp[j] = '\0';
+
+ /* Point to after the closing quote. */
+ if (c)
+ i++;
+ *sindex = i;
+
+ return (temp);
+}
+
+/* This should really be another option to string_extract_double_quoted. */
+static int
+skip_double_quoted (string, slen, sind)
+ char *string;
+ size_t slen;
+ int sind;
+{
+ int c, i;
+ char *ret;
+ int pass_next, backquote, si;
+ DECLARE_MBSTATE;
+
+ pass_next = backquote = 0;
+ i = sind;
+ while (c = string[i])
+ {
+ if (pass_next)
+ {
+ pass_next = 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (c == '\\')
+ {
+ pass_next++;
+ i++;
+ continue;
+ }
+ else if (backquote)
+ {
+ if (c == '`')
+ backquote = 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (c == '`')
+ {
+ backquote++;
+ i++;
+ continue;
+ }
+ else if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE)))
+ {
+ si = i + 2;
+ if (string[i + 1] == LPAREN)
+ ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC);
+ else
+ ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC);
+
+ i = si + 1;
+ continue;
+ }
+ else if (c != '"')
+ {
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else
+ break;
+ }
+
+ if (c)
+ i++;
+
+ return (i);
+}
+
+/* Extract the contents of STRING as if it is enclosed in single quotes.
+ SINDEX, when passed in, is the offset of the character immediately
+ following the opening single quote; on exit, SINDEX is left pointing after
+ the closing single quote. */
+static inline char *
+string_extract_single_quoted (string, sindex)
+ char *string;
+ int *sindex;
+{
+ register int i;
+ size_t slen;
+ char *t;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string + *sindex) + *sindex;
+ i = *sindex;
+ while (string[i] && string[i] != '\'')
+ ADVANCE_CHAR (string, slen, i);
+
+ t = substring (string, *sindex, i);
+
+ if (string[i])
+ i++;
+ *sindex = i;
+
+ return (t);
+}
+
+static inline int
+skip_single_quoted (string, slen, sind)
+ char *string;
+ size_t slen;
+ int sind;
+{
+ register int c;
+ DECLARE_MBSTATE;
+
+ c = sind;
+ while (string[c] && string[c] != '\'')
+ ADVANCE_CHAR (string, slen, c);
+
+ if (string[c])
+ c++;
+ return c;
+}
+
+/* Just like string_extract, but doesn't hack backslashes or any of
+ that other stuff. Obeys CTLESC quoting. Used to do splitting on $IFS. */
+static char *
+string_extract_verbatim (string, sindex, charlist)
+ char *string;
+ int *sindex;
+ char *charlist;
+{
+ register int i = *sindex;
+ int c;
+ char *temp;
+
+ if (charlist[0] == '\'' && charlist[1] == '\0')
+ {
+ temp = string_extract_single_quoted (string, sindex);
+ --*sindex; /* leave *sindex at separator character */
+ return temp;
+ }
+
+ for (i = *sindex; c = string[i]; i++)
+ {
+ if (c == CTLESC)
+ {
+ i++;
+ continue;
+ }
+
+ if (MEMBER (c, charlist))
+ break;
+ }
+
+ temp = substring (string, *sindex, i);
+ *sindex = i;
+
+ return (temp);
+}
+
+/* Extract the $( construct in STRING, and return a new string.
+ Start extracting at (SINDEX) as if we had just seen "$(".
+ Make (SINDEX) get the position of the matching ")". */
+char *
+extract_command_subst (string, sindex)
+ char *string;
+ int *sindex;
+{
+ return (extract_delimited_string (string, sindex, "$(", "(", ")", 0));
+}
+
+/* Extract the $[ construct in STRING, and return a new string. (])
+ Start extracting at (SINDEX) as if we had just seen "$[".
+ Make (SINDEX) get the position of the matching "]". */
+char *
+extract_arithmetic_subst (string, sindex)
+ char *string;
+ int *sindex;
+{
+ return (extract_delimited_string (string, sindex, "$[", "[", "]", 0)); /*]*/
+}
+
+#if defined (PROCESS_SUBSTITUTION)
+/* Extract the <( or >( construct in STRING, and return a new string.
+ Start extracting at (SINDEX) as if we had just seen "<(".
+ Make (SINDEX) get the position of the matching ")". */ /*))*/
+char *
+extract_process_subst (string, starter, sindex)
+ char *string;
+ char *starter;
+ int *sindex;
+{
+ return (extract_delimited_string (string, sindex, starter, "(", ")", 0));
+}
+#endif /* PROCESS_SUBSTITUTION */
+
+#if defined (ARRAY_VARS)
+char *
+extract_array_assignment_list (string, sindex)
+ char *string;
+ int *sindex;
+{
+ return (extract_delimited_string (string, sindex, "(", (char *)NULL, ")", 0));
+}
+#endif
+
+/* Extract and create a new string from the contents of STRING, a
+ character string delimited with OPENER and CLOSER. SINDEX is
+ the address of an int describing the current offset in STRING;
+ it should point to just after the first OPENER found. On exit,
+ SINDEX gets the position of the last character of the matching CLOSER.
+ If OPENER is more than a single character, ALT_OPENER, if non-null,
+ contains a character string that can also match CLOSER and thus
+ needs to be skipped. */
+static char *
+extract_delimited_string (string, sindex, opener, alt_opener, closer, flags)
+ char *string;
+ int *sindex;
+ char *opener, *alt_opener, *closer;
+ int flags;
+{
+ int i, c, si;
+ size_t slen;
+ char *t, *result;
+ int pass_character, nesting_level;
+ int len_closer, len_opener, len_alt_opener;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string + *sindex) + *sindex;
+ len_opener = STRLEN (opener);
+ len_alt_opener = STRLEN (alt_opener);
+ len_closer = STRLEN (closer);
+
+ pass_character = 0;
+
+ nesting_level = 1;
+ i = *sindex;
+
+ while (nesting_level)
+ {
+ c = string[i];
+
+ if (c == 0)
+ break;
+
+ if (pass_character) /* previous char was backslash */
+ {
+ pass_character = 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+
+ if (c == CTLESC || c == '\\')
+ {
+ pass_character++;
+ i++;
+ continue;
+ }
+
+ /* Process a nested OPENER. */
+ if (STREQN (string + i, opener, len_opener))
+ {
+ si = i + len_opener;
+ t = extract_delimited_string (string, &si, opener, alt_opener, closer, flags|EX_NOALLOC);
+ i = si + 1;
+ continue;
+ }
+
+ /* Process a nested ALT_OPENER */
+ if (len_alt_opener && STREQN (string + i, alt_opener, len_alt_opener))
+ {
+ si = i + len_alt_opener;
+ t = extract_delimited_string (string, &si, alt_opener, alt_opener, closer, flags|EX_NOALLOC);
+ i = si + 1;
+ continue;
+ }
+
+ /* If the current substring terminates the delimited string, decrement
+ the nesting level. */
+ if (STREQN (string + i, closer, len_closer))
+ {
+ i += len_closer - 1; /* move to last byte of the closer */
+ nesting_level--;
+ if (nesting_level == 0)
+ break;
+ }
+
+ /* Pass old-style command substitution through verbatim. */
+ if (c == '`')
+ {
+ si = i + 1;
+ t = string_extract (string, &si, "`", flags|EX_NOALLOC);
+ i = si + 1;
+ continue;
+ }
+
+ /* Pass single-quoted and double-quoted strings through verbatim. */
+ if (c == '\'' || c == '"')
+ {
+ si = i + 1;
+ i = (c == '\'') ? skip_single_quoted (string, slen, si)
+ : skip_double_quoted (string, slen, si);
+ continue;
+ }
+
+ /* move past this character, which was not special. */
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ if (c == 0 && nesting_level)
+ {
+ if (no_longjmp_on_fatal_error == 0)
+ {
+ report_error (_("bad substitution: no closing `%s' in %s"), closer, string);
+ last_command_exit_value = EXECUTION_FAILURE;
+ exp_jump_to_top_level (DISCARD);
+ }
+ else
+ {
+ *sindex = i;
+ return (char *)NULL;
+ }
+ }
+
+ si = i - *sindex - len_closer + 1;
+ if (flags & EX_NOALLOC)
+ result = (char *)NULL;
+ else
+ {
+ result = (char *)xmalloc (1 + si);
+ strncpy (result, string + *sindex, si);
+ result[si] = '\0';
+ }
+ *sindex = i;
+
+ return (result);
+}
+
+/* Extract a parameter expansion expression within ${ and } from STRING.
+ Obey the Posix.2 rules for finding the ending `}': count braces while
+ skipping over enclosed quoted strings and command substitutions.
+ SINDEX is the address of an int describing the current offset in STRING;
+ it should point to just after the first `{' found. On exit, SINDEX
+ gets the position of the matching `}'. QUOTED is non-zero if this
+ occurs inside double quotes. */
+/* XXX -- this is very similar to extract_delimited_string -- XXX */
+static char *
+extract_dollar_brace_string (string, sindex, quoted, flags)
+ char *string;
+ int *sindex, quoted, flags;
+{
+ register int i, c;
+ size_t slen;
+ int pass_character, nesting_level, si;
+ char *result, *t;
+ DECLARE_MBSTATE;
+
+ pass_character = 0;
+ nesting_level = 1;
+ slen = strlen (string + *sindex) + *sindex;
+
+ i = *sindex;
+ while (c = string[i])
+ {
+ if (pass_character)
+ {
+ pass_character = 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+
+ /* CTLESCs and backslashes quote the next character. */
+ if (c == CTLESC || c == '\\')
+ {
+ pass_character++;
+ i++;
+ continue;
+ }
+
+ if (string[i] == '$' && string[i+1] == LBRACE)
+ {
+ nesting_level++;
+ i += 2;
+ continue;
+ }
+
+ if (c == RBRACE)
+ {
+ nesting_level--;
+ if (nesting_level == 0)
+ break;
+ i++;
+ continue;
+ }
+
+ /* Pass the contents of old-style command substitutions through
+ verbatim. */
+ if (c == '`')
+ {
+ si = i + 1;
+ t = string_extract (string, &si, "`", flags|EX_NOALLOC);
+ i = si + 1;
+ continue;
+ }
+
+ /* Pass the contents of new-style command substitutions and
+ arithmetic substitutions through verbatim. */
+ if (string[i] == '$' && string[i+1] == LPAREN)
+ {
+ si = i + 2;
+ t = extract_delimited_string (string, &si, "$(", "(", ")", flags|EX_NOALLOC); /*)*/
+ i = si + 1;
+ continue;
+ }
+
+ /* Pass the contents of single-quoted and double-quoted strings
+ through verbatim. */
+ if (c == '\'' || c == '"')
+ {
+ si = i + 1;
+ i = (c == '\'') ? skip_single_quoted (string, slen, si)
+ : skip_double_quoted (string, slen, si);
+ /* skip_XXX_quoted leaves index one past close quote */
+ continue;
+ }
+
+ /* move past this character, which was not special. */
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ if (c == 0 && nesting_level)
+ {
+ if (no_longjmp_on_fatal_error == 0)
+ { /* { */
+ report_error ("bad substitution: no closing `%s' in %s", "}", string);
+ last_command_exit_value = EXECUTION_FAILURE;
+ exp_jump_to_top_level (DISCARD);
+ }
+ else
+ {
+ *sindex = i;
+ return ((char *)NULL);
+ }
+ }
+
+ result = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i);
+ *sindex = i;
+
+ return (result);
+}
+
+/* Remove backslashes which are quoting backquotes from STRING. Modifies
+ STRING, and returns a pointer to it. */
+char *
+de_backslash (string)
+ char *string;
+{
+ register size_t slen;
+ register int i, j, prev_i;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ i = j = 0;
+
+ /* Loop copying string[i] to string[j], i >= j. */
+ while (i < slen)
+ {
+ if (string[i] == '\\' && (string[i + 1] == '`' || string[i + 1] == '\\' ||
+ string[i + 1] == '$'))
+ i++;
+ prev_i = i;
+ ADVANCE_CHAR (string, slen, i);
+ if (j < prev_i)
+ do string[j++] = string[prev_i++]; while (prev_i < i);
+ else
+ j = i;
+ }
+ string[j] = '\0';
+
+ return (string);
+}
+
+#if 0
+/*UNUSED*/
+/* Replace instances of \! in a string with !. */
+void
+unquote_bang (string)
+ char *string;
+{
+ register int i, j;
+ register char *temp;
+
+ temp = (char *)xmalloc (1 + strlen (string));
+
+ for (i = 0, j = 0; (temp[j] = string[i]); i++, j++)
+ {
+ if (string[i] == '\\' && string[i + 1] == '!')
+ {
+ temp[j] = '!';
+ i++;
+ }
+ }
+ strcpy (string, temp);
+ free (temp);
+}
+#endif
+
+#if defined (READLINE)
+/* Return 1 if the portion of STRING ending at EINDEX is quoted (there is
+ an unclosed quoted string), or if the character at EINDEX is quoted
+ by a backslash. NO_LONGJMP_ON_FATAL_ERROR is used to flag that the various
+ single and double-quoted string parsing functions should not return an
+ error if there are unclosed quotes or braces. The characters that this
+ recognizes need to be the same as the contents of
+ rl_completer_quote_characters. */
+
+#define CQ_RETURN(x) do { no_longjmp_on_fatal_error = 0; return (x); } while (0)
+
+int
+char_is_quoted (string, eindex)
+ char *string;
+ int eindex;
+{
+ int i, pass_next, c;
+ size_t slen;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ no_longjmp_on_fatal_error = 1;
+ i = pass_next = 0;
+ while (i <= eindex)
+ {
+ c = string[i];
+
+ if (pass_next)
+ {
+ pass_next = 0;
+ if (i >= eindex) /* XXX was if (i >= eindex - 1) */
+ CQ_RETURN(1);
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (c == '\\')
+ {
+ pass_next = 1;
+ i++;
+ continue;
+ }
+ else if (c == '\'' || c == '"')
+ {
+ i = (c == '\'') ? skip_single_quoted (string, slen, ++i)
+ : skip_double_quoted (string, slen, ++i);
+ if (i > eindex)
+ CQ_RETURN(1);
+ /* no increment, the skip_xxx functions go one past end */
+ }
+ else
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ CQ_RETURN(0);
+}
+
+int
+unclosed_pair (string, eindex, openstr)
+ char *string;
+ int eindex;
+ char *openstr;
+{
+ int i, pass_next, openc, olen;
+ size_t slen;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ olen = strlen (openstr);
+ i = pass_next = openc = 0;
+ while (i <= eindex)
+ {
+ if (pass_next)
+ {
+ pass_next = 0;
+ if (i >= eindex) /* XXX was if (i >= eindex - 1) */
+ return 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (string[i] == '\\')
+ {
+ pass_next = 1;
+ i++;
+ continue;
+ }
+ else if (STREQN (string + i, openstr, olen))
+ {
+ openc = 1 - openc;
+ i += olen;
+ }
+ else if (string[i] == '\'' || string[i] == '"')
+ {
+ i = (string[i] == '\'') ? skip_single_quoted (string, slen, i)
+ : skip_double_quoted (string, slen, i);
+ if (i > eindex)
+ return 0;
+ }
+ else
+ ADVANCE_CHAR (string, slen, i);
+ }
+ return (openc);
+}
+
+/* Skip characters in STRING until we find a character in DELIMS, and return
+ the index of that character. START is the index into string at which we
+ begin. This is similar in spirit to strpbrk, but it returns an index into
+ STRING and takes a starting index. This little piece of code knows quite
+ a lot of shell syntax. It's very similar to skip_double_quoted and other
+ functions of that ilk. */
+int
+skip_to_delim (string, start, delims)
+ char *string;
+ int start;
+ char *delims;
+{
+ int i, pass_next, backq, si, c;
+ size_t slen;
+ char *temp;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string + start) + start;
+ no_longjmp_on_fatal_error = 1;
+ i = start;
+ pass_next = backq = 0;
+ while (c = string[i])
+ {
+ if (pass_next)
+ {
+ pass_next = 0;
+ if (c == 0)
+ CQ_RETURN(i);
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (c == '\\')
+ {
+ pass_next = 1;
+ i++;
+ continue;
+ }
+ else if (backq)
+ {
+ if (c == '`')
+ backq = 0;
+ ADVANCE_CHAR (string, slen, i);
+ continue;
+ }
+ else if (c == '`')
+ {
+ backq = 1;
+ i++;
+ continue;
+ }
+ else if (c == '\'' || c == '"')
+ {
+ i = (c == '\'') ? skip_single_quoted (string, slen, ++i)
+ : skip_double_quoted (string, slen, ++i);
+ /* no increment, the skip functions increment past the closing quote. */
+ }
+ else if (c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE))
+ {
+ si = i + 2;
+ if (string[si] == '\0')
+ CQ_RETURN(si);
+
+ if (string[i+1] == LPAREN)
+ temp = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */
+ else
+ temp = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC);
+ i = si;
+ if (string[i] == '\0') /* don't increment i past EOS in loop */
+ break;
+ i++;
+ continue;
+ }
+ else if (member (c, delims))
+ break;
+ else
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ CQ_RETURN(i);
+}
+
+/* Split STRING (length SLEN) at DELIMS, and return a WORD_LIST with the
+ individual words. If DELIMS is NULL, the current value of $IFS is used
+ to split the string, and the function follows the shell field splitting
+ rules. SENTINEL is an index to look for. NWP, if non-NULL,
+ gets the number of words in the returned list. CWP, if non-NULL, gets
+ the index of the word containing SENTINEL. Non-whitespace chars in
+ DELIMS delimit separate fields. */
+WORD_LIST *
+split_at_delims (string, slen, delims, sentinel, nwp, cwp)
+ char *string;
+ int slen;
+ char *delims;
+ int sentinel;
+ int *nwp, *cwp;
+{
+ int ts, te, i, nw, cw, ifs_split;
+ char *token, *d, *d2;
+ WORD_LIST *ret, *tl;
+
+ if (string == 0 || *string == '\0')
+ {
+ if (nwp)
+ *nwp = 0;
+ if (cwp)
+ *cwp = 0;
+ return ((WORD_LIST *)NULL);
+ }
+
+ d = (delims == 0) ? ifs_value : delims;
+ ifs_split = delims == 0;
+
+ /* Make d2 the non-whitespace characters in delims */
+ d2 = 0;
+ if (delims)
+ {
+ d2 = (char *)xmalloc (strlen (delims) + 1);
+ for (i = ts = 0; delims[i]; i++)
+ {
+ if (whitespace(delims[i]) == 0)
+ d2[ts++] = delims[i];
+ }
+ d2[ts] = '\0';
+ }
+
+ ret = (WORD_LIST *)NULL;
+
+ /* Remove sequences of whitspace characters at the start of the string, as
+ long as those characters are delimiters. */
+ for (i = 0; member (string[i], d) && spctabnl (string[i]); i++)
+ ;
+ if (string[i] == '\0')
+ return (ret);
+
+ ts = i;
+ nw = 0;
+ cw = -1;
+ while (1)
+ {
+ te = skip_to_delim (string, ts, d);
+
+ /* If we have a non-whitespace delimiter character, use it to make a
+ separate field. This is just about what $IFS splitting does and
+ is closer to the behavior of the shell parser. */
+ if (ts == te && d2 && member (string[ts], d2))
+ {
+ te = ts + 1;
+ /* If we're using IFS splitting, the non-whitespace delimiter char
+ and any additional IFS whitespace delimits a field. */
+ if (ifs_split)
+ while (member (string[te], d) && spctabnl (string[te]))
+ te++;
+ else
+ while (member (string[te], d2))
+ te++;
+ }
+
+ token = substring (string, ts, te);
+
+ ret = add_string_to_list (token, ret);
+ free (token);
+ nw++;
+
+ if (sentinel >= ts && sentinel <= te)
+ cw = nw;
+
+ /* If the cursor is at whitespace just before word start, set the
+ sentinel word to the current word. */
+ if (cwp && cw == -1 && sentinel == ts-1)
+ cw = nw;
+
+ /* If the cursor is at whitespace between two words, make a new, empty
+ word, add it before (well, after, since the list is in reverse order)
+ the word we just added, and set the current word to that one. */
+ if (cwp && cw == -1 && sentinel < ts)
+ {
+ tl = make_word_list (make_word (""), ret->next);
+ ret->next = tl;
+ cw = nw;
+ nw++;
+ }
+
+ if (string[te] == 0)
+ break;
+
+ i = te;
+ while (member (string[i], d) && (ifs_split || spctabnl(string[i])))
+ i++;
+
+ if (string[i])
+ ts = i;
+ else
+ break;
+ }
+
+ /* Special case for SENTINEL at the end of STRING. If we haven't found
+ the word containing SENTINEL yet, and the index we're looking for is at
+ the end of STRING, add an additional null argument and set the current
+ word pointer to that. */
+ if (cwp && cw == -1 && sentinel >= slen)
+ {
+ if (whitespace (string[sentinel - 1]))
+ {
+ token = "";
+ ret = add_string_to_list (token, ret);
+ nw++;
+ }
+ cw = nw;
+ }
+
+ if (nwp)
+ *nwp = nw;
+ if (cwp)
+ *cwp = cw;
+
+ return (REVERSE_LIST (ret, WORD_LIST *));
+}
+#endif /* READLINE */
+
+#if 0
+/* UNUSED */
+/* Extract the name of the variable to bind to from the assignment string. */
+char *
+assignment_name (string)
+ char *string;
+{
+ int offset;
+ char *temp;
+
+ offset = assignment (string, 0);
+ if (offset == 0)
+ return (char *)NULL;
+ temp = substring (string, 0, offset);
+ return (temp);
+}
+#endif
+
+/* **************************************************************** */
+/* */
+/* Functions to convert strings to WORD_LISTs and vice versa */
+/* */
+/* **************************************************************** */
+
+/* Return a single string of all the words in LIST. SEP is the separator
+ to put between individual elements of LIST in the output string. */
+char *
+string_list_internal (list, sep)
+ WORD_LIST *list;
+ char *sep;
+{
+ register WORD_LIST *t;
+ char *result, *r;
+ int word_len, sep_len, result_size;
+
+ if (list == 0)
+ return ((char *)NULL);
+
+ /* Short-circuit quickly if we don't need to separate anything. */
+ if (list->next == 0)
+ return (savestring (list->word->word));
+
+ /* This is nearly always called with either sep[0] == 0 or sep[1] == 0. */
+ sep_len = STRLEN (sep);
+ result_size = 0;
+
+ for (t = list; t; t = t->next)
+ {
+ if (t != list)
+ result_size += sep_len;
+ result_size += strlen (t->word->word);
+ }
+
+ r = result = (char *)xmalloc (result_size + 1);
+
+ for (t = list; t; t = t->next)
+ {
+ if (t != list && sep_len)
+ {
+ if (sep_len > 1)
+ {
+ FASTCOPY (sep, r, sep_len);
+ r += sep_len;
+ }
+ else
+ *r++ = sep[0];
+ }
+
+ word_len = strlen (t->word->word);
+ FASTCOPY (t->word->word, r, word_len);
+ r += word_len;
+ }
+
+ *r = '\0';
+ return (result);
+}
+
+/* Return a single string of all the words present in LIST, separating
+ each word with a space. */
+char *
+string_list (list)
+ WORD_LIST *list;
+{
+ return (string_list_internal (list, " "));
+}
+
+/* Return a single string of all the words present in LIST, obeying the
+ quoting rules for "$*", to wit: (P1003.2, draft 11, 3.5.2) "If the
+ expansion [of $*] appears within a double quoted string, it expands
+ to a single field with the value of each parameter separated by the
+ first character of the IFS variable, or by a <space> if IFS is unset." */
+char *
+string_list_dollar_star (list)
+ WORD_LIST *list;
+{
+ char sep[2];
+
+ sep[0] = ifs_firstc;
+ sep[1] = '\0';
+
+ return (string_list_internal (list, sep));
+}
+
+/* Turn $@ into a string. If (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ is non-zero, the $@ appears within double quotes, and we should quote
+ the list before converting it into a string. If IFS is unset, and the
+ word is not quoted, we just need to quote CTLESC and CTLNUL characters
+ in the words in the list, because the default value of $IFS is
+ <space><tab><newline>, IFS characters in the words in the list should
+ also be split. If IFS is null, and the word is not quoted, we need
+ to quote the words in the list to preserve the positional parameters
+ exactly. */
+char *
+string_list_dollar_at (list, quoted)
+ WORD_LIST *list;
+ int quoted;
+{
+ char *ifs, sep[2];
+ WORD_LIST *tlist;
+
+ /* XXX this could just be ifs = ifs_value; */
+ ifs = ifs_var ? value_cell (ifs_var) : (char *)0;
+
+ sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs;
+ sep[1] = '\0';
+
+ tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0))
+ ? quote_list (list)
+ : list_quote_escapes (list);
+ return (string_list_internal (tlist, sep));
+}
+
+/* Return the list of words present in STRING. Separate the string into
+ words at any of the characters found in SEPARATORS. If QUOTED is
+ non-zero then word in the list will have its quoted flag set, otherwise
+ the quoted flag is left as make_word () deemed fit.
+
+ This obeys the P1003.2 word splitting semantics. If `separators' is
+ exactly <space><tab><newline>, then the splitting algorithm is that of
+ the Bourne shell, which treats any sequence of characters from `separators'
+ as a delimiter. If IFS is unset, which results in `separators' being set
+ to "", no splitting occurs. If separators has some other value, the
+ following rules are applied (`IFS white space' means zero or more
+ occurrences of <space>, <tab>, or <newline>, as long as those characters
+ are in `separators'):
+
+ 1) IFS white space is ignored at the start and the end of the
+ string.
+ 2) Each occurrence of a character in `separators' that is not
+ IFS white space, along with any adjacent occurrences of
+ IFS white space delimits a field.
+ 3) Any nonzero-length sequence of IFS white space delimits a field.
+ */
+
+/* BEWARE! list_string strips null arguments. Don't call it twice and
+ expect to have "" preserved! */
+
+/* This performs word splitting and quoted null character removal on
+ STRING. */
+#define issep(c) \
+ (((separators)[0]) ? ((separators)[1] ? isifs(c) \
+ : (c) == (separators)[0]) \
+ : 0)
+
+WORD_LIST *
+list_string (string, separators, quoted)
+ register char *string, *separators;
+ int quoted;
+{
+ WORD_LIST *result;
+ WORD_DESC *t;
+ char *current_word, *s;
+ int sindex, sh_style_split, whitesep;
+
+ if (!string || !*string)
+ return ((WORD_LIST *)NULL);
+
+ sh_style_split = separators && separators[0] == ' ' &&
+ separators[1] == '\t' &&
+ separators[2] == '\n' &&
+ separators[3] == '\0';
+
+ /* Remove sequences of whitespace at the beginning of STRING, as
+ long as those characters appear in IFS. Do not do this if
+ STRING is quoted or if there are no separator characters. */
+ if (!quoted || !separators || !*separators)
+ {
+ for (s = string; *s && spctabnl (*s) && issep (*s); s++);
+
+ if (!*s)
+ return ((WORD_LIST *)NULL);
+
+ string = s;
+ }
+
+ /* OK, now STRING points to a word that does not begin with white space.
+ The splitting algorithm is:
+ extract a word, stopping at a separator
+ skip sequences of spc, tab, or nl as long as they are separators
+ This obeys the field splitting rules in Posix.2. */
+ for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; )
+ {
+ current_word = string_extract_verbatim (string, &sindex, separators);
+ if (current_word == 0)
+ break;
+
+ /* If we have a quoted empty string, add a quoted null argument. We
+ want to preserve the quoted null character iff this is a quoted
+ empty string; otherwise the quoted null characters are removed
+ below. */
+ if (QUOTED_NULL (current_word))
+ {
+ t = make_bare_word ("");
+ t->flags |= W_QUOTED;
+ free (t->word);
+ t->word = make_quoted_char ('\0');
+ result = make_word_list (t, result);
+ }
+ else if (current_word[0] != '\0')
+ {
+ /* If we have something, then add it regardless. However,
+ perform quoted null character removal on the current word. */
+ remove_quoted_nulls (current_word);
+ result = add_string_to_list (current_word, result);
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+ result->word->flags |= W_QUOTED;
+ }
+
+ /* If we're not doing sequences of separators in the traditional
+ Bourne shell style, then add a quoted null argument. */
+ else if (!sh_style_split && !spctabnl (string[sindex]))
+ {
+ t = make_bare_word ("");
+ t->flags |= W_QUOTED;
+ free (t->word);
+ t->word = make_quoted_char ('\0');
+ result = make_word_list (t, result);
+ }
+
+ free (current_word);
+
+ /* Note whether or not the separator is IFS whitespace, used later. */
+ whitesep = string[sindex] && spctabnl (string[sindex]);
+
+ /* Move past the current separator character. */
+ if (string[sindex])
+ sindex++;
+
+ /* Now skip sequences of space, tab, or newline characters if they are
+ in the list of separators. */
+ while (string[sindex] && spctabnl (string[sindex]) && issep (string[sindex]))
+ sindex++;
+
+ /* If the first separator was IFS whitespace and the current character
+ is a non-whitespace IFS character, it should be part of the current
+ field delimiter, not a separate delimiter that would result in an
+ empty field. Look at POSIX.2, 3.6.5, (3)(b). */
+ if (string[sindex] && whitesep && issep (string[sindex]) && !spctabnl (string[sindex]))
+ sindex++;
+ }
+ return (REVERSE_LIST (result, WORD_LIST *));
+}
+
+/* Parse a single word from STRING, using SEPARATORS to separate fields.
+ ENDPTR is set to the first character after the word. This is used by
+ the `read' builtin. This is never called with SEPARATORS != $IFS;
+ it should be simplified.
+
+ XXX - this function is very similar to list_string; they should be
+ combined - XXX */
+char *
+get_word_from_string (stringp, separators, endptr)
+ char **stringp, *separators, **endptr;
+{
+ register char *s;
+ char *current_word;
+ int sindex, sh_style_split, whitesep;
+
+ if (!stringp || !*stringp || !**stringp)
+ return ((char *)NULL);
+
+ s = *stringp;
+
+ sh_style_split = separators && separators[0] == ' ' &&
+ separators[1] == '\t' &&
+ separators[2] == '\n' &&
+ separators[3] == '\0';
+
+ /* Remove sequences of whitespace at the beginning of STRING, as
+ long as those characters appear in IFS. */
+ if (sh_style_split || !separators || !*separators)
+ {
+ for (; *s && spctabnl (*s) && isifs (*s); s++);
+
+ /* If the string is nothing but whitespace, update it and return. */
+ if (!*s)
+ {
+ *stringp = s;
+ if (endptr)
+ *endptr = s;
+ return ((char *)NULL);
+ }
+ }
+
+ /* OK, S points to a word that does not begin with white space.
+ Now extract a word, stopping at a separator, save a pointer to
+ the first character after the word, then skip sequences of spc,
+ tab, or nl as long as they are separators.
+
+ This obeys the field splitting rules in Posix.2. */
+ sindex = 0;
+ current_word = string_extract_verbatim (s, &sindex, separators);
+
+ /* Set ENDPTR to the first character after the end of the word. */
+ if (endptr)
+ *endptr = s + sindex;
+
+ /* Note whether or not the separator is IFS whitespace, used later. */
+ whitesep = s[sindex] && spctabnl (s[sindex]);
+
+ /* Move past the current separator character. */
+ if (s[sindex])
+ sindex++;
+
+ /* Now skip sequences of space, tab, or newline characters if they are
+ in the list of separators. */
+ while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
+ sindex++;
+
+ /* If the first separator was IFS whitespace and the current character is
+ a non-whitespace IFS character, it should be part of the current field
+ delimiter, not a separate delimiter that would result in an empty field.
+ Look at POSIX.2, 3.6.5, (3)(b). */
+ if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex]))
+ sindex++;
+
+ /* Update STRING to point to the next field. */
+ *stringp = s + sindex;
+ return (current_word);
+}
+
+/* Remove IFS white space at the end of STRING. Start at the end
+ of the string and walk backwards until the beginning of the string
+ or we find a character that's not IFS white space and not CTLESC.
+ Only let CTLESC escape a white space character if SAW_ESCAPE is
+ non-zero. */
+char *
+strip_trailing_ifs_whitespace (string, separators, saw_escape)
+ char *string, *separators;
+ int saw_escape;
+{
+ char *s;
+
+ s = string + STRLEN (string) - 1;
+ while (s > string && ((spctabnl (*s) && isifs (*s)) ||
+ (saw_escape && *s == CTLESC && spctabnl (s[1]))))
+ s--;
+ *++s = '\0';
+ return string;
+}
+
+#if 0
+/* UNUSED */
+/* Split STRING into words at whitespace. Obeys shell-style quoting with
+ backslashes, single and double quotes. */
+WORD_LIST *
+list_string_with_quotes (string)
+ char *string;
+{
+ WORD_LIST *list;
+ char *token, *s;
+ size_t s_len;
+ int c, i, tokstart, len;
+
+ for (s = string; s && *s && spctabnl (*s); s++)
+ ;
+ if (s == 0 || *s == 0)
+ return ((WORD_LIST *)NULL);
+
+ s_len = strlen (s);
+ tokstart = i = 0;
+ list = (WORD_LIST *)NULL;
+ while (1)
+ {
+ c = s[i];
+ if (c == '\\')
+ {
+ i++;
+ if (s[i])
+ i++;
+ }
+ else if (c == '\'')
+ i = skip_single_quoted (s, s_len, ++i);
+ else if (c == '"')
+ i = skip_double_quoted (s, s_len, ++i);
+ else if (c == 0 || spctabnl (c))
+ {
+ /* We have found the end of a token. Make a word out of it and
+ add it to the word list. */
+ token = substring (s, tokstart, i);
+ list = add_string_to_list (token, list);
+ free (token);
+ while (spctabnl (s[i]))
+ i++;
+ if (s[i])
+ tokstart = i;
+ else
+ break;
+ }
+ else
+ i++; /* normal character */
+ }
+ return (REVERSE_LIST (list, WORD_LIST *));
+}
+#endif
+
+/********************************************************/
+/* */
+/* Functions to perform assignment statements */
+/* */
+/********************************************************/
+
+/* Given STRING, an assignment string, get the value of the right side
+ of the `=', and bind it to the left side. If EXPAND is true, then
+ perform parameter expansion, command substitution, and arithmetic
+ expansion on the right-hand side. Perform tilde expansion in any
+ case. Do not perform word splitting on the result of expansion. */
+static int
+do_assignment_internal (string, expand)
+ const char *string;
+ int expand;
+{
+ int offset;
+ char *name, *value;
+ SHELL_VAR *entry;
+#if defined (ARRAY_VARS)
+ char *t;
+ int ni;
+#endif
+ int assign_list = 0;
+
+ offset = assignment (string, 0);
+ name = savestring (string);
+ value = (char *)NULL;
+
+ if (name[offset] == '=')
+ {
+ char *temp;
+
+ name[offset] = 0;
+ temp = name + offset + 1;
+
+#if defined (ARRAY_VARS)
+ if (expand && temp[0] == LPAREN && xstrchr (temp, RPAREN))
+ {
+ assign_list = ni = 1;
+ value = extract_delimited_string (temp, &ni, "(", (char *)NULL, ")", 0);
+ }
+ else
+#endif
+
+ /* Perform tilde expansion. */
+ if (expand && temp[0])
+ {
+ temp = (xstrchr (temp, '~') && unquoted_member ('~', temp))
+ ? bash_tilde_expand (temp, 1)
+ : savestring (temp);
+
+ value = expand_string_if_necessary (temp, 0, expand_string_unsplit);
+ free (temp);
+ }
+ else
+ value = savestring (temp);
+ }
+
+ if (value == 0)
+ {
+ value = (char *)xmalloc (1);
+ value[0] = '\0';
+ }
+
+ if (echo_command_at_execute)
+ xtrace_print_assignment (name, value, assign_list, 1);
+
+#define ASSIGN_RETURN(r) do { FREE (value); free (name); return (r); } while (0)
+
+#if defined (ARRAY_VARS)
+ if (t = xstrchr (name, '[')) /*]*/
+ {
+ if (assign_list)
+ {
+ report_error (_("%s: cannot assign list to array member"), name);
+ ASSIGN_RETURN (0);
+ }
+ entry = assign_array_element (name, value);
+ if (entry == 0)
+ ASSIGN_RETURN (0);
+ }
+ else if (assign_list)
+ entry = assign_array_from_string (name, value);
+ else
+#endif /* ARRAY_VARS */
+ entry = bind_variable (name, value);
+
+ stupidly_hack_special_variables (name);
+
+ if (entry)
+ VUNSETATTR (entry, att_invisible);
+
+ /* Return 1 if the assignment seems to have been performed correctly. */
+ ASSIGN_RETURN (entry ? ((readonly_p (entry) == 0) && noassign_p (entry) == 0) : 0);
+}
+
+/* Perform the assignment statement in STRING, and expand the
+ right side by doing command and parameter expansion. */
+int
+do_assignment (string)
+ const char *string;
+{
+ return do_assignment_internal (string, 1);
+}
+
+/* Given STRING, an assignment string, get the value of the right side
+ of the `=', and bind it to the left side. Do not do command and
+ parameter substitution on the right hand side. */
+int
+do_assignment_no_expand (string)
+ const char *string;
+{
+ return do_assignment_internal (string, 0);
+}
+
+/***************************************************
+ * *
+ * Functions to manage the positional parameters *
+ * *
+ ***************************************************/
+
+/* Return the word list that corresponds to `$*'. */
+WORD_LIST *
+list_rest_of_args ()
+{
+ register WORD_LIST *list, *args;
+ int i;
+
+ /* Break out of the loop as soon as one of the dollar variables is null. */
+ for (i = 1, list = (WORD_LIST *)NULL; i < 10 && dollar_vars[i]; i++)
+ list = make_word_list (make_bare_word (dollar_vars[i]), list);
+
+ for (args = rest_of_args; args; args = args->next)
+ list = make_word_list (make_bare_word (args->word->word), list);
+
+ return (REVERSE_LIST (list, WORD_LIST *));
+}
+
+int
+number_of_args ()
+{
+ register WORD_LIST *list;
+ int n;
+
+ for (n = 0; n < 9 && dollar_vars[n+1]; n++)
+ ;
+ for (list = rest_of_args; list; list = list->next)
+ n++;
+ return n;
+}
+
+/* Return the value of a positional parameter. This handles values > 10. */
+char *
+get_dollar_var_value (ind)
+ intmax_t ind;
+{
+ char *temp;
+ WORD_LIST *p;
+
+ if (ind < 10)
+ temp = dollar_vars[ind] ? savestring (dollar_vars[ind]) : (char *)NULL;
+ else /* We want something like ${11} */
+ {
+ ind -= 10;
+ for (p = rest_of_args; p && ind--; p = p->next)
+ ;
+ temp = p ? savestring (p->word->word) : (char *)NULL;
+ }
+ return (temp);
+}
+
+/* Make a single large string out of the dollar digit variables,
+ and the rest_of_args. If DOLLAR_STAR is 1, then obey the special
+ case of "$*" with respect to IFS. */
+char *
+string_rest_of_args (dollar_star)
+ int dollar_star;
+{
+ register WORD_LIST *list;
+ char *string;
+
+ list = list_rest_of_args ();
+ string = dollar_star ? string_list_dollar_star (list) : string_list (list);
+ dispose_words (list);
+ return (string);
+}
+
+/* Return a string containing the positional parameters from START to
+ END, inclusive. If STRING[0] == '*', we obey the rules for $*,
+ which only makes a difference if QUOTED is non-zero. If QUOTED includes
+ Q_HERE_DOCUMENT or Q_DOUBLE_QUOTES, this returns a quoted list, otherwise
+ no quoting chars are added. */
+static char *
+pos_params (string, start, end, quoted)
+ char *string;
+ int start, end, quoted;
+{
+ WORD_LIST *save, *params, *h, *t;
+ char *ret;
+ int i;
+
+ /* see if we can short-circuit. if start == end, we want 0 parameters. */
+ if (start == end)
+ return ((char *)NULL);
+
+ save = params = list_rest_of_args ();
+ if (save == 0)
+ return ((char *)NULL);
+
+ for (i = 1; params && i < start; i++)
+ params = params->next;
+ if (params == 0)
+ return ((char *)NULL);
+ for (h = t = params; params && i < end; i++)
+ {
+ t = params;
+ params = params->next;
+ }
+
+ t->next = (WORD_LIST *)NULL;
+ if (string[0] == '*')
+#if 0
+ ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h);
+#else
+ {
+ if (quoted & Q_DOUBLE_QUOTES)
+ ret = string_list_dollar_star (quote_list (h));
+ else if (quoted & Q_HERE_DOCUMENT)
+ ret = string_list (quote_list (h));
+ else
+ ret = string_list (h);
+ }
+#endif
+ else
+ ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h);
+ if (t != params)
+ t->next = params;
+
+ dispose_words (save);
+ return (ret);
+}
+
+/******************************************************************/
+/* */
+/* Functions to expand strings to strings or WORD_LISTs */
+/* */
+/******************************************************************/
+
+#if defined (PROCESS_SUBSTITUTION)
+#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC)
+#else
+#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC)
+#endif
+
+/* If there are any characters in STRING that require full expansion,
+ then call FUNC to expand STRING; otherwise just perform quote
+ removal if necessary. This returns a new string. */
+static char *
+expand_string_if_necessary (string, quoted, func)
+ char *string;
+ int quoted;
+ EXPFUNC *func;
+{
+ WORD_LIST *list;
+ size_t slen;
+ int i, saw_quote;
+ char *ret;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ i = saw_quote = 0;
+ while (string[i])
+ {
+ if (EXP_CHAR (string[i]))
+ break;
+ else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"')
+ saw_quote = 1;
+ ADVANCE_CHAR (string, slen, i);
+ }
+
+ if (string[i])
+ {
+ list = (*func) (string, quoted);
+ if (list)
+ {
+ ret = string_list (list);
+ dispose_words (list);
+ }
+ else
+ ret = (char *)NULL;
+ }
+ else if (saw_quote && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0))
+ ret = string_quote_removal (string, quoted);
+ else
+ ret = savestring (string);
+
+ return ret;
+}
+
+static inline char *
+expand_string_to_string_internal (string, quoted, func)
+ char *string;
+ int quoted;
+ EXPFUNC *func;
+{
+ WORD_LIST *list;
+ char *ret;
+
+ if (string == 0 || *string == '\0')
+ return ((char *)NULL);
+
+ list = (*func) (string, quoted);
+ if (list)
+ {
+ ret = string_list (list);
+ dispose_words (list);
+ }
+ else
+ ret = (char *)NULL;
+
+ return (ret);
+}
+
+char *
+expand_string_to_string (string, quoted)
+ char *string;
+ int quoted;
+{
+ return (expand_string_to_string_internal (string, quoted, expand_string));
+}
+
+char *
+expand_string_unsplit_to_string (string, quoted)
+ char *string;
+ int quoted;
+{
+ return (expand_string_to_string_internal (string, quoted, expand_string_unsplit));
+}
+
+#if defined (COND_COMMAND)
+/* Just remove backslashes in STRING. Returns a new string. */
+char *
+remove_backslashes (string)
+ char *string;
+{
+ char *r, *ret, *s;
+
+ r = ret = (char *)xmalloc (strlen (string) + 1);
+ for (s = string; s && *s; )
+ {
+ if (*s == '\\')
+ s++;
+ if (*s == 0)
+ break;
+ *r++ = *s++;
+ }
+ *r = '\0';
+ return ret;
+}
+
+/* This needs better error handling. */
+/* Expand W for use as an argument to a unary or binary operator in a
+ [[...]] expression. If SPECIAL is nonzero, this is the rhs argument
+ to the != or == operator, and should be treated as a pattern. In
+ this case, we quote the string specially for the globbing code. The
+ caller is responsible for removing the backslashes if the unquoted
+ words is needed later. */
+char *
+cond_expand_word (w, special)
+ WORD_DESC *w;
+ int special;
+{
+ char *r, *p;
+ WORD_LIST *l;
+
+ if (w->word == 0 || w->word[0] == '\0')
+ return ((char *)NULL);
+
+ if (xstrchr (w->word, '~') && unquoted_member ('~', w->word))
+ {
+ p = bash_tilde_expand (w->word, 0);
+ free (w->word);
+ w->word = p;
+ }
+
+ l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
+ if (l)
+ {
+ if (special == 0)
+ {
+ dequote_list (l);
+ r = string_list (l);
+ }
+ else
+ {
+ p = string_list (l);
+ r = quote_string_for_globbing (p, QGLOB_CVTNULL);
+ free (p);
+ }
+ dispose_words (l);
+ }
+ else
+ r = (char *)NULL;
+
+ return r;
+}
+#endif
+
+/* 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. */
+static WORD_LIST *
+call_expand_word_internal (w, q, i, c, e)
+ WORD_DESC *w;
+ int q, i, *c, *e;
+{
+ WORD_LIST *result;
+
+ result = expand_word_internal (w, q, i, c, e);
+ if (result == &expand_word_error || result == &expand_word_fatal)
+ {
+ /* By convention, each time this error is returned, w->word has
+ already been freed (it sometimes may not be in the fatal case,
+ but that doesn't result in a memory leak because we're going
+ to exit in most cases). */
+ w->word = (char *)NULL;
+ last_command_exit_value = EXECUTION_FAILURE;
+ exp_jump_to_top_level ((result == &expand_word_error) ? DISCARD : FORCE_EOF);
+ /* NOTREACHED */
+ }
+ else
+ return (result);
+}
+
+/* Perform parameter expansion, command substitution, and arithmetic
+ expansion on STRING, as if it were a word. Leave the result quoted. */
+static WORD_LIST *
+expand_string_internal (string, quoted)
+ char *string;
+ int quoted;
+{
+ WORD_DESC td;
+ WORD_LIST *tresult;
+
+ if (string == 0 || *string == 0)
+ return ((WORD_LIST *)NULL);
+
+ td.flags = 0;
+ td.word = savestring (string);
+
+ tresult = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL);
+
+ FREE (td.word);
+ return (tresult);
+}
+
+/* Expand STRING by performing parameter expansion, command substitution,
+ and arithmetic expansion. Dequote the resulting WORD_LIST before
+ returning it, but do not perform word splitting. The call to
+ remove_quoted_nulls () is in here because word splitting normally
+ takes care of quote removal. */
+WORD_LIST *
+expand_string_unsplit (string, quoted)
+ char *string;
+ int quoted;
+{
+ WORD_LIST *value;
+
+ if (string == 0 || *string == '\0')
+ return ((WORD_LIST *)NULL);
+
+ expand_no_split_dollar_star = 1;
+ value = expand_string_internal (string, quoted);
+ expand_no_split_dollar_star = 0;
+
+ if (value)
+ {
+ if (value->word)
+ remove_quoted_nulls (value->word->word);
+ dequote_list (value);
+ }
+ 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
+ to jump_to_top_level here so we don't endlessly loop. */
+WORD_LIST *
+expand_prompt_string (string, quoted)
+ char *string;
+ int quoted;
+{
+ WORD_LIST *value;
+ WORD_DESC td;
+
+ if (string == 0 || *string == 0)
+ return ((WORD_LIST *)NULL);
+
+ td.flags = 0;
+ td.word = savestring (string);
+
+ no_longjmp_on_fatal_error = 1;
+ value = expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL);
+ no_longjmp_on_fatal_error = 0;
+
+ if (value == &expand_word_error || value == &expand_word_fatal)
+ {
+ value = make_word_list (make_bare_word (string), (WORD_LIST *)NULL);
+ return value;
+ }
+ FREE (td.word);
+ if (value)
+ {
+ if (value->word)
+ remove_quoted_nulls (value->word->word);
+ dequote_list (value);
+ }
+ return (value);
+}
+
+/* Expand STRING just as if you were expanding a word, but do not dequote
+ the resultant WORD_LIST. This is called only from within this file,
+ and is used to correctly preserve quoted characters when expanding
+ things like ${1+"$@"}. This does parameter expansion, command
+ substitution, arithmetic expansion, and word splitting. */
+static WORD_LIST *
+expand_string_leave_quoted (string, quoted)
+ char *string;
+ int quoted;
+{
+ WORD_LIST *tlist;
+ WORD_LIST *tresult;
+
+ if (string == 0 || *string == '\0')
+ return ((WORD_LIST *)NULL);
+
+ tlist = expand_string_internal (string, quoted);
+
+ if (tlist)
+ {
+ tresult = word_list_split (tlist);
+ dispose_words (tlist);
+ return (tresult);
+ }
+ return ((WORD_LIST *)NULL);
+}
+
+/* This does not perform word splitting or dequote the WORD_LIST
+ it returns. */
+static WORD_LIST *
+expand_string_for_rhs (string, quoted, dollar_at_p, has_dollar_at)
+ char *string;
+ int quoted, *dollar_at_p, *has_dollar_at;
+{
+ WORD_DESC td;
+ WORD_LIST *tresult;
+
+ if (string == 0 || *string == '\0')
+ return (WORD_LIST *)NULL;
+
+ td.flags = 0;
+ td.word = string;
+ tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at);
+ return (tresult);
+}
+
+/* Expand STRING just as if you were expanding a word. This also returns
+ a list of words. Note that filename globbing is *NOT* done for word
+ or string expansion, just when the shell is expanding a command. This
+ does parameter expansion, command substitution, arithmetic expansion,
+ and word splitting. Dequote the resultant WORD_LIST before returning. */
+WORD_LIST *
+expand_string (string, quoted)
+ char *string;
+ int quoted;
+{
+ WORD_LIST *result;
+
+ if (string == 0 || *string == '\0')
+ return ((WORD_LIST *)NULL);
+
+ result = expand_string_leave_quoted (string, quoted);
+ return (result ? dequote_list (result) : result);
+}
+
+/***************************************************
+ * *
+ * Functions to handle quoting chars *
+ * *
+ ***************************************************/
+
+/* Conventions:
+
+ A string with s[0] == CTLNUL && s[1] == 0 is a quoted null string.
+ The parser passes CTLNUL as CTLESC CTLNUL. */
+
+/* Quote escape characters in string s, but no other characters. This is
+ used to protect CTLESC and CTLNUL in variable values from the rest of
+ the word expansion process after the variable is expanded. */
+char *
+quote_escapes (string)
+ char *string;
+{
+ register char *s, *t;
+ size_t slen;
+ char *result, *send;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ send = string + slen;
+
+ t = result = (char *)xmalloc ((slen * 2) + 1);
+ s = string;
+
+ while (*s)
+ {
+ if (*s == CTLESC || *s == CTLNUL)
+ *t++ = CTLESC;
+ COPY_CHAR_P (t, s, send);
+ }
+ *t = '\0';
+ return (result);
+}
+
+static WORD_LIST *
+list_quote_escapes (list)
+ WORD_LIST *list;
+{
+ register WORD_LIST *w;
+ char *t;
+
+ for (w = list; w; w = w->next)
+ {
+ t = w->word->word;
+ w->word->word = quote_escapes (t);
+ free (t);
+ }
+ return list;
+}
+
+/* Inverse of quote_escapes; remove CTLESC protecting CTLESC or CTLNUL.
+
+ The parser passes us CTLESC as CTLESC CTLESC and CTLNUL as CTLESC CTLNUL.
+ This is necessary to make unquoted CTLESC and CTLNUL characters in the
+ data stream pass through properly.
+
+ We need to remove doubled CTLESC characters inside quoted strings before
+ quoting the entire string, so we do not double the number of CTLESC
+ characters.
+
+ Also used by parts of the pattern substitution code. */
+static char *
+dequote_escapes (string)
+ char *string;
+{
+ register char *s, *t;
+ size_t slen;
+ char *result, *send;
+ DECLARE_MBSTATE;
+
+ if (string == 0)
+ return string;
+
+ slen = strlen (string);
+ send = string + slen;
+
+ t = result = (char *)xmalloc (slen + 1);
+ s = string;
+
+ if (strchr (string, CTLESC) == 0)
+ return (strcpy (result, s));
+
+ while (*s)
+ {
+ if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL))
+ {
+ s++;
+ if (*s == '\0')
+ break;
+ }
+ COPY_CHAR_P (t, s, send);
+ }
+ *t = '\0';
+ return result;
+}
+
+/* Return a new string with the quoted representation of character C. */
+static char *
+make_quoted_char (c)
+ int c;
+{
+ char *temp;
+
+ temp = (char *)xmalloc (3);
+ if (c == 0)
+ {
+ temp[0] = CTLNUL;
+ temp[1] = '\0';
+ }
+ else
+ {
+ temp[0] = CTLESC;
+ temp[1] = c;
+ temp[2] = '\0';
+ }
+ return (temp);
+}
+
+/* Quote STRING. Return a new string. */
+char *
+quote_string (string)
+ char *string;
+{
+ register char *t;
+ size_t slen;
+ char *result, *send;
+
+ if (*string == 0)
+ {
+ result = (char *)xmalloc (2);
+ result[0] = CTLNUL;
+ result[1] = '\0';
+ }
+ else
+ {
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+ send = string + slen;
+
+ result = (char *)xmalloc ((slen * 2) + 1);
+
+ for (t = result; string < send; )
+ {
+ *t++ = CTLESC;
+ COPY_CHAR_P (t, string, send);
+ }
+ *t = '\0';
+ }
+ return (result);
+}
+
+/* De-quoted quoted characters in STRING. */
+char *
+dequote_string (string)
+ char *string;
+{
+ register char *s, *t;
+ size_t slen;
+ char *result, *send;
+ DECLARE_MBSTATE;
+
+ slen = strlen (string);
+
+ t = result = (char *)xmalloc (slen + 1);
+
+ if (QUOTED_NULL (string))
+ {
+ result[0] = '\0';
+ return (result);
+ }
+
+ /* If no character in the string can be quoted, don't bother examining
+ each character. Just return a copy of the string passed to us. */
+ if (strchr (string, CTLESC) == NULL)
+ return (strcpy (result, string));
+
+ send = string + slen;
+ s = string;
+ while (*s)
+ {
+ if (*s == CTLESC)
+ {
+ s++;
+ if (*s == '\0')
+ break;
+ }
+ COPY_CHAR_P (t, s, send);
+ }
+
+ *t = '\0';
+ return (result);
+}
+
+/* Quote the entire WORD_LIST list. */
+static WORD_LIST *
+quote_list (list)
+ WORD_LIST *list;
+{
+ register WORD_LIST *w;
+ char *t;
+
+ for (w = list; w; w = w->next)
+ {
+ t = w->word->word;
+ w->word->word = quote_string (t);
+ free (t);
+ w->word->flags |= W_QUOTED;
+ }
+ return list;
+}
+
+static WORD_LIST *
+dequote_list (list)
+ WORD_LIST *list;
+{
+ register char *s;
+ register WORD_LIST *tlist;
+
+ for (tlist = list; tlist; tlist = tlist->next)
+ {
+ s = dequote_string (tlist->word->word);
+ free (tlist->word->word);
+ tlist->word->word = s;
+ }
+ return list;
+}
+
+/* Remove CTLESC protecting a CTLESC or CTLNUL in place. Return the passed
+ string. */
+static char *
+remove_quoted_escapes (string)
+ char *string;
+{
+ char *t;
+
+ if (string)
+ {
+ t = dequote_escapes (string);
+ strcpy (string, t);
+ free (t);
+ }
+
+ return (string);
+}
+
+/* Perform quoted null character removal on STRING. We don't allow any
+ quoted null characters in the middle or at the ends of strings because
+ of how expand_word_internal works. remove_quoted_nulls () turns
+ STRING into an empty string iff it only consists of a quoted null,
+ and removes all unquoted CTLNUL characters. */
+static char *
+remove_quoted_nulls (string)
+ char *string;
+{
+ register size_t slen;
+ register int i, j, prev_i;
+ DECLARE_MBSTATE;
+
+ if (strchr (string, CTLNUL) == 0) /* XXX */
+ return string; /* XXX */
+
+ slen = strlen (string);
+ i = j = 0;
+
+ while (i < slen)
+ {
+ if (string[i] == CTLESC)
+ {
+ /* Old code had j++, but we cannot assume that i == j at this
+ point -- what if a CTLNUL has already been removed from the
+ string? We don't want to drop the CTLESC or recopy characters
+ that we've already copied down. */
+ i++; string[j++] = CTLESC;
+ if (i == slen)
+ break;
+ }
+ else if (string[i] == CTLNUL)
+ i++;
+
+ prev_i = i;
+ ADVANCE_CHAR (string, slen, i);
+ if (j < prev_i)
+ {
+ do string[j++] = string[prev_i++]; while (prev_i < i);
+ }
+ else
+ j = i;
+ }
+ string[j] = '\0';
+
+ return (string);
+}
+
+/* Perform quoted null character removal on each element of LIST.
+ This modifies LIST. */
+void
+word_list_remove_quoted_nulls (list)
+ WORD_LIST *list;
+{
+ register WORD_LIST *t;
+
+ for (t = list; t; t = t->next)
+ remove_quoted_nulls (t->word->word);
+}
+
+/* **************************************************************** */
+/* */
+/* Functions for Matching and Removing Patterns */
+/* */
+/* **************************************************************** */
+
+#if defined (HANDLE_MULTIBYTE)
+#if 0 /* Currently unused */
+static unsigned char *
+mb_getcharlens (string, len)
+ char *string;
+ int len;
+{
+ int i, offset, last;
+ unsigned char *ret;
+ char *p;
+ DECLARE_MBSTATE;
+
+ i = offset = 0;
+ last = 0;
+ ret = (unsigned char *)xmalloc (len);
+ memset (ret, 0, len);
+ while (string[last])
+ {
+ ADVANCE_CHAR (string, len, offset);
+ ret[last] = offset - last;
+ last = offset;
+ }
+ return ret;
+}
+#endif
+#endif
+
+/* Remove the portion of PARAM matched by PATTERN according to OP, where OP
+ can have one of 4 values:
+ RP_LONG_LEFT remove longest matching portion at start of PARAM
+ RP_SHORT_LEFT remove shortest matching portion at start of PARAM
+ RP_LONG_RIGHT remove longest matching portion at end of PARAM
+ RP_SHORT_RIGHT remove shortest matching portion at end of PARAM
+*/
+
+#define RP_LONG_LEFT 1
+#define RP_SHORT_LEFT 2
+#define RP_LONG_RIGHT 3
+#define RP_SHORT_RIGHT 4
+
+static char *
+remove_upattern (param, pattern, op)
+ char *param, *pattern;
+ int op;
+{
+ register int len;
+ register char *end;
+ register char *p, *ret, c;
+
+ len = STRLEN (param);
+ end = param + len;
+
+ switch (op)
+ {
+ case RP_LONG_LEFT: /* remove longest match at start */
+ for (p = end; p >= param; p--)
+ {
+ c = *p; *p = '\0';
+ if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ *p = c;
+ return (savestring (p));
+ }
+ *p = c;
+
+ }
+ break;
+
+ case RP_SHORT_LEFT: /* remove shortest match at start */
+ for (p = param; p <= end; p++)
+ {
+ c = *p; *p = '\0';
+ if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ *p = c;
+ return (savestring (p));
+ }
+ *p = c;
+ }
+ break;
+
+ case RP_LONG_RIGHT: /* remove longest match at end */
+ for (p = param; p <= end; p++)
+ {
+ if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ c = *p; *p = '\0';
+ ret = savestring (param);
+ *p = c;
+ return (ret);
+ }
+ }
+ break;
+
+ case RP_SHORT_RIGHT: /* remove shortest match at end */
+ for (p = end; p >= param; p--)
+ {
+ if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ c = *p; *p = '\0';
+ ret = savestring (param);
+ *p = c;
+ return (ret);
+ }
+ }
+ break;
+ }
+
+ return (savestring (param)); /* no match, return original string */
+}
+
+#if defined (HANDLE_MULTIBYTE)
+
+#if !defined (HAVE_WCSDUP)
+static wchar_t *
+wcsdup (ws)
+ wchar_t *ws;
+{
+ wchar_t *ret;
+ size_t len;
+
+ len = wcslen (ws);
+ ret = xmalloc ((len + 1) * sizeof (wchar_t));
+ if (ret == 0)
+ return ret;
+ return (wcscpy (ret, ws));
+}
+#endif /* !HAVE_WCSDUP */
+
+static wchar_t *
+remove_wpattern (wparam, wstrlen, wpattern, op)
+ wchar_t *wparam;
+ size_t wstrlen;
+ wchar_t *wpattern;
+ int op;
+{
+ wchar_t wc;
+ int n, n1;
+ wchar_t *ret;
+
+ switch (op)
+ {
+ case RP_LONG_LEFT: /* remove longest match at start */
+ for (n = wstrlen; n >= 0; n--)
+ {
+ wc = wparam[n]; wparam[n] = L'\0';
+ if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ wparam[n] = wc;
+ return (wcsdup (wparam + n));
+ }
+ wparam[n] = wc;
+ }
+ break;
+
+ case RP_SHORT_LEFT: /* remove shortest match at start */
+ for (n = 0; n <= wstrlen; n++)
+ {
+ wc = wparam[n]; wparam[n] = L'\0';
+ if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ wparam[n] = wc;
+ return (wcsdup (wparam + n));
+ }
+ wparam[n] = wc;
+ }
+ break;
+
+ case RP_LONG_RIGHT: /* remove longest match at end */
+ for (n = 0; n <= wstrlen; n++)
+ {
+ if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ wc = wparam[n]; wparam[n] = L'\0';
+ ret = wcsdup (wparam);
+ wparam[n] = wc;
+ return (ret);
+ }
+ }
+ break;
+
+ case RP_SHORT_RIGHT: /* remove shortest match at end */
+ for (n = wstrlen; n >= 0; n--)
+ {
+ if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH)
+ {
+ wc = wparam[n]; wparam[n] = L'\0';
+ ret = wcsdup (wparam);
+ wparam[n] = wc;
+ return (ret);
+ }
+ }
+ break;
+ }
+
+ return (wcsdup (wparam)); /* no match, return original string */
+}
+#endif /* HANDLE_MULTIBYTE */
+
+static char *
+remove_pattern (param, pattern, op)
+ char *param, *pattern;
+ int op;
+{
+ if (param == NULL)
+ return (param);
+ if (*param == '\0' || pattern == NULL || *pattern == '\0') /* minor optimization */
+ return (savestring (param));
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1)
+ {
+ wchar_t *ret, *oret;
+ size_t n;
+ wchar_t *wparam, *wpattern;
+ mbstate_t ps;
+ char *xret;
+
+ n = xdupmbstowcs (&wpattern, NULL, pattern);
+ if (n == (size_t)-1)
+ return (remove_upattern (param, pattern, op));
+ n = xdupmbstowcs (&wparam, NULL, param);
+ if (n == (size_t)-1)
+ {
+ free (wpattern);
+ return (remove_upattern (param, pattern, op));
+ }
+ oret = ret = remove_wpattern (wparam, n, wpattern, op);
+
+ free (wparam);
+ free (wpattern);
+
+ n = strlen (param);
+ xret = xmalloc (n + 1);
+ memset (&ps, '\0', sizeof (mbstate_t));
+ n = wcsrtombs (xret, (const wchar_t **)&ret, n, &ps);
+ xret[n] = '\0'; /* just to make sure */
+ free (oret);
+ return xret;
+ }
+ else
+#endif
+ return (remove_upattern (param, pattern, op));
+}
+
+/* Return 1 of the first character of STRING could match the first
+ character of pattern PAT. Used to avoid n2 calls to strmatch(). */
+static int
+match_pattern_char (pat, string)
+ char *pat, *string;
+{
+ char c;
+
+ if (*string == 0)
+ return (0);
+
+ switch (c = *pat++)
+ {
+ default:
+ return (*string == c);
+ case '\\':
+ return (*string == *pat);
+ case '?':
+ return (*pat == LPAREN ? 1 : (*string != '\0'));
+ case '*':
+ return (1);
+ case '+':
+ case '!':
+ case '@':
+ return (*pat == LPAREN ? 1 : (*string == c));
+ case '[':
+ return (*string != '\0');
+ }
+}
+
+/* Match PAT anywhere in STRING and return the match boundaries.
+ This returns 1 in case of a successful match, 0 otherwise. SP
+ and EP are pointers into the string where the match begins and
+ ends, respectively. MTYPE controls what kind of match is attempted.
+ MATCH_BEG and MATCH_END anchor the match at the beginning and end
+ of the string, respectively. The longest match is returned. */
+static int
+match_upattern (string, pat, mtype, sp, ep)
+ char *string, *pat;
+ int mtype;
+ char **sp, **ep;
+{
+ int c, len;
+ register char *p, *p1;
+ char *end;
+
+ len = STRLEN (string);
+ end = string + len;
+
+ switch (mtype)
+ {
+ case MATCH_ANY:
+ for (p = string; p <= end; p++)
+ {
+ if (match_pattern_char (pat, p))
+ {
+ for (p1 = end; p1 >= p; p1--)
+ {
+ c = *p1; *p1 = '\0';
+ if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0)
+ {
+ *p1 = c;
+ *sp = p;
+ *ep = p1;
+ return 1;
+ }
+ *p1 = c;
+ }
+ }
+ }
+
+ return (0);
+
+ case MATCH_BEG:
+ if (match_pattern_char (pat, string) == 0)
+ return (0);
+
+ for (p = end; p >= string; p--)
+ {
+ c = *p; *p = '\0';
+ if (strmatch (pat, string, FNMATCH_EXTFLAG) == 0)
+ {
+ *p = c;
+ *sp = string;
+ *ep = p;
+ return 1;
+ }
+ *p = c;
+ }
+
+ return (0);
+
+ case MATCH_END:
+ for (p = string; p <= end; p++)
+ {
+ if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0)
+ {
+ *sp = p;
+ *ep = end;
+ return 1;
+ }
+
+ }
+
+ return (0);
+ }
+
+ return (0);
+}
+
+#if defined (HANDLE_MULTIBYTE)
+/* Return 1 of the first character of WSTRING could match the first
+ character of pattern WPAT. Wide character version. */
+static int
+match_pattern_wchar (wpat, wstring)
+ wchar_t *wpat, *wstring;
+{
+ wchar_t wc;
+
+ if (*wstring == 0)
+ return (0);
+
+ switch (wc = *wpat++)
+ {
+ default:
+ return (*wstring == wc);
+ case L'\\':
+ return (*wstring == *wpat);
+ case L'?':
+ return (*wpat == LPAREN ? 1 : (*wstring != L'\0'));
+ case L'*':
+ return (1);
+ case L'+':
+ case L'!':
+ case L'@':
+ return (*wpat == LPAREN ? 1 : (*wstring == wc));
+ case L'[':
+ return (*wstring != L'\0');
+ }
+}
+
+/* Match WPAT anywhere in WSTRING and return the match boundaries.
+ This returns 1 in case of a successful match, 0 otherwise. Wide
+ character version. */
+static int
+match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep)
+ wchar_t *wstring;
+ char **indices;
+ size_t wstrlen;
+ wchar_t *wpat;
+ int mtype;
+ char **sp, **ep;
+{
+ wchar_t wc;
+ int len;
+#if 0
+ size_t n, n1; /* Apple's gcc seems to miscompile this badly */
+#else
+ int n, n1;
+#endif
+
+ switch (mtype)
+ {
+ case MATCH_ANY:
+ for (n = 0; n <= wstrlen; n++)
+ {
+ if (match_pattern_wchar (wpat, wstring + n))
+ {
+ for (n1 = wstrlen; n1 >= n; n1--)
+ {
+ wc = wstring[n1]; wstring[n1] = L'\0';
+ if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0)
+ {
+ wstring[n1] = wc;
+ *sp = indices[n];
+ *ep = indices[n1];
+ return 1;
+ }
+ wstring[n1] = wc;
+ }
+ }
+ }
+
+ return (0);
+
+ case MATCH_BEG:
+ if (match_pattern_wchar (wpat, wstring) == 0)
+ return (0);
+
+ for (n = wstrlen; n >= 0; n--)
+ {
+ wc = wstring[n]; wstring[n] = L'\0';
+ if (wcsmatch (wpat, wstring, FNMATCH_EXTFLAG) == 0)
+ {
+ wstring[n] = wc;
+ *sp = indices[0];
+ *ep = indices[n];
+ return 1;
+ }
+ wstring[n] = wc;
+ }
+
+ return (0);
+
+ case MATCH_END:
+ for (n = 0; n <= wstrlen; n++)
+ {
+ if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0)
+ {
+ *sp = indices[n];
+ *ep = indices[wstrlen];
+ return 1;
+ }
+ }
+
+ return (0);
+ }
+
+ return (0);
+}
+#endif /* HANDLE_MULTIBYTE */
+
+static int
+match_pattern (string, pat, mtype, sp, ep)
+ char *string, *pat;
+ int mtype;
+ char **sp, **ep;
+{
+#if defined (HANDLE_MULTIBYTE)
+ int ret;
+ size_t n;
+ wchar_t *wstring, *wpat;
+ char **indices;
+#endif
+
+ if (string == 0 || *string == 0 || pat == 0 || *pat == 0)
+ return (0);
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1)
+ {
+ n = xdupmbstowcs (&wpat, NULL, pat);
+ if (n == (size_t)-1)
+ return (match_upattern (string, pat, mtype, sp, ep));
+ n = xdupmbstowcs (&wstring, &indices, string);
+ if (n == (size_t)-1)
+ {
+ free (wpat);
+ return (match_upattern (string, pat, mtype, sp, ep));
+ }
+ ret = match_wpattern (wstring, indices, n, wpat, mtype, sp, ep);
+
+ free (wpat);
+ free (wstring);
+ free (indices);
+
+ return (ret);
+ }
+ else
+#endif
+ return (match_upattern (string, pat, mtype, sp, ep));
+}
+
+static int
+getpatspec (c, value)
+ int c;
+ char *value;
+{
+ if (c == '#')
+ return ((*value == '#') ? RP_LONG_LEFT : RP_SHORT_LEFT);
+ else /* c == '%' */
+ return ((*value == '%') ? RP_LONG_RIGHT : RP_SHORT_RIGHT);
+}
+
+/* Posix.2 says that the WORD should be run through tilde expansion,
+ parameter expansion, command substitution and arithmetic expansion.
+ This leaves the result quoted, so quote_string_for_globbing () has
+ to be called to fix it up for strmatch (). If QUOTED is non-zero,
+ it means that the entire expression was enclosed in double quotes.
+ This means that quoting characters in the pattern do not make any
+ special pattern characters quoted. For example, the `*' in the
+ following retains its special meaning: "${foo#'*'}". */
+static char *
+getpattern (value, quoted, expandpat)
+ char *value;
+ int quoted, expandpat;
+{
+ char *pat, *tword;
+ WORD_LIST *l;
+ int i;
+
+ tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value);
+
+ /* There is a problem here: how to handle single or double quotes in the
+ pattern string when the whole expression is between double quotes?
+ POSIX.2 says that enclosing double quotes do not cause the pattern to
+ be quoted, but does that leave us a problem with @ and array[@] and their
+ expansions inside a pattern? */
+#if 0
+ if (expandpat && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *tword)
+ {
+ i = 0;
+ pat = string_extract_double_quoted (tword, &i, 1);
+ free (tword);
+ tword = pat;
+ }
+#endif
+
+ /* expand_string_for_rhs () leaves WORD quoted and does not perform
+ word splitting. */
+ l = *tword ? expand_string_for_rhs (tword,
+ (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted,
+ (int *)NULL, (int *)NULL)
+ : (WORD_LIST *)0;
+ free (tword);
+ pat = string_list (l);
+ dispose_words (l);
+ if (pat)
+ {
+ tword = quote_string_for_globbing (pat, QGLOB_CVTNULL);
+ free (pat);
+ pat = tword;
+ }
+ return (pat);
+}
+
+#if 0
+/* Handle removing a pattern from a string as a result of ${name%[%]value}
+ or ${name#[#]value}. */
+static char *
+variable_remove_pattern (value, pattern, patspec, quoted)
+ char *value, *pattern;
+ int patspec, quoted;
+{
+ char *tword;
+
+ tword = remove_pattern (value, pattern, patspec);
+
+ return (tword);
+}
+#endif
+
+static char *
+list_remove_pattern (list, pattern, patspec, itype, quoted)
+ WORD_LIST *list;
+ char *pattern;
+ int patspec, itype, quoted;
+{
+ WORD_LIST *new, *l;
+ WORD_DESC *w;
+ char *tword;
+
+ for (new = (WORD_LIST *)NULL, l = list; l; l = l->next)
+ {
+ tword = remove_pattern (l->word->word, pattern, patspec);
+ w = make_bare_word (tword);
+ FREE (tword);
+ new = make_word_list (w, new);
+ }
+
+ l = REVERSE_LIST (new, WORD_LIST *);
+ if (itype == '*')
+#if 0
+ tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l);
+#else
+ tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l);
+#endif
+ else
+ tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l);
+
+ dispose_words (l);
+ return (tword);
+}
+
+static char *
+parameter_list_remove_pattern (itype, pattern, patspec, quoted)
+ int itype;
+ char *pattern;
+ int patspec, quoted;
+{
+ char *ret;
+ WORD_LIST *list;
+
+ list = list_rest_of_args ();
+ if (list == 0)
+ return ((char *)NULL);
+ ret = list_remove_pattern (list, pattern, patspec, itype, quoted);
+ dispose_words (list);
+ return (ret);
+}
+
+#if defined (ARRAY_VARS)
+static char *
+array_remove_pattern (a, pattern, patspec, varname, quoted)
+ ARRAY *a;
+ char *pattern;
+ int patspec;
+ char *varname; /* so we can figure out how it's indexed */
+ int quoted;
+{
+ int itype;
+ char *ret;
+ WORD_LIST *list;
+ SHELL_VAR *v;
+
+ /* compute itype from varname here */
+ v = array_variable_part (varname, &ret, 0);
+ itype = ret[0];
+
+ list = array_to_word_list (a);
+ if (list == 0)
+ return ((char *)NULL);
+ ret = list_remove_pattern (list, pattern, patspec, itype, quoted);
+ dispose_words (list);
+
+ return ret;
+}
+#endif /* ARRAY_VARS */
+
+static char *
+parameter_brace_remove_pattern (varname, value, patstr, rtype, quoted)
+ char *varname, *value, *patstr;
+ int rtype, quoted;
+{
+ int vtype, patspec, starsub;
+ char *temp1, *val, *pattern;
+ SHELL_VAR *v;
+
+ if (value == 0)
+ return ((char *)NULL);
+
+ this_command_name = varname;
+
+ vtype = get_var_and_type (varname, value, quoted, &v, &val);
+ if (vtype == -1)
+ return ((char *)NULL);
+
+ starsub = vtype & VT_STARSUB;
+ vtype &= ~VT_STARSUB;
+
+ patspec = getpatspec (rtype, patstr);
+ if (patspec == RP_LONG_LEFT || patspec == RP_LONG_RIGHT)
+ patstr++;
+
+ pattern = getpattern (patstr, quoted, 1);
+
+ temp1 = (char *)NULL; /* shut up gcc */
+ switch (vtype)
+ {
+ case VT_VARIABLE:
+ case VT_ARRAYMEMBER:
+ temp1 = remove_pattern (val, pattern, patspec);
+ if (vtype == VT_VARIABLE)
+ FREE (val);
+ if (temp1)
+ {
+ val = quote_escapes (temp1);
+ free (temp1);
+ temp1 = val;
+ }
+ break;
+#if defined (ARRAY_VARS)
+ case VT_ARRAYVAR:
+ temp1 = array_remove_pattern (array_cell (v), pattern, patspec, varname, quoted);
+ if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0))
+ {
+ val = quote_escapes (temp1);
+ free (temp1);
+ temp1 = val;
+ }
+ break;
+#endif
+ case VT_POSPARMS:
+ temp1 = parameter_list_remove_pattern (varname[0], pattern, patspec, quoted);
+ if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0))
+ {
+ val = quote_escapes (temp1);
+ free (temp1);
+ temp1 = val;
+ }
+ break;
+ }
+
+ FREE (pattern);
+ return temp1;
+}
+
+/*******************************************
+ * *
+ * Functions to expand WORD_DESCs *
+ * *
+ *******************************************/
+
+/* Expand WORD, performing word splitting on the result. This does
+ parameter expansion, command substitution, arithmetic expansion,
+ word splitting, and quote removal. */
+
+WORD_LIST *
+expand_word (word, quoted)
+ WORD_DESC *word;
+ int quoted;
+{
+ WORD_LIST *result, *tresult;
+
+ tresult = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL);
+ result = word_list_split (tresult);
+ dispose_words (tresult);
+ return (result ? dequote_list (result) : result);
+}
+
+/* Expand WORD, but do not perform word splitting on the result. This
+ does parameter expansion, command substitution, arithmetic expansion,
+ and quote removal. */
+WORD_LIST *
+expand_word_unsplit (word, quoted)
+ WORD_DESC *word;
+ int quoted;
+{
+ WORD_LIST *result;
+
+ expand_no_split_dollar_star = 1;
+ result = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL);
+ expand_no_split_dollar_star = 0;
+
+ return (result ? dequote_list (result) : result);
+}
+
+/* Perform shell expansions on WORD, but do not perform word splitting or
+ quote removal on the result. */
+WORD_LIST *
+expand_word_leave_quoted (word, quoted)
+ WORD_DESC *word;
+ int quoted;
+{
+ return (call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL));
+}
+
+#if defined (PROCESS_SUBSTITUTION)
+
+/*****************************************************************/
+/* */
+/* Hacking Process Substitution */
+/* */
+/*****************************************************************/
+
+#if !defined (HAVE_DEV_FD)
+/* Named pipes must be removed explicitly with `unlink'. This keeps a list
+ of FIFOs the shell has open. unlink_fifo_list will walk the list and
+ unlink all of them. add_fifo_list adds the name of an open FIFO to the
+ list. NFIFO is a count of the number of FIFOs in the list. */
+#define FIFO_INCR 20
+
+struct temp_fifo {
+ char *file;
+ pid_t proc;
+};
+
+static struct temp_fifo *fifo_list = (struct temp_fifo *)NULL;
+static int nfifo;
+static int fifo_list_size;
+
+static void
+add_fifo_list (pathname)
+ char *pathname;
+{
+ if (nfifo >= fifo_list_size - 1)
+ {
+ fifo_list_size += FIFO_INCR;
+ fifo_list = (struct temp_fifo *)xrealloc (fifo_list,
+ fifo_list_size * sizeof (struct temp_fifo));
+ }
+
+ fifo_list[nfifo].file = savestring (pathname);
+ nfifo++;
+}
+
+void
+unlink_fifo_list ()
+{
+ int saved, i, j;
+
+ if (nfifo == 0)
+ return;
+
+ for (i = saved = 0; i < nfifo; i++)
+ {
+ if ((fifo_list[i].proc == -1) || (kill(fifo_list[i].proc, 0) == -1))
+ {
+ unlink (fifo_list[i].file);
+ free (fifo_list[i].file);
+ fifo_list[i].file = (char *)NULL;
+ fifo_list[i].proc = -1;
+ }
+ else
+ saved++;
+ }
+
+ /* If we didn't remove some of the FIFOs, compact the list. */
+ if (saved)
+ {
+ for (i = j = 0; i < nfifo; i++)
+ if (fifo_list[i].file)
+ {
+ fifo_list[j].file = fifo_list[i].file;
+ fifo_list[j].proc = fifo_list[i].proc;
+ j++;
+ }
+ nfifo = j;
+ }
+ else
+ nfifo = 0;
+}
+
+static char *
+make_named_pipe ()
+{
+ char *tname;
+
+ tname = sh_mktmpname ("sh-np", MT_USERANDOM);
+ if (mkfifo (tname, 0600) < 0)
+ {
+ free (tname);
+ return ((char *)NULL);
+ }
+
+ add_fifo_list (tname);
+ return (tname);
+}
+
+#else /* HAVE_DEV_FD */
+
+/* DEV_FD_LIST is a bitmap of file descriptors attached to pipes the shell
+ has open to children. NFDS is a count of the number of bits currently
+ set in DEV_FD_LIST. TOTFDS is a count of the highest possible number
+ of open files. */
+static char *dev_fd_list = (char *)NULL;
+static int nfds;
+static int totfds; /* The highest possible number of open files. */
+
+static void
+add_fifo_list (fd)
+ int fd;
+{
+ if (!dev_fd_list || fd >= totfds)
+ {
+ int ofds;
+
+ ofds = totfds;
+ totfds = getdtablesize ();
+ if (totfds < 0 || totfds > 256)
+ totfds = 256;
+ if (fd > totfds)
+ totfds = fd + 2;
+
+ dev_fd_list = (char *)xrealloc (dev_fd_list, totfds);
+ memset (dev_fd_list + ofds, '\0', totfds - ofds);
+ }
+
+ dev_fd_list[fd] = 1;
+ nfds++;
+}
+
+void
+unlink_fifo_list ()
+{
+ register int i;
+
+ if (nfds == 0)
+ return;
+
+ for (i = 0; nfds && i < totfds; i++)
+ if (dev_fd_list[i])
+ {
+ close (i);
+ dev_fd_list[i] = 0;
+ nfds--;
+ }
+
+ nfds = 0;
+}
+
+#if defined (NOTDEF)
+print_dev_fd_list ()
+{
+ register int i;
+
+ fprintf (stderr, "pid %ld: dev_fd_list:", (long)getpid ());
+ fflush (stderr);
+
+ for (i = 0; i < totfds; i++)
+ {
+ if (dev_fd_list[i])
+ fprintf (stderr, " %d", i);
+ }
+ fprintf (stderr, "\n");
+}
+#endif /* NOTDEF */
+
+static char *
+make_dev_fd_filename (fd)
+ int fd;
+{
+ char *ret, intbuf[INT_STRLEN_BOUND (int) + 1], *p;
+
+ ret = (char *)xmalloc (sizeof (DEV_FD_PREFIX) + 4);
+
+ strcpy (ret, DEV_FD_PREFIX);
+ p = inttostr (fd, intbuf, sizeof (intbuf));
+ strcpy (ret + sizeof (DEV_FD_PREFIX) - 1, p);
+
+ add_fifo_list (fd);
+ return (ret);
+}
+
+#endif /* HAVE_DEV_FD */
+
+/* Return a filename that will open a connection to the process defined by
+ executing STRING. HAVE_DEV_FD, if defined, means open a pipe and return
+ a filename in /dev/fd corresponding to a descriptor that is one of the
+ ends of the pipe. If not defined, we use named pipes on systems that have
+ them. Systems without /dev/fd and named pipes are out of luck.
+
+ OPEN_FOR_READ_IN_CHILD, if 1, means open the named pipe for reading or
+ use the read end of the pipe and dup that file descriptor to fd 0 in
+ the child. If OPEN_FOR_READ_IN_CHILD is 0, we open the named pipe for
+ writing or use the write end of the pipe in the child, and dup that
+ file descriptor to fd 1 in the child. The parent does the opposite. */
+
+static char *
+process_substitute (string, open_for_read_in_child)
+ char *string;
+ int open_for_read_in_child;
+{
+ char *pathname;
+ int fd, result;
+ pid_t old_pid, pid;
+#if defined (HAVE_DEV_FD)
+ int parent_pipe_fd, child_pipe_fd;
+ int fildes[2];
+#endif /* HAVE_DEV_FD */
+#if defined (JOB_CONTROL)
+ pid_t old_pipeline_pgrp;
+#endif
+
+ if (!string || !*string || wordexp_only)
+ return ((char *)NULL);
+
+#if !defined (HAVE_DEV_FD)
+ pathname = make_named_pipe ();
+#else /* HAVE_DEV_FD */
+ if (pipe (fildes) < 0)
+ {
+ sys_error (_("cannot make pipe for process substitution"));
+ return ((char *)NULL);
+ }
+ /* If OPEN_FOR_READ_IN_CHILD == 1, we want to use the write end of
+ the pipe in the parent, otherwise the read end. */
+ parent_pipe_fd = fildes[open_for_read_in_child];
+ child_pipe_fd = fildes[1 - open_for_read_in_child];
+ /* Move the parent end of the pipe to some high file descriptor, to
+ avoid clashes with FDs used by the script. */
+ parent_pipe_fd = move_to_high_fd (parent_pipe_fd, 1, 64);
+
+ pathname = make_dev_fd_filename (parent_pipe_fd);
+#endif /* HAVE_DEV_FD */
+
+ if (!pathname)
+ {
+ sys_error (_("cannot make pipe for process substitution"));
+ return ((char *)NULL);
+ }
+
+ old_pid = last_made_pid;
+
+#if defined (JOB_CONTROL)
+ old_pipeline_pgrp = pipeline_pgrp;
+ pipeline_pgrp = shell_pgrp;
+ save_pipeline (1);
+#endif /* JOB_CONTROL */
+
+ pid = make_child ((char *)NULL, 1);
+ if (pid == 0)
+ {
+ reset_terminating_signals (); /* XXX */
+ free_pushed_string_input ();
+ /* Cancel traps, in trap.c. */
+ restore_original_signals ();
+ setup_async_signals ();
+ subshell_environment |= SUBSHELL_COMSUB;
+ }
+
+#if defined (JOB_CONTROL)
+ set_sigchld_handler ();
+ stop_making_children ();
+ pipeline_pgrp = old_pipeline_pgrp;
+#endif /* JOB_CONTROL */
+
+ if (pid < 0)
+ {
+ sys_error (_("cannot make child for process substitution"));
+ free (pathname);
+#if defined (HAVE_DEV_FD)
+ close (parent_pipe_fd);
+ close (child_pipe_fd);
+#endif /* HAVE_DEV_FD */
+ return ((char *)NULL);
+ }
+
+ if (pid > 0)
+ {
+#if defined (JOB_CONTROL)
+ restore_pipeline (1);
+#endif
+
+#if !defined (HAVE_DEV_FD)
+ fifo_list[nfifo-1].proc = pid;
+#endif
+
+ last_made_pid = old_pid;
+
+#if defined (JOB_CONTROL) && defined (PGRP_PIPE)
+ close_pgrp_pipe ();
+#endif /* JOB_CONTROL && PGRP_PIPE */
+
+#if defined (HAVE_DEV_FD)
+ close (child_pipe_fd);
+#endif /* HAVE_DEV_FD */
+
+ return (pathname);
+ }
+
+ set_sigint_handler ();
+
+#if defined (JOB_CONTROL)
+ set_job_control (0);
+#endif /* JOB_CONTROL */
+
+#if !defined (HAVE_DEV_FD)
+ /* Open the named pipe in the child. */
+ fd = open (pathname, open_for_read_in_child ? O_RDONLY|O_NONBLOCK : O_WRONLY);
+ if (fd < 0)
+ {
+ /* Two separate strings for ease of translation. */
+ if (open_for_read_in_child)
+ sys_error (_("cannot open named pipe %s for reading"), pathname);
+ else
+ sys_error (_("cannot open named pipe %s for writing"), pathname);
+
+ exit (127);
+ }
+ if (open_for_read_in_child)
+ {
+ if (sh_unset_nodelay_mode (fd) < 0)
+ {
+ sys_error (_("cannout reset nodelay mode for fd %d"), fd);
+ exit (127);
+ }
+ }
+#else /* HAVE_DEV_FD */
+ fd = child_pipe_fd;
+#endif /* HAVE_DEV_FD */
+
+ if (dup2 (fd, open_for_read_in_child ? 0 : 1) < 0)
+ {
+ sys_error (_("cannot duplicate named pipe %s as fd %d"), pathname,
+ open_for_read_in_child ? 0 : 1);
+ exit (127);
+ }
+
+ if (fd != (open_for_read_in_child ? 0 : 1))
+ close (fd);
+
+ /* Need to close any files that this process has open to pipes inherited
+ from its parent. */
+ if (current_fds_to_close)
+ {
+ close_fd_bitmap (current_fds_to_close);
+ current_fds_to_close = (struct fd_bitmap *)NULL;
+ }
+
+#if defined (HAVE_DEV_FD)
+ /* Make sure we close the parent's end of the pipe and clear the slot
+ in the fd list so it is not closed later, if reallocated by, for
+ instance, pipe(2). */
+ close (parent_pipe_fd);
+ dev_fd_list[parent_pipe_fd] = 0;
+#endif /* HAVE_DEV_FD */
+
+ result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST));
+
+#if !defined (HAVE_DEV_FD)
+ /* Make sure we close the named pipe in the child before we exit. */
+ close (open_for_read_in_child ? 0 : 1);
+#endif /* !HAVE_DEV_FD */
+
+ exit (result);
+ /*NOTREACHED*/
+}
+#endif /* PROCESS_SUBSTITUTION */
+
+/***********************************/
+/* */
+/* Command Substitution */
+/* */
+/***********************************/
+
+static char *
+read_comsub (fd, quoted)
+ int fd, quoted;
+{
+ char *istring, buf[128], *bufp;
+ int istring_index, istring_size, c;
+ ssize_t bufn;
+
+ istring = (char *)NULL;
+ istring_index = istring_size = bufn = 0;
+
+#ifdef __CYGWIN__
+ setmode (fd, O_TEXT); /* we don't want CR/LF, we want Unix-style */
+#endif
+
+ /* Read the output of the command through the pipe. */
+ while (1)
+ {
+ if (fd < 0)
+ break;
+ if (--bufn <= 0)
+ {
+ bufn = zread (fd, buf, sizeof (buf));
+ if (bufn <= 0)
+ break;
+ bufp = buf;
+ }
+ c = *bufp++;
+
+ if (c == 0)
+ {
+#if 0
+ internal_warning ("read_comsub: ignored null byte in input");
+#endif
+ continue;
+ }
+
+ /* Add the character to ISTRING, possibly after resizing it. */
+ RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE);
+
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL)
+ istring[istring_index++] = CTLESC;
+
+ istring[istring_index++] = c;
+
+#if 0
+#if defined (__CYGWIN__)
+ if (c == '\n' && istring_index > 1 && istring[istring_index - 2] == '\r')
+ {
+ istring_index--;
+ istring[istring_index - 1] = '\n';
+ }
+#endif
+#endif
+ }
+
+ if (istring)
+ istring[istring_index] = '\0';
+
+ /* If we read no output, just return now and save ourselves some
+ trouble. */
+ if (istring_index == 0)
+ {
+ FREE (istring);
+ return (char *)NULL;
+ }
+
+ /* Strip trailing newlines from the output of the command. */
+ if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ {
+ while (istring_index > 0)
+ {
+ if (istring[istring_index - 1] == '\n')
+ {
+ --istring_index;
+
+ /* If the newline was quoted, remove the quoting char. */
+ if (istring[istring_index - 1] == CTLESC)
+ --istring_index;
+ }
+ else
+ break;
+ }
+ istring[istring_index] = '\0';
+ }
+ else
+ strip_trailing (istring, istring_index - 1, 1);
+
+ return istring;
+}
+
+/* Perform command substitution on STRING. This returns a string,
+ possibly quoted. */
+char *
+command_substitute (string, quoted)
+ char *string;
+ int quoted;
+{
+ pid_t pid, old_pid, old_pipeline_pgrp;
+ char *istring;
+ int result, fildes[2], function_value, pflags, rc;
+
+ istring = (char *)NULL;
+
+ /* Don't fork () if there is no need to. In the case of no command to
+ run, just return NULL. */
+ if (!string || !*string || (string[0] == '\n' && !string[1]))
+ return ((char *)NULL);
+
+ if (wordexp_only && read_but_dont_execute)
+ {
+ last_command_exit_value = 125;
+ jump_to_top_level (EXITPROG);
+ }
+
+ /* We're making the assumption here that the command substitution will
+ eventually run a command from the file system. Since we'll run
+ maybe_make_export_env in this subshell before executing that command,
+ the parent shell and any other shells it starts will have to remake
+ the environment. If we make it before we fork, other shells won't
+ have to. Don't bother if we have any temporary variable assignments,
+ though, because the export environment will be remade after this
+ command completes anyway, but do it if all the words to be expanded
+ are variable assignments. */
+ if (subst_assign_varlist == 0 || garglist == 0)
+ maybe_make_export_env (); /* XXX */
+
+ /* Flags to pass to parse_and_execute() */
+ pflags = interactive ? SEVAL_RESETLINE : 0;
+
+ /* Pipe the output of executing STRING into the current shell. */
+ if (pipe (fildes) < 0)
+ {
+ sys_error (_("cannot make pipe for command substitution"));
+ goto error_exit;
+ }
+
+ old_pid = last_made_pid;
+#if defined (JOB_CONTROL)
+ old_pipeline_pgrp = pipeline_pgrp;
+ /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline. */
+ if ((subshell_environment & SUBSHELL_PIPE) == 0)
+ pipeline_pgrp = shell_pgrp;
+ cleanup_the_pipeline ();
+#endif
+
+ pid = make_child ((char *)NULL, 0);
+ if (pid == 0)
+ /* Reset the signal handlers in the child, but don't free the
+ trap strings. */
+ reset_signal_handlers ();
+
+#if defined (JOB_CONTROL)
+ set_sigchld_handler ();
+ stop_making_children ();
+ pipeline_pgrp = old_pipeline_pgrp;
+#else
+ stop_making_children ();
+#endif /* JOB_CONTROL */
+
+ if (pid < 0)
+ {
+ sys_error (_("cannot make child for command substitution"));
+ error_exit:
+
+ FREE (istring);
+ close (fildes[0]);
+ close (fildes[1]);
+ return ((char *)NULL);
+ }
+
+ if (pid == 0)
+ {
+ set_sigint_handler (); /* XXX */
+
+ free_pushed_string_input ();
+
+ if (dup2 (fildes[1], 1) < 0)
+ {
+ sys_error (_("command_substitute: cannot duplicate pipe as fd 1"));
+ exit (EXECUTION_FAILURE);
+ }
+
+ /* If standard output is closed in the parent shell
+ (such as after `exec >&-'), file descriptor 1 will be
+ the lowest available file descriptor, and end up in
+ fildes[0]. This can happen for stdin and stderr as well,
+ but stdout is more important -- it will cause no output
+ to be generated from this command. */
+ if ((fildes[1] != fileno (stdin)) &&
+ (fildes[1] != fileno (stdout)) &&
+ (fildes[1] != fileno (stderr)))
+ close (fildes[1]);
+
+ if ((fildes[0] != fileno (stdin)) &&
+ (fildes[0] != fileno (stdout)) &&
+ (fildes[0] != fileno (stderr)))
+ close (fildes[0]);
+
+ /* The currently executing shell is not interactive. */
+ interactive = 0;
+
+ /* This is a subshell environment. */
+ subshell_environment |= SUBSHELL_COMSUB;
+
+ /* When not in POSIX mode, command substitution does not inherit
+ the -e flag. */
+ if (posixly_correct == 0)
+ exit_immediately_on_error = 0;
+
+ remove_quoted_escapes (string);
+
+ startup_state = 2; /* see if we can avoid a fork */
+ /* Give command substitution a place to jump back to on failure,
+ so we don't go back up to main (). */
+ result = setjmp (top_level);
+
+ /* If we're running a command substitution inside a shell function,
+ trap `return' so we don't return from the function in the subshell
+ and go off to never-never land. */
+ if (result == 0 && return_catch_flag)
+ function_value = setjmp (return_catch);
+ else
+ function_value = 0;
+
+ if (result == ERREXIT)
+ rc = last_command_exit_value;
+ else if (result == EXITPROG)
+ rc = last_command_exit_value;
+ else if (result)
+ rc = EXECUTION_FAILURE;
+ else if (function_value)
+ rc = return_catch_value;
+ else
+ {
+ subshell_level++;
+ rc = parse_and_execute (string, "command substitution", pflags|SEVAL_NOHIST);
+ subshell_level--;
+ }
+
+ last_command_exit_value = rc;
+ rc = run_exit_trap ();
+ exit (rc);
+ }
+ else
+ {
+#if defined (JOB_CONTROL) && defined (PGRP_PIPE)
+ close_pgrp_pipe ();
+#endif /* JOB_CONTROL && PGRP_PIPE */
+
+ close (fildes[1]);
+
+ istring = read_comsub (fildes[0], quoted);
+
+ close (fildes[0]);
+
+ current_command_subst_pid = pid;
+ last_command_exit_value = wait_for (pid);
+ last_command_subst_pid = pid;
+ last_made_pid = old_pid;
+
+#if defined (JOB_CONTROL)
+ /* If last_command_exit_value > 128, then the substituted command
+ was terminated by a signal. If that signal was SIGINT, then send
+ SIGINT to ourselves. This will break out of loops, for instance. */
+ if (last_command_exit_value == (128 + SIGINT) && last_command_exit_signal == SIGINT)
+ kill (getpid (), SIGINT);
+
+ /* wait_for gives the terminal back to shell_pgrp. If some other
+ process group should have it, give it away to that group here.
+ pipeline_pgrp is non-zero only while we are constructing a
+ pipline, so what we are concerned about is whether or not that
+ pipeline was started in the background. A pipeline started in
+ the background should never get the tty back here. */
+#if 0
+ if (interactive && pipeline_pgrp != (pid_t)0 && pipeline_pgrp != last_asynchronous_pid)
+#else
+ if (interactive && pipeline_pgrp != (pid_t)0 && (subshell_environment & SUBSHELL_ASYNC) == 0)
+#endif
+ give_terminal_to (pipeline_pgrp, 0);
+#endif /* JOB_CONTROL */
+
+ return (istring);
+ }
+}
+
+/********************************************************
+ * *
+ * Utility functions for parameter expansion *
+ * *
+ ********************************************************/
+
+#if defined (ARRAY_VARS)
+
+static arrayind_t
+array_length_reference (s)
+ char *s;
+{
+ int len;
+ arrayind_t ind;
+ char *t, c;
+ ARRAY *array;
+ SHELL_VAR *var;
+
+ var = array_variable_part (s, &t, &len);
+
+ /* If unbound variables should generate an error, report one and return
+ failure. */
+ if ((var == 0 || array_p (var) == 0) && unbound_vars_is_error)
+ {
+ c = *--t;
+ *t = '\0';
+ err_unboundvar (s);
+ *t = c;
+ return (-1);
+ }
+ else if (var == 0)
+ return 0;
+
+ /* We support a couple of expansions for variables that are not arrays.
+ We'll return the length of the value for v[0], and 1 for v[@] or
+ v[*]. Return 0 for everything else. */
+
+ array = array_p (var) ? array_cell (var) : (ARRAY *)NULL;
+
+ if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']')
+ return (array_p (var) ? array_num_elements (array) : 1);
+
+ ind = array_expand_index (t, len);
+ if (ind < 0)
+ {
+ err_badarraysub (t);
+ return (-1);
+ }
+
+ if (array_p (var))
+ t = array_reference (array, ind);
+ else
+ t = (ind == 0) ? value_cell (var) : (char *)NULL;
+
+ len = STRLEN (t);
+ return (len);
+}
+#endif /* ARRAY_VARS */
+
+static int
+valid_brace_expansion_word (name, var_is_special)
+ char *name;
+ int var_is_special;
+{
+ if (DIGIT (*name) && all_digits (name))
+ return 1;
+ else if (var_is_special)
+ return 1;
+#if defined (ARRAY_VARS)
+ else if (valid_array_reference (name))
+ return 1;
+#endif /* ARRAY_VARS */
+ else if (legal_identifier (name))
+ return 1;
+ else
+ return 0;
+}
+
+static int
+chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at)
+ char *name;
+ int quoted;
+ int *quoted_dollar_atp, *contains_dollar_at;
+{
+ char *temp1;
+
+ if (name == 0)
+ {
+ if (quoted_dollar_atp)
+ *quoted_dollar_atp = 0;
+ if (contains_dollar_at)
+ *contains_dollar_at = 0;
+ return 0;
+ }
+
+ /* check for $@ and $* */
+ if (name[0] == '@' && name[1] == 0)
+ {
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 1;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ return 1;
+ }
+ else if (name[0] == '*' && name[1] == '\0' && quoted == 0)
+ {
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ return 1;
+ }
+
+ /* Now check for ${array[@]} and ${array[*]} */
+#if defined (ARRAY_VARS)
+ else if (valid_array_reference (name))
+ {
+ temp1 = xstrchr (name, '[');
+ if (temp1 && temp1[1] == '@' && temp1[2] == ']')
+ {
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 1;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ return 1;
+ } /* [ */
+ /* ${array[*]}, when unquoted, should be treated like ${array[@]},
+ which should result in separate words even when IFS is unset. */
+ if (temp1 && temp1[1] == '*' && temp1[2] == ']' && quoted == 0)
+ {
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ return 1;
+ }
+ }
+#endif
+ return 0;
+}
+
+/* Parameter expand NAME, and return a new string which is the expansion,
+ or NULL if there was no expansion.
+ VAR_IS_SPECIAL is non-zero if NAME is one of the special variables in
+ the shell, e.g., "@", "$", "*", etc. QUOTED, if non-zero, means that
+ NAME was found inside of a double-quoted expression. */
+static char *
+parameter_brace_expand_word (name, var_is_special, quoted)
+ char *name;
+ int var_is_special, quoted;
+{
+ char *temp, *tt;
+ intmax_t arg_index;
+ SHELL_VAR *var;
+ int atype;
+
+ /* Handle multiple digit arguments, as in ${11}. */
+
+ if (legal_number (name, &arg_index))
+ {
+ tt = get_dollar_var_value (arg_index);
+ if (tt)
+ temp = (*tt && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+ ? quote_string (tt)
+ : quote_escapes (tt);
+ else
+ temp = (char *)NULL;
+ FREE (tt);
+ }
+ else if (var_is_special) /* ${@} */
+ {
+ int sindex;
+ tt = (char *)xmalloc (2 + strlen (name));
+ tt[sindex = 0] = '$';
+ strcpy (tt + 1, name);
+
+ temp = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
+ (int *)NULL, (int *)NULL, 0);
+ free (tt);
+ }
+#if defined (ARRAY_VARS)
+ else if (valid_array_reference (name))
+ {
+ temp = array_value (name, quoted, &atype);
+ if (atype == 0 && temp)
+ temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+ ? quote_string (temp)
+ : quote_escapes (temp);
+ }
+#endif
+ else if (var = find_variable (name))
+ {
+ if (var_isset (var) && invisible_p (var) == 0)
+ {
+#if defined (ARRAY_VARS)
+ temp = array_p (var) ? array_reference (array_cell (var), 0) : value_cell (var);
+#else
+ temp = value_cell (var);
+#endif
+
+ if (temp)
+ temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+ ? quote_string (temp)
+ : quote_escapes (temp);
+ }
+ else
+ temp = (char *)NULL;
+ }
+ else
+ temp = (char *)NULL;
+
+ return (temp);
+}
+
+/* Expand an indirect reference to a variable: ${!NAME} expands to the
+ value of the variable whose name is the value of NAME. */
+static char *
+parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at)
+ char *name;
+ int var_is_special, quoted;
+ int *quoted_dollar_atp, *contains_dollar_at;
+{
+ char *temp, *t;
+
+ t = parameter_brace_expand_word (name, var_is_special, quoted);
+ /* Have to dequote here if necessary */
+ if (t)
+ {
+ temp = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+ ? dequote_string (t)
+ : dequote_escapes (t);
+ free (t);
+ t = temp;
+ }
+ chk_atstar (t, quoted, quoted_dollar_atp, contains_dollar_at);
+ if (t == 0)
+ return (t);
+ temp = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted);
+ free (t);
+ return temp;
+}
+
+/* Expand the right side of a parameter expansion of the form ${NAMEcVALUE},
+ depending on the value of C, the separating character. C can be one of
+ "-", "+", or "=". QUOTED is true if the entire brace expression occurs
+ between double quotes. */
+static char *
+parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat)
+ char *name, *value;
+ int c, quoted, *qdollaratp, *hasdollarat;
+{
+ WORD_LIST *l;
+ char *t, *t1, *temp;
+ int hasdol;
+
+ /* XXX - Should we tilde expand in an assignment context if C is `='? */
+ if (*value == '~')
+ temp = bash_tilde_expand (value, 0);
+ else if (xstrchr (value, '~') && unquoted_substring ("=~", value))
+ temp = bash_tilde_expand (value, 1);
+ else
+ temp = savestring (value);
+
+ /* If the entire expression is between double quotes, we want to treat
+ the value as a double-quoted string, with the exception that we strip
+ embedded unescaped double quotes. */
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp)
+ {
+ hasdol = 0;
+ t = string_extract_double_quoted (temp, &hasdol, 1);
+ free (temp);
+ temp = t;
+ }
+
+ hasdol = 0;
+ /* XXX was 0 not quoted */
+ l = *temp ? expand_string_for_rhs (temp, quoted, &hasdol, (int *)NULL)
+ : (WORD_LIST *)0;
+ if (hasdollarat)
+ *hasdollarat = hasdol || (l && l->next);
+ free (temp);
+ if (l)
+ {
+ /* The expansion of TEMP returned something. We need to treat things
+ slightly differently if HASDOL is non-zero. If we have "$@", the
+ individual words have already been quoted. We need to turn them
+ into a string with the words separated by the first character of
+ $IFS without any additional quoting, so string_list_dollar_at won't
+ do the right thing. We use string_list_dollar_star instead. */
+ temp = (hasdol || l->next) ? string_list_dollar_star (l) : string_list (l);
+
+ /* If l->next is not null, we know that TEMP contained "$@", since that
+ is the only expansion that creates more than one word. */
+ if (qdollaratp && ((hasdol && quoted) || l->next))
+ *qdollaratp = 1;
+ dispose_words (l);
+ }
+ else if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && hasdol)
+ {
+ /* The brace expansion occurred between double quotes and there was
+ a $@ in TEMP. It does not matter if the $@ is quoted, as long as
+ it does not expand to anything. In this case, we want to return
+ a quoted empty string. */
+ temp = (char *)xmalloc (2);
+ temp[0] = CTLNUL;
+ temp[1] = '\0';
+ }
+ else
+ temp = (char *)NULL;
+
+ if (c == '-' || c == '+')
+ return (temp);
+
+ /* c == '=' */
+ t = temp ? savestring (temp) : savestring ("");
+ t1 = dequote_string (t);
+ free (t);
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (name))
+ assign_array_element (name, t1);
+ else
+#endif /* ARRAY_VARS */
+ bind_variable (name, t1);
+ free (t1);
+ return (temp);
+}
+
+/* Deal with the right hand side of a ${name:?value} expansion in the case
+ that NAME is null or not set. If VALUE is non-null it is expanded and
+ used as the error message to print, otherwise a standard message is
+ printed. */
+static void
+parameter_brace_expand_error (name, value)
+ char *name, *value;
+{
+ WORD_LIST *l;
+ char *temp;
+
+ if (value && *value)
+ {
+ if (*value == '~')
+ temp = bash_tilde_expand (value, 0);
+ else if (xstrchr (value, '~') && unquoted_substring ("=~", value))
+ temp = bash_tilde_expand (value, 1);
+ else
+ temp = savestring (value);
+
+ l = expand_string (temp, 0);
+ FREE (temp);
+ temp = string_list (l);
+ report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */
+ FREE (temp);
+ dispose_words (l);
+ }
+ else
+ report_error (_("%s: parameter null or not set"), name);
+
+ /* Free the data we have allocated during this expansion, since we
+ are about to longjmp out. */
+ free (name);
+ FREE (value);
+}
+
+/* Return 1 if NAME is something for which parameter_brace_expand_length is
+ OK to do. */
+static int
+valid_length_expression (name)
+ char *name;
+{
+ return (name[1] == '\0' || /* ${#} */
+ ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') || /* special param */
+ (DIGIT (name[1]) && all_digits (name + 1)) || /* ${#11} */
+#if defined (ARRAY_VARS)
+ valid_array_reference (name + 1) || /* ${#a[7]} */
+#endif
+ legal_identifier (name + 1)); /* ${#PS1} */
+}
+
+/* Handle the parameter brace expansion that requires us to return the
+ length of a parameter. */
+static intmax_t
+parameter_brace_expand_length (name)
+ char *name;
+{
+ char *t, *newname;
+ intmax_t number, arg_index;
+ WORD_LIST *list;
+#if defined (ARRAY_VARS)
+ SHELL_VAR *var;
+#endif
+
+ if (name[1] == '\0') /* ${#} */
+ number = number_of_args ();
+ else if ((name[1] == '@' || name[1] == '*') && name[2] == '\0') /* ${#@}, ${#*} */
+ number = number_of_args ();
+ else if ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0')
+ {
+ /* Take the lengths of some of the shell's special parameters. */
+ switch (name[1])
+ {
+ case '-':
+ t = which_set_flags ();
+ break;
+ case '?':
+ t = itos (last_command_exit_value);
+ break;
+ case '$':
+ t = itos (dollar_dollar_pid);
+ break;
+ case '!':
+ if (last_asynchronous_pid == NO_PID)
+ t = (char *)NULL;
+ else
+ t = itos (last_asynchronous_pid);
+ break;
+ case '#':
+ t = itos (number_of_args ());
+ break;
+ }
+ number = STRLEN (t);
+ FREE (t);
+ }
+#if defined (ARRAY_VARS)
+ else if (valid_array_reference (name + 1))
+ number = array_length_reference (name + 1);
+#endif /* ARRAY_VARS */
+ else
+ {
+ number = 0;
+
+ if (legal_number (name + 1, &arg_index)) /* ${#1} */
+ {
+ t = get_dollar_var_value (arg_index);
+ number = STRLEN (t);
+ FREE (t);
+ }
+#if defined (ARRAY_VARS)
+ else if ((var = find_variable (name + 1)) && array_p (var))
+ {
+ t = array_reference (array_cell (var), 0);
+ number = STRLEN (t);
+ }
+#endif
+ else /* ${#PS1} */
+ {
+ newname = savestring (name);
+ newname[0] = '$';
+ list = expand_string (newname, Q_DOUBLE_QUOTES);
+ t = list ? string_list (list) : (char *)NULL;
+ free (newname);
+ if (list)
+ dispose_words (list);
+
+ number = STRLEN (t);
+ FREE (t);
+ }
+ }
+
+ return (number);
+}
+
+/* Skip characters in SUBSTR until DELIM. SUBSTR is an arithmetic expression,
+ so we do some ad-hoc parsing of an arithmetic expression to find
+ the first DELIM, instead of using strchr(3). Two rules:
+ 1. If the substring contains a `(', read until closing `)'.
+ 2. If the substring contains a `?', read past one `:' for each `?'.
+*/
+
+static char *
+skiparith (substr, delim)
+ char *substr;
+ int delim;
+{
+ size_t sublen;
+ int skipcol, pcount, i;
+ DECLARE_MBSTATE;
+
+ sublen = strlen (substr);
+ i = skipcol = pcount = 0;
+ while (substr[i])
+ {
+ /* Balance parens */
+ if (substr[i] == LPAREN)
+ {
+ pcount++;
+ i++;
+ continue;
+ }
+ if (substr[i] == RPAREN && pcount)
+ {
+ pcount--;
+ i++;
+ continue;
+ }
+ if (pcount)
+ {
+ ADVANCE_CHAR (substr, sublen, i);
+ continue;
+ }
+
+ /* Skip one `:' for each `?' */
+ if (substr[i] == ':' && skipcol)
+ {
+ skipcol--;
+ i++;
+ continue;
+ }
+ if (substr[i] == delim)
+ break;
+ if (substr[i] == '?')
+ {
+ skipcol++;
+ i++;
+ continue;
+ }
+ ADVANCE_CHAR (substr, sublen, i);
+ }
+
+ return (substr + i);
+}
+
+/* Verify and limit the start and end of the desired substring. If
+ VTYPE == 0, a regular shell variable is being used; if it is 1,
+ then the positional parameters are being used; if it is 2, then
+ VALUE is really a pointer to an array variable that should be used.
+ Return value is 1 if both values were OK, 0 if there was a problem
+ with an invalid expression, or -1 if the values were out of range. */
+static int
+verify_substring_values (value, substr, vtype, e1p, e2p)
+ char *value, *substr;
+ int vtype;
+ intmax_t *e1p, *e2p;
+{
+ char *t, *temp1, *temp2;
+ arrayind_t len;
+ int expok;
+#if defined (ARRAY_VARS)
+ ARRAY *a;
+#endif
+
+ /* duplicate behavior of strchr(3) */
+ t = skiparith (substr, ':');
+ if (*t && *t == ':')
+ *t = '\0';
+ else
+ t = (char *)0;
+
+ temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string);
+ *e1p = evalexp (temp1, &expok);
+ free (temp1);
+ if (expok == 0)
+ return (0);
+
+ len = -1; /* paranoia */
+ switch (vtype)
+ {
+ case VT_VARIABLE:
+ case VT_ARRAYMEMBER:
+ len = strlen (value);
+ break;
+ case VT_POSPARMS:
+ len = number_of_args () + 1;
+ break;
+#if defined (ARRAY_VARS)
+ case VT_ARRAYVAR:
+ a = (ARRAY *)value;
+ /* For arrays, the first value deals with array indices. */
+ len = array_max_index (a); /* arrays index from 0 to n - 1 */
+ break;
+#endif
+ }
+
+ if (len == -1) /* paranoia */
+ return -1;
+
+ if (*e1p < 0) /* negative offsets count from end */
+ *e1p += len;
+
+ if (*e1p >= len || *e1p < 0)
+ return (-1);
+
+#if defined (ARRAY_VARS)
+ /* For arrays, the second offset deals with the number of elements. */
+ if (vtype == VT_ARRAYVAR)
+ len = array_num_elements (a);
+#endif
+
+ if (t)
+ {
+ t++;
+ temp2 = savestring (t);
+ temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
+ free (temp2);
+ t[-1] = ':';
+ *e2p = evalexp (temp1, &expok);
+ free (temp1);
+ if (expok == 0)
+ return (0);
+ if (*e2p < 0)
+ {
+ internal_error (_("%s: substring expression < 0"), t);
+ return (0);
+ }
+#if defined (ARRAY_VARS)
+ /* In order to deal with sparse arrays, push the intelligence about how
+ to deal with the number of elements desired down to the array-
+ specific functions. */
+ if (vtype != VT_ARRAYVAR)
+#endif
+ {
+ *e2p += *e1p; /* want E2 chars starting at E1 */
+ if (*e2p > len)
+ *e2p = len;
+ }
+ }
+ else
+ *e2p = len;
+
+ return (1);
+}
+
+/* Return the type of variable specified by VARNAME (simple variable,
+ positional param, or array variable). Also return the value specified
+ by VARNAME (value of a variable or a reference to an array element).
+ 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, quoted, varp, valp)
+ char *varname, *value;
+ int quoted;
+ SHELL_VAR **varp;
+ char **valp;
+{
+ int vtype;
+ char *temp;
+#if defined (ARRAY_VARS)
+ SHELL_VAR *v;
+#endif
+
+ /* This sets vtype to VT_VARIABLE or VT_POSPARMS */
+ vtype = (varname[0] == '@' || varname[0] == '*') && varname[1] == '\0';
+ if (vtype == VT_POSPARMS && varname[0] == '*')
+ vtype |= VT_STARSUB;
+ *varp = (SHELL_VAR *)NULL;
+
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (varname))
+ {
+ v = array_variable_part (varname, &temp, (int *)0);
+ if (v && array_p (v))
+ { /* [ */
+ if (ALL_ELEMENT_SUB (temp[0]) && temp[1] == ']')
+ {
+ vtype = VT_ARRAYVAR;
+ if (temp[0] == '*')
+ vtype |= VT_STARSUB;
+ *valp = (char *)array_cell (v);
+ }
+ else
+ {
+ vtype = VT_ARRAYMEMBER;
+ *valp = array_value (varname, 1, (int *)NULL);
+ }
+ *varp = v;
+ }
+ else
+ return -1;
+ }
+ else if ((v = find_variable (varname)) && array_p (v))
+ {
+ vtype = VT_ARRAYMEMBER;
+ *varp = v;
+ *valp = array_reference (array_cell (v), 0);
+ }
+ else
+#endif
+#if 1
+ {
+ if (value && vtype == VT_VARIABLE)
+ {
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+ *valp = dequote_string (value);
+ else
+ *valp = dequote_escapes (value);
+ }
+ else
+ *valp = value;
+ }
+#else
+ *valp = (value && vtype == VT_VARIABLE) ? dequote_escapes (value) : value;
+#endif
+
+ return vtype;
+}
+
+/******************************************************/
+/* */
+/* Functions to extract substrings of variable values */
+/* */
+/******************************************************/
+
+#if defined (HANDLE_MULTIBYTE)
+/* Character-oriented rather than strictly byte-oriented substrings. S and
+ E, rather being strict indices into STRING, indicate character (possibly
+ multibyte character) positions that require calculation.
+ Used by the ${param:offset[:length]} expansion. */
+static char *
+mb_substring (string, s, e)
+ char *string;
+ int s, e;
+{
+ char *tt;
+ int start, stop, i, slen;
+ DECLARE_MBSTATE;
+
+ start = 0;
+ slen = STRLEN (string);
+
+ i = s;
+ while (string[start] && i--)
+ ADVANCE_CHAR (string, slen, start);
+ stop = start;
+ i = e - s;
+ while (string[stop] && i--)
+ ADVANCE_CHAR (string, slen, stop);
+ tt = substring (string, start, stop);
+ return tt;
+}
+#endif
+
+/* Process a variable substring expansion: ${name:e1[:e2]}. If VARNAME
+ is `@', use the positional parameters; otherwise, use the value of
+ VARNAME. If VARNAME is an array variable, use the array elements. */
+
+static char *
+parameter_brace_substring (varname, value, substr, quoted)
+ char *varname, *value, *substr;
+ int quoted;
+{
+ intmax_t e1, e2;
+ int vtype, r, starsub;
+ char *temp, *val, *tt;
+ SHELL_VAR *v;
+
+ if (value == 0)
+ return ((char *)NULL);
+
+ this_command_name = varname;
+
+ vtype = get_var_and_type (varname, value, quoted, &v, &val);
+ if (vtype == -1)
+ return ((char *)NULL);
+
+ starsub = vtype & VT_STARSUB;
+ vtype &= ~VT_STARSUB;
+
+ r = verify_substring_values (val, substr, vtype, &e1, &e2);
+ if (r <= 0)
+ return ((r == 0) ? &expand_param_error : (char *)NULL);
+
+ switch (vtype)
+ {
+ case VT_VARIABLE:
+ case VT_ARRAYMEMBER:
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1)
+ tt = mb_substring (val, e1, e2);
+ else
+#endif
+ tt = substring (val, e1, e2);
+
+ if (vtype == VT_VARIABLE)
+ FREE (val);
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+ temp = quote_string (tt);
+ else
+ temp = tt ? quote_escapes (tt) : (char *)NULL;
+ FREE (tt);
+ break;
+ case VT_POSPARMS:
+ tt = pos_params (varname, e1, e2, quoted);
+ if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0)
+ {
+ temp = tt ? quote_escapes (tt) : (char *)NULL;
+ FREE (tt);
+ }
+ else
+ temp = tt;
+ break;
+#if defined (ARRAY_VARS)
+ case VT_ARRAYVAR:
+ /* We want E2 to be the number of elements desired (arrays can be sparse,
+ so verify_substring_values just returns the numbers specified and we
+ rely on array_subrange to understand how to deal with them). */
+ tt = array_subrange (array_cell (v), e1, e2, starsub, quoted);
+ if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0)
+ {
+ temp = tt ? quote_escapes (tt) : (char *)NULL;
+ FREE (tt);
+ }
+ else
+ temp = tt;
+ break;
+#endif
+ default:
+ temp = (char *)NULL;
+ }
+
+ return temp;
+}
+
+/****************************************************************/
+/* */
+/* Functions to perform pattern substitution on variable values */
+/* */
+/****************************************************************/
+
+char *
+pat_subst (string, pat, rep, mflags)
+ char *string, *pat, *rep;
+ int mflags;
+{
+ char *ret, *s, *e, *str;
+ int rsize, rptr, l, replen, mtype;
+
+ mtype = mflags & MATCH_TYPEMASK;
+
+ /* Special cases:
+ * 1. A null pattern with mtype == MATCH_BEG means to prefix STRING
+ * with REP and return the result.
+ * 2. A null pattern with mtype == MATCH_END means to append REP to
+ * STRING and return the result.
+ */
+ if ((pat == 0 || *pat == 0) && (mtype == MATCH_BEG || mtype == MATCH_END))
+ {
+ replen = STRLEN (rep);
+ l = strlen (string);
+ ret = (char *)xmalloc (replen + l + 2);
+ if (replen == 0)
+ strcpy (ret, string);
+ else if (mtype == MATCH_BEG)
+ {
+ strcpy (ret, rep);
+ strcpy (ret + replen, string);
+ }
+ else
+ {
+ strcpy (ret, string);
+ strcpy (ret + l, rep);
+ }
+ return (ret);
+ }
+
+ ret = (char *)xmalloc (rsize = 64);
+ ret[0] = '\0';
+
+ for (replen = STRLEN (rep), rptr = 0, str = string;;)
+ {
+ if (match_pattern (str, pat, mtype, &s, &e) == 0)
+ break;
+ l = s - str;
+ RESIZE_MALLOCED_BUFFER (ret, rptr, (l + replen), rsize, 64);
+
+ /* OK, now copy the leading unmatched portion of the string (from
+ str to s) to ret starting at rptr (the current offset). Then copy
+ the replacement string at ret + rptr + (s - str). Increment
+ rptr (if necessary) and str and go on. */
+ if (l)
+ {
+ strncpy (ret + rptr, str, l);
+ rptr += l;
+ }
+ if (replen)
+ {
+ strncpy (ret + rptr, rep, replen);
+ rptr += replen;
+ }
+ str = e; /* e == end of match */
+
+ if (((mflags & MATCH_GLOBREP) == 0) || mtype != MATCH_ANY)
+ break;
+
+ if (s == e)
+ e++, str++; /* avoid infinite recursion on zero-length match */
+ }
+
+ /* Now copy the unmatched portion of the input string */
+ if (*str)
+ {
+ RESIZE_MALLOCED_BUFFER (ret, rptr, STRLEN(str) + 1, rsize, 64);
+ strcpy (ret + rptr, str);
+ }
+ else
+ ret[rptr] = '\0';
+
+ return ret;
+}
+
+/* Do pattern match and replacement on the positional parameters. */
+static char *
+pos_params_pat_subst (string, pat, rep, mflags)
+ char *string, *pat, *rep;
+ int mflags;
+{
+ WORD_LIST *save, *params;
+ WORD_DESC *w;
+ char *ret, *tt;
+
+ save = params = list_rest_of_args ();
+ if (save == 0)
+ return ((char *)NULL);
+
+ for ( ; params; params = params->next)
+ {
+ ret = pat_subst (params->word->word, pat, rep, mflags);
+ w = make_bare_word (ret);
+ dispose_word (params->word);
+ params->word = w;
+ FREE (ret);
+ }
+
+ if ((mflags & (MATCH_QUOTED|MATCH_STARSUB)) == (MATCH_QUOTED|MATCH_STARSUB))
+ ret = string_list_dollar_star (quote_list (save));
+ else
+ ret = string_list ((mflags & MATCH_QUOTED) ? quote_list (save) : save);
+ dispose_words (save);
+
+ return (ret);
+}
+
+/* Perform pattern substitution on VALUE, which is the expansion of
+ VARNAME. PATSUB is an expression supplying the pattern to match
+ 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, patsub, quoted)
+ char *varname, *value, *patsub;
+ int quoted;
+{
+ int vtype, mflags, starsub;
+ char *val, *temp, *pat, *rep, *p, *lpatsub, *tt;
+ SHELL_VAR *v;
+
+ if (value == 0)
+ return ((char *)NULL);
+
+ this_command_name = varname;
+
+ vtype = get_var_and_type (varname, value, quoted, &v, &val);
+ if (vtype == -1)
+ return ((char *)NULL);
+
+ starsub = vtype & VT_STARSUB;
+ vtype &= ~VT_STARSUB;
+
+ mflags = 0;
+ if (*patsub == '/')
+ {
+ mflags |= MATCH_GLOBREP;
+ patsub++;
+ }
+
+ /* Malloc this because expand_string_if_necessary or one of the expansion
+ functions in its call chain may free it on a substitution error. */
+ lpatsub = savestring (patsub);
+
+ if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ mflags |= MATCH_QUOTED;
+
+ if (starsub)
+ mflags |= MATCH_STARSUB;
+
+ if (rep = quoted_strchr (lpatsub, '/', ST_BACKSL))
+ *rep++ = '\0';
+ else
+ rep = (char *)NULL;
+
+ if (rep && *rep == '\0')
+ rep = (char *)NULL;
+
+#if 0
+ /* Expand PAT and REP for command, variable and parameter, arithmetic,
+ and process substitution. Also perform quote removal. Do not
+ perform word splitting or filename generation. */
+ pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit);
+#else
+ /* Perform the same expansions on the pattern as performed by the
+ pattern removal expansions. */
+ pat = getpattern (lpatsub, quoted, 1);
+#endif
+
+ if (rep)
+ {
+ if ((mflags & MATCH_QUOTED) == 0)
+ rep = expand_string_if_necessary (rep, quoted, expand_string_unsplit);
+ else
+ rep = expand_string_to_string_internal (rep, quoted, expand_string_unsplit);
+ }
+
+ p = pat;
+ if (pat && pat[0] == '#')
+ {
+ mflags |= MATCH_BEG;
+ p++;
+ }
+ else if (pat && pat[0] == '%')
+ {
+ mflags |= MATCH_END;
+ p++;
+ }
+ else
+ mflags |= MATCH_ANY;
+
+ /* OK, we now want to substitute REP for PAT in VAL. If
+ flags & MATCH_GLOBREP is non-zero, the substitution is done
+ everywhere, otherwise only the first occurrence of PAT is
+ replaced. The pattern matching code doesn't understand
+ CTLESC quoting CTLESC and CTLNUL so we use the dequoted variable
+ values passed in (VT_VARIABLE) so the pattern substitution
+ code works right. We need to requote special chars after
+ we're done for VT_VARIABLE and VT_ARRAYMEMBER, and for the
+ other cases if QUOTED == 0, since the posparams and arrays
+ indexed by * or @ do special things when QUOTED != 0. */
+
+ switch (vtype)
+ {
+ case VT_VARIABLE:
+ case VT_ARRAYMEMBER:
+ temp = pat_subst (val, p, rep, mflags);
+ if (vtype == VT_VARIABLE)
+ FREE (val);
+ if (temp)
+ {
+ tt = quote_escapes (temp);
+ free (temp);
+ temp = tt;
+ }
+ break;
+ case VT_POSPARMS:
+ temp = pos_params_pat_subst (val, p, rep, mflags);
+ if (temp && (mflags & MATCH_QUOTED) == 0)
+ {
+ tt = quote_escapes (temp);
+ free (temp);
+ temp = tt;
+ }
+ break;
+#if defined (ARRAY_VARS)
+ case VT_ARRAYVAR:
+ temp = array_patsub (array_cell (v), p, rep, mflags);
+ if (temp && (mflags & MATCH_QUOTED) == 0)
+ {
+ tt = quote_escapes (temp);
+ free (temp);
+ temp = tt;
+ }
+ break;
+#endif
+ }
+
+ FREE (pat);
+ FREE (rep);
+ free (lpatsub);
+
+ return temp;
+}
+
+/****************************************************************/
+/* */
+/* Functions to perform parameter expansion on a string */
+/* */
+/****************************************************************/
+
+/* ${[#][!]name[[:]#[#]%[%]-=?+[word][:e1[:e2]]]} */
+static char *
+parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_dollar_at)
+ char *string;
+ int *indexp, quoted, *quoted_dollar_atp, *contains_dollar_at;
+{
+ int check_nullness, var_is_set, var_is_null, var_is_special;
+ int want_substring, want_indir, want_patsub;
+ char *name, *value, *temp, *temp1;
+ int t_index, sindex, c;
+ intmax_t number;
+
+ value = (char *)NULL;
+ var_is_set = var_is_null = var_is_special = check_nullness = 0;
+ want_substring = want_indir = want_patsub = 0;
+
+ sindex = *indexp;
+ t_index = ++sindex;
+ name = string_extract (string, &t_index, "#%:-=?+/}", EX_VARNAME);
+
+ /* If the name really consists of a special variable, then make sure
+ that we have the entire name. We don't allow indirect references
+ to special variables except `#', `?', `@' and `*'. */
+ if ((sindex == t_index &&
+ (string[t_index] == '-' ||
+ string[t_index] == '?' ||
+ string[t_index] == '#')) ||
+ (sindex == t_index - 1 && string[sindex] == '!' &&
+ (string[t_index] == '#' ||
+ string[t_index] == '?' ||
+ string[t_index] == '@' ||
+ string[t_index] == '*')))
+ {
+ t_index++;
+ free (name);
+ temp1 = string_extract (string, &t_index, "#%:-=?+/}", 0);
+ name = (char *)xmalloc (3 + (strlen (temp1)));
+ *name = string[sindex];
+ if (string[sindex] == '!')
+ {
+ /* indirect reference of $#, $?, $@, or $* */
+ name[1] = string[sindex + 1];
+ strcpy (name + 2, temp1);
+ }
+ else
+ strcpy (name + 1, temp1);
+ free (temp1);
+ }
+ sindex = t_index;
+
+ /* Find out what character ended the variable name. Then
+ do the appropriate thing. */
+ if (c = string[sindex])
+ sindex++;
+
+ /* If c is followed by one of the valid parameter expansion
+ characters, move past it as normal. If not, assume that
+ a substring specification is being given, and do not move
+ past it. */
+ if (c == ':' && VALID_PARAM_EXPAND_CHAR (string[sindex]))
+ {
+ check_nullness++;
+ if (c = string[sindex])
+ sindex++;
+ }
+ else if (c == ':' && string[sindex] != RBRACE)
+ want_substring = 1;
+ else if (c == '/' && string[sindex] != RBRACE)
+ want_patsub = 1;
+
+ /* Catch the valid and invalid brace expressions that made it through the
+ tests above. */
+ /* ${#-} is a valid expansion and means to take the length of $-.
+ Similarly for ${#?} and ${##}... */
+ if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 &&
+ VALID_SPECIAL_LENGTH_PARAM (c) && string[sindex] == RBRACE)
+ {
+ name = (char *)xrealloc (name, 3);
+ name[1] = c;
+ name[2] = '\0';
+ c = string[sindex++];
+ }
+
+ /* ...but ${#%}, ${#:}, ${#=}, ${#+}, and ${#/} are errors. */
+ if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 &&
+ member (c, "%:=+/") && string[sindex] == RBRACE)
+ {
+ temp = (char *)NULL;
+ goto bad_substitution;
+ }
+
+ /* Indirect expansion begins with a `!'. A valid indirect expansion is
+ either a variable name, one of the positional parameters or a special
+ variable that expands to one of the positional parameters. */
+ want_indir = *name == '!' &&
+ (legal_variable_starter ((unsigned char)name[1]) || DIGIT (name[1])
+ || VALID_INDIR_PARAM (name[1]));
+
+ /* Determine the value of this variable. */
+
+ /* Check for special variables, directly referenced. */
+ if (SPECIAL_VAR (name, want_indir))
+ var_is_special++;
+
+ /* Check for special expansion things, like the length of a parameter */
+ if (*name == '#' && name[1])
+ {
+ /* If we are not pointing at the character just after the
+ closing brace, then we haven't gotten all of the name.
+ Since it begins with a special character, this is a bad
+ substitution. Also check NAME for validity before trying
+ to go on. */
+ if (string[sindex - 1] != RBRACE || (valid_length_expression (name) == 0))
+ {
+ temp = (char *)NULL;
+ goto bad_substitution;
+ }
+
+ number = parameter_brace_expand_length (name);
+ free (name);
+
+ *indexp = sindex;
+ return ((number < 0) ? &expand_param_error : itos (number));
+ }
+
+ /* ${@} is identical to $@. */
+ if (name[0] == '@' && name[1] == '\0')
+ {
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 1;
+
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ }
+
+ /* Process ${!PREFIX*} expansion. */
+ if (want_indir && string[sindex - 1] == RBRACE &&
+ (string[sindex - 2] == '*' || string[sindex - 2] == '@') &&
+ legal_variable_starter ((unsigned char) name[1]))
+ {
+ char **x;
+ WORD_LIST *xlist;
+
+ temp1 = savestring (name + 1);
+ number = strlen (temp1);
+ temp1[number - 1] = '\0';
+ x = all_variables_matching_prefix (temp1);
+ xlist = strvec_to_word_list (x, 0, 0);
+ if (string[sindex - 2] == '*')
+ temp = string_list_dollar_star (xlist);
+ else
+ {
+ temp = string_list_dollar_at (xlist, quoted);
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 1;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ }
+ free (x);
+ free (xlist);
+ free (temp1);
+ *indexp = sindex;
+ return (temp);
+ }
+
+#if defined (ARRAY_VARS)
+ /* Process ${!ARRAY[@]} and ${!ARRAY[*]} expansion. */ /* [ */
+ if (want_indir && string[sindex - 1] == RBRACE &&
+ string[sindex - 2] == ']' && valid_array_reference (name+1))
+ {
+ char *x, *x1;
+
+ temp1 = savestring (name + 1);
+ x = array_variable_name (temp1, &x1, (int *)0); /* [ */
+ FREE (x);
+ if (ALL_ELEMENT_SUB (x1[0]) && x1[1] == ']')
+ {
+ temp = array_keys (temp1, quoted);
+ if (x1[0] == '@')
+ {
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 1;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ }
+
+ free (temp1);
+ *indexp = sindex;
+ return (temp);
+ }
+
+ free (temp1);
+ }
+#endif /* ARRAY_VARS */
+
+ /* Make sure that NAME is valid before trying to go on. */
+ if (valid_brace_expansion_word (want_indir ? name + 1 : name,
+ var_is_special) == 0)
+ {
+ temp = (char *)NULL;
+ goto bad_substitution;
+ }
+
+ if (want_indir)
+ temp = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+ else
+ temp = parameter_brace_expand_word (name, var_is_special, quoted);
+
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (name))
+ chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at);
+#endif
+
+ var_is_set = temp != (char *)0;
+ var_is_null = check_nullness && (var_is_set == 0 || *temp == 0);
+
+ /* Get the rest of the stuff inside the braces. */
+ if (c && c != RBRACE)
+ {
+ /* Extract the contents of the ${ ... } expansion
+ according to the Posix.2 rules. */
+ value = extract_dollar_brace_string (string, &sindex, quoted, 0);
+ if (string[sindex] == RBRACE)
+ sindex++;
+ else
+ goto bad_substitution;
+ }
+ else
+ value = (char *)NULL;
+
+ *indexp = sindex;
+
+ /* If this is a substring spec, process it and add the result. */
+ if (want_substring)
+ {
+ temp1 = parameter_brace_substring (name, temp, value, quoted);
+ FREE (name);
+ FREE (value);
+ FREE (temp);
+ return (temp1);
+ }
+ else if (want_patsub)
+ {
+ temp1 = parameter_brace_patsub (name, temp, value, quoted);
+ FREE (name);
+ FREE (value);
+ FREE (temp);
+ return (temp1);
+ }
+
+ /* Do the right thing based on which character ended the variable name. */
+ switch (c)
+ {
+ default:
+ case '\0':
+ bad_substitution:
+ report_error (_("%s: bad substitution"), string ? string : "??");
+ FREE (value);
+ FREE (temp);
+ free (name);
+ return &expand_param_error;
+
+ case RBRACE:
+ if (var_is_set == 0 && unbound_vars_is_error)
+ {
+ err_unboundvar (name);
+ FREE (value);
+ FREE (temp);
+ free (name);
+ last_command_exit_value = EXECUTION_FAILURE;
+ return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+ }
+ break;
+
+ case '#': /* ${param#[#]pattern} */
+ case '%': /* ${param%[%]pattern} */
+ if (value == 0 || *value == '\0' || temp == 0 || *temp == '\0')
+ {
+ FREE (value);
+ break;
+ }
+ temp1 = parameter_brace_remove_pattern (name, temp, value, c, quoted);
+ free (temp);
+ free (value);
+ temp = temp1;
+ break;
+
+ case '-':
+ case '=':
+ case '?':
+ case '+':
+ if (var_is_set && var_is_null == 0)
+ {
+ /* If the operator is `+', we don't want the value of the named
+ variable for anything, just the value of the right hand side. */
+
+ if (c == '+')
+ {
+ /* XXX -- if we're double-quoted and the named variable is "$@",
+ we want to turn off any special handling of "$@" --
+ we're not using it, so whatever is on the rhs applies. */
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 0;
+ if (contains_dollar_at)
+ *contains_dollar_at = 0;
+
+ FREE (temp);
+ if (value)
+ {
+ temp = parameter_brace_expand_rhs (name, value, c,
+ quoted,
+ quoted_dollar_atp,
+ contains_dollar_at);
+ free (value);
+ }
+ else
+ temp = (char *)NULL;
+ }
+ else
+ {
+ FREE (value);
+ }
+ /* Otherwise do nothing; just use the value in TEMP. */
+ }
+ else /* VAR not set or VAR is NULL. */
+ {
+ FREE (temp);
+ temp = (char *)NULL;
+ if (c == '=' && var_is_special)
+ {
+ report_error (_("$%s: cannot assign in this way"), name);
+ free (name);
+ free (value);
+ return &expand_param_error;
+ }
+ else if (c == '?')
+ {
+ parameter_brace_expand_error (name, value);
+ return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+ }
+ else if (c != '+')
+ {
+ /* XXX -- if we're double-quoted and the named variable is "$@",
+ we want to turn off any special handling of "$@" --
+ we're not using it, so whatever is on the rhs applies. */
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp)
+ *quoted_dollar_atp = 0;
+ if (contains_dollar_at)
+ *contains_dollar_at = 0;
+
+ temp = parameter_brace_expand_rhs (name, value, c, quoted,
+ quoted_dollar_atp,
+ contains_dollar_at);
+ }
+ free (value);
+ }
+
+ break;
+ }
+ free (name);
+ return (temp);
+}
+
+/* Expand a single ${xxx} expansion. The braces are optional. When
+ the braces are used, parameter_brace_expand() does the work,
+ possibly calling param_expand recursively. */
+static char *
+param_expand (string, sindex, quoted, expanded_something,
+ contains_dollar_at, quoted_dollar_at_p, had_quoted_null_p,
+ pflags)
+ char *string;
+ int *sindex, quoted, *expanded_something, *contains_dollar_at;
+ int *quoted_dollar_at_p, *had_quoted_null_p, pflags;
+{
+ char *temp, *temp1, uerror[3];
+ int zindex, t_index, expok;
+ unsigned char c;
+ intmax_t number;
+ SHELL_VAR *var;
+ WORD_LIST *list;
+
+ zindex = *sindex;
+ c = string[++zindex];
+
+ temp = (char *)NULL;
+
+ /* Do simple cases first. Switch on what follows '$'. */
+ switch (c)
+ {
+ /* $0 .. $9? */
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ temp1 = dollar_vars[TODIGIT (c)];
+ if (unbound_vars_is_error && temp1 == (char *)NULL)
+ {
+ uerror[0] = '$';
+ uerror[1] = c;
+ uerror[2] = '\0';
+ err_unboundvar (uerror);
+ last_command_exit_value = EXECUTION_FAILURE;
+ return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+ }
+#if 1
+ if (temp1)
+ temp = (*temp1 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
+ ? quote_string (temp1)
+ : quote_escapes (temp1);
+ else
+ temp = (char *)NULL;
+#else
+ temp = temp1 ? quote_escapes (temp1) : (char *)NULL;
+#endif
+ break;
+
+ /* $$ -- pid of the invoking shell. */
+ case '$':
+ temp = itos (dollar_dollar_pid);
+ break;
+
+ /* $# -- number of positional parameters. */
+ case '#':
+ temp = itos (number_of_args ());
+ break;
+
+ /* $? -- return value of the last synchronous command. */
+ case '?':
+ temp = itos (last_command_exit_value);
+ break;
+
+ /* $- -- flags supplied to the shell on invocation or by `set'. */
+ case '-':
+ temp = which_set_flags ();
+ break;
+
+ /* $! -- Pid of the last asynchronous command. */
+ case '!':
+ /* If no asynchronous pids have been created, expand to nothing.
+ If `set -u' has been executed, and no async processes have
+ been created, this is an expansion error. */
+ if (last_asynchronous_pid == NO_PID)
+ {
+ if (expanded_something)
+ *expanded_something = 0;
+ temp = (char *)NULL;
+ if (unbound_vars_is_error)
+ {
+ uerror[0] = '$';
+ uerror[1] = c;
+ uerror[2] = '\0';
+ err_unboundvar (uerror);
+ last_command_exit_value = EXECUTION_FAILURE;
+ return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+ }
+ }
+ else
+ temp = itos (last_asynchronous_pid);
+ break;
+
+ /* The only difference between this and $@ is when the arg is quoted. */
+ case '*': /* `$*' */
+ list = list_rest_of_args ();
+
+ /* If there are no command-line arguments, this should just
+ disappear if there are other characters in the expansion,
+ even if it's quoted. */
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && list == 0)
+ temp = (char *)NULL;
+ else if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ {
+ /* If we have "$*" we want to make a string of the positional
+ parameters, separated by the first character of $IFS, and
+ quote the whole string, including the separators. If IFS
+ is unset, the parameters are separated by ' '; if $IFS is
+ null, the parameters are concatenated. */
+#if 0
+ temp = string_list_dollar_star (list);
+#else
+ temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list);
+#endif
+ temp1 = quote_string (temp);
+ free (temp);
+ temp = temp1;
+ }
+ else
+ {
+ /* If the $* is not quoted it is identical to $@ */
+ temp = string_list_dollar_at (list, quoted);
+ if (expand_no_split_dollar_star == 0 && contains_dollar_at)
+ *contains_dollar_at = 1;
+ }
+
+ dispose_words (list);
+ break;
+
+ /* When we have "$@" what we want is "$1" "$2" "$3" ... This
+ means that we have to turn quoting off after we split into
+ the individually quoted arguments so that the final split
+ on the first character of $IFS is still done. */
+ case '@': /* `$@' */
+ list = list_rest_of_args ();
+
+ /* We want to flag the fact that we saw this. We can't turn
+ off quoting entirely, because other characters in the
+ string might need it (consider "\"$@\""), but we need some
+ way to signal that the final split on the first character
+ of $IFS should be done, even though QUOTED is 1. */
+ if (quoted_dollar_at_p && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
+ *quoted_dollar_at_p = 1;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+
+ /* We want to separate the positional parameters with the first
+ character of $IFS in case $IFS is something other than a space.
+ We also want to make sure that splitting is done no matter what --
+ according to POSIX.2, this expands to a list of the positional
+ parameters no matter what IFS is set to. */
+ temp = string_list_dollar_at (list, quoted);
+
+ dispose_words (list);
+ break;
+
+ case LBRACE:
+ temp = parameter_brace_expand (string, &zindex, quoted,
+ quoted_dollar_at_p,
+ contains_dollar_at);
+ if (temp == &expand_param_error || temp == &expand_param_fatal)
+ return (temp);
+
+ /* XXX */
+ /* Quoted nulls should be removed if there is anything else
+ in the string. */
+ /* Note that we saw the quoted null so we can add one back at
+ the end of this function if there are no other characters
+ in the string, discard TEMP, and go on. The exception to
+ this is when we have "${@}" and $1 is '', since $@ needs
+ special handling. */
+ if (temp && QUOTED_NULL (temp))
+ {
+ if (had_quoted_null_p)
+ *had_quoted_null_p = 1;
+ if (*quoted_dollar_at_p == 0)
+ {
+ free (temp);
+ temp = (char *)NULL;
+ }
+
+ }
+
+ goto return0;
+
+ /* Do command or arithmetic substitution. */
+ case LPAREN:
+ /* We have to extract the contents of this paren substitution. */
+ t_index = zindex + 1;
+ temp = extract_command_subst (string, &t_index);
+ zindex = t_index;
+
+ /* For Posix.2-style `$(( ))' arithmetic substitution,
+ extract the expression and pass it to the evaluator. */
+ if (temp && *temp == LPAREN)
+ {
+ char *temp2;
+ temp1 = temp + 1;
+ temp2 = savestring (temp1);
+ t_index = strlen (temp2) - 1;
+
+ if (temp2[t_index] != RPAREN)
+ {
+ free (temp2);
+ goto comsub;
+ }
+
+ /* Cut off ending `)' */
+ temp2[t_index] = '\0';
+
+ /* Expand variables found inside the expression. */
+ temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string);
+ free (temp2);
+
+arithsub:
+ /* No error messages. */
+ this_command_name = (char *)NULL;
+ number = evalexp (temp1, &expok);
+ free (temp);
+ free (temp1);
+ if (expok == 0)
+ {
+ if (interactive_shell == 0 && posixly_correct)
+ {
+ last_command_exit_value = EXECUTION_FAILURE;
+ return (&expand_param_fatal);
+ }
+ else
+ return (&expand_param_error);
+ }
+ temp = itos (number);
+ break;
+ }
+
+comsub:
+ if (pflags & PF_NOCOMSUB)
+ /* we need zindex+1 because string[zindex] == RPAREN */
+ temp1 = substring (string, *sindex, zindex+1);
+ else
+ temp1 = command_substitute (temp, quoted);
+ FREE (temp);
+ temp = temp1;
+ break;
+
+ /* Do POSIX.2d9-style arithmetic substitution. This will probably go
+ away in a future bash release. */
+ case '[':
+ /* Extract the contents of this arithmetic substitution. */
+ t_index = zindex + 1;
+ temp = extract_arithmetic_subst (string, &t_index);
+ zindex = t_index;
+
+ /* Do initial variable expansion. */
+ temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string);
+
+ goto arithsub;
+
+ default:
+ /* Find the variable in VARIABLE_LIST. */
+ temp = (char *)NULL;
+
+ for (t_index = zindex; (c = string[zindex]) && legal_variable_char (c); zindex++)
+ ;
+ temp1 = (zindex > t_index) ? substring (string, t_index, zindex) : (char *)NULL;
+
+ /* If this isn't a variable name, then just output the `$'. */
+ if (temp1 == 0 || *temp1 == '\0')
+ {
+ FREE (temp1);
+ temp = (char *)xmalloc (2);
+ temp[0] = '$';
+ temp[1] = '\0';
+ if (expanded_something)
+ *expanded_something = 0;
+ goto return0;
+ }
+
+ /* If the variable exists, return its value cell. */
+ var = find_variable (temp1);
+
+ if (var && invisible_p (var) == 0 && var_isset (var))
+ {
+#if defined (ARRAY_VARS)
+ if (array_p (var))
+ {
+ temp = array_reference (array_cell (var), 0);
+ if (temp)
+ temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
+ ? quote_string (temp)
+ : quote_escapes (temp);
+ else if (unbound_vars_is_error)
+ goto unbound_variable;
+ }
+ else
+#endif
+ {
+ temp = value_cell (var);
+
+ temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
+ ? quote_string (temp)
+ : quote_escapes (temp);
+ }
+
+ free (temp1);
+
+ goto return0;
+ }
+
+ temp = (char *)NULL;
+
+unbound_variable:
+ if (unbound_vars_is_error)
+ err_unboundvar (temp1);
+ else
+ {
+ free (temp1);
+ goto return0;
+ }
+
+ free (temp1);
+ last_command_exit_value = EXECUTION_FAILURE;
+ return ((unbound_vars_is_error && interactive_shell == 0)
+ ? &expand_param_fatal
+ : &expand_param_error);
+ }
+
+ if (string[zindex])
+ zindex++;
+
+return0:
+ *sindex = zindex;
+ return (temp);
+}
+
+/* Make a word list which is the result of parameter and variable
+ expansion, command substitution, arithmetic substitution, and
+ quote removal of WORD. Return a pointer to a WORD_LIST which is
+ the result of the expansion. If WORD contains a null word, the
+ word list returned is also null.
+
+ QUOTED contains flag values defined in shell.h.
+
+ ISEXP is used to tell expand_word_internal that the word should be
+ treated as the result of an expansion. This has implications for
+ how IFS characters in the word are treated.
+
+ CONTAINS_DOLLAR_AT and EXPANDED_SOMETHING are return values; when non-null
+ they point to an integer value which receives information about expansion.
+ CONTAINS_DOLLAR_AT gets non-zero if WORD contained "$@", else zero.
+ EXPANDED_SOMETHING get non-zero if WORD contained any parameter expansions,
+ else zero.
+
+ This only does word splitting in the case of $@ expansion. In that
+ case, we split on ' '. */
+
+/* Values for the local variable quoted_state. */
+#define UNQUOTED 0
+#define PARTIALLY_QUOTED 1
+#define WHOLLY_QUOTED 2
+
+static WORD_LIST *
+expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_something)
+ WORD_DESC *word;
+ int quoted, isexp;
+ int *contains_dollar_at;
+ int *expanded_something;
+{
+ WORD_LIST *list;
+ WORD_DESC *tword;
+
+ /* The intermediate string that we build while expanding. */
+ char *istring;
+
+ /* The current size of the above object. */
+ int istring_size;
+
+ /* Index into ISTRING. */
+ int istring_index;
+
+ /* Temporary string storage. */
+ char *temp, *temp1;
+
+ /* The text of WORD. */
+ register char *string;
+
+ /* The size of STRING. */
+ size_t string_size;
+
+ /* The index into STRING. */
+ int sindex;
+
+ /* This gets 1 if we see a $@ while quoted. */
+ int quoted_dollar_at;
+
+ /* One of UNQUOTED, PARTIALLY_QUOTED, or WHOLLY_QUOTED, depending on
+ whether WORD contains no quoting characters, a partially quoted
+ string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */
+ int quoted_state;
+
+ int had_quoted_null;
+ int has_dollar_at;
+ int tflag;
+
+ register unsigned char c; /* Current character. */
+ int t_index; /* For calls to string_extract_xxx. */
+
+ char twochars[2];
+
+ DECLARE_MBSTATE;
+
+ istring = (char *)xmalloc (istring_size = DEFAULT_INITIAL_ARRAY_SIZE);
+ istring[istring_index = 0] = '\0';
+ quoted_dollar_at = had_quoted_null = has_dollar_at = 0;
+ quoted_state = UNQUOTED;
+
+ string = word->word;
+ if (string == 0)
+ goto finished_with_string;
+ string_size = strlen (string);
+
+ if (contains_dollar_at)
+ *contains_dollar_at = 0;
+
+ /* Begin the expansion. */
+
+ for (sindex = 0; ;)
+ {
+ c = string[sindex];
+
+ /* Case on toplevel character. */
+ switch (c)
+ {
+ case '\0':
+ goto finished_with_string;
+
+ case CTLESC:
+ sindex++;
+#if HANDLE_MULTIBYTE
+ if (MB_CUR_MAX > 1 && string[sindex])
+ {
+ SADD_MBQCHAR_BODY(temp, string, sindex, string_size);
+ }
+ else
+#endif
+ {
+ temp = (char *)xmalloc (3);
+ temp[0] = CTLESC;
+ temp[1] = c = string[sindex];
+ temp[2] = '\0';
+ }
+
+dollar_add_string:
+ if (string[sindex])
+ sindex++;
+
+add_string:
+ if (temp)
+ {
+ istring = sub_append_string (temp, istring, &istring_index, &istring_size);
+ temp = (char *)0;
+ }
+
+ break;
+
+#if defined (PROCESS_SUBSTITUTION)
+ /* Process substitution. */
+ case '<':
+ case '>':
+ {
+ if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || posixly_correct)
+ {
+ sindex--; /* add_character: label increments sindex */
+ goto add_character;
+ }
+ else
+ t_index = sindex + 1; /* skip past both '<' and LPAREN */
+
+ temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
+ sindex = t_index;
+
+ /* If the process substitution specification is `<()', we want to
+ open the pipe for writing in the child and produce output; if
+ it is `>()', we want to open the pipe for reading in the child
+ and consume input. */
+ temp = temp1 ? process_substitute (temp1, (c == '>')) : (char *)0;
+
+ FREE (temp1);
+
+ goto dollar_add_string;
+ }
+#endif /* PROCESS_SUBSTITUTION */
+
+ case '$':
+ if (expanded_something)
+ *expanded_something = 1;
+
+ has_dollar_at = 0;
+ temp = param_expand (string, &sindex, quoted, expanded_something,
+ &has_dollar_at, "ed_dollar_at,
+ &had_quoted_null,
+ (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0);
+
+ if (temp == &expand_param_error || temp == &expand_param_fatal)
+ {
+ free (string);
+ free (istring);
+ return ((temp == &expand_param_error) ? &expand_word_error
+ : &expand_word_fatal);
+ }
+ if (contains_dollar_at && has_dollar_at)
+ *contains_dollar_at = 1;
+ goto add_string;
+ break;
+
+ case '`': /* Backquoted command substitution. */
+ {
+ t_index = sindex++;
+
+ if (expanded_something)
+ *expanded_something = 1;
+
+ temp = string_extract (string, &sindex, "`", 0);
+ if (word->flags & W_NOCOMSUB)
+ /* sindex + 1 because string[sindex] == '`' */
+ temp1 = substring (string, t_index, sindex + 1);
+ else
+ {
+ de_backslash (temp);
+ temp1 = command_substitute (temp, quoted);
+ }
+ FREE (temp);
+ temp = temp1;
+ goto dollar_add_string;
+ }
+
+ case '\\':
+ if (string[sindex + 1] == '\n')
+ {
+ sindex += 2;
+ continue;
+ }
+
+ c = string[++sindex];
+
+ if (quoted & Q_HERE_DOCUMENT)
+ tflag = CBSHDOC;
+ else if (quoted & Q_DOUBLE_QUOTES)
+ tflag = CBSDQUOTE;
+ else
+ tflag = 0;
+
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && ((sh_syntaxtab[c] & tflag) == 0))
+ {
+ SCOPY_CHAR_I (twochars, '\\', c, string, sindex, string_size);
+ }
+ else if (c == 0)
+ {
+ c = CTLNUL;
+ sindex--; /* add_character: label increments sindex */
+ goto add_character;
+ }
+ else
+ {
+ SCOPY_CHAR_I (twochars, CTLESC, c, string, sindex, string_size);
+ }
+
+ sindex++;
+add_twochars:
+ /* BEFORE jumping here, we need to increment sindex if appropriate */
+ RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size,
+ DEFAULT_ARRAY_SIZE);
+ istring[istring_index++] = twochars[0];
+ istring[istring_index++] = twochars[1];
+ istring[istring_index] = '\0';
+
+ break;
+
+ case '"':
+#if 0
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE))
+#else
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+#endif
+ goto add_character;
+
+ t_index = ++sindex;
+ temp = string_extract_double_quoted (string, &sindex, 0);
+
+ /* If the quotes surrounded the entire string, then the
+ whole word was quoted. */
+ quoted_state = (t_index == 1 && string[sindex] == '\0')
+ ? WHOLLY_QUOTED
+ : PARTIALLY_QUOTED;
+
+ if (temp && *temp)
+ {
+ tword = make_word (temp); /* XXX */
+ free (temp);
+ temp = (char *)NULL;
+
+ has_dollar_at = 0;
+ list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &has_dollar_at, (int *)NULL);
+
+ if (list == &expand_word_error || list == &expand_word_fatal)
+ {
+ free (istring);
+ free (string);
+ /* expand_word_internal has already freed temp_word->word
+ for us because of the way it prints error messages. */
+ tword->word = (char *)NULL;
+ dispose_word (tword);
+ return list;
+ }
+
+ dispose_word (tword);
+
+ /* "$@" (a double-quoted dollar-at) expands into nothing,
+ not even a NULL word, when there are no positional
+ parameters. */
+ if (list == 0 && has_dollar_at)
+ {
+ quoted_dollar_at++;
+ break;
+ }
+
+ /* If we get "$@", we know we have expanded something, so we
+ need to remember it for the final split on $IFS. This is
+ a special case; it's the only case where a quoted string
+ can expand into more than one word. It's going to come back
+ from the above call to expand_word_internal as a list with
+ a single word, in which all characters are quoted and
+ separated by blanks. What we want to do is to turn it back
+ into a list for the next piece of code. */
+ if (list)
+ dequote_list (list);
+
+ if (has_dollar_at)
+ {
+ quoted_dollar_at++;
+ if (contains_dollar_at)
+ *contains_dollar_at = 1;
+ if (expanded_something)
+ *expanded_something = 1;
+ }
+ }
+ else
+ {
+ /* What we have is "". This is a minor optimization. */
+ FREE (temp);
+ list = (WORD_LIST *)NULL;
+ }
+
+ /* The code above *might* return a list (consider the case of "$@",
+ where it returns "$1", "$2", etc.). We can't throw away the
+ rest of the list, and we have to make sure each word gets added
+ as quoted. We test on tresult->next: if it is non-NULL, we
+ quote the whole list, save it to a string with string_list, and
+ add that string. We don't need to quote the results of this
+ (and it would be wrong, since that would quote the separators
+ as well), so we go directly to add_string. */
+ if (list)
+ {
+ if (list->next)
+ {
+ /* Testing quoted_dollar_at makes sure that "$@" is
+ split correctly when $IFS does not contain a space. */
+ temp = quoted_dollar_at
+ ? string_list_dollar_at (list, Q_DOUBLE_QUOTES)
+ : string_list (quote_list (list));
+ dispose_words (list);
+ goto add_string;
+ }
+ else
+ {
+ temp = savestring (list->word->word);
+ dispose_words (list);
+#if 1
+ /* If the string is not a quoted null string, we want
+ to remove any embedded unquoted CTLNUL characters.
+ We do not want to turn quoted null strings back into
+ the empty string, though. We do this because we
+ want to remove any quoted nulls from expansions that
+ contain other characters. For example, if we have
+ x"$*"y or "x$*y" and there are no positional parameters,
+ the $* should expand into nothing. */
+ /* HOWEVER, this fails if the string contains a literal
+ CTLNUL or CTLNUL is contained in the (non-null) expansion
+ of some variable. I'm not sure what to do about this
+ yet. There has to be some way to indicate the difference
+ between the two. An auxiliary data structure might be
+ necessary. */
+ if (QUOTED_NULL (temp) == 0)
+ remove_quoted_nulls (temp); /* XXX */
+#endif
+ }
+ }
+ else
+ temp = (char *)NULL;
+
+ /* We do not want to add quoted nulls to strings that are only
+ partially quoted; we can throw them away. */
+ if (temp == 0 && quoted_state == PARTIALLY_QUOTED)
+ continue;
+
+ add_quoted_string:
+
+ if (temp)
+ {
+ temp1 = temp;
+ temp = quote_string (temp);
+ free (temp1);
+ goto add_string;
+ }
+ else
+ {
+ /* Add NULL arg. */
+ c = CTLNUL;
+ sindex--; /* add_character: label increments sindex */
+ goto add_character;
+ }
+
+ /* break; */
+
+ case '\'':
+#if 0
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE))
+#else
+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+#endif
+ goto add_character;
+
+ t_index = ++sindex;
+ temp = string_extract_single_quoted (string, &sindex);
+
+ /* If the entire STRING was surrounded by single quotes,
+ then the string is wholly quoted. */
+ quoted_state = (t_index == 1 && string[sindex] == '\0')
+ ? WHOLLY_QUOTED
+ : PARTIALLY_QUOTED;
+
+ /* If all we had was '', it is a null expansion. */
+ if (*temp == '\0')
+ {
+ free (temp);
+ temp = (char *)NULL;
+ }
+ else
+ remove_quoted_escapes (temp); /* ??? */
+
+ /* We do not want to add quoted nulls to strings that are only
+ partially quoted; such nulls are discarded. */
+ if (temp == 0 && (quoted_state == PARTIALLY_QUOTED))
+ continue;
+
+ /* If we have a quoted null expansion, add a quoted NULL to istring. */
+ if (temp == 0)
+ {
+ c = CTLNUL;
+ sindex--; /* add_character: label increments sindex */
+ goto add_character;
+ }
+ else
+ goto add_quoted_string;
+
+ /* break; */
+
+ default:
+ /* This is the fix for " $@ " */
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (isexp == 0 && isifs (c)))
+ {
+ if (string[sindex]) /* from old goto dollar_add_string */
+ sindex++;
+ if (c == 0)
+ {
+ c = CTLNUL;
+ goto add_character;
+ }
+ else
+ {
+#if HANDLE_MULTIBYTE
+ if (MB_CUR_MAX > 1)
+ sindex--;
+
+ if (MB_CUR_MAX > 1)
+ {
+ SADD_MBQCHAR_BODY(temp, string, sindex, string_size);
+ }
+ else
+#endif
+ {
+ twochars[0] = CTLESC;
+ twochars[1] = c;
+ goto add_twochars;
+ }
+ }
+ }
+
+ SADD_MBCHAR (temp, string, sindex, string_size);
+
+ add_character:
+ RESIZE_MALLOCED_BUFFER (istring, istring_index, 1, istring_size,
+ DEFAULT_ARRAY_SIZE);
+ istring[istring_index++] = c;
+ istring[istring_index] = '\0';
+
+ /* Next character. */
+ sindex++;
+ }
+ }
+
+finished_with_string:
+ /* OK, we're ready to return. If we have a quoted string, and
+ quoted_dollar_at is not set, we do no splitting at all; otherwise
+ we split on ' '. The routines that call this will handle what to
+ do if nothing has been expanded. */
+
+ /* Partially and wholly quoted strings which expand to the empty
+ string are retained as an empty arguments. Unquoted strings
+ which expand to the empty string are discarded. The single
+ exception is the case of expanding "$@" when there are no
+ positional parameters. In that case, we discard the expansion. */
+
+ /* Because of how the code that handles "" and '' in partially
+ quoted strings works, we need to make ISTRING into a QUOTED_NULL
+ if we saw quoting characters, but the expansion was empty.
+ "" and '' are tossed away before we get to this point when
+ processing partially quoted strings. This makes "" and $xxx""
+ equivalent when xxx is unset. We also look to see whether we
+ saw a quoted null from a ${} expansion and add one back if we
+ need to. */
+
+ /* If we expand to nothing and there were no single or double quotes
+ in the word, we throw it away. Otherwise, we return a NULL word.
+ The single exception is for $@ surrounded by double quotes when
+ there are no positional parameters. In that case, we also throw
+ the word away. */
+
+ if (*istring == '\0')
+ {
+ if (quoted_dollar_at == 0 && (had_quoted_null || quoted_state == PARTIALLY_QUOTED))
+ {
+ istring[0] = CTLNUL;
+ istring[1] = '\0';
+ tword = make_bare_word (istring);
+ list = make_word_list (tword, (WORD_LIST *)NULL);
+ if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ tword->flags |= W_QUOTED;
+ }
+ /* According to sh, ksh, and Posix.2, if a word expands into nothing
+ and a double-quoted "$@" appears anywhere in it, then the entire
+ word is removed. */
+ else if (quoted_state == UNQUOTED || quoted_dollar_at)
+ list = (WORD_LIST *)NULL;
+#if 0
+ else
+ {
+ tword = make_bare_word (istring);
+ list = make_word_list (tword, (WORD_LIST *)NULL);
+ if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ tword->flags |= W_QUOTED;
+ }
+#else
+ else
+ list = (WORD_LIST *)NULL;
+#endif
+ }
+ else if (word->flags & W_NOSPLIT)
+ {
+ tword = make_bare_word (istring);
+ list = make_word_list (tword, (WORD_LIST *)NULL);
+ if (word->flags & W_ASSIGNMENT)
+ tword->flags |= W_ASSIGNMENT; /* XXX */
+ if (word->flags & W_NOGLOB)
+ tword->flags |= W_NOGLOB; /* XXX */
+ if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ tword->flags |= W_QUOTED;
+ }
+ else
+ {
+ char *ifs_chars;
+
+ ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
+
+ /* If we have $@, we need to split the results no matter what. If
+ IFS is unset or NULL, string_list_dollar_at has separated the
+ positional parameters with a space, so we split on space (we have
+ set ifs_chars to " \t\n" above if ifs is unset). If IFS is set,
+ string_list_dollar_at has separated the positional parameters
+ with the first character of $IFS, so we split on $IFS. */
+ if (has_dollar_at && ifs_chars)
+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
+ else
+ {
+ tword = make_bare_word (istring);
+ list = make_word_list (tword, (WORD_LIST *)NULL);
+ if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
+ tword->flags |= W_QUOTED;
+ if (word->flags & W_ASSIGNMENT)
+ tword->flags |= W_ASSIGNMENT;
+ if (word->flags & W_NOGLOB)
+ tword->flags |= W_NOGLOB;
+ }
+ }
+
+ free (istring);
+ return (list);
+}
+
+/* **************************************************************** */
+/* */
+/* Functions for Quote Removal */
+/* */
+/* **************************************************************** */
+
+/* Perform quote removal on STRING. If QUOTED > 0, assume we are obeying the
+ backslash quoting rules for within double quotes or a here document. */
+char *
+string_quote_removal (string, quoted)
+ char *string;
+ int quoted;
+{
+ size_t slen;
+ char *r, *result_string, *temp, *send;
+ int sindex, tindex, dquote;
+ unsigned char c;
+ DECLARE_MBSTATE;
+
+ /* The result can be no longer than the original string. */
+ slen = strlen (string);
+ send = string + slen;
+
+ r = result_string = (char *)xmalloc (slen + 1);
+
+ for (dquote = sindex = 0; c = string[sindex];)
+ {
+ switch (c)
+ {
+ case '\\':
+ c = string[++sindex];
+ if (((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) && (sh_syntaxtab[c] & CBSDQUOTE) == 0)
+ *r++ = '\\';
+ /* FALLTHROUGH */
+
+ default:
+ SCOPY_CHAR_M (r, string, send, sindex);
+ break;
+
+ case '\'':
+ if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote)
+ {
+ *r++ = c;
+ sindex++;
+ break;
+ }
+ tindex = sindex + 1;
+ temp = string_extract_single_quoted (string, &tindex);
+ if (temp)
+ {
+ strcpy (r, temp);
+ r += strlen (r);
+ free (temp);
+ }
+ sindex = tindex;
+ break;
+
+ case '"':
+ dquote = 1 - dquote;
+ sindex++;
+ break;
+ }
+ }
+ *r = '\0';
+ return (result_string);
+}
+
+#if 0
+/* UNUSED */
+/* Perform quote removal on word WORD. This allocates and returns a new
+ WORD_DESC *. */
+WORD_DESC *
+word_quote_removal (word, quoted)
+ WORD_DESC *word;
+ int quoted;
+{
+ WORD_DESC *w;
+ char *t;
+
+ t = string_quote_removal (word->word, quoted);
+ w = make_bare_word (t);
+ free (t);
+ return (w);
+}
+
+/* Perform quote removal on all words in LIST. If QUOTED is non-zero,
+ the members of the list are treated as if they are surrounded by
+ double quotes. Return a new list, or NULL if LIST is NULL. */
+WORD_LIST *
+word_list_quote_removal (list, quoted)
+ WORD_LIST *list;
+ int quoted;
+{
+ WORD_LIST *result, *t, *tresult;
+
+ for (t = list, result = (WORD_LIST *)NULL; t; t = t->next)
+ {
+ tresult = make_word_list (word_quote_removal (t->word, quoted), (WORD_LIST *)NULL);
+ result = (WORD_LIST *) list_append (result, tresult);
+ }
+ return (result);
+}
+#endif
+
+/*******************************************
+ * *
+ * Functions to perform word splitting *
+ * *
+ *******************************************/
+
+void
+setifs (v)
+ SHELL_VAR *v;
+{
+ char *t;
+ unsigned char uc;
+
+ ifs_var = v;
+ ifs_value = v ? value_cell (v) : " \t\n";
+
+ /* Should really merge ifs_cmap with sh_syntaxtab. */
+ memset (ifs_cmap, '\0', sizeof (ifs_cmap));
+ for (t = ifs_value ; t && *t; t++)
+ {
+ uc = *t;
+ ifs_cmap[uc] = 1;
+ }
+
+ ifs_firstc = ifs_value ? *ifs_value : 0;
+}
+
+char *
+getifs ()
+{
+ return ifs_value;
+}
+
+/* This splits a single word into a WORD LIST on $IFS, but only if the word
+ is not quoted. list_string () performs quote removal for us, even if we
+ don't do any splitting. */
+WORD_LIST *
+word_split (w, ifs_chars)
+ WORD_DESC *w;
+ char *ifs_chars;
+{
+ WORD_LIST *result;
+
+ if (w)
+ {
+ char *xifs;
+
+ xifs = ((w->flags & W_QUOTED) || ifs_chars == 0) ? "" : ifs_chars;
+ result = list_string (w->word, xifs, w->flags & W_QUOTED);
+ }
+ else
+ result = (WORD_LIST *)NULL;
+
+ return (result);
+}
+
+/* Perform word splitting on LIST and return the RESULT. It is possible
+ to return (WORD_LIST *)NULL. */
+static WORD_LIST *
+word_list_split (list)
+ WORD_LIST *list;
+{
+ WORD_LIST *result, *t, *tresult;
+
+ for (t = list, result = (WORD_LIST *)NULL; t; t = t->next)
+ {
+ tresult = word_split (t->word, ifs_value);
+ result = (WORD_LIST *) list_append (result, tresult);
+ }
+ return (result);
+}
+
+/**************************************************
+ * *
+ * Functions to expand an entire WORD_LIST *
+ * *
+ **************************************************/
+
+/* Do any word-expansion-specific cleanup and jump to top_level */
+static void
+exp_jump_to_top_level (v)
+ int v;
+{
+ /* Cleanup code goes here. */
+ expand_no_split_dollar_star = 0; /* XXX */
+ expanding_redir = 0;
+
+ jump_to_top_level (v);
+}
+
+/* Put NLIST (which is a WORD_LIST * of only one element) at the front of
+ ELIST, and set ELIST to the new list. */
+#define PREPEND_LIST(nlist, elist) \
+ do { nlist->next = elist; elist = nlist; } while (0)
+
+/* Separate out any initial variable assignments from TLIST. If set -k has
+ been executed, remove all assignment statements from TLIST. Initial
+ variable assignments and other environment assignments are placed
+ on SUBST_ASSIGN_VARLIST. */
+static WORD_LIST *
+separate_out_assignments (tlist)
+ WORD_LIST *tlist;
+{
+ register WORD_LIST *vp, *lp;
+
+ if (!tlist)
+ return ((WORD_LIST *)NULL);
+
+ if (subst_assign_varlist)
+ dispose_words (subst_assign_varlist); /* Clean up after previous error */
+
+ subst_assign_varlist = (WORD_LIST *)NULL;
+ vp = lp = tlist;
+
+ /* Separate out variable assignments at the start of the command.
+ Loop invariant: vp->next == lp
+ Loop postcondition:
+ lp = list of words left after assignment statements skipped
+ tlist = original list of words
+ */
+ while (lp && (lp->word->flags & W_ASSIGNMENT))
+ {
+ vp = lp;
+ lp = lp->next;
+ }
+
+ /* If lp != tlist, we have some initial assignment statements.
+ We make SUBST_ASSIGN_VARLIST point to the list of assignment
+ words and TLIST point to the remaining words. */
+ if (lp != tlist)
+ {
+ subst_assign_varlist = tlist;
+ /* ASSERT(vp->next == lp); */
+ vp->next = (WORD_LIST *)NULL; /* terminate variable list */
+ tlist = lp; /* remainder of word list */
+ }
+
+ /* vp == end of variable list */
+ /* tlist == remainder of original word list without variable assignments */
+ if (!tlist)
+ /* All the words in tlist were assignment statements */
+ return ((WORD_LIST *)NULL);
+
+ /* ASSERT(tlist != NULL); */
+ /* ASSERT((tlist->word->flags & W_ASSIGNMENT) == 0); */
+
+ /* If the -k option is in effect, we need to go through the remaining
+ words, separate out the assignment words, and place them on
+ SUBST_ASSIGN_VARLIST. */
+ if (place_keywords_in_env)
+ {
+ WORD_LIST *tp; /* tp == running pointer into tlist */
+
+ tp = tlist;
+ lp = tlist->next;
+
+ /* Loop Invariant: tp->next == lp */
+ /* Loop postcondition: tlist == word list without assignment statements */
+ while (lp)
+ {
+ if (lp->word->flags & W_ASSIGNMENT)
+ {
+ /* Found an assignment statement, add this word to end of
+ subst_assign_varlist (vp). */
+ if (!subst_assign_varlist)
+ subst_assign_varlist = vp = lp;
+ else
+ {
+ vp->next = lp;
+ vp = lp;
+ }
+
+ /* Remove the word pointed to by LP from TLIST. */
+ tp->next = lp->next;
+ /* ASSERT(vp == lp); */
+ lp->next = (WORD_LIST *)NULL;
+ lp = tp->next;
+ }
+ else
+ {
+ tp = lp;
+ lp = lp->next;
+ }
+ }
+ }
+ return (tlist);
+}
+
+#define WEXP_VARASSIGN 0x001
+#define WEXP_BRACEEXP 0x002
+#define WEXP_TILDEEXP 0x004
+#define WEXP_PARAMEXP 0x008
+#define WEXP_PATHEXP 0x010
+
+/* All of the expansions, including variable assignments at the start of
+ the list. */
+#define WEXP_ALL (WEXP_VARASSIGN|WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP)
+
+/* All of the expansions except variable assignments at the start of
+ the list. */
+#define WEXP_NOVARS (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP)
+
+/* All of the `shell expansions': brace expansion, tilde expansion, parameter
+ expansion, command substitution, arithmetic expansion, word splitting, and
+ quote removal. */
+#define WEXP_SHELLEXP (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP)
+
+/* Take the list of words in LIST and do the various substitutions. Return
+ a new list of words which is the expanded list, and without things like
+ variable assignments. */
+
+WORD_LIST *
+expand_words (list)
+ WORD_LIST *list;
+{
+ return (expand_word_list_internal (list, WEXP_ALL));
+}
+
+/* Same as expand_words (), but doesn't hack variable or environment
+ variables. */
+WORD_LIST *
+expand_words_no_vars (list)
+ WORD_LIST *list;
+{
+ return (expand_word_list_internal (list, WEXP_NOVARS));
+}
+
+WORD_LIST *
+expand_words_shellexp (list)
+ WORD_LIST *list;
+{
+ return (expand_word_list_internal (list, WEXP_SHELLEXP));
+}
+
+static WORD_LIST *
+glob_expand_word_list (tlist, eflags)
+ WORD_LIST *tlist;
+ int eflags;
+{
+ char **glob_array, *temp_string;
+ register int glob_index;
+ WORD_LIST *glob_list, *output_list, *disposables, *next;
+ WORD_DESC *tword;
+
+ output_list = disposables = (WORD_LIST *)NULL;
+ glob_array = (char **)NULL;
+ while (tlist)
+ {
+ /* For each word, either globbing is attempted or the word is
+ added to orig_list. If globbing succeeds, the results are
+ added to orig_list and the word (tlist) is added to the list
+ of disposable words. If globbing fails and failed glob
+ expansions are left unchanged (the shell default), the
+ original word is added to orig_list. If globbing fails and
+ failed glob expansions are removed, the original word is
+ added to the list of disposable words. orig_list ends up
+ in reverse order and requires a call to REVERSE_LIST to
+ be set right. After all words are examined, the disposable
+ words are freed. */
+ next = tlist->next;
+
+ /* If the word isn't an assignment and contains an unquoted
+ pattern matching character, then glob it. */
+ if ((tlist->word->flags & W_NOGLOB) == 0 &&
+ unquoted_glob_pattern_p (tlist->word->word))
+ {
+ glob_array = shell_glob_filename (tlist->word->word);
+
+ /* Handle error cases.
+ I don't think we should report errors like "No such file
+ or directory". However, I would like to report errors
+ like "Read failed". */
+
+ if (glob_array == 0 || GLOB_FAILED (glob_array))
+ {
+ glob_array = (char **)xmalloc (sizeof (char *));
+ glob_array[0] = (char *)NULL;
+ }
+
+ /* Dequote the current word in case we have to use it. */
+ if (glob_array[0] == NULL)
+ {
+ temp_string = dequote_string (tlist->word->word);
+ free (tlist->word->word);
+ tlist->word->word = temp_string;
+ }
+
+ /* Make the array into a word list. */
+ glob_list = (WORD_LIST *)NULL;
+ for (glob_index = 0; glob_array[glob_index]; glob_index++)
+ {
+ tword = make_bare_word (glob_array[glob_index]);
+ tword->flags |= W_GLOBEXP; /* XXX */
+ glob_list = make_word_list (tword, glob_list);
+ }
+
+ if (glob_list)
+ {
+ output_list = (WORD_LIST *)list_append (glob_list, output_list);
+ PREPEND_LIST (tlist, disposables);
+ }
+ else if (fail_glob_expansion != 0)
+ {
+ report_error (_("no match: %s"), tlist->word->word);
+ jump_to_top_level (DISCARD);
+ }
+ else if (allow_null_glob_expansion == 0)
+ {
+ /* Failed glob expressions are left unchanged. */
+ PREPEND_LIST (tlist, output_list);
+ }
+ else
+ {
+ /* Failed glob expressions are removed. */
+ PREPEND_LIST (tlist, disposables);
+ }
+ }
+ else
+ {
+ /* Dequote the string. */
+ temp_string = dequote_string (tlist->word->word);
+ free (tlist->word->word);
+ tlist->word->word = temp_string;
+ PREPEND_LIST (tlist, output_list);
+ }
+
+ strvec_dispose (glob_array);
+ glob_array = (char **)NULL;
+
+ tlist = next;
+ }
+
+ if (disposables)
+ dispose_words (disposables);
+
+ if (output_list)
+ output_list = REVERSE_LIST (output_list, WORD_LIST *);
+
+ return (output_list);
+}
+
+#if defined (BRACE_EXPANSION)
+static WORD_LIST *
+brace_expand_word_list (tlist, eflags)
+ WORD_LIST *tlist;
+ int eflags;
+{
+ register char **expansions;
+ char *temp_string;
+ WORD_LIST *disposables, *output_list, *next;
+ WORD_DESC *w;
+ int eindex;
+
+ for (disposables = output_list = (WORD_LIST *)NULL; tlist; tlist = next)
+ {
+ next = tlist->next;
+
+ /* Only do brace expansion if the word has a brace character. If
+ not, just add the word list element to BRACES and continue. In
+ the common case, at least when running shell scripts, this will
+ degenerate to a bunch of calls to `xstrchr', and then what is
+ basically a reversal of TLIST into BRACES, which is corrected
+ by a call to REVERSE_LIST () on BRACES when the end of TLIST
+ is reached. */
+ if (xstrchr (tlist->word->word, LBRACE))
+ {
+ expansions = brace_expand (tlist->word->word);
+
+ for (eindex = 0; temp_string = expansions[eindex]; eindex++)
+ {
+ w = make_word (temp_string);
+ /* If brace expansion didn't change the word, preserve
+ the flags. We may want to preserve the flags
+ unconditionally someday -- XXX */
+ if (STREQ (temp_string, tlist->word->word))
+ w->flags = tlist->word->flags;
+ output_list = make_word_list (w, output_list);
+ free (expansions[eindex]);
+ }
+ free (expansions);
+
+ /* Add TLIST to the list of words to be freed after brace
+ expansion has been performed. */
+ PREPEND_LIST (tlist, disposables);
+ }
+ else
+ PREPEND_LIST (tlist, output_list);
+ }
+
+ if (disposables)
+ dispose_words (disposables);
+
+ if (output_list)
+ output_list = REVERSE_LIST (output_list, WORD_LIST *);
+
+ return (output_list);
+}
+#endif
+
+static WORD_LIST *
+shell_expand_word_list (tlist, eflags)
+ WORD_LIST *tlist;
+ int eflags;
+{
+ WORD_LIST *expanded, *orig_list, *new_list, *next, *temp_list;
+ int expanded_something, has_dollar_at;
+ char *temp_string;
+
+ /* We do tilde expansion all the time. This is what 1003.2 says. */
+ new_list = (WORD_LIST *)NULL;
+ for (orig_list = tlist; tlist; tlist = next)
+ {
+ temp_string = tlist->word->word;
+
+ next = tlist->next;
+
+ /* Posix.2 section 3.6.1 says that tildes following `=' in words
+ which are not assignment statements are not expanded. If the
+ shell isn't in posix mode, though, we perform tilde expansion
+ on `likely candidate' unquoted assignment statements (flags
+ include W_ASSIGNMENT but not W_QUOTED). A likely candidate
+ contains an unquoted :~ or =~. Something to think about: we
+ now have a flag that says to perform tilde expansion on arguments
+ to `assignment builtins' like declare and export that look like
+ assignment statements. We now do tilde expansion on such words
+ even in POSIX mode. */
+ if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) &&
+ (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) &&
+ (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string)))
+ {
+ tlist->word->word = bash_tilde_expand (temp_string, 1);
+ free (temp_string);
+ }
+ else if (temp_string[0] == '~')
+ {
+ tlist->word->word = bash_tilde_expand (temp_string, 0);
+ free (temp_string);
+ }
+
+ expanded_something = 0;
+ expanded = expand_word_internal
+ (tlist->word, 0, 0, &has_dollar_at, &expanded_something);
+
+ if (expanded == &expand_word_error || expanded == &expand_word_fatal)
+ {
+ /* By convention, each time this error is returned,
+ tlist->word->word has already been freed. */
+ tlist->word->word = (char *)NULL;
+
+ /* Dispose our copy of the original list. */
+ dispose_words (orig_list);
+ /* Dispose the new list we're building. */
+ dispose_words (new_list);
+
+ last_command_exit_value = EXECUTION_FAILURE;
+ if (expanded == &expand_word_error)
+ exp_jump_to_top_level (DISCARD);
+ else
+ exp_jump_to_top_level (FORCE_EOF);
+ }
+
+ /* Don't split words marked W_NOSPLIT. */
+ if (expanded_something && (tlist->word->flags & W_NOSPLIT) == 0)
+ {
+ temp_list = word_list_split (expanded);
+ dispose_words (expanded);
+ }
+ else
+ {
+ /* If no parameter expansion, command substitution, process
+ substitution, or arithmetic substitution took place, then
+ do not do word splitting. We still have to remove quoted
+ null characters from the result. */
+ word_list_remove_quoted_nulls (expanded);
+ temp_list = expanded;
+ }
+
+ expanded = REVERSE_LIST (temp_list, WORD_LIST *);
+ new_list = (WORD_LIST *)list_append (expanded, new_list);
+ }
+
+ if (orig_list)
+ dispose_words (orig_list);
+
+ if (new_list)
+ new_list = REVERSE_LIST (new_list, WORD_LIST *);
+
+ return (new_list);
+}
+
+/* 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
+ performed.
+
+ This does all of the substitutions: brace expansion, tilde expansion,
+ parameter expansion, command substitution, arithmetic expansion,
+ process substitution, word splitting, and pathname expansion, according
+ to the bits set in EFLAGS. Words with the W_QUOTED or W_NOSPLIT bits
+ set, or for which no expansion is done, do not undergo word splitting.
+ Words with the W_NOGLOB bit set do not undergo pathname expansion. */
+static WORD_LIST *
+expand_word_list_internal (list, eflags)
+ WORD_LIST *list;
+ int eflags;
+{
+ WORD_LIST *new_list, *temp_list;
+ int tint;
+
+ if (list == 0)
+ return ((WORD_LIST *)NULL);
+
+ garglist = new_list = copy_word_list (list);
+ if (eflags & WEXP_VARASSIGN)
+ {
+ garglist = new_list = separate_out_assignments (new_list);
+ 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)
+ {
+ this_command_name = (char *)NULL; /* no arithmetic errors */
+ tint = do_assignment (temp_list->word->word);
+ /* Variable assignment errors in non-interactive shells
+ running in Posix.2 mode cause the shell to exit. */
+ if (tint == 0)
+ {
+ 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);
+ }
+ }
+ dispose_words (subst_assign_varlist);
+ subst_assign_varlist = (WORD_LIST *)NULL;
+ }
+ return ((WORD_LIST *)NULL);
+ }
+ }
+
+ /* Begin expanding the words that remain. The expansions take place on
+ things that aren't really variable assignments. */
+
+#if defined (BRACE_EXPANSION)
+ /* Do brace expansion on this word if there are any brace characters
+ in the string. */
+ if ((eflags & WEXP_BRACEEXP) && brace_expansion && new_list)
+ new_list = brace_expand_word_list (new_list, eflags);
+#endif /* BRACE_EXPANSION */
+
+ /* Perform the `normal' shell expansions: tilde expansion, parameter and
+ variable substitution, command substitution, arithmetic expansion,
+ and word splitting. */
+ new_list = shell_expand_word_list (new_list, eflags);
+
+ /* Okay, we're almost done. Now let's just do some filename
+ globbing. */
+ if (new_list)
+ {
+ if ((eflags & WEXP_PATHEXP) && disallow_filename_globbing == 0)
+ /* Glob expand the word list unless globbing has been disabled. */
+ new_list = glob_expand_word_list (new_list, eflags);
+ else
+ /* Dequote the words, because we're not performing globbing. */
+ new_list = dequote_list (new_list);
+ }
+
+ if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist)
+ {
+ sh_assign_func_t *assign_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_assignment;
+
+ for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
+ {
+ this_command_name = (char *)NULL;
+ tint = (*assign_func) (temp_list->word->word);
+ /* Variable assignment errors in non-interactive shells running
+ in Posix.2 mode cause the shell to exit. */
+ if (tint == 0 && assign_func == do_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);
+ }
+ }
+
+ dispose_words (subst_assign_varlist);
+ subst_assign_varlist = (WORD_LIST *)NULL;
+ }
+
+#if 0
+ tint = list_length (new_list) + 1;
+ RESIZE_MALLOCED_BUFFER (glob_argv_flags, 0, tint, glob_argv_flags_size, 16);
+ for (tint = 0, temp_list = new_list; temp_list; temp_list = temp_list->next)
+ glob_argv_flags[tint++] = (temp_list->word->flags & W_GLOBEXP) ? '1' : '0';
+ glob_argv_flags[tint] = '\0';
+#endif
+
+ return (new_list);
+}
--- /dev/null
+tf is a function
+tf ()
+{
+ echo this is ${0##*/} >/dev/null;
+ echo a | cat - >/dev/null;
+ test -f ${0##*/} && echo ${0##*/} is a regular file;
+ test -d ${0##*/} || echo ${0##*/} is not a directory;
+ echo a;
+ echo b;
+ echo c;
+ echo background >/dev/null & ( exit 1 );
+ echo $?;
+ {
+ echo a
+ };
+ i=0;
+ while (( " i < 3 " )); do
+ test -r /dev/fd/$i;
+ i=$(( i + 1 ));
+ done;
+ [[ -r /dev/fd/0 && -w /dev/fd/1 ]] || echo oops >/dev/null;
+ for name in $( echo 1 2 3 );
+ do
+ test -r /dev/fd/$name;
+ done;
+ if [[ -r /dev/fd/0 && -w /dev/fd/1 ]]; then
+ echo ok >/dev/null;
+ else
+ if (( " 7 > 40 " )); then
+ echo oops;
+ else
+ echo done;
+ fi;
+ fi >/dev/null;
+ case $PATH in
+ *$PWD*)
+ echo \$PWD in \$PATH
+ ;;
+ *)
+ echo \$PWD not in \$PATH
+ ;;
+ esac >/dev/null;
+ while false; do
+ echo z;
+ done >/dev/null;
+ until true; do
+ echo z;
+ done >/dev/null;
+ echo \&\|'()' \{ echo abcde \; \};
+ eval fu\%nc'()' \{ echo abcde \; \};
+ type fu\%nc
+}
+tf2 is a function
+tf2 ()
+{
+ ( {
+ time -p echo a | cat - >/dev/null
+ } ) 2>&1
+}
+cprint.tests is a regular file
+cprint.tests is not a directory
+a
+b
+c
+1
+a
+&|() { echo abcde ; }
+fu%nc is a function
+fu%nc ()
+{
+ echo abcde
+}
--- /dev/null
+trap 'rm /tmp/newhistory' 0
+
+# bad options
+history -x
+# cannot use -r and -w at the same time
+history -r -w /dev/null
+
+# bad option
+fc -v
+
+# all of these should result in an empty history list
+history -c
+history -r /dev/null
+history -n /dev/null
+history -c
+
+HISTFILE=history.list
+HISTCONTROL=ignoreboth
+HISTIGNORE='&:history*:fc*'
+HISTSIZE=32
+
+shopt -s cmdhist
+set -o history
+
+history
+
+fc -l
+fc -nl
+
+fc -lr
+fc -nlr
+
+history -s "echo line for history"
+history
+
+history -p '!!'
+
+fc -nl
+
+HISTFILE=/tmp/newhistory
+history -a
+echo displaying \$HISTFILE after history -a
+cat $HISTFILE
+
+history
+history -w
+cat $HISTFILE
+
+history -s "echo line 2 for history"
+history
+history -p '!e'
+history -p '!!'
+
+# this should show up as one history entry
+for x in one two three
+do
+ :
+done
+history
+
+# just a basic test. a full test suite for history expansion should be
+# created
+set -H
+!!
+!e
+
+unset HISTSIZE
+unset HISTFILE
+
+fc -l 4
+fc -l 4 8
+
+fc -l 502
+fc -l one=two three=four 502
+
+history 4
+
+shopt -so history
+shopt -s expand_aliases
+
+alias r="fc -s"
+
+echo aa ab ac
+
+r a=x
+r x=4 b=8
+
+# this had better fail with `no command found'
+r cc
+
+unalias -a
+alias
+
+set +o history
+
+shopt -q -o history
+echo $?
--- /dev/null
+:; ./shx
+
+sh:
+<&$fd ok
+nlbq Mon Aug 3 02:45:00 EDT 1992
+bang geoff
+quote 712824302
+setbq defmsgid=<1992Aug3.024502.6176@host>
+bgwait sleep done... wait 6187
+
+
+bash:
+<&$fd ok
+nlbq Mon Aug 3 02:45:09 EDT 1992
+bang geoff
+quote 712824311
+setbq defmsgid=<1992Aug3.024512.6212@host>
+bgwait sleep done... wait 6223
+
+
+ash:
+<&$fd shx1: 4: Syntax error: Bad fd number
+nlbq Mon Aug 3 02:45:19 EDT 1992
+bang geoff
+quote getdate: `"now"' not a valid date
+
+setbq defmsgid=<1992Aug3.` echo 024521
+bgwait sleep done... wait 6241
+
+
+ksh:
+<&$fd ok
+nlbq ./shx: 6248 Memory fault - core dumped
+bang geoff
+quote getdate: `"now"' not a valid date
+
+setbq defmsgid=<1992Aug3.024530.6257@host>
+bgwait no such job: 6265
+wait 6265
+sleep done...
+
+zsh:
+<&$fd ok
+nlbq Mon Aug 3 02:45:36 EDT 1992
+bang shx3: event not found: /s/ [4]
+quote 712824337
+setbq defmsgid=<..6290@host>
+bgwait shx7: unmatched " [9]
+sleep done...
+:;
--- /dev/null
+#! /bin/sh
+for cmd in sh bash ash ksh zsh
+do
+ echo
+ echo $cmd:
+ for demo in shx?
+ do
+ $cmd $demo
+ done
+done
--- /dev/null
+echo "warning: all of these tests will fail if history has not been compiled" >&2
+echo "warning: into the shell" >&2
+${THIS_SH} +o histexpand ./histexp.tests > /tmp/xx 2>&1
+diff /tmp/xx histexp.right && rm -f /tmp/xx